@sumaris-net/ngx-components 18.11.0 → 18.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/doc/changelog.md +4 -0
- package/esm2022/src/app/core/services/model/entity.decorators.mjs +1 -1
- package/esm2022/src/app/core/services/model/filter.model.mjs +1 -1
- package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +179 -33
- package/fesm2022/sumaris-net.ngx-components.mjs +179 -33
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/services/model/entity.decorators.d.ts +3 -3
- package/src/app/core/services/model/filter.model.d.ts +1 -1
- package/src/app/shared/rx-state/rx-state.decorators.d.ts +39 -3
- package/src/assets/manifest.json +1 -1
package/doc/changelog.md
CHANGED
|
@@ -1432,3 +1432,7 @@ enh: Environment: add useHash property to configure Angular router to use hash U
|
|
|
1432
1432
|
|
|
1433
1433
|
# 18.10.28
|
|
1434
1434
|
- enh(gallery) Allow to pass options to `gallery.add()` (e.g. `{multiple: true; autoHideDropArea: true}`)
|
|
1435
|
+
|
|
1436
|
+
# 18.11.0
|
|
1437
|
+
- fix(inputs) `canHaveFocus()`: rename option `excludeEmptyInput` into `isEmpty` (confusing naming)
|
|
1438
|
+
- enh(inputs) `canHaveFocus()`: add `isNotEmpty` option
|
|
@@ -94,4 +94,4 @@ export function EntityClass(opts) {
|
|
|
94
94
|
return constructor;
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5LmRlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJdEQsTUFBTSxPQUFPLGFBQWE7SUFDeEIsTUFBTSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztJQUV4RCxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQWdCLEVBQUUsV0FBd0I7UUFDeEQsZ0NBQWdDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsUUFBUTtRQUNSLHdFQUF3RTtRQUV4RSxhQUFhO1FBQ2IsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFzQixVQUFrQjtRQUNoRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxVQUFVLEdBQUcsNERBQTRELENBQUMsQ0FBQztRQUM3SCxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQ2YsS0FBVSxFQUNWLElBSUM7UUFFRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3pC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LEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxNQUFXLEVBQUUsSUFBVTtnQkFDaEQsSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxTQUFTLENBQUM7Z0JBQzlCLElBQUksTUFBTSxZQUFZLFdBQVcsRUFBRSxDQUFDO29CQUNsQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsUUFBUTtnQkFDUix1RkFBdUY7Z0JBQ3ZGLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUMsQ0FBQztRQUNKLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFOUMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IHJlbW92ZUVuZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuXG5kZWNsYXJlIHR5cGUgQ29uc3RydWN0b3I8VCA9IGFueT4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG5leHBvcnQgY2xhc3MgRW50aXR5Q2xhc3NlcyB7XG4gIHN0YXRpYyBDTEFTU0VTX0JZX05BTUUgPSBuZXcgTWFwPHN0cmluZywgQ29uc3RydWN0b3I+KCk7XG5cbiAgc3RhdGljIHJlZ2lzdGVyKHR5cGVuYW1lOiBzdHJpbmcsIGVudGl0eUNsYXNzOiBDb25zdHJ1Y3Rvcikge1xuICAgIC8vIENvbnZlcnQgdG8gZXh0cmFjdCBlbnRpdHlOYW1lXG4gICAgY29uc3QgZW50aXR5TmFtZSA9IHJlbW92ZUVuZCh0eXBlbmFtZSwgJ1ZPJyk7XG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ1tlbnRpdHktY2xhc3Nlc10gRGV0ZWN0ZWQgZW50aXR5IGNsYXNzICcgKyBlbnRpdHlOYW1lKTtcblxuICAgIC8vIEFkZCB0byBtYXBcbiAgICBFbnRpdHlDbGFzc2VzLkNMQVNTRVNfQllfTkFNRS5zZXQoZW50aXR5TmFtZSwgZW50aXR5Q2xhc3MpO1xuICB9XG5cbiAgc3RhdGljIGdldDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHlOYW1lOiBzdHJpbmcpOiBDb25zdHJ1Y3RvciB7XG4gICAgY29uc3QgZW50aXR5Q2xhc3MgPSBFbnRpdHlDbGFzc2VzLkNMQVNTRVNfQllfTkFNRS5nZXQoZW50aXR5TmFtZSk7XG4gICAgaWYgKCFlbnRpdHlDbGFzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZvdW5kIGVudGl0eSBjbGFzcyAnXCIgKyBlbnRpdHlOYW1lICsgXCInLiBNYWtlIHN1cmUgaXQgZXhpc3RzIGFuZCBoYXMgdGhlIEBFbnRpdHlDbGFzcyBkZWNvcmF0b3IuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZW50aXR5Q2xhc3M7XG4gIH1cblxuICBzdGF0aWMgZnJvbU9iamVjdDxUIGV4dGVuZHMgRW50aXR5PFQ+PihcbiAgICB2YWx1ZTogYW55LFxuICAgIG9wdHM/OiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICB0eXBlbmFtZT86IHN0cmluZztcbiAgICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gICAgfVxuICApOiBUIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG4gICAgY29uc3QgZW50aXR5TmFtZSA9IChvcHRzICYmIG9wdHMuZW50aXR5TmFtZSkgfHwgcmVtb3ZlRW5kKHZhbHVlLl9fdHlwZW5hbWUgfHwgb3B0cz8udHlwZW5hbWUsICdWTycpO1xuICAgIGlmICghZW50aXR5TmFtZSkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBvbmUgb2YgJ3ZhbHVlLl9fdHlwZW5hbWUnLCAnb3B0cy5lbnRpdHlOYW1lJywgb3IgJ29wdHMudHlwZW5hbWUnLlwiKTtcbiAgICBjb25zdCBlbnRpdHlDbGFzcyA9IEVudGl0eUNsYXNzZXMuZ2V0KGVudGl0eU5hbWUpIGFzIGFueTtcbiAgICBpZiAodHlwZW9mIGVudGl0eUNsYXNzLmZyb21PYmplY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3QgZm91bmQgdGhlIHN0YXRpYyBmdW5jdGlvbiAnXCIgK1xuICAgICAgICAgIGVudGl0eU5hbWUgK1xuICAgICAgICAgIFwiLmZyb21PYmplY3QoKScuIE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGRlY2xhcmVkIGFuZCB0aGUgZW50aXR5IGNsYXNzIGhhcyB0aGUgQEVudGl0eUNsYXNzIGRlY29yYXRvclwiXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZW50aXR5Q2xhc3MuZnJvbU9iamVjdCh2YWx1ZSwgb3B0cykgYXMgVDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRW50aXR5Q2xhc3Mob3B0czogeyB0eXBlbmFtZTogc3RyaW5nOyBmcm9tT2JqZWN0UmV1c2VTdHJhdGVneT86ICdkZWZhdWx0JyB8ICdjbG9uZScgfSkge1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oY29uc3RydWN0b3I6IFQpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGNsYXNzIGV4dGVuZHMgRW50aXR5XG4gICAgaWYgKCFlbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICBjb25zdCBvYmogPSBuZXcgY29uc3RydWN0b3IoKTtcbiAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIEVudGl0eSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbGFzcyAke2NvbnN0cnVjdG9yLm5hbWV9IG11c3QgZXh0ZW5kcyA8PEVudGl0eT4+IHRvIGJlIGFibGUgdG8gdXNlIEBGcm9tT2JqZWN0IWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXp6ID0gY29uc3RydWN0b3IgYXMgYW55O1xuICAgIGNvbnN0IHR5cGVuYW1lID0gb3B0cy50eXBlbmFtZSB8fCBgJHtjb25zdHJ1Y3Rvci5uYW1lfVZPYDtcblxuICAgIC8vIERlZmluZSBzdGF0aWMgZmllbGQgVFlQRU5BTUVcbiAgICBjbGF6ei5UWVBFTkFNRSA9IHR5cGVuYW1lO1xuXG4gICAgLy8gRGVmaW5lIHN0YXRpYyBmcm9tT2JqZWN0KClcbiAgICBpZiAob3B0cy5mcm9tT2JqZWN0UmV1c2VTdHJhdGVneSA9PT0gJ2Nsb25lJykge1xuICAgICAgY2xhenouZnJvbU9iamVjdCA9IGZ1bmN0aW9uIChzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IFQge1xuICAgICAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSByZXR1cm4gKHNvdXJjZSBhcyBhbnkpLmNsb25lKG9wdHMpIGFzIFQ7XG4gICAgICAgIGNvbnN0IHRhcmdldDogYW55ID0gbmV3IGNvbnN0cnVjdG9yKCk7XG4gICAgICAgIHRhcmdldC5mcm9tT2JqZWN0KHNvdXJjZSwgb3B0cyk7XG4gICAgICAgIHJldHVybiB0YXJnZXQgYXMgVDtcbiAgICAgIH07XG4gICAgICBjbGF6ei5hc09iamVjdCA9IGZ1bmN0aW9uIChzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IGFueSB7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHJldHVybiBzb3VyY2UuYXNPYmplY3Qob3B0cyk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzb3VyY2UpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhenouZnJvbU9iamVjdCA9IGZ1bmN0aW9uIChzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IFQge1xuICAgICAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ0BFbnRpdHlDbGFzcygpIGZyb21PYmplY3QoKSA9PiB3aWxsIHJlY3ljbGUgZXhpc3Rpbmcgb2JqZWN0OiAnLCBzb3VyY2UpO1xuICAgICAgICAgIHJldHVybiBzb3VyY2UgYXMgVDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXQ6IGFueSA9IG5ldyBjb25zdHJ1Y3RvcigpO1xuICAgICAgICB0YXJnZXQuZnJvbU9iamVjdChzb3VyY2UsIG9wdHMpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0IGFzIFQ7XG4gICAgICB9O1xuXG4gICAgICBjbGF6ei5hc09iamVjdCA9IGZ1bmN0aW9uIChzb3VyY2U6IGFueSwgb3B0cz86IGFueSk6IGFueSB7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICAgICAgICByZXR1cm4gc291cmNlLmFzT2JqZWN0KG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZygnQEVudGl0eUNsYXNzKCkgYXNPYmplY3QoKSA9PiB3aWxsIHJlY3ljbGUgZXhpc3Rpbmcgb2JqZWN0OiAnLCBzb3VyY2UpO1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgZW50aXR5IGNsYXNzXG4gICAgRW50aXR5Q2xhc3Nlcy5yZWdpc3Rlcih0eXBlbmFtZSwgY29uc3RydWN0b3IpO1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yO1xuICB9O1xufVxuIl19
|
|
@@ -90,4 +90,4 @@ export class EntityFilterUtils {
|
|
|
90
90
|
return target;
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2ZpbHRlci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFFLE1BQU0sRUFBa0MsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFvQnRGLE1BQU0sT0FBZ0IsWUFPcEIsU0FBUSxNQUFxQjtJQUc3Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBNEIsU0FBd0I7UUFDdkUsSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDOUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBMEQsT0FBWTtRQUNsRixNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU8sR0FBRyxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMs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TixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eUFycmF5IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBNSU5JRllfRU5USVRZX0ZPUl9QT0QsIFJlZmVyZW50aWFsVXRpbHMgfSBmcm9tICcuL3JlZmVyZW50aWFsLm1vZGVsJztcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5QXNPYmplY3RPcHRpb25zLCBJRW50aXR5LCBpc0luc3RhbmNlT2YgfSBmcm9tICcuL2VudGl0eS5tb2RlbCc7XG5cbmltcG9ydCB7IEZpbHRlckZuIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJRW50aXR5RmlsdGVyPFxuICBGIGV4dGVuZHMgSUVudGl0eUZpbHRlcjxGLCBULCBJRCwgQU8sIEZPPixcbiAgVCBleHRlbmRzIElFbnRpdHk8VCwgYW55PixcbiAgSUQgPSBudW1iZXIsXG4gIEFPIGV4dGVuZHMgRW50aXR5QXNPYmplY3RPcHRpb25zID0gRW50aXR5QXNPYmplY3RPcHRpb25zLFxuICBGTyA9IGFueSxcbj4gZXh0ZW5kcyBJRW50aXR5PEYsIElELCBBTywgRk8+
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2ZpbHRlci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFFLE1BQU0sRUFBa0MsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFvQnRGLE1BQU0sT0FBZ0IsWUFPcEIsU0FBUSxNQUFxQjtJQUc3Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBNEIsU0FBd0I7UUFDdkUsSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDOUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBMEQsT0FBWTtRQUNsRixNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU8sR0FBRyxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMs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TixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eUFycmF5IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBNSU5JRllfRU5USVRZX0ZPUl9QT0QsIFJlZmVyZW50aWFsVXRpbHMgfSBmcm9tICcuL3JlZmVyZW50aWFsLm1vZGVsJztcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5QXNPYmplY3RPcHRpb25zLCBJRW50aXR5LCBpc0luc3RhbmNlT2YgfSBmcm9tICcuL2VudGl0eS5tb2RlbCc7XG5cbmltcG9ydCB7IEZpbHRlckZuIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBJRW50aXR5RmlsdGVyPFxuICBGIGV4dGVuZHMgSUVudGl0eUZpbHRlcjxGLCBULCBJRCwgQU8sIEZPPixcbiAgVCBleHRlbmRzIElFbnRpdHk8VCwgYW55PixcbiAgSUQgPSBudW1iZXIsXG4gIEFPIGV4dGVuZHMgRW50aXR5QXNPYmplY3RPcHRpb25zID0gRW50aXR5QXNPYmplY3RPcHRpb25zLFxuICBGTyA9IGFueSxcbj4gZXh0ZW5kcyBJRW50aXR5PEYsIElELCBBTywgRk8+IHtcbiAgYXNQb2RPYmplY3QoKTogYW55O1xuXG4gIGFzRmlsdGVyRm4oKTogRmlsdGVyRm48VD47XG5cbiAgaXNFbXB0eSgpOiBib29sZWFuO1xuXG4gIGNvdW50Tm90RW1wdHlDcml0ZXJpYSgpOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHlGaWx0ZXI8XG4gICAgRiBleHRlbmRzIElFbnRpdHlGaWx0ZXI8RiwgVCwgSUQsIEFPLCBGTz4sXG4gICAgVCBleHRlbmRzIElFbnRpdHk8VCwgYW55PixcbiAgICBJRCA9IG51bWJlcixcbiAgICBBTyBleHRlbmRzIEVudGl0eUFzT2JqZWN0T3B0aW9ucyA9IEVudGl0eUFzT2JqZWN0T3B0aW9ucyxcbiAgICBGTyA9IGFueSxcbiAgPlxuICBleHRlbmRzIEVudGl0eTxGLCBJRCwgQU8sIEZPPlxuICBpbXBsZW1lbnRzIElFbnRpdHlGaWx0ZXI8RiwgVCwgSUQsIEFPLCBGTz5cbntcbiAgLyoqXG4gICAqIENvbXBvc2Ugc29tZSBmaWx0ZXIgZnVuY3Rpb25zOiBhbGwgc2hvdWxkIHJldHVybiB0cnVlXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXJGbnNcbiAgICovXG4gIHN0YXRpYyBjb21wb3NlRmlsdGVyczxUIGV4dGVuZHMgSUVudGl0eTxULCBhbnk+PihmaWx0ZXJGbnM6IEZpbHRlckZuPFQ+W10pOiBGaWx0ZXJGbjxUPiB7XG4gICAgaWYgKGlzRW1wdHlBcnJheShmaWx0ZXJGbnMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiAoZW50aXR5KSA9PiAoZmlsdGVyRm5zIHx8IFtdKS5ldmVyeSgoZm4pID0+IGZuKGVudGl0eSkpO1xuICB9XG5cbiAgc3RhdGljIGNvbXBvc2U8RiBleHRlbmRzIEVudGl0eUZpbHRlcjxGLCBUPiwgVCBleHRlbmRzIElFbnRpdHk8VCwgYW55Pj4oZmlsdGVyczogRltdKTogRmlsdGVyRm48VD4ge1xuICAgIGNvbnN0IGZpbHRlckZucyA9IChmaWx0ZXJzIHx8IFtdKS5yZWR1Y2UoKHJlcywgZikgPT4ge1xuICAgICAgY29uc3QgZm5zID0gZi5idWlsZEZpbHRlcigpO1xuICAgICAgaWYgKCFmbnMpIHJldHVybiByZXM7XG4gICAgICByZXR1cm4gcmVzLmNvbmNhdChmbnMpO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gdGhpcy5jb21wb3NlRmlsdGVycyhmaWx0ZXJGbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBvc2Ugc29tZSBmaWx0ZXIgZnVuY3Rpb25zOiBhbGwgc2hvdWxkIHJldHVybiB0cnVlXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXJGbnNcbiAgICovXG4gIHN0YXRpYyBjb21wb3NlRm5zPFQgZXh0ZW5kcyBJRW50aXR5PFQsIGFueT4+KGZpbHRlckZuczogRmlsdGVyRm48VD5bXSk6IEZpbHRlckZuPFQ+IHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGZpbHRlckZucykpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChlbnRpdHkpID0+IChmaWx0ZXJGbnMgfHwgW10pLmV2ZXJ5KChmbikgPT4gZm4oZW50aXR5KSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihfX3R5cGVuYW1lPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoX190eXBlbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW4gYSBmaWx0ZXIsIGJlZm9yZSBzZW5kaW5nIHRvIHRoZSBwb2QgKGUuZyBjb252ZXJ0IGRhdGVzLCByZW1vdmUgaW50ZXJuYWwgcHJvcGVydGllcywgZXRjLilcbiAgICovXG4gIGFzUG9kT2JqZWN0KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuYXNPYmplY3QoTUlOSUZZX0VOVElUWV9GT1JfUE9EIGFzIEFPKTtcbiAgfVxuXG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY291bnROb3RFbXB0eUNyaXRlcmlhKCkgPT09IDA7XG4gIH1cblxuICBjb3VudE5vdEVtcHR5Q3JpdGVyaWEoKTogbnVtYmVyIHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5hc1BvZE9iamVjdCgpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhqc29uKS5maWx0ZXIoKGtleSkgPT4gdGhpcy5pc0NyaXRlcmlhTm90RW1wdHkoa2V5LCBqc29uW2tleV0pKS5sZW5ndGg7XG4gIH1cblxuICBhc0ZpbHRlckZuKCk6IEZpbHRlckZuPFQ+IHtcbiAgICBjb25zdCBmaWx0ZXJGbnMgPSB0aGlzLmJ1aWxkRmlsdGVyKCk7XG4gICAgcmV0dXJuIEVudGl0eUZpbHRlci5jb21wb3NlRm5zKGZpbHRlckZucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRGaWx0ZXIoKTogRmlsdGVyRm48VD5bXSB7XG4gICAgLy8gQ2FuIGJlIGNvbXBsZXRlZCBieSBzdWJjbGFzc2VzXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzQ3JpdGVyaWFOb3RFbXB0eShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXNcbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgIC8vIG5vdCBlbXB0eSBzdHJpbmdcbiAgICAgICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkgIT09ICcnKSB8fFxuICAgICAgICAvLyB2YWxpZCBudW1iZXJcbiAgICAgICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkgfHxcbiAgICAgICAgLy8gdmFsaWQgYm9vbGVhblxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAvLyBub3QgZW1wdHkgYXJyYXlcbiAgICAgICAgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHx8XG4gICAgICAgIC8vIGVudGl0eSB3aXRoIGFuIGlkXG4gICAgICAgIFJlZmVyZW50aWFsVXRpbHMuaXNOb3RFbXB0eSh2YWx1ZSkpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW50aXR5RmlsdGVyVXRpbHMge1xuICBzdGF0aWMgaXNFbnRpdHlGaWx0ZXI8RiBleHRlbmRzIEVudGl0eUZpbHRlcjxGLCBhbnk+PihvYmo6IFBhcnRpYWw8Rj4pOiBvYmogaXMgRiB7XG4gICAgcmV0dXJuIChvYmogJiYgb2JqLmFzUG9kT2JqZWN0ICYmIG9iai5hc0ZpbHRlckZuICYmIHRydWUpIHx8IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3Q8Rj4oc291cmNlOiBhbnksIGZpbHRlclR5cGU6IG5ldyAoKSA9PiBGKTogRiB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiBzb3VyY2U7XG4gICAgaWYgKGlzSW5zdGFuY2VPZihzb3VyY2UsIGZpbHRlclR5cGUpKSByZXR1cm4gc291cmNlIGFzIEY7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IGZpbHRlclR5cGUoKTtcbiAgICBpZiAoRW50aXR5RmlsdGVyVXRpbHMuaXNFbnRpdHlGaWx0ZXIodGFyZ2V0KSkge1xuICAgICAgdGFyZ2V0LmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,16 +1,41 @@
|
|
|
1
1
|
import { RxState } from '@rx-angular/state';
|
|
2
|
-
const STATE_VAR_NAME_KEY = '__stateName';
|
|
3
|
-
const DEFAULT_STATE_VAR_NAME = '_state';
|
|
4
2
|
let production = false;
|
|
5
3
|
export function enableRxStateProdMode() {
|
|
6
4
|
production = true;
|
|
7
5
|
}
|
|
6
|
+
// Utility for decorators
|
|
7
|
+
class DecoratorUtils {
|
|
8
|
+
static capitalize(str) {
|
|
9
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
10
|
+
}
|
|
11
|
+
static createMethodName(prefix, propertyKey) {
|
|
12
|
+
return `${prefix}${this.capitalize(propertyKey)}`;
|
|
13
|
+
}
|
|
14
|
+
static createPropertyName(prefix, propertyKey) {
|
|
15
|
+
return `${prefix}${this.capitalize(propertyKey)}`;
|
|
16
|
+
}
|
|
17
|
+
static validateStateProperty(target, stateVarName) {
|
|
18
|
+
if (!production && stateVarName !== 'this') {
|
|
19
|
+
return `
|
|
20
|
+
if (!${stateVarName}) {
|
|
21
|
+
throw new Error('Missing state! Please add a RxState in class: ' + this.constructor.name);
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
}
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const STATE_VAR_NAME_KEY = '__stateName';
|
|
29
|
+
const DEFAULT_STATE_VAR_NAME = '_state';
|
|
30
|
+
/**
|
|
31
|
+
* Decorator to register the RxState property in a component
|
|
32
|
+
* Must be used once per class hierarchy
|
|
33
|
+
*/
|
|
8
34
|
export function RxStateRegister() {
|
|
9
35
|
return function (target, key) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
throw new Error('Cannot define more than one @State() in class hierarchy');
|
|
36
|
+
if (target[STATE_VAR_NAME_KEY]) {
|
|
37
|
+
throw new Error(`Cannot define more than one @RxStateRegister() in class hierarchy. Found: ${target[STATE_VAR_NAME_KEY]} and ${key}`);
|
|
38
|
+
}
|
|
14
39
|
Object.defineProperty(target, STATE_VAR_NAME_KEY, {
|
|
15
40
|
value: key,
|
|
16
41
|
writable: false,
|
|
@@ -19,53 +44,174 @@ export function RxStateRegister() {
|
|
|
19
44
|
});
|
|
20
45
|
};
|
|
21
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Decorator for RxState properties with getter/setter access
|
|
49
|
+
* Creates reactive properties that sync with RxState
|
|
50
|
+
*/
|
|
22
51
|
export function RxStateProperty(statePropertyName, projectValueReducer) {
|
|
23
52
|
return function (target, key) {
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
53
|
+
// Vérification de type au runtime (optionnelle)
|
|
54
|
+
const descriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
55
|
+
if (descriptor && typeof descriptor.value !== 'undefined') {
|
|
56
|
+
// On peut ajouter ici des vérifications de type runtime si nécessaire
|
|
57
|
+
}
|
|
58
|
+
const finalStatePropertyName = statePropertyName || key;
|
|
59
|
+
const stateVarName = target instanceof RxState ? null : target[STATE_VAR_NAME_KEY] || DEFAULT_STATE_VAR_NAME;
|
|
60
|
+
const stateObject = stateVarName ? `this.${stateVarName}` : 'this';
|
|
61
|
+
// Generate method names
|
|
62
|
+
const getMethodName = DecoratorUtils.createMethodName('_get', key);
|
|
63
|
+
const setMethodName = DecoratorUtils.createMethodName('_set', key);
|
|
64
|
+
const reducerMethodName = DecoratorUtils.createMethodName('_reduce', key);
|
|
65
|
+
// State validation (only in development)
|
|
66
|
+
const stateValidation = DecoratorUtils.validateStateProperty(target, stateObject);
|
|
67
|
+
// Create reducer logic
|
|
68
|
+
const reducerLogic = projectValueReducer ? `(state) => this.${reducerMethodName}(state, value)` : '() => value';
|
|
69
|
+
// Create dynamic methods using Function constructor for better performance
|
|
70
|
+
const getter = new Function(`
|
|
71
|
+
return function ${getMethodName}() {
|
|
72
|
+
${stateValidation}
|
|
73
|
+
return ${stateObject}.get('${finalStatePropertyName}');
|
|
74
|
+
}
|
|
75
|
+
`)();
|
|
76
|
+
const setter = new Function(`
|
|
77
|
+
return function ${setMethodName}(value) {
|
|
78
|
+
${stateValidation}
|
|
79
|
+
${stateObject}.set('${finalStatePropertyName}', ${reducerLogic});
|
|
80
|
+
}
|
|
81
|
+
`)();
|
|
82
|
+
// Attach methods to prototype
|
|
39
83
|
target[getMethodName] = getter;
|
|
40
84
|
target[setMethodName] = setter;
|
|
41
|
-
if (projectValueReducer)
|
|
85
|
+
if (projectValueReducer) {
|
|
42
86
|
target[reducerMethodName] = projectValueReducer;
|
|
87
|
+
}
|
|
88
|
+
// Define property with getter/setter
|
|
43
89
|
Object.defineProperty(target, key, {
|
|
44
90
|
get: getter,
|
|
45
91
|
set: setter,
|
|
46
92
|
enumerable: true,
|
|
47
93
|
configurable: true,
|
|
48
94
|
});
|
|
95
|
+
// Development logging
|
|
96
|
+
if (!production) {
|
|
97
|
+
console.debug(`[RxStateProperty] ${target.constructor?.name}.${key} -> state.${finalStatePropertyName}`);
|
|
98
|
+
}
|
|
49
99
|
};
|
|
50
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Decorator for RxState observable selectors
|
|
103
|
+
* Creates observable properties that select from RxState
|
|
104
|
+
*
|
|
105
|
+
* ⚠️ IMPORTANT: La propriété décorée DOIT être typée comme Observable<T>
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* @RxStateSelect()
|
|
110
|
+
* protected pmfms$: Observable<IPmfm[]>; // ✅ Correct
|
|
111
|
+
*
|
|
112
|
+
* @RxStateSelect()
|
|
113
|
+
* protected badProperty: boolean; // ❌ TypeScript Error
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
51
116
|
export function RxStateSelect(statePropertyName, opts) {
|
|
52
117
|
return function (target, key) {
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
//
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
118
|
+
// Vérification simple basée sur la convention (optionnelle)
|
|
119
|
+
if (!production && !key.endsWith('$')) {
|
|
120
|
+
console.warn(`[RxStateSelect] Convention: Property ${target.constructor?.name}.${key} should end with '$' to indicate it's an Observable`);
|
|
121
|
+
}
|
|
122
|
+
// Determine state property name (remove trailing $ if present)
|
|
123
|
+
const finalStatePropertyName = statePropertyName || key.replace(/\$$/, '');
|
|
124
|
+
// Determine state object
|
|
125
|
+
const stateVarName = target instanceof RxState ? null : target[STATE_VAR_NAME_KEY] || opts?.stateName || DEFAULT_STATE_VAR_NAME;
|
|
126
|
+
const stateObject = stateVarName ? `this.${stateVarName}` : 'this';
|
|
127
|
+
// Create cache property name
|
|
128
|
+
const cachePropertyName = `_${key}`;
|
|
129
|
+
// Generate method name
|
|
130
|
+
const getMethodName = DecoratorUtils.createMethodName('_get', key.replace(/\$$/, '') + '$');
|
|
131
|
+
// Create observable selector logic
|
|
132
|
+
const observableSelector = finalStatePropertyName === '$'
|
|
133
|
+
? `${stateObject}.$`
|
|
134
|
+
: finalStatePropertyName.includes('.')
|
|
135
|
+
? `${stateObject}.select('${finalStatePropertyName.split('.').join("', '")}')`
|
|
136
|
+
: `${stateObject}.select('${finalStatePropertyName}')`;
|
|
137
|
+
// State validation
|
|
138
|
+
const stateValidation = DecoratorUtils.validateStateProperty(target, stateObject);
|
|
139
|
+
// Create getter with caching
|
|
140
|
+
const getter = new Function(`
|
|
141
|
+
return function ${getMethodName}() {
|
|
142
|
+
${stateValidation}
|
|
143
|
+
if (!this.${cachePropertyName}) {
|
|
144
|
+
this.${cachePropertyName} = ${observableSelector};
|
|
145
|
+
}
|
|
146
|
+
return this.${cachePropertyName};
|
|
147
|
+
}
|
|
148
|
+
`)();
|
|
149
|
+
// Attach method to prototype
|
|
150
|
+
target[getMethodName] = getter;
|
|
151
|
+
// Define property with getter only
|
|
152
|
+
Object.defineProperty(target, key, {
|
|
153
|
+
get: getter,
|
|
154
|
+
enumerable: true,
|
|
155
|
+
configurable: false,
|
|
156
|
+
});
|
|
157
|
+
// Development logging
|
|
158
|
+
if (!production) {
|
|
159
|
+
console.debug(`[RxStateSelect] ${target.constructor?.name}.${key} -> ${observableSelector}`);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Utility decorator to create computed observables from state
|
|
165
|
+
*
|
|
166
|
+
* ⚠️ IMPORTANT: La propriété décorée DOIT être typée comme Observable<T>
|
|
167
|
+
*/
|
|
168
|
+
export function RxStateComputed(dependencies, computeFn, opts) {
|
|
169
|
+
return function (target, key) {
|
|
170
|
+
// Vérification simple basée sur la convention (optionnelle)
|
|
171
|
+
if (!production && !key.endsWith('$')) {
|
|
172
|
+
console.warn(`[RxStateComputed] Convention: Property ${target.constructor?.name}.${key} should end with '$' to indicate it's an Observable`);
|
|
173
|
+
}
|
|
174
|
+
const stateVarName = target instanceof RxState ? null : target[STATE_VAR_NAME_KEY] || opts?.stateName || DEFAULT_STATE_VAR_NAME;
|
|
175
|
+
const stateObject = stateVarName ? `this.${stateVarName}` : 'this';
|
|
176
|
+
const cachePropertyName = `_${key}`;
|
|
177
|
+
const getMethodName = DecoratorUtils.createMethodName('_get', key.replace(/\$$/, '') + '$');
|
|
178
|
+
const computeMethodName = DecoratorUtils.createMethodName('_compute', key);
|
|
179
|
+
const keyCompareMapPropertyName = DecoratorUtils.createPropertyName(`_compareMap`, key);
|
|
180
|
+
// State validation
|
|
181
|
+
const stateValidation = DecoratorUtils.validateStateProperty(target, stateObject);
|
|
182
|
+
// Create dependencies array as string for code generation
|
|
183
|
+
const dependenciesStr = dependencies.map((dep) => `'${dep}'`).join(', ');
|
|
184
|
+
// Create the compute method as string, for code generation
|
|
185
|
+
const computeMethodNameStr = computeFn ? `, (slice) => this.${computeMethodName}(slice)` : '';
|
|
186
|
+
// Create the comparator map function as string, for code generation
|
|
187
|
+
const keyCompareMapStr = opts?.keyCompareMap ? `, this.${keyCompareMapPropertyName}` : '';
|
|
188
|
+
// Create getter with caching using RxState's native multi-select + pipe(map())
|
|
189
|
+
const getter = new Function(`
|
|
190
|
+
return function ${getMethodName}() {
|
|
191
|
+
${stateValidation}
|
|
192
|
+
if (!this.${cachePropertyName}) {
|
|
193
|
+
const { map } = require('rxjs/operators');
|
|
194
|
+
this.${cachePropertyName} = ${stateObject}.select([${dependenciesStr}]${computeMethodNameStr}${keyCompareMapStr});
|
|
195
|
+
}
|
|
196
|
+
return this.${cachePropertyName};
|
|
197
|
+
}
|
|
198
|
+
`)();
|
|
199
|
+
// Attach compute method, optional keyCompareMap with unique name, and getter to prototype
|
|
200
|
+
if (computeFn)
|
|
201
|
+
target[computeMethodName] = computeFn;
|
|
202
|
+
if (opts?.keyCompareMap)
|
|
203
|
+
target[keyCompareMapPropertyName] = opts.keyCompareMap;
|
|
63
204
|
target[getMethodName] = getter;
|
|
205
|
+
// Define property with getter only
|
|
64
206
|
Object.defineProperty(target, key, {
|
|
65
207
|
get: getter,
|
|
66
208
|
enumerable: true,
|
|
67
209
|
configurable: false,
|
|
68
210
|
});
|
|
211
|
+
// Development logging
|
|
212
|
+
if (!production) {
|
|
213
|
+
console.debug(`[RxStateComputed] ${target.constructor?.name}.${key} -> ${stateObject}.select([${dependenciesStr}]).pipe(map(computeFn))`);
|
|
214
|
+
}
|
|
69
215
|
};
|
|
70
216
|
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtc3RhdGUuZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3J4LXN0YXRlL3J4LXN0YXRlLmRlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdqRSxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztBQUN6QyxNQUFNLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztBQUV4QyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDdkIsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZTtJQUM3QixPQUFPLFVBQVUsTUFBbUIsRUFBRSxHQUFXO1FBQy9DLFFBQVE7UUFDUiwrREFBK0Q7UUFFL0QsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFFM0csTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7WUFDaEQsS0FBSyxFQUFFLEdBQUc7WUFDVixRQUFRLEVBQUUsS0FBSztZQUNmLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixpQkFBOEIsRUFDOUIsbUJBQWtEO0lBRWxELE9BQU8sVUFBVSxNQUFtQixFQUFFLEdBQVc7UUFDL0MsUUFBUTtRQUNSLHVFQUF1RTtRQUV2RSxpQkFBaUIsR0FBSSxpQkFBNEIsSUFBSSxHQUFHLENBQUM7UUFDekQsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFN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QUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUVsSixNQUFNLGFBQWEsR0FBRyxpQkFBaUIsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxZQUFZLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN6SSxNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FDekIsbUJBQW1CLGFBQWEsbUJBQW1CLElBQUksVUFBVSxJQUFJLE1BQU0sYUFBYSxvQkFBb0IsSUFBSSxNQUFNLENBQ3ZILEVBQUUsQ0FBQztRQUVKLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7UUFFL0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ2pDLEdBQUcsRUFBRSxNQUFNO1lBQ1gsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2plY3RWYWx1ZVJlZHVjZXIsIFJ4U3RhdGUgfSBmcm9tICdAcngtYW5ndWxhci9zdGF0ZSc7XG5cbmRlY2xhcmUgdHlwZSBDb25zdHJ1Y3RvciA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueTtcbmNvbnN0IFNUQVRFX1ZBUl9OQU1FX0tFWSA9ICdfX3N0YXRlTmFtZSc7XG5jb25zdCBERUZBVUxUX1NUQVRFX1ZBUl9OQU1FID0gJ19zdGF0ZSc7XG5cbmxldCBwcm9kdWN0aW9uID0gZmFsc2U7XG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlUnhTdGF0ZVByb2RNb2RlKCkge1xuICBwcm9kdWN0aW9uID0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJ4U3RhdGVSZWdpc3RlcigpOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBDb25zdHJ1Y3Rvciwga2V5OiBzdHJpbmcpIHtcbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhgJHt0YXJnZXQuY29uc3RydWN0b3I/Lm5hbWV9IEBTdGF0ZSgpICR7a2V5fWApO1xuXG4gICAgaWYgKHRhcmdldFtTVEFURV9WQVJfTkFNRV9LRVldKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWZpbmUgbW9yZSB0aGFuIG9uZSBAU3RhdGUoKSBpbiBjbGFzcyBoaWVyYXJjaHknKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFNUQVRFX1ZBUl9OQU1FX0tFWSwge1xuICAgICAgdmFsdWU6IGtleSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJ4U3RhdGVQcm9wZXJ0eTxUID0gYW55LCBLIGV4dGVuZHMga2V5b2YgVCA9IGFueSwgViBleHRlbmRzIFRbS10gPSBhbnk+KFxuICBzdGF0ZVByb3BlcnR5TmFtZT86IHN0cmluZyB8IEssXG4gIHByb2plY3RWYWx1ZVJlZHVjZXI/OiBQcm9qZWN0VmFsdWVSZWR1Y2VyPFQsIEssIFY+XG4pOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBDb25zdHJ1Y3Rvciwga2V5OiBzdHJpbmcpIHtcbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhgJHt0YXJnZXQuY29uc3RydWN0b3I/Lm5hbWV9IEBTdGF0ZVByb3BlcnR5KCkgJHtrZXl9YCk7XG5cbiAgICBzdGF0ZVByb3BlcnR5TmFtZSA9IChzdGF0ZVByb3BlcnR5TmFtZSBhcyBzdHJpbmcpIHx8IGtleTtcbiAgICBjb25zdCBzdGF0ZSA9IHRhcmdldCBpbnN0YW5jZW9mIFJ4U3RhdGUgPyBudWxsIDogdGFyZ2V0W1NUQVRFX1ZBUl9OQU1FX0tFWV0gfHwgREVGQVVMVF9TVEFURV9WQVJfTkFNRTtcbiAgICBjb25zdCBzdGF0ZU9iaiA9IHN0YXRlID8gYHRoaXMuJHtzdGF0ZX1gIDogYHRoaXNgO1xuXG4gICAgLy8gcHJvcGVydHkgZ2V0dGVyXG4gICAgY29uc3QgZ2V0TWV0aG9kTmFtZSA9ICdfZ2V0JyArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTtcbiAgICBjb25zdCBzZXRNZXRob2ROYW1lID0gJ19zZXQnICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xuICAgIGNvbnN0IHJlZHVjZXJNZXRob2ROYW1lID0gJ19yZWR1Y2UnICsga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpO1xuXG4gICAgY29uc3QgY2hlY2tTdGF0ZUV4aXN0cyA9XG4gICAgICBzdGF0ZU9iaiAhPT0gJ3RoaXMnICYmICFwcm9kdWN0aW9uXG4gICAgICAgID8gYFxcbiAgaWYgKCEke3N0YXRlT2JqfSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHN0YXRlISBQbGVhc2UgYWRkIGEgUnhTdGF0ZSBpbiBjbGFzczogJyArIHRoaXMuY29uc3RydWN0b3IubmFtZSk7YFxuICAgICAgICA6ICcnO1xuXG4gICAgY29uc3QgcmVkdWNlciA9IHByb2plY3RWYWx1ZVJlZHVjZXIgPyBgKHN0YXRlKSA9PiB0aGlzLiR7cmVkdWNlck1ldGhvZE5hbWV9KHN0YXRlLCB2YWx1ZSlgIDogJygpID0+IHZhbHVlJztcbiAgICBjb25zdCBnZXR0ZXIgPSBuZXcgRnVuY3Rpb24oYHJldHVybiBmdW5jdGlvbiAke2dldE1ldGhvZE5hbWV9KCl7XFxuICByZXR1cm4gJHtzdGF0ZU9ian0uZ2V0KCcke3N0YXRlUHJvcGVydHlOYW1lfScpO1xcbn1gKSgpO1xuICAgIGNvbnN0IHNldHRlciA9IG5ldyBGdW5jdGlvbihcbiAgICAgIGByZXR1cm4gZnVuY3Rpb24gJHtzZXRNZXRob2ROYW1lfSh2YWx1ZSl7JHtjaGVja1N0YXRlRXhpc3RzfVxcbiAgJHtzdGF0ZU9ian0uc2V0KCcke3N0YXRlUHJvcGVydHlOYW1lfScsICR7cmVkdWNlcn0pO1xcbn1gXG4gICAgKSgpO1xuXG4gICAgdGFyZ2V0W2dldE1ldGhvZE5hbWVdID0gZ2V0dGVyO1xuICAgIHRhcmdldFtzZXRNZXRob2ROYW1lXSA9IHNldHRlcjtcbiAgICBpZiAocHJvamVjdFZhbHVlUmVkdWNlcikgdGFyZ2V0W3JlZHVjZXJNZXRob2ROYW1lXSA9IHByb2plY3RWYWx1ZVJlZHVjZXI7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGdldDogZ2V0dGVyLFxuICAgICAgc2V0OiBzZXR0ZXIsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUnhTdGF0ZVNlbGVjdDxUID0gYW55PihzdGF0ZVByb3BlcnR5TmFtZT86IHN0cmluZyB8IGtleW9mIFQgfCAnJCcsIG9wdHM/OiB7IHN0YXRlTmFtZT86IHN0cmluZyB9KTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQ29uc3RydWN0b3IsIGtleTogc3RyaW5nKSB7XG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoYCR7dGFyZ2V0LmNvbnN0cnVjdG9yPy5uYW1lfSBAUnhTdGF0ZVNlbGVjdCgpICR7a2V5fWApO1xuXG4gICAgc3RhdGVQcm9wZXJ0eU5hbWUgPSAoc3RhdGVQcm9wZXJ0eU5hbWUgYXMgc3RyaW5nKSB8fCBrZXkucmVwbGFjZSgvXFwkPyQvLCAnJyk7XG4gICAgY29uc3Qgc3RhdGUgPSB0YXJnZXQgaW5zdGFuY2VvZiBSeFN0YXRlID8gbnVsbCA6IHRhcmdldFtTVEFURV9WQVJfTkFNRV9LRVldIHx8IG9wdHM/LnN0YXRlTmFtZSB8fCBERUZBVUxUX1NUQVRFX1ZBUl9OQU1FO1xuICAgIGNvbnN0IHN0YXRlT2JqID0gc3RhdGUgPyBgdGhpcy4ke3N0YXRlfWAgOiBgdGhpc2A7XG5cbiAgICBjb25zdCBfa2V5ID0gJ18nICsga2V5O1xuXG4gICAgLy8gcHJvcGVydHkgZ2V0dGVyXG4gICAgY29uc3QgZ2V0TWV0aG9kTmFtZSA9ICdfZ2V0JyArIHN0YXRlUHJvcGVydHlOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgKHN0YXRlUHJvcGVydHlOYW1lLmxlbmd0aCA+IDEgPyBzdGF0ZVByb3BlcnR5TmFtZS5zbGljZSgxKSA6ICcnKSArICckJztcblxuICAgIGNvbnN0IG9ic2VydmFibGVPYmogPSBzdGF0ZVByb3BlcnR5TmFtZSA9PT0gJyQnID8gYCR7c3RhdGVPYmp9LiRgIDogYCR7c3RhdGVPYmp9LnNlbGVjdCgnJHtzdGF0ZVByb3BlcnR5TmFtZS5zcGxpdCgnLicpLmpvaW4oXCInLCAnXCIpfScpYDtcbiAgICBjb25zdCBnZXR0ZXIgPSBuZXcgRnVuY3Rpb24oXG4gICAgICBgcmV0dXJuIGZ1bmN0aW9uICR7Z2V0TWV0aG9kTmFtZX0oKXtcXG4gaWYgKCF0aGlzLiR7X2tleX0pIHRoaXMuJHtfa2V5fSA9ICR7b2JzZXJ2YWJsZU9ian07XFxuICByZXR1cm4gdGhpcy4ke19rZXl9O1xcbn1gXG4gICAgKSgpO1xuXG4gICAgdGFyZ2V0W2dldE1ldGhvZE5hbWVdID0gZ2V0dGVyO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBnZXQ6IGdldHRlcixcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH0pO1xuICB9O1xufVxuIl19
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtc3RhdGUuZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3J4LXN0YXRlL3J4LXN0YXRlLmRlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUF1QixPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDdkIsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLENBQUM7QUFRRCx5QkFBeUI7QUFDekIsTUFBTSxjQUFjO0lBQ2xCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBVztRQUMzQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQWMsRUFBRSxXQUFtQjtRQUN6RCxPQUFPLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQWMsRUFBRSxXQUFtQjtRQUMzRCxPQUFPLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQVcsRUFBRSxZQUFvQjtRQUM1RCxJQUFJLENBQUMsVUFBVSxJQUFJLFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUMzQyxPQUFPO2VBQ0UsWUFBWTs7O09BR3BCLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0Y7QUFFRCxNQUFNLGtCQUFrQixHQUFHLGFB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c0I7UUFDdEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQ1gscUJBQXFCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEdBQWEsT0FBTyxXQUFXLFlBQVksZUFBZSx5QkFBeUIsQ0FDckksQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJvamVjdFZhbHVlUmVkdWNlciwgUnhTdGF0ZSB9IGZyb20gJ0ByeC1hbmd1bGFyL3N0YXRlJztcblxubGV0IHByb2R1Y3Rpb24gPSBmYWxzZTtcbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVSeFN0YXRlUHJvZE1vZGUoKSB7XG4gIHByb2R1Y3Rpb24gPSB0cnVlO1xufVxuXG5kZWNsYXJlIHR5cGUgQ29uc3RydWN0b3I8VCA9IGFueT4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xuXG50eXBlIE9ic2VydmFibGVQcm9wZXJ0eURlY29yYXRvcjxUPiA9IDxLIGV4dGVuZHMgUHJvcGVydHlLZXk+KHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogSykgPT4gdm9pZDtcblxudHlwZSBTdGF0ZVByb3BlcnR5RGVjb3JhdG9yPFQ+ID0gPEsgZXh0ZW5kcyBQcm9wZXJ0eUtleT4odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBLKSA9PiB2b2lkO1xuXG4vLyBVdGlsaXR5IGZvciBkZWNvcmF0b3JzXG5jbGFzcyBEZWNvcmF0b3JVdGlscyB7XG4gIHN0YXRpYyBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZU1ldGhvZE5hbWUocHJlZml4OiBzdHJpbmcsIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwcmVmaXh9JHt0aGlzLmNhcGl0YWxpemUocHJvcGVydHlLZXkpfWA7XG4gIH1cbiAgc3RhdGljIGNyZWF0ZVByb3BlcnR5TmFtZShwcmVmaXg6IHN0cmluZywgcHJvcGVydHlLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3ByZWZpeH0ke3RoaXMuY2FwaXRhbGl6ZShwcm9wZXJ0eUtleSl9YDtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZVN0YXRlUHJvcGVydHkodGFyZ2V0OiBhbnksIHN0YXRlVmFyTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXByb2R1Y3Rpb24gJiYgc3RhdGVWYXJOYW1lICE9PSAndGhpcycpIHtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIGlmICghJHtzdGF0ZVZhck5hbWV9KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHN0YXRlISBQbGVhc2UgYWRkIGEgUnhTdGF0ZSBpbiBjbGFzczogJyArIHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIGA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5jb25zdCBTVEFURV9WQVJfTkFNRV9LRVkgPSAnX19zdGF0ZU5hbWUnO1xuY29uc3QgREVGQVVMVF9TVEFURV9WQVJfTkFNRSA9ICdfc3RhdGUnO1xuXG4vKipcbiAqIERlY29yYXRvciB0byByZWdpc3RlciB0aGUgUnhTdGF0ZSBwcm9wZXJ0eSBpbiBhIGNvbXBvbmVudFxuICogTXVzdCBiZSB1c2VkIG9uY2UgcGVyIGNsYXNzIGhpZXJhcmNoeVxuICovXG5leHBvcnQgZnVuY3Rpb24gUnhTdGF0ZVJlZ2lzdGVyKCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IENvbnN0cnVjdG9yPGFueT4sIGtleTogc3RyaW5nKSB7XG4gICAgaWYgKHRhcmdldFtTVEFURV9WQVJfTkFNRV9LRVldKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkZWZpbmUgbW9yZSB0aGFuIG9uZSBAUnhTdGF0ZVJlZ2lzdGVyKCkgaW4gY2xhc3MgaGllcmFyY2h5LiBGb3VuZDogJHt0YXJnZXRbU1RBVEVfVkFSX05BTUVfS0VZXX0gYW5kICR7a2V5fWApO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFNUQVRFX1ZBUl9OQU1FX0tFWSwge1xuICAgICAgdmFsdWU6IGtleSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWNvcmF0b3IgZm9yIFJ4U3RhdGUgcHJvcGVydGllcyB3aXRoIGdldHRlci9zZXR0ZXIgYWNjZXNzXG4gKiBDcmVhdGVzIHJlYWN0aXZlIHByb3BlcnRpZXMgdGhhdCBzeW5jIHdpdGggUnhTdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gUnhTdGF0ZVByb3BlcnR5PFQgPSBhbnksIEsgZXh0ZW5kcyBrZXlvZiBUID0gYW55LCBWIGV4dGVuZHMgVFtLXSA9IGFueT4oXG4gIHN0YXRlUHJvcGVydHlOYW1lPzogc3RyaW5nIHwgSyxcbiAgcHJvamVjdFZhbHVlUmVkdWNlcj86IFByb2plY3RWYWx1ZVJlZHVjZXI8VCwgSywgVj5cbik6IFN0YXRlUHJvcGVydHlEZWNvcmF0b3I8Vj4ge1xuICByZXR1cm4gZnVuY3Rpb24gPFAgZXh0ZW5kcyBQcm9wZXJ0eUtleT4odGFyZ2V0OiBhbnksIGtleTogUCkge1xuICAgIC8vIFbDqXJpZmljYXRpb24gZGUgdHlwZSBhdSBydW50aW1lIChvcHRpb25uZWxsZSlcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgaWYgKGRlc2NyaXB0b3IgJiYgdHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBPbiBwZXV0IGFqb3V0ZXIgaWNpIGRlcyB2w6lyaWZpY2F0aW9ucyBkZSB0eXBlIHJ1bnRpbWUgc2kgbsOpY2Vzc2FpcmVcbiAgICB9XG5cbiAgICBjb25zdCBmaW5hbFN0YXRlUHJvcGVydHlOYW1lID0gKHN0YXRlUHJvcGVydHlOYW1lIGFzIHN0cmluZykgfHwgKGtleSBhcyBzdHJpbmcpO1xuICAgIGNvbnN0IHN0YXRlVmFyTmFtZSA9IHRhcmdldCBpbnN0YW5jZW9mIFJ4U3RhdGUgPyBudWxsIDogdGFyZ2V0W1NUQVRFX1ZBUl9OQU1FX0tFWV0gfHwgREVGQVVMVF9TVEFURV9WQVJfTkFNRTtcbiAgICBjb25zdCBzdGF0ZU9iamVjdCA9IHN0YXRlVmFyTmFtZSA/IGB0aGlzLiR7c3RhdGVWYXJOYW1lfWAgOiAndGhpcyc7XG5cbiAgICAvLyBHZW5lcmF0ZSBtZXRob2QgbmFtZXNcbiAgICBjb25zdCBnZXRNZXRob2ROYW1lID0gRGVjb3JhdG9yVXRpbHMuY3JlYXRlTWV0aG9kTmFtZSgnX2dldCcsIGtleSBhcyBzdHJpbmcpO1xuICAgIGNvbnN0IHNldE1ldGhvZE5hbWUgPSBEZWNvcmF0b3JVdGlscy5jcmVhdGVNZXRob2ROYW1lKCdfc2V0Jywga2V5IGFzIHN0cmluZyk7XG4gICAgY29uc3QgcmVkdWNlck1ldGhvZE5hbWUgPSBEZWNvcmF0b3JVdGlscy5jcmVhdGVNZXRob2ROYW1lKCdfcmVkdWNlJywga2V5IGFzIHN0cmluZyk7XG5cbiAgICAvLyBTdGF0ZSB2YWxpZGF0aW9uIChvbmx5IGluIGRldmVsb3BtZW50KVxuICAgIGNvbnN0IHN0YXRlVmFsaWRhdGlvbiA9IERlY29yYXRvclV0aWxzLnZhbGlkYXRlU3RhdGVQcm9wZXJ0eSh0YXJnZXQsIHN0YXRlT2JqZWN0KTtcblxuICAgIC8vIENyZWF0ZSByZWR1Y2VyIGxvZ2ljXG4gICAgY29uc3QgcmVkdWNlckxvZ2ljID0gcHJvamVjdFZhbHVlUmVkdWNlciA/IGAoc3RhdGUpID0+IHRoaXMuJHtyZWR1Y2VyTWV0aG9kTmFtZX0oc3RhdGUsIHZhbHVlKWAgOiAnKCkgPT4gdmFsdWUnO1xuXG4gICAgLy8gQ3JlYXRlIGR5bmFtaWMgbWV0aG9kcyB1c2luZyBGdW5jdGlvbiBjb25zdHJ1Y3RvciBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgY29uc3QgZ2V0dGVyID0gbmV3IEZ1bmN0aW9uKGBcbiAgICAgIHJldHVybiBmdW5jdGlvbiAke2dldE1ldGhvZE5hbWV9KCkge1xuICAgICAgICAke3N0YXRlVmFsaWRhdGlvbn1cbiAgICAgICAgcmV0dXJuICR7c3RhdGVPYmplY3R9LmdldCgnJHtmaW5hbFN0YXRlUHJvcGVydHlOYW1lfScpO1xuICAgICAgfVxuICAgIGApKCk7XG5cbiAgICBjb25zdCBzZXR0ZXIgPSBuZXcgRnVuY3Rpb24oYFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICR7c2V0TWV0aG9kTmFtZX0odmFsdWUpIHtcbiAgICAgICAgJHtzdGF0ZVZhbGlkYXRpb259XG4gICAgICAgICR7c3RhdGVPYmplY3R9LnNldCgnJHtmaW5hbFN0YXRlUHJvcGVydHlOYW1lfScsICR7cmVkdWNlckxvZ2ljfSk7XG4gICAgICB9XG4gICAgYCkoKTtcblxuICAgIC8vIEF0dGFjaCBtZXRob2RzIHRvIHByb3RvdHlwZVxuICAgIHRhcmdldFtnZXRNZXRob2ROYW1lXSA9IGdldHRlcjtcbiAgICB0YXJnZXRbc2V0TWV0aG9kTmFtZV0gPSBzZXR0ZXI7XG4gICAgaWYgKHByb2plY3RWYWx1ZVJlZHVjZXIpIHtcbiAgICAgIHRhcmdldFtyZWR1Y2VyTWV0aG9kTmFtZV0gPSBwcm9qZWN0VmFsdWVSZWR1Y2VyO1xuICAgIH1cblxuICAgIC8vIERlZmluZSBwcm9wZXJ0eSB3aXRoIGdldHRlci9zZXR0ZXJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGdldDogZ2V0dGVyLFxuICAgICAgc2V0OiBzZXR0ZXIsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gRGV2ZWxvcG1lbnQgbG9nZ2luZ1xuICAgIGlmICghcHJvZHVjdGlvbikge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW1J4U3RhdGVQcm9wZXJ0eV0gJHt0YXJnZXQuY29uc3RydWN0b3I/Lm5hbWV9LiR7a2V5IGFzIHN0cmluZ30gLT4gc3RhdGUuJHtmaW5hbFN0YXRlUHJvcGVydHlOYW1lfWApO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBEZWNvcmF0b3IgZm9yIFJ4U3RhdGUgb2JzZXJ2YWJsZSBzZWxlY3RvcnNcbiAqIENyZWF0ZXMgb2JzZXJ2YWJsZSBwcm9wZXJ0aWVzIHRoYXQgc2VsZWN0IGZyb20gUnhTdGF0ZVxuICpcbiAqIOKaoO+4jyBJTVBPUlRBTlQ6IExhIHByb3ByacOpdMOpIGTDqWNvcsOpZSBET0lUIMOqdHJlIHR5cMOpZSBjb21tZSBPYnNlcnZhYmxlPFQ+XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBSeFN0YXRlU2VsZWN0KClcbiAqIHByb3RlY3RlZCBwbWZtcyQ6IE9ic2VydmFibGU8SVBtZm1bXT47IC8vIOKchSBDb3JyZWN0XG4gKlxuICogQFJ4U3RhdGVTZWxlY3QoKVxuICogcHJvdGVjdGVkIGJhZFByb3BlcnR5OiBib29sZWFuOyAvLyDinYwgVHlwZVNjcmlwdCBFcnJvclxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSeFN0YXRlU2VsZWN0PFQgPSBhbnksIFIgPSBUW2tleW9mIFRdPihcbiAgc3RhdGVQcm9wZXJ0eU5hbWU/OiBzdHJpbmcgfCBrZXlvZiBUIHwgJyQnLFxuICBvcHRzPzoge1xuICAgIHN0YXRlTmFtZT86IHN0cmluZztcbiAgfVxuKTogT2JzZXJ2YWJsZVByb3BlcnR5RGVjb3JhdG9yPE9ic2VydmFibGU8Uj4+IHtcbiAgcmV0dXJuIGZ1bmN0aW9uIDxQIGV4dGVuZHMgUHJvcGVydHlLZXk+KHRhcmdldDogYW55LCBrZXk6IFApIHtcbiAgICAvLyBWw6lyaWZpY2F0aW9uIHNpbXBsZSBiYXPDqWUgc3VyIGxhIGNvbnZlbnRpb24gKG9wdGlvbm5lbGxlKVxuICAgIGlmICghcHJvZHVjdGlvbiAmJiAhKGtleSBhcyBzdHJpbmcpLmVuZHNXaXRoKCckJykpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtSeFN0YXRlU2VsZWN0XSBDb252ZW50aW9uOiBQcm9wZXJ0eSAke3RhcmdldC5jb25zdHJ1Y3Rvcj8ubmFtZX0uJHtrZXkgYXMgc3RyaW5nfSBzaG91bGQgZW5kIHdpdGggJyQnIHRvIGluZGljYXRlIGl0J3MgYW4gT2JzZXJ2YWJsZWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIHN0YXRlIHByb3BlcnR5IG5hbWUgKHJlbW92ZSB0cmFpbGluZyAkIGlmIHByZXNlbnQpXG4gICAgY29uc3QgZmluYWxTdGF0ZVByb3BlcnR5TmFtZSA9IChzdGF0ZVByb3BlcnR5TmFtZSBhcyBzdHJpbmcpIHx8IChrZXkgYXMgc3RyaW5nKS5yZXBsYWNlKC9cXCQkLywgJycpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHN0YXRlIG9iamVjdFxuICAgIGNvbnN0IHN0YXRlVmFyTmFtZSA9IHRhcmdldCBpbnN0YW5jZW9mIFJ4U3RhdGUgPyBudWxsIDogdGFyZ2V0W1NUQVRFX1ZBUl9OQU1FX0tFWV0gfHwgb3B0cz8uc3RhdGVOYW1lIHx8IERFRkFVTFRfU1RBVEVfVkFSX05BTUU7XG4gICAgY29uc3Qgc3RhdGVPYmplY3QgPSBzdGF0ZVZhck5hbWUgPyBgdGhpcy4ke3N0YXRlVmFyTmFtZX1gIDogJ3RoaXMnO1xuXG4gICAgLy8gQ3JlYXRlIGNhY2hlIHByb3BlcnR5IG5hbWVcbiAgICBjb25zdCBjYWNoZVByb3BlcnR5TmFtZSA9IGBfJHtrZXkgYXMgc3RyaW5nfWA7XG5cbiAgICAvLyBHZW5lcmF0ZSBtZXRob2QgbmFtZVxuICAgIGNvbnN0IGdldE1ldGhvZE5hbWUgPSBEZWNvcmF0b3JVdGlscy5jcmVhdGVNZXRob2ROYW1lKCdfZ2V0JywgKGtleSBhcyBzdHJpbmcpLnJlcGxhY2UoL1xcJCQvLCAnJykgKyAnJCcpO1xuXG4gICAgLy8gQ3JlYXRlIG9ic2VydmFibGUgc2VsZWN0b3IgbG9naWNcbiAgICBjb25zdCBvYnNlcnZhYmxlU2VsZWN0b3IgPVxuICAgICAgZmluYWxTdGF0ZVByb3BlcnR5TmFtZSA9PT0gJyQnXG4gICAgICAgID8gYCR7c3RhdGVPYmplY3R9LiRgXG4gICAgICAgIDogZmluYWxTdGF0ZVByb3BlcnR5TmFtZS5pbmNsdWRlcygnLicpXG4gICAgICAgICAgPyBgJHtzdGF0ZU9iamVjdH0uc2VsZWN0KCcke2ZpbmFsU3RhdGVQcm9wZXJ0eU5hbWUuc3BsaXQoJy4nKS5qb2luKFwiJywgJ1wiKX0nKWBcbiAgICAgICAgICA6IGAke3N0YXRlT2JqZWN0fS5zZWxlY3QoJyR7ZmluYWxTdGF0ZVByb3BlcnR5TmFtZX0nKWA7XG5cbiAgICAvLyBTdGF0ZSB2YWxpZGF0aW9uXG4gICAgY29uc3Qgc3RhdGVWYWxpZGF0aW9uID0gRGVjb3JhdG9yVXRpbHMudmFsaWRhdGVTdGF0ZVByb3BlcnR5KHRhcmdldCwgc3RhdGVPYmplY3QpO1xuXG4gICAgLy8gQ3JlYXRlIGdldHRlciB3aXRoIGNhY2hpbmdcbiAgICBjb25zdCBnZXR0ZXIgPSBuZXcgRnVuY3Rpb24oYFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICR7Z2V0TWV0aG9kTmFtZX0oKSB7XG4gICAgICAgICR7c3RhdGVWYWxpZGF0aW9ufVxuICAgICAgICBpZiAoIXRoaXMuJHtjYWNoZVByb3BlcnR5TmFtZX0pIHtcbiAgICAgICAgICB0aGlzLiR7Y2FjaGVQcm9wZXJ0eU5hbWV9ID0gJHtvYnNlcnZhYmxlU2VsZWN0b3J9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiR7Y2FjaGVQcm9wZXJ0eU5hbWV9O1xuICAgICAgfVxuICAgIGApKCk7XG5cbiAgICAvLyBBdHRhY2ggbWV0aG9kIHRvIHByb3RvdHlwZVxuICAgIHRhcmdldFtnZXRNZXRob2ROYW1lXSA9IGdldHRlcjtcblxuICAgIC8vIERlZmluZSBwcm9wZXJ0eSB3aXRoIGdldHRlciBvbmx5XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBnZXQ6IGdldHRlcixcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gRGV2ZWxvcG1lbnQgbG9nZ2luZ1xuICAgIGlmICghcHJvZHVjdGlvbikge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW1J4U3RhdGVTZWxlY3RdICR7dGFyZ2V0LmNvbnN0cnVjdG9yPy5uYW1lfS4ke2tleSBhcyBzdHJpbmd9IC0+ICR7b2JzZXJ2YWJsZVNlbGVjdG9yfWApO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGRlY29yYXRvciB0byBjcmVhdGUgY29tcHV0ZWQgb2JzZXJ2YWJsZXMgZnJvbSBzdGF0ZVxuICpcbiAqIOKaoO+4jyBJTVBPUlRBTlQ6IExhIHByb3ByacOpdMOpIGTDqWNvcsOpZSBET0lUIMOqdHJlIHR5cMOpZSBjb21tZSBPYnNlcnZhYmxlPFQ+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSeFN0YXRlQ29tcHV0ZWQ8VCA9IGFueSwgSyBleHRlbmRzIGtleW9mIFQgPSBhbnksIFIgPSBhbnk+KFxuICBkZXBlbmRlbmNpZXM6IEtbXSxcbiAgY29tcHV0ZUZuPzogKHNsaWNlOiBQaWNrPFQsIEs+KSA9PiBSLFxuICBvcHRzPzoge1xuICAgIHN0YXRlTmFtZT86IHN0cmluZztcbiAgICBrZXlDb21wYXJlTWFwPzogYW55O1xuICB9XG4pOiBPYnNlcnZhYmxlUHJvcGVydHlEZWNvcmF0b3I8T2JzZXJ2YWJsZTxSPj4ge1xuICByZXR1cm4gZnVuY3Rpb24gPFAgZXh0ZW5kcyBQcm9wZXJ0eUtleT4odGFyZ2V0OiBhbnksIGtleTogUCkge1xuICAgIC8vIFbDqXJpZmljYXRpb24gc2ltcGxlIGJhc8OpZSBzdXIgbGEgY29udmVudGlvbiAob3B0aW9ubmVsbGUpXG4gICAgaWYgKCFwcm9kdWN0aW9uICYmICEoa2V5IGFzIHN0cmluZykuZW5kc1dpdGgoJyQnKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW1J4U3RhdGVDb21wdXRlZF0gQ29udmVudGlvbjogUHJvcGVydHkgJHt0YXJnZXQuY29uc3RydWN0b3I/Lm5hbWV9LiR7a2V5IGFzIHN0cmluZ30gc2hvdWxkIGVuZCB3aXRoICckJyB0byBpbmRpY2F0ZSBpdCdzIGFuIE9ic2VydmFibGVgXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzdGF0ZVZhck5hbWUgPSB0YXJnZXQgaW5zdGFuY2VvZiBSeFN0YXRlID8gbnVsbCA6IHRhcmdldFtTVEFURV9WQVJfTkFNRV9LRVldIHx8IG9wdHM/LnN0YXRlTmFtZSB8fCBERUZBVUxUX1NUQVRFX1ZBUl9OQU1FO1xuICAgIGNvbnN0IHN0YXRlT2JqZWN0ID0gc3RhdGVWYXJOYW1lID8gYHRoaXMuJHtzdGF0ZVZhck5hbWV9YCA6ICd0aGlzJztcblxuICAgIGNvbnN0IGNhY2hlUHJvcGVydHlOYW1lID0gYF8ke2tleSBhcyBzdHJpbmd9YDtcbiAgICBjb25zdCBnZXRNZXRob2ROYW1lID0gRGVjb3JhdG9yVXRpbHMuY3JlYXRlTWV0aG9kTmFtZSgnX2dldCcsIChrZXkgYXMgc3RyaW5nKS5yZXBsYWNlKC9cXCQkLywgJycpICsgJyQnKTtcbiAgICBjb25zdCBjb21wdXRlTWV0aG9kTmFtZSA9IERlY29yYXRvclV0aWxzLmNyZWF0ZU1ldGhvZE5hbWUoJ19jb21wdXRlJywga2V5IGFzIHN0cmluZyk7XG4gICAgY29uc3Qga2V5Q29tcGFyZU1hcFByb3BlcnR5TmFtZSA9IERlY29yYXRvclV0aWxzLmNyZWF0ZVByb3BlcnR5TmFtZShgX2NvbXBhcmVNYXBgLCBrZXkgYXMgc3RyaW5nKTtcblxuICAgIC8vIFN0YXRlIHZhbGlkYXRpb25cbiAgICBjb25zdCBzdGF0ZVZhbGlkYXRpb24gPSBEZWNvcmF0b3JVdGlscy52YWxpZGF0ZVN0YXRlUHJvcGVydHkodGFyZ2V0LCBzdGF0ZU9iamVjdCk7XG5cbiAgICAvLyBDcmVhdGUgZGVwZW5kZW5jaWVzIGFycmF5IGFzIHN0cmluZyBmb3IgY29kZSBnZW5lcmF0aW9uXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzU3RyID0gZGVwZW5kZW5jaWVzLm1hcCgoZGVwKSA9PiBgJyR7ZGVwIGFzIHN0cmluZ30nYCkuam9pbignLCAnKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgY29tcHV0ZSBtZXRob2QgYXMgc3RyaW5nLCBmb3IgY29kZSBnZW5lcmF0aW9uXG4gICAgY29uc3QgY29tcHV0ZU1ldGhvZE5hbWVTdHIgPSBjb21wdXRlRm4gPyBgLCAoc2xpY2UpID0+IHRoaXMuJHtjb21wdXRlTWV0aG9kTmFtZX0oc2xpY2UpYCA6ICcnO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBjb21wYXJhdG9yIG1hcCBmdW5jdGlvbiBhcyBzdHJpbmcsIGZvciBjb2RlIGdlbmVyYXRpb25cbiAgICBjb25zdCBrZXlDb21wYXJlTWFwU3RyID0gb3B0cz8ua2V5Q29tcGFyZU1hcCA/IGAsIHRoaXMuJHtrZXlDb21wYXJlTWFwUHJvcGVydHlOYW1lfWAgOiAnJztcblxuICAgIC8vIENyZWF0ZSBnZXR0ZXIgd2l0aCBjYWNoaW5nIHVzaW5nIFJ4U3RhdGUncyBuYXRpdmUgbXVsdGktc2VsZWN0ICsgcGlwZShtYXAoKSlcbiAgICBjb25zdCBnZXR0ZXIgPSBuZXcgRnVuY3Rpb24oYFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICR7Z2V0TWV0aG9kTmFtZX0oKSB7XG4gICAgICAgICR7c3RhdGVWYWxpZGF0aW9ufVxuICAgICAgICBpZiAoIXRoaXMuJHtjYWNoZVByb3BlcnR5TmFtZX0pIHtcbiAgICAgICAgICBjb25zdCB7IG1hcCB9ID0gcmVxdWlyZSgncnhqcy9vcGVyYXRvcnMnKTtcbiAgICAgICAgICB0aGlzLiR7Y2FjaGVQcm9wZXJ0eU5hbWV9ID0gJHtzdGF0ZU9iamVjdH0uc2VsZWN0KFske2RlcGVuZGVuY2llc1N0cn1dJHtjb21wdXRlTWV0aG9kTmFtZVN0cn0ke2tleUNvbXBhcmVNYXBTdHJ9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy4ke2NhY2hlUHJvcGVydHlOYW1lfTtcbiAgICAgIH1cbiAgICBgKSgpO1xuXG4gICAgLy8gQXR0YWNoIGNvbXB1dGUgbWV0aG9kLCBvcHRpb25hbCBrZXlDb21wYXJlTWFwIHdpdGggdW5pcXVlIG5hbWUsIGFuZCBnZXR0ZXIgdG8gcHJvdG90eXBlXG4gICAgaWYgKGNvbXB1dGVGbikgdGFyZ2V0W2NvbXB1dGVNZXRob2ROYW1lXSA9IGNvbXB1dGVGbjtcbiAgICBpZiAob3B0cz8ua2V5Q29tcGFyZU1hcCkgdGFyZ2V0W2tleUNvbXBhcmVNYXBQcm9wZXJ0eU5hbWVdID0gb3B0cy5rZXlDb21wYXJlTWFwO1xuICAgIHRhcmdldFtnZXRNZXRob2ROYW1lXSA9IGdldHRlcjtcblxuICAgIC8vIERlZmluZSBwcm9wZXJ0eSB3aXRoIGdldHRlciBvbmx5XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCB7XG4gICAgICBnZXQ6IGdldHRlcixcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gRGV2ZWxvcG1lbnQgbG9nZ2luZ1xuICAgIGlmICghcHJvZHVjdGlvbikge1xuICAgICAgY29uc29sZS5kZWJ1ZyhcbiAgICAgICAgYFtSeFN0YXRlQ29tcHV0ZWRdICR7dGFyZ2V0LmNvbnN0cnVjdG9yPy5uYW1lfS4ke2tleSBhcyBzdHJpbmd9IC0+ICR7c3RhdGVPYmplY3R9LnNlbGVjdChbJHtkZXBlbmRlbmNpZXNTdHJ9XSkucGlwZShtYXAoY29tcHV0ZUZuKSlgXG4gICAgICApO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|