@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 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvbW9kZWwvZW50aXR5LmRlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJdEQsTUFBTSxPQUFPLGFBQWE7SUFDeEIsTUFBTSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztJQUV4RCxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQWdCLEVBQUUsV0FBd0I7UUFDeEQsZ0NBQWdDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsUUFBUTtRQUNSLHdFQUF3RTtRQUV4RSxhQUFhO1FBQ2IsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFzQixVQUFrQjtRQUNoRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxVQUFVLEdBQUcsNERBQTRELENBQUMsQ0FBQztRQUM3SCxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQ2YsS0FBVSxFQUNWLElBSUM7UUFFRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3pC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LEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxNQUFXLEVBQUUsSUFBVTtnQkFDaEQsSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxTQUFTLENBQUM7Z0JBQzlCLElBQUksTUFBTSxZQUFZLFdBQVcsRUFBRSxDQUFDO29CQUNsQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsUUFBUTtnQkFDUix1RkFBdUY7Z0JBQ3ZGLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUMsQ0FBQztRQUNKLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFOUMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50JztcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7IHJlbW92ZUVuZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuXG5kZWNsYXJlIHR5cGUgQ29uc3RydWN0b3IgPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHlDbGFzc2VzIHtcbiAgc3RhdGljIENMQVNTRVNfQllfTkFNRSA9IG5ldyBNYXA8c3RyaW5nLCBDb25zdHJ1Y3Rvcj4oKTtcblxuICBzdGF0aWMgcmVnaXN0ZXIodHlwZW5hbWU6IHN0cmluZywgZW50aXR5Q2xhc3M6IENvbnN0cnVjdG9yKSB7XG4gICAgLy8gQ29udmVydCB0byBleHRyYWN0IGVudGl0eU5hbWVcbiAgICBjb25zdCBlbnRpdHlOYW1lID0gcmVtb3ZlRW5kKHR5cGVuYW1lLCAnVk8nKTtcbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygnW2VudGl0eS1jbGFzc2VzXSBEZXRlY3RlZCBlbnRpdHkgY2xhc3MgJyArIGVudGl0eU5hbWUpO1xuXG4gICAgLy8gQWRkIHRvIG1hcFxuICAgIEVudGl0eUNsYXNzZXMuQ0xBU1NFU19CWV9OQU1FLnNldChlbnRpdHlOYW1lLCBlbnRpdHlDbGFzcyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGVudGl0eU5hbWU6IHN0cmluZyk6IENvbnN0cnVjdG9yIHtcbiAgICBjb25zdCBlbnRpdHlDbGFzcyA9IEVudGl0eUNsYXNzZXMuQ0xBU1NFU19CWV9OQU1FLmdldChlbnRpdHlOYW1lKTtcbiAgICBpZiAoIWVudGl0eUNsYXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZm91bmQgZW50aXR5IGNsYXNzICdcIiArIGVudGl0eU5hbWUgKyBcIicuIE1ha2Ugc3VyZSBpdCBleGlzdHMgYW5kIGhhcyB0aGUgQEVudGl0eUNsYXNzIGRlY29yYXRvci5cIik7XG4gICAgfVxuICAgIHJldHVybiBlbnRpdHlDbGFzcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tT2JqZWN0PFQgZXh0ZW5kcyBFbnRpdHk8VD4+KFxuICAgIHZhbHVlOiBhbnksXG4gICAgb3B0cz86IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgIHR5cGVuYW1lPzogc3RyaW5nO1xuICAgICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICB9XG4gICk6IFQge1xuICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICBjb25zdCBlbnRpdHlOYW1lID0gKG9wdHMgJiYgb3B0cy5lbnRpdHlOYW1lKSB8fCByZW1vdmVFbmQodmFsdWUuX190eXBlbmFtZSB8fCBvcHRzPy50eXBlbmFtZSwgJ1ZPJyk7XG4gICAgaWYgKCFlbnRpdHlOYW1lKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG9uZSBvZiAndmFsdWUuX190eXBlbmFtZScsICdvcHRzLmVudGl0eU5hbWUnLCBvciAnb3B0cy50eXBlbmFtZScuXCIpO1xuICAgIGNvbnN0IGVudGl0eUNsYXNzID0gRW50aXR5Q2xhc3Nlcy5nZXQoZW50aXR5TmFtZSkgYXMgYW55O1xuICAgIGlmICh0eXBlb2YgZW50aXR5Q2xhc3MuZnJvbU9iamVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBmb3VuZCB0aGUgc3RhdGljIGZ1bmN0aW9uICdcIiArXG4gICAgICAgICAgZW50aXR5TmFtZSArXG4gICAgICAgICAgXCIuZnJvbU9iamVjdCgpJy4gTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gZGVjbGFyZWQgYW5kIHRoZSBlbnRpdHkgY2xhc3MgaGFzIHRoZSBARW50aXR5Q2xhc3MgZGVjb3JhdG9yXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBlbnRpdHlDbGFzcy5mcm9tT2JqZWN0KHZhbHVlLCBvcHRzKSBhcyBUO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHlDbGFzcyhvcHRzOiB7IHR5cGVuYW1lOiBzdHJpbmc7IGZyb21PYmplY3RSZXVzZVN0cmF0ZWd5PzogJ2RlZmF1bHQnIHwgJ2Nsb25lJyB9KSB7XG4gIHJldHVybiBmdW5jdGlvbiA8VCBleHRlbmRzIENvbnN0cnVjdG9yPihjb25zdHJ1Y3RvcjogVCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2xhc3MgZXh0ZW5kcyBFbnRpdHlcbiAgICBpZiAoIWVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnN0IG9iaiA9IG5ldyBjb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgRW50aXR5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENsYXNzICR7Y29uc3RydWN0b3IubmFtZX0gbXVzdCBleHRlbmRzIDw8RW50aXR5Pj4gdG8gYmUgYWJsZSB0byB1c2UgQEZyb21PYmplY3QhYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhenogPSBjb25zdHJ1Y3RvciBhcyBhbnk7XG4gICAgY29uc3QgdHlwZW5hbWUgPSBvcHRzLnR5cGVuYW1lIHx8IGAke2NvbnN0cnVjdG9yLm5hbWV9Vk9gO1xuXG4gICAgLy8gRGVmaW5lIHN0YXRpYyBmaWVsZCBUWVBFTkFNRVxuICAgIGNsYXp6LlRZUEVOQU1FID0gdHlwZW5hbWU7XG5cbiAgICAvLyBEZWZpbmUgc3RhdGljIGZyb21PYmplY3QoKVxuICAgIGlmIChvcHRzLmZyb21PYmplY3RSZXVzZVN0cmF0ZWd5ID09PSAnY2xvbmUnKSB7XG4gICAgICBjbGF6ei5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gKHNvdXJjZTogYW55LCBvcHRzPzogYW55KTogVCB7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHJldHVybiAoc291cmNlIGFzIGFueSkuY2xvbmUob3B0cykgYXMgVDtcbiAgICAgICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBuZXcgY29uc3RydWN0b3IoKTtcbiAgICAgICAgdGFyZ2V0LmZyb21PYmplY3Qoc291cmNlLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldCBhcyBUO1xuICAgICAgfTtcbiAgICAgIGNsYXp6LmFzT2JqZWN0ID0gZnVuY3Rpb24gKHNvdXJjZTogYW55LCBvcHRzPzogYW55KTogYW55IHtcbiAgICAgICAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBjb25zdHJ1Y3RvcikgcmV0dXJuIHNvdXJjZS5hc09iamVjdChvcHRzKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHNvdXJjZSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGF6ei5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gKHNvdXJjZTogYW55LCBvcHRzPzogYW55KTogVCB7XG4gICAgICAgIGlmICghc291cmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZygnQEVudGl0eUNsYXNzKCkgZnJvbU9iamVjdCgpID0+IHdpbGwgcmVjeWNsZSBleGlzdGluZyBvYmplY3Q6ICcsIHNvdXJjZSk7XG4gICAgICAgICAgcmV0dXJuIHNvdXJjZSBhcyBUO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldDogYW55ID0gbmV3IGNvbnN0cnVjdG9yKCk7XG4gICAgICAgIHRhcmdldC5mcm9tT2JqZWN0KHNvdXJjZSwgb3B0cyk7XG4gICAgICAgIHJldHVybiB0YXJnZXQgYXMgVDtcbiAgICAgIH07XG5cbiAgICAgIGNsYXp6LmFzT2JqZWN0ID0gZnVuY3Rpb24gKHNvdXJjZTogYW55LCBvcHRzPzogYW55KTogYW55IHtcbiAgICAgICAgaWYgKCFzb3VyY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgICAgICAgIHJldHVybiBzb3VyY2UuYXNPYmplY3Qob3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdARW50aXR5Q2xhc3MoKSBhc09iamVjdCgpID0+IHdpbGwgcmVjeWNsZSBleGlzdGluZyBvYmplY3Q6ICcsIHNvdXJjZSk7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBlbnRpdHkgY2xhc3NcbiAgICBFbnRpdHlDbGFzc2VzLnJlZ2lzdGVyKHR5cGVuYW1lLCBjb25zdHJ1Y3Rvcik7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH07XG59XG4iXX0=
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+IHtcbiAgYXNQb2RPYmplY3QoKTogYW55O1xuXG4gIGFzRmlsdGVyRm4oKTogRmlsdGVyRm48VD47XG5cbiAgaXNFbXB0eSgpOiBib29sZWFuO1xuXG4gIGNvdW50Tm90RW1wdHlDcml0ZXJpYSgpOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHlGaWx0ZXI8XG4gICAgRiBleHRlbmRzIEVudGl0eUZpbHRlcjxGLCBULCBJRCwgQU8sIEZPPixcbiAgICBUIGV4dGVuZHMgSUVudGl0eTxULCBhbnk+LFxuICAgIElEID0gbnVtYmVyLFxuICAgIEFPIGV4dGVuZHMgRW50aXR5QXNPYmplY3RPcHRpb25zID0gRW50aXR5QXNPYmplY3RPcHRpb25zLFxuICAgIEZPID0gYW55LFxuICA+XG4gIGV4dGVuZHMgRW50aXR5PEYsIElELCBBTywgRk8+XG4gIGltcGxlbWVudHMgSUVudGl0eUZpbHRlcjxGLCBULCBJRCwgQU8sIEZPPlxue1xuICAvKipcbiAgICogQ29tcG9zZSBzb21lIGZpbHRlciBmdW5jdGlvbnM6IGFsbCBzaG91bGQgcmV0dXJuIHRydWVcbiAgICpcbiAgICogQHBhcmFtIGZpbHRlckZuc1xuICAgKi9cbiAgc3RhdGljIGNvbXBvc2VGaWx0ZXJzPFQgZXh0ZW5kcyBJRW50aXR5PFQsIGFueT4+KGZpbHRlckZuczogRmlsdGVyRm48VD5bXSk6IEZpbHRlckZuPFQ+IHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGZpbHRlckZucykpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChlbnRpdHkpID0+IChmaWx0ZXJGbnMgfHwgW10pLmV2ZXJ5KChmbikgPT4gZm4oZW50aXR5KSk7XG4gIH1cblxuICBzdGF0aWMgY29tcG9zZTxGIGV4dGVuZHMgRW50aXR5RmlsdGVyPEYsIFQ+LCBUIGV4dGVuZHMgSUVudGl0eTxULCBhbnk+PihmaWx0ZXJzOiBGW10pOiBGaWx0ZXJGbjxUPiB7XG4gICAgY29uc3QgZmlsdGVyRm5zID0gKGZpbHRlcnMgfHwgW10pLnJlZHVjZSgocmVzLCBmKSA9PiB7XG4gICAgICBjb25zdCBmbnMgPSBmLmJ1aWxkRmlsdGVyKCk7XG4gICAgICBpZiAoIWZucykgcmV0dXJuIHJlcztcbiAgICAgIHJldHVybiByZXMuY29uY2F0KGZucyk7XG4gICAgfSwgW10pO1xuICAgIHJldHVybiB0aGlzLmNvbXBvc2VGaWx0ZXJzKGZpbHRlckZucyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcG9zZSBzb21lIGZpbHRlciBmdW5jdGlvbnM6IGFsbCBzaG91bGQgcmV0dXJuIHRydWVcbiAgICpcbiAgICogQHBhcmFtIGZpbHRlckZuc1xuICAgKi9cbiAgc3RhdGljIGNvbXBvc2VGbnM8VCBleHRlbmRzIElFbnRpdHk8VCwgYW55Pj4oZmlsdGVyRm5zOiBGaWx0ZXJGbjxUPltdKTogRmlsdGVyRm48VD4ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZmlsdGVyRm5zKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKGVudGl0eSkgPT4gKGZpbHRlckZucyB8fCBbXSkuZXZlcnkoKGZuKSA9PiBmbihlbnRpdHkpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKF9fdHlwZW5hbWU/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihfX3R5cGVuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiBhIGZpbHRlciwgYmVmb3JlIHNlbmRpbmcgdG8gdGhlIHBvZCAoZS5nIGNvbnZlcnQgZGF0ZXMsIHJlbW92ZSBpbnRlcm5hbCBwcm9wZXJ0aWVzLCBldGMuKVxuICAgKi9cbiAgYXNQb2RPYmplY3QoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5hc09iamVjdChNSU5JRllfRU5USVRZX0ZPUl9QT0QgYXMgQU8pO1xuICB9XG5cbiAgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb3VudE5vdEVtcHR5Q3JpdGVyaWEoKSA9PT0gMDtcbiAgfVxuXG4gIGNvdW50Tm90RW1wdHlDcml0ZXJpYSgpOiBudW1iZXIge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmFzUG9kT2JqZWN0KCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGpzb24pLmZpbHRlcigoa2V5KSA9PiB0aGlzLmlzQ3JpdGVyaWFOb3RFbXB0eShrZXksIGpzb25ba2V5XSkpLmxlbmd0aDtcbiAgfVxuXG4gIGFzRmlsdGVyRm4oKTogRmlsdGVyRm48VD4ge1xuICAgIGNvbnN0IGZpbHRlckZucyA9IHRoaXMuYnVpbGRGaWx0ZXIoKTtcbiAgICByZXR1cm4gRW50aXR5RmlsdGVyLmNvbXBvc2VGbnMoZmlsdGVyRm5zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZEZpbHRlcigpOiBGaWx0ZXJGbjxUPltdIHtcbiAgICAvLyBDYW4gYmUgY29tcGxldGVkIGJ5IHN1YmNsYXNzZXNcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNDcml0ZXJpYU5vdEVtcHR5KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlc1xuICAgIHJldHVybiAoXG4gICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgLy8gbm90IGVtcHR5IHN0cmluZ1xuICAgICAgKCh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSAhPT0gJycpIHx8XG4gICAgICAgIC8vIHZhbGlkIG51bWJlclxuICAgICAgICAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsdWUpKSB8fFxuICAgICAgICAvLyB2YWxpZCBib29sZWFuXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIC8vIG5vdCBlbXB0eSBhcnJheVxuICAgICAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgLy8gZW50aXR5IHdpdGggYW4gaWRcbiAgICAgICAgUmVmZXJlbnRpYWxVdGlscy5pc05vdEVtcHR5KHZhbHVlKSlcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHlGaWx0ZXJVdGlscyB7XG4gIHN0YXRpYyBpc0VudGl0eUZpbHRlcjxGIGV4dGVuZHMgRW50aXR5RmlsdGVyPEYsIGFueT4+KG9iajogUGFydGlhbDxGPik6IG9iaiBpcyBGIHtcbiAgICByZXR1cm4gKG9iaiAmJiBvYmouYXNQb2RPYmplY3QgJiYgb2JqLmFzRmlsdGVyRm4gJiYgdHJ1ZSkgfHwgZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbU9iamVjdDxGPihzb3VyY2U6IGFueSwgZmlsdGVyVHlwZTogbmV3ICgpID0+IEYpOiBGIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHNvdXJjZTtcbiAgICBpZiAoaXNJbnN0YW5jZU9mKHNvdXJjZSwgZmlsdGVyVHlwZSkpIHJldHVybiBzb3VyY2UgYXMgRjtcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgZmlsdGVyVHlwZSgpO1xuICAgIGlmIChFbnRpdHlGaWx0ZXJVdGlscy5pc0VudGl0eUZpbHRlcih0YXJnZXQpKSB7XG4gICAgICB0YXJnZXQuZnJvbU9iamVjdChzb3VyY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxufVxuIl19
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
- // DEBUG
11
- //console.debug(`${target.constructor?.name} @State() ${key}`);
12
- if (target[STATE_VAR_NAME_KEY])
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
- // DEBUG
25
- //console.debug(`${target.constructor?.name} @StateProperty() ${key}`);
26
- statePropertyName = statePropertyName || key;
27
- const state = target instanceof RxState ? null : target[STATE_VAR_NAME_KEY] || DEFAULT_STATE_VAR_NAME;
28
- const stateObj = state ? `this.${state}` : `this`;
29
- // property getter
30
- const getMethodName = '_get' + key.charAt(0).toUpperCase() + key.slice(1);
31
- const setMethodName = '_set' + key.charAt(0).toUpperCase() + key.slice(1);
32
- const reducerMethodName = '_reduce' + key.charAt(0).toUpperCase() + key.slice(1);
33
- const checkStateExists = stateObj !== 'this' && !production
34
- ? `\n if (!${stateObj}) throw new Error('Missing state! Please add a RxState in class: ' + this.constructor.name);`
35
- : '';
36
- const reducer = projectValueReducer ? `(state) => this.${reducerMethodName}(state, value)` : '() => value';
37
- const getter = new Function(`return function ${getMethodName}(){\n return ${stateObj}.get('${statePropertyName}');\n}`)();
38
- const setter = new Function(`return function ${setMethodName}(value){${checkStateExists}\n ${stateObj}.set('${statePropertyName}', ${reducer});\n}`)();
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
- // DEBUG
54
- //console.debug(`${target.constructor?.name} @RxStateSelect() ${key}`);
55
- statePropertyName = statePropertyName || key.replace(/\$?$/, '');
56
- const state = target instanceof RxState ? null : target[STATE_VAR_NAME_KEY] || opts?.stateName || DEFAULT_STATE_VAR_NAME;
57
- const stateObj = state ? `this.${state}` : `this`;
58
- const _key = '_' + key;
59
- // property getter
60
- const getMethodName = '_get' + statePropertyName.charAt(0).toUpperCase() + (statePropertyName.length > 1 ? statePropertyName.slice(1) : '') + '$';
61
- const observableObj = statePropertyName === '$' ? `${stateObj}.$` : `${stateObj}.select('${statePropertyName.split('.').join("', '")}')`;
62
- const getter = new Function(`return function ${getMethodName}(){\n if (!this.${_key}) this.${_key} = ${observableObj};\n return this.${_key};\n}`)();
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==