jsii-reflect 1.46.0 → 1.50.0

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/lib/assembly.d.ts CHANGED
@@ -95,6 +95,14 @@ export declare class Assembly extends ModuleLike {
95
95
  * Return all submodules, even those transtively nested
96
96
  */
97
97
  get allSubmodules(): readonly Submodule[];
98
+ /**
99
+ * All types, even those in submodules and nested submodules.
100
+ */
101
+ get types(): readonly Type[];
102
+ /**
103
+ * Return all types in the current assembly/submodule and all submodules underneath
104
+ */
105
+ get allTypes(): readonly Type[];
98
106
  findType(fqn: string): Type;
99
107
  /**
100
108
  * Validate an assembly after loading
package/lib/assembly.js CHANGED
@@ -140,6 +140,18 @@ class Assembly extends module_like_1.ModuleLike {
140
140
  const { submodules } = this._analyzeTypes();
141
141
  return Object.values(submodules);
142
142
  }
143
+ /**
144
+ * All types, even those in submodules and nested submodules.
145
+ */
146
+ get types() {
147
+ return Object.values(this.typeMap);
148
+ }
149
+ /**
150
+ * Return all types in the current assembly/submodule and all submodules underneath
151
+ */
152
+ get allTypes() {
153
+ return [...this.types, ...this.allSubmodules.flatMap((s) => s.types)];
154
+ }
143
155
  findType(fqn) {
144
156
  const type = this.tryFindType(fqn);
145
157
  if (!type) {
@@ -282,4 +294,4 @@ function mapValues(xs, fn) {
282
294
  }
283
295
  return ret;
284
296
  }
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZW1ibHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhc3NlbWJseS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFFbkMsbUNBQW9DO0FBQ3BDLDZDQUEwQztBQUMxQyxpQ0FBa0M7QUFDbEMsMkNBQTRDO0FBQzVDLCtDQUEyQztBQUMzQywyQ0FBd0M7QUFJeEMsTUFBYSxRQUFTLFNBQVEsd0JBQVU7SUFLdEMsWUFBbUIsTUFBa0IsRUFBa0IsSUFBbUI7UUFDeEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRHVDLFNBQUksR0FBSixJQUFJLENBQWU7SUFFMUUsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxVQUFVO1FBS25CLE9BQU8sSUFBSSxDQUFDLElB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Q0Y7QUFFRCxTQUFTLFNBQVMsQ0FDaEIsRUFBcUIsRUFDckIsRUFBZTtJQUVmLE1BQU0sR0FBRyxHQUFzQixFQUFFLENBQUM7SUFDbEMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNoQjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGpzaWkgZnJvbSAnQGpzaWkvc3BlYyc7XG5cbmltcG9ydCB7IENsYXNzVHlwZSB9IGZyb20gJy4vY2xhc3MnO1xuaW1wb3J0IHsgRGVwZW5kZW5jeSB9IGZyb20gJy4vZGVwZW5kZW5jeSc7XG5pbXBvcnQgeyBFbnVtVHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBJbnRlcmZhY2VUeXBlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTW9kdWxlTGlrZSB9IGZyb20gJy4vbW9kdWxlLWxpa2UnO1xuaW1wb3J0IHsgU3VibW9kdWxlIH0gZnJvbSAnLi9zdWJtb2R1bGUnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJy4vdHlwZSc7XG5pbXBvcnQgeyBUeXBlU3lzdGVtIH0gZnJvbSAnLi90eXBlLXN5c3RlbSc7XG5cbmV4cG9ydCBjbGFzcyBBc3NlbWJseSBleHRlbmRzIE1vZHVsZUxpa2Uge1xuICBwcml2YXRlIF90eXBlQ2FjaGU/OiB7IFtmcW46IHN0cmluZ106IFR5cGUgfTtcbiAgcHJpdmF0ZSBfc3VibW9kdWxlQ2FjaGU/OiB7IFtmcW46IHN0cmluZ106IFN1Ym1vZHVsZSB9O1xuICBwcml2YXRlIF9kZXBlbmRlbmN5Q2FjaGU/OiB7IFtuYW1lOiBzdHJpbmddOiBEZXBlbmRlbmN5IH07XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHN5c3RlbTogVHlwZVN5c3RlbSwgcHVibGljIHJlYWRvbmx5IHNwZWM6IGpzaWkuQXNzZW1ibHkpIHtcbiAgICBzdXBlcihzeXN0ZW0pO1xuICB9XG5cbiAgcHVibGljIGdldCBmcW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zcGVjLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNwZWMgc2NoZW1hXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNjaGVtYSgpOiBqc2lpLlNjaGVtYVZlcnNpb24ge1xuICAgIHJldHVybiB0aGlzLnNwZWMuc2NoZW1hO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBqc2lpIGNvbXBpbGVyIHRoYXQgd2FzIHVzZWQgdG8gcHJvZHVjZSB0aGlzIEFzc2VtYmx5LlxuICAgKi9cbiAgcHVibGljIGdldCBqc2lpVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNwZWMuanNpaVZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFzc2VtYmx5XG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zcGVjLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhlIGFzc2VtYmx5LCBtYXBzIHRvIFwiZGVzY3JpcHRpb25cIiBmcm9tIHBhY2thZ2UuanNvblxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIHNpbmNlIHNvbWUgcGFja2FnZSBtYW5hZ2VycyAobGlrZSBNYXZlbikgcmVxdWlyZSBpdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zcGVjLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGFzc2VtYmx5LCBpZiBhbnkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1ldGFkYXRhKCk6IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNwZWMubWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVybCB0byB0aGUgcHJvamVjdCBob21lcGFnZS4gTWFwcyB0byBcImhvbWVwYWdlXCIgZnJvbSBwYWNrYWdlLmpzb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhvbWVwYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy5ob21lcGFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbW9kdWxlIHJlcG9zaXRvcnksIG1hcHMgdG8gXCJyZXBvc2l0b3J5XCIgZnJvbSBwYWNrYWdlLmpzb25cbiAgICogVGhpcyBpcyByZXF1aXJlZCBzaW5jZSBzb21lIHBhY2thZ2UgbWFuYWdlcnMgKGxpa2UgTWF2ZW4pIHJlcXVpcmUgaXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcG9zaXRvcnkoKToge1xuICAgIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbiAgICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgICByZWFkb25seSBkaXJlY3Rvcnk/OiBzdHJpbmc7XG4gIH0ge1xuICAgIHJldHVybiB0aGlzLnNwZWMucmVwb3NpdG9yeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWFpbiBhdXRob3Igb2YgdGhpcyBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBhdXRob3IoKToganNpaS5QZXJzb24ge1xuICAgIHJldHVybiB0aGlzLnNwZWMuYXV0aG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgY29udHJpYnV0b3JzIHRvIHRoaXMgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29udHJpYnV0b3JzKCk6IHJlYWRvbmx5IGpzaWkuUGVyc29uW10ge1xuICAgIHJldHVybiB0aGlzLnNwZWMuY29udHJpYnV0b3JzID8/IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZmluZ2VycHJpbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHNwZWNpZmljYXRpb24gaGFzIGNoYW5nZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZpbmdlcnByaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy5maW5nZXJwcmludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgYXNzZW1ibHlcbiAgICovXG4gIHB1YmxpYyBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNwZWMudmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgU1BEWCBuYW1lIG9mIHRoZSBsaWNlbnNlIHRoaXMgYXNzZW1ibHkgaXMgZGlzdHJpYnV0ZWQgb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxpY2Vuc2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zcGVjLmxpY2Vuc2U7XG4gIH1cblxuICAvKipcbiAgICogQSBtYXAgb2YgdGFyZ2V0IG5hbWUgdG8gY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgdXNlZCB3aGVuIGdlbmVyYXRpbmcgcGFja2FnZXMgZm9yXG4gICAqIHZhcmlvdXMgbGFuZ3VhZ2VzLlxuICAgKi9cbiAgcHVibGljIGdldCB0YXJnZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnNwZWMudGFyZ2V0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXBlbmRlbmNpZXMgb24gb3RoZXIgYXNzZW1ibGllcyAod2l0aCBzZW12ZXIpLCB0aGUga2V5IGlzIHRoZSBKU0lJIGFzc2VtYmx5IG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGVuZGVuY2llcygpOiByZWFkb25seSBEZXBlbmRlbmN5W10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9kZXBlbmRlbmNpZXMpLm1hcChcbiAgICAgIChuYW1lKSA9PiB0aGlzLl9kZXBlbmRlbmNpZXNbbmFtZV0sXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kRGVwZW5kZW5jeShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBkZXAgPSB0aGlzLl9kZXBlbmRlbmNpZXNbbmFtZV07XG4gICAgaWYgKCFkZXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGVwZW5kZW5jeSAke25hbWV9IG5vdCBmb3VuZCBmb3IgYXNzZW1ibHkgJHt0aGlzLm5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBkZXA7XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBpZiBidW5kbGVkIGRlcGVuZGVuY2llcyAodGhlc2UgYXJlIG5vdCBleHBlY3RlZCB0byBiZSBqc2lpIGFzc2VtYmxpZXMpLlxuICAgKi9cbiAgcHVibGljIGdldCBidW5kbGVkKCk6IHsgcmVhZG9ubHkgW21vZHVsZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLnNwZWMuYnVuZGxlZCA/PyB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdG9wLWxldmVsIHJlYWRtZSBkb2N1bWVudCBmb3IgdGhpcyBhc3NlbWJseSAoaWYgYW55KS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVhZG1lKCkge1xuICAgIHJldHVybiB0aGlzLnNwZWMucmVhZG1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdGhvc2Ugc3VibW9kdWxlcyBuZXN0ZWQgZGlyZWN0bHkgdW5kZXIgdGhlIGFzc2VtYmx5XG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1Ym1vZHVsZXMoKTogcmVhZG9ubHkgU3VibW9kdWxlW10ge1xuICAgIGNvbnN0IHsgc3VibW9kdWxlcyB9ID0gdGhpcy5fYW5hbHl6ZVR5cGVzKCk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHN1Ym1vZHVsZXMpXG4gICAgICAuZmlsdGVyKChbbmFtZSwgX10pID0+IG5hbWUuc3BsaXQoJy4nKS5sZW5ndGggPT09IDIpXG4gICAgICAubWFwKChbXywgc3VibW9kdWxlXSkgPT4gc3VibW9kdWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIHN1Ym1vZHVsZXMsIGV2ZW4gdGhvc2UgdHJhbnN0aXZlbHkgbmVzdGVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbFN1Ym1vZHVsZXMoKTogcmVhZG9ubHkgU3VibW9kdWxlW10ge1xuICAgIGNvbnN0IHsgc3VibW9kdWxlcyB9ID0gdGhpcy5fYW5hbHl6ZVR5cGVzKCk7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoc3VibW9kdWxlcyk7XG4gIH1cblxuICBwdWJsaWMgZmluZFR5cGUoZnFuOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0eXBlID0gdGhpcy50cnlGaW5kVHlwZShmcW4pO1xuICAgIGlmICghdHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUeXBlICcke2Zxbn0nIG5vdCBmb3VuZCBpbiBhc3NlbWJseSAke3RoaXMubmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYW4gYXNzZW1ibHkgYWZ0ZXIgbG9hZGluZ1xuICAgKlxuICAgKiBJZiB0aGUgYXNzZW1ibHkgd2FzIGxvYWRlZCB3aXRob3V0IHZhbGlkYXRpb24sIGNhbGwgdGhpcyB0byB2YWxpZGF0ZVxuICAgKiBpdCBhZnRlciBhbGwuIFRocm93cyBhbiBleGNlcHRpb24gaWYgdmFsaWRhdGlvbiBmYWlscy5cbiAgICovXG4gIHB1YmxpYyB2YWxpZGF0ZSgpIHtcbiAgICBqc2lpLnZhbGlkYXRlQXNzZW1ibHkodGhpcy5zcGVjKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgc3VibW9kdWxlTWFwKCk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFN1Ym1vZHVsZT4+IHtcbiAgICByZXR1cm4gdGhpcy5fYW5hbHl6ZVR5cGVzKCkuc3VibW9kdWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgdHlwZXMgaW4gdGhlIHJvb3Qgb2YgdGhlIGFzc2VtYmx5XG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHR5cGVNYXAoKTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgVHlwZT4+IHtcbiAgICByZXR1cm4gdGhpcy5fYW5hbHl6ZVR5cGVzKCkudHlwZXM7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZGVwZW5kZW5jaWVzKCkge1xuICAgIGlmICghdGhpcy5fZGVwZW5kZW5jeUNhY2hlKSB7XG4gICAgICB0aGlzLl9kZXBlbmRlbmN5Q2FjaGUgPSB7fTtcbiAgICAgIGlmICh0aGlzLnNwZWMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLnNwZWMuZGVwZW5kZW5jaWVzKSkge1xuICAgICAgICAgIHRoaXMuX2RlcGVuZGVuY3lDYWNoZVtuYW1lXSA9IG5ldyBEZXBlbmRlbmN5KFxuICAgICAgICAgICAgdGhpcy5zeXN0ZW0sXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdGhpcy5zcGVjLmRlcGVuZGVuY2llc1tuYW1lXSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2RlcGVuZGVuY3lDYWNoZTtcbiAgfVxuXG4gIHByaXZhdGUgX2FuYWx5emVUeXBlcygpIHtcbiAgICBpZiAoIXRoaXMuX3R5cGVDYWNoZSB8fCAhdGhpcy5fc3VibW9kdWxlQ2FjaGUpIHtcbiAgICAgIHRoaXMuX3R5cGVDYWNoZSA9IHt9O1xuXG4gICAgICBjb25zdCBzdWJtb2R1bGVCdWlsZGVycyA9IHRoaXMuZGlzY292ZXJTdWJtb2R1bGVzKCk7XG5cbiAgICAgIGNvbnN0IHRzID0gdGhpcy5zcGVjLnR5cGVzID8/IHt9O1xuICAgICAgZm9yIChjb25zdCBbZnFuLCB0eXBlU3BlY10gb2YgT2JqZWN0LmVudHJpZXModHMpKSB7XG4gICAgICAgIGxldCB0eXBlOiBUeXBlO1xuICAgICAgICBzd2l0Y2ggKHR5cGVTcGVjLmtpbmQpIHtcbiAgICAgICAgICBjYXNlIGpzaWkuVHlwZUtpbmQuQ2xhc3M6XG4gICAgICAgICAgICB0eXBlID0gbmV3IENsYXNzVHlwZSh0aGlzLnN5c3RlbSwgdGhpcywgdHlwZVNwZWMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIGpzaWkuVHlwZUtpbmQuSW50ZXJmYWNlOlxuICAgICAgICAgICAgdHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKHRoaXMuc3lzdGVtLCB0aGlzLCB0eXBlU3BlYyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UganNpaS5UeXBlS2luZC5FbnVtOlxuICAgICAgICAgICAgdHlwZSA9IG5ldyBFbnVtVHlwZSh0aGlzLnN5c3RlbSwgdGhpcywgdHlwZVNwZWMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHR5cGUga2luZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmluZCBjb250YWluaW5nIHN1Ym1vZHVsZSAocG90ZW50aWFsbHkgdGhyb3VnaCBjb250YWluaW5nIG5lc3RlZCBjbGFzc2VzLFxuICAgICAgICAvLyB3aGljaCBETyBjb3VudCBhcyBuYW1lc3BhY2VzIGJ1dCBkb24ndCBjb3VudCBhcyBtb2R1bGVzKVxuICAgICAgICBsZXQgc3VibW9kdWxlID0gdHlwZVNwZWMubmFtZXNwYWNlO1xuICAgICAgICB3aGlsZSAoc3VibW9kdWxlICE9IG51bGwgJiYgYCR7dGhpcy5zcGVjLm5hbWV9LiR7c3VibW9kdWxlfWAgaW4gdHMpIHtcbiAgICAgICAgICBzdWJtb2R1bGUgPSB0c1tgJHt0aGlzLnNwZWMubmFtZX0uJHtzdWJtb2R1bGV9YF0ubmFtZXNwYWNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1Ym1vZHVsZSAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgbW9kdWxlTmFtZSA9IGAke3RoaXMuc3BlYy5uYW1lfS4ke3N1Ym1vZHVsZX1gO1xuICAgICAgICAgIHN1Ym1vZHVsZUJ1aWxkZXJzW21vZHVsZU5hbWVdLmFkZFR5cGUodHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdHlwZUNhY2hlW2Zxbl0gPSB0eXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N1Ym1vZHVsZUNhY2hlID0gbWFwVmFsdWVzKHN1Ym1vZHVsZUJ1aWxkZXJzLCAoYikgPT4gYi5idWlsZCgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdHlwZXM6IHRoaXMuX3R5cGVDYWNoZSwgc3VibW9kdWxlczogdGhpcy5fc3VibW9kdWxlQ2FjaGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBidWlsZGVyIGZvciBhbGwgc3VibW9kdWxlcyBpbiB0aGlzIGFzc2VtYmx5IChzbyB0aGF0IHdlIGNhblxuICAgKiBhZGQgdHlwZXMgaW50byB0aGUgb2JqZWN0cykuXG4gICAqL1xuICBwcml2YXRlIGRpc2NvdmVyU3VibW9kdWxlcygpOiBSZWNvcmQ8c3RyaW5nLCBTdWJtb2R1bGVCdWlsZGVyPiB7XG4gICAgY29uc3Qgc3lzdGVtID0gdGhpcy5zeXN0ZW07XG5cbiAgICBjb25zdCByZXQ6IFJlY29yZDxzdHJpbmcsIFN1Ym1vZHVsZUJ1aWxkZXI+ID0ge307XG4gICAgZm9yIChjb25zdCBbc3VibW9kdWxlTmFtZSwgc3VibW9kdWxlU3BlY10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICB0aGlzLnNwZWMuc3VibW9kdWxlcyA/PyB7fSxcbiAgICApKSB7XG4gICAgICByZXRbc3VibW9kdWxlTmFtZV0gPSBuZXcgU3VibW9kdWxlQnVpbGRlcihcbiAgICAgICAgc3lzdGVtLFxuICAgICAgICBzdWJtb2R1bGVTcGVjLFxuICAgICAgICBzdWJtb2R1bGVOYW1lLFxuICAgICAgICByZXQsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG5cbi8qKlxuICogTXV0YWJsZSBTdWJtb2R1bGUgYnVpbGRlclxuICpcbiAqIEFsbG93cyBhZGRpbmcgVHlwZXMgYmVmb3JlIHRoZSBzdWJtb2R1bGUgaXMgZnJvemVuIHRvIGEgU3VibW9kdWxlIGNsYXNzLlxuICpcbiAqIFRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBmdWxsIG1hcCBvZiBzdWJtb2R1bGUgYnVpbGRlcnMsIHNvIHRoYXQgY29tZSB0aW1lXG4gKiB0byB0cmFuc2xhdGVcbiAqL1xuY2xhc3MgU3VibW9kdWxlQnVpbGRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHlwZXM6IFJlY29yZDxzdHJpbmcsIFR5cGU+ID0ge307XG5cbiAgcHJpdmF0ZSBfYnVpbHQ/OiBTdWJtb2R1bGU7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtOiBUeXBlU3lzdGVtLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3BlYzoganNpaS5TdWJtb2R1bGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmdWxsTmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsTW9kdWxlQnVpbGRlcnM6IFJlY29yZDxzdHJpbmcsIFN1Ym1vZHVsZUJ1aWxkZXI+LFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBzdWJtb2R1bGUgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYW5vdGhlciBzdWJtb2R1bGVcbiAgICovXG4gIHB1YmxpYyBpc0NoaWxkT2Yob3RoZXI6IFN1Ym1vZHVsZUJ1aWxkZXIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5mdWxsTmFtZS5zdGFydHNXaXRoKGAke290aGVyLmZ1bGxOYW1lfS5gKSAmJlxuICAgICAgdGhpcy5mdWxsTmFtZS5zcGxpdCgnLicpLmxlbmd0aCA9PT0gb3RoZXIuZnVsbE5hbWUuc3BsaXQoJy4nKS5sZW5ndGggKyAxXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZCgpOiBTdWJtb2R1bGUge1xuICAgIGlmICghdGhpcy5fYnVpbHQpIHtcbiAgICAgIHRoaXMuX2J1aWx0ID0gbmV3IFN1Ym1vZHVsZShcbiAgICAgICAgdGhpcy5zeXN0ZW0sXG4gICAgICAgIHRoaXMuc3BlYyxcbiAgICAgICAgdGhpcy5mdWxsTmFtZSxcbiAgICAgICAgbWFwVmFsdWVzKHRoaXMuZmluZFN1Ym1vZHVsZUJ1aWxkZXJzKCksIChiKSA9PiBiLmJ1aWxkKCkpLFxuICAgICAgICB0aGlzLnR5cGVzLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2J1aWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgdGhlIGJ1aWxkZXJzIGZyb20gdGhlIG1hcCB0aGF0IGFyZSBuZXN0ZWQgdW5kZXJuZWF0aCBvdXJzZWx2ZXMuXG4gICAqL1xuICBwcml2YXRlIGZpbmRTdWJtb2R1bGVCdWlsZGVycygpIHtcbiAgICBjb25zdCByZXQ6IFJlY29yZDxzdHJpbmcsIFN1Ym1vZHVsZUJ1aWxkZXI+ID0ge307XG4gICAgZm9yIChjb25zdCBbaywgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYWxsTW9kdWxlQnVpbGRlcnMpKSB7XG4gICAgICBpZiAoY2hpbGQuaXNDaGlsZE9mKHRoaXMpKSB7XG4gICAgICAgIHJldFtrXSA9IGNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIGFkZFR5cGUodHlwZTogVHlwZSkge1xuICAgIHRoaXMudHlwZXNbdHlwZS5mcW5dID0gdHlwZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXBWYWx1ZXM8QSwgQj4oXG4gIHhzOiBSZWNvcmQ8c3RyaW5nLCBBPixcbiAgZm46ICh4OiBBKSA9PiBCLFxuKTogUmVjb3JkPHN0cmluZywgQj4ge1xuICBjb25zdCByZXQ6IFJlY29yZDxzdHJpbmcsIEI+ID0ge307XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHhzKSkge1xuICAgIHJldFtrXSA9IGZuKHYpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZW1ibHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhc3NlbWJseS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFFbkMsbUNBQW9DO0FBQ3BDLDZDQUEwQztBQUMxQyxpQ0FBa0M7QUFDbEMsMkNBQTRDO0FBQzVDLCtDQUEyQztBQUMzQywyQ0FBd0M7QUFJeEMsTUFBYSxRQUFTLFNBQVEsd0JBQVU7SUFLdEMsWUFBbUIsTUFBa0IsRUFBa0IsSUFBbUI7UUFDeEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRHVDLFNBQUksR0FBSixJQUFJLENBQWU7SUFFMUUsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxVQUFVO1FBS25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFlBQVk7O1FBQ3JCLGFBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLG1DQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUN4QyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FDbkMsQ0FBQztJQUNKLENBQUM7SUFFTSxjQUFjLENBQUMsSUFBWTtRQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsSUFBSSwyQkFBMkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDM0U7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsT0FBTzs7UUFDaEIsYUFBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sbUNBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQzthQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2FBQ25ELEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGFBQWE7UUFDdEIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxLQUFLO1FBQ2QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sUUFBUSxDQUFDLEdBQVc7UUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLEdBQUcsMkJBQTJCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxRQUFRO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBYyxZQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFVBQVUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFjLE9BQU87UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFZLGFBQWE7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQzFCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSx1QkFBVSxDQUMxQyxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksRUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FDN0IsQ0FBQztpQkFDSDthQUNGO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRU8sYUFBYTs7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzdDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBRXJCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFcEQsTUFBTSxFQUFFLFNBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLG1DQUFJLEVBQUUsQ0FBQztZQUNqQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDaEQsSUFBSSxJQUFVLENBQUM7Z0JBQ2YsUUFBUSxRQUFRLENBQUMsSUFBSSxFQUFFO29CQUNyQixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSzt3QkFDdEIsSUFBSSxHQUFHLElBQUksaUJBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDbEQsTUFBTTtvQkFFUixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUzt3QkFDMUIsSUFBSSxHQUFHLElBQUkseUJBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDdEQsTUFBTTtvQkFFUixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTt3QkFDckIsSUFBSSxHQUFHLElBQUksZUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO3dCQUNqRCxNQUFNO29CQUVSO3dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztpQkFDeEM7Z0JBRUQsNEVBQTRFO2dCQUM1RSwyREFBMkQ7Z0JBQzNELElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQ25DLE9BQU8sU0FBUyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRTtvQkFDbEUsU0FBUyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDO2lCQUM1RDtnQkFFRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7b0JBQ3JCLE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ3BELGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDN0M7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQzdCO2FBQ0Y7WUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDdkU7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssa0JBQWtCOztRQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTNCLE1BQU0sR0FBRyxHQUFxQyxFQUFFLENBQUM7UUFDakQsS0FBSyxNQUFNLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLE9BQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxtQ0FBSSxFQUFFLENBQzNCLEVBQUU7WUFDRCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDdkMsTUFBTSxFQUNOLGFBQWEsRUFDYixhQUFhLEVBQ2IsR0FBRyxDQUNKLENBQUM7U0FDSDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGO0FBOVJELDRCQThSQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLGdCQUFnQjtJQUtwQixZQUNtQixNQUFrQixFQUNsQixJQUFvQixFQUNwQixRQUFnQixFQUNoQixpQkFBbUQ7UUFIbkQsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNsQixTQUFJLEdBQUosSUFBSSxDQUFnQjtRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ2hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0M7UUFSckQsVUFBSyxHQUF5QixFQUFFLENBQUM7SUFTL0MsQ0FBQztJQUVKOztPQUVHO0lBQ0ksU0FBUyxDQUFDLEtBQXVCO1FBQ3RDLE9BQU8sQ0FDTCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDekUsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHFCQUFTLENBQ3pCLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsUUFBUSxFQUNiLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQ3pELElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNLLHFCQUFxQjtRQUMzQixNQUFNLEdBQUcsR0FBcUMsRUFBRSxDQUFDO1FBQ2pELEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQy9ELElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUNoQjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sT0FBTyxDQUFDLElBQVU7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUVELFNBQVMsU0FBUyxDQUNoQixFQUFxQixFQUNyQixFQUFlO0lBRWYsTUFBTSxHQUFHLEdBQXNCLEVBQUUsQ0FBQztJQUNsQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN2QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMganNpaSBmcm9tICdAanNpaS9zcGVjJztcblxuaW1wb3J0IHsgQ2xhc3NUeXBlIH0gZnJvbSAnLi9jbGFzcyc7XG5pbXBvcnQgeyBEZXBlbmRlbmN5IH0gZnJvbSAnLi9kZXBlbmRlbmN5JztcbmltcG9ydCB7IEVudW1UeXBlIH0gZnJvbSAnLi9lbnVtJztcbmltcG9ydCB7IEludGVyZmFjZVR5cGUgfSBmcm9tICcuL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBNb2R1bGVMaWtlIH0gZnJvbSAnLi9tb2R1bGUtbGlrZSc7XG5pbXBvcnQgeyBTdWJtb2R1bGUgfSBmcm9tICcuL3N1Ym1vZHVsZSc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnLi90eXBlJztcbmltcG9ydCB7IFR5cGVTeXN0ZW0gfSBmcm9tICcuL3R5cGUtc3lzdGVtJztcblxuZXhwb3J0IGNsYXNzIEFzc2VtYmx5IGV4dGVuZHMgTW9kdWxlTGlrZSB7XG4gIHByaXZhdGUgX3R5cGVDYWNoZT86IHsgW2Zxbjogc3RyaW5nXTogVHlwZSB9O1xuICBwcml2YXRlIF9zdWJtb2R1bGVDYWNoZT86IHsgW2Zxbjogc3RyaW5nXTogU3VibW9kdWxlIH07XG4gIHByaXZhdGUgX2RlcGVuZGVuY3lDYWNoZT86IHsgW25hbWU6IHN0cmluZ106IERlcGVuZGVuY3kgfTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc3lzdGVtOiBUeXBlU3lzdGVtLCBwdWJsaWMgcmVhZG9ubHkgc3BlYzoganNpaS5Bc3NlbWJseSkge1xuICAgIHN1cGVyKHN5c3RlbSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZxbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNwZWMubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgc3BlYyBzY2hlbWFcbiAgICovXG4gIHB1YmxpYyBnZXQgc2NoZW1hKCk6IGpzaWkuU2NoZW1hVmVyc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy5zY2hlbWE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGpzaWkgY29tcGlsZXIgdGhhdCB3YXMgdXNlZCB0byBwcm9kdWNlIHRoaXMgQXNzZW1ibHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGpzaWlWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy5qc2lpVmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXNzZW1ibHlcbiAgICovXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNwZWMubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB0aGUgYXNzZW1ibHksIG1hcHMgdG8gXCJkZXNjcmlwdGlvblwiIGZyb20gcGFja2FnZS5qc29uXG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgc2luY2Ugc29tZSBwYWNrYWdlIG1hbmFnZXJzIChsaWtlIE1hdmVuKSByZXF1aXJlIGl0LlxuICAgKi9cbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNwZWMuZGVzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXNzZW1ibHksIGlmIGFueS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWV0YWRhdGEoKTogeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy5tZXRhZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdXJsIHRvIHRoZSBwcm9qZWN0IGhvbWVwYWdlLiBNYXBzIHRvIFwiaG9tZXBhZ2VcIiBmcm9tIHBhY2thZ2UuanNvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaG9tZXBhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zcGVjLmhvbWVwYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtb2R1bGUgcmVwb3NpdG9yeSwgbWFwcyB0byBcInJlcG9zaXRvcnlcIiBmcm9tIHBhY2thZ2UuanNvblxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIHNpbmNlIHNvbWUgcGFja2FnZSBtYW5hZ2VycyAobGlrZSBNYXZlbikgcmVxdWlyZSBpdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVwb3NpdG9yeSgpOiB7XG4gICAgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGRpcmVjdG9yeT86IHN0cmluZztcbiAgfSB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy5yZXBvc2l0b3J5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtYWluIGF1dGhvciBvZiB0aGlzIHBhY2thZ2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF1dGhvcigpOiBqc2lpLlBlcnNvbiB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy5hdXRob3I7XG4gIH1cblxuICAvKipcbiAgICogQWRkaXRpb25hbCBjb250cmlidXRvcnMgdG8gdGhpcyBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb250cmlidXRvcnMoKTogcmVhZG9ubHkganNpaS5QZXJzb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy5jb250cmlidXRvcnMgPz8gW107XG4gIH1cblxuICAvKipcbiAgICogQSBmaW5nZXJwcmludCB0aGF0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgc3BlY2lmaWNhdGlvbiBoYXMgY2hhbmdlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZmluZ2VycHJpbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zcGVjLmZpbmdlcnByaW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBhc3NlbWJseVxuICAgKi9cbiAgcHVibGljIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy52ZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBTUERYIG5hbWUgb2YgdGhlIGxpY2Vuc2UgdGhpcyBhc3NlbWJseSBpcyBkaXN0cmlidXRlZCBvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgbGljZW5zZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNwZWMubGljZW5zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIG1hcCBvZiB0YXJnZXQgbmFtZSB0byBjb25maWd1cmF0aW9uLCB3aGljaCBpcyB1c2VkIHdoZW4gZ2VuZXJhdGluZyBwYWNrYWdlcyBmb3JcbiAgICogdmFyaW91cyBsYW5ndWFnZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRhcmdldHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy50YXJnZXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGVuZGVuY2llcyBvbiBvdGhlciBhc3NlbWJsaWVzICh3aXRoIHNlbXZlciksIHRoZSBrZXkgaXMgdGhlIEpTSUkgYXNzZW1ibHkgbmFtZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwZW5kZW5jaWVzKCk6IHJlYWRvbmx5IERlcGVuZGVuY3lbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2RlcGVuZGVuY2llcykubWFwKFxuICAgICAgKG5hbWUpID0+IHRoaXMuX2RlcGVuZGVuY2llc1tuYW1lXSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGZpbmREZXBlbmRlbmN5KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGRlcCA9IHRoaXMuX2RlcGVuZGVuY2llc1tuYW1lXTtcbiAgICBpZiAoIWRlcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXBlbmRlbmN5ICR7bmFtZX0gbm90IGZvdW5kIGZvciBhc3NlbWJseSAke3RoaXMubmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGlmIGJ1bmRsZWQgZGVwZW5kZW5jaWVzICh0aGVzZSBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIGpzaWkgYXNzZW1ibGllcykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJ1bmRsZWQoKTogeyByZWFkb25seSBbbW9kdWxlOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy5idW5kbGVkID8/IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0b3AtbGV2ZWwgcmVhZG1lIGRvY3VtZW50IGZvciB0aGlzIGFzc2VtYmx5IChpZiBhbnkpLlxuICAgKi9cbiAgcHVibGljIGdldCByZWFkbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3BlYy5yZWFkbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB0aG9zZSBzdWJtb2R1bGVzIG5lc3RlZCBkaXJlY3RseSB1bmRlciB0aGUgYXNzZW1ibHlcbiAgICovXG4gIHB1YmxpYyBnZXQgc3VibW9kdWxlcygpOiByZWFkb25seSBTdWJtb2R1bGVbXSB7XG4gICAgY29uc3QgeyBzdWJtb2R1bGVzIH0gPSB0aGlzLl9hbmFseXplVHlwZXMoKTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3VibW9kdWxlcylcbiAgICAgIC5maWx0ZXIoKFtuYW1lLCBfXSkgPT4gbmFtZS5zcGxpdCgnLicpLmxlbmd0aCA9PT0gMilcbiAgICAgIC5tYXAoKFtfLCBzdWJtb2R1bGVdKSA9PiBzdWJtb2R1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgc3VibW9kdWxlcywgZXZlbiB0aG9zZSB0cmFuc3RpdmVseSBuZXN0ZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsU3VibW9kdWxlcygpOiByZWFkb25seSBTdWJtb2R1bGVbXSB7XG4gICAgY29uc3QgeyBzdWJtb2R1bGVzIH0gPSB0aGlzLl9hbmFseXplVHlwZXMoKTtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhzdWJtb2R1bGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgdHlwZXMsIGV2ZW4gdGhvc2UgaW4gc3VibW9kdWxlcyBhbmQgbmVzdGVkIHN1Ym1vZHVsZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHR5cGVzKCk6IHJlYWRvbmx5IFR5cGVbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy50eXBlTWFwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIHR5cGVzIGluIHRoZSBjdXJyZW50IGFzc2VtYmx5L3N1Ym1vZHVsZSBhbmQgYWxsIHN1Ym1vZHVsZXMgdW5kZXJuZWF0aFxuICAgKi9cbiAgcHVibGljIGdldCBhbGxUeXBlcygpOiByZWFkb25seSBUeXBlW10ge1xuICAgIHJldHVybiBbLi4udGhpcy50eXBlcywgLi4udGhpcy5hbGxTdWJtb2R1bGVzLmZsYXRNYXAoKHMpID0+IHMudHlwZXMpXTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kVHlwZShmcW46IHN0cmluZykge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnRyeUZpbmRUeXBlKGZxbik7XG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJyR7ZnFufScgbm90IGZvdW5kIGluIGFzc2VtYmx5ICR7dGhpcy5uYW1lfWApO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbiBhc3NlbWJseSBhZnRlciBsb2FkaW5nXG4gICAqXG4gICAqIElmIHRoZSBhc3NlbWJseSB3YXMgbG9hZGVkIHdpdGhvdXQgdmFsaWRhdGlvbiwgY2FsbCB0aGlzIHRvIHZhbGlkYXRlXG4gICAqIGl0IGFmdGVyIGFsbC4gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB2YWxpZGF0aW9uIGZhaWxzLlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgIGpzaWkudmFsaWRhdGVBc3NlbWJseSh0aGlzLnNwZWMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBzdWJtb2R1bGVNYXAoKTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgU3VibW9kdWxlPj4ge1xuICAgIHJldHVybiB0aGlzLl9hbmFseXplVHlwZXMoKS5zdWJtb2R1bGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCB0eXBlcyBpbiB0aGUgcm9vdCBvZiB0aGUgYXNzZW1ibHlcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHlwZU1hcCgpOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBUeXBlPj4ge1xuICAgIHJldHVybiB0aGlzLl9hbmFseXplVHlwZXMoKS50eXBlcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9kZXBlbmRlbmNpZXMoKSB7XG4gICAgaWYgKCF0aGlzLl9kZXBlbmRlbmN5Q2FjaGUpIHtcbiAgICAgIHRoaXMuX2RlcGVuZGVuY3lDYWNoZSA9IHt9O1xuICAgICAgaWYgKHRoaXMuc3BlYy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuc3BlYy5kZXBlbmRlbmNpZXMpKSB7XG4gICAgICAgICAgdGhpcy5fZGVwZW5kZW5jeUNhY2hlW25hbWVdID0gbmV3IERlcGVuZGVuY3koXG4gICAgICAgICAgICB0aGlzLnN5c3RlbSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB0aGlzLnNwZWMuZGVwZW5kZW5jaWVzW25hbWVdLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZGVwZW5kZW5jeUNhY2hlO1xuICB9XG5cbiAgcHJpdmF0ZSBfYW5hbHl6ZVR5cGVzKCkge1xuICAgIGlmICghdGhpcy5fdHlwZUNhY2hlIHx8ICF0aGlzLl9zdWJtb2R1bGVDYWNoZSkge1xuICAgICAgdGhpcy5fdHlwZUNhY2hlID0ge307XG5cbiAgICAgIGNvbnN0IHN1Ym1vZHVsZUJ1aWxkZXJzID0gdGhpcy5kaXNjb3ZlclN1Ym1vZHVsZXMoKTtcblxuICAgICAgY29uc3QgdHMgPSB0aGlzLnNwZWMudHlwZXMgPz8ge307XG4gICAgICBmb3IgKGNvbnN0IFtmcW4sIHR5cGVTcGVjXSBvZiBPYmplY3QuZW50cmllcyh0cykpIHtcbiAgICAgICAgbGV0IHR5cGU6IFR5cGU7XG4gICAgICAgIHN3aXRjaCAodHlwZVNwZWMua2luZCkge1xuICAgICAgICAgIGNhc2UganNpaS5UeXBlS2luZC5DbGFzczpcbiAgICAgICAgICAgIHR5cGUgPSBuZXcgQ2xhc3NUeXBlKHRoaXMuc3lzdGVtLCB0aGlzLCB0eXBlU3BlYyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UganNpaS5UeXBlS2luZC5JbnRlcmZhY2U6XG4gICAgICAgICAgICB0eXBlID0gbmV3IEludGVyZmFjZVR5cGUodGhpcy5zeXN0ZW0sIHRoaXMsIHR5cGVTcGVjKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBqc2lpLlR5cGVLaW5kLkVudW06XG4gICAgICAgICAgICB0eXBlID0gbmV3IEVudW1UeXBlKHRoaXMuc3lzdGVtLCB0aGlzLCB0eXBlU3BlYyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdHlwZSBraW5kJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaW5kIGNvbnRhaW5pbmcgc3VibW9kdWxlIChwb3RlbnRpYWxseSB0aHJvdWdoIGNvbnRhaW5pbmcgbmVzdGVkIGNsYXNzZXMsXG4gICAgICAgIC8vIHdoaWNoIERPIGNvdW50IGFzIG5hbWVzcGFjZXMgYnV0IGRvbid0IGNvdW50IGFzIG1vZHVsZXMpXG4gICAgICAgIGxldCBzdWJtb2R1bGUgPSB0eXBlU3BlYy5uYW1lc3BhY2U7XG4gICAgICAgIHdoaWxlIChzdWJtb2R1bGUgIT0gbnVsbCAmJiBgJHt0aGlzLnNwZWMubmFtZX0uJHtzdWJtb2R1bGV9YCBpbiB0cykge1xuICAgICAgICAgIHN1Ym1vZHVsZSA9IHRzW2Ake3RoaXMuc3BlYy5uYW1lfS4ke3N1Ym1vZHVsZX1gXS5uYW1lc3BhY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VibW9kdWxlICE9IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBtb2R1bGVOYW1lID0gYCR7dGhpcy5zcGVjLm5hbWV9LiR7c3VibW9kdWxlfWA7XG4gICAgICAgICAgc3VibW9kdWxlQnVpbGRlcnNbbW9kdWxlTmFtZV0uYWRkVHlwZSh0eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl90eXBlQ2FjaGVbZnFuXSA9IHR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3VibW9kdWxlQ2FjaGUgPSBtYXBWYWx1ZXMoc3VibW9kdWxlQnVpbGRlcnMsIChiKSA9PiBiLmJ1aWxkKCkpO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlczogdGhpcy5fdHlwZUNhY2hlLCBzdWJtb2R1bGVzOiB0aGlzLl9zdWJtb2R1bGVDYWNoZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGJ1aWxkZXIgZm9yIGFsbCBzdWJtb2R1bGVzIGluIHRoaXMgYXNzZW1ibHkgKHNvIHRoYXQgd2UgY2FuXG4gICAqIGFkZCB0eXBlcyBpbnRvIHRoZSBvYmplY3RzKS5cbiAgICovXG4gIHByaXZhdGUgZGlzY292ZXJTdWJtb2R1bGVzKCk6IFJlY29yZDxzdHJpbmcsIFN1Ym1vZHVsZUJ1aWxkZXI+IHtcbiAgICBjb25zdCBzeXN0ZW0gPSB0aGlzLnN5c3RlbTtcblxuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgU3VibW9kdWxlQnVpbGRlcj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtzdWJtb2R1bGVOYW1lLCBzdWJtb2R1bGVTcGVjXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgIHRoaXMuc3BlYy5zdWJtb2R1bGVzID8/IHt9LFxuICAgICkpIHtcbiAgICAgIHJldFtzdWJtb2R1bGVOYW1lXSA9IG5ldyBTdWJtb2R1bGVCdWlsZGVyKFxuICAgICAgICBzeXN0ZW0sXG4gICAgICAgIHN1Ym1vZHVsZVNwZWMsXG4gICAgICAgIHN1Ym1vZHVsZU5hbWUsXG4gICAgICAgIHJldCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBNdXRhYmxlIFN1Ym1vZHVsZSBidWlsZGVyXG4gKlxuICogQWxsb3dzIGFkZGluZyBUeXBlcyBiZWZvcmUgdGhlIHN1Ym1vZHVsZSBpcyBmcm96ZW4gdG8gYSBTdWJtb2R1bGUgY2xhc3MuXG4gKlxuICogVGFrZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZ1bGwgbWFwIG9mIHN1Ym1vZHVsZSBidWlsZGVycywgc28gdGhhdCBjb21lIHRpbWVcbiAqIHRvIHRyYW5zbGF0ZVxuICovXG5jbGFzcyBTdWJtb2R1bGVCdWlsZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSB0eXBlczogUmVjb3JkPHN0cmluZywgVHlwZT4gPSB7fTtcblxuICBwcml2YXRlIF9idWlsdD86IFN1Ym1vZHVsZTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzeXN0ZW06IFR5cGVTeXN0ZW0sXG4gICAgcHJpdmF0ZSByZWFkb25seSBzcGVjOiBqc2lpLlN1Ym1vZHVsZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZ1bGxOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxNb2R1bGVCdWlsZGVyczogUmVjb3JkPHN0cmluZywgU3VibW9kdWxlQnVpbGRlcj4sXG4gICkge31cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHN1Ym1vZHVsZSBpcyBhIGRpcmVjdCBjaGlsZCBvZiBhbm90aGVyIHN1Ym1vZHVsZVxuICAgKi9cbiAgcHVibGljIGlzQ2hpbGRPZihvdGhlcjogU3VibW9kdWxlQnVpbGRlcikge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZ1bGxOYW1lLnN0YXJ0c1dpdGgoYCR7b3RoZXIuZnVsbE5hbWV9LmApICYmXG4gICAgICB0aGlzLmZ1bGxOYW1lLnNwbGl0KCcuJykubGVuZ3RoID09PSBvdGhlci5mdWxsTmFtZS5zcGxpdCgnLicpLmxlbmd0aCArIDFcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkKCk6IFN1Ym1vZHVsZSB7XG4gICAgaWYgKCF0aGlzLl9idWlsdCkge1xuICAgICAgdGhpcy5fYnVpbHQgPSBuZXcgU3VibW9kdWxlKFxuICAgICAgICB0aGlzLnN5c3RlbSxcbiAgICAgICAgdGhpcy5zcGVjLFxuICAgICAgICB0aGlzLmZ1bGxOYW1lLFxuICAgICAgICBtYXBWYWx1ZXModGhpcy5maW5kU3VibW9kdWxlQnVpbGRlcnMoKSwgKGIpID0+IGIuYnVpbGQoKSksXG4gICAgICAgIHRoaXMudHlwZXMsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYnVpbHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCB0aGUgYnVpbGRlcnMgZnJvbSB0aGUgbWFwIHRoYXQgYXJlIG5lc3RlZCB1bmRlcm5lYXRoIG91cnNlbHZlcy5cbiAgICovXG4gIHByaXZhdGUgZmluZFN1Ym1vZHVsZUJ1aWxkZXJzKCkge1xuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgU3VibW9kdWxlQnVpbGRlcj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrLCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5hbGxNb2R1bGVCdWlsZGVycykpIHtcbiAgICAgIGlmIChjaGlsZC5pc0NoaWxkT2YodGhpcykpIHtcbiAgICAgICAgcmV0W2tdID0gY2hpbGQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwdWJsaWMgYWRkVHlwZSh0eXBlOiBUeXBlKSB7XG4gICAgdGhpcy50eXBlc1t0eXBlLmZxbl0gPSB0eXBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcFZhbHVlczxBLCBCPihcbiAgeHM6IFJlY29yZDxzdHJpbmcsIEE+LFxuICBmbjogKHg6IEEpID0+IEIsXG4pOiBSZWNvcmQ8c3RyaW5nLCBCPiB7XG4gIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgQj4gPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoeHMpKSB7XG4gICAgcmV0W2tdID0gZm4odik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==
@@ -27,8 +27,12 @@ export declare class TypeSystem {
27
27
  /**
28
28
  * Loads a jsii module or a single .jsii file into the type system.
29
29
  *
30
+ * If `fileOrDirectory` is a directory, it will be treated as a jsii npm module,
31
+ * and its dependencies (as determined by its 'package.json' file) will be loaded
32
+ * as well.
33
+ *
30
34
  * If `fileOrDirectory` is a file, it will be treated as a single .jsii file.
31
- * If `fileOrDirectory` is a directory, it will be treated as a jsii npm module.
35
+ * No dependencies will be loaded. You almost never want this.
32
36
  *
33
37
  * Not validating makes the difference between loading assemblies with lots
34
38
  * of dependencies (such as app-delivery) in 90ms vs 3500ms.
@@ -2,12 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TypeSystem = void 0;
4
4
  const jsii = require("@jsii/spec");
5
+ const fs = require("fs-extra");
5
6
  const path = require("path");
6
- const util_1 = require("util");
7
7
  const assembly_1 = require("./assembly");
8
8
  const class_1 = require("./class");
9
9
  const enum_1 = require("./enum");
10
10
  const interface_1 = require("./interface");
11
+ const util_1 = require("./util");
11
12
  class TypeSystem {
12
13
  constructor() {
13
14
  /**
@@ -27,27 +28,31 @@ class TypeSystem {
27
28
  * NOT have to declare a JSII dependency on any of the packages.
28
29
  */
29
30
  async loadNpmDependencies(packageRoot, options = {}) {
30
- // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports
31
- const pkg = require(path.resolve(packageRoot, 'package.json'));
31
+ const pkg = await fs.readJson(path.resolve(packageRoot, 'package.json'));
32
32
  for (const dep of dependenciesOf(pkg)) {
33
- // Filter jsii dependencies
34
- const depPkgJsonPath = require.resolve(`${dep}/package.json`, {
35
- paths: [packageRoot],
36
- });
37
- // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports
38
- const depPkgJson = require(depPkgJsonPath);
33
+ if (util_1.isBuiltinModule(dep)) {
34
+ continue;
35
+ }
36
+ // eslint-disable-next-line no-await-in-loop
37
+ const depDir = await util_1.findDependencyDirectory(dep, packageRoot);
38
+ // eslint-disable-next-line no-await-in-loop
39
+ const depPkgJson = await fs.readJson(path.join(depDir, 'package.json'));
39
40
  if (!depPkgJson.jsii) {
40
41
  continue;
41
42
  }
42
43
  // eslint-disable-next-line no-await-in-loop
43
- await this.loadModule(path.dirname(depPkgJsonPath), options);
44
+ await this.loadModule(depDir, options);
44
45
  }
45
46
  }
46
47
  /**
47
48
  * Loads a jsii module or a single .jsii file into the type system.
48
49
  *
50
+ * If `fileOrDirectory` is a directory, it will be treated as a jsii npm module,
51
+ * and its dependencies (as determined by its 'package.json' file) will be loaded
52
+ * as well.
53
+ *
49
54
  * If `fileOrDirectory` is a file, it will be treated as a single .jsii file.
50
- * If `fileOrDirectory` is a directory, it will be treated as a jsii npm module.
55
+ * No dependencies will be loaded. You almost never want this.
51
56
  *
52
57
  * Not validating makes the difference between loading assemblies with lots
53
58
  * of dependencies (such as app-delivery) in 90ms vs 3500ms.
@@ -56,7 +61,7 @@ class TypeSystem {
56
61
  * @param validate Whether or not to validate the assembly while loading it.
57
62
  */
58
63
  async load(fileOrDirectory, options = {}) {
59
- if ((await stat(fileOrDirectory)).isDirectory()) {
64
+ if ((await fs.stat(fileOrDirectory)).isDirectory()) {
60
65
  return this.loadModule(fileOrDirectory, options);
61
66
  }
62
67
  return this.loadFile(fileOrDirectory, { ...options, isRoot: true });
@@ -69,7 +74,7 @@ class TypeSystem {
69
74
  return out;
70
75
  async function _loadModule(moduleDirectory, isRoot = false) {
71
76
  const filePath = path.join(moduleDirectory, 'package.json');
72
- const pkg = JSON.parse((await readFile(filePath)).toString());
77
+ const pkg = JSON.parse(await fs.readFile(filePath, { encoding: 'utf-8' }));
73
78
  if (!pkg.jsii) {
74
79
  throw new Error(`No "jsii" section in ${filePath}`);
75
80
  }
@@ -99,11 +104,10 @@ class TypeSystem {
99
104
  if (bundled.includes(name)) {
100
105
  continue;
101
106
  }
102
- const depDir = require.resolve(`${name}/package.json`, {
103
- paths: [moduleDirectory],
104
- });
105
107
  // eslint-disable-next-line no-await-in-loop
106
- await _loadModule.call(this, path.dirname(depDir));
108
+ const depDir = await util_1.findDependencyDirectory(name, moduleDirectory);
109
+ // eslint-disable-next-line no-await-in-loop
110
+ await _loadModule.call(this, depDir);
107
111
  }
108
112
  return root;
109
113
  }
@@ -239,7 +243,7 @@ class TypeSystem {
239
243
  * @param validate Whether to validate the assembly or just assume it matches the schema
240
244
  */
241
245
  async loadAssembly(file, validate = true) {
242
- const spec = JSON.parse((await readFile(file)).toString());
246
+ const spec = JSON.parse(await fs.readFile(file, { encoding: 'utf-8' }));
243
247
  const ass = validate
244
248
  ? jsii.validateAssembly(spec)
245
249
  : spec;
@@ -272,16 +276,4 @@ function flatMap(collection, mapper) {
272
276
  .map(mapper)
273
277
  .reduce((acc, elt) => acc.concat(elt), new Array());
274
278
  }
275
- function stat(p) {
276
- // just-in-time require so that this file can be loaded in browsers as well.
277
- // eslint-disable-next-line @typescript-eslint/no-require-imports,@typescript-eslint/no-var-requires
278
- const fs = require('fs');
279
- return util_1.promisify(fs.stat)(p);
280
- }
281
- function readFile(p) {
282
- // just-in-time require so that this file can be loaded in browsers as well.
283
- // eslint-disable-next-line @typescript-eslint/no-require-imports,@typescript-eslint/no-var-requires
284
- const fs = require('fs');
285
- return util_1.promisify(fs.readFile)(p);
286
- }
287
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1zeXN0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlLXN5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsNkJBQTZCO0FBQzdCLCtCQUFpQztBQUVqQyx5Q0FBc0M7QUFDdEMsbUNBQW9DO0FBQ3BDLGlDQUFrQztBQUNsQywyQ0FBNEM7QUFNNUMsTUFBYSxVQUFVO0lBQXZCO1FBQ0U7O1dBRUc7UUFDYSxlQUFVLEdBQUcsSUFBSSxLQUFLLEVBQVksQ0FBQztRQUVuRDs7V0FFRztRQUNhLFVBQUssR0FBRyxJQUFJLEtBQUssRUFBWSxDQUFDO1FBRTdCLG9CQUFlLEdBQWlDLEVBQUUsQ0FBQztJQWtTdEUsQ0FBQztJQWhTQzs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxtQkFBbUIsQ0FDOUIsV0FBbUIsRUFDbkIsVUFBa0MsRUFBRTtRQUVwQyxxR0FBcUc7UUFDckcsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFL0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsMkJBQTJCO1lBQzNCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLGVBQWUsRUFBRTtnQkFDNUQsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO2FBQ3JCLENBQUMsQ0FBQztZQUNILHFHQUFxRztZQUNyRyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3BCLFNBQVM7YUFDVjtZQUVELDRDQUE0QztZQUM1QyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM5RDtJQUNI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QUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFZLEVBQUUsUUFBUSxHQUFHLElBQUk7UUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMzRCxNQUFNLEdBQUcsR0FBRyxRQUFRO1lBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBRSxJQUFzQixDQUFDO1FBQzVCLE9BQU8sSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sT0FBTyxDQUFDLEdBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7Q0FDRjtBQTdTRCxnQ0E2U0M7QUFFRCxTQUFTLGNBQWMsQ0FBQyxXQUFnQjs7SUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMvQixNQUFNLENBQUMsSUFBSSxPQUFDLFdBQVcsQ0FBQyxZQUFZLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sQ0FBQyxJQUFJLE9BQUMsV0FBVyxDQUFDLGdCQUFnQixtQ0FBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUNuQixNQUFrQixFQUNsQixNQUE0QztJQUU1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBSyxDQUFDO0lBQzlCLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQ2pEO0lBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FDZCxVQUF3QixFQUN4QixNQUFrQztJQUVsQyxPQUFPLFVBQVU7U0FDZCxHQUFHLENBQUMsTUFBTSxDQUFDO1NBQ1gsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLENBQVM7SUFDckIsNEVBQTRFO0lBQzVFLG9HQUFvRztJQUNwRyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsT0FBTyxnQkFBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBUztJQUN6Qiw0RUFBNEU7SUFDNUUsb0dBQW9HO0lBQ3BHLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixPQUFPLGdCQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBqc2lpIGZyb20gJ0Bqc2lpL3NwZWMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnO1xuXG5pbXBvcnQgeyBBc3NlbWJseSB9IGZyb20gJy4vYXNzZW1ibHknO1xuaW1wb3J0IHsgQ2xhc3NUeXBlIH0gZnJvbSAnLi9jbGFzcyc7XG5pbXBvcnQgeyBFbnVtVHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBJbnRlcmZhY2VUeXBlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWV0aG9kIH0gZnJvbSAnLi9tZXRob2QnO1xuaW1wb3J0IHsgTW9kdWxlTGlrZSB9IGZyb20gJy4vbW9kdWxlLWxpa2UnO1xuaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tICcuL3Byb3BlcnR5JztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICcuL3R5cGUnO1xuXG5leHBvcnQgY2xhc3MgVHlwZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBBbGwgYXNzZW1ibGllcyBpbiB0aGlzIHR5cGUgc3lzdGVtLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFzc2VtYmxpZXMgPSBuZXcgQXJyYXk8QXNzZW1ibHk+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSBcInJvb3RcIiBhc3NlbWJsaWVzIChvbmVzIHRoYXQgbG9hZGVkIGV4cGxpY2l0bHkgdmlhIGEgXCJsb2FkXCIgY2FsbCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9vdHMgPSBuZXcgQXJyYXk8QXNzZW1ibHk+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYXNzZW1ibHlMb29rdXA6IHsgW25hbWU6IHN0cmluZ106IEFzc2VtYmx5IH0gPSB7fTtcblxuICAvKipcbiAgICogTG9hZCBhbGwgSlNJSSBkZXBlbmRlbmNpZXMgb2YgdGhlIGdpdmVuIE5QTSBwYWNrYWdlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogVGhlIE5QTSBwYWNrYWdlIGl0c2VsZiBkb2VzICpub3QqIGhhdmUgdG8gYmUgYSBqc2lpIHBhY2thZ2UsIGFuZCBkb2VzXG4gICAqIE5PVCBoYXZlIHRvIGRlY2xhcmUgYSBKU0lJIGRlcGVuZGVuY3kgb24gYW55IG9mIHRoZSBwYWNrYWdlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkTnBtRGVwZW5kZW5jaWVzKFxuICAgIHBhY2thZ2VSb290OiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyB2YWxpZGF0ZT86IGJvb2xlYW4gfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgIGNvbnN0IHBrZyA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKHBhY2thZ2VSb290LCAncGFja2FnZS5qc29uJykpO1xuXG4gICAgZm9yIChjb25zdCBkZXAgb2YgZGVwZW5kZW5jaWVzT2YocGtnKSkge1xuICAgICAgLy8gRmlsdGVyIGpzaWkgZGVwZW5kZW5jaWVzXG4gICAgICBjb25zdCBkZXBQa2dKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShgJHtkZXB9L3BhY2thZ2UuanNvbmAsIHtcbiAgICAgICAgcGF0aHM6IFtwYWNrYWdlUm9vdF0sXG4gICAgICB9KTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgICBjb25zdCBkZXBQa2dKc29uID0gcmVxdWlyZShkZXBQa2dKc29uUGF0aCk7XG4gICAgICBpZiAoIWRlcFBrZ0pzb24uanNpaSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZShwYXRoLmRpcm5hbWUoZGVwUGtnSnNvblBhdGgpLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgYSBqc2lpIG1vZHVsZSBvciBhIHNpbmdsZSAuanNpaSBmaWxlIGludG8gdGhlIHR5cGUgc3lzdGVtLlxuICAgKlxuICAgKiBJZiBgZmlsZU9yRGlyZWN0b3J5YCBpcyBhIGZpbGUsIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZSAuanNpaSBmaWxlLlxuICAgKiBJZiBgZmlsZU9yRGlyZWN0b3J5YCBpcyBhIGRpcmVjdG9yeSwgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEganNpaSBucG0gbW9kdWxlLlxuICAgKlxuICAgKiBOb3QgdmFsaWRhdGluZyBtYWtlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvYWRpbmcgYXNzZW1ibGllcyB3aXRoIGxvdHNcbiAgICogb2YgZGVwZW5kZW5jaWVzIChzdWNoIGFzIGFwcC1kZWxpdmVyeSkgaW4gOTBtcyB2cyAzNTAwbXMuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlT3JEaXJlY3RvcnkgQSAuanNpaSBmaWxlIHBhdGggb3IgYSBtb2R1bGUgZGlyZWN0b3J5XG4gICAqIEBwYXJhbSB2YWxpZGF0ZSBXaGV0aGVyIG9yIG5vdCB0byB2YWxpZGF0ZSB0aGUgYXNzZW1ibHkgd2hpbGUgbG9hZGluZyBpdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkKFxuICAgIGZpbGVPckRpcmVjdG9yeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgaWYgKChhd2FpdCBzdGF0KGZpbGVPckRpcmVjdG9yeSkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRNb2R1bGUoZmlsZU9yRGlyZWN0b3J5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG9hZEZpbGUoZmlsZU9yRGlyZWN0b3J5LCB7IC4uLm9wdGlvbnMsIGlzUm9vdDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkTW9kdWxlKFxuICAgIGRpcjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxBc3NlbWJseT4ge1xuICAgIGNvbnN0IG91dCA9IGF3YWl0IF9sb2FkTW9kdWxlLmNhbGwodGhpcywgZGlyLCB0cnVlKTtcbiAgICBpZiAoIW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBtb2R1bGUgZnJvbSBkaXJlY3Rvcnk6ICR7ZGlyfWApO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBfbG9hZE1vZHVsZShcbiAgICAgIHRoaXM6IFR5cGVTeXN0ZW0sXG4gICAgICBtb2R1bGVEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgIGlzUm9vdCA9IGZhbHNlLFxuICAgICkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4obW9kdWxlRGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyk7XG4gICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKChhd2FpdCByZWFkRmlsZShmaWxlUGF0aCkpLnRvU3RyaW5nKCkpO1xuICAgICAgaWYgKCFwa2cuanNpaSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIFwianNpaVwiIHNlY3Rpb24gaW4gJHtmaWxlUGF0aH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gTG9hZCB0aGUgYXNzZW1ibHksIGJ1dCBkb24ndCByZWN1cnNlIGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBhc3NlbWJseSB3aXRoIHRoZSBzYW1lIG5hbWUuXG4gICAgICAvLyBWYWxpZGF0aW9uIGlzIG5vdCBhbiBpbnNpZ25pZmljYW50IHRpbWUgc2luaywgYW5kIGxvYWRpbmcgSVMgaW5zaWduaWZpY2FudCwgc28gZG8gYVxuICAgICAgLy8gbG9hZCB3aXRob3V0IHZhbGlkYXRpb24gZmlyc3QuIFRoaXMgc2F2ZXMgYWJvdXQgMi8zcmRzIG9mIHByb2Nlc3NpbmcgdGltZS5cbiAgICAgIGNvbnN0IGFzbSA9IGF3YWl0IHRoaXMubG9hZEFzc2VtYmx5KFxuICAgICAgICBwYXRoLmpvaW4obW9kdWxlRGlyZWN0b3J5LCAnLmpzaWknKSxcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaW5jbHVkZXNBc3NlbWJseShhc20ubmFtZSkpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmZpbmRBc3NlbWJseShhc20ubmFtZSk7XG4gICAgICAgIGlmIChleGlzdGluZy52ZXJzaW9uICE9PSBhc20udmVyc2lvbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDb25mbGljdGluZyB2ZXJzaW9ucyBvZiAke2FzbS5uYW1lfSBpbiB0eXBlIHN5c3RlbTogcHJldmlvdXNseSBsb2FkZWQgJHtleGlzdGluZy52ZXJzaW9ufSwgdHJ5aW5nIHRvIGxvYWQgJHthc20udmVyc2lvbn1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgbWFyayB0aGlzIHRoaW5nIGFzIHJvb3QgYWZ0ZXIgYWxsIGlmIGl0IHdhc24ndCB5ZXQuXG4gICAgICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgICB0aGlzLmFkZFJvb3QoYXNtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudmFsaWRhdGUgIT09IGZhbHNlKSB7XG4gICAgICAgIGFzbS52YWxpZGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByb290ID0gdGhpcy5hZGRBc3NlbWJseShhc20sIHsgaXNSb290IH0pO1xuICAgICAgLy8gVXNpbmcgfHwgaW5zdGVhZCBvZiA/PyBiZWNhdXNlIG5wbWpzLmNvbSB3aWxsIGFsdGVyIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBhbmQgcG9zc2libHkgcHV0IGBmYWxzZWAgaW4gcGtnLmJ1bmRsZURlcGVuZGVuY2llcy5cbiAgICAgIC8vIFRoaXMgaXMgYWN0dWFsbHkgbm9uIGNvbXBsaWFudCB0byB0aGUgcGFja2FnZS5qc29uIHNwZWNpZmljYXRpb24sIGJ1dCB0aGF0J3MgaG93IGl0IGlzLi4uXG4gICAgICBjb25zdCBidW5kbGVkOiBzdHJpbmdbXSA9XG4gICAgICAgIHBrZy5idW5kbGVkRGVwZW5kZW5jaWVzIHx8IHBrZy5idW5kbGVEZXBlbmRlbmNpZXMgfHwgW107XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBkZXBlbmRlbmNpZXNPZihwa2cpKSB7XG4gICAgICAgIGlmIChidW5kbGVkLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXBEaXIgPSByZXF1aXJlLnJlc29sdmUoYCR7bmFtZX0vcGFja2FnZS5qc29uYCwge1xuICAgICAgICAgIHBhdGhzOiBbbW9kdWxlRGlyZWN0b3J5XSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGF3YWl0IF9sb2FkTW9kdWxlLmNhbGwodGhpcywgcGF0aC5kaXJuYW1lKGRlcERpcikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm9vdDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEZpbGUoXG4gICAgZmlsZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgaXNSb290PzogYm9vbGVhbjsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSBhd2FpdCB0aGlzLmxvYWRBc3NlbWJseShmaWxlLCBvcHRpb25zLnZhbGlkYXRlICE9PSBmYWxzZSk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQXNzZW1ibHkoYXNzZW1ibHksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFkZEFzc2VtYmx5KGFzbTogQXNzZW1ibHksIG9wdGlvbnM6IHsgaXNSb290PzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBpZiAoYXNtLnN5c3RlbSAhPT0gdGhpcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3NlbWJseSBoYXMgYmVlbiBjcmVhdGVkIGZvciBkaWZmZXJlbnQgdHlwZXN5c3RlbScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fYXNzZW1ibHlMb29rdXBbYXNtLm5hbWVdKSB7XG4gICAgICB0aGlzLl9hc3NlbWJseUxvb2t1cFthc20ubmFtZV0gPSBhc207XG4gICAgICB0aGlzLmFzc2VtYmxpZXMucHVzaChhc20pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmlzUm9vdCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYWRkUm9vdChhc20pO1xuICAgIH1cblxuICAgIHJldHVybiBhc207XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgVHlwZVN5c3RlbSBpbmNsdWRlcyBhIGdpdmVuIGFzc2VtYmx5LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgYXNzZW1ibHkgYmVpbmcgbG9va2VkIGZvci5cbiAgICovXG4gIHB1YmxpYyBpbmNsdWRlc0Fzc2VtYmx5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuYW1lIGluIHRoaXMuX2Fzc2VtYmx5TG9va3VwO1xuICB9XG5cbiAgcHVibGljIGlzUm9vdChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yb290cy5tYXAoKHIpID0+IHIubmFtZSkuaW5jbHVkZXMobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZmluZEFzc2VtYmx5KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHJldCA9IHRoaXMudHJ5RmluZEFzc2VtYmx5KG5hbWUpO1xuICAgIGlmICghcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VtYmx5IFwiJHtuYW1lfVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHRyeUZpbmRBc3NlbWJseShuYW1lOiBzdHJpbmcpOiBBc3NlbWJseSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2VtYmx5TG9va3VwW25hbWVdO1xuICB9XG5cbiAgcHVibGljIGZpbmRGcW4oZnFuOiBzdHJpbmcpOiBUeXBlIHtcbiAgICBjb25zdCBbYXNzZW1ibHldID0gZnFuLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgYXNtID0gdGhpcy5maW5kQXNzZW1ibHkoYXNzZW1ibHkpO1xuICAgIHJldHVybiBhc20uZmluZFR5cGUoZnFuKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlGaW5kRnFuKGZxbjogc3RyaW5nKTogVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgW2Fzc2VtYmx5XSA9IGZxbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGFzbSA9IHRoaXMudHJ5RmluZEFzc2VtYmx5KGFzc2VtYmx5KTtcbiAgICByZXR1cm4gYXNtPy50cnlGaW5kVHlwZShmcW4pO1xuICB9XG5cbiAgcHVibGljIGZpbmRDbGFzcyhmcW46IHN0cmluZyk6IENsYXNzVHlwZSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZEZxbihmcW4pO1xuICAgIGlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzc1R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZRTiAke2Zxbn0gaXMgbm90IGEgY2xhc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBwdWJsaWMgZmluZEludGVyZmFjZShmcW46IHN0cmluZyk6IEludGVyZmFjZVR5cGUge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRGcW4oZnFuKTtcbiAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgSW50ZXJmYWNlVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRlFOICR7ZnFufSBpcyBub3QgYW4gaW50ZXJmYWNlYCk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtKGZxbjogc3RyaW5nKTogRW51bVR5cGUge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRGcW4oZnFuKTtcbiAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgRW51bVR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZRTiAke2Zxbn0gaXMgbm90IGFuIGVudW1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQWxsIG1ldGhvZHMgaW4gdGhlIHR5cGUgc3lzdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBtZXRob2RzKCkge1xuICAgIGNvbnN0IGdldE1ldGhvZHMgPSAobW9kOiBNb2R1bGVMaWtlKTogcmVhZG9ubHkgTWV0aG9kW10gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmxhdE1hcChtb2Quc3VibW9kdWxlcywgZ2V0TWV0aG9kcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmludGVyZmFjZXMsIChpZmFjZSkgPT4gaWZhY2Uub3duTWV0aG9kcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmNsYXNzZXMsIChjbGF6eikgPT4gY2xhenoub3duTWV0aG9kcyksXG4gICAgICBdO1xuICAgIH07XG5cbiAgICByZXR1cm4gZmxhdE1hcCh0aGlzLmFzc2VtYmxpZXMsIGdldE1ldGhvZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBwcm9wZXJ0aWVzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICBjb25zdCBnZXRQcm9wZXJ0aWVzID0gKG1vZDogTW9kdWxlTGlrZSk6IHJlYWRvbmx5IFByb3BlcnR5W10gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmxhdE1hcChtb2Quc3VibW9kdWxlcywgZ2V0UHJvcGVydGllcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmludGVyZmFjZXMsIChpZmFjZSkgPT4gaWZhY2Uub3duUHJvcGVydGllcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmNsYXNzZXMsIChjbGF6eikgPT4gY2xhenoub3duUHJvcGVydGllcyksXG4gICAgICBdO1xuICAgIH07XG5cbiAgICByZXR1cm4gZmxhdE1hcCh0aGlzLmFzc2VtYmxpZXMsIGdldFByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBjbGFzc2VzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2xhc3NlcygpOiByZWFkb25seSBDbGFzc1R5cGVbXSB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PENsYXNzVHlwZT4oKTtcbiAgICB0aGlzLmFzc2VtYmxpZXMuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgb3V0LnB1c2goLi4uY29sbGVjdFR5cGVzKGEsIChpdGVtKSA9PiBpdGVtLmNsYXNzZXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBpbnRlcmZhY2VzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW50ZXJmYWNlcygpOiByZWFkb25seSBJbnRlcmZhY2VUeXBlW10ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBBcnJheTxJbnRlcmZhY2VUeXBlPigpO1xuICAgIHRoaXMuYXNzZW1ibGllcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICBvdXQucHVzaCguLi5jb2xsZWN0VHlwZXMoYSwgKGl0ZW0pID0+IGl0ZW0uaW50ZXJmYWNlcykpO1xuICAgIH0pO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsIGVudW1zIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZW51bXMoKTogcmVhZG9ubHkgRW51bVR5cGVbXSB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PEVudW1UeXBlPigpO1xuICAgIHRoaXMuYXNzZW1ibGllcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICBvdXQucHVzaCguLi5jb2xsZWN0VHlwZXMoYSwgKGl0ZW0pID0+IGl0ZW0uZW51bXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYW4gYXNzZW1ibHkgd2l0aG91dCBhZGRpbmcgaXQgdG8gdGhlIHR5cGVzeXN0ZW1cbiAgICogQHBhcmFtIGZpbGUgQXNzZW1ibHkgZmlsZSB0byBsb2FkXG4gICAqIEBwYXJhbSB2YWxpZGF0ZSBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBhc3NlbWJseSBvciBqdXN0IGFzc3VtZSBpdCBtYXRjaGVzIHRoZSBzY2hlbWFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEFzc2VtYmx5KGZpbGU6IHN0cmluZywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3BlYyA9IEpTT04ucGFyc2UoKGF3YWl0IHJlYWRGaWxlKGZpbGUpKS50b1N0cmluZygpKTtcbiAgICBjb25zdCBhc3MgPSB2YWxpZGF0ZVxuICAgICAgPyBqc2lpLnZhbGlkYXRlQXNzZW1ibHkoc3BlYylcbiAgICAgIDogKHNwZWMgYXMganNpaS5Bc3NlbWJseSk7XG4gICAgcmV0dXJuIG5ldyBBc3NlbWJseSh0aGlzLCBhc3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSb290KGFzbTogQXNzZW1ibHkpIHtcbiAgICBpZiAoIXRoaXMucm9vdHMubWFwKChyKSA9PiByLm5hbWUpLmluY2x1ZGVzKGFzbS5uYW1lKSkge1xuICAgICAgdGhpcy5yb290cy5wdXNoKGFzbSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlcGVuZGVuY2llc09mKHBhY2thZ2VKc29uOiBhbnkpIHtcbiAgY29uc3QgZGVwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBPYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMgPz8ge30pLmZvckVhY2goZGVwcy5hZGQuYmluZChkZXBzKSk7XG4gIE9iamVjdC5rZXlzKHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXMgPz8ge30pLmZvckVhY2goZGVwcy5hZGQuYmluZChkZXBzKSk7XG4gIHJldHVybiBBcnJheS5mcm9tKGRlcHMpO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0VHlwZXM8VCBleHRlbmRzIFR5cGU+KFxuICBtb2R1bGU6IE1vZHVsZUxpa2UsXG4gIGdldHRlcjogKG1vZHVsZTogTW9kdWxlTGlrZSkgPT4gcmVhZG9ubHkgVFtdLFxuKTogcmVhZG9ubHkgVFtdIHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5PFQ+KCk7XG4gIGZvciAoY29uc3Qgc3VibW9kdWxlIG9mIG1vZHVsZS5zdWJtb2R1bGVzKSB7XG4gICAgcmVzdWx0LnB1c2goLi4uY29sbGVjdFR5cGVzKHN1Ym1vZHVsZSwgZ2V0dGVyKSk7XG4gIH1cbiAgcmVzdWx0LnB1c2goLi4uZ2V0dGVyKG1vZHVsZSkpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmbGF0TWFwPFQsIFI+KFxuICBjb2xsZWN0aW9uOiByZWFkb25seSBUW10sXG4gIG1hcHBlcjogKHZhbHVlOiBUKSA9PiByZWFkb25seSBSW10sXG4pOiByZWFkb25seSBSW10ge1xuICByZXR1cm4gY29sbGVjdGlvblxuICAgIC5tYXAobWFwcGVyKVxuICAgIC5yZWR1Y2UoKGFjYywgZWx0KSA9PiBhY2MuY29uY2F0KGVsdCksIG5ldyBBcnJheTxSPigpKTtcbn1cblxuZnVuY3Rpb24gc3RhdChwOiBzdHJpbmcpIHtcbiAgLy8ganVzdC1pbi10aW1lIHJlcXVpcmUgc28gdGhhdCB0aGlzIGZpbGUgY2FuIGJlIGxvYWRlZCBpbiBicm93c2VycyBhcyB3ZWxsLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgcmV0dXJuIHByb21pc2lmeShmcy5zdGF0KShwKTtcbn1cblxuZnVuY3Rpb24gcmVhZEZpbGUocDogc3RyaW5nKSB7XG4gIC8vIGp1c3QtaW4tdGltZSByZXF1aXJlIHNvIHRoYXQgdGhpcyBmaWxlIGNhbiBiZSBsb2FkZWQgaW4gYnJvd3NlcnMgYXMgd2VsbC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMsQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHJldHVybiBwcm9taXNpZnkoZnMucmVhZEZpbGUpKHApO1xufVxuIl19
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1zeXN0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlLXN5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUU3Qix5Q0FBc0M7QUFDdEMsbUNBQW9DO0FBQ3BDLGlDQUFrQztBQUNsQywyQ0FBNEM7QUFLNUMsaUNBQWtFO0FBRWxFLE1BQWEsVUFBVTtJQUF2QjtRQUNFOztXQUVHO1FBQ2EsZUFBVSxHQUFHLElBQUksS0FBSyxFQUFZLENBQUM7UUFFbkQ7O1dBRUc7UUFDYSxVQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVksQ0FBQztRQUU3QixvQkFBZSxHQUFpQyxFQUFFLENBQUM7SUEwU3RFLENBQUM7SUF4U0M7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsbUJBQW1CLENBQzlCLFdBQW1CLEVBQ25CLFVBQWtDLEVBQUU7UUFFcEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFekUsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsSUFBSSxzQkFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN4QixTQUFTO2FBQ1Y7WUFFRCw0Q0FBNEM7WUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSw4QkFBdUIsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFL0QsNENBQTRDO1lBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUNwQixTQUFTO2FBQ1Y7WUFFRCw0Q0FBNEM7WUFDNUMsTUFBTSxJQUFJLENB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QUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssRUFBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGpzaWkgZnJvbSAnQGpzaWkvc3BlYyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyBBc3NlbWJseSB9IGZyb20gJy4vYXNzZW1ibHknO1xuaW1wb3J0IHsgQ2xhc3NUeXBlIH0gZnJvbSAnLi9jbGFzcyc7XG5pbXBvcnQgeyBFbnVtVHlwZSB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBJbnRlcmZhY2VUeXBlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWV0aG9kIH0gZnJvbSAnLi9tZXRob2QnO1xuaW1wb3J0IHsgTW9kdWxlTGlrZSB9IGZyb20gJy4vbW9kdWxlLWxpa2UnO1xuaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tICcuL3Byb3BlcnR5JztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICcuL3R5cGUnO1xuaW1wb3J0IHsgZmluZERlcGVuZGVuY3lEaXJlY3RvcnksIGlzQnVpbHRpbk1vZHVsZSB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBUeXBlU3lzdGVtIHtcbiAgLyoqXG4gICAqIEFsbCBhc3NlbWJsaWVzIGluIHRoaXMgdHlwZSBzeXN0ZW0uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXNzZW1ibGllcyA9IG5ldyBBcnJheTxBc3NlbWJseT4oKTtcblxuICAvKipcbiAgICogVGhlIFwicm9vdFwiIGFzc2VtYmxpZXMgKG9uZXMgdGhhdCBsb2FkZWQgZXhwbGljaXRseSB2aWEgYSBcImxvYWRcIiBjYWxsKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290cyA9IG5ldyBBcnJheTxBc3NlbWJseT4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hc3NlbWJseUxvb2t1cDogeyBbbmFtZTogc3RyaW5nXTogQXNzZW1ibHkgfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBMb2FkIGFsbCBKU0lJIGRlcGVuZGVuY2llcyBvZiB0aGUgZ2l2ZW4gTlBNIHBhY2thZ2UgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBUaGUgTlBNIHBhY2thZ2UgaXRzZWxmIGRvZXMgKm5vdCogaGF2ZSB0byBiZSBhIGpzaWkgcGFja2FnZSwgYW5kIGRvZXNcbiAgICogTk9UIGhhdmUgdG8gZGVjbGFyZSBhIEpTSUkgZGVwZW5kZW5jeSBvbiBhbnkgb2YgdGhlIHBhY2thZ2VzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWROcG1EZXBlbmRlbmNpZXMoXG4gICAgcGFja2FnZVJvb3Q6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IHZhbGlkYXRlPzogYm9vbGVhbiB9ID0ge30sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBrZyA9IGF3YWl0IGZzLnJlYWRKc29uKHBhdGgucmVzb2x2ZShwYWNrYWdlUm9vdCwgJ3BhY2thZ2UuanNvbicpKTtcblxuICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcGVuZGVuY2llc09mKHBrZykpIHtcbiAgICAgIGlmIChpc0J1aWx0aW5Nb2R1bGUoZGVwKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgIGNvbnN0IGRlcERpciA9IGF3YWl0IGZpbmREZXBlbmRlbmN5RGlyZWN0b3J5KGRlcCwgcGFja2FnZVJvb3QpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgICAgY29uc3QgZGVwUGtnSnNvbiA9IGF3YWl0IGZzLnJlYWRKc29uKHBhdGguam9pbihkZXBEaXIsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgICBpZiAoIWRlcFBrZ0pzb24uanNpaSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZShkZXBEaXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBhIGpzaWkgbW9kdWxlIG9yIGEgc2luZ2xlIC5qc2lpIGZpbGUgaW50byB0aGUgdHlwZSBzeXN0ZW0uXG4gICAqXG4gICAqIElmIGBmaWxlT3JEaXJlY3RvcnlgIGlzIGEgZGlyZWN0b3J5LCBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBqc2lpIG5wbSBtb2R1bGUsXG4gICAqIGFuZCBpdHMgZGVwZW5kZW5jaWVzIChhcyBkZXRlcm1pbmVkIGJ5IGl0cyAncGFja2FnZS5qc29uJyBmaWxlKSB3aWxsIGJlIGxvYWRlZFxuICAgKiBhcyB3ZWxsLlxuICAgKlxuICAgKiBJZiBgZmlsZU9yRGlyZWN0b3J5YCBpcyBhIGZpbGUsIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZSAuanNpaSBmaWxlLlxuICAgKiBObyBkZXBlbmRlbmNpZXMgd2lsbCBiZSBsb2FkZWQuIFlvdSBhbG1vc3QgbmV2ZXIgd2FudCB0aGlzLlxuICAgKlxuICAgKiBOb3QgdmFsaWRhdGluZyBtYWtlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvYWRpbmcgYXNzZW1ibGllcyB3aXRoIGxvdHNcbiAgICogb2YgZGVwZW5kZW5jaWVzIChzdWNoIGFzIGFwcC1kZWxpdmVyeSkgaW4gOTBtcyB2cyAzNTAwbXMuXG4gICAqXG4gICAqIEBwYXJhbSBmaWxlT3JEaXJlY3RvcnkgQSAuanNpaSBmaWxlIHBhdGggb3IgYSBtb2R1bGUgZGlyZWN0b3J5XG4gICAqIEBwYXJhbSB2YWxpZGF0ZSBXaGV0aGVyIG9yIG5vdCB0byB2YWxpZGF0ZSB0aGUgYXNzZW1ibHkgd2hpbGUgbG9hZGluZyBpdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsb2FkKFxuICAgIGZpbGVPckRpcmVjdG9yeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgaWYgKChhd2FpdCBmcy5zdGF0KGZpbGVPckRpcmVjdG9yeSkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRNb2R1bGUoZmlsZU9yRGlyZWN0b3J5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG9hZEZpbGUoZmlsZU9yRGlyZWN0b3J5LCB7IC4uLm9wdGlvbnMsIGlzUm9vdDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkTW9kdWxlKFxuICAgIGRpcjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxBc3NlbWJseT4ge1xuICAgIGNvbnN0IG91dCA9IGF3YWl0IF9sb2FkTW9kdWxlLmNhbGwodGhpcywgZGlyLCB0cnVlKTtcbiAgICBpZiAoIW91dCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBtb2R1bGUgZnJvbSBkaXJlY3Rvcnk6ICR7ZGlyfWApO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBfbG9hZE1vZHVsZShcbiAgICAgIHRoaXM6IFR5cGVTeXN0ZW0sXG4gICAgICBtb2R1bGVEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgIGlzUm9vdCA9IGZhbHNlLFxuICAgICkge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4obW9kdWxlRGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyk7XG4gICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKFxuICAgICAgICBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSxcbiAgICAgICk7XG4gICAgICBpZiAoIXBrZy5qc2lpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gXCJqc2lpXCIgc2VjdGlvbiBpbiAke2ZpbGVQYXRofWApO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2FkIHRoZSBhc3NlbWJseSwgYnV0IGRvbid0IHJlY3Vyc2UgaWYgd2UgYWxyZWFkeSBoYXZlIGFuIGFzc2VtYmx5IHdpdGggdGhlIHNhbWUgbmFtZS5cbiAgICAgIC8vIFZhbGlkYXRpb24gaXMgbm90IGFuIGluc2lnbmlmaWNhbnQgdGltZSBzaW5rLCBhbmQgbG9hZGluZyBJUyBpbnNpZ25pZmljYW50LCBzbyBkbyBhXG4gICAgICAvLyBsb2FkIHdpdGhvdXQgdmFsaWRhdGlvbiBmaXJzdC4gVGhpcyBzYXZlcyBhYm91dCAyLzNyZHMgb2YgcHJvY2Vzc2luZyB0aW1lLlxuICAgICAgY29uc3QgYXNtID0gYXdhaXQgdGhpcy5sb2FkQXNzZW1ibHkoXG4gICAgICAgIHBhdGguam9pbihtb2R1bGVEaXJlY3RvcnksICcuanNpaScpLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5pbmNsdWRlc0Fzc2VtYmx5KGFzbS5uYW1lKSkge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZmluZEFzc2VtYmx5KGFzbS5uYW1lKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nLnZlcnNpb24gIT09IGFzbS52ZXJzaW9uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENvbmZsaWN0aW5nIHZlcnNpb25zIG9mICR7YXNtLm5hbWV9IGluIHR5cGUgc3lzdGVtOiBwcmV2aW91c2x5IGxvYWRlZCAke2V4aXN0aW5nLnZlcnNpb259LCB0cnlpbmcgdG8gbG9hZCAke2FzbS52ZXJzaW9ufWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBtYXJrIHRoaXMgdGhpbmcgYXMgcm9vdCBhZnRlciBhbGwgaWYgaXQgd2Fzbid0IHlldC5cbiAgICAgICAgaWYgKGlzUm9vdCkge1xuICAgICAgICAgIHRoaXMuYWRkUm9vdChhc20pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy52YWxpZGF0ZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgYXNtLnZhbGlkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLmFkZEFzc2VtYmx5KGFzbSwgeyBpc1Jvb3QgfSk7XG4gICAgICAvLyBVc2luZyB8fCBpbnN0ZWFkIG9mID8/IGJlY2F1c2UgbnBtanMuY29tIHdpbGwgYWx0ZXIgdGhlIHBhY2thZ2UuanNvbiBmaWxlIGFuZCBwb3NzaWJseSBwdXQgYGZhbHNlYCBpbiBwa2cuYnVuZGxlRGVwZW5kZW5jaWVzLlxuICAgICAgLy8gVGhpcyBpcyBhY3R1YWxseSBub24gY29tcGxpYW50IHRvIHRoZSBwYWNrYWdlLmpzb24gc3BlY2lmaWNhdGlvbiwgYnV0IHRoYXQncyBob3cgaXQgaXMuLi5cbiAgICAgIGNvbnN0IGJ1bmRsZWQ6IHN0cmluZ1tdID1cbiAgICAgICAgcGtnLmJ1bmRsZWREZXBlbmRlbmNpZXMgfHwgcGtnLmJ1bmRsZURlcGVuZGVuY2llcyB8fCBbXTtcblxuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGRlcGVuZGVuY2llc09mKHBrZykpIHtcbiAgICAgICAgaWYgKGJ1bmRsZWQuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGNvbnN0IGRlcERpciA9IGF3YWl0IGZpbmREZXBlbmRlbmN5RGlyZWN0b3J5KG5hbWUsIG1vZHVsZURpcmVjdG9yeSk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgICAgYXdhaXQgX2xvYWRNb2R1bGUuY2FsbCh0aGlzLCBkZXBEaXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm9vdDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEZpbGUoXG4gICAgZmlsZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgaXNSb290PzogYm9vbGVhbjsgdmFsaWRhdGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgYXNzZW1ibHkgPSBhd2FpdCB0aGlzLmxvYWRBc3NlbWJseShmaWxlLCBvcHRpb25zLnZhbGlkYXRlICE9PSBmYWxzZSk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQXNzZW1ibHkoYXNzZW1ibHksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFkZEFzc2VtYmx5KGFzbTogQXNzZW1ibHksIG9wdGlvbnM6IHsgaXNSb290PzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICBpZiAoYXNtLnN5c3RlbSAhPT0gdGhpcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3NlbWJseSBoYXMgYmVlbiBjcmVhdGVkIGZvciBkaWZmZXJlbnQgdHlwZXN5c3RlbScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fYXNzZW1ibHlMb29rdXBbYXNtLm5hbWVdKSB7XG4gICAgICB0aGlzLl9hc3NlbWJseUxvb2t1cFthc20ubmFtZV0gPSBhc207XG4gICAgICB0aGlzLmFzc2VtYmxpZXMucHVzaChhc20pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmlzUm9vdCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYWRkUm9vdChhc20pO1xuICAgIH1cblxuICAgIHJldHVybiBhc207XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgVHlwZVN5c3RlbSBpbmNsdWRlcyBhIGdpdmVuIGFzc2VtYmx5LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgYXNzZW1ibHkgYmVpbmcgbG9va2VkIGZvci5cbiAgICovXG4gIHB1YmxpYyBpbmNsdWRlc0Fzc2VtYmx5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBuYW1lIGluIHRoaXMuX2Fzc2VtYmx5TG9va3VwO1xuICB9XG5cbiAgcHVibGljIGlzUm9vdChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yb290cy5tYXAoKHIpID0+IHIubmFtZSkuaW5jbHVkZXMobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZmluZEFzc2VtYmx5KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHJldCA9IHRoaXMudHJ5RmluZEFzc2VtYmx5KG5hbWUpO1xuICAgIGlmICghcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFzc2VtYmx5IFwiJHtuYW1lfVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHRyeUZpbmRBc3NlbWJseShuYW1lOiBzdHJpbmcpOiBBc3NlbWJseSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2VtYmx5TG9va3VwW25hbWVdO1xuICB9XG5cbiAgcHVibGljIGZpbmRGcW4oZnFuOiBzdHJpbmcpOiBUeXBlIHtcbiAgICBjb25zdCBbYXNzZW1ibHldID0gZnFuLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgYXNtID0gdGhpcy5maW5kQXNzZW1ibHkoYXNzZW1ibHkpO1xuICAgIHJldHVybiBhc20uZmluZFR5cGUoZnFuKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlGaW5kRnFuKGZxbjogc3RyaW5nKTogVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgW2Fzc2VtYmx5XSA9IGZxbi5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGFzbSA9IHRoaXMudHJ5RmluZEFzc2VtYmx5KGFzc2VtYmx5KTtcbiAgICByZXR1cm4gYXNtPy50cnlGaW5kVHlwZShmcW4pO1xuICB9XG5cbiAgcHVibGljIGZpbmRDbGFzcyhmcW46IHN0cmluZyk6IENsYXNzVHlwZSB7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMuZmluZEZxbihmcW4pO1xuICAgIGlmICghKHR5cGUgaW5zdGFuY2VvZiBDbGFzc1R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZRTiAke2Zxbn0gaXMgbm90IGEgY2xhc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBwdWJsaWMgZmluZEludGVyZmFjZShmcW46IHN0cmluZyk6IEludGVyZmFjZVR5cGUge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRGcW4oZnFuKTtcbiAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgSW50ZXJmYWNlVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRlFOICR7ZnFufSBpcyBub3QgYW4gaW50ZXJmYWNlYCk7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgcHVibGljIGZpbmRFbnVtKGZxbjogc3RyaW5nKTogRW51bVR5cGUge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmZpbmRGcW4oZnFuKTtcbiAgICBpZiAoISh0eXBlIGluc3RhbmNlb2YgRW51bVR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZRTiAke2Zxbn0gaXMgbm90IGFuIGVudW1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICAvKipcbiAgICogQWxsIG1ldGhvZHMgaW4gdGhlIHR5cGUgc3lzdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBtZXRob2RzKCkge1xuICAgIGNvbnN0IGdldE1ldGhvZHMgPSAobW9kOiBNb2R1bGVMaWtlKTogcmVhZG9ubHkgTWV0aG9kW10gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmxhdE1hcChtb2Quc3VibW9kdWxlcywgZ2V0TWV0aG9kcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmludGVyZmFjZXMsIChpZmFjZSkgPT4gaWZhY2Uub3duTWV0aG9kcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmNsYXNzZXMsIChjbGF6eikgPT4gY2xhenoub3duTWV0aG9kcyksXG4gICAgICBdO1xuICAgIH07XG5cbiAgICByZXR1cm4gZmxhdE1hcCh0aGlzLmFzc2VtYmxpZXMsIGdldE1ldGhvZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBwcm9wZXJ0aWVzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICBjb25zdCBnZXRQcm9wZXJ0aWVzID0gKG1vZDogTW9kdWxlTGlrZSk6IHJlYWRvbmx5IFByb3BlcnR5W10gPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZmxhdE1hcChtb2Quc3VibW9kdWxlcywgZ2V0UHJvcGVydGllcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmludGVyZmFjZXMsIChpZmFjZSkgPT4gaWZhY2Uub3duUHJvcGVydGllcyksXG4gICAgICAgIC4uLmZsYXRNYXAobW9kLmNsYXNzZXMsIChjbGF6eikgPT4gY2xhenoub3duUHJvcGVydGllcyksXG4gICAgICBdO1xuICAgIH07XG5cbiAgICByZXR1cm4gZmxhdE1hcCh0aGlzLmFzc2VtYmxpZXMsIGdldFByb3BlcnRpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBjbGFzc2VzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2xhc3NlcygpOiByZWFkb25seSBDbGFzc1R5cGVbXSB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PENsYXNzVHlwZT4oKTtcbiAgICB0aGlzLmFzc2VtYmxpZXMuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgb3V0LnB1c2goLi4uY29sbGVjdFR5cGVzKGEsIChpdGVtKSA9PiBpdGVtLmNsYXNzZXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBpbnRlcmZhY2VzIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW50ZXJmYWNlcygpOiByZWFkb25seSBJbnRlcmZhY2VUeXBlW10ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBBcnJheTxJbnRlcmZhY2VUeXBlPigpO1xuICAgIHRoaXMuYXNzZW1ibGllcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICBvdXQucHVzaCguLi5jb2xsZWN0VHlwZXMoYSwgKGl0ZW0pID0+IGl0ZW0uaW50ZXJmYWNlcykpO1xuICAgIH0pO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsIGVudW1zIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZW51bXMoKTogcmVhZG9ubHkgRW51bVR5cGVbXSB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PEVudW1UeXBlPigpO1xuICAgIHRoaXMuYXNzZW1ibGllcy5mb3JFYWNoKChhKSA9PiB7XG4gICAgICBvdXQucHVzaCguLi5jb2xsZWN0VHlwZXMoYSwgKGl0ZW0pID0+IGl0ZW0uZW51bXMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYW4gYXNzZW1ibHkgd2l0aG91dCBhZGRpbmcgaXQgdG8gdGhlIHR5cGVzeXN0ZW1cbiAgICogQHBhcmFtIGZpbGUgQXNzZW1ibHkgZmlsZSB0byBsb2FkXG4gICAqIEBwYXJhbSB2YWxpZGF0ZSBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBhc3NlbWJseSBvciBqdXN0IGFzc3VtZSBpdCBtYXRjaGVzIHRoZSBzY2hlbWFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEFzc2VtYmx5KGZpbGU6IHN0cmluZywgdmFsaWRhdGUgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3BlYyA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoZmlsZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSk7XG4gICAgY29uc3QgYXNzID0gdmFsaWRhdGVcbiAgICAgID8ganNpaS52YWxpZGF0ZUFzc2VtYmx5KHNwZWMpXG4gICAgICA6IChzcGVjIGFzIGpzaWkuQXNzZW1ibHkpO1xuICAgIHJldHVybiBuZXcgQXNzZW1ibHkodGhpcywgYXNzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUm9vdChhc206IEFzc2VtYmx5KSB7XG4gICAgaWYgKCF0aGlzLnJvb3RzLm1hcCgocikgPT4gci5uYW1lKS5pbmNsdWRlcyhhc20ubmFtZSkpIHtcbiAgICAgIHRoaXMucm9vdHMucHVzaChhc20pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZXBlbmRlbmNpZXNPZihwYWNrYWdlSnNvbjogYW55KSB7XG4gIGNvbnN0IGRlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgT2JqZWN0LmtleXMocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzID8/IHt9KS5mb3JFYWNoKGRlcHMuYWRkLmJpbmQoZGVwcykpO1xuICBPYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzID8/IHt9KS5mb3JFYWNoKGRlcHMuYWRkLmJpbmQoZGVwcykpO1xuICByZXR1cm4gQXJyYXkuZnJvbShkZXBzKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdFR5cGVzPFQgZXh0ZW5kcyBUeXBlPihcbiAgbW9kdWxlOiBNb2R1bGVMaWtlLFxuICBnZXR0ZXI6IChtb2R1bGU6IE1vZHVsZUxpa2UpID0+IHJlYWRvbmx5IFRbXSxcbik6IHJlYWRvbmx5IFRbXSB7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxUPigpO1xuICBmb3IgKGNvbnN0IHN1Ym1vZHVsZSBvZiBtb2R1bGUuc3VibW9kdWxlcykge1xuICAgIHJlc3VsdC5wdXNoKC4uLmNvbGxlY3RUeXBlcyhzdWJtb2R1bGUsIGdldHRlcikpO1xuICB9XG4gIHJlc3VsdC5wdXNoKC4uLmdldHRlcihtb2R1bGUpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZmxhdE1hcDxULCBSPihcbiAgY29sbGVjdGlvbjogcmVhZG9ubHkgVFtdLFxuICBtYXBwZXI6ICh2YWx1ZTogVCkgPT4gcmVhZG9ubHkgUltdLFxuKTogcmVhZG9ubHkgUltdIHtcbiAgcmV0dXJuIGNvbGxlY3Rpb25cbiAgICAubWFwKG1hcHBlcilcbiAgICAucmVkdWNlKChhY2MsIGVsdCkgPT4gYWNjLmNvbmNhdChlbHQpLCBuZXcgQXJyYXk8Uj4oKSk7XG59XG4iXX0=
package/lib/util.d.ts CHANGED
@@ -1,3 +1,33 @@
1
1
  export declare function indexBy<T>(xs: T[], f: (x: T) => string): {
2
2
  [key: string]: T;
3
3
  };
4
+ /**
5
+ * Find the directory that contains a given dependency, identified by its 'package.json', from a starting search directory
6
+ *
7
+ * (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
8
+ * 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
9
+ */
10
+ export declare function findDependencyDirectory(dependencyName: string, searchStart: string): Promise<string>;
11
+ /**
12
+ * Whether the given dependency is a built-in
13
+ *
14
+ * Some dependencies that occur in `package.json` are also built-ins in modern Node
15
+ * versions (most egregious example: 'punycode'). Detect those and filter them out.
16
+ */
17
+ export declare function isBuiltinModule(depName: string): any;
18
+ /**
19
+ * Find the package.json for a given package upwards from the given directory
20
+ *
21
+ * (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
22
+ * 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
23
+ */
24
+ export declare function findPackageJsonUp(packageName: string, directory: string): Promise<string | undefined>;
25
+ /**
26
+ * Find a directory up the tree from a starting directory matching a condition
27
+ *
28
+ * Will return `undefined` if no directory matches
29
+ *
30
+ * (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
31
+ * 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
32
+ */
33
+ export declare function findUp(directory: string, pred: (dir: string) => Promise<boolean>): Promise<string | undefined>;
package/lib/util.js CHANGED
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.indexBy = void 0;
3
+ exports.findUp = exports.findPackageJsonUp = exports.isBuiltinModule = exports.findDependencyDirectory = exports.indexBy = void 0;
4
+ const fs = require("fs-extra");
5
+ const path = require("path");
4
6
  function indexBy(xs, f) {
5
7
  const ret = {};
6
8
  for (const x of xs) {
@@ -9,4 +11,74 @@ function indexBy(xs, f) {
9
11
  return ret;
10
12
  }
11
13
  exports.indexBy = indexBy;
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsU0FBZ0IsT0FBTyxDQUFJLEVBQU8sRUFBRSxDQUFtQjtJQUNyRCxNQUFNLEdBQUcsR0FBeUIsRUFBRSxDQUFDO0lBQ3JDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDZjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQU5ELDBCQU1DIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGluZGV4Qnk8VD4oeHM6IFRbXSwgZjogKHg6IFQpID0+IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogVCB9IHtcbiAgY29uc3QgcmV0OiB7IFtrZXk6IHN0cmluZ106IFQgfSA9IHt9O1xuICBmb3IgKGNvbnN0IHggb2YgeHMpIHtcbiAgICByZXRbZih4KV0gPSB4O1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=
14
+ /**
15
+ * Find the directory that contains a given dependency, identified by its 'package.json', from a starting search directory
16
+ *
17
+ * (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
18
+ * 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
19
+ */
20
+ async function findDependencyDirectory(dependencyName, searchStart) {
21
+ // Explicitly do not use 'require("dep/package.json")' because that will fail if the
22
+ // package does not export that particular file.
23
+ const entryPoint = require.resolve(dependencyName, {
24
+ paths: [searchStart],
25
+ });
26
+ // Search up from the given directory, looking for a package.json that matches
27
+ // the dependency name (so we don't accidentally find stray 'package.jsons').
28
+ const depPkgJsonPath = await findPackageJsonUp(dependencyName, path.dirname(entryPoint));
29
+ if (!depPkgJsonPath) {
30
+ throw new Error(`Could not find dependency '${dependencyName}' from '${searchStart}'`);
31
+ }
32
+ return depPkgJsonPath;
33
+ }
34
+ exports.findDependencyDirectory = findDependencyDirectory;
35
+ /**
36
+ * Whether the given dependency is a built-in
37
+ *
38
+ * Some dependencies that occur in `package.json` are also built-ins in modern Node
39
+ * versions (most egregious example: 'punycode'). Detect those and filter them out.
40
+ */
41
+ function isBuiltinModule(depName) {
42
+ // eslint-disable-next-line @typescript-eslint/no-require-imports,@typescript-eslint/no-var-requires
43
+ const { builtinModules } = require('module');
44
+ return (builtinModules !== null && builtinModules !== void 0 ? builtinModules : []).includes(depName);
45
+ }
46
+ exports.isBuiltinModule = isBuiltinModule;
47
+ /**
48
+ * Find the package.json for a given package upwards from the given directory
49
+ *
50
+ * (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
51
+ * 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
52
+ */
53
+ async function findPackageJsonUp(packageName, directory) {
54
+ return findUp(directory, async (dir) => {
55
+ const pjFile = path.join(dir, 'package.json');
56
+ return ((await fs.pathExists(pjFile)) &&
57
+ (await fs.readJson(pjFile)).name === packageName);
58
+ });
59
+ }
60
+ exports.findPackageJsonUp = findPackageJsonUp;
61
+ /**
62
+ * Find a directory up the tree from a starting directory matching a condition
63
+ *
64
+ * Will return `undefined` if no directory matches
65
+ *
66
+ * (This code is duplicated among jsii/jsii-pacmak/jsii-reflect. Changes should be done in all
67
+ * 3 locations, and we should unify these at some point: https://github.com/aws/jsii/issues/3236)
68
+ */
69
+ async function findUp(directory, pred) {
70
+ // eslint-disable-next-line no-constant-condition
71
+ while (true) {
72
+ // eslint-disable-next-line no-await-in-loop
73
+ if (await pred(directory)) {
74
+ return directory;
75
+ }
76
+ const parent = path.dirname(directory);
77
+ if (parent === directory) {
78
+ return undefined;
79
+ }
80
+ directory = parent;
81
+ }
82
+ }
83
+ exports.findUp = findUp;
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUU3QixTQUFnQixPQUFPLENBQUksRUFBTyxFQUFFLENBQW1CO0lBQ3JELE1BQU0sR0FBRyxHQUF5QixFQUFFLENBQUM7SUFDckMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNmO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBTkQsMEJBTUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsY0FBc0IsRUFDdEIsV0FBbUI7SUFFbkIsb0ZBQW9GO0lBQ3BGLGdEQUFnRDtJQUNoRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtRQUNqRCxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUM7S0FDckIsQ0FBQyxDQUFDO0lBRUgsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSxNQUFNLGNBQWMsR0FBRyxNQUFNLGlCQUFpQixDQUM1QyxjQUFjLEVBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FDekIsQ0FBQztJQUVGLElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FDYiw4QkFBOEIsY0FBYyxXQUFXLFdBQVcsR0FBRyxDQUN0RSxDQUFDO0tBQ0g7SUFFRCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDO0FBeEJELDBEQXdCQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLE9BQWU7SUFDN0Msb0dBQW9HO0lBQ3BHLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsT0FBTyxDQUFDLGNBQWMsYUFBZCxjQUFjLGNBQWQsY0FBYyxHQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBSkQsMENBSUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsV0FBbUIsRUFDbkIsU0FBaUI7SUFFakIsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQ0wsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUNqRCxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBWEQsOENBV0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0ksS0FBSyxVQUFVLE1BQU0sQ0FDMUIsU0FBaUIsRUFDakIsSUFBdUM7SUFFdkMsaURBQWlEO0lBQ2pELE9BQU8sSUFBSSxFQUFFO1FBQ1gsNENBQTRDO1FBQzVDLElBQUksTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekIsT0FBTyxTQUFTLENBQUM7U0FDbEI7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QixPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUNELFNBQVMsR0FBRyxNQUFNLENBQUM7S0FDcEI7QUFDSCxDQUFDO0FBakJELHdCQWlCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleEJ5PFQ+KHhzOiBUW10sIGY6ICh4OiBUKSA9PiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XG4gIGNvbnN0IHJldDogeyBba2V5OiBzdHJpbmddOiBUIH0gPSB7fTtcbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgcmV0W2YoeCldID0geDtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGEgZ2l2ZW4gZGVwZW5kZW5jeSwgaWRlbnRpZmllZCBieSBpdHMgJ3BhY2thZ2UuanNvbicsIGZyb20gYSBzdGFydGluZyBzZWFyY2ggZGlyZWN0b3J5XG4gKlxuICogKFRoaXMgY29kZSBpcyBkdXBsaWNhdGVkIGFtb25nIGpzaWkvanNpaS1wYWNtYWsvanNpaS1yZWZsZWN0LiBDaGFuZ2VzIHNob3VsZCBiZSBkb25lIGluIGFsbFxuICogMyBsb2NhdGlvbnMsIGFuZCB3ZSBzaG91bGQgdW5pZnkgdGhlc2UgYXQgc29tZSBwb2ludDogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2lzc3Vlcy8zMjM2KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZERlcGVuZGVuY3lEaXJlY3RvcnkoXG4gIGRlcGVuZGVuY3lOYW1lOiBzdHJpbmcsXG4gIHNlYXJjaFN0YXJ0OiBzdHJpbmcsXG4pIHtcbiAgLy8gRXhwbGljaXRseSBkbyBub3QgdXNlICdyZXF1aXJlKFwiZGVwL3BhY2thZ2UuanNvblwiKScgYmVjYXVzZSB0aGF0IHdpbGwgZmFpbCBpZiB0aGVcbiAgLy8gcGFja2FnZSBkb2VzIG5vdCBleHBvcnQgdGhhdCBwYXJ0aWN1bGFyIGZpbGUuXG4gIGNvbnN0IGVudHJ5UG9pbnQgPSByZXF1aXJlLnJlc29sdmUoZGVwZW5kZW5jeU5hbWUsIHtcbiAgICBwYXRoczogW3NlYXJjaFN0YXJ0XSxcbiAgfSk7XG5cbiAgLy8gU2VhcmNoIHVwIGZyb20gdGhlIGdpdmVuIGRpcmVjdG9yeSwgbG9va2luZyBmb3IgYSBwYWNrYWdlLmpzb24gdGhhdCBtYXRjaGVzXG4gIC8vIHRoZSBkZXBlbmRlbmN5IG5hbWUgKHNvIHdlIGRvbid0IGFjY2lkZW50YWxseSBmaW5kIHN0cmF5ICdwYWNrYWdlLmpzb25zJykuXG4gIGNvbnN0IGRlcFBrZ0pzb25QYXRoID0gYXdhaXQgZmluZFBhY2thZ2VKc29uVXAoXG4gICAgZGVwZW5kZW5jeU5hbWUsXG4gICAgcGF0aC5kaXJuYW1lKGVudHJ5UG9pbnQpLFxuICApO1xuXG4gIGlmICghZGVwUGtnSnNvblBhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ291bGQgbm90IGZpbmQgZGVwZW5kZW5jeSAnJHtkZXBlbmRlbmN5TmFtZX0nIGZyb20gJyR7c2VhcmNoU3RhcnR9J2AsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBkZXBQa2dKc29uUGF0aDtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBnaXZlbiBkZXBlbmRlbmN5IGlzIGEgYnVpbHQtaW5cbiAqXG4gKiBTb21lIGRlcGVuZGVuY2llcyB0aGF0IG9jY3VyIGluIGBwYWNrYWdlLmpzb25gIGFyZSBhbHNvIGJ1aWx0LWlucyBpbiBtb2Rlcm4gTm9kZVxuICogdmVyc2lvbnMgKG1vc3QgZWdyZWdpb3VzIGV4YW1wbGU6ICdwdW55Y29kZScpLiBEZXRlY3QgdGhvc2UgYW5kIGZpbHRlciB0aGVtIG91dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQnVpbHRpbk1vZHVsZShkZXBOYW1lOiBzdHJpbmcpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMsQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCB7IGJ1aWx0aW5Nb2R1bGVzIH0gPSByZXF1aXJlKCdtb2R1bGUnKTtcbiAgcmV0dXJuIChidWlsdGluTW9kdWxlcyA/PyBbXSkuaW5jbHVkZXMoZGVwTmFtZSk7XG59XG5cbi8qKlxuICogRmluZCB0aGUgcGFja2FnZS5qc29uIGZvciBhIGdpdmVuIHBhY2thZ2UgdXB3YXJkcyBmcm9tIHRoZSBnaXZlbiBkaXJlY3RvcnlcbiAqXG4gKiAoVGhpcyBjb2RlIGlzIGR1cGxpY2F0ZWQgYW1vbmcganNpaS9qc2lpLXBhY21hay9qc2lpLXJlZmxlY3QuIENoYW5nZXMgc2hvdWxkIGJlIGRvbmUgaW4gYWxsXG4gKiAzIGxvY2F0aW9ucywgYW5kIHdlIHNob3VsZCB1bmlmeSB0aGVzZSBhdCBzb21lIHBvaW50OiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzMyMzYpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kUGFja2FnZUpzb25VcChcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgZGlyZWN0b3J5OiBzdHJpbmcsXG4pIHtcbiAgcmV0dXJuIGZpbmRVcChkaXJlY3RvcnksIGFzeW5jIChkaXIpID0+IHtcbiAgICBjb25zdCBwakZpbGUgPSBwYXRoLmpvaW4oZGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgcmV0dXJuIChcbiAgICAgIChhd2FpdCBmcy5wYXRoRXhpc3RzKHBqRmlsZSkpICYmXG4gICAgICAoYXdhaXQgZnMucmVhZEpzb24ocGpGaWxlKSkubmFtZSA9PT0gcGFja2FnZU5hbWVcbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBGaW5kIGEgZGlyZWN0b3J5IHVwIHRoZSB0cmVlIGZyb20gYSBzdGFydGluZyBkaXJlY3RvcnkgbWF0Y2hpbmcgYSBjb25kaXRpb25cbiAqXG4gKiBXaWxsIHJldHVybiBgdW5kZWZpbmVkYCBpZiBubyBkaXJlY3RvcnkgbWF0Y2hlc1xuICpcbiAqIChUaGlzIGNvZGUgaXMgZHVwbGljYXRlZCBhbW9uZyBqc2lpL2pzaWktcGFjbWFrL2pzaWktcmVmbGVjdC4gQ2hhbmdlcyBzaG91bGQgYmUgZG9uZSBpbiBhbGxcbiAqIDMgbG9jYXRpb25zLCBhbmQgd2Ugc2hvdWxkIHVuaWZ5IHRoZXNlIGF0IHNvbWUgcG9pbnQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9pc3N1ZXMvMzIzNilcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRVcChcbiAgZGlyZWN0b3J5OiBzdHJpbmcsXG4gIHByZWQ6IChkaXI6IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPixcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdGFudC1jb25kaXRpb25cbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGlmIChhd2FpdCBwcmVkKGRpcmVjdG9yeSkpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rvcnk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gcGF0aC5kaXJuYW1lKGRpcmVjdG9yeSk7XG4gICAgaWYgKHBhcmVudCA9PT0gZGlyZWN0b3J5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBkaXJlY3RvcnkgPSBwYXJlbnQ7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsii-reflect",
3
- "version": "1.46.0",
3
+ "version": "1.50.0",
4
4
  "description": "strongly-typed reflection library and tools for jsii",
5
5
  "license": "Apache-2.0",
6
6
  "author": {
@@ -34,24 +34,24 @@
34
34
  "package": "package-js"
35
35
  },
36
36
  "dependencies": {
37
- "@jsii/check-node": "1.46.0",
38
- "@jsii/spec": "^1.46.0",
37
+ "@jsii/check-node": "1.50.0",
38
+ "@jsii/spec": "^1.50.0",
39
39
  "colors": "^1.4.0",
40
40
  "fs-extra": "^9.1.0",
41
- "oo-ascii-tree": "^1.46.0",
41
+ "oo-ascii-tree": "^1.50.0",
42
42
  "yargs": "^16.2.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@scope/jsii-calc-lib": "^1.46.0",
45
+ "@scope/jsii-calc-lib": "^1.50.0",
46
46
  "@types/fs-extra": "^9.0.13",
47
- "@types/jest": "^27.0.2",
48
- "@types/node": "^12.20.28",
49
- "eslint": "^7.32.0",
50
- "jest": "^27.2.4",
51
- "jsii": "^1.46.0",
52
- "jsii-build-tools": "^1.46.0",
47
+ "@types/jest": "^27.0.3",
48
+ "@types/node": "^12.20.38",
49
+ "eslint": "^8.5.0",
50
+ "jest": "^27.4.5",
51
+ "jsii": "^1.50.0",
52
+ "jsii-build-tools": "^1.50.0",
53
53
  "jsii-calc": "^3.20.120",
54
- "prettier": "^2.4.1",
54
+ "prettier": "^2.5.1",
55
55
  "typescript": "~3.9.10"
56
56
  }
57
57
  }
@@ -1,25 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const jsii_1 = require("jsii");
4
3
  const reflect = require("../lib");
4
+ const util_1 = require("./util");
5
5
  test('get full github source location for a class or method', async () => {
6
6
  // WHEN
7
- const assembly = await loadSource(`
7
+ const assembly = await util_1.assemblyFromSource(`
8
8
  export class Foo {
9
9
  public bar() {
10
10
  // Nothing to do
11
11
  }
12
12
  }
13
- `.trim(), (obj) => (obj.repository.directory = 'some/sub/dir'));
13
+ `.trim(), (obj) => {
14
+ if (typeof obj.repository === 'object') {
15
+ obj.repository.directory = 'some/sub/dir';
16
+ }
17
+ });
14
18
  // THEN
15
19
  const klass = assembly.findType('testpkg.Foo');
16
20
  expect(klass.isClassType).toBeTruthy();
17
21
  expect(reflect.repositoryUrl(klass, 'main')).toBe('https://github.com/aws/jsii/blob/main/some/sub/dir/index.ts#L1');
18
22
  expect(reflect.repositoryUrl(klass)).toBe('https://github.com/aws/jsii/blob/master/some/sub/dir/index.ts#L1');
19
23
  });
20
- async function loadSource(source, cb) {
21
- const ass = await jsii_1.sourceToAssemblyHelper(source, cb);
22
- const ts = new reflect.TypeSystem();
23
- return ts.addAssembly(new reflect.Assembly(ts, ass));
24
- }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXBlbmRlbnQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluZGVwZW5kZW50LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQkFBMkQ7QUFFM0Qsa0NBQWtDO0FBRWxDLElBQUksQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtJQUN2RSxPQUFPO0lBQ1AsTUFBTSxRQUFRLEdBQUcsTUFBTSxVQUFVLENBQy9COzs7Ozs7R0FNRCxDQUFDLElBQUksRUFBRSxFQUNOLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxDQUNyRCxDQUFDO0lBRUYsT0FBTztJQUNQLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9DLGdFQUFnRSxDQUNqRSxDQUFDO0lBRUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLGtFQUFrRSxDQUNuRSxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxLQUFLLFVBQVUsVUFBVSxDQUN2QixNQUFjLEVBQ2QsRUFBOEI7SUFFOUIsTUFBTSxHQUFHLEdBQUcsTUFBTSw2QkFBc0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFja2FnZUluZm8sIHNvdXJjZVRvQXNzZW1ibHlIZWxwZXIgfSBmcm9tICdqc2lpJztcblxuaW1wb3J0ICogYXMgcmVmbGVjdCBmcm9tICcuLi9saWInO1xuXG50ZXN0KCdnZXQgZnVsbCBnaXRodWIgc291cmNlIGxvY2F0aW9uIGZvciBhIGNsYXNzIG9yIG1ldGhvZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gV0hFTlxuICBjb25zdCBhc3NlbWJseSA9IGF3YWl0IGxvYWRTb3VyY2UoXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcigpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkb1xuICAgICAgfVxuICAgIH1cbiAgYC50cmltKCksXG4gICAgKG9iaikgPT4gKG9iai5yZXBvc2l0b3J5LmRpcmVjdG9yeSA9ICdzb21lL3N1Yi9kaXInKSxcbiAgKTtcblxuICAvLyBUSEVOXG4gIGNvbnN0IGtsYXNzID0gYXNzZW1ibHkuZmluZFR5cGUoJ3Rlc3Rwa2cuRm9vJyk7XG4gIGV4cGVjdChrbGFzcy5pc0NsYXNzVHlwZSkudG9CZVRydXRoeSgpO1xuXG4gIGV4cGVjdChyZWZsZWN0LnJlcG9zaXRvcnlVcmwoa2xhc3MsICdtYWluJykpLnRvQmUoXG4gICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9ibG9iL21haW4vc29tZS9zdWIvZGlyL2luZGV4LnRzI0wxJyxcbiAgKTtcblxuICBleHBlY3QocmVmbGVjdC5yZXBvc2l0b3J5VXJsKGtsYXNzKSkudG9CZShcbiAgICAnaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2Jsb2IvbWFzdGVyL3NvbWUvc3ViL2Rpci9pbmRleC50cyNMMScsXG4gICk7XG59KTtcblxuYXN5bmMgZnVuY3Rpb24gbG9hZFNvdXJjZShcbiAgc291cmNlOiBzdHJpbmcsXG4gIGNiOiAob2JqOiBQYWNrYWdlSW5mbykgPT4gdm9pZCxcbik6IFByb21pc2U8cmVmbGVjdC5Bc3NlbWJseT4ge1xuICBjb25zdCBhc3MgPSBhd2FpdCBzb3VyY2VUb0Fzc2VtYmx5SGVscGVyKHNvdXJjZSwgY2IpO1xuICBjb25zdCB0cyA9IG5ldyByZWZsZWN0LlR5cGVTeXN0ZW0oKTtcbiAgcmV0dXJuIHRzLmFkZEFzc2VtYmx5KG5ldyByZWZsZWN0LkFzc2VtYmx5KHRzLCBhc3MpKTtcbn1cbiJdfQ==
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXBlbmRlbnQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluZGVwZW5kZW50LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FBa0M7QUFDbEMsaUNBQTRDO0FBRTVDLElBQUksQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtJQUN2RSxPQUFPO0lBQ1AsTUFBTSxRQUFRLEdBQUcsTUFBTSx5QkFBa0IsQ0FDdkM7Ozs7OztHQU1ELENBQUMsSUFBSSxFQUFFLEVBQ04sQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNOLElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtZQUN0QyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7U0FDM0M7SUFDSCxDQUFDLENBQ0YsQ0FBQztJQUVGLE9BQU87SUFDUCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvQyxnRUFBZ0UsQ0FDakUsQ0FBQztJQUVGLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN2QyxrRUFBa0UsQ0FDbkUsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcmVmbGVjdCBmcm9tICcuLi9saWInO1xuaW1wb3J0IHsgYXNzZW1ibHlGcm9tU291cmNlIH0gZnJvbSAnLi91dGlsJztcblxudGVzdCgnZ2V0IGZ1bGwgZ2l0aHViIHNvdXJjZSBsb2NhdGlvbiBmb3IgYSBjbGFzcyBvciBtZXRob2QnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgY29uc3QgYXNzZW1ibHkgPSBhd2FpdCBhc3NlbWJseUZyb21Tb3VyY2UoXG4gICAgYFxuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIGJhcigpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkb1xuICAgICAgfVxuICAgIH1cbiAgYC50cmltKCksXG4gICAgKG9iaikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvYmoucmVwb3NpdG9yeSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgb2JqLnJlcG9zaXRvcnkuZGlyZWN0b3J5ID0gJ3NvbWUvc3ViL2Rpcic7XG4gICAgICB9XG4gICAgfSxcbiAgKTtcblxuICAvLyBUSEVOXG4gIGNvbnN0IGtsYXNzID0gYXNzZW1ibHkuZmluZFR5cGUoJ3Rlc3Rwa2cuRm9vJyk7XG4gIGV4cGVjdChrbGFzcy5pc0NsYXNzVHlwZSkudG9CZVRydXRoeSgpO1xuXG4gIGV4cGVjdChyZWZsZWN0LnJlcG9zaXRvcnlVcmwoa2xhc3MsICdtYWluJykpLnRvQmUoXG4gICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9hd3MvanNpaS9ibG9iL21haW4vc29tZS9zdWIvZGlyL2luZGV4LnRzI0wxJyxcbiAgKTtcblxuICBleHBlY3QocmVmbGVjdC5yZXBvc2l0b3J5VXJsKGtsYXNzKSkudG9CZShcbiAgICAnaHR0cHM6Ly9naXRodWIuY29tL2F3cy9qc2lpL2Jsb2IvbWFzdGVyL3NvbWUvc3ViL2Rpci9pbmRleC50cyNMMScsXG4gICk7XG59KTtcbiJdfQ==
@@ -338,7 +338,14 @@ test('TypeSystem.methods', async () => {
338
338
  `);
339
339
  expect(ts.methods).toHaveLength(2);
340
340
  });
341
+ test('Assembly allTypes includes submodule types', async () => {
342
+ const asm = await util_1.assemblyFromSource({
343
+ 'index.ts': 'export * as submod from "./submod";',
344
+ 'submod.ts': `export class Foo {}`,
345
+ });
346
+ expect(asm.allTypes.map((t) => t.fqn)).toEqual(['testpkg.submod.Foo']);
347
+ });
341
348
  function resolveModuleDir(name) {
342
349
  return path.dirname(require.resolve(`${name}/package.json`));
343
350
  }
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1zeXN0ZW0udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInR5cGUtc3lzdGVtLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBbUM7QUFDbkMscUNBQXVDO0FBQ3ZDLDZCQUE2QjtBQUU3QixnQ0FBb0M7QUFDcEMsaUNBQThDO0FBRTlDLElBQUksT0FBbUIsQ0FBQztBQUV4QixTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDbkIsT0FBTyxHQUFHLElBQUksZ0JBQVUsRUFBRSxDQUFDO0lBQzNCLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtJQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNELE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRSxDQUNqRSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFFMUUsSUFBSSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRSxDQUN0RSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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QUN4QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUNwQyxNQUFNLEVBQUUsR0FBRyxNQUFNLDJCQUFvQixDQUFDOzs7Ozs7Ozs7R0FTckMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLGdCQUFnQixDQUFDLElBQVk7SUFDcEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNwZWMgZnJvbSAnQGpzaWkvc3BlYyc7XG5pbXBvcnQgeyBTdGFiaWxpdHkgfSBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IFR5cGVTeXN0ZW0gfSBmcm9tICcuLi9saWInO1xuaW1wb3J0IHsgdHlwZVN5c3RlbUZyb21Tb3VyY2UgfSBmcm9tICcuL3V0aWwnO1xuXG5sZXQgdHlwZXN5czogVHlwZVN5c3RlbTtcblxuYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgdHlwZXN5cyA9IG5ldyBUeXBlU3lzdGVtKCk7XG4gIGF3YWl0IHR5cGVzeXMubG9hZE1vZHVsZShyZXNvbHZlTW9kdWxlRGlyKCdqc2lpLWNhbGMnKSk7XG59KTtcblxudGVzdCgnVHlwZVN5c3RlbS5oYXNBc3NlbWJseScsICgpID0+IHtcbiAgZXhwZWN0KHR5cGVzeXMuaW5jbHVkZXNBc3NlbWJseSgnQGZvby9iYXInKSkudG9CZUZhbHN5KCk7XG4gIGV4cGVjdCh0eXBlc3lzLmluY2x1ZGVzQXNzZW1ibHkoJ2pzaWktY2FsYycpKS50b0JlVHJ1dGh5KCk7XG4gIGV4cGVjdCh0eXBlc3lzLmluY2x1ZGVzQXNzZW1ibHkoJ0BzY29wZS9qc2lpLWNhbGMtbGliJykpLnRvQmVUcnV0aHkoKTtcbn0pO1xuXG50ZXN0KCdUeXBlU3lzdGVtLmFzc2VtYmxpZXMgbGlzdHMgYWxsIHRoZSBsb2FkZWQgYXNzZW1ibGllcycsICgpID0+XG4gIGV4cGVjdCh0eXBlc3lzLmFzc2VtYmxpZXMubWFwKChhKSA9PiBhLm5hbWUpLnNvcnQoKSkudG9NYXRjaFNuYXBzaG90KCkpO1xuXG50ZXN0KCdUeXBlU3lzdGVtLmNsYXNzZXMgbGlzdHMgYWxsIHRoZSBjbGFzc2VzIGluIHRoZSB0eXBlc3lzdGVtJywgKCkgPT5cbiAgZXhwZWN0KHR5cGVzeXMuY2xhc3Nlcy5tYXAoKGMpID0+IGMuZnFuKS5zb3J0KCkpLnRvTWF0Y2hTbmFwc2hvdCgpKTtcblxudGVzdCgnZmluZENsYXNzJywgKCkgPT4ge1xuICBjb25zdCBjYWxjID0gdHlwZXN5cy5maW5kQ2xhc3MoJ2pzaWktY2FsYy5DYWxjdWxhdG9yJyk7XG4gIGNvbnN0IGFjdHVhbCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIE9iamVjdC52YWx1ZXMoY2FsYy5nZXRNZXRob2RzKC8qIGluaGVyaXRlZCAqLyB0cnVlKSkuZm9yRWFjaCgobWV0aG9kKSA9PiB7XG4gICAgYWN0dWFsLnB1c2goYCR7bWV0aG9kLm5hbWV9IGZyb20gJHttZXRob2QucGFyZW50VHlwZS5uYW1lfWApO1xuICB9KTtcblxuICBleHBlY3QoYWN0dWFsLmpvaW4oJ1xcbicpKS50b01hdGNoU25hcHNob3QoKTtcbn0pO1xuXG50ZXN0KCdcInJvb3RzXCIgaXMgYSBsaXN0IG9mIHRoZSBkaXJlY3RseSBsb2FkZWQgYXNzZW1ibGllcycsIGFzeW5jICgpID0+IHtcbiAgZXhwZWN0KHR5cGVzeXMucm9vdHMubGVuZ3RoKS50b0JlKDEpO1xuICBleHBlY3QodHlwZXN5cy5yb290c1swXSkudG9CZSh0eXBlc3lzLmZpbmRBc3NlbWJseSgnanNpaS1jYWxjJykpO1xuXG4gIC8vIG5vdyBsb2FkIGFub3RoZXIgYXNzZW1ibGl5IGRpcmVjdGx5XG4gIGF3YWl0IHR5cGVzeXMubG9hZChyZXNvbHZlTW9kdWxlRGlyKCdAc2NvcGUvanNpaS1jYWxjLWxpYicpKTtcbiAgcmV0dXJuIGV4cGVjdCh0eXBlc3lzLnJvb3RzLmxlbmd0aCkudG9CZSgyKTtcbn0pO1xuXG5kZXNjcmliZSgnVHlwZScsICgpID0+IHtcbiAgdGVzdCgnLmlzQ2xhc3NUeXBlJywgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgY2xhenogPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BbGxUeXBlcycpO1xuICAgIGNvbnN0IGlmYWNlID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuSVB1YmxpY0ludGVyZmFjZScpO1xuICAgIGNvbnN0IGVudW10ID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuQWxsVHlwZXNFbnVtJyk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGNsYXp6LmlzQ2xhc3NUeXBlKCkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoaWZhY2UuaXNDbGFzc1R5cGUoKSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KGVudW10LmlzQ2xhc3NUeXBlKCkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICB0ZXN0KCcuaXNEYXRhVHlwZScsICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGNsYXp6ID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuQWxsVHlwZXMnKTtcbiAgICBjb25zdCBpZmFjZSA9IHR5cGVzeXMuZmluZEZxbihcbiAgICAgICdqc2lpLWNhbGMuSUludGVyZmFjZVRoYXRTaG91bGROb3RCZUFEYXRhVHlwZScsXG4gICAgKTtcbiAgICBjb25zdCBkYXRhdCA9IHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLkNhbGN1bGF0b3JQcm9wcycpO1xuICAgIGNvbnN0IGVudW10ID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuQWxsVHlwZXNFbnVtJyk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGNsYXp6LmlzRGF0YVR5cGUoKSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KGlmYWNlLmlzRGF0YVR5cGUoKSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KGRhdGF0LmlzRGF0YVR5cGUoKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChlbnVtdC5pc0RhdGFUeXBlKCkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICB0ZXN0KCcuaXNJbnRlcmZhY2VUeXBlJywgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgY2xhenogPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BbGxUeXBlcycpO1xuICAgIGNvbnN0IGlmYWNlID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuSVB1YmxpY0ludGVyZmFjZScpO1xuICAgIGNvbnN0IGVudW10ID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuQWxsVHlwZXNFbnVtJyk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGNsYXp6LmlzSW50ZXJmYWNlVHlwZSgpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QoaWZhY2UuaXNJbnRlcmZhY2VUeXBlKCkpLnRvQmVUcnV0aHkoKTtcbiAgICBleHBlY3QoZW51bXQuaXNJbnRlcmZhY2VUeXBlKCkpLnRvQmVGYWxzeSgpO1xuICB9KTtcblxuICB0ZXN0KCcuaXNFbnVtVHlwZScsICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IGNsYXp6ID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuQWxsVHlwZXMnKTtcbiAgICBjb25zdCBpZmFjZSA9IHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLklQdWJsaWNJbnRlcmZhY2UnKTtcbiAgICBjb25zdCBlbnVtdCA9IHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLkFsbFR5cGVzRW51bScpO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChjbGF6ei5pc0VudW1UeXBlKCkpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdChpZmFjZS5pc0VudW1UeXBlKCkpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdChlbnVtdC5pc0VudW1UeXBlKCkpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJy5leHRlbmRzKGJhc2UpJywgKCkgPT4ge1xuICAgIHRlc3QoJ3dpdGggaW50ZXJmYWNlcycsICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBiYXNlID0gdHlwZXN5cy5maW5kRnFuKFxuICAgICAgICAnQHNjb3BlL2pzaWktY2FsYy1iYXNlLW9mLWJhc2UuVmVyeUJhc2VQcm9wcycsXG4gICAgICApO1xuICAgICAgY29uc3QgY2xhenogPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5JbXBsaWN0QmFzZU9mQmFzZScpO1xuICAgICAgY29uc3QgZW51bXQgPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BbGxUeXBlc0VudW0nKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGJhc2UuZXh0ZW5kcyhiYXNlKSkudG9CZVRydXRoeSgpO1xuICAgICAgZXhwZWN0KGNsYXp6LmV4dGVuZHMoY2xhenopKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QoY2xhenouZXh0ZW5kcyhiYXNlKSkudG9CZVRydXRoeSgpO1xuICAgICAgZXhwZWN0KGVudW10LmV4dGVuZHMoYmFzZSkpLnRvQmVGYWxzeSgpO1xuICAgICAgZXhwZWN0KGJhc2UuZXh0ZW5kcyhlbnVtdCkpLnRvQmVGYWxzeSgpO1xuICAgICAgZXhwZWN0KGJhc2UuZXh0ZW5kcyhjbGF6eikpLnRvQmVGYWxzeSgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2l0aCBhIGNsYXNzIGFuZCBhbiBpbnRlcmZhY2UnLCAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgaWZhY2UgPSB0eXBlc3lzLmZpbmRGcW4oXG4gICAgICAgICdqc2lpLWNhbGMuSUludGVyZmFjZUltcGxlbWVudGVkQnlBYnN0cmFjdENsYXNzJyxcbiAgICAgICk7XG4gICAgICBjb25zdCBjbGF6eiA9IHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLkFic3RyYWN0Q2xhc3MnKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGNsYXp6LmV4dGVuZHMoaWZhY2UpKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIHR3byBjbGFzc2VzJywgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IGJhc2UgPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BYnN0cmFjdENsYXNzQmFzZScpO1xuICAgICAgY29uc3QgY2xhenogPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BYnN0cmFjdENsYXNzJyk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChjbGF6ei5leHRlbmRzKGJhc2UpKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCcuYWxsSW1wbGVtZW50YXRpb25zJywgKCkgPT4ge1xuICAgIHRlc3QoJ3dpdGggYW4gaW50ZXJmYWNlJywgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IGJhc2UgPSB0eXBlc3lzLmZpbmRGcW4oXG4gICAgICAgICdqc2lpLWNhbGMuSUludGVyZmFjZUltcGxlbWVudGVkQnlBYnN0cmFjdENsYXNzJyxcbiAgICAgICk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChiYXNlLmFsbEltcGxlbWVudGF0aW9ucykudG9FcXVhbChbXG4gICAgICAgIHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLkFic3RyYWN0Q2xhc3MnKSxcbiAgICAgICAgYmFzZSxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2l0aCBhbiBlbnVtJywgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IGVudW10ID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuQWxsVHlwZXNFbnVtJyk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChlbnVtdC5hbGxJbXBsZW1lbnRhdGlvbnMpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG50ZXN0KCdUaHJlZSBJbmhlcml0YW5jZSBMZXZlbHMnLCAoKSA9PiB7XG4gIGNvbnN0IGlmYWNlID0gdHlwZXN5cy5maW5kSW50ZXJmYWNlKFxuICAgICdAc2NvcGUvanNpaS1jYWxjLWxpYi5JVGhyZWVMZXZlbHNJbnRlcmZhY2UnLFxuICApO1xuICBjb25zdCBtZXRob2RuYW1lcyA9IGlmYWNlLmFsbE1ldGhvZHMubWFwKChtKSA9PiBtLm5hbWUpO1xuICBtZXRob2RuYW1lcy5zb3J0KCk7XG4gIGV4cGVjdChtZXRob2RuYW1lcykudG9FcXVhbChbJ2JhcicsICdiYXonLCAnZm9vJ10pO1xufSk7XG5cbmRlc2NyaWJlKCdAZGVwcmVjYXRlZCcsICgpID0+IHtcbiAgdGVzdCgnY2FuIGJlIHJlYWQgb24gYW4gaXRlbScsICgpID0+IHtcbiAgICBjb25zdCBrbGFzcyA9IHR5cGVzeXMuZmluZENsYXNzKCdqc2lpLWNhbGMuT2xkJyk7XG4gICAgZXhwZWN0KGtsYXNzLmRvY3MuZGVwcmVjYXRlZCkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChrbGFzcy5kb2NzLnN0YWJpbGl0eSkudG9CZShzcGVjLlN0YWJpbGl0eS5EZXByZWNhdGVkKTtcbiAgfSk7XG5cbiAgdGVzdCgnaXMgaW5oZXJpdGVkIGZyb20gY2xhc3MnLCAoKSA9PiB7XG4gICAgY29uc3Qga2xhc3MgPSB0eXBlc3lzLmZpbmRDbGFzcygnanNpaS1jYWxjLk9sZCcpO1xuICAgIGNvbnN0IG1ldGhvZCA9IGtsYXNzLmdldE1ldGhvZHMoKS5kb0FUaGluZztcbiAgICBleHBlY3QobWV0aG9kLmRvY3MuZGVwcmVjYXRlZCkudG9CZVRydXRoeSgpO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIFRoaXMgdGVzdCBpcyBhY3R1YWxseSB0ZXN0aW5nIHRoZSBjb21iaW5hdGlvbiBvZiBganNpaWAsIGBqc2lpLWNhbGNgIGFuZCBganNpaS1yZWZsZWN0YC5cbiAqL1xudGVzdCgnU3VibW9kdWxlcyBjYW4gaGF2ZSBhIFJFQURNRScsICgpID0+IHtcbiAgY29uc3QganNpaUNhbGMgPSB0eXBlc3lzLmZpbmRBc3NlbWJseSgnanNpaS1jYWxjJyk7XG5cbiAgY29uc3Qgc3VibW9kdWxlID0ganNpaUNhbGMuc3VibW9kdWxlcy5maW5kKFxuICAgIChtKSA9PiBtLmZxbiA9PT0gJ2pzaWktY2FsYy5zdWJtb2R1bGUnLFxuICApO1xuICBjb25zdCBpc29sYXRlZCA9IHN1Ym1vZHVsZT8uc3VibW9kdWxlcy5maW5kKFxuICAgIChtKSA9PiBtLmZxbiA9PT0gJ2pzaWktY2FsYy5zdWJtb2R1bGUuaXNvbGF0ZWQnLFxuICApO1xuXG4gIGV4cGVjdChzdWJtb2R1bGU/LnJlYWRtZT8ubWFya2Rvd24pLnRvTWF0Y2goXG4gICAgL1RoaXMgaXMgdGhlIHJlYWRtZS4qanNpaS1jYWxjLnN1Ym1vZHVsZS8sXG4gICk7XG4gIGV4cGVjdChpc29sYXRlZD8ucmVhZG1lPy5tYXJrZG93bikudG9NYXRjaChcbiAgICAvVGhpcyBpcyB0aGUgcmVhZG1lLipqc2lpLWNhbGMuc3VibW9kdWxlLmlzb2xhdGVkLyxcbiAgKTtcbn0pO1xuXG50ZXN0KCdvdmVycmlkZGVuIG1lbWJlciBrbm93cyBhYm91dCBib3RoIHBhcmVudCB0eXBlcycsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgdHMgPSBhd2FpdCB0eXBlU3lzdGVtRnJvbVNvdXJjZShgXG4gICAgZXhwb3J0IGNsYXNzIEZvbyB7XG4gICAgICBwdWJsaWMgYmFyKCkge1xuICAgICAgICBBcnJheS5pc0FycmF5KDMpO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgYm9vKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnQgY2xhc3MgU3ViRm9vIGV4dGVuZHMgRm9vIHtcbiAgICAgIHB1YmxpYyBib28oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIGApO1xuXG4gIGNvbnN0IHN1cGVyVHlwZSA9IHRzLmZpbmRDbGFzcygndGVzdHBrZy5Gb28nKTtcbiAgY29uc3Qgc3ViVHlwZSA9IHRzLmZpbmRDbGFzcygndGVzdHBrZy5TdWJGb28nKTtcbiAgY29uc3QgZm9vTWV0aG9kID0gc3ViVHlwZS5hbGxNZXRob2RzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gJ2JhcicpITtcbiAgY29uc3QgYm9vTWV0aG9kID0gc3ViVHlwZS5hbGxNZXRob2RzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gJ2JvbycpITtcblxuICBleHBlY3QoZm9vTWV0aG9kLnBhcmVudFR5cGUpLnRvQmUoc3ViVHlwZSk7XG4gIGV4cGVjdChmb29NZXRob2QuZGVmaW5pbmdUeXBlKS50b0JlKHN1cGVyVHlwZSk7XG5cbiAgZXhwZWN0KGJvb01ldGhvZC5wYXJlbnRUeXBlKS50b0JlKHN1YlR5cGUpO1xuICBleHBlY3QoYm9vTWV0aG9kLmRlZmluaW5nVHlwZSkudG9CZShzdWJUeXBlKTtcbiAgZXhwZWN0KGJvb01ldGhvZC5vdmVycmlkZXMpLnRvQmUoc3VwZXJUeXBlKTtcbn0pO1xuXG5kZXNjcmliZSgnU3RhYmlsaXR5JywgKCkgPT4ge1xuICB0ZXN0KCdjYW4gYmUgcmVhZCBvbiBhbiBpdGVtJywgKCkgPT4ge1xuICAgIGNvbnN0IGtsYXNzID0gdHlwZXN5cy5maW5kQ2xhc3MoJ2pzaWktY2FsYy5Eb2N1bWVudGVkQ2xhc3MnKTtcbiAgICBleHBlY3Qoa2xhc3MuZG9jcy5zdGFiaWxpdHkpLnRvQmUoc3BlYy5TdGFiaWxpdHkuU3RhYmxlKTtcbiAgfSk7XG5cbiAgdGVzdCgnaXMgaW5oZXJpdGVkIGZyb20gY2xhc3MnLCAoKSA9PiB7XG4gICAgY29uc3Qga2xhc3MgPSB0eXBlc3lzLmZpbmRDbGFzcygnanNpaS1jYWxjLkRvY3VtZW50ZWRDbGFzcycpO1xuICAgIGNvbnN0IG1ldGhvZCA9IGtsYXNzLmdldE1ldGhvZHMoKS5ncmVldDtcbiAgICBleHBlY3QobWV0aG9kLmRvY3Muc3RhYmlsaXR5KS50b0JlKHNwZWMuU3RhYmlsaXR5LlN0YWJsZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NhbiBiZSBvdmVycmlkZGVuIGZyb20gY2xhc3MnLCAoKSA9PiB7XG4gICAgY29uc3Qga2xhc3MgPSB0eXBlc3lzLmZpbmRDbGFzcygnanNpaS1jYWxjLkRvY3VtZW50ZWRDbGFzcycpO1xuICAgIGNvbnN0IG1ldGhvZCA9IGtsYXNzLmdldE1ldGhvZHMoKS5ob2xhO1xuICAgIGV4cGVjdChtZXRob2QuZG9jcy5zdGFiaWxpdHkpLnRvQmUoc3BlYy5TdGFiaWxpdHkuRXhwZXJpbWVudGFsKTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGRlc2NyaWJlKCdsb3dlc3Qgc3RhYmlsaXR5IGd1YXJhbnRlZSBpcyBhZHZlcnRpc2VkJywgKCkgPT4ge1xuICAgIHRlc3QoJ3doZW4gc3ViY2xhc3MgaXMgZXhwZXJpbWVudGFsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHMgPSBhd2FpdCB0eXBlU3lzdGVtRnJvbVNvdXJjZShgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAc3RhYmxlXG4gICAgICAgICAqL1xuICAgICAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoMyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHVibGljIGJhcigpIHtcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoMyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgICAgICovXG4gICAgICAgIGV4cG9ydCBjbGFzcyBTdWJGb28gZXh0ZW5kcyBGb28ge1xuICAgICAgICB9XG4gICAgICBgKTtcbiAgICAgIGNvbnN0IGNsYXNzVHlwZSA9IHRzLmZpbmRDbGFzcygndGVzdHBrZy5TdWJGb28nKTtcbiAgICAgIGNvbnN0IGluaXRpYWxpemVyID0gY2xhc3NUeXBlLmluaXRpYWxpemVyITtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGNsYXNzVHlwZS5hbGxNZXRob2RzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gJ2JhcicpITtcblxuICAgICAgZXhwZWN0KGluaXRpYWxpemVyLmRvY3Muc3RhYmlsaXR5KS50b0VxdWFsKFN0YWJpbGl0eS5FeHBlcmltZW50YWwpO1xuICAgICAgZXhwZWN0KG1ldGhvZC5kb2NzLnN0YWJpbGl0eSkudG9FcXVhbChTdGFiaWxpdHkuRXhwZXJpbWVudGFsKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3doZW4gbWV0aG9kIGlzIGV4cGVyaW1lbnRhbCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRzID0gYXdhaXQgdHlwZVN5c3RlbUZyb21Tb3VyY2UoYFxuICAgICAgICAvKipcbiAgICAgICAgICogQHN0YWJsZVxuICAgICAgICAgKi9cbiAgICAgICAgZXhwb3J0IGNsYXNzIEZvbyB7XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAgICAgICAqL1xuICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSgzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICAgICAgICovXG4gICAgICAgICAgcHVibGljIGJhcigpIHtcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoMyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBzdGFibGVcbiAgICAgICAgICovXG4gICAgICAgIGV4cG9ydCBjbGFzcyBTdWJGb28gZXh0ZW5kcyBGb28ge1xuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgY29uc3QgY2xhc3NUeXBlID0gdHMuZmluZENsYXNzKCd0ZXN0cGtnLlN1YkZvbycpO1xuICAgICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBjbGFzc1R5cGUuaW5pdGlhbGl6ZXIhO1xuICAgICAgY29uc3QgbWV0aG9kID0gY2xhc3NUeXBlLmFsbE1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAnYmFyJykhO1xuXG4gICAgICBleHBlY3QoaW5pdGlhbGl6ZXIuZG9jcy5zdGFiaWxpdHkpLnRvRXF1YWwoU3RhYmlsaXR5LkV4cGVyaW1lbnRhbCk7XG4gICAgICBleHBlY3QobWV0aG9kLmRvY3Muc3RhYmlsaXR5KS50b0VxdWFsKFN0YWJpbGl0eS5FeHBlcmltZW50YWwpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2hlbiBtZXRob2QgaXMgZXhwbGljaXRseSBtYXJrZWQgc3RhYmxlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHMgPSBhd2FpdCB0eXBlU3lzdGVtRnJvbVNvdXJjZShgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAc3RhYmxlXG4gICAgICAgICAqL1xuICAgICAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBAc3RhYmxlXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KDMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEBzdGFibGVcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBwdWJsaWMgYmFyKCkge1xuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSgzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAgICAgKi9cbiAgICAgICAgZXhwb3J0IGNsYXNzIFN1YkZvbyBleHRlbmRzIEZvbyB7XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBjb25zdCBjbGFzc1R5cGUgPSB0cy5maW5kQ2xhc3MoJ3Rlc3Rwa2cuU3ViRm9vJyk7XG4gICAgICBjb25zdCBpbml0aWFsaXplciA9IGNsYXNzVHlwZS5pbml0aWFsaXplciE7XG4gICAgICBjb25zdCBtZXRob2QgPSBjbGFzc1R5cGUuYWxsTWV0aG9kcy5maW5kKChtKSA9PiBtLm5hbWUgPT09ICdiYXInKSE7XG5cbiAgICAgIGV4cGVjdChpbml0aWFsaXplci5kb2NzLnN0YWJpbGl0eSkudG9FcXVhbChTdGFiaWxpdHkuRXhwZXJpbWVudGFsKTtcbiAgICAgIGV4cGVjdChtZXRob2QuZG9jcy5zdGFiaWxpdHkpLnRvRXF1YWwoU3RhYmlsaXR5LkV4cGVyaW1lbnRhbCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdleHRlcm5hbCBzdGFiaWxpdHknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0cyA9IGF3YWl0IHR5cGVTeXN0ZW1Gcm9tU291cmNlKGBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBzdGFiaWxpdHkgZXh0ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgICAgIHB1YmxpYyBiYXIoKSB7XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KDMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAc3RhYmxlXG4gICAgICAgICAqL1xuICAgICAgICBleHBvcnQgY2xhc3MgU3ViRm9vIGV4dGVuZHMgRm9vIHtcbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGNvbnN0IGNsYXNzVHlwZSA9IHRzLmZpbmRDbGFzcygndGVzdHBrZy5TdWJGb28nKTtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGNsYXNzVHlwZS5hbGxNZXRob2RzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gJ2JhcicpITtcblxuICAgICAgZXhwZWN0KG1ldGhvZC5kb2NzLnN0YWJpbGl0eSkudG9FcXVhbChTdGFiaWxpdHkuRXh0ZXJuYWwpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG50ZXN0KCdUeXBlU3lzdGVtLnByb3BlcnRpZXMnLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHRzID0gYXdhaXQgdHlwZVN5c3RlbUZyb21Tb3VyY2UoYFxuICBleHBvcnQgbmFtZXNwYWNlIHN1Ym1vZHVsZSB7XG4gICAgZXhwb3J0IGNsYXNzIEZvbyB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGVzdCA9ICdURVNUJztcbiAgICB9XG4gICAgZXhwb3J0IGludGVyZmFjZSBCYXIge1xuICAgICAgcmVhZG9ubHkgYmF6OiBudW1iZXI7XG4gICAgfVxuICB9XG4gIGApO1xuICBleHBlY3QodHMucHJvcGVydGllcykudG9IYXZlTGVuZ3RoKDIpO1xufSk7XG5cbnRlc3QoJ1R5cGVTeXN0ZW0ubWV0aG9kcycsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgdHMgPSBhd2FpdCB0eXBlU3lzdGVtRnJvbVNvdXJjZShgXG4gIGV4cG9ydCBuYW1lc3BhY2Ugc3VibW9kdWxlIHtcbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyBtZXRob2QoKTogdm9pZCB7fVxuICAgIH1cbiAgICBleHBvcnQgaW50ZXJmYWNlIElCYXIge1xuICAgICAgYmF6KCk6IG51bWJlcjtcbiAgICB9XG4gIH1cbiAgYCk7XG4gIGV4cGVjdCh0cy5tZXRob2RzKS50b0hhdmVMZW5ndGgoMik7XG59KTtcblxuZnVuY3Rpb24gcmVzb2x2ZU1vZHVsZURpcihuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoYCR7bmFtZX0vcGFja2FnZS5qc29uYCkpO1xufVxuIl19
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1zeXN0ZW0udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInR5cGUtc3lzdGVtLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBbUM7QUFDbkMscUNBQXVDO0FBQ3ZDLDZCQUE2QjtBQUU3QixnQ0FBb0M7QUFDcEMsaUNBQWtFO0FBRWxFLElBQUksT0FBbUIsQ0FBQztBQUV4QixTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDbkIsT0FBTyxHQUFHLElBQUksZ0JBQVUsRUFBRSxDQUFDO0lBQzNCLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtJQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNELE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRSxDQUNqRSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFFMUUsSUFBSSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRSxDQUN0RSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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QUN4QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUNwQyxNQUFNLEVBQUUsR0FBRyxNQUFNLDJCQUFvQixDQUFDOzs7Ozs7Ozs7R0FTckMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDNUQsTUFBTSxHQUFHLEdBQUcsTUFBTSx5QkFBa0IsQ0FBQztRQUNuQyxVQUFVLEVBQUUscUNBQXFDO1FBQ2pELFdBQVcsRUFBRSxxQkFBcUI7S0FDbkMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDekUsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLGdCQUFnQixDQUFDLElBQVk7SUFDcEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNwZWMgZnJvbSAnQGpzaWkvc3BlYyc7XG5pbXBvcnQgeyBTdGFiaWxpdHkgfSBmcm9tICdAanNpaS9zcGVjJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IFR5cGVTeXN0ZW0gfSBmcm9tICcuLi9saWInO1xuaW1wb3J0IHsgdHlwZVN5c3RlbUZyb21Tb3VyY2UsIGFzc2VtYmx5RnJvbVNvdXJjZSB9IGZyb20gJy4vdXRpbCc7XG5cbmxldCB0eXBlc3lzOiBUeXBlU3lzdGVtO1xuXG5iZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICB0eXBlc3lzID0gbmV3IFR5cGVTeXN0ZW0oKTtcbiAgYXdhaXQgdHlwZXN5cy5sb2FkTW9kdWxlKHJlc29sdmVNb2R1bGVEaXIoJ2pzaWktY2FsYycpKTtcbn0pO1xuXG50ZXN0KCdUeXBlU3lzdGVtLmhhc0Fzc2VtYmx5JywgKCkgPT4ge1xuICBleHBlY3QodHlwZXN5cy5pbmNsdWRlc0Fzc2VtYmx5KCdAZm9vL2JhcicpKS50b0JlRmFsc3koKTtcbiAgZXhwZWN0KHR5cGVzeXMuaW5jbHVkZXNBc3NlbWJseSgnanNpaS1jYWxjJykpLnRvQmVUcnV0aHkoKTtcbiAgZXhwZWN0KHR5cGVzeXMuaW5jbHVkZXNBc3NlbWJseSgnQHNjb3BlL2pzaWktY2FsYy1saWInKSkudG9CZVRydXRoeSgpO1xufSk7XG5cbnRlc3QoJ1R5cGVTeXN0ZW0uYXNzZW1ibGllcyBsaXN0cyBhbGwgdGhlIGxvYWRlZCBhc3NlbWJsaWVzJywgKCkgPT5cbiAgZXhwZWN0KHR5cGVzeXMuYXNzZW1ibGllcy5tYXAoKGEpID0+IGEubmFtZSkuc29ydCgpKS50b01hdGNoU25hcHNob3QoKSk7XG5cbnRlc3QoJ1R5cGVTeXN0ZW0uY2xhc3NlcyBsaXN0cyBhbGwgdGhlIGNsYXNzZXMgaW4gdGhlIHR5cGVzeXN0ZW0nLCAoKSA9PlxuICBleHBlY3QodHlwZXN5cy5jbGFzc2VzLm1hcCgoYykgPT4gYy5mcW4pLnNvcnQoKSkudG9NYXRjaFNuYXBzaG90KCkpO1xuXG50ZXN0KCdmaW5kQ2xhc3MnLCAoKSA9PiB7XG4gIGNvbnN0IGNhbGMgPSB0eXBlc3lzLmZpbmRDbGFzcygnanNpaS1jYWxjLkNhbGN1bGF0b3InKTtcbiAgY29uc3QgYWN0dWFsID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgT2JqZWN0LnZhbHVlcyhjYWxjLmdldE1ldGhvZHMoLyogaW5oZXJpdGVkICovIHRydWUpKS5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICBhY3R1YWwucHVzaChgJHttZXRob2QubmFtZX0gZnJvbSAke21ldGhvZC5wYXJlbnRUeXBlLm5hbWV9YCk7XG4gIH0pO1xuXG4gIGV4cGVjdChhY3R1YWwuam9pbignXFxuJykpLnRvTWF0Y2hTbmFwc2hvdCgpO1xufSk7XG5cbnRlc3QoJ1wicm9vdHNcIiBpcyBhIGxpc3Qgb2YgdGhlIGRpcmVjdGx5IGxvYWRlZCBhc3NlbWJsaWVzJywgYXN5bmMgKCkgPT4ge1xuICBleHBlY3QodHlwZXN5cy5yb290cy5sZW5ndGgpLnRvQmUoMSk7XG4gIGV4cGVjdCh0eXBlc3lzLnJvb3RzWzBdKS50b0JlKHR5cGVzeXMuZmluZEFzc2VtYmx5KCdqc2lpLWNhbGMnKSk7XG5cbiAgLy8gbm93IGxvYWQgYW5vdGhlciBhc3NlbWJsaXkgZGlyZWN0bHlcbiAgYXdhaXQgdHlwZXN5cy5sb2FkKHJlc29sdmVNb2R1bGVEaXIoJ0BzY29wZS9qc2lpLWNhbGMtbGliJykpO1xuICByZXR1cm4gZXhwZWN0KHR5cGVzeXMucm9vdHMubGVuZ3RoKS50b0JlKDIpO1xufSk7XG5cbmRlc2NyaWJlKCdUeXBlJywgKCkgPT4ge1xuICB0ZXN0KCcuaXNDbGFzc1R5cGUnLCAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBjbGF6eiA9IHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLkFsbFR5cGVzJyk7XG4gICAgY29uc3QgaWZhY2UgPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5JUHVibGljSW50ZXJmYWNlJyk7XG4gICAgY29uc3QgZW51bXQgPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BbGxUeXBlc0VudW0nKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoY2xhenouaXNDbGFzc1R5cGUoKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChpZmFjZS5pc0NsYXNzVHlwZSgpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QoZW51bXQuaXNDbGFzc1R5cGUoKSkudG9CZUZhbHN5KCk7XG4gIH0pO1xuXG4gIHRlc3QoJy5pc0RhdGFUeXBlJywgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgY2xhenogPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BbGxUeXBlcycpO1xuICAgIGNvbnN0IGlmYWNlID0gdHlwZXN5cy5maW5kRnFuKFxuICAgICAgJ2pzaWktY2FsYy5JSW50ZXJmYWNlVGhhdFNob3VsZE5vdEJlQURhdGFUeXBlJyxcbiAgICApO1xuICAgIGNvbnN0IGRhdGF0ID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuQ2FsY3VsYXRvclByb3BzJyk7XG4gICAgY29uc3QgZW51bXQgPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BbGxUeXBlc0VudW0nKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoY2xhenouaXNEYXRhVHlwZSgpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QoaWZhY2UuaXNEYXRhVHlwZSgpKS50b0JlRmFsc3koKTtcbiAgICBleHBlY3QoZGF0YXQuaXNEYXRhVHlwZSgpKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGVudW10LmlzRGF0YVR5cGUoKSkudG9CZUZhbHN5KCk7XG4gIH0pO1xuXG4gIHRlc3QoJy5pc0ludGVyZmFjZVR5cGUnLCAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCBjbGF6eiA9IHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLkFsbFR5cGVzJyk7XG4gICAgY29uc3QgaWZhY2UgPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5JUHVibGljSW50ZXJmYWNlJyk7XG4gICAgY29uc3QgZW51bXQgPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BbGxUeXBlc0VudW0nKTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoY2xhenouaXNJbnRlcmZhY2VUeXBlKCkpLnRvQmVGYWxzeSgpO1xuICAgIGV4cGVjdChpZmFjZS5pc0ludGVyZmFjZVR5cGUoKSkudG9CZVRydXRoeSgpO1xuICAgIGV4cGVjdChlbnVtdC5pc0ludGVyZmFjZVR5cGUoKSkudG9CZUZhbHN5KCk7XG4gIH0pO1xuXG4gIHRlc3QoJy5pc0VudW1UeXBlJywgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgY2xhenogPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BbGxUeXBlcycpO1xuICAgIGNvbnN0IGlmYWNlID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuSVB1YmxpY0ludGVyZmFjZScpO1xuICAgIGNvbnN0IGVudW10ID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuQWxsVHlwZXNFbnVtJyk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGNsYXp6LmlzRW51bVR5cGUoKSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KGlmYWNlLmlzRW51bVR5cGUoKSkudG9CZUZhbHN5KCk7XG4gICAgZXhwZWN0KGVudW10LmlzRW51bVR5cGUoKSkudG9CZVRydXRoeSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnLmV4dGVuZHMoYmFzZSknLCAoKSA9PiB7XG4gICAgdGVzdCgnd2l0aCBpbnRlcmZhY2VzJywgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IGJhc2UgPSB0eXBlc3lzLmZpbmRGcW4oXG4gICAgICAgICdAc2NvcGUvanNpaS1jYWxjLWJhc2Utb2YtYmFzZS5WZXJ5QmFzZVByb3BzJyxcbiAgICAgICk7XG4gICAgICBjb25zdCBjbGF6eiA9IHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLkltcGxpY3RCYXNlT2ZCYXNlJyk7XG4gICAgICBjb25zdCBlbnVtdCA9IHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLkFsbFR5cGVzRW51bScpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYmFzZS5leHRlbmRzKGJhc2UpKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QoY2xhenouZXh0ZW5kcyhjbGF6eikpLnRvQmVUcnV0aHkoKTtcbiAgICAgIGV4cGVjdChjbGF6ei5leHRlbmRzKGJhc2UpKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QoZW51bXQuZXh0ZW5kcyhiYXNlKSkudG9CZUZhbHN5KCk7XG4gICAgICBleHBlY3QoYmFzZS5leHRlbmRzKGVudW10KSkudG9CZUZhbHN5KCk7XG4gICAgICBleHBlY3QoYmFzZS5leHRlbmRzKGNsYXp6KSkudG9CZUZhbHN5KCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIGEgY2xhc3MgYW5kIGFuIGludGVyZmFjZScsICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBpZmFjZSA9IHR5cGVzeXMuZmluZEZxbihcbiAgICAgICAgJ2pzaWktY2FsYy5JSW50ZXJmYWNlSW1wbGVtZW50ZWRCeUFic3RyYWN0Q2xhc3MnLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNsYXp6ID0gdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuQWJzdHJhY3RDbGFzcycpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoY2xhenouZXh0ZW5kcyhpZmFjZSkpLnRvQmVUcnV0aHkoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggdHdvIGNsYXNzZXMnLCAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgYmFzZSA9IHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLkFic3RyYWN0Q2xhc3NCYXNlJyk7XG4gICAgICBjb25zdCBjbGF6eiA9IHR5cGVzeXMuZmluZEZxbignanNpaS1jYWxjLkFic3RyYWN0Q2xhc3MnKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGNsYXp6LmV4dGVuZHMoYmFzZSkpLnRvQmVUcnV0aHkoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJy5hbGxJbXBsZW1lbnRhdGlvbnMnLCAoKSA9PiB7XG4gICAgdGVzdCgnd2l0aCBhbiBpbnRlcmZhY2UnLCAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgYmFzZSA9IHR5cGVzeXMuZmluZEZxbihcbiAgICAgICAgJ2pzaWktY2FsYy5JSW50ZXJmYWNlSW1wbGVtZW50ZWRCeUFic3RyYWN0Q2xhc3MnLFxuICAgICAgKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGJhc2UuYWxsSW1wbGVtZW50YXRpb25zKS50b0VxdWFsKFtcbiAgICAgICAgdHlwZXN5cy5maW5kRnFuKCdqc2lpLWNhbGMuQWJzdHJhY3RDbGFzcycpLFxuICAgICAgICBiYXNlLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIGFuIGVudW0nLCAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgZW51bXQgPSB0eXBlc3lzLmZpbmRGcW4oJ2pzaWktY2FsYy5BbGxUeXBlc0VudW0nKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGVudW10LmFsbEltcGxlbWVudGF0aW9ucykudG9FcXVhbChbXSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbnRlc3QoJ1RocmVlIEluaGVyaXRhbmNlIExldmVscycsICgpID0+IHtcbiAgY29uc3QgaWZhY2UgPSB0eXBlc3lzLmZpbmRJbnRlcmZhY2UoXG4gICAgJ0BzY29wZS9qc2lpLWNhbGMtbGliLklUaHJlZUxldmVsc0ludGVyZmFjZScsXG4gICk7XG4gIGNvbnN0IG1ldGhvZG5hbWVzID0gaWZhY2UuYWxsTWV0aG9kcy5tYXAoKG0pID0+IG0ubmFtZSk7XG4gIG1ldGhvZG5hbWVzLnNvcnQoKTtcbiAgZXhwZWN0KG1ldGhvZG5hbWVzKS50b0VxdWFsKFsnYmFyJywgJ2JheicsICdmb28nXSk7XG59KTtcblxuZGVzY3JpYmUoJ0BkZXByZWNhdGVkJywgKCkgPT4ge1xuICB0ZXN0KCdjYW4gYmUgcmVhZCBvbiBhbiBpdGVtJywgKCkgPT4ge1xuICAgIGNvbnN0IGtsYXNzID0gdHlwZXN5cy5maW5kQ2xhc3MoJ2pzaWktY2FsYy5PbGQnKTtcbiAgICBleHBlY3Qoa2xhc3MuZG9jcy5kZXByZWNhdGVkKS50b0JlVHJ1dGh5KCk7XG4gICAgZXhwZWN0KGtsYXNzLmRvY3Muc3RhYmlsaXR5KS50b0JlKHNwZWMuU3RhYmlsaXR5LkRlcHJlY2F0ZWQpO1xuICB9KTtcblxuICB0ZXN0KCdpcyBpbmhlcml0ZWQgZnJvbSBjbGFzcycsICgpID0+IHtcbiAgICBjb25zdCBrbGFzcyA9IHR5cGVzeXMuZmluZENsYXNzKCdqc2lpLWNhbGMuT2xkJyk7XG4gICAgY29uc3QgbWV0aG9kID0ga2xhc3MuZ2V0TWV0aG9kcygpLmRvQVRoaW5nO1xuICAgIGV4cGVjdChtZXRob2QuZG9jcy5kZXByZWNhdGVkKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xufSk7XG5cbi8qKlxuICogVGhpcyB0ZXN0IGlzIGFjdHVhbGx5IHRlc3RpbmcgdGhlIGNvbWJpbmF0aW9uIG9mIGBqc2lpYCwgYGpzaWktY2FsY2AgYW5kIGBqc2lpLXJlZmxlY3RgLlxuICovXG50ZXN0KCdTdWJtb2R1bGVzIGNhbiBoYXZlIGEgUkVBRE1FJywgKCkgPT4ge1xuICBjb25zdCBqc2lpQ2FsYyA9IHR5cGVzeXMuZmluZEFzc2VtYmx5KCdqc2lpLWNhbGMnKTtcblxuICBjb25zdCBzdWJtb2R1bGUgPSBqc2lpQ2FsYy5zdWJtb2R1bGVzLmZpbmQoXG4gICAgKG0pID0+IG0uZnFuID09PSAnanNpaS1jYWxjLnN1Ym1vZHVsZScsXG4gICk7XG4gIGNvbnN0IGlzb2xhdGVkID0gc3VibW9kdWxlPy5zdWJtb2R1bGVzLmZpbmQoXG4gICAgKG0pID0+IG0uZnFuID09PSAnanNpaS1jYWxjLnN1Ym1vZHVsZS5pc29sYXRlZCcsXG4gICk7XG5cbiAgZXhwZWN0KHN1Ym1vZHVsZT8ucmVhZG1lPy5tYXJrZG93bikudG9NYXRjaChcbiAgICAvVGhpcyBpcyB0aGUgcmVhZG1lLipqc2lpLWNhbGMuc3VibW9kdWxlLyxcbiAgKTtcbiAgZXhwZWN0KGlzb2xhdGVkPy5yZWFkbWU/Lm1hcmtkb3duKS50b01hdGNoKFxuICAgIC9UaGlzIGlzIHRoZSByZWFkbWUuKmpzaWktY2FsYy5zdWJtb2R1bGUuaXNvbGF0ZWQvLFxuICApO1xufSk7XG5cbnRlc3QoJ292ZXJyaWRkZW4gbWVtYmVyIGtub3dzIGFib3V0IGJvdGggcGFyZW50IHR5cGVzJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCB0cyA9IGF3YWl0IHR5cGVTeXN0ZW1Gcm9tU291cmNlKGBcbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyBiYXIoKSB7XG4gICAgICAgIEFycmF5LmlzQXJyYXkoMyk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBib28oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGV4cG9ydCBjbGFzcyBTdWJGb28gZXh0ZW5kcyBGb28ge1xuICAgICAgcHVibGljIGJvbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgYCk7XG5cbiAgY29uc3Qgc3VwZXJUeXBlID0gdHMuZmluZENsYXNzKCd0ZXN0cGtnLkZvbycpO1xuICBjb25zdCBzdWJUeXBlID0gdHMuZmluZENsYXNzKCd0ZXN0cGtnLlN1YkZvbycpO1xuICBjb25zdCBmb29NZXRob2QgPSBzdWJUeXBlLmFsbE1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAnYmFyJykhO1xuICBjb25zdCBib29NZXRob2QgPSBzdWJUeXBlLmFsbE1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAnYm9vJykhO1xuXG4gIGV4cGVjdChmb29NZXRob2QucGFyZW50VHlwZSkudG9CZShzdWJUeXBlKTtcbiAgZXhwZWN0KGZvb01ldGhvZC5kZWZpbmluZ1R5cGUpLnRvQmUoc3VwZXJUeXBlKTtcblxuICBleHBlY3QoYm9vTWV0aG9kLnBhcmVudFR5cGUpLnRvQmUoc3ViVHlwZSk7XG4gIGV4cGVjdChib29NZXRob2QuZGVmaW5pbmdUeXBlKS50b0JlKHN1YlR5cGUpO1xuICBleHBlY3QoYm9vTWV0aG9kLm92ZXJyaWRlcykudG9CZShzdXBlclR5cGUpO1xufSk7XG5cbmRlc2NyaWJlKCdTdGFiaWxpdHknLCAoKSA9PiB7XG4gIHRlc3QoJ2NhbiBiZSByZWFkIG9uIGFuIGl0ZW0nLCAoKSA9PiB7XG4gICAgY29uc3Qga2xhc3MgPSB0eXBlc3lzLmZpbmRDbGFzcygnanNpaS1jYWxjLkRvY3VtZW50ZWRDbGFzcycpO1xuICAgIGV4cGVjdChrbGFzcy5kb2NzLnN0YWJpbGl0eSkudG9CZShzcGVjLlN0YWJpbGl0eS5TdGFibGUpO1xuICB9KTtcblxuICB0ZXN0KCdpcyBpbmhlcml0ZWQgZnJvbSBjbGFzcycsICgpID0+IHtcbiAgICBjb25zdCBrbGFzcyA9IHR5cGVzeXMuZmluZENsYXNzKCdqc2lpLWNhbGMuRG9jdW1lbnRlZENsYXNzJyk7XG4gICAgY29uc3QgbWV0aG9kID0ga2xhc3MuZ2V0TWV0aG9kcygpLmdyZWV0O1xuICAgIGV4cGVjdChtZXRob2QuZG9jcy5zdGFiaWxpdHkpLnRvQmUoc3BlYy5TdGFiaWxpdHkuU3RhYmxlKTtcbiAgfSk7XG5cbiAgdGVzdCgnY2FuIGJlIG92ZXJyaWRkZW4gZnJvbSBjbGFzcycsICgpID0+IHtcbiAgICBjb25zdCBrbGFzcyA9IHR5cGVzeXMuZmluZENsYXNzKCdqc2lpLWNhbGMuRG9jdW1lbnRlZENsYXNzJyk7XG4gICAgY29uc3QgbWV0aG9kID0ga2xhc3MuZ2V0TWV0aG9kcygpLmhvbGE7XG4gICAgZXhwZWN0KG1ldGhvZC5kb2NzLnN0YWJpbGl0eSkudG9CZShzcGVjLlN0YWJpbGl0eS5FeHBlcmltZW50YWwpO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgZGVzY3JpYmUoJ2xvd2VzdCBzdGFiaWxpdHkgZ3VhcmFudGVlIGlzIGFkdmVydGlzZWQnLCAoKSA9PiB7XG4gICAgdGVzdCgnd2hlbiBzdWJjbGFzcyBpcyBleHBlcmltZW50YWwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0cyA9IGF3YWl0IHR5cGVTeXN0ZW1Gcm9tU291cmNlKGBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBzdGFibGVcbiAgICAgICAgICovXG4gICAgICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSgzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdWJsaWMgYmFyKCkge1xuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSgzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAgICAgKi9cbiAgICAgICAgZXhwb3J0IGNsYXNzIFN1YkZvbyBleHRlbmRzIEZvbyB7XG4gICAgICAgIH1cbiAgICAgIGApO1xuICAgICAgY29uc3QgY2xhc3NUeXBlID0gdHMuZmluZENsYXNzKCd0ZXN0cGtnLlN1YkZvbycpO1xuICAgICAgY29uc3QgaW5pdGlhbGl6ZXIgPSBjbGFzc1R5cGUuaW5pdGlhbGl6ZXIhO1xuICAgICAgY29uc3QgbWV0aG9kID0gY2xhc3NUeXBlLmFsbE1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAnYmFyJykhO1xuXG4gICAgICBleHBlY3QoaW5pdGlhbGl6ZXIuZG9jcy5zdGFiaWxpdHkpLnRvRXF1YWwoU3RhYmlsaXR5LkV4cGVyaW1lbnRhbCk7XG4gICAgICBleHBlY3QobWV0aG9kLmRvY3Muc3RhYmlsaXR5KS50b0VxdWFsKFN0YWJpbGl0eS5FeHBlcmltZW50YWwpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2hlbiBtZXRob2QgaXMgZXhwZXJpbWVudGFsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHMgPSBhd2FpdCB0eXBlU3lzdGVtRnJvbVNvdXJjZShgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAc3RhYmxlXG4gICAgICAgICAqL1xuICAgICAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KDMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBwdWJsaWMgYmFyKCkge1xuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSgzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHN0YWJsZVxuICAgICAgICAgKi9cbiAgICAgICAgZXhwb3J0IGNsYXNzIFN1YkZvbyBleHRlbmRzIEZvbyB7XG4gICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICBjb25zdCBjbGFzc1R5cGUgPSB0cy5maW5kQ2xhc3MoJ3Rlc3Rwa2cuU3ViRm9vJyk7XG4gICAgICBjb25zdCBpbml0aWFsaXplciA9IGNsYXNzVHlwZS5pbml0aWFsaXplciE7XG4gICAgICBjb25zdCBtZXRob2QgPSBjbGFzc1R5cGUuYWxsTWV0aG9kcy5maW5kKChtKSA9PiBtLm5hbWUgPT09ICdiYXInKSE7XG5cbiAgICAgIGV4cGVjdChpbml0aWFsaXplci5kb2NzLnN0YWJpbGl0eSkudG9FcXVhbChTdGFiaWxpdHkuRXhwZXJpbWVudGFsKTtcbiAgICAgIGV4cGVjdChtZXRob2QuZG9jcy5zdGFiaWxpdHkpLnRvRXF1YWwoU3RhYmlsaXR5LkV4cGVyaW1lbnRhbCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aGVuIG1ldGhvZCBpcyBleHBsaWNpdGx5IG1hcmtlZCBzdGFibGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0cyA9IGF3YWl0IHR5cGVTeXN0ZW1Gcm9tU291cmNlKGBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBzdGFibGVcbiAgICAgICAgICovXG4gICAgICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEBzdGFibGVcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoMyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQHN0YWJsZVxuICAgICAgICAgICAqL1xuICAgICAgICAgIHB1YmxpYyBiYXIoKSB7XG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KDMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICAgICAqL1xuICAgICAgICBleHBvcnQgY2xhc3MgU3ViRm9vIGV4dGVuZHMgRm9vIHtcbiAgICAgICAgfVxuICAgICAgYCk7XG5cbiAgICAgIGNvbnN0IGNsYXNzVHlwZSA9IHRzLmZpbmRDbGFzcygndGVzdHBrZy5TdWJGb28nKTtcbiAgICAgIGNvbnN0IGluaXRpYWxpemVyID0gY2xhc3NUeXBlLmluaXRpYWxpemVyITtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGNsYXNzVHlwZS5hbGxNZXRob2RzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gJ2JhcicpITtcblxuICAgICAgZXhwZWN0KGluaXRpYWxpemVyLmRvY3Muc3RhYmlsaXR5KS50b0VxdWFsKFN0YWJpbGl0eS5FeHBlcmltZW50YWwpO1xuICAgICAgZXhwZWN0KG1ldGhvZC5kb2NzLnN0YWJpbGl0eSkudG9FcXVhbChTdGFiaWxpdHkuRXhwZXJpbWVudGFsKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2V4dGVybmFsIHN0YWJpbGl0eScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRzID0gYXdhaXQgdHlwZVN5c3RlbUZyb21Tb3VyY2UoYFxuICAgICAgICAvKipcbiAgICAgICAgICogQHN0YWJpbGl0eSBleHRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgZXhwb3J0IGNsYXNzIEZvbyB7XG4gICAgICAgICAgcHVibGljIGJhcigpIHtcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoMyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBzdGFibGVcbiAgICAgICAgICovXG4gICAgICAgIGV4cG9ydCBjbGFzcyBTdWJGb28gZXh0ZW5kcyBGb28ge1xuICAgICAgICB9XG4gICAgICBgKTtcblxuICAgICAgY29uc3QgY2xhc3NUeXBlID0gdHMuZmluZENsYXNzKCd0ZXN0cGtnLlN1YkZvbycpO1xuICAgICAgY29uc3QgbWV0aG9kID0gY2xhc3NUeXBlLmFsbE1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAnYmFyJykhO1xuXG4gICAgICBleHBlY3QobWV0aG9kLmRvY3Muc3RhYmlsaXR5KS50b0VxdWFsKFN0YWJpbGl0eS5FeHRlcm5hbCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbnRlc3QoJ1R5cGVTeXN0ZW0ucHJvcGVydGllcycsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgdHMgPSBhd2FpdCB0eXBlU3lzdGVtRnJvbVNvdXJjZShgXG4gIGV4cG9ydCBuYW1lc3BhY2Ugc3VibW9kdWxlIHtcbiAgICBleHBvcnQgY2xhc3MgRm9vIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB0ZXN0ID0gJ1RFU1QnO1xuICAgIH1cbiAgICBleHBvcnQgaW50ZXJmYWNlIEJhciB7XG4gICAgICByZWFkb25seSBiYXo6IG51bWJlcjtcbiAgICB9XG4gIH1cbiAgYCk7XG4gIGV4cGVjdCh0cy5wcm9wZXJ0aWVzKS50b0hhdmVMZW5ndGgoMik7XG59KTtcblxudGVzdCgnVHlwZVN5c3RlbS5tZXRob2RzJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCB0cyA9IGF3YWl0IHR5cGVTeXN0ZW1Gcm9tU291cmNlKGBcbiAgZXhwb3J0IG5hbWVzcGFjZSBzdWJtb2R1bGUge1xuICAgIGV4cG9ydCBjbGFzcyBGb28ge1xuICAgICAgcHVibGljIG1ldGhvZCgpOiB2b2lkIHt9XG4gICAgfVxuICAgIGV4cG9ydCBpbnRlcmZhY2UgSUJhciB7XG4gICAgICBiYXooKTogbnVtYmVyO1xuICAgIH1cbiAgfVxuICBgKTtcbiAgZXhwZWN0KHRzLm1ldGhvZHMpLnRvSGF2ZUxlbmd0aCgyKTtcbn0pO1xuXG50ZXN0KCdBc3NlbWJseSBhbGxUeXBlcyBpbmNsdWRlcyBzdWJtb2R1bGUgdHlwZXMnLCBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGFzbSA9IGF3YWl0IGFzc2VtYmx5RnJvbVNvdXJjZSh7XG4gICAgJ2luZGV4LnRzJzogJ2V4cG9ydCAqIGFzIHN1Ym1vZCBmcm9tIFwiLi9zdWJtb2RcIjsnLFxuICAgICdzdWJtb2QudHMnOiBgZXhwb3J0IGNsYXNzIEZvbyB7fWAsXG4gIH0pO1xuXG4gIGV4cGVjdChhc20uYWxsVHlwZXMubWFwKCh0KSA9PiB0LmZxbikpLnRvRXF1YWwoWyd0ZXN0cGtnLnN1Ym1vZC5Gb28nXSk7XG59KTtcblxuZnVuY3Rpb24gcmVzb2x2ZU1vZHVsZURpcihuYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoYCR7bmFtZX0vcGFja2FnZS5qc29uYCkpO1xufVxuIl19
package/test/util.d.ts CHANGED
@@ -1,2 +1,4 @@
1
- import { TypeSystem } from '../lib';
2
- export declare function typeSystemFromSource(source: string): Promise<TypeSystem>;
1
+ import { MultipleSourceFiles, PackageInfo } from 'jsii';
2
+ import { Assembly, TypeSystem } from '../lib';
3
+ export declare function typeSystemFromSource(source: string | MultipleSourceFiles, cb?: (obj: PackageInfo) => void): Promise<TypeSystem>;
4
+ export declare function assemblyFromSource(source: string | MultipleSourceFiles, cb?: (obj: PackageInfo) => void): Promise<Assembly>;
package/test/util.js CHANGED
@@ -1,13 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.typeSystemFromSource = void 0;
4
- const helpers_1 = require("jsii/lib/helpers");
3
+ exports.assemblyFromSource = exports.typeSystemFromSource = void 0;
4
+ const jsii_1 = require("jsii");
5
5
  const lib_1 = require("../lib");
6
- async function typeSystemFromSource(source) {
7
- const assembly = await helpers_1.sourceToAssemblyHelper(source);
8
- const ts = new lib_1.TypeSystem();
9
- ts.addAssembly(new lib_1.Assembly(ts, assembly));
10
- return ts;
6
+ async function typeSystemFromSource(source, cb) {
7
+ const asm = await assemblyFromSource(source, cb);
8
+ return asm.system;
11
9
  }
12
10
  exports.typeSystemFromSource = typeSystemFromSource;
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsOENBQTBEO0FBRTFELGdDQUE4QztBQUV2QyxLQUFLLFVBQVUsb0JBQW9CLENBQUMsTUFBYztJQUN2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLGdDQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELE1BQU0sRUFBRSxHQUFHLElBQUksZ0JBQVUsRUFBRSxDQUFDO0lBQzVCLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxjQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDM0MsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBTEQsb0RBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzb3VyY2VUb0Fzc2VtYmx5SGVscGVyIH0gZnJvbSAnanNpaS9saWIvaGVscGVycyc7XG5cbmltcG9ydCB7IEFzc2VtYmx5LCBUeXBlU3lzdGVtIH0gZnJvbSAnLi4vbGliJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHR5cGVTeXN0ZW1Gcm9tU291cmNlKHNvdXJjZTogc3RyaW5nKSB7XG4gIGNvbnN0IGFzc2VtYmx5ID0gYXdhaXQgc291cmNlVG9Bc3NlbWJseUhlbHBlcihzb3VyY2UpO1xuICBjb25zdCB0cyA9IG5ldyBUeXBlU3lzdGVtKCk7XG4gIHRzLmFkZEFzc2VtYmx5KG5ldyBBc3NlbWJseSh0cywgYXNzZW1ibHkpKTtcbiAgcmV0dXJuIHRzO1xufVxuIl19
11
+ async function assemblyFromSource(source, cb) {
12
+ const ass = await jsii_1.sourceToAssemblyHelper(source, cb);
13
+ const ts = new lib_1.TypeSystem();
14
+ return ts.addAssembly(new lib_1.Assembly(ts, ass));
15
+ }
16
+ exports.assemblyFromSource = assemblyFromSource;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQWdGO0FBRWhGLGdDQUE4QztBQUV2QyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLE1BQW9DLEVBQ3BDLEVBQStCO0lBRS9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUNwQixDQUFDO0FBTkQsb0RBTUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLE1BQW9DLEVBQ3BDLEVBQStCO0lBRS9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sNkJBQXNCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sRUFBRSxHQUFHLElBQUksZ0JBQVUsRUFBRSxDQUFDO0lBQzVCLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGNBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBUEQsZ0RBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzb3VyY2VUb0Fzc2VtYmx5SGVscGVyLCBNdWx0aXBsZVNvdXJjZUZpbGVzLCBQYWNrYWdlSW5mbyB9IGZyb20gJ2pzaWknO1xuXG5pbXBvcnQgeyBBc3NlbWJseSwgVHlwZVN5c3RlbSB9IGZyb20gJy4uL2xpYic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0eXBlU3lzdGVtRnJvbVNvdXJjZShcbiAgc291cmNlOiBzdHJpbmcgfCBNdWx0aXBsZVNvdXJjZUZpbGVzLFxuICBjYj86IChvYmo6IFBhY2thZ2VJbmZvKSA9PiB2b2lkLFxuKSB7XG4gIGNvbnN0IGFzbSA9IGF3YWl0IGFzc2VtYmx5RnJvbVNvdXJjZShzb3VyY2UsIGNiKTtcbiAgcmV0dXJuIGFzbS5zeXN0ZW07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3NlbWJseUZyb21Tb3VyY2UoXG4gIHNvdXJjZTogc3RyaW5nIHwgTXVsdGlwbGVTb3VyY2VGaWxlcyxcbiAgY2I/OiAob2JqOiBQYWNrYWdlSW5mbykgPT4gdm9pZCxcbik6IFByb21pc2U8QXNzZW1ibHk+IHtcbiAgY29uc3QgYXNzID0gYXdhaXQgc291cmNlVG9Bc3NlbWJseUhlbHBlcihzb3VyY2UsIGNiKTtcbiAgY29uc3QgdHMgPSBuZXcgVHlwZVN5c3RlbSgpO1xuICByZXR1cm4gdHMuYWRkQXNzZW1ibHkobmV3IEFzc2VtYmx5KHRzLCBhc3MpKTtcbn1cbiJdfQ==