@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
83 lines • 12.9 kB
JavaScript
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
function decorateMethod(originalMethod) {
let previousArgs = [];
let originalFnWasCalledLeastAtOnce = false;
let pureValue;
return function tuiPureMethodPatched(...args) {
const isPure = originalFnWasCalledLeastAtOnce &&
previousArgs.length === args.length &&
args.every((arg, index) => arg === previousArgs[index]);
if (isPure) {
return pureValue;
}
previousArgs = args;
pureValue = originalMethod.apply(this, args);
originalFnWasCalledLeastAtOnce = true;
return pureValue;
};
}
function decorateGetter(originalGetter, propertyKey, enumerable = true) {
return function tuiPureGetterPatched() {
const value = originalGetter.call(this);
Object.defineProperty(this, propertyKey, { enumerable, value });
return value;
};
}
export function tuiPure(target, propertyKeyOrContext, descriptor) {
if (typeof target === 'function') {
const context = propertyKeyOrContext;
if (context.kind === 'getter') {
return decorateGetter(target, context.name);
}
if (context.kind === 'method') {
return decorateMethod(target);
}
throw new TuiPureException();
}
// TODO(v5): drop compatibility for legacy "experimentalDecorators": true
const { get, enumerable, value } = descriptor;
const propertyKey = propertyKeyOrContext;
if (get) {
return {
configurable: true,
enumerable,
get: decorateGetter(get, propertyKey, enumerable),
};
}
if (typeof value !== 'function') {
throw new TuiPureException();
}
const original = value;
return {
configurable: true,
enumerable,
get() {
let previousArgs = [];
let originalFnWasCalledLeastAtOnce = false;
let pureValue;
const patched = (...args) => {
const isPure = originalFnWasCalledLeastAtOnce &&
previousArgs.length === args.length &&
args.every((arg, index) => arg === previousArgs[index]);
if (isPure) {
return pureValue;
}
previousArgs = args;
pureValue = original.apply(this, args);
originalFnWasCalledLeastAtOnce = true;
return pureValue;
};
Object.defineProperty(this, propertyKey, {
configurable: true,
value: patched,
});
return patched;
},
};
}
export class TuiPureException extends Error {
constructor() {
super(ngDevMode ? 'tuiPure can only be used with functions or getters' : '');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay91dGlscy9taXNjZWxsYW5lb3VzL3B1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBRXhELFNBQVMsY0FBYyxDQUNuQixjQUErQztJQUUvQyxJQUFJLFlBQVksR0FBdUIsRUFBRSxDQUFDO0lBQzFDLElBQUksOEJBQThCLEdBQUcsS0FBSyxDQUFDO0lBQzNDLElBQUksU0FBa0IsQ0FBQztJQUV2QixPQUFPLFNBQVMsb0JBQW9CLENBQWUsR0FBRyxJQUFlO1FBQ2pFLE1BQU0sTUFBTSxHQUNSLDhCQUE4QjtZQUM5QixZQUFZLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNO1lBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFNUQsSUFBSSxNQUFNLEVBQUU7WUFDUixPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsU0FBUyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLDhCQUE4QixHQUFHLElBQUksQ0FBQztRQUV0QyxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ25CLGNBQTZCLEVBQzdCLFdBQTRCLEVBQzVCLFVBQVUsR0FBRyxJQUFJO0lBRWpCLE9BQU8sU0FBUyxvQkFBb0I7UUFDaEMsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV4QyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUU5RCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDLENBQUM7QUFDTixDQUFDO0FBK0JELE1BQU0sVUFBVSxPQUFPLENBQ25CLE1BQWtELEVBQ2xELG9CQUdZLEVBQ1osVUFBcUU7SUFFckUsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7UUFDOUIsTUFBTSxPQUFPLEdBQUcsb0JBRWlCLENBQUM7UUFFbEMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMzQixPQUFPLGNBQWMsQ0FBQyxNQUF1QixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoRTtRQUVELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDM0IsT0FBTyxjQUFjLENBQUMsTUFBeUMsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsTUFBTSxJQUFJLGdCQUFnQixFQUFFLENBQUM7S0FDaEM7SUFFRCx5RUFBeUU7SUFDekUsTUFBTSxFQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFDLEdBQUcsVUFBVyxDQUFDO0lBQzdDLE1BQU0sV0FBVyxHQUFHLG9CQUE4QixDQUFDO0lBRW5ELElBQUksR0FBRyxFQUFFO1FBQ0wsT0FBTztZQUNILFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVU7WUFDVixHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDO1NBQ3BELENBQUM7S0FDTDtJQUVELElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQzdCLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0tBQ2hDO0lBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRXZCLE9BQU87UUFDSCxZQUFZLEVBQUUsSUFBSTtRQUNsQixVQUFVO1FBQ1YsR0FBRztZQUNDLElBQUksWUFBWSxHQUF1QixFQUFFLENBQUM7WUFDMUMsSUFBSSw4QkFBOEIsR0FBRyxLQUFLLENBQUM7WUFDM0MsSUFBSSxTQUFrQixDQUFDO1lBRXZCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFlLEVBQVcsRUFBRTtnQkFDNUMsTUFBTSxNQUFNLEdBQ1IsOEJBQThCO29CQUM5QixZQUFZLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNO29CQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUU1RCxJQUFJLE1BQU0sRUFBRTtvQkFDUixPQUFPLFNBQVMsQ0FBQztpQkFDcEI7Z0JBRUQsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2Qyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7Z0JBRXRDLE9BQU8sU0FBUyxDQUFDO1lBQ3JCLENBQUMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDckMsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLEtBQUssRUFBRSxPQUFPO2FBQ2pCLENBQUMsQ0FBQztZQUVILE9BQU8sT0FBa0IsQ0FBQztRQUM5QixDQUFDO0tBQ0osQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsS0FBSztJQUN2QztRQUNJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLG9EQUFvRCxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkB0YWlnYS11aS90c2NvbmZpZy9uZy1kZXYtbW9kZVwiIC8+XG5cbmZ1bmN0aW9uIGRlY29yYXRlTWV0aG9kKFxuICAgIG9yaWdpbmFsTWV0aG9kOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duLFxuKTogKHRoaXM6IG9iamVjdCwgLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duIHtcbiAgICBsZXQgcHJldmlvdXNBcmdzOiByZWFkb25seSB1bmtub3duW10gPSBbXTtcbiAgICBsZXQgb3JpZ2luYWxGbldhc0NhbGxlZExlYXN0QXRPbmNlID0gZmFsc2U7XG4gICAgbGV0IHB1cmVWYWx1ZTogdW5rbm93bjtcblxuICAgIHJldHVybiBmdW5jdGlvbiB0dWlQdXJlTWV0aG9kUGF0Y2hlZCh0aGlzOiBvYmplY3QsIC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xuICAgICAgICBjb25zdCBpc1B1cmUgPVxuICAgICAgICAgICAgb3JpZ2luYWxGbldhc0NhbGxlZExlYXN0QXRPbmNlICYmXG4gICAgICAgICAgICBwcmV2aW91c0FyZ3MubGVuZ3RoID09PSBhcmdzLmxlbmd0aCAmJlxuICAgICAgICAgICAgYXJncy5ldmVyeSgoYXJnLCBpbmRleCkgPT4gYXJnID09PSBwcmV2aW91c0FyZ3NbaW5kZXhdKTtcblxuICAgICAgICBpZiAoaXNQdXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gcHVyZVZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNBcmdzID0gYXJncztcbiAgICAgICAgcHVyZVZhbHVlID0gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIG9yaWdpbmFsRm5XYXNDYWxsZWRMZWFzdEF0T25jZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHB1cmVWYWx1ZTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZUdldHRlcihcbiAgICBvcmlnaW5hbEdldHRlcjogKCkgPT4gdW5rbm93bixcbiAgICBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLFxuICAgIGVudW1lcmFibGUgPSB0cnVlLFxuKTogKHRoaXM6IG9iamVjdCkgPT4gdW5rbm93biB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHR1aVB1cmVHZXR0ZXJQYXRjaGVkKHRoaXM6IG9iamVjdCk6IHVua25vd24ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9yaWdpbmFsR2V0dGVyLmNhbGwodGhpcyk7XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7ZW51bWVyYWJsZSwgdmFsdWV9KTtcblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGxhenkgaW5pdGlhbGl6YXRpb24gZm9yIGdldHRlciBvciBtZW1vaXphdGlvbiBvZiBhIGZ1bmN0aW9uIGNhbGwgc2ltaWxhciB0byBwdXJlIHtAbGluazogUGlwZX0uXG4gKiBSZXBsYWNlcyBnZXR0ZXIgd2l0aCBpdHMgY2FsY3VsYXRlZCB2YWx1ZSB1cG9uIGZpcnN0IGNhbGwgb3Iga2VlcHMgdHJhY2sgb2YgbGFzdCBjYWxsIGFyZ3VtZW50cyBhbmQgcmV0dXJuZWRcbiAqIHZhbHVlIGZvciBmdW5jdGlvbiwgc2tpcHBpbmcgY2FsY3VsYXRpb24gd2hlbiBhcmd1bWVudHMgYXJlIHN0cmljdGx5IHRoZSBzYW1lLlxuICpcbiAqIEB0aHJvd3MgZXJyb3IgaWYgdXNlZCBub3Qgb24gZ2V0dGVyIG9yIGZ1bmN0aW9uXG4gKlxuICogQ0FVVElPTjogdGhleSBtdXN0IGJlIHB1cmUuXG4gKiBAZGVwcmVjYXRlZCB1c2UgXCJleHBlcmltZW50YWxEZWNvcmF0b3JzXCI6IGZhbHNlXG4gKiBUT0RPKHY1KTogZHJvcCBjb21wYXRpYmlsaXR5IGZvciBsZWdhY3kgXCJleHBlcmltZW50YWxEZWNvcmF0b3JzXCI6IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR1aVB1cmU8VD4oXG4gICAgdGFyZ2V0OiBvYmplY3QsXG4gICAgcHJvcGVydHlLZXk6IHN0cmluZyxcbiAgICB7Z2V0LCBlbnVtZXJhYmxlLCB2YWx1ZX06IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPFQ+LFxuKTogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8VD47XG5cbi8qKlxuICogSW1wbGVtZW50cyBsYXp5IGluaXRpYWxpemF0aW9uIGZvciBnZXR0ZXIgb3IgbWVtb2l6YXRpb24gb2YgYSBmdW5jdGlvbiBjYWxsIHNpbWlsYXIgdG8gcHVyZSB7QGxpbms6IFBpcGV9LlxuICogUmVwbGFjZXMgZ2V0dGVyIHdpdGggaXRzIGNhbGN1bGF0ZWQgdmFsdWUgdXBvbiBmaXJzdCBjYWxsIG9yIGtlZXBzIHRyYWNrIG9mIGxhc3QgY2FsbCBhcmd1bWVudHMgYW5kIHJldHVybmVkXG4gKiB2YWx1ZSBmb3IgZnVuY3Rpb24sIHNraXBwaW5nIGNhbGN1bGF0aW9uIHdoZW4gYXJndW1lbnRzIGFyZSBzdHJpY3RseSB0aGUgc2FtZS5cbiAqXG4gKiBDQVVUSU9OOiB0aGV5IG11c3QgYmUgcHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR1aVB1cmU8QSBleHRlbmRzIHVua25vd25bXSwgUj4oXG4gICAgdGFyZ2V0OiAoLi4uYXJnczogQSkgPT4gUixcbiAgICBjb250ZXh0OiBDbGFzc0dldHRlckRlY29yYXRvckNvbnRleHQgfCBDbGFzc01ldGhvZERlY29yYXRvckNvbnRleHQsXG4pOiAoLi4uYXJnczogQSkgPT4gUjtcblxuZXhwb3J0IGZ1bmN0aW9uIHR1aVB1cmUoXG4gICAgdGFyZ2V0OiBvYmplY3QgfCAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biksXG4gICAgcHJvcGVydHlLZXlPckNvbnRleHQ6XG4gICAgICAgIHwgQ2xhc3NHZXR0ZXJEZWNvcmF0b3JDb250ZXh0XG4gICAgICAgIHwgQ2xhc3NNZXRob2REZWNvcmF0b3JDb250ZXh0XG4gICAgICAgIHwgc3RyaW5nLFxuICAgIGRlc2NyaXB0b3I/OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjwoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duPixcbik6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+IHwgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gcHJvcGVydHlLZXlPckNvbnRleHQgYXNcbiAgICAgICAgICAgIHwgQ2xhc3NHZXR0ZXJEZWNvcmF0b3JDb250ZXh0XG4gICAgICAgICAgICB8IENsYXNzTWV0aG9kRGVjb3JhdG9yQ29udGV4dDtcblxuICAgICAgICBpZiAoY29udGV4dC5raW5kID09PSAnZ2V0dGVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGRlY29yYXRlR2V0dGVyKHRhcmdldCBhcyAoKSA9PiB1bmtub3duLCBjb250ZXh0Lm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQua2luZCA9PT0gJ21ldGhvZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvcmF0ZU1ldGhvZCh0YXJnZXQgYXMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bik7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHVpUHVyZUV4Y2VwdGlvbigpO1xuICAgIH1cblxuICAgIC8vIFRPRE8odjUpOiBkcm9wIGNvbXBhdGliaWxpdHkgZm9yIGxlZ2FjeSBcImV4cGVyaW1lbnRhbERlY29yYXRvcnNcIjogdHJ1ZVxuICAgIGNvbnN0IHtnZXQsIGVudW1lcmFibGUsIHZhbHVlfSA9IGRlc2NyaXB0b3IhO1xuICAgIGNvbnN0IHByb3BlcnR5S2V5ID0gcHJvcGVydHlLZXlPckNvbnRleHQgYXMgc3RyaW5nO1xuXG4gICAgaWYgKGdldCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZSxcbiAgICAgICAgICAgIGdldDogZGVjb3JhdGVHZXR0ZXIoZ2V0LCBwcm9wZXJ0eUtleSwgZW51bWVyYWJsZSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHVpUHVyZUV4Y2VwdGlvbigpO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsID0gdmFsdWU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGUsXG4gICAgICAgIGdldCgpOiB1bmtub3duIHtcbiAgICAgICAgICAgIGxldCBwcmV2aW91c0FyZ3M6IHJlYWRvbmx5IHVua25vd25bXSA9IFtdO1xuICAgICAgICAgICAgbGV0IG9yaWdpbmFsRm5XYXNDYWxsZWRMZWFzdEF0T25jZSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHB1cmVWYWx1ZTogdW5rbm93bjtcblxuICAgICAgICAgICAgY29uc3QgcGF0Y2hlZCA9ICguLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1B1cmUgPVxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEZuV2FzQ2FsbGVkTGVhc3RBdE9uY2UgJiZcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBcmdzLmxlbmd0aCA9PT0gYXJncy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgYXJncy5ldmVyeSgoYXJnLCBpbmRleCkgPT4gYXJnID09PSBwcmV2aW91c0FyZ3NbaW5kZXhdKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc1B1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB1cmVWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwcmV2aW91c0FyZ3MgPSBhcmdzO1xuICAgICAgICAgICAgICAgIHB1cmVWYWx1ZSA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRm5XYXNDYWxsZWRMZWFzdEF0T25jZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcHVyZVZhbHVlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BlcnR5S2V5LCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwYXRjaGVkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXRjaGVkIGFzIHVua25vd247XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFR1aVB1cmVFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKG5nRGV2TW9kZSA/ICd0dWlQdXJlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgb3IgZ2V0dGVycycgOiAnJyk7XG4gICAgfVxufVxuIl19