UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

137 lines 18.4 kB
/** * @packageDocumentation * @module utils */ import { debounce } from 'lodash-es'; import { BehaviorSubject } from 'rxjs'; const checkDescriptor = (target, propertyKey) => { const oDescriptor = Object.getOwnPropertyDescriptor(target, propertyKey); if (oDescriptor && !oDescriptor.configurable) { throw new TypeError(`property ${String(propertyKey)} is not configurable`); } return { oGetter: oDescriptor?.get, oSetter: oDescriptor?.set, oDescriptor, }; }; const strictCheckDescriptor = (target, propertyKey) => { const { oGetter, oSetter, oDescriptor } = checkDescriptor(target, propertyKey); if (oGetter || oSetter) { throw new TypeError(`property ${String(propertyKey)} should not define getter or setter`); } return oDescriptor; }; export function ValueHook(setter, getter, afterSetter) { return (target, propertyKey) => { const { oGetter, oSetter } = checkDescriptor(target, propertyKey); const symbol = Symbol(propertyKey); Object.defineProperty(target, propertyKey, { enumerable: true, configurable: true, get() { return getter ? getter.call(this, this[symbol]) : oGetter ? oGetter.call(this) : this[symbol]; }, set(value) { if (value === this[propertyKey] || setter?.call(this, value) === false) { return; } if (oSetter) { oSetter.call(this, value); } this[symbol] = value; afterSetter?.call(this, value); }, }); }; } export function ObservableInput(propertyKey = true, initialValue) { return (target, oPropertyKey) => { if (!oPropertyKey.endsWith('$')) { throw new TypeError(`property ${oPropertyKey} should be an Observable and its name should end with $`); } strictCheckDescriptor(target, oPropertyKey); const symbol = Symbol(oPropertyKey); // eslint-disable-next-line prefer-const let oPropertyValue; Object.defineProperty(target, oPropertyKey, { enumerable: true, configurable: true, get() { return (this[symbol] || (this[symbol] = new BehaviorSubject( // when no initialValue passed in, use the original property val initialValue === undefined ? oPropertyValue : initialValue))); }, set(value) { this[oPropertyKey].next(value); }, }); if (!propertyKey) { return; } if (propertyKey === true) { propertyKey = oPropertyKey.replace(/\$+$/, ''); } const oDescriptor = strictCheckDescriptor(target, propertyKey); oPropertyValue = oDescriptor ? oDescriptor.value : target[propertyKey]; Object.defineProperty(target, propertyKey, { enumerable: true, configurable: true, get() { return this[oPropertyKey].getValue(); }, set(value) { this[oPropertyKey].next(value); }, }); }; } /** * @see https://github.com/NoHomey/bind-decorator */ // eslint-disable-next-line @typescript-eslint/ban-types -- intended export function bind(_target, propertyKey, descriptor) { if (typeof descriptor.value !== 'function') { throw new TypeError(`Only methods can be decorated with @bind. <${propertyKey}> is not a method!`); } return { configurable: true, get() { const bound = descriptor.value.bind(this); // Credits to https://github.com/andreypopp/autobind-decorator for memoizing the result of bind against a symbol on the instance. Object.defineProperty(this, propertyKey, { value: bound, configurable: true, writable: true, }); return bound; }, }; } // lodash 的 debounce 类型约束要求 (...args: any) => any export function debounceFn(delay = 200, options) { return function (_target, propertyKey, descriptor) { if (typeof descriptor.value !== 'function') { throw new TypeError(`Only methods can be decorated with @bind. <${propertyKey}> is not a method!`); } return { configurable: true, get() { const bound = debounce(descriptor.value, delay, options); Object.defineProperty(this, propertyKey, { value: bound, configurable: true, writable: true, }); return bound; }, }; }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb3JlL3V0aWxzL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFtQyxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUl2QyxNQUFNLGVBQWUsR0FBRyxDQUF1QixNQUFTLEVBQUUsV0FBYyxFQUFFLEVBQUU7SUFDMUUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUV6RSxJQUFJLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QyxNQUFNLElBQUksU0FBUyxDQUFDLFlBQVksTUFBTSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHO1FBQ3pCLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRztRQUN6QixXQUFXO0tBQ1osQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsTUFBUyxFQUNULFdBQWMsRUFDZCxFQUFFO0lBQ0YsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsZUFBZSxDQUN2RCxNQUFNLEVBQ04sV0FBVyxDQUNaLENBQUM7SUFFRixJQUFJLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksU0FBUyxDQUNqQixZQUFZLE1BQU0sQ0FBQyxXQUFXLENBQUMscUNBQXFDLENBQ3JFLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxV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Q0FBQztBQUNKLENBQUM7QUFFRCxpREFBaUQ7QUFDakQsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsS0FBSyxHQUFHLEdBQUcsRUFDWCxPQUEwQjtJQUUxQixPQUFPLFVBQ0wsT0FBZSxFQUNmLFdBQW1CLEVBQ25CLFVBQXNDO1FBRXRDLElBQUksT0FBTyxVQUFVLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxTQUFTLENBQ2pCLDhDQUE4QyxXQUFXLG9CQUFvQixDQUM5RSxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU87WUFDTCxZQUFZLEVBQUUsSUFBSTtZQUNsQixHQUFHO2dCQUNELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO29CQUN2QyxLQUFLLEVBQUUsS0FBSztvQkFDWixZQUFZLEVBQUUsSUFBSTtvQkFDbEIsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQyxDQUFDO2dCQUNILE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgdXRpbHNcbiAqL1xuXG5pbXBvcnQgeyBEZWJvdW5jZVNldHRpbmdzLCBEZWJvdW5jZWRGdW5jLCBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZVR5cGUgfSBmcm9tICcuLi90eXBlcy9wdWJsaWMtYXBpJztcblxuY29uc3QgY2hlY2tEZXNjcmlwdG9yID0gPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPih0YXJnZXQ6IFQsIHByb3BlcnR5S2V5OiBLKSA9PiB7XG4gIGNvbnN0IG9EZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KTtcblxuICBpZiAob0Rlc2NyaXB0b3IgJiYgIW9EZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYHByb3BlcnR5ICR7U3RyaW5nKHByb3BlcnR5S2V5KX0gaXMgbm90IGNvbmZpZ3VyYWJsZWApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBvR2V0dGVyOiBvRGVzY3JpcHRvcj8uZ2V0LFxuICAgIG9TZXR0ZXI6IG9EZXNjcmlwdG9yPy5zZXQsXG4gICAgb0Rlc2NyaXB0b3IsXG4gIH07XG59O1xuXG5jb25zdCBzdHJpY3RDaGVja0Rlc2NyaXB0b3IgPSA8VCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICB0YXJnZXQ6IFQsXG4gIHByb3BlcnR5S2V5OiBLLFxuKSA9PiB7XG4gIGNvbnN0IHsgb0dldHRlciwgb1NldHRlciwgb0Rlc2NyaXB0b3IgfSA9IGNoZWNrRGVzY3JpcHRvcihcbiAgICB0YXJnZXQsXG4gICAgcHJvcGVydHlLZXksXG4gICk7XG5cbiAgaWYgKG9HZXR0ZXIgfHwgb1NldHRlcikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgcHJvcGVydHkgJHtTdHJpbmcocHJvcGVydHlLZXkpfSBzaG91bGQgbm90IGRlZmluZSBnZXR0ZXIgb3Igc2V0dGVyYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG9EZXNjcmlwdG9yO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFZhbHVlSG9vazxUID0gYW55LCBLIGV4dGVuZHMga2V5b2YgVCA9IGFueT4oXG4gIHNldHRlcj86ICh0aGlzOiBULCB2YWx1ZT86IFRbS10pID0+IGJvb2xlYW4gfCB2b2lkLFxuICBnZXR0ZXI/OiAodGhpczogVCwgdmFsdWU/OiBUW0tdKSA9PiBUW0tdLFxuICBhZnRlclNldHRlcj86ICh0aGlzOiBULCB2YWx1ZT86IFRbS10pID0+IHZvaWQsXG4pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IFQsIHByb3BlcnR5S2V5OiBLKSA9PiB7XG4gICAgY29uc3QgeyBvR2V0dGVyLCBvU2V0dGVyIH0gPSBjaGVja0Rlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG5cbiAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2wocHJvcGVydHlLZXkgYXMgc3RyaW5nKTtcblxuICAgIHR5cGUgTWl4ZWQgPSBUICYge1xuICAgICAgW3N5bWJvbF06IFRbS107XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0KHRoaXM6IE1peGVkKSB7XG4gICAgICAgIHJldHVybiBnZXR0ZXJcbiAgICAgICAgICA/IGdldHRlci5jYWxsKHRoaXMsIHRoaXNbc3ltYm9sXSlcbiAgICAgICAgICA6IG9HZXR0ZXJcbiAgICAgICAgICA/IG9HZXR0ZXIuY2FsbCh0aGlzKVxuICAgICAgICAgIDogdGhpc1tzeW1ib2xdO1xuICAgICAgfSxcbiAgICAgIHNldCh0aGlzOiBNaXhlZCwgdmFsdWU6IFRbS10pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZhbHVlID09PSB0aGlzW3Byb3BlcnR5S2V5XSB8fFxuICAgICAgICAgIHNldHRlcj8uY2FsbCh0aGlzLCB2YWx1ZSkgPT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob1NldHRlcikge1xuICAgICAgICAgIG9TZXR0ZXIuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tzeW1ib2xdID0gdmFsdWU7XG4gICAgICAgIGFmdGVyU2V0dGVyPy5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIE9ic2VydmFibGVJbnB1dFByb3BlcnR5S2V5PFQ+ID0gVCBleHRlbmRzIGAke2luZmVyIFJ9JGBcbiAgPyBPYnNlcnZhYmxlSW5wdXRQcm9wZXJ0eUtleTxSPlxuICA6IFQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBPYnNlcnZhYmxlSW5wdXQ8XG4gIFQgPSBhbnksXG4gIE9LIGV4dGVuZHMga2V5b2YgVCA9IGFueSxcbiAgSyBleHRlbmRzIGtleW9mIFQgPSBPYnNlcnZhYmxlSW5wdXRQcm9wZXJ0eUtleTxPSz4gJiBrZXlvZiBULFxuPihwcm9wZXJ0eUtleTogSyB8IGJvb2xlYW4gPSB0cnVlLCBpbml0aWFsVmFsdWU/OiBPYnNlcnZhYmxlVHlwZTxUW09LXT4pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IFQsIG9Qcm9wZXJ0eUtleTogT0spID0+IHtcbiAgICBpZiAoIShvUHJvcGVydHlLZXkgYXMgc3RyaW5nKS5lbmRzV2l0aCgnJCcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgcHJvcGVydHkgJHtcbiAgICAgICAgICBvUHJvcGVydHlLZXkgYXMgc3RyaW5nXG4gICAgICAgIH0gc2hvdWxkIGJlIGFuIE9ic2VydmFibGUgYW5kIGl0cyBuYW1lIHNob3VsZCBlbmQgd2l0aCAkYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3RyaWN0Q2hlY2tEZXNjcmlwdG9yKHRhcmdldCwgb1Byb3BlcnR5S2V5KTtcblxuICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbChvUHJvcGVydHlLZXkgYXMgc3RyaW5nKTtcblxuICAgIHR5cGUgT1QgPSBPYnNlcnZhYmxlVHlwZTxUW09LXT47XG5cbiAgICB0eXBlIE1peGVkID0gVCAmIHtcbiAgICAgIFtzeW1ib2xdOiBCZWhhdmlvclN1YmplY3Q8T1Q+O1xuICAgIH0gJiBSZWNvcmQ8T0ssIEJlaGF2aW9yU3ViamVjdDxPVD4+O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCBvUHJvcGVydHlWYWx1ZTogT1Q7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBvUHJvcGVydHlLZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogTWl4ZWQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzW3N5bWJvbF0gfHxcbiAgICAgICAgICAodGhpc1tzeW1ib2xdID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICAgICAgICAgIC8vIHdoZW4gbm8gaW5pdGlhbFZhbHVlIHBhc3NlZCBpbiwgdXNlIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSB2YWxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkID8gb1Byb3BlcnR5VmFsdWUgOiBpbml0aWFsVmFsdWUsXG4gICAgICAgICAgKSlcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzZXQodGhpczogTWl4ZWQsIHZhbHVlOiBPVCkge1xuICAgICAgICB0aGlzW29Qcm9wZXJ0eUtleV0ubmV4dCh2YWx1ZSk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKCFwcm9wZXJ0eUtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0eUtleSA9PT0gdHJ1ZSkge1xuICAgICAgcHJvcGVydHlLZXkgPSAob1Byb3BlcnR5S2V5IGFzIHN0cmluZykucmVwbGFjZSgvXFwkKyQvLCAnJykgYXMgSztcbiAgICB9XG5cbiAgICBjb25zdCBvRGVzY3JpcHRvciA9IHN0cmljdENoZWNrRGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICBvUHJvcGVydHlWYWx1ZSA9IG9EZXNjcmlwdG9yID8gb0Rlc2NyaXB0b3IudmFsdWUgOiB0YXJnZXRbcHJvcGVydHlLZXldO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQodGhpczogTWl4ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbb1Byb3BlcnR5S2V5XS5nZXRWYWx1ZSgpO1xuICAgICAgfSxcbiAgICAgIHNldCh0aGlzOiBNaXhlZCwgdmFsdWU6IE9UKSB7XG4gICAgICAgIHRoaXNbb1Byb3BlcnR5S2V5XS5uZXh0KHZhbHVlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vTm9Ib21leS9iaW5kLWRlY29yYXRvclxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlcyAtLSBpbnRlbmRlZFxuZXhwb3J0IGZ1bmN0aW9uIGJpbmQ8VCBleHRlbmRzIEZ1bmN0aW9uPihcbiAgX3RhcmdldDogb2JqZWN0LFxuICBwcm9wZXJ0eUtleTogc3RyaW5nLFxuICBkZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxUPixcbik6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+IHwgdm9pZCB7XG4gIGlmICh0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgT25seSBtZXRob2RzIGNhbiBiZSBkZWNvcmF0ZWQgd2l0aCBAYmluZC4gPCR7cHJvcGVydHlLZXl9PiBpcyBub3QgYSBtZXRob2QhYCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0KHRoaXM6IFQpOiBUIHtcbiAgICAgIGNvbnN0IGJvdW5kOiBUID0gZGVzY3JpcHRvci52YWx1ZS5iaW5kKHRoaXMpO1xuICAgICAgLy8gQ3JlZGl0cyB0byBodHRwczovL2dpdGh1Yi5jb20vYW5kcmV5cG9wcC9hdXRvYmluZC1kZWNvcmF0b3IgZm9yIG1lbW9pemluZyB0aGUgcmVzdWx0IG9mIGJpbmQgYWdhaW5zdCBhIHN5bWJvbCBvbiB0aGUgaW5zdGFuY2UuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcbiAgICAgICAgdmFsdWU6IGJvdW5kLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYm91bmQ7XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gbG9kYXNoIOeahCBkZWJvdW5jZSDnsbvlnovnuqbmnZ/opoHmsYIgKC4uLmFyZ3M6IGFueSkgPT4gYW55XG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2VGbjxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueSkgPT4gYW55PihcbiAgZGVsYXkgPSAyMDAsXG4gIG9wdGlvbnM/OiBEZWJvdW5jZVNldHRpbmdzLFxuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoXG4gICAgX3RhcmdldDogb2JqZWN0LFxuICAgIHByb3BlcnR5S2V5OiBzdHJpbmcsXG4gICAgZGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8VD4sXG4gICk6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPERlYm91bmNlZEZ1bmM8VD4+IHwgdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgT25seSBtZXRob2RzIGNhbiBiZSBkZWNvcmF0ZWQgd2l0aCBAYmluZC4gPCR7cHJvcGVydHlLZXl9PiBpcyBub3QgYSBtZXRob2QhYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCh0aGlzOiBUKTogRGVib3VuY2VkRnVuYzxUPiB7XG4gICAgICAgIGNvbnN0IGJvdW5kID0gZGVib3VuY2UoZGVzY3JpcHRvci52YWx1ZSwgZGVsYXksIG9wdGlvbnMpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlLZXksIHtcbiAgICAgICAgICB2YWx1ZTogYm91bmQsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJvdW5kO1xuICAgICAgfSxcbiAgICB9O1xuICB9O1xufVxuIl19