From 77cf3a77261edc1d2a70943b0d8fb3c8516a1fb6 Mon Sep 17 00:00:00 2001 From: wentout Date: Sun, 18 Jan 2026 21:57:57 +0300 Subject: [PATCH] TS unnecessary typings removed --- lib/index.d.ts | 17 +++++-------- lib/index.js | 9 ++++--- package-lock.json | 4 +-- package.json | 2 +- src/index.ts | 64 +++++++++-------------------------------------- test/index.ts | 2 ++ tsconfig.json | 26 ++++++++++++------- 7 files changed, 45 insertions(+), 79 deletions(-) diff --git a/lib/index.d.ts b/lib/index.d.ts index 54d85c2..21ad5f0 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,16 +1,11 @@ -export declare const baseTarget: (proto?: object | null) => any; +export declare const baseTarget: (_proto?: object) => any; export declare const SymbolTypeomaticaProxyReference: unique symbol; export declare const BaseConstructorPrototype: { - new (): unknown; - (): void; + new (_target?: T): T; + (_target?: S extends infer S_1 ? S_1 : {}): S; }; -export declare class BaseClass { - constructor(_target: S extends T ? S : never); -} -interface ITypeDefinition { - new (): T; - (): void; +export declare class BaseClass { + constructor(_target?: object); } export declare const SymbolInitialValue: symbol; -export declare const Strict:

(_target?: P | null) => , M extends P & InstanceType, IR extends { [key in keyof M]: M[key]; }>(cstr: T) => IR; -export {}; +export declare const Strict: (_target?: object) => (cstr: T) => T; diff --git a/lib/index.js b/lib/index.js index a184101..79b46ad 100644 --- a/lib/index.js +++ b/lib/index.js @@ -95,7 +95,8 @@ const handlers = { }, }; Object.freeze(handlers); -const baseTarget = (proto = null) => { +const baseTarget = (_proto) => { + const proto = typeof _proto === 'object' ? _proto : null; const answer = Object.create(proto); return answer; }; @@ -112,7 +113,7 @@ const getTypeomaticaProxyReference = (_target) => { const proxy = new Proxy(target, handlers); return proxy; }; -exports.BaseConstructorPrototype = function (_target = null) { +exports.BaseConstructorPrototype = function (_target) { if (!new.target) { const self = exports.BaseConstructorPrototype.bind(this, _target); self.prototype = { @@ -178,7 +179,7 @@ class BaseClass { } } exports.BaseClass = BaseClass; -const strict = function (_target = null) { +const strict = function (_target) { const decorator = function (cstr) { if (cstr.prototype[exports.SymbolTypeomaticaProxyReference]) { return cstr; @@ -231,4 +232,4 @@ Object.defineProperty(module.exports, 'Strict', { }); Object.freeze(exports.BaseConstructorPrototype); Object.freeze(exports.BaseConstructorPrototype.prototype); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsWUFBWSxDQUFDOzs7QUFFYixxQ0FBdUM7QUFFdkMsbUNBT2lCO0FBRWpCLHFDQUE0QztBQVE1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQy9CLFVBQVUsRUFBVixrQkFBVTtJQUNWLE9BQU8sRUFBUCxlQUFPO0lBQ1AsT0FBTyxFQUFQLGVBQU87SUFDUCxPQUFPLEVBQVAsZUFBTztJQUNQLFNBQVMsRUFBVCxpQkFBUztDQUNULENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtJQUUxQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxZQUFvQixFQUFFLFFBQWdCO1FBQzFELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxPQUFPO1lBQ04sR0FBRztnQkFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksY0FBYyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksY0FBYyxDQUFDLG9CQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixPQUFPLE1BQU0sQ0FBQztZQUNmLENBQUM7WUFDRCxHQUFHLENBQUMsZ0JBQXlCO2dCQUM1QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksY0FBYyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksY0FBYyxDQUFDLG9CQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FB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QVUsRUFBRSxJQUFJO0NBQ2hCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0NBQXdCLENBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxDQUFDLGdDQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gb3hsaW50LWRpc2FibGUgdHlwZXNjcmlwdC9uby10aGlzLWFsaWFzXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1kZWJ1Z2dlciAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFcnJvcnNOYW1lcyB9IGZyb20gJy4vZXJyb3JzJztcblxuaW1wb3J0IHtcblx0ZnVuY3Rpb25zLFxuXHRudWxsaXNoLFxuXHRvYmplY3RzLFxuXHRwcmltaXRpdmVzLFxuXHRzcGVjaWFsLFxuXHRpc1ByaW1pdGl2ZVxufSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgRmllbGRDb25zdHJ1Y3RvciB9IGZyb20gJy4vZmllbGRzJztcblxuLy8gdHlwZSBQcm90bzxQLCBUPiA9IFBpY2s8UCwgRXhjbHVkZTxrZXlvZiBQLCBrZXlvZiBUPj4gJiBUO1xuLy8gdHlwZSBGbGF0UHJvdG88UCwgVCwgUyA9IFByb3RvPFAsIFQ+PiA9IHtcbi8vIFx0W2tleSBpbiBrZXlvZiBTXTogU1trZXldXG4vLyB9XG5cblxuY29uc3QgcmVzb2x2ZXIgPSBPYmplY3QuZW50cmllcyh7XG5cdHByaW1pdGl2ZXMsXG5cdHNwZWNpYWwsXG5cdG51bGxpc2gsXG5cdG9iamVjdHMsXG5cdGZ1bmN0aW9uc1xufSkucmVkdWNlKChvYmo6IG9iamVjdCwgW2tleSwgX2hhbmRsZXJdKSA9PiB7XG5cdC8vIEB0cy1pZ25vcmVcblx0b2JqW2tleV0gPSBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlOiBvYmplY3QsIHJlY2VpdmVyOiBvYmplY3QpIHtcblx0XHRjb25zdCBoYW5kbGVyID0gX2hhbmRsZXIoaW5pdGlhbFZhbHVlKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRjb25zdCBpbnZvY2F0aW9uVGhpcyA9IHRoaXM7XG5cdFx0XHRcdGlmIChpbnZvY2F0aW9uVGhpcyAhPT0gcmVjZWl2ZXIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoRXJyb3JzTmFtZXMuQUNDRVNTX0RFTklFRCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gaGFuZGxlci5nZXQoKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHRzZXQocmVwbGFjZW1lbnRWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0XHRjb25zdCBpbnZvY2F0aW9uVGhpcyA9IHRoaXM7XG5cdFx0XHRcdGlmIChpbnZvY2F0aW9uVGhpcyAhPT0gcmVjZWl2ZXIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoRXJyb3JzTmFtZXMuQUNDRVNTX0RFTklFRCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gaGFuZGxlci5zZXQocmVwbGFjZW1lbnRWYWx1ZSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcblxuXHRyZXR1cm4gb2JqO1xufSwge30pO1xuXG5jb25zdCBjcmVhdGVQcm9wZXJ0eSA9IChwcm9wTmFtZTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IHVua25vd24sIHJlY2VpdmVyOiBvYmplY3QpID0+IHtcblxuXHRjb25zdCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblx0Y29uc3QgdmFsdWVJc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlKGluaXRpYWxWYWx1ZSk7XG5cdGNvbnN0IGlzT2JqZWN0ID0gdHlwZW9mIGluaXRpYWxWYWx1ZSA9PT0gJ29iamVjdCc7XG5cdGNvbnN0IGlzRnVuY3Rpb24gPSBpbml0aWFsVmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcblx0Y29uc3QgaXNOdWxsID0gaW5pdGlhbFZhbHVlID09PSBudWxsO1xuXG5cdC8qKlxuXHQgKiBzcGVjaWFsOiB1bmRlZmluZWQgb3IgQmlnSW50IG9yIFN5bWJvbFxuXHQgKiBcdG9yIG90aGVyIG5vbiBjb25zdHJ1Y3RpYmxlIHR5cGVcblx0ICovXG5cblx0Y29uc3QgdHlwZXMgPSB2YWx1ZUlzUHJpbWl0aXZlID8gJ3ByaW1pdGl2ZXMnIDogKFxuXHRcdGlzT2JqZWN0ID8gKFxuXHRcdFx0aXNOdWxsID8gJ251bGxpc2gnIDogJ29iamVjdHMnXG5cdFx0KSA6IChcblx0XHRcdGlzRnVuY3Rpb24gPyAnZnVuY3Rpb25zJyA6ICdzcGVjaWFsJ1xuXHRcdClcblx0KTtcblxuXHRjb25zdCBkZXNjcmlwdG9yID0gKGlzT2JqZWN0ICYmICh2YWx1ZSBpbnN0YW5jZW9mIEZpZWxkQ29uc3RydWN0b3IpKSA/XG5cdFx0dmFsdWVcblx0XHQ6XG5cdFx0e1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdC4uLnJlc29sdmVyW3R5cGVzXSh2YWx1ZSwgcmVjZWl2ZXIpLFxuXHRcdH07XG5cblx0Ly8gaWYgKHZhbHVlIGluc3RhbmNlb2YgRmllbGRDb25zdHJ1Y3Rvcikge1xuXHQvLyBcdGRlc2NyaXB0b3I7XG5cdC8vIFx0ZGVidWdnZXI7XG5cdC8vIH1cblxuXHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHJlY2VpdmVyLCBwcm9wTmFtZSwgZGVzY3JpcHRvcik7XG5cdHJldHVybiByZXN1bHQ7XG5cbn07XG5cbi8vIGxpbmUgYmVsb3cgJ2hyZWYnIGlzIGZvciB1dGlsLmluc3BlY3Qgd29ya3MsIHVzZWZ1bCBmb3IgdjI0XG5jb25zdCBwcm9wczJza2lwID0gbmV3IFNldChbXG5cdFN5bWJvbC50b1N0cmluZ1RhZyxcblx0U3ltYm9sLml0ZXJhdG9yLFxuXHQvLyBTeW1ib2wudG9QcmltaXRpdmUsXG5cdCd0b1N0cmluZycsXG5cdCd2YWx1ZU9mJyxcblx0J2hyZWYnXG5dKTtcbi8vIGNvbnN0IHByb3BzMnNraXAgPSBuZXcgU2V0KFtTeW1ib2wudG9TdHJpbmdUYWcsIFN5bWJvbC5pdGVyYXRvcl0pO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IGhhc05vZGVJbnNwZWN0ID0gKHV0aWwgJiYgdXRpbC5pbnNwZWN0ICYmIHV0aWwuaW5zcGVjdC5jdXN0b20pO1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuKGhhc05vZGVJbnNwZWN0ICYmIChwcm9wczJza2lwLmFkZCh1dGlsLmluc3BlY3QuY3VzdG9tKSkpO1xuXG5jb25zdCBoYW5kbGVycyA9IHtcblx0Z2V0KHRhcmdldDogb2JqZWN0LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiBvYmplY3QpIHtcblx0XHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcblx0XHRpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdGlmIChwcm9wID09PSAndG9KU09OJykge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKHRoaXM6IHR5cGVvZiB0YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZW50cmllcy5yZWR1Y2UoKG9iaiwgW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdG9ialtrZXldID0gdmFsdWUudmFsdWVPZigpO1xuXHRcdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHRcdH0sIHt9KSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCB7IG5hbWUgfSA9IHJlY2VpdmVyLmNvbnN0cnVjdG9yO1xuXHRcdGlmIChwcm9wczJza2lwLmhhcyhwcm9wKSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGAke25hbWV9IGxhY2tzIGRlZmluaXRpb24gb2YgWyAke1N0cmluZyhwcm9wKS52YWx1ZU9mKCl9IF1gO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdFx0fVxuXHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGAke0Vycm9yc05hbWVzLk1JU1NJTkdfUFJPUH06IFsgJHtTdHJpbmcocHJvcCkudmFsdWVPZigpfSBdIGZvciAke25hbWV9YDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0fSxcblx0c2V0KF86IG9iamVjdCwgcHJvcDogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcmVjZWl2ZXI6IG9iamVjdCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNyZWF0ZVByb3BlcnR5KHByb3AsIHZhbHVlLCByZWNlaXZlcik7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblx0c2V0UHJvdG90eXBlT2YoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdTZXR0aW5nIHByb3RvdHlwZSBpcyBub3QgYWxsb3dlZCEnKTtcblx0fSxcblx0Ly8gZGVmaW5lUHJvcGVydHkodGFyZ2V0OiBvYmplY3QsIGtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBvYmplY3QpIHtcblx0ZGVmaW5lUHJvcGVydHkoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdEZWZpbmluZyBuZXcgUHJvcGVydGllcyBpcyBub3QgYWxsb3dlZCEnKTtcblx0XHQvLyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcblx0fSxcblx0ZGVsZXRlUHJvcGVydHkoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0aWVzIERlbGV0aW9uIGlzIG5vdCBhbGxvd2VkIScpO1xuXHR9LFxuXHQvLyBnZXRQcm90b3R5cGVPZigpIHtcblx0Ly8gXHRkZWJ1Z2dlcjtcblx0Ly8gXHR0aHJvdyBuZXcgRXJyb3IoJ0dldHRpbmcgcHJvdG90eXBlIGlzIG5vdCBhbGxvd2VkJyk7XG5cdC8vIH0sXG59O1xuXG5PYmplY3QuZnJlZXplKGhhbmRsZXJzKTtcblxuLy8gdXNlciBoYXZlIHRvIHByZWNpc2VseSBkZWZpbmUgYWxsIHByb3BzXG5leHBvcnQgY29uc3QgYmFzZVRhcmdldCA9IChwcm90bzogb2JqZWN0IHwgbnVsbCA9IG51bGwpID0+IHtcblx0Y29uc3QgYW5zd2VyID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XG5cdHJldHVybiBhbnN3ZXI7XG59O1xuXG5leHBvcnQgY29uc3QgU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZSA9IFN5bWJvbCgnVHlwZcOYbWF0aWNhUHJveHlSZWZlcmVuY2UnKTtcbmNvbnN0IGdldFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UgPSAoX3RhcmdldDogb2JqZWN0KSA9PiB7XG5cdGNvbnN0IHRhcmdldCA9IE9iamVjdC5jcmVhdGUoX3RhcmdldCk7XG5cdGNvbnN0IGlkID0gYFR5cGXDmG1hdGljYVByb3h5UmVmZXJlbmNlLSR7TWF0aC5yYW5kb20oKX1gO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlLCB7XG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIGlkO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcnMpO1xuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBCYXNlQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiA8XG5cdFQgZXh0ZW5kcyBvYmplY3QsXG5cdE0gZXh0ZW5kcyB7XG5cdFx0W1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdOiBudW1iZXJcblx0fSxcblx0SyBleHRlbmRzIHtcblx0XHRba2V5IGluIGtleW9mIFRdOiBUW2tleV1cblx0fSxcblx0UyBleHRlbmRzIHtcblx0XHQoKTogdm9pZFxuXHRcdG5ldygpOiBLXG5cdH0sXG5cdEwgZXh0ZW5kcyBNICYgVCxcblx0TyBleHRlbmRzIHt9LFxuXHRSIGV4dGVuZHMge1xuXHRcdCgpOiBTXG5cdFx0bmV3KCk6IFQgZXh0ZW5kcyBMID8gTCA6IFQgfCB7fVxuXHR9XG4+KFxuXHR0aGlzOiBPIGV4dGVuZHMgTSA/IE0gOiBPLFxuXHRfdGFyZ2V0OiBUIHwgbnVsbCA9IG51bGxcbik6IE0gZXh0ZW5kcyBNID8gTSA6IFIge1xuXHRpZiAoIW5ldy50YXJnZXQpIHtcblxuXHRcdGNvbnN0IHNlbGY6IHtcblx0XHRcdHByb3RvdHlwZToge1xuXHRcdFx0XHRjb25zdHJ1Y3RvcjogdHlwZW9mIEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZVxuXHRcdFx0fVxuXHRcdFx0Ly9AdHMtaWdub3JlXG5cdFx0fSA9IEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZS5iaW5kKHRoaXMsIF90YXJnZXQpO1xuXG5cdFx0c2VsZi5wcm90b3R5cGUgPSB7XG5cdFx0XHRjb25zdHJ1Y3RvcjogQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlXG5cdFx0fTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRyZXR1cm4gc2VsZjtcblxuXHR9XG5cblx0Ly8gQHRzLWlnbm9yZVxuXHRpZiAodGhpc1tTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlXSkge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IHRhcmdldCA9IGJhc2VUYXJnZXQoX3RhcmdldCkgYXMgb2JqZWN0O1xuXG5cdGNvbnN0IEluc3RhbmNlUHJvdG90eXBlID0gZ2V0VHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZSh0YXJnZXQpO1xuXG5cdGxldCBwcm90bztcblx0bGV0IHByb3RvUG9pbnRlciA9IHRoaXMgYXMgb2JqZWN0O1xuXHRsZXQgcHJvdG9Db25zdHJjdXRvcjtcblxuXHRsZXQgY29uc3RydWN0b3JzID0gZmFsc2U7XG5cblx0Ly8gQHRzLWlnbm9yZVxuXHQvLyBjb25zdCBoYXNQcm94eVJlZmVyZW5jZSA9IHByb3RvUG9pbnRlcltTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlXSBhcyB1bmtub3duIGFzIGJvb2xlYW47XG5cdC8vIGlmIChoYXNQcm94eVJlZmVyZW5jZSkge1xuXHQvLyBcdHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgVHlwZcOYbWF0aWNhIGluc3RhbnRpYXRpb25zIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhlIHNhbWUgUHJvdG90eXBlIENoYWluIScpO1xuXHQvLyB9XG5cblx0ZG8ge1xuXHRcdHByb3RvID0gcHJvdG9Qb2ludGVyO1xuXHRcdHByb3RvUG9pbnRlciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG5cdFx0aWYgKEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZS5wcm90b3R5cGUgPT09IHByb3RvUG9pbnRlcikge1xuXHRcdFx0Y29uc3RydWN0b3JzID0gdHJ1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRpZiAoIXByb3RvUG9pbnRlcikgYnJlYWs7XG5cdFx0Y29uc3QgZGVzY3JpcHRvciA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvUG9pbnRlciwgJ2NvbnN0cnVjdG9yJyk7XG5cdFx0aWYgKCFkZXNjcmlwdG9yKSBjb250aW51ZTtcblx0XHRjb25zdCB2YWx1ZSA9IGRlc2NyaXB0b3IudmFsdWUgfHwgZGVzY3JpcHRvci5nZXQ7XG5cdFx0Ly8gaWYgKCF2YWx1ZSkgY29udGludWU7XG5cdFx0cHJvdG9Db25zdHJjdXRvciA9IHZhbHVlO1xuXHR9IHdoaWxlIChwcm90b0NvbnN0cmN1dG9yICE9PSBCYXNlQ29uc3RydWN0b3JQcm90b3R5cGUpO1xuXG5cdGlmICghY29uc3RydWN0b3JzICYmIHByb3RvQ29uc3RyY3V0b3IgIT09IEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZSkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHNldHVwIFR5cGXDmG1hdGljYSBoYW5kbGVyIScpO1xuXHR9XG5cblx0T2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBJbnN0YW5jZVByb3RvdHlwZSk7XG5cdC8vIEB0cy1pZ25vcmVcblx0cmV0dXJuIHRoaXM7XG5cbn0gYXMge1xuXHRuZXcoKTogdW5rbm93blxuXHQoKTogdm9pZFxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuZXhwb3J0IGNsYXNzIEJhc2VDbGFzczxUIGV4dGVuZHMgb2JqZWN0LCBTIGV4dGVuZHMgVD4ge1xuXHRjb25zdHJ1Y3RvcihfdGFyZ2V0OiBTIGV4dGVuZHMgVCA/IFMgOiBuZXZlcikge1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAodGhpc1tTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlXSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0ID0gYmFzZVRhcmdldChfdGFyZ2V0KSBhcyBvYmplY3Q7XG5cdFx0Y29uc3QgcHJveHkgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCk7XG5cdFx0bGV0IHByb3RvOiBvYmplY3QgfCBudWxsID0gdGhpcztcblx0XHRsZXQgcHJvdG9Qb2ludGVyOiBvYmplY3QgfCBudWxsO1xuXHRcdGxldCBmb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xuXHRcdGRvIHtcblx0XHRcdHByb3RvUG9pbnRlciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG5cdFx0XHQvLyBpZiAocHJvdG9Qb2ludGVyW1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdKSB7XG5cdFx0XHQvLyBcdHRocm93IG5ldyBFcnJvcignRG91YmxlIFR5cGXDmG1hdGljYSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQhJyk7XG5cdFx0XHQvLyB9XG5cdFx0XHRpZiAocHJvdG9Qb2ludGVyID09PSBPYmplY3QucHJvdG90eXBlKSB7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHQvKlxuXHRcdFx0Ly8gaXQgY2FuIGJlLCB0aGF0IHByb3RvUG9pbnRlciA9PT0gbnVsbFxuXHRcdFx0Ly8gdGhvdWdoIHRvbyBoYXJkIHRvIGltcGxlbWVudCB0aGlzIHRlc3Rcblx0XHRcdCovXG5cdFx0XHRwcm90byA9IHByb3RvUG9pbnRlcjtcblx0XHR9IHdoaWxlICghZm91bmQpO1xuXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgcHJveHkpO1xuXHR9XG59XG5cbmludGVyZmFjZSBJVHlwZURlZmluaXRpb248VD4ge1xuXHRuZXcoKTogVCxcblx0KCk6IHZvaWRcbn1cblxuLy8gaW50ZXJmYWNlIElUeXBlPFQsIFA+IGV4dGVuZHMgSVR5cGVEZWZpbml0aW9uPFQ+IHtcbi8vIFx0bmV3KC4uLmFyZ3M6IHVua25vd25bXSk6IEZsYXRQcm90bzxQLCBUPlxuLy8gfVxuXG5cbmNvbnN0IHN0cmljdCA9IGZ1bmN0aW9uIDxQIGV4dGVuZHMgb2JqZWN0PihfdGFyZ2V0OiBQIHwgbnVsbCA9IG51bGwpIHtcblx0Y29uc3QgZGVjb3JhdG9yID0gZnVuY3Rpb24gPFxuXHRcdFQgZXh0ZW5kcyBJVHlwZURlZmluaXRpb248VD4sXG5cdFx0Ly8gUyBleHRlbmRzIHsgW2tleSBpbiBrZXlvZiBQXTogUFtrZXldIH0sXG5cdFx0Ly8gUiBleHRlbmRzIElUeXBlPFMsIFQ+LFxuXHRcdE0gZXh0ZW5kcyBQICYgSW5zdGFuY2VUeXBlPFQ+LFxuXHRcdElSIGV4dGVuZHMgeyBba2V5IGluIGtleW9mIE1dOiBNW2tleV0gfVxuXHQ+KGNzdHI6IFQpOiBJUiB7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKGNzdHIucHJvdG90eXBlW1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdKSB7XG5cdFx0XHRyZXR1cm4gY3N0ciBhcyB1bmtub3duIGFzIElSO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldCA9IGJhc2VUYXJnZXQoX3RhcmdldCk7XG5cdFx0Y29uc3QgcHJveHkgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCk7XG5cdFx0Y29uc3QgX3JlcGxhY2VyID0gT2JqZWN0LmNyZWF0ZShwcm94eSk7XG5cblx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY3N0ci5wcm90b3R5cGUsIF9yZXBsYWNlcik7XG5cblx0XHRyZXR1cm4gY3N0ciBhcyB1bmtub3duIGFzIElSO1xuXG5cblx0XHQvLyBjb25zdCBNeUNsYXNzUHJveHkgPSBuZXcgUHJveHkoY3N0ciwge1xuXHRcdC8vIFx0Y29uc3RydWN0KF8sIGFyZ3VtZW50c0xpc3QsIG5ld1RhcmdldCkge1xuXHRcdC8vIFx0XHRkZWJ1Z2dlcjtcblx0XHQvLyBcdFx0Y29uc3QgdGFyZ2V0ID0gYmFzZVRhcmdldChfdGFyZ2V0KTtcblx0XHQvLyBcdFx0Y29uc3QgcHJveHkgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCk7XG5cdFx0Ly8gXHRcdGNvbnN0IF9yZXBsYWNlciA9IE9iamVjdC5jcmVhdGUocHJveHkpO1xuXG5cdFx0Ly8gXHRcdGNvbnN0IF9wcm90byA9IGNzdHIucHJvdG90eXBlO1xuXG5cdFx0Ly8gXHRcdGNvbnN0IHByb3RvID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3Byb3RvKSk7XG5cdFx0Ly8gXHRcdHByb3RvLmlBbVByb3RvID0gdHJ1ZTtcblxuXHRcdC8vIFx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY3N0ci5wcm90b3R5cGUsIHByb3RvKTtcblxuXHRcdC8vIFx0XHRjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKF9wcm90byk7XG5cdFx0Ly8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHByb3RvLCBkZXNjcmlwdG9ycyk7XG5cblx0XHQvLyBcdFx0Y29uc3QgcmVwbGFjZXIgPSBPYmplY3QuY3JlYXRlKF9yZXBsYWNlcik7XG5cdFx0Ly8gXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgcmVwbGFjZXIpO1xuXG5cblx0XHQvLyBcdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNzdHIucHJvdG90eXBlLCBwcm90byk7XG5cdFx0Ly8gXHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuY29uc3RydWN0KGNzdHIsIGFyZ3VtZW50c0xpc3QsIG5ld1RhcmdldCk7XG5cblx0XHQvLyBcdFx0ZGVidWdnZXI7XG5cdFx0Ly8gXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihjc3RyLnByb3RvdHlwZSwgX3Byb3RvKTtcblx0XHQvLyBcdFx0ZGVidWdnZXI7XG5cblx0XHQvLyBcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHQvLyBcdH0sXG5cdFx0Ly8gfSk7XG5cdFx0Ly8gcmV0dXJuIE15Q2xhc3NQcm94eTtcblx0fTtcblxuXHRyZXR1cm4gZGVjb3JhdG9yO1xuXG59O1xuZXhwb3J0IGNvbnN0IHsgU3ltYm9sSW5pdGlhbFZhbHVlIH0gPSBGaWVsZENvbnN0cnVjdG9yO1xuZXhwb3J0IGNvbnN0IFN0cmljdCA9IHN0cmljdDtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnQmFzZUNsYXNzJywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIEJhc2VDbGFzcztcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdGaWVsZENvbnN0cnVjdG9yJywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIEZpZWxkQ29uc3RydWN0b3I7XG5cdH0sXG5cdGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnU3ltYm9sSW5pdGlhbFZhbHVlJywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIFN5bWJvbEluaXRpYWxWYWx1ZTtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlJywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIFN5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2U7XG5cdH0sXG5cdGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYmFzZVRhcmdldCcsIHtcblx0Z2V0KCkge1xuXHRcdHJldHVybiBiYXNlVGFyZ2V0O1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ1N0cmljdCcsIHtcblx0Z2V0KCkge1xuXHRcdHJldHVybiBzdHJpY3Q7XG5cdH0sXG5cdGVudW1lcmFibGU6IHRydWVcbn0pO1xuXG5PYmplY3QuZnJlZXplKEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZSk7XG5PYmplY3QuZnJlZXplKEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZS5wcm90b3R5cGUpO1xuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsWUFBWSxDQUFDOzs7QUFFYixxQ0FBdUM7QUFFdkMsbUNBT2lCO0FBRWpCLHFDQUE0QztBQUU1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQy9CLFVBQVUsRUFBVixrQkFBVTtJQUNWLE9BQU8sRUFBUCxlQUFPO0lBQ1AsT0FBTyxFQUFQLGVBQU87SUFDUCxPQUFPLEVBQVAsZUFBTztJQUNQLFNBQVMsRUFBVCxpQkFBUztDQUNULENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRTtJQUUxQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxZQUFvQixFQUFFLFFBQWdCO1FBQzFELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxPQUFPO1lBQ04sR0FBRztnQkFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksY0FBYyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksY0FBYyxDQUFDLG9CQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixPQUFPLE1BQU0sQ0FBQztZQUNmLENBQUM7WUFDRCxHQUFHLENBQUMsZ0JBQXlCO2dCQUM1QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksY0FBYyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksY0FBYyxDQUFDLG9CQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FB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RUFBRSxRQUFRLEVBQUU7SUFDL0MsR0FBRztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztJQUNELFVBQVUsRUFBRSxJQUFJO0NBQ2hCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0NBQXdCLENBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxDQUFDLGdDQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gb3hsaW50LWRpc2FibGUgdHlwZXNjcmlwdC9uby10aGlzLWFsaWFzXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1kZWJ1Z2dlciAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgeyBFcnJvcnNOYW1lcyB9IGZyb20gJy4vZXJyb3JzJztcblxuaW1wb3J0IHtcblx0ZnVuY3Rpb25zLFxuXHRudWxsaXNoLFxuXHRvYmplY3RzLFxuXHRwcmltaXRpdmVzLFxuXHRzcGVjaWFsLFxuXHRpc1ByaW1pdGl2ZVxufSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IHsgRmllbGRDb25zdHJ1Y3RvciB9IGZyb20gJy4vZmllbGRzJztcblxuY29uc3QgcmVzb2x2ZXIgPSBPYmplY3QuZW50cmllcyh7XG5cdHByaW1pdGl2ZXMsXG5cdHNwZWNpYWwsXG5cdG51bGxpc2gsXG5cdG9iamVjdHMsXG5cdGZ1bmN0aW9uc1xufSkucmVkdWNlKChvYmo6IG9iamVjdCwgW2tleSwgX2hhbmRsZXJdKSA9PiB7XG5cdC8vIEB0cy1pZ25vcmVcblx0b2JqW2tleV0gPSBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlOiBvYmplY3QsIHJlY2VpdmVyOiBvYmplY3QpIHtcblx0XHRjb25zdCBoYW5kbGVyID0gX2hhbmRsZXIoaW5pdGlhbFZhbHVlKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRjb25zdCBpbnZvY2F0aW9uVGhpcyA9IHRoaXM7XG5cdFx0XHRcdGlmIChpbnZvY2F0aW9uVGhpcyAhPT0gcmVjZWl2ZXIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoRXJyb3JzTmFtZXMuQUNDRVNTX0RFTklFRCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gaGFuZGxlci5nZXQoKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cdFx0XHRzZXQocmVwbGFjZW1lbnRWYWx1ZTogdW5rbm93bikge1xuXHRcdFx0XHRjb25zdCBpbnZvY2F0aW9uVGhpcyA9IHRoaXM7XG5cdFx0XHRcdGlmIChpbnZvY2F0aW9uVGhpcyAhPT0gcmVjZWl2ZXIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoRXJyb3JzTmFtZXMuQUNDRVNTX0RFTklFRCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gaGFuZGxlci5zZXQocmVwbGFjZW1lbnRWYWx1ZSk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcblxuXHRyZXR1cm4gb2JqO1xufSwge30pO1xuXG5jb25zdCBjcmVhdGVQcm9wZXJ0eSA9IChwcm9wTmFtZTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IHVua25vd24sIHJlY2VpdmVyOiBvYmplY3QpID0+IHtcblxuXHRjb25zdCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTtcblx0Y29uc3QgdmFsdWVJc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlKGluaXRpYWxWYWx1ZSk7XG5cdGNvbnN0IGlzT2JqZWN0ID0gdHlwZW9mIGluaXRpYWxWYWx1ZSA9PT0gJ29iamVjdCc7XG5cdGNvbnN0IGlzRnVuY3Rpb24gPSBpbml0aWFsVmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbjtcblx0Y29uc3QgaXNOdWxsID0gaW5pdGlhbFZhbHVlID09PSBudWxsO1xuXG5cdC8qKlxuXHQgKiBzcGVjaWFsOiB1bmRlZmluZWQgb3IgQmlnSW50IG9yIFN5bWJvbFxuXHQgKiBcdG9yIG90aGVyIG5vbiBjb25zdHJ1Y3RpYmxlIHR5cGVcblx0ICovXG5cblx0Y29uc3QgdHlwZXMgPSB2YWx1ZUlzUHJpbWl0aXZlID8gJ3ByaW1pdGl2ZXMnIDogKFxuXHRcdGlzT2JqZWN0ID8gKFxuXHRcdFx0aXNOdWxsID8gJ251bGxpc2gnIDogJ29iamVjdHMnXG5cdFx0KSA6IChcblx0XHRcdGlzRnVuY3Rpb24gPyAnZnVuY3Rpb25zJyA6ICdzcGVjaWFsJ1xuXHRcdClcblx0KTtcblxuXHRjb25zdCBkZXNjcmlwdG9yID0gKGlzT2JqZWN0ICYmICh2YWx1ZSBpbnN0YW5jZW9mIEZpZWxkQ29uc3RydWN0b3IpKSA/XG5cdFx0dmFsdWVcblx0XHQ6XG5cdFx0e1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdC4uLnJlc29sdmVyW3R5cGVzXSh2YWx1ZSwgcmVjZWl2ZXIpLFxuXHRcdH07XG5cblx0Ly8gaWYgKHZhbHVlIGluc3RhbmNlb2YgRmllbGRDb25zdHJ1Y3Rvcikge1xuXHQvLyBcdGRlc2NyaXB0b3I7XG5cdC8vIFx0ZGVidWdnZXI7XG5cdC8vIH1cblxuXHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHJlY2VpdmVyLCBwcm9wTmFtZSwgZGVzY3JpcHRvcik7XG5cdHJldHVybiByZXN1bHQ7XG5cbn07XG5cbi8vIGxpbmUgYmVsb3cgJ2hyZWYnIGlzIGZvciB1dGlsLmluc3BlY3Qgd29ya3MsIHVzZWZ1bCBmb3IgdjI0XG5jb25zdCBwcm9wczJza2lwID0gbmV3IFNldChbXG5cdFN5bWJvbC50b1N0cmluZ1RhZyxcblx0U3ltYm9sLml0ZXJhdG9yLFxuXHQvLyBTeW1ib2wudG9QcmltaXRpdmUsXG5cdCd0b1N0cmluZycsXG5cdCd2YWx1ZU9mJyxcblx0J2hyZWYnXG5dKTtcbi8vIGNvbnN0IHByb3BzMnNraXAgPSBuZXcgU2V0KFtTeW1ib2wudG9TdHJpbmdUYWcsIFN5bWJvbC5pdGVyYXRvcl0pO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IGhhc05vZGVJbnNwZWN0ID0gKHV0aWwgJiYgdXRpbC5pbnNwZWN0ICYmIHV0aWwuaW5zcGVjdC5jdXN0b20pO1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuKGhhc05vZGVJbnNwZWN0ICYmIChwcm9wczJza2lwLmFkZCh1dGlsLmluc3BlY3QuY3VzdG9tKSkpO1xuXG5jb25zdCBoYW5kbGVycyA9IHtcblx0Z2V0KHRhcmdldDogb2JqZWN0LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiBvYmplY3QpIHtcblx0XHRjb25zdCByZXN1bHQgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcblx0XHRpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdGlmIChwcm9wID09PSAndG9KU09OJykge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKHRoaXM6IHR5cGVvZiB0YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpO1xuXHRcdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZW50cmllcy5yZWR1Y2UoKG9iaiwgW2tleSwgdmFsdWVdKSA9PiB7XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdG9ialtrZXldID0gdmFsdWUudmFsdWVPZigpO1xuXHRcdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHRcdH0sIHt9KSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRjb25zdCB7IG5hbWUgfSA9IHJlY2VpdmVyLmNvbnN0cnVjdG9yO1xuXHRcdGlmIChwcm9wczJza2lwLmhhcyhwcm9wKSkge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGAke25hbWV9IGxhY2tzIGRlZmluaXRpb24gb2YgWyAke1N0cmluZyhwcm9wKS52YWx1ZU9mKCl9IF1gO1xuXHRcdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdFx0fVxuXHRcdGNvbnN0IGVycm9yTWVzc2FnZSA9IGAke0Vycm9yc05hbWVzLk1JU1NJTkdfUFJPUH06IFsgJHtTdHJpbmcocHJvcCkudmFsdWVPZigpfSBdIGZvciAke25hbWV9YDtcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0fSxcblx0c2V0KF86IG9iamVjdCwgcHJvcDogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgcmVjZWl2ZXI6IG9iamVjdCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNyZWF0ZVByb3BlcnR5KHByb3AsIHZhbHVlLCByZWNlaXZlcik7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblx0c2V0UHJvdG90eXBlT2YoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdTZXR0aW5nIHByb3RvdHlwZSBpcyBub3QgYWxsb3dlZCEnKTtcblx0fSxcblx0Ly8gZGVmaW5lUHJvcGVydHkodGFyZ2V0OiBvYmplY3QsIGtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBvYmplY3QpIHtcblx0ZGVmaW5lUHJvcGVydHkoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdEZWZpbmluZyBuZXcgUHJvcGVydGllcyBpcyBub3QgYWxsb3dlZCEnKTtcblx0XHQvLyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcblx0fSxcblx0ZGVsZXRlUHJvcGVydHkoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0aWVzIERlbGV0aW9uIGlzIG5vdCBhbGxvd2VkIScpO1xuXHR9LFxuXHQvLyBnZXRQcm90b3R5cGVPZigpIHtcblx0Ly8gXHRkZWJ1Z2dlcjtcblx0Ly8gXHR0aHJvdyBuZXcgRXJyb3IoJ0dldHRpbmcgcHJvdG90eXBlIGlzIG5vdCBhbGxvd2VkJyk7XG5cdC8vIH0sXG59O1xuXG5PYmplY3QuZnJlZXplKGhhbmRsZXJzKTtcblxuLy8gdXNlciBoYXZlIHRvIHByZWNpc2VseSBkZWZpbmUgYWxsIHByb3BzXG5leHBvcnQgY29uc3QgYmFzZVRhcmdldCA9IChfcHJvdG8/OiBvYmplY3QpID0+IHtcblx0Y29uc3QgcHJvdG8gPSB0eXBlb2YgX3Byb3RvID09PSAnb2JqZWN0JyA/IF9wcm90byA6IG51bGw7XG5cdGNvbnN0IGFuc3dlciA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xuXHRyZXR1cm4gYW5zd2VyO1xufTtcblxuZXhwb3J0IGNvbnN0IFN5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UgPSBTeW1ib2woJ1R5cGXDmG1hdGljYVByb3h5UmVmZXJlbmNlJyk7XG5jb25zdCBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlID0gKF90YXJnZXQ6IG9iamVjdCkgPT4ge1xuXHRjb25zdCB0YXJnZXQgPSBPYmplY3QuY3JlYXRlKF90YXJnZXQpO1xuXHRjb25zdCBpZCA9IGBUeXBlw5htYXRpY2FQcm94eVJlZmVyZW5jZS0ke01hdGgucmFuZG9tKCl9YDtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZSwge1xuXHRcdGdldCgpIHtcblx0XHRcdHJldHVybiBpZDtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXJzKTtcblx0cmV0dXJuIHByb3h5O1xufTtcblxuXG5leHBvcnQgY29uc3QgQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBUPih0aGlzOiBTIGV4dGVuZHMgVCA/IFMgOiB7fSwgX3RhcmdldD86IFQgKTogVCB7XG5cdGlmICghbmV3LnRhcmdldCkge1xuXG5cdFx0Y29uc3Qgc2VsZjoge1xuXHRcdFx0cHJvdG90eXBlOiB7XG5cdFx0XHRcdGNvbnN0cnVjdG9yOiB0eXBlb2YgQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlXG5cdFx0XHR9XG5cdFx0XHQvL0B0cy1pZ25vcmVcblx0XHR9ID0gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlLmJpbmQodGhpcywgX3RhcmdldCk7XG5cblx0XHRzZWxmLnByb3RvdHlwZSA9IHtcblx0XHRcdGNvbnN0cnVjdG9yOiBCYXNlQ29uc3RydWN0b3JQcm90b3R5cGVcblx0XHR9O1xuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiBzZWxmO1xuXG5cdH1cblxuXHQvLyBAdHMtaWdub3JlXG5cdGlmICh0aGlzW1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdKSB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgdGFyZ2V0ID0gYmFzZVRhcmdldChfdGFyZ2V0KSBhcyBvYmplY3Q7XG5cblx0Y29uc3QgSW5zdGFuY2VQcm90b3R5cGUgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCk7XG5cblx0bGV0IHByb3RvO1xuXHRsZXQgcHJvdG9Qb2ludGVyID0gdGhpcyBhcyBvYmplY3Q7XG5cdGxldCBwcm90b0NvbnN0cmN1dG9yO1xuXG5cdGxldCBjb25zdHJ1Y3RvcnMgPSBmYWxzZTtcblxuXHQvLyBAdHMtaWdub3JlXG5cdC8vIGNvbnN0IGhhc1Byb3h5UmVmZXJlbmNlID0gcHJvdG9Qb2ludGVyW1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2VdIGFzIHVua25vd24gYXMgYm9vbGVhbjtcblx0Ly8gaWYgKGhhc1Byb3h5UmVmZXJlbmNlKSB7XG5cdC8vIFx0dGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSBUeXBlw5htYXRpY2EgaW5zdGFudGlhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGUgc2FtZSBQcm90b3R5cGUgQ2hhaW4hJyk7XG5cdC8vIH1cblxuXHRkbyB7XG5cdFx0cHJvdG8gPSBwcm90b1BvaW50ZXI7XG5cdFx0cHJvdG9Qb2ludGVyID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcblx0XHRpZiAoQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlLnByb3RvdHlwZSA9PT0gcHJvdG9Qb2ludGVyKSB7XG5cdFx0XHRjb25zdHJ1Y3RvcnMgPSB0cnVlO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmICghcHJvdG9Qb2ludGVyKSBicmVhaztcblx0XHRjb25zdCBkZXNjcmlwdG9yID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG9Qb2ludGVyLCAnY29uc3RydWN0b3InKTtcblx0XHRpZiAoIWRlc2NyaXB0b3IpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHZhbHVlID0gZGVzY3JpcHRvci52YWx1ZSB8fCBkZXNjcmlwdG9yLmdldDtcblx0XHQvLyBpZiAoIXZhbHVlKSBjb250aW51ZTtcblx0XHRwcm90b0NvbnN0cmN1dG9yID0gdmFsdWU7XG5cdH0gd2hpbGUgKHByb3RvQ29uc3RyY3V0b3IgIT09IEJhc2VDb25zdHJ1Y3RvclByb3RvdHlwZSk7XG5cblx0aWYgKCFjb25zdHJ1Y3RvcnMgJiYgcHJvdG9Db25zdHJjdXRvciAhPT0gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gc2V0dXAgVHlwZcOYbWF0aWNhIGhhbmRsZXIhJyk7XG5cdH1cblxuXHRPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG8sIEluc3RhbmNlUHJvdG90eXBlKTtcblx0Ly8gQHRzLWlnbm9yZVxuXHRyZXR1cm4gdGhpcztcblxufSBhcyB7XG5cdG5ldzxUIGV4dGVuZHMgb2JqZWN0IHwge30+KF90YXJnZXQ/OiBUKTogVFxuXHQ8VCBleHRlbmRzIG9iamVjdCB8IHt9LCBTIGV4dGVuZHMgVD4oX3RhcmdldD86IFMgZXh0ZW5kcyBpbmZlciBTID8gUyA6IHt9KTogU1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuZXhwb3J0IGNsYXNzIEJhc2VDbGFzcyB7XG5cdGNvbnN0cnVjdG9yKF90YXJnZXQ/OiBvYmplY3QpIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKHRoaXNbU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZV0pIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldCA9IGJhc2VUYXJnZXQoX3RhcmdldCkgYXMgb2JqZWN0O1xuXHRcdGNvbnN0IHByb3h5ID0gZ2V0VHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZSh0YXJnZXQpO1xuXHRcdGxldCBwcm90bzogb2JqZWN0IHwgbnVsbCA9IHRoaXM7XG5cdFx0bGV0IHByb3RvUG9pbnRlcjogb2JqZWN0IHwgbnVsbDtcblx0XHRsZXQgZm91bmQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0XHRkbyB7XG5cdFx0XHRwcm90b1BvaW50ZXIgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pO1xuXHRcdFx0Ly8gaWYgKHByb3RvUG9pbnRlcltTeW1ib2xUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlXSkge1xuXHRcdFx0Ly8gXHR0aHJvdyBuZXcgRXJyb3IoJ0RvdWJsZSBUeXBlw5htYXRpY2EgZXh0ZW5zaW9uIGlzIG5vdCBhbGxvd2VkIScpO1xuXHRcdFx0Ly8gfVxuXHRcdFx0aWYgKHByb3RvUG9pbnRlciA9PT0gT2JqZWN0LnByb3RvdHlwZSkge1xuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Lypcblx0XHRcdC8vIGl0IGNhbiBiZSwgdGhhdCBwcm90b1BvaW50ZXIgPT09IG51bGxcblx0XHRcdC8vIHRob3VnaCB0b28gaGFyZCB0byBpbXBsZW1lbnQgdGhpcyB0ZXN0XG5cdFx0XHQqL1xuXHRcdFx0cHJvdG8gPSBwcm90b1BvaW50ZXI7XG5cdFx0fSB3aGlsZSAoIWZvdW5kKTtcblx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG8sIHByb3h5KTtcblx0fVxufVxuXG5cbmNvbnN0IHN0cmljdCA9IGZ1bmN0aW9uIChfdGFyZ2V0Pzogb2JqZWN0KSB7XG5cdGNvbnN0IGRlY29yYXRvciA9IGZ1bmN0aW9uPFQ+KGNzdHI6IFQpOiBUIHtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoY3N0ci5wcm90b3R5cGVbU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZV0pIHtcblx0XHRcdHJldHVybiBjc3RyO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldCA9IGJhc2VUYXJnZXQoX3RhcmdldCk7XG5cdFx0Y29uc3QgcHJveHkgPSBnZXRUeXBlb21hdGljYVByb3h5UmVmZXJlbmNlKHRhcmdldCk7XG5cdFx0Y29uc3QgX3JlcGxhY2VyID0gT2JqZWN0LmNyZWF0ZShwcm94eSk7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNzdHIucHJvdG90eXBlLCBfcmVwbGFjZXIpO1xuXG5cdFx0cmV0dXJuIGNzdHI7XG5cblxuXHRcdC8vIGNvbnN0IE15Q2xhc3NQcm94eSA9IG5ldyBQcm94eShjc3RyLCB7XG5cdFx0Ly8gXHRjb25zdHJ1Y3QoXywgYXJndW1lbnRzTGlzdCwgbmV3VGFyZ2V0KSB7XG5cdFx0Ly8gXHRcdGRlYnVnZ2VyO1xuXHRcdC8vIFx0XHRjb25zdCB0YXJnZXQgPSBiYXNlVGFyZ2V0KF90YXJnZXQpO1xuXHRcdC8vIFx0XHRjb25zdCBwcm94eSA9IGdldFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UodGFyZ2V0KTtcblx0XHQvLyBcdFx0Y29uc3QgX3JlcGxhY2VyID0gT2JqZWN0LmNyZWF0ZShwcm94eSk7XG5cblx0XHQvLyBcdFx0Y29uc3QgX3Byb3RvID0gY3N0ci5wcm90b3R5cGU7XG5cblx0XHQvLyBcdFx0Y29uc3QgcHJvdG8gPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pKTtcblx0XHQvLyBcdFx0cHJvdG8uaUFtUHJvdG8gPSB0cnVlO1xuXG5cdFx0Ly8gXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZihjc3RyLnByb3RvdHlwZSwgcHJvdG8pO1xuXG5cdFx0Ly8gXHRcdGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoX3Byb3RvKTtcblx0XHQvLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocHJvdG8sIGRlc2NyaXB0b3JzKTtcblxuXHRcdC8vIFx0XHRjb25zdCByZXBsYWNlciA9IE9iamVjdC5jcmVhdGUoX3JlcGxhY2VyKTtcblx0XHQvLyBcdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCByZXBsYWNlcik7XG5cblxuXHRcdC8vIFx0XHRPYmplY3Quc2V0UHJvdG90eXBlT2YoY3N0ci5wcm90b3R5cGUsIHByb3RvKTtcblx0XHQvLyBcdFx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoY3N0ciwgYXJndW1lbnRzTGlzdCwgbmV3VGFyZ2V0KTtcblxuXHRcdC8vIFx0XHRkZWJ1Z2dlcjtcblx0XHQvLyBcdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mKGNzdHIucHJvdG90eXBlLCBfcHJvdG8pO1xuXHRcdC8vIFx0XHRkZWJ1Z2dlcjtcblxuXHRcdC8vIFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdC8vIFx0fSxcblx0XHQvLyB9KTtcblx0XHQvLyByZXR1cm4gTXlDbGFzc1Byb3h5O1xuXHR9O1xuXG5cdHJldHVybiBkZWNvcmF0b3I7XG5cbn07XG5leHBvcnQgY29uc3QgeyBTeW1ib2xJbml0aWFsVmFsdWUgfSA9IEZpZWxkQ29uc3RydWN0b3I7XG5leHBvcnQgY29uc3QgU3RyaWN0ID0gc3RyaWN0O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdCYXNlQ2xhc3MnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gQmFzZUNsYXNzO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ0ZpZWxkQ29uc3RydWN0b3InLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gRmllbGRDb25zdHJ1Y3Rvcjtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdTeW1ib2xJbml0aWFsVmFsdWUnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gU3ltYm9sSW5pdGlhbFZhbHVlO1xuXHR9LFxuXHRlbnVtZXJhYmxlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ1N5bWJvbFR5cGVvbWF0aWNhUHJveHlSZWZlcmVuY2UnLCB7XG5cdGdldCgpIHtcblx0XHRyZXR1cm4gU3ltYm9sVHlwZW9tYXRpY2FQcm94eVJlZmVyZW5jZTtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdiYXNlVGFyZ2V0Jywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIGJhc2VUYXJnZXQ7XG5cdH0sXG5cdGVudW1lcmFibGU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnU3RyaWN0Jywge1xuXHRnZXQoKSB7XG5cdFx0cmV0dXJuIHN0cmljdDtcblx0fSxcblx0ZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5cbk9iamVjdC5mcmVlemUoQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlKTtcbk9iamVjdC5mcmVlemUoQmFzZUNvbnN0cnVjdG9yUHJvdG90eXBlLnByb3RvdHlwZSk7XG4iXX0= \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1d67f42..33498a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "typeomatica", - "version": "0.3.5", + "version": "0.3.55", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "typeomatica", - "version": "0.3.5", + "version": "0.3.55", "license": "MIT", "devDependencies": { "@eslint/eslintrc": "^3.3.3", diff --git a/package.json b/package.json index 6815934..8778038 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typeomatica", - "version": "0.3.5", + "version": "0.3.55", "description": "type logic against javascript metaprogramming", "engines": { "node": ">=16" diff --git a/src/index.ts b/src/index.ts index 088d8c6..1140236 100644 --- a/src/index.ts +++ b/src/index.ts @@ -15,12 +15,6 @@ import { import { FieldConstructor } from './fields'; -// type Proto = Pick> & T; -// type FlatProto> = { -// [key in keyof S]: S[key] -// } - - const resolver = Object.entries({ primitives, special, @@ -158,7 +152,8 @@ const handlers = { Object.freeze(handlers); // user have to precisely define all props -export const baseTarget = (proto: object | null = null) => { +export const baseTarget = (_proto?: object) => { + const proto = typeof _proto === 'object' ? _proto : null; const answer = Object.create(proto); return answer; }; @@ -177,28 +172,7 @@ const getTypeomaticaProxyReference = (_target: object) => { }; -export const BaseConstructorPrototype = function < - T extends object, - M extends { - [SymbolTypeomaticaProxyReference]: number - }, - K extends { - [key in keyof T]: T[key] - }, - S extends { - (): void - new(): K - }, - L extends M & T, - O extends {}, - R extends { - (): S - new(): T extends L ? L : T | {} - } ->( - this: O extends M ? M : O, - _target: T | null = null -): M extends M ? M : R { +export const BaseConstructorPrototype = function (this: S extends T ? S : {}, _target?: T ): T { if (!new.target) { const self: { @@ -263,8 +237,8 @@ export const BaseConstructorPrototype = function < return this; } as { - new(): unknown - (): void + new(_target?: T): T + (_target?: S extends infer S ? S : {}): S }; Object.defineProperty(module, 'exports', { @@ -274,8 +248,8 @@ Object.defineProperty(module, 'exports', { enumerable: true }); -export class BaseClass { - constructor(_target: S extends T ? S : never) { +export class BaseClass { + constructor(_target?: object) { // @ts-ignore if (this[SymbolTypeomaticaProxyReference]) { return this; @@ -305,37 +279,23 @@ export class BaseClass { } } -interface ITypeDefinition { - new(): T, - (): void -} - -// interface IType extends ITypeDefinition { -// new(...args: unknown[]): FlatProto -// } - -const strict = function

(_target: P | null = null) { - const decorator = function < - T extends ITypeDefinition, - // S extends { [key in keyof P]: P[key] }, - // R extends IType, - M extends P & InstanceType, - IR extends { [key in keyof M]: M[key] } - >(cstr: T): IR { +const strict = function (_target?: object) { + const decorator = function(cstr: T): T { // @ts-ignore if (cstr.prototype[SymbolTypeomaticaProxyReference]) { - return cstr as unknown as IR; + return cstr; } const target = baseTarget(_target); const proxy = getTypeomaticaProxyReference(target); const _replacer = Object.create(proxy); + // @ts-ignore Object.setPrototypeOf(cstr.prototype, _replacer); - return cstr as unknown as IR; + return cstr; // const MyClassProxy = new Proxy(cstr, { diff --git a/test/index.ts b/test/index.ts index d85aa6f..44bfe5c 100644 --- a/test/index.ts +++ b/test/index.ts @@ -1,6 +1,7 @@ // oxlint-disable no-unused-expressions // oxlint-disable typescript/no-this-alias /* eslint-disable no-debugger */ + 'use strict'; import { describe, expect, test } from '@jest/globals'; @@ -789,6 +790,7 @@ describe('coverage: ', () => { expect(cov4.hidden).toBeTruthy(); expect(cov4.passed).toBeTruthy(); + @Strict(hiddenValues) class CovCLS5 { starter = 5; diff --git a/tsconfig.json b/tsconfig.json index 27750eb..ad75154 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,22 +4,30 @@ "target": "es6", "strict": true, "alwaysStrict": true, - "strictFunctionTypes": true, + + "esModuleInterop": false, + "allowSyntheticDefaultImports": false, + + "declaration": true, "diagnostics": true, - "noImplicitThis": true, + "experimentalDecorators": true, "extendedDiagnostics": true, - "noImplicitReturns": true, + "forceConsistentCasingInFileNames": true, + "inlineSourceMap": true, + "inlineSources": true, + + "isolatedModules": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitThis": true, "noUnusedLocals": true, "noUnusedParameters": true, - "declaration": true, - "inlineSourceMap": true, - "inlineSources": true, "outDir": "lib", - "traceResolution": false, "removeComments": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "traceResolution": false, "types": ["node"] }, "include": [