@ngrdt/router 0.0.13 → 0.0.14

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.
@@ -152,7 +152,9 @@ export class RdtAngularRoute {
152
152
  return undefined;
153
153
  }
154
154
  const routeSegmentLength = this.route.path.split('/').length;
155
- const regex = new RegExp(`^${this.route.regex.source}$`);
155
+ const regex = this.route.regex
156
+ ? new RegExp(`^${this.route.regex.source}$`)
157
+ : this.route.absoluteRegex;
156
158
  return [
157
159
  (route, segments) => {
158
160
  const path = segments
@@ -191,4 +193,4 @@ export class RdtAngularRoute {
191
193
  }
192
194
  }
193
195
  }
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWFuZ3VsYXItcm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvcmR0LXJvdXRlL3JkdC1hbmd1bGFyLXJvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsbUJBQW1CLEVBRW5CLE1BQU0sRUFFTixxQkFBcUIsR0FFdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQVVMLE1BQU0sR0FJUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsRCxNQUFNLE9BQU8sZUFBZTtJQUNsQixLQUFLLENBQWM7SUFDbkIsUUFBUSxHQUFZLEVBQUUsQ0FBQztJQUUvQiwrQ0FBK0M7SUFDdkMsWUFBWSxDQUF3QjtJQUNwQyxTQUFTLENBQWE7SUFDdEIsU0FBUyxHQUF3QyxFQUFFLENBQUM7SUFDcEQsU0FBUyxHQUEwQyxFQUFFLENBQUM7SUFDdEQsV0FBVyxHQUFvQixFQUFFLENBQUM7SUFDbEMsZ0JBQWdCLEdBQXlCLEVBQUUsQ0FBQztJQUM1QyxhQUFhLEdBQXlCLEVBQUUsQ0FBQztJQUN6QyxxQkFBcUIsQ0FBeUI7SUFDOUMsSUFBSSxDQUFRO0lBRXBCLFlBQVksS0FBa0I7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLFNBQTBCO1FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQThCO1FBQ3RDLElBQUksQ0FB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LE1BQU0sSUFBSSxLQUFLLENBQ2I7NENBQ2dDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDcEQsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcclxuICBFbnZpcm9ubWVudFByb3ZpZGVycyxcclxuICBpbmplY3QsXHJcbiAgUHJvdmlkZXIsXHJcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxyXG4gIFR5cGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICBDYW5BY3RpdmF0ZUNoaWxkRm4sXHJcbiAgQ2FuQWN0aXZhdGVGbixcclxuICBDYW5EZWFjdGl2YXRlRm4sXHJcbiAgQ2FuTWF0Y2hGbixcclxuICBEYXRhLFxyXG4gIExvYWRDaGlsZHJlbkNhbGxiYWNrLFxyXG4gIFJlc29sdmVGbixcclxuICBSb3V0ZSxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcclxuICBSdW5HdWFyZHNBbmRSZXNvbHZlcnMsXHJcbiAgVXJsU2VnbWVudCxcclxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSRFRfQ0FOTk9UX0JFX0VOVEVSRURfUFJPVklERVIgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZHQtY2Fubm90LWJlLWVudGVyZWQudG9rZW4nO1xyXG5pbXBvcnQgeyBSZHROYXZpZ2F0aW9uU291cmNlIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBSZHRSb3V0ZSB9IGZyb20gJy4vcmR0LXJvdXRlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZHRBbmd1bGFyUm91dGU8VCBleHRlbmRzIG9iamVjdD4ge1xyXG4gIHByaXZhdGUgcm91dGU6IFJkdFJvdXRlPFQ+O1xyXG4gIHByaXZhdGUgY2hpbGRyZW46IFJvdXRlW10gPSBbXTtcclxuXHJcbiAgLy8gTXVzdCBiZSBzZXQgZnJvbSBjb21wb25lbnQgZGVjbGFyYXRpb24gZmlsZXNcclxuICBwcml2YXRlIGxvYWRDaGlsZHJlbj86IExvYWRDaGlsZHJlbkNhbGxiYWNrO1xyXG4gIHByaXZhdGUgY29tcG9uZW50PzogVHlwZTxhbnk+O1xyXG4gIHByaXZhdGUgcHJvdmlkZXJzOiAoUHJvdmlkZXIgfCBFbnZpcm9ubWVudFByb3ZpZGVycylbXSA9IFtdO1xyXG4gIHByaXZhdGUgcmVzb2x2ZXJzOiB7IFtrZXk6IHN0cmluZ106IFJlc29sdmVGbjx1bmtub3duPiB9ID0ge307XHJcbiAgcHJpdmF0ZSBjYW5BY3RpdmF0ZTogQ2FuQWN0aXZhdGVGbltdID0gW107XHJcbiAgcHJpdmF0ZSBjYW5BY3RpdmF0ZUNoaWxkOiBDYW5BY3RpdmF0ZUNoaWxkRm5bXSA9IFtdO1xyXG4gIHByaXZhdGUgY2FuRGVhY3RpdmF0ZTogQ2FuRGVhY3RpdmF0ZUZuPFQ+W10gPSBbXTtcclxuICBwcml2YXRlIHJ1bkd1YXJkc0FuZFJlc29sdmVycz86IFJ1bkd1YXJkc0FuZFJlc29sdmVycztcclxuICBwcml2YXRlIGRhdGE/OiBEYXRhO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihyb3V0ZTogUmR0Um91dGU8VD4pIHtcclxuICAgIHRoaXMucm91dGUgPSByb3V0ZTtcclxuICB9XHJcblxyXG4gIHByb3ZpZGUoLi4ucHJvdmlkZXJzOiBUeXBlPHVua25vd24+W10pIHtcclxuICAgIHRoaXMucHJvdmlkZXJzLnB1c2goLi4ucHJvdmlkZXJzKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgc2V0TW9kdWxlKGNhbGxiYWNrOiBMb2FkQ2hpbGRyZW5DYWxsYmFjaykge1xyXG4gICAgdGhpcy5sb2FkQ2hpbGRyZW4gPSBjYWxsYmFjaztcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29tcG9uZW50KGNvbXA6IFR5cGU8YW55Pikge1xyXG4gICAgdGhpcy5jb21wb25lbnQgPSBjb21wO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBzZXRDaGlsZHJlbiguLi5yb3V0ZXM6IFJvdXRlW10pIHtcclxuICAgIHRoaXMuY2hpbGRyZW4gPSByb3V0ZXM7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGFkZFJlc29sdmUocGFyYW1OYW1lOiBzdHJpbmcsIHJlc29sdmVyOiBSZXNvbHZlRm48dW5rbm93bj4pIHtcclxuICAgIHRoaXMucmVzb2x2ZXJzW3BhcmFtTmFtZV0gPSByZXNvbHZlcjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2FuQWN0aXZhdGUoLi4uZm5zOiBDYW5BY3RpdmF0ZUZuW10pIHtcclxuICAgIHRoaXMuY2FuQWN0aXZhdGUucHVzaCguLi5mbnMpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBhZGRDYW5EZWFjdGl2YXRlKC4uLmZuczogQ2FuRGVhY3RpdmF0ZUZuPGFueT5bXSkge1xyXG4gICAgdGhpcy5jYW5EZWFjdGl2YXRlLnB1c2goLi4uZm5zKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2FuQWN0aXZhdGVDaGlsZCguLi5mbnM6IENhbkFjdGl2YXRlQ2hpbGRGbltdKSB7XHJcbiAgICB0aGlzLmNhbkFjdGl2YXRlQ2hpbGQucHVzaCguLi5mbnMpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBzZXRSdW5HdWFyZHNBbmRSZXNvbHZlcnModmFsdWU6IFJ1bkd1YXJkc0FuZFJlc29sdmVycykge1xyXG4gICAgdGhpcy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMgPSB2YWx1ZTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgYnVpbGQoKTogUm91dGUge1xyXG4gICAgdGhpcy5jaGVja0NoaWxkcmVuTWF0Y2goKTtcclxuXHJcbiAgICBsZXQgcmVzOiBSb3V0ZSA9IHtcclxuICAgICAgcGF0aDogdGhpcy5yb3V0ZS5wYXRoLFxyXG4gICAgICBwcm92aWRlcnM6IHRoaXMucHJvdmlkZXJzLFxyXG4gICAgICB0aXRsZTogdGhpcy5yb3V0ZS5uYW1lLFxyXG4gICAgICBjYW5NYXRjaDogdGhpcy5nZXRDYW5NYXRjaCgpLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5jb21wb25lbnQpIHtcclxuICAgICAgcmVzLmNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmxvYWRDaGlsZHJlbikge1xyXG4gICAgICByZXMubG9hZENoaWxkcmVuID0gdGhpcy5sb2FkQ2hpbGRyZW47XHJcbiAgICB9XHJcblxyXG4gICAgcmVzLmRhdGEgPSB0aGlzLmRhdGEgPz8ge1xyXG4gICAgICBicmVhZGNydW1iOiB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMucm91dGUubmFtZSxcclxuICAgICAgICBkaXNhYmxlOiB0aGlzLnJvdXRlLmVudHJ5RGlzYWJsZWQsXHJcbiAgICAgICAgc3RhdGljU3RhdGVQYXJhbXM6IHtcclxuICAgICAgICAgIHNyYzogUmR0TmF2aWdhdGlvblNvdXJjZS5CUkVBRENSVU1CLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLnRoaXMucm91dGUuZGF0YSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZ3VhcmQ6IENhbkFjdGl2YXRlRm4gPSAoXHJcbiAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxyXG4gICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KFxyXG4gICAgICAgICAgaW5qZWN0b3IsXHJcbiAgICAgICAgICB0aGlzLnJvdXRlLmNhbkJlRW50ZXJlZC5iaW5kKHRoaXMucm91dGUpXHJcbiAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XHJcbiAgICAgICAgbGV0IHVybCA9IGluamVjdChSRFRfQ0FOTk9UX0JFX0VOVEVSRURfUFJPVklERVIpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZXJyb3IodGhpcy5yb3V0ZS5hYnNvbHV0ZVBhdGgpO1xyXG4gICAgICAgICAgdXJsID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KFxyXG4gICAgICAgICAgICBpbmplY3RvcixcclxuICAgICAgICAgICAgdXJsLmJpbmQodXJsLCBsb2NhdGlvbi5wYXRoKCksIHN0YXRlLnVybCwgdGhpcy5yb3V0ZSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgdXJsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgcmV0dXJuIHJvdXRlci5wYXJzZVVybCh1cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jYW5BY3RpdmF0ZS5wdXNoKGd1YXJkKTtcclxuXHJcbiAgICByZXMuY2FuQWN0aXZhdGUgPSB0aGlzLmNhbkFjdGl2YXRlO1xyXG4gICAgcmVzLmNhbkRlYWN0aXZhdGUgPSB0aGlzLmNhbkRlYWN0aXZhdGU7XHJcblxyXG4gICAgLy8gSWYgY2hpbGRyZW4gZXhpc3QsIGNoYW5nZVxyXG4gICAgLy8ge1xyXG4gICAgLy8gICAgcGF0aDogJy9wYXRoJyxcclxuICAgIC8vICAgIGNvbXBvbmVudDogRmVhdHVyZUNvbXBvbmVudCxcclxuICAgIC8vICAgIGNoaWxkcmVuOiBbLi4uXVxyXG4gICAgLy8gfVxyXG4gICAgLy8gaW50b1xyXG4gICAgLy8ge1xyXG4gICAgLy8gICAgcGF0aDogJy9wYXRoJyxcclxuICAgIC8vICAgIGNoaWxkcmVuOiBbXHJcbiAgICAvLyAgICAgIHtcclxuICAgIC8vICAgICAgICBwYXRoOiAnJyxcclxuICAgIC8vICAgICAgICBjb21wb25lbnQ6IEZlYXR1cmVDb21wb25lbnRcclxuICAgIC8vICAgICAgfSxcclxuICAgIC8vICAgIC4uLlxyXG4gICAgLy8gICAgXVxyXG4gICAgLy8gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAodGhpcy5sb2FkQ2hpbGRyZW4gfHwgdGhpcy5jb21wb25lbnQpIHtcclxuICAgICAgICBjb25zdCBwYXRoID0gcmVzLnBhdGg7XHJcbiAgICAgICAgcmVzLnBhdGggPSAnJztcclxuICAgICAgICByZXMucGF0aE1hdGNoID0gJ2Z1bGwnO1xyXG4gICAgICAgIHJlcy5jYW5NYXRjaCA9IHVuZGVmaW5lZDtcclxuICAgICAgICByZXMgPSB7XHJcbiAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgY2hpbGRyZW46IFtyZXMsIC4uLnRoaXMuY2hpbGRyZW5dLFxyXG4gICAgICAgICAgY2FuQWN0aXZhdGVDaGlsZDogdGhpcy5jYW5BY3RpdmF0ZUNoaWxkLFxyXG4gICAgICAgICAgY2FuTWF0Y2g6IHRoaXMuZ2V0Q2FuTWF0Y2goKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlcy5jaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5yZXNvbHZlcnMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmVzLnJlc29sdmUgPSB0aGlzLnJlc29sdmVycztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMpIHtcclxuICAgICAgcmVzLnJ1bkd1YXJkc0FuZFJlc29sdmVycyA9IHRoaXMucnVuR3VhcmRzQW5kUmVzb2x2ZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENhbk1hdGNoKCk6IENhbk1hdGNoRm5bXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBwYXJhbU1hcCA9IHRoaXMucm91dGUucGFyYW1NYXA7XHJcbiAgICBjb25zdCBoYXNOdW1iZXJQYXJhbXMgPSBPYmplY3Qua2V5cyhwYXJhbU1hcCkuc29tZShcclxuICAgICAgKHApID0+IHBhcmFtTWFwW3AgYXMga2V5b2YgVF0gPT09ICdudW1iZXInXHJcbiAgICApO1xyXG4gICAgaWYgKCFoYXNOdW1iZXJQYXJhbXMpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJvdXRlU2VnbWVudExlbmd0aCA9IHRoaXMucm91dGUucGF0aC5zcGxpdCgnLycpLmxlbmd0aDtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7dGhpcy5yb3V0ZS5yZWdleC5zb3VyY2V9JGApO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgKHJvdXRlOiBSb3V0ZSwgc2VnbWVudHM6IFVybFNlZ21lbnRbXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSBzZWdtZW50c1xyXG4gICAgICAgICAgLnNsaWNlKDAsIHJvdXRlU2VnbWVudExlbmd0aClcclxuICAgICAgICAgIC5tYXAoKHMpID0+IHMucGF0aClcclxuICAgICAgICAgIC5qb2luKCcvJyk7XHJcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QocGF0aCk7XHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0NoaWxkcmVuTWF0Y2goKSB7XHJcbiAgICAvLyBDaGVjayB0aGF0IGFsbCByb3V0ZXMgYXJlIHByZXNlbnQgaWYgcm91dGUgaXMgbm90XHJcbiAgICAvLyBsYXp5IGxvYWRlZCBtb2R1bGUuXHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmxvYWRDaGlsZHJlbiAmJlxyXG4gICAgICAodGhpcy5yb3V0ZS5jaGlsZHJlbi5sZW5ndGggPiAwIHx8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMClcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPCB0aGlzLnJvdXRlLmNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBSZHRSb3V0ZSAke3RoaXMucm91dGUubmFtZX0gaGFzICR7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGUuY2hpbGRyZW4ubGVuZ3RoXHJcbiAgICAgICAgICB9IGNoaWxkcmVuLCBidXQgUmR0QW5ndWxhclJvdXRlIGhhcyAke1xyXG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmxlbmd0aFxyXG4gICAgICAgICAgfS4gVGhlc2UgbnVtYmVycyBtdXN0IG1hdGNoLiBEaWQgeW91IGZvcmdldCB0byBjYWxsIC5zZXRDaGlsZHJlbigpIG1ldGhvZCBpbiBnbG9iYWwgcm91dGVzIGRlZmluaXRpb24/IFJvdXRlcyB3aXRoIGZvbGxvd2luZyBuYW1lcyBzaG91bGQgYmUgcHJlc2VudDogJHt0aGlzLnJvdXRlLmNoaWxkcmVuXHJcbiAgICAgICAgICAgIC5tYXAoKGNoKSA9PiBjaC5uYW1lKVxyXG4gICAgICAgICAgICAuam9pbignLCAnKX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IHRoaXMucm91dGUuY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYFJkdFJvdXRlICR7dGhpcy5yb3V0ZS5uYW1lfSBoYXMgJHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZS5jaGlsZHJlbi5sZW5ndGhcclxuICAgICAgICAgIH0gY2hpbGRyZW4sIGJ1dCBSZHRBbmd1bGFyUm91dGUgaGFzICR7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ubGVuZ3RoXHJcbiAgICAgICAgICB9LiBUaGVzZSBudW1iZXJzIG11c3QgbWF0Y2guIERpZCB5b3UgZm9yZ2V0IHRvIGNhbGwgLnNldENoaWxkcmVuKCkgbWV0aG9kIGluIGZlYXR1cmUgc2hlbGwgcm91dGVzIGRlZmluaXRpb24/IFJvdXRlcyB3aXRoIGZvbGxvd2luZyBwYXRocyBzaG91bGQgYmUgcHJlc2VudDogJHt0aGlzLmNoaWxkcmVuXHJcbiAgICAgICAgICAgIC5tYXAoKGNoKSA9PiBjaC5wYXRoKVxyXG4gICAgICAgICAgICAuam9pbignLCAnKX1gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuMSA9IHRoaXMuY2hpbGRyZW4ubWFwKChjaCkgPT4gY2gucGF0aCEpO1xyXG4gICAgICBjb25zdCBuMiA9IHRoaXMucm91dGUuY2hpbGRyZW4ubWFwKChjaCkgPT4gY2gucGF0aCk7XHJcbiAgICAgIG4xLnNvcnQoKTtcclxuICAgICAgbjIuc29ydCgpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG4xLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKG4xW2ldICE9PSBuMltpXSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgUGF0aHMgb2YgY2hpbGRyZW4gcHJvdmlkZWQgaW4gUmR0Um91dGUgYW5kXHJcbiAgICAgICAgICAgIFJkdEFuZ3VsYXJSb3V0ZSBkbyBub3QgbWF0Y2guICR7bjFbaV19ICE9ICR7bjJbaV19YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWFuZ3VsYXItcm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvcmR0LXJvdXRlL3JkdC1hbmd1bGFyLXJvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsbUJBQW1CLEVBRW5CLE1BQU0sRUFFTixxQkFBcUIsR0FFdEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQVVMLE1BQU0sR0FJUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdsRCxNQUFNLE9BQU8sZUFBZTtJQUNsQixLQUFLLENBQWM7SUFDbkIsUUFBUSxHQUFZLEVBQUUsQ0FBQztJQUUvQiwrQ0FBK0M7SUFDdkMsWUFBWSxDQUF3QjtJQUNwQyxTQUFTLENBQWE7SUFDdEIsU0FBUyxHQUF3QyxFQUFFLENBQUM7SUFDcEQsU0FBUyxHQUEwQyxFQUFFLENBQUM7SUFDdEQsV0FBVyxHQUFvQixFQUFFLENBQUM7SUFDbEMsZ0JBQWdCLEdBQXlCLEVBQUUsQ0FBQztJQUM1QyxhQUFhLEdBQXlCLEVBQUUsQ0FBQztJQUN6QyxxQkFBcUIsQ0FBeUI7SUFDOUMsSUFBSSxDQUFRO0lBRXBCLFlBQVksS0FBa0I7UUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLFNBQTBCO1FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQThCO1FBQ3RDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFlO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFHLE1BQWU7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQWlCLEVBQUUsUUFBNEI7UUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQUcsR0FBb0I7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFHLEdBQTJCO1FBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsR0FBRyxHQUF5QjtRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBNEI7UUFDbkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxHQUFHLEdBQVU7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1NBQzdCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzdCLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN2QyxDQUFDO1FBRUQsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJO1lBQ3RCLFVBQVUsRUFBRTtnQkFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO2dCQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO2dCQUNqQyxpQkFBaUIsRUFBRTtvQkFDakIsR0FBRyxFQUFFLG1CQUFtQixDQUFDLFVBQVU7aUJBQ3BDO2FBQ0Y7WUFDRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtTQUNuQixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQWtCLENBQzNCLEtBQTZCLEVBQzdCLEtBQTBCLEVBQzFCLEVBQUU7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM3QyxJQUNFLHFCQUFxQixDQUNuQixRQUFRLEVBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FDekMsRUFDRCxDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQztnQkFDakQsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDOUIseUNBQXlDO29CQUN6QyxHQUFHLEdBQUcscUJBQXFCLENBQ3pCLFFBQVEsRUFDUixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQ3RELENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM1QixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxHQUFHLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFFdkMsNEJBQTRCO1FBQzVCLElBQUk7UUFDSixvQkFBb0I7UUFDcEIsa0NBQWtDO1FBQ2xDLHFCQUFxQjtRQUNyQixJQUFJO1FBQ0osT0FBTztRQUNQLElBQUk7UUFDSixvQkFBb0I7UUFDcEIsaUJBQWlCO1FBQ2pCLFNBQVM7UUFDVCxtQkFBbUI7UUFDbkIscUNBQXFDO1FBQ3JDLFVBQVU7UUFDVixTQUFTO1FBQ1QsT0FBTztRQUNQLE9BQU87UUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNkLEdBQUcsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO2dCQUN2QixHQUFHLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztnQkFDekIsR0FBRyxHQUFHO29CQUNKLElBQUksRUFBRSxJQUFJO29CQUNWLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ2pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7b0JBQ3ZDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO2lCQUM3QixDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMvQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixHQUFHLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3pELENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3JDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNoRCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQVksQ0FBQyxLQUFLLFFBQVEsQ0FDM0MsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzdELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztZQUM1QixDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDN0IsT0FBTztZQUNMLENBQUMsS0FBWSxFQUFFLFFBQXNCLEVBQUUsRUFBRTtnQkFDdkMsTUFBTSxJQUFJLEdBQUcsUUFBUTtxQkFDbEIsS0FBSyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQztxQkFDNUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO3FCQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2IsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixvREFBb0Q7UUFDcEQsc0JBQXNCO1FBQ3RCLElBQ0UsQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUNsQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQzVELENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0RCxNQUFNLElBQUksS0FBSyxDQUNiLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQ3RCLHNDQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFDaEIsd0pBQXdKLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtxQkFDeEssR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO3FCQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDaEIsQ0FBQztZQUNKLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDN0QsTUFBTSxJQUFJLEtBQUssQ0FDYixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUN0QixzQ0FDRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQ2hCLCtKQUErSixJQUFJLENBQUMsUUFBUTtxQkFDekssR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO3FCQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDaEIsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BELEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ25DLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNwQixNQUFNLElBQUksS0FBSyxDQUNiOzRDQUNnQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BELENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXHJcbiAgaW5qZWN0LFxyXG4gIFByb3ZpZGVyLFxyXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcclxuICBUeXBlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgQ2FuQWN0aXZhdGVDaGlsZEZuLFxyXG4gIENhbkFjdGl2YXRlRm4sXHJcbiAgQ2FuRGVhY3RpdmF0ZUZuLFxyXG4gIENhbk1hdGNoRm4sXHJcbiAgRGF0YSxcclxuICBMb2FkQ2hpbGRyZW5DYWxsYmFjayxcclxuICBSZXNvbHZlRm4sXHJcbiAgUm91dGUsXHJcbiAgUm91dGVyLFxyXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXHJcbiAgUnVuR3VhcmRzQW5kUmVzb2x2ZXJzLFxyXG4gIFVybFNlZ21lbnQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUkRUX0NBTk5PVF9CRV9FTlRFUkVEX1BST1ZJREVSIH0gZnJvbSAnLi4vc2VydmljZXMvcmR0LWNhbm5vdC1iZS1lbnRlcmVkLnRva2VuJztcclxuaW1wb3J0IHsgUmR0TmF2aWdhdGlvblNvdXJjZSB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuL3JkdC1yb3V0ZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmR0QW5ndWxhclJvdXRlPFQgZXh0ZW5kcyBvYmplY3Q+IHtcclxuICBwcml2YXRlIHJvdXRlOiBSZHRSb3V0ZTxUPjtcclxuICBwcml2YXRlIGNoaWxkcmVuOiBSb3V0ZVtdID0gW107XHJcblxyXG4gIC8vIE11c3QgYmUgc2V0IGZyb20gY29tcG9uZW50IGRlY2xhcmF0aW9uIGZpbGVzXHJcbiAgcHJpdmF0ZSBsb2FkQ2hpbGRyZW4/OiBMb2FkQ2hpbGRyZW5DYWxsYmFjaztcclxuICBwcml2YXRlIGNvbXBvbmVudD86IFR5cGU8YW55PjtcclxuICBwcml2YXRlIHByb3ZpZGVyczogKFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnMpW10gPSBbXTtcclxuICBwcml2YXRlIHJlc29sdmVyczogeyBba2V5OiBzdHJpbmddOiBSZXNvbHZlRm48dW5rbm93bj4gfSA9IHt9O1xyXG4gIHByaXZhdGUgY2FuQWN0aXZhdGU6IENhbkFjdGl2YXRlRm5bXSA9IFtdO1xyXG4gIHByaXZhdGUgY2FuQWN0aXZhdGVDaGlsZDogQ2FuQWN0aXZhdGVDaGlsZEZuW10gPSBbXTtcclxuICBwcml2YXRlIGNhbkRlYWN0aXZhdGU6IENhbkRlYWN0aXZhdGVGbjxUPltdID0gW107XHJcbiAgcHJpdmF0ZSBydW5HdWFyZHNBbmRSZXNvbHZlcnM/OiBSdW5HdWFyZHNBbmRSZXNvbHZlcnM7XHJcbiAgcHJpdmF0ZSBkYXRhPzogRGF0YTtcclxuXHJcbiAgY29uc3RydWN0b3Iocm91dGU6IFJkdFJvdXRlPFQ+KSB7XHJcbiAgICB0aGlzLnJvdXRlID0gcm91dGU7XHJcbiAgfVxyXG5cclxuICBwcm92aWRlKC4uLnByb3ZpZGVyczogVHlwZTx1bmtub3duPltdKSB7XHJcbiAgICB0aGlzLnByb3ZpZGVycy5wdXNoKC4uLnByb3ZpZGVycyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHNldE1vZHVsZShjYWxsYmFjazogTG9hZENoaWxkcmVuQ2FsbGJhY2spIHtcclxuICAgIHRoaXMubG9hZENoaWxkcmVuID0gY2FsbGJhY2s7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHNldENvbXBvbmVudChjb21wOiBUeXBlPGFueT4pIHtcclxuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2hpbGRyZW4oLi4ucm91dGVzOiBSb3V0ZVtdKSB7XHJcbiAgICB0aGlzLmNoaWxkcmVuID0gcm91dGVzO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBhZGRSZXNvbHZlKHBhcmFtTmFtZTogc3RyaW5nLCByZXNvbHZlcjogUmVzb2x2ZUZuPHVua25vd24+KSB7XHJcbiAgICB0aGlzLnJlc29sdmVyc1twYXJhbU5hbWVdID0gcmVzb2x2ZXI7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGFkZENhbkFjdGl2YXRlKC4uLmZuczogQ2FuQWN0aXZhdGVGbltdKSB7XHJcbiAgICB0aGlzLmNhbkFjdGl2YXRlLnB1c2goLi4uZm5zKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2FuRGVhY3RpdmF0ZSguLi5mbnM6IENhbkRlYWN0aXZhdGVGbjxhbnk+W10pIHtcclxuICAgIHRoaXMuY2FuRGVhY3RpdmF0ZS5wdXNoKC4uLmZucyk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGFkZENhbkFjdGl2YXRlQ2hpbGQoLi4uZm5zOiBDYW5BY3RpdmF0ZUNoaWxkRm5bXSkge1xyXG4gICAgdGhpcy5jYW5BY3RpdmF0ZUNoaWxkLnB1c2goLi4uZm5zKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgc2V0UnVuR3VhcmRzQW5kUmVzb2x2ZXJzKHZhbHVlOiBSdW5HdWFyZHNBbmRSZXNvbHZlcnMpIHtcclxuICAgIHRoaXMucnVuR3VhcmRzQW5kUmVzb2x2ZXJzID0gdmFsdWU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGJ1aWxkKCk6IFJvdXRlIHtcclxuICAgIHRoaXMuY2hlY2tDaGlsZHJlbk1hdGNoKCk7XHJcblxyXG4gICAgbGV0IHJlczogUm91dGUgPSB7XHJcbiAgICAgIHBhdGg6IHRoaXMucm91dGUucGF0aCxcclxuICAgICAgcHJvdmlkZXJzOiB0aGlzLnByb3ZpZGVycyxcclxuICAgICAgdGl0bGU6IHRoaXMucm91dGUubmFtZSxcclxuICAgICAgY2FuTWF0Y2g6IHRoaXMuZ2V0Q2FuTWF0Y2goKSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50KSB7XHJcbiAgICAgIHJlcy5jb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkQ2hpbGRyZW4pIHtcclxuICAgICAgcmVzLmxvYWRDaGlsZHJlbiA9IHRoaXMubG9hZENoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlcy5kYXRhID0gdGhpcy5kYXRhID8/IHtcclxuICAgICAgYnJlYWRjcnVtYjoge1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLnJvdXRlLm5hbWUsXHJcbiAgICAgICAgZGlzYWJsZTogdGhpcy5yb3V0ZS5lbnRyeURpc2FibGVkLFxyXG4gICAgICAgIHN0YXRpY1N0YXRlUGFyYW1zOiB7XHJcbiAgICAgICAgICBzcmM6IFJkdE5hdmlnYXRpb25Tb3VyY2UuQlJFQURDUlVNQixcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICAuLi50aGlzLnJvdXRlLmRhdGEsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGd1YXJkOiBDYW5BY3RpdmF0ZUZuID0gKFxyXG4gICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcclxuICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcclxuICAgICkgPT4ge1xyXG4gICAgICBjb25zdCBpbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dChcclxuICAgICAgICAgIGluamVjdG9yLFxyXG4gICAgICAgICAgdGhpcy5yb3V0ZS5jYW5CZUVudGVyZWQuYmluZCh0aGlzLnJvdXRlKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xyXG4gICAgICAgIGxldCB1cmwgPSBpbmplY3QoUkRUX0NBTk5PVF9CRV9FTlRFUkVEX1BST1ZJREVSKTtcclxuICAgICAgICBpZiAodHlwZW9mIHVybCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmVycm9yKHRoaXMucm91dGUuYWJzb2x1dGVQYXRoKTtcclxuICAgICAgICAgIHVybCA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChcclxuICAgICAgICAgICAgaW5qZWN0b3IsXHJcbiAgICAgICAgICAgIHVybC5iaW5kKHVybCwgbG9jYXRpb24ucGF0aCgpLCBzdGF0ZS51cmwsIHRoaXMucm91dGUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIHJldHVybiByb3V0ZXIucGFyc2VVcmwodXJsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuY2FuQWN0aXZhdGUucHVzaChndWFyZCk7XHJcblxyXG4gICAgcmVzLmNhbkFjdGl2YXRlID0gdGhpcy5jYW5BY3RpdmF0ZTtcclxuICAgIHJlcy5jYW5EZWFjdGl2YXRlID0gdGhpcy5jYW5EZWFjdGl2YXRlO1xyXG5cclxuICAgIC8vIElmIGNoaWxkcmVuIGV4aXN0LCBjaGFuZ2VcclxuICAgIC8vIHtcclxuICAgIC8vICAgIHBhdGg6ICcvcGF0aCcsXHJcbiAgICAvLyAgICBjb21wb25lbnQ6IEZlYXR1cmVDb21wb25lbnQsXHJcbiAgICAvLyAgICBjaGlsZHJlbjogWy4uLl1cclxuICAgIC8vIH1cclxuICAgIC8vIGludG9cclxuICAgIC8vIHtcclxuICAgIC8vICAgIHBhdGg6ICcvcGF0aCcsXHJcbiAgICAvLyAgICBjaGlsZHJlbjogW1xyXG4gICAgLy8gICAgICB7XHJcbiAgICAvLyAgICAgICAgcGF0aDogJycsXHJcbiAgICAvLyAgICAgICAgY29tcG9uZW50OiBGZWF0dXJlQ29tcG9uZW50XHJcbiAgICAvLyAgICAgIH0sXHJcbiAgICAvLyAgICAuLi5cclxuICAgIC8vICAgIF1cclxuICAgIC8vICAgIH1cclxuICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKHRoaXMubG9hZENoaWxkcmVuIHx8IHRoaXMuY29tcG9uZW50KSB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHJlcy5wYXRoO1xyXG4gICAgICAgIHJlcy5wYXRoID0gJyc7XHJcbiAgICAgICAgcmVzLnBhdGhNYXRjaCA9ICdmdWxsJztcclxuICAgICAgICByZXMuY2FuTWF0Y2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmVzID0ge1xyXG4gICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgIGNoaWxkcmVuOiBbcmVzLCAuLi50aGlzLmNoaWxkcmVuXSxcclxuICAgICAgICAgIGNhbkFjdGl2YXRlQ2hpbGQ6IHRoaXMuY2FuQWN0aXZhdGVDaGlsZCxcclxuICAgICAgICAgIGNhbk1hdGNoOiB0aGlzLmdldENhbk1hdGNoKCksXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXMuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMucmVzb2x2ZXJzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJlcy5yZXNvbHZlID0gdGhpcy5yZXNvbHZlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKSB7XHJcbiAgICAgIHJlcy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMgPSB0aGlzLnJ1bkd1YXJkc0FuZFJlc29sdmVycztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDYW5NYXRjaCgpOiBDYW5NYXRjaEZuW10gfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgcGFyYW1NYXAgPSB0aGlzLnJvdXRlLnBhcmFtTWFwO1xyXG4gICAgY29uc3QgaGFzTnVtYmVyUGFyYW1zID0gT2JqZWN0LmtleXMocGFyYW1NYXApLnNvbWUoXHJcbiAgICAgIChwKSA9PiBwYXJhbU1hcFtwIGFzIGtleW9mIFRdID09PSAnbnVtYmVyJ1xyXG4gICAgKTtcclxuICAgIGlmICghaGFzTnVtYmVyUGFyYW1zKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCByb3V0ZVNlZ21lbnRMZW5ndGggPSB0aGlzLnJvdXRlLnBhdGguc3BsaXQoJy8nKS5sZW5ndGg7XHJcbiAgICBjb25zdCByZWdleCA9IHRoaXMucm91dGUucmVnZXhcclxuICAgICAgPyBuZXcgUmVnRXhwKGBeJHt0aGlzLnJvdXRlLnJlZ2V4LnNvdXJjZX0kYClcclxuICAgICAgOiB0aGlzLnJvdXRlLmFic29sdXRlUmVnZXg7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAocm91dGU6IFJvdXRlLCBzZWdtZW50czogVXJsU2VnbWVudFtdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHNlZ21lbnRzXHJcbiAgICAgICAgICAuc2xpY2UoMCwgcm91dGVTZWdtZW50TGVuZ3RoKVxyXG4gICAgICAgICAgLm1hcCgocykgPT4gcy5wYXRoKVxyXG4gICAgICAgICAgLmpvaW4oJy8nKTtcclxuICAgICAgICByZXR1cm4gcmVnZXgudGVzdChwYXRoKTtcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrQ2hpbGRyZW5NYXRjaCgpIHtcclxuICAgIC8vIENoZWNrIHRoYXQgYWxsIHJvdXRlcyBhcmUgcHJlc2VudCBpZiByb3V0ZSBpcyBub3RcclxuICAgIC8vIGxhenkgbG9hZGVkIG1vZHVsZS5cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMubG9hZENoaWxkcmVuICYmXHJcbiAgICAgICh0aGlzLnJvdXRlLmNoaWxkcmVuLmxlbmd0aCA+IDAgfHwgdGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA8IHRoaXMucm91dGUuY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYFJkdFJvdXRlICR7dGhpcy5yb3V0ZS5uYW1lfSBoYXMgJHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZS5jaGlsZHJlbi5sZW5ndGhcclxuICAgICAgICAgIH0gY2hpbGRyZW4sIGJ1dCBSZHRBbmd1bGFyUm91dGUgaGFzICR7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ubGVuZ3RoXHJcbiAgICAgICAgICB9LiBUaGVzZSBudW1iZXJzIG11c3QgbWF0Y2guIERpZCB5b3UgZm9yZ2V0IHRvIGNhbGwgLnNldENoaWxkcmVuKCkgbWV0aG9kIGluIGdsb2JhbCByb3V0ZXMgZGVmaW5pdGlvbj8gUm91dGVzIHdpdGggZm9sbG93aW5nIG5hbWVzIHNob3VsZCBiZSBwcmVzZW50OiAke3RoaXMucm91dGUuY2hpbGRyZW5cclxuICAgICAgICAgICAgLm1hcCgoY2gpID0+IGNoLm5hbWUpXHJcbiAgICAgICAgICAgIC5qb2luKCcsICcpfWBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gdGhpcy5yb3V0ZS5jaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgUmR0Um91dGUgJHt0aGlzLnJvdXRlLm5hbWV9IGhhcyAke1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlLmNoaWxkcmVuLmxlbmd0aFxyXG4gICAgICAgICAgfSBjaGlsZHJlbiwgYnV0IFJkdEFuZ3VsYXJSb3V0ZSBoYXMgJHtcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5sZW5ndGhcclxuICAgICAgICAgIH0uIFRoZXNlIG51bWJlcnMgbXVzdCBtYXRjaC4gRGlkIHlvdSBmb3JnZXQgdG8gY2FsbCAuc2V0Q2hpbGRyZW4oKSBtZXRob2QgaW4gZmVhdHVyZSBzaGVsbCByb3V0ZXMgZGVmaW5pdGlvbj8gUm91dGVzIHdpdGggZm9sbG93aW5nIHBhdGhzIHNob3VsZCBiZSBwcmVzZW50OiAke3RoaXMuY2hpbGRyZW5cclxuICAgICAgICAgICAgLm1hcCgoY2gpID0+IGNoLnBhdGgpXHJcbiAgICAgICAgICAgIC5qb2luKCcsICcpfWBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG4xID0gdGhpcy5jaGlsZHJlbi5tYXAoKGNoKSA9PiBjaC5wYXRoISk7XHJcbiAgICAgIGNvbnN0IG4yID0gdGhpcy5yb3V0ZS5jaGlsZHJlbi5tYXAoKGNoKSA9PiBjaC5wYXRoKTtcclxuICAgICAgbjEuc29ydCgpO1xyXG4gICAgICBuMi5zb3J0KCk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAobjFbaV0gIT09IG4yW2ldKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBQYXRocyBvZiBjaGlsZHJlbiBwcm92aWRlZCBpbiBSZHRSb3V0ZSBhbmRcclxuICAgICAgICAgICAgUmR0QW5ndWxhclJvdXRlIGRvIG5vdCBtYXRjaC4gJHtuMVtpXX0gIT0gJHtuMltpXX1gXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -82,6 +82,7 @@ export class RdtRouteBuilder extends RdtRoute {
82
82
  if (typeof this._path !== 'string') {
83
83
  throw new Error('Please provide path for route. Empty string is acceptable.');
84
84
  }
85
+ this._built = true;
85
86
  this.setRegex();
86
87
  return this;
87
88
  }
@@ -96,11 +97,16 @@ export class RdtRouteBuilder extends RdtRoute {
96
97
  }
97
98
  substituted = substituted.replace(`:${p}`, RdtRouteBuilder.groups[type]);
98
99
  });
99
- this._regex = new RegExp(substituted);
100
+ if (substituted === '') {
101
+ this._regex = null;
102
+ }
103
+ else {
104
+ this._regex = new RegExp(substituted);
105
+ }
100
106
  }
101
107
  static groups = {
102
108
  string: '(.+)',
103
109
  number: '(\\d+)',
104
110
  };
105
111
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvcmR0LXJvdXRlL3JkdC1yb3V0ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUM7QUFFcEMsTUFBTSxPQUFPLGVBQXdDLFNBQVEsUUFBVztJQUN0RTs7Ozs7O09BTUc7SUFDSCxlQUFlLENBQUMsRUFBaUI7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSTtRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsSUFBWTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFZLENBQUM7Z0JBQzVDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztvQkFDN0MsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLElBQVU7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxTQUFrQixFQUFFLElBQXlCO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsR0FBRyxRQUFvQjtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzVCLEtBQXlCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUM1QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsNERBQTRELENBQzdELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sSUFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRU8sUUFBUTtRQUNkLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQVksQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDekMsQ0FBQztZQUNELFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sTUFBTSxDQUFVLE1BQU0sR0FBRztRQUMvQixNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSxRQUFRO0tBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuL3JkdC1yb3V0ZSc7XHJcblxyXG5jb25zdCBERUZBVUxUX1BBUkFNX1RZUEUgPSAnbnVtYmVyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZHRSb3V0ZUJ1aWxkZXI8VCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBSZHRSb3V0ZTxUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FuQmVFbnRlcmVkIGZ1bmN0aW9uIGlzIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHdoaWNoXHJcbiAgICogbGV0cyBmcmFtZXdvcmsgaGlkZSBtZW51IGJ1dHRvbnMgYW5kIGRpc2FibGUgbGlua3MuXHJcbiAgICogRnVuY3Rpb24gaXMgcnVuIGluIGVudmlyb25tZW50IGluamVjdGlvbiBjb250ZXh0LCBzb1xyXG4gICAqIHlvdSBjYW4gaW5qZWN0IGdsb2JhbCBzZXJ2aWNlcywgdG9rZW5zLCBldGMuXHJcbiAgICogQHBhcmFtIGZuXHJcbiAgICovXHJcbiAgc2V0Q2FuQmVFbnRlcmVkKGZuOiAoKSA9PiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jYW5CZUVudGVyZWQgPSBmbjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnkgZGlzYWJsZWQgcm91dGUgd2lsbCBnZW5lcmF0ZSBkaXNhYmxlZCBicmVhZGNydW1iLlxyXG4gICAqIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgY29tcG9uZW50IG5vciBtb2R1bGUgYWRkZWQgdG8gaXQuXHJcbiAgICogQHBhcmFtIHZhbHVlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBzZXRFbnRyeURpc2FibGVkKHZhbHVlID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5fZW50cnlEaXNhYmxlZCA9IHZhbHVlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHBhdGggcmVsYXRpdmUgdG8gcGFyZW50LiBJdCBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcyBBbmd1bGFyIHJvdXRlIHBhdGggaW5jbHVkaW5nIHBhcmFtZXRlcnMuXHJcbiAgICogWW91IG5lZWQgdG8gY2FsbCBzZXRQYXJhbSgpIGZvciBlYWNoIHBhcmFtZXRlciB5b3UgdXNlIGluIHRoZSBwYXRoLlxyXG4gICAqL1xyXG4gIHNldFBhdGgocGF0aDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wYXRoID0gcGF0aDtcclxuICAgIGNvbnN0IHMgPSBwYXRoLnNwbGl0KCcvJyk7XHJcbiAgICBjb25zdCBwYXJhbXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBzLmZvckVhY2goKHBhcnQpID0+IHtcclxuICAgICAgaWYgKHBhcnQuaW5jbHVkZXMoJzonKSkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtID0gcGFydC5zcGxpdCgnOicpWzFdIGFzIGtleW9mIFQ7XHJcbiAgICAgICAgaWYgKHBhcmFtKSB7XHJcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbU1hcFtwYXJhbV0pIHtcclxuICAgICAgICAgICAgdGhpcy5fcGFyYW1NYXBbcGFyYW1dID0gREVGQVVMVF9QQVJBTV9UWVBFO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9yZGVyZWRQYXJhbXMgPSBwYXJhbXM7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgQW5ndWxhciByb3V0ZSBkYXRhLlxyXG4gICAqIEBwYXJhbSBkYXRhIEFuZ3VsYXIgcm91dGUgZGF0YSBvYmplY3QuIEJyZWFkY3J1bWIga2V5IGlzIG1lcmdlZCBpbnRvIGl0LlxyXG4gICAqL1xyXG4gIHNldERhdGEoZGF0YTogRGF0YSkge1xyXG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgcGFyYW1ldGVyIHR5cGUgYW5kIGxldHMgZnJhbWV3b3JrIHBhcnNlIGl0LlxyXG4gICAqIEBwYXJhbSBwYXJhbU5hbWVcclxuICAgKiBAcGFyYW0gdHlwZVxyXG4gICAqL1xyXG4gIHNldFBhcmFtKHBhcmFtTmFtZToga2V5b2YgVCwgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJykge1xyXG4gICAgdGhpcy5fcGFyYW1NYXBbcGFyYW1OYW1lXSA9IHR5cGU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbmFtZSB0byBkaXNwbGF5IGluIGJyZWFkY3J1bWIsIGV0Yy5cclxuICAgKi9cclxuICBzZXROYW1lKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGwgLmJ1aWxkKCkgb24gY2hpbGRyZW4gYmVmb3JlIHlvdSBjYWxsIHRoaXMgbWV0aG9kIVxyXG4gICAqL1xyXG4gIHNldENoaWxkcmVuKC4uLmNoaWxkcmVuOiBSZHRSb3V0ZVtdKSB7XHJcbiAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICAoY2hpbGQgYXMgUmR0Um91dGVCdWlsZGVyKS5fcGFyZW50ID0gdGhpcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgYnVpbGQoKSB7XHJcbiAgICBpZiAodHlwZW9mIHRoaXMuX3BhdGggIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnUGxlYXNlIHByb3ZpZGUgcGF0aCBmb3Igcm91dGUuIEVtcHR5IHN0cmluZyBpcyBhY2NlcHRhYmxlLidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0UmVnZXgoKTtcclxuICAgIHJldHVybiB0aGlzIGFzIFJkdFJvdXRlPFQ+O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRSZWdleCgpIHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5rZXlzKHRoaXMuX3BhcmFtTWFwKTtcclxuICAgIHBhcmFtcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcclxuICAgIGxldCBzdWJzdGl0dXRlZCA9IHRoaXMucGF0aDtcclxuICAgIHBhcmFtcy5mb3JFYWNoKChwKSA9PiB7XHJcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLl9wYXJhbU1hcFtwIGFzIGtleW9mIFRdO1xyXG4gICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtcyBpcyBub3Qgc2V0IGknKTtcclxuICAgICAgfVxyXG4gICAgICBzdWJzdGl0dXRlZCA9IHN1YnN0aXR1dGVkLnJlcGxhY2UoYDoke3B9YCwgUmR0Um91dGVCdWlsZGVyLmdyb3Vwc1t0eXBlXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9yZWdleCA9IG5ldyBSZWdFeHAoc3Vic3RpdHV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgZ3JvdXBzID0ge1xyXG4gICAgc3RyaW5nOiAnKC4rKScsXHJcbiAgICBudW1iZXI6ICcoXFxcXGQrKScsXHJcbiAgfTtcclxufVxyXG4iXX0=
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvcm91dGVyL3NyYy9saWIvcmR0LXJvdXRlL3JkdC1yb3V0ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkMsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUM7QUFFcEMsTUFBTSxPQUFPLGVBQXdDLFNBQVEsUUFBVztJQUN0RTs7Ozs7O09BTUc7SUFDSCxlQUFlLENBQUMsRUFBaUI7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSTtRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsSUFBWTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFZLENBQUM7Z0JBQzVDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztvQkFDN0MsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLElBQVU7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxTQUFrQixFQUFFLElBQXlCO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsR0FBRyxRQUFvQjtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzVCLEtBQXlCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUM1QyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsNERBQTRELENBQzdELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sSUFBbUIsQ0FBQztJQUM3QixDQUFDO0lBRU8sUUFBUTtRQUNkLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQVksQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDekMsQ0FBQztZQUNELFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFVLE1BQU0sR0FBRztRQUMvQixNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSxRQUFRO0tBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICcuL3JkdC1yb3V0ZSc7XHJcblxyXG5jb25zdCBERUZBVUxUX1BBUkFNX1RZUEUgPSAnbnVtYmVyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZHRSb3V0ZUJ1aWxkZXI8VCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBSZHRSb3V0ZTxUPiB7XHJcbiAgLyoqXHJcbiAgICogQ2FuQmVFbnRlcmVkIGZ1bmN0aW9uIGlzIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHdoaWNoXHJcbiAgICogbGV0cyBmcmFtZXdvcmsgaGlkZSBtZW51IGJ1dHRvbnMgYW5kIGRpc2FibGUgbGlua3MuXHJcbiAgICogRnVuY3Rpb24gaXMgcnVuIGluIGVudmlyb25tZW50IGluamVjdGlvbiBjb250ZXh0LCBzb1xyXG4gICAqIHlvdSBjYW4gaW5qZWN0IGdsb2JhbCBzZXJ2aWNlcywgdG9rZW5zLCBldGMuXHJcbiAgICogQHBhcmFtIGZuXHJcbiAgICovXHJcbiAgc2V0Q2FuQmVFbnRlcmVkKGZuOiAoKSA9PiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jYW5CZUVudGVyZWQgPSBmbjtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnkgZGlzYWJsZWQgcm91dGUgd2lsbCBnZW5lcmF0ZSBkaXNhYmxlZCBicmVhZGNydW1iLlxyXG4gICAqIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgY29tcG9uZW50IG5vciBtb2R1bGUgYWRkZWQgdG8gaXQuXHJcbiAgICogQHBhcmFtIHZhbHVlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBzZXRFbnRyeURpc2FibGVkKHZhbHVlID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5fZW50cnlEaXNhYmxlZCA9IHZhbHVlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHBhdGggcmVsYXRpdmUgdG8gcGFyZW50LiBJdCBpcyBkZWZpbmVkIHRoZSBzYW1lIHdheSBhcyBBbmd1bGFyIHJvdXRlIHBhdGggaW5jbHVkaW5nIHBhcmFtZXRlcnMuXHJcbiAgICogWW91IG5lZWQgdG8gY2FsbCBzZXRQYXJhbSgpIGZvciBlYWNoIHBhcmFtZXRlciB5b3UgdXNlIGluIHRoZSBwYXRoLlxyXG4gICAqL1xyXG4gIHNldFBhdGgocGF0aDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wYXRoID0gcGF0aDtcclxuICAgIGNvbnN0IHMgPSBwYXRoLnNwbGl0KCcvJyk7XHJcbiAgICBjb25zdCBwYXJhbXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBzLmZvckVhY2goKHBhcnQpID0+IHtcclxuICAgICAgaWYgKHBhcnQuaW5jbHVkZXMoJzonKSkge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtID0gcGFydC5zcGxpdCgnOicpWzFdIGFzIGtleW9mIFQ7XHJcbiAgICAgICAgaWYgKHBhcmFtKSB7XHJcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9wYXJhbU1hcFtwYXJhbV0pIHtcclxuICAgICAgICAgICAgdGhpcy5fcGFyYW1NYXBbcGFyYW1dID0gREVGQVVMVF9QQVJBTV9UWVBFO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9yZGVyZWRQYXJhbXMgPSBwYXJhbXM7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgQW5ndWxhciByb3V0ZSBkYXRhLlxyXG4gICAqIEBwYXJhbSBkYXRhIEFuZ3VsYXIgcm91dGUgZGF0YSBvYmplY3QuIEJyZWFkY3J1bWIga2V5IGlzIG1lcmdlZCBpbnRvIGl0LlxyXG4gICAqL1xyXG4gIHNldERhdGEoZGF0YTogRGF0YSkge1xyXG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZXMgcGFyYW1ldGVyIHR5cGUgYW5kIGxldHMgZnJhbWV3b3JrIHBhcnNlIGl0LlxyXG4gICAqIEBwYXJhbSBwYXJhbU5hbWVcclxuICAgKiBAcGFyYW0gdHlwZVxyXG4gICAqL1xyXG4gIHNldFBhcmFtKHBhcmFtTmFtZToga2V5b2YgVCwgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJykge1xyXG4gICAgdGhpcy5fcGFyYW1NYXBbcGFyYW1OYW1lXSA9IHR5cGU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgbmFtZSB0byBkaXNwbGF5IGluIGJyZWFkY3J1bWIsIGV0Yy5cclxuICAgKi9cclxuICBzZXROYW1lKG5hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGwgLmJ1aWxkKCkgb24gY2hpbGRyZW4gYmVmb3JlIHlvdSBjYWxsIHRoaXMgbWV0aG9kIVxyXG4gICAqL1xyXG4gIHNldENoaWxkcmVuKC4uLmNoaWxkcmVuOiBSZHRSb3V0ZVtdKSB7XHJcbiAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuO1xyXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xyXG4gICAgICAoY2hpbGQgYXMgUmR0Um91dGVCdWlsZGVyKS5fcGFyZW50ID0gdGhpcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgYnVpbGQoKSB7XHJcbiAgICBpZiAodHlwZW9mIHRoaXMuX3BhdGggIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnUGxlYXNlIHByb3ZpZGUgcGF0aCBmb3Igcm91dGUuIEVtcHR5IHN0cmluZyBpcyBhY2NlcHRhYmxlLidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2J1aWx0ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2V0UmVnZXgoKTtcclxuICAgIHJldHVybiB0aGlzIGFzIFJkdFJvdXRlPFQ+O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRSZWdleCgpIHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5rZXlzKHRoaXMuX3BhcmFtTWFwKTtcclxuICAgIHBhcmFtcy5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKTtcclxuICAgIGxldCBzdWJzdGl0dXRlZCA9IHRoaXMucGF0aDtcclxuICAgIHBhcmFtcy5mb3JFYWNoKChwKSA9PiB7XHJcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLl9wYXJhbU1hcFtwIGFzIGtleW9mIFRdO1xyXG4gICAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtcyBpcyBub3Qgc2V0IGknKTtcclxuICAgICAgfVxyXG4gICAgICBzdWJzdGl0dXRlZCA9IHN1YnN0aXR1dGVkLnJlcGxhY2UoYDoke3B9YCwgUmR0Um91dGVCdWlsZGVyLmdyb3Vwc1t0eXBlXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc3Vic3RpdHV0ZWQgPT09ICcnKSB7XHJcbiAgICAgIHRoaXMuX3JlZ2V4ID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3JlZ2V4ID0gbmV3IFJlZ0V4cChzdWJzdGl0dXRlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBncm91cHMgPSB7XHJcbiAgICBzdHJpbmc6ICcoLispJyxcclxuICAgIG51bWJlcjogJyhcXFxcZCspJyxcclxuICB9O1xyXG59XHJcbiJdfQ==
@@ -8,7 +8,7 @@ export function ALWAYS_TRUE() {
8
8
  export class RdtRoute {
9
9
  orderedParams = [];
10
10
  _paramMap = {};
11
- _regex;
11
+ _regex = null;
12
12
  paramMappings = [];
13
13
  _staticParams = {};
14
14
  _queryParams = {};
@@ -20,6 +20,7 @@ export class RdtRoute {
20
20
  _children = [];
21
21
  _entryDisabled = false;
22
22
  _canBeEntered = ALWAYS_TRUE;
23
+ _built = false;
23
24
  _absoluteRegex;
24
25
  /**
25
26
  * Map of parameters and their types.
@@ -79,7 +80,13 @@ export class RdtRoute {
79
80
  if (this._absoluteRegex) {
80
81
  return this._absoluteRegex;
81
82
  }
82
- if (this._parent) {
83
+ if (!this._regex) {
84
+ this._absoluteRegex = new RegExp('^/$');
85
+ if (this._parent) {
86
+ throw new Error('Nested route with empty path is not allowed.');
87
+ }
88
+ }
89
+ else if (this._parent) {
83
90
  // Remove initial ^ and ending $
84
91
  const parent = this._parent.absoluteRegex.source.slice(1, -1);
85
92
  this._absoluteRegex = new RegExp('^' + RdtStringUtils.joinPaths(parent, this._regex.source) + '$');
@@ -216,7 +223,7 @@ export class RdtRoute {
216
223
  return path;
217
224
  }
218
225
  toAngularRoute() {
219
- if (!this._regex) {
226
+ if (!this._built) {
220
227
  throw new Error('You have to first call .build() on route!');
221
228
  }
222
229
  return new RdtAngularRoute(this);
@@ -291,11 +298,11 @@ export class RdtRoute {
291
298
  clone._entryDisabled = this._entryDisabled;
292
299
  clone.orderedParams = [...this.orderedParams];
293
300
  clone._paramMap = { ...this._paramMap };
294
- clone._regex = new RegExp(this._regex);
301
+ clone._regex = this._regex ? new RegExp(this._regex) : null;
295
302
  clone.paramMappings = this.paramMappings;
296
303
  clone._staticParams = { ...this._staticParams };
297
304
  clone._stateParams = { ...this._stateParams };
298
305
  return clone;
299
306
  }
300
307
  }
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3JkdC1yb3V0ZS9yZHQtcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBOEIscUJBQXFCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFNUUsTUFBTSxVQUFVLFdBQVc7SUFDekIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxPQUFPLFFBQVE7SUFDVCxhQUFhLEdBQWEsRUFBRSxDQUFDO0lBQzdCLFNBQVMsR0FBb0IsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sQ0FBVTtJQUNoQixhQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUNuQyxhQUFhLEdBQWUsRUFBRSxDQUFDO0lBQy9CLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixLQUFLLEdBQVMsRUFBRSxDQUFDO0lBRWpCLEtBQUssQ0FBVTtJQUNmLEtBQUssQ0FBVTtJQUNmLE9BQU8sR0FBb0IsSUFBSSxDQUFDO0lBQ2hDLFNBQVMsR0FBZSxFQUFFLENBQUM7SUFDM0IsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUN2QixhQUFhLEdBQWtCLFdBQVcsQ0FBQztJQUU3QyxjQUFjLENBQVU7SUFFaEM7O09BRUc7SUFDSCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUks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Q0FBQyxhQUFhLENBQUM7UUFDekMsS0FBSyxDQUFDLGFBQWEsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hELEtBQUssQ0FBQyxZQUFZLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM5QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGF0YSwgUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U3RyaW5nVXRpbHMgfSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQgeyBSZHRBbmd1bGFyUm91dGUgfSBmcm9tICcuL3JkdC1hbmd1bGFyLXJvdXRlJztcclxuaW1wb3J0IHsgUGFyYW1NYXBwaW5nLCBQYXJhbVR5cGVNYXAsIFJkdFJlYWRvbmx5UGFyYW1ldGVycyB9IGZyb20gJy4vdXRpbHMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEFMV0FZU19UUlVFKCkge1xyXG4gIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmR0Um91dGU8VCBleHRlbmRzIG9iamVjdCA9IGFueT4ge1xyXG4gIHByb3RlY3RlZCBvcmRlcmVkUGFyYW1zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHByb3RlY3RlZCBfcGFyYW1NYXA6IFBhcmFtVHlwZU1hcDxUPiA9IHt9O1xyXG4gIHByb3RlY3RlZCBfcmVnZXghOiBSZWdFeHA7XHJcbiAgcHJvdGVjdGVkIHBhcmFtTWFwcGluZ3M6IFBhcmFtTWFwcGluZ1tdID0gW107XHJcbiAgcHJvdGVjdGVkIF9zdGF0aWNQYXJhbXM6IFBhcnRpYWw8VD4gPSB7fTtcclxuICBwcm90ZWN0ZWQgX3F1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcclxuICBwcm90ZWN0ZWQgX3N0YXRlUGFyYW1zOiBQYXJhbXMgPSB7fTtcclxuICBwcm90ZWN0ZWQgX2RhdGE6IERhdGEgPSB7fTtcclxuXHJcbiAgcHJvdGVjdGVkIF9uYW1lITogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfcGF0aCE6IHN0cmluZztcclxuICBwcm90ZWN0ZWQgX3BhcmVudDogUmR0Um91dGUgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgX2NoaWxkcmVuOiBSZHRSb3V0ZVtdID0gW107XHJcbiAgcHJvdGVjdGVkIF9lbnRyeURpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIF9jYW5CZUVudGVyZWQ6ICgpID0+IGJvb2xlYW4gPSBBTFdBWVNfVFJVRTtcclxuXHJcbiAgcHJpdmF0ZSBfYWJzb2x1dGVSZWdleD86IFJlZ0V4cDtcclxuXHJcbiAgLyoqXHJcbiAgICogTWFwIG9mIHBhcmFtZXRlcnMgYW5kIHRoZWlyIHR5cGVzLlxyXG4gICAqL1xyXG4gIGdldCBwYXJhbU1hcCgpOiBSZWFkb25seTxQYXJhbVR5cGVNYXA8VD4+IHtcclxuICAgIHJldHVybiB0aGlzLl9wYXJhbU1hcDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEh1bWFuIHJlYWRhYmxlIG5hbWUgZm9yIGRpc3BsYXkgaW4gYnJlYWRjcnVtYnMsIHRpdGxlLCBldGMuXHJcbiAgICovXHJcbiAgZ2V0IG5hbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhdGggb2YgdGhlIHJvdXRlIHJlbGF0aXZlIHRvIHBhcmVudCByb3V0ZS5cclxuICAgKi9cclxuICBnZXQgcGF0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXRoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyZW50IHJvdXRlLlxyXG4gICAqL1xyXG4gIGdldCBwYXJlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hpbGQgcm91dGVzLlxyXG4gICAqL1xyXG4gIGdldCBjaGlsZHJlbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFic29sdXRlIHBhdGggb2YgcGFyZW50IHJvdXRlIG9yICcvJyBpZiB0aGVyZSBpcyBubyBwYXJlbnQuXHJcbiAgICogSG9zdG5hbWUgZXhjbHVkZWQuXHJcbiAgICovXHJcbiAgZ2V0IGJhc2VQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50ID8gdGhpcy5fcGFyZW50LmFic29sdXRlUGF0aCA6ICcvJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFic29sdXRlIHBhdGggb2YgdGhlIHJvdXRlLiBIb3N0bmFtZSBleGNsdWRlZC5cclxuICAgKi9cclxuICBnZXQgYWJzb2x1dGVQYXRoKCkge1xyXG4gICAgcmV0dXJuIFJkdFN0cmluZ1V0aWxzLmpvaW5QYXRocyh0aGlzLmJhc2VQYXRoLCB0aGlzLl9wYXRoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ3VsYXIgZXhwcmVzc2lvbiByb3V0ZSBwYXRoIHJlbGF0aXZlIHRvIHBhcmVudCByb3V0ZS5cclxuICAgKiBIb3N0bmFtZSBleGNsdWRlZC5cclxuICAgKi9cclxuICBnZXQgcmVnZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVnZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggb25seSB0aGlzIHJvdXRlIChub3QgY2hpbGRyZW5cclxuICAgKiBvciBwYXJlbnQgcm91dGVzKS4gSG9zdG5hbWUgZXhjbHVkZWQuXHJcbiAgICovXHJcbiAgZ2V0IGFic29sdXRlUmVnZXgoKTogUmVnRXhwIHtcclxuICAgIGlmICh0aGlzLl9hYnNvbHV0ZVJlZ2V4KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9hYnNvbHV0ZVJlZ2V4O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgLy8gUmVtb3ZlIGluaXRpYWwgXiBhbmQgZW5kaW5nICRcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fcGFyZW50LmFic29sdXRlUmVnZXguc291cmNlLnNsaWNlKDEsIC0xKTtcclxuICAgICAgdGhpcy5fYWJzb2x1dGVSZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgJ14nICsgUmR0U3RyaW5nVXRpbHMuam9pblBhdGhzKHBhcmVudCwgdGhpcy5fcmVnZXguc291cmNlKSArICckJ1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYWJzb2x1dGVSZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgJ14nICsgUmR0U3RyaW5nVXRpbHMuam9pblBhdGhzKCcvJywgdGhpcy5fcmVnZXguc291cmNlKSArICckJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlUmVnZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZW5vdGVzIGRpc2FibGVkIHJvdXRlIGVudHJ5LlxyXG4gICAqIElmIHRydWUsIHJvdXRlIHNob3VsZCBoYXZlIG5vIE5nTW9kdWxlXHJcbiAgICogb3IgY29tcG9uZW50IGFuZCBvbmx5IHNlcnZlcyBhcyB2aXJ0dWFsIG1vZHVsZVxyXG4gICAqIGZvciBicmVhZGNydW1iLlxyXG4gICAqL1xyXG4gIGdldCBlbnRyeURpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VudHJ5RGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGF0aWNhbGx5IHNldCBzdGF0ZSBwYXJhbXMgdXNlZCB3aGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBpbnN0YW5jZS5cclxuICAgKi9cclxuICBnZXQgc3RhdGVQYXJhbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGF0aWNhbGx5IHNldCBxdWVyeSBwYXJhbXMgdXNlZCB3aGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBpbnN0YW5jZS5cclxuICAgKi9cclxuICBnZXQgcXVlcnlQYXJhbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gdXJsIEFic29sdXRlIHBhdGggdG8gdGVzdC5cclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHVybCBtYXRjaGVzIHRoaXMgcm91dGUuXHJcbiAgICovXHJcbiAgdGVzdFVybCh1cmw6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYWJzb2x1dGVSZWdleC50ZXN0KHVybCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGF0aWNhbGx5IHNldCBwYXJhbWV0ZXJzIHVzZWQgd2hlbiBuYXZpZ2F0aW5nIHRvIHRoaXMgaW5zdGFuY2UuXHJcbiAgICovXHJcbiAgZ2V0IHN0YXRpY1BhcmFtcygpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuX3N0YXRpY1BhcmFtcyB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0NhbkJlRW50ZXJlZEd1YXJkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbkJlRW50ZXJlZCAhPT0gQUxXQVlTX1RSVUU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHRoYXQgaXMgcGFzc2VkIHRvIEFuZ3VsYXIgcm91dGUgZGVmaW5pdGlvbi5cclxuICAgKi9cclxuICBnZXQgZGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0YSBndWFyZCB0aGF0IGlzIHVzZWQgYnkgW3JkdFJvdXRlckxpbmtdIGFuZCBSZHRNZW51XHJcbiAgICogdG8gZGV0ZXJtaW5lIGlmIHJvdXRlIGNhbiBiZSBlbnRlcmVkLlxyXG4gICAqIEBwYXJhbSBpbmplY3RvciBFbnZpcm9ubWVudCBvciBjdXN0b20gaW5qZWN0b3IuXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiByb3V0ZSBjYW4gYmUgZW50ZXJlZC5cclxuICAgKi9cclxuICBjYW5CZUVudGVyZWQoaW5qZWN0b3I/OiBJbmplY3Rvcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGluamVjdG9yXHJcbiAgICAgID8gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCB0aGlzLl9jYW5CZUVudGVyZWQpXHJcbiAgICAgIDogdGhpcy5fY2FuQmVFbnRlcmVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHRyYWN0cyB1cmwgcGFyYW1ldGVycyBmcm9tIGFic29sdXRlIHBhdGggZm9yIHRoaXMgcGF0aCBhbmQgZWFjaCBwYXJlbnQuXHJcbiAgICovXHJcbiAgcGFyc2VBYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IFJkdFJlYWRvbmx5UGFyYW1ldGVycyB8IG51bGwge1xyXG4gICAgY29uc3QgcmVnID0gdGhpcy5hYnNvbHV0ZVJlZ2V4O1xyXG4gICAgaWYgKCFyZWcudGVzdCh1cmwpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlZy5leGVjKHVybCk7XHJcbiAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICBjb25zdCB2YWx1ZXMgPSBtYXRjaGVzLnNsaWNlKDEpLnJldmVyc2UoKTtcclxuICAgICAgY29uc3Qgb2JqID0gdGhpcy5maWxsKHZhbHVlcyk7XHJcbiAgICAgIGlmIChvYmopIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJkdFJlYWRvbmx5UGFyYW1ldGVycyhvYmopO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsbCh2YWx1ZXM6IHN0cmluZ1tdLCByZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkge1xyXG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXkgaW4ga2V5b2YgVF0/OiBzdHJpbmcgfCBudW1iZXIgfSA9IHt9O1xyXG4gICAgY29uc3QgcmV2ZXJzZWRQYXJhbXMgPSB0aGlzLm9yZGVyZWRQYXJhbXMuc2xpY2UoKS5yZXZlcnNlKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldmVyc2VkUGFyYW1zLmxlbmd0aCAmJiBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGtleSA9IHJldmVyc2VkUGFyYW1zW2ldIGFzIGtleW9mIFQ7XHJcbiAgICAgIGNvbnN0IG1hcHBlZEtleSA9XHJcbiAgICAgICAgdGhpcy5wYXJhbU1hcHBpbmdzLmZpbmQoKG0pID0+IG0udXJsTmFtZSA9PT0ga2V5KT8udGFibGVOYW1lID8/IGtleTtcclxuICAgICAgbGV0IHZhbDogc3RyaW5nIHwgbnVtYmVyID0gdmFsdWVzW2ldO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX3BhcmFtTWFwW2tleV0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgdmFsID0gcGFyc2VJbnQodmFsKTtcclxuICAgICAgfVxyXG4gICAgICBwYXJhbXNbbWFwcGVkS2V5IGFzIGtleW9mIFRdID0gdmFsO1xyXG4gICAgfVxyXG4gICAgcmVzW3RoaXMuYWJzb2x1dGVQYXRoXSA9IHBhcmFtcztcclxuXHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA+IHJldmVyc2VkUGFyYW1zLmxlbmd0aCAmJiB0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgdGhpcy5fcGFyZW50LmZpbGwodmFsdWVzLnNsaWNlKHJldmVyc2VkUGFyYW1zLmxlbmd0aCksIHJlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsbHMgcGFyYW1ldGVycyBpbiBwYXRoIHdpdGggdmFsdWVzIGZyb20gcGFyYW1NYXAuXHJcbiAgICogVXNlIHdpdGhTdGF0aWNQYXJhbXMoKSBiZWZvcmVoYW5kIGluIGNhc2UgcGFyZW50IHBhdGhzIGNvbnRhaW4gcGFyYW1ldGVycy5cclxuICAgKiBAcGFyYW0gcGFyYW1NYXAgTXVzdCBjb250YWluIGFsbCBwYXJhbWV0ZXJzIGZvciB0aGlzIHJvdXRlLlxyXG4gICAqIEByZXR1cm5zIEFic29sdXRlIHBhdGguXHJcbiAgICovXHJcbiAgY3JlYXRlQWJzb2x1dGVVcmwocGFyYW1NYXA6IFBhcnRpYWw8VD4gPSB0aGlzLl9zdGF0aWNQYXJhbXMpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVXJsKHRoaXMuYWJzb2x1dGVQYXRoLCBwYXJhbU1hcCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUmR0U3RyaW5nVXRpbHMuam9pblBhdGhzKFxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5jcmVhdGVBYnNvbHV0ZVVybCgpLFxyXG4gICAgICAgIHRoaXMuY3JlYXRlUmVsYXRpdmVVcmwocGFyYW1NYXApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVSZWxhdGl2ZVVybChwYXJhbU1hcDogUGFydGlhbDxUPiA9IHRoaXMuX3N0YXRpY1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVXJsKHRoaXMucGF0aCwgcGFyYW1NYXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVVcmwocGF0aDogc3RyaW5nLCBwYXJhbU1hcDogUGFydGlhbDxUPikge1xyXG4gICAgY29uc3QgcGFyYW1OYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuX3BhcmFtTWFwKTtcclxuICAgIHBhcmFtTmFtZXMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XHJcbiAgICBjb25zdCBleHRlbmRlZFBhcmFtTWFwOiBhbnkgPSB7IC4uLnBhcmFtTWFwIH07XHJcblxyXG4gICAgdGhpcy5wYXJhbU1hcHBpbmdzLmZvckVhY2goKG1hcHBpbmcpID0+IHtcclxuICAgICAgaWYgKG1hcHBpbmcudGFibGVOYW1lIGluIHBhcmFtTWFwKSB7XHJcbiAgICAgICAgZXh0ZW5kZWRQYXJhbU1hcFttYXBwaW5nLnVybE5hbWVdID0gKHBhcmFtTWFwIGFzIGFueSlbXHJcbiAgICAgICAgICBtYXBwaW5nLnRhYmxlTmFtZVxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHBhcmFtTmFtZXMuZm9yRWFjaCgocGFyYW0pID0+IHtcclxuICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShgOiR7cGFyYW19YCwgYCR7ZXh0ZW5kZWRQYXJhbU1hcFtwYXJhbSBhcyBrZXlvZiBUXX1gKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgdG9Bbmd1bGFyUm91dGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuX3JlZ2V4KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gZmlyc3QgY2FsbCAuYnVpbGQoKSBvbiByb3V0ZSEnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgUmR0QW5ndWxhclJvdXRlPFQ+KHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvdmlkZXMgc3RhdGljIG1hcHBpbmcgZm9yIHBhcmFtZXRlciBuYW1lcyB0YWJsZU5hbWUgLT4gdXJsTmFtZS5cclxuICAgKiBSZXR1cm5zIG5ldyBpbnN0YW5jZSBvZiBSZHRSb3V0ZTxUPiB0aGF0IGlzIGNsb25lIG9mXHJcbiAgICogdGhpcyByb3V0ZSBhbmQgaXRzIHBhcmVudHMgKE5PVCBjaGlsZHJlbikuXHJcbiAgICogQHJldHVybnMgQ2xvbmUgb2YgdGhpcyByb3V0ZSB3aXRoIG1hcHBlZCBwYXJhbWV0ZXIgbmFtZXMuXHJcbiAgICovXHJcbiAgd2l0aFBhcmFtTWFwcGluZ3MobWFwcGluZ3M6IFBhcmFtTWFwcGluZ1tdKSB7XHJcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcclxuICAgIGNsb25lLnBhcmFtTWFwcGluZ3MgPSBtYXBwaW5ncztcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgc3RhdGljIHBhcmFtZXRlcnMgZm9yIHRoaXMgcm91dGUuXHJcbiAgICogQHBhcmFtIHBhcmFtcyBTdGF0aWMgcGFyYW1ldGVycyBmb3IgdGhpcyByb3V0ZS5cclxuICAgKiBAcmV0dXJucyBDbG9uZSBvZiB0aGlzIHdpdGggc3RhdGljIHBhcmFtZXRlcnMgc2V0LlxyXG4gICAqL1xyXG4gIHdpdGhTdGF0aWNQYXJhbXMocGFyYW1zOiBUKTogUmR0Um91dGU8VD47XHJcbiAgd2l0aFN0YXRpY1BhcmFtczxUMiBleHRlbmRzIG9iamVjdD4oXHJcbiAgICByb3V0ZTogUmR0Um91dGU8VDI+LFxyXG4gICAgcGFyYW1zOiBUMlxyXG4gICk6IFJkdFJvdXRlPFQ+O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHBhcmFtZXRlcnMgZm9yIGl0c2VsZiBvciBwYXJlbnRzLlxyXG4gICAqIFJldHVybnMgbmV3IGluc3RhbmNlIG9mIFJkdFJvdXRlPFQ+IHRoYXQgaXMgY2xvbmUgb2ZcclxuICAgKiB0aGlzIHJvdXRlIGFuZCBpdHMgcGFyZW50cyAoTk9UIGNoaWxkcmVuKS5cclxuICAgKiBAcmV0dXJucyBDbG9uZSBvZiB0aGlzIHJvdXRlIHdpdGggc3RhdGljIHBhcmFtZXRlcnMgc2V0LlxyXG4gICAqL1xyXG4gIHdpdGhTdGF0aWNQYXJhbXM8VDIgZXh0ZW5kcyBvYmplY3Q+KHBhcmFtMTogUmR0Um91dGU8VDI+IHwgVCwgcGFyYW0yPzogVDIpIHtcclxuICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZSgpO1xyXG5cclxuICAgIGlmIChwYXJhbTIpIHtcclxuICAgICAgY29uc3Qgcm91dGVBYnNQYXRoID0gKHBhcmFtMSBhcyBSZHRSb3V0ZTxUMj4pLmFic29sdXRlUGF0aDtcclxuICAgICAgbGV0IGN1cnJlbnQ6IFJkdFJvdXRlIHwgbnVsbCA9IGNsb25lO1xyXG5cclxuICAgICAgd2hpbGUgKGN1cnJlbnQpIHtcclxuICAgICAgICBpZiAoY3VycmVudC5hYnNvbHV0ZVBhdGggPT09IHJvdXRlQWJzUGF0aCkge1xyXG4gICAgICAgICAgY3VycmVudC5fc3RhdGljUGFyYW1zID0gcGFyYW0yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5fcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjbG9uZS5fc3RhdGljUGFyYW1zID0gcGFyYW0xIGFzIFQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFBhcmFtcykge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5fcXVlcnlQYXJhbXMgPSB7IC4uLnF1ZXJ5UGFyYW1zIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoU3RhdGVQYXJhbXMoc3RhdGVQYXJhbXM6IFBhcmFtcykge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5fc3RhdGVQYXJhbXMgPSB7IC4uLnN0YXRlUGFyYW1zIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcmV0dXJucyBQYXJ0aWFsIG9mIG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgcHJvcGVydGllcyBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoaXMgcm91dGUuXHJcbiAgICovXHJcbiAgZXh0cmFjdFJvdXRlUGFyYW1zKHJvdzogVCk6IFBhcnRpYWw8VD4ge1xyXG4gICAgY29uc3QgcmVzOiBQYXJ0aWFsPFQ+ID0ge307XHJcblxyXG4gICAgdGhpcy5vcmRlcmVkUGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hcHBpbmcgPSB0aGlzLnBhcmFtTWFwcGluZ3MuZmluZCgobSkgPT4gbS51cmxOYW1lID09PSBwYXJhbSk7XHJcbiAgICAgIGNvbnN0IG1hcHBlZFBhcmFtID0gKG1hcHBpbmc/LnRhYmxlTmFtZSA/PyBwYXJhbSkgYXMga2V5b2YgVDtcclxuICAgICAgaWYgKG1hcHBlZFBhcmFtIGluIHJvdykge1xyXG4gICAgICAgIHJlc1ttYXBwZWRQYXJhbV0gPSByb3dbbWFwcGVkUGFyYW1dO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHJldHVybnMgTmV3IGluc3RhbmNlIG9mIFJkdFJvdXRlPFQ+IHRoYXQgaXMgY2xvbmUgb2ZcclxuICAgKiB0aGlzIHJvdXRlIGFuZCBpdHMgcGFyZW50cyAoTk9UIGNoaWxkcmVuKS5cclxuICAgKi9cclxuICBjbG9uZSgpIHtcclxuICAgIGNvbnN0IGNsb25lID0gbmV3IFJkdFJvdXRlPFQ+KCk7XHJcbiAgICBjbG9uZS5fbmFtZSA9IHRoaXMuX25hbWU7XHJcbiAgICBjbG9uZS5fcGFyZW50ID0gdGhpcy5fcGFyZW50Py5jbG9uZSgpID8/IG51bGw7XHJcbiAgICBjbG9uZS5fcGF0aCA9IHRoaXMucGF0aDtcclxuICAgIGNsb25lLl9lbnRyeURpc2FibGVkID0gdGhpcy5fZW50cnlEaXNhYmxlZDtcclxuICAgIGNsb25lLm9yZGVyZWRQYXJhbXMgPSBbLi4udGhpcy5vcmRlcmVkUGFyYW1zXTtcclxuICAgIGNsb25lLl9wYXJhbU1hcCA9IHsgLi4udGhpcy5fcGFyYW1NYXAgfTtcclxuICAgIGNsb25lLl9yZWdleCA9IG5ldyBSZWdFeHAodGhpcy5fcmVnZXgpO1xyXG4gICAgY2xvbmUucGFyYW1NYXBwaW5ncyA9IHRoaXMucGFyYW1NYXBwaW5ncztcclxuICAgIGNsb25lLl9zdGF0aWNQYXJhbXMgPSB7IC4uLnRoaXMuX3N0YXRpY1BhcmFtcyB9O1xyXG4gICAgY2xvbmUuX3N0YXRlUGFyYW1zID0geyAuLi50aGlzLl9zdGF0ZVBhcmFtcyB9O1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxufVxyXG4iXX0=
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3JvdXRlci9zcmMvbGliL3JkdC1yb3V0ZS9yZHQtcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBOEIscUJBQXFCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFNUUsTUFBTSxVQUFVLFdBQVc7SUFDekIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxPQUFPLFFBQVE7SUFDVCxhQUFhLEdBQWEsRUFBRSxDQUFDO0lBQzdCLFNBQVMsR0FBb0IsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sR0FBa0IsSUFBSSxDQUFDO0lBQzdCLGFBQWEsR0FBbUIsRUFBRSxDQUFDO0lBQ25DLGFBQWEsR0FBZSxFQUFFLENBQUM7SUFDL0IsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLEtBQUssR0FBUyxFQUFFLENBQUM7SUFFakIsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFVO0lBQ2YsT0FBTyxHQUFvQixJQUFJLENBQUM7SUFDaEMsU0FBUyxHQUFlLEVBQUUsQ0FBQztJQUMzQixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLGFBQWEsR0FBa0IsV0FBVyxDQUFDO0lBQzNDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFFakIsY0FBYyxDQUFVO0lBRWhDOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUss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Q0FBQyxjQUFjLENBQUM7UUFDM0MsS0FBSyxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVELEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxLQUFLLENBQUMsYUFBYSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEQsS0FBSyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzlDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRhLCBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZHRTdHJpbmdVdGlscyB9IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IFJkdEFuZ3VsYXJSb3V0ZSB9IGZyb20gJy4vcmR0LWFuZ3VsYXItcm91dGUnO1xyXG5pbXBvcnQgeyBQYXJhbU1hcHBpbmcsIFBhcmFtVHlwZU1hcCwgUmR0UmVhZG9ubHlQYXJhbWV0ZXJzIH0gZnJvbSAnLi91dGlscyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQUxXQVlTX1RSVUUoKSB7XHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZHRSb3V0ZTxUIGV4dGVuZHMgb2JqZWN0ID0gYW55PiB7XHJcbiAgcHJvdGVjdGVkIG9yZGVyZWRQYXJhbXM6IHN0cmluZ1tdID0gW107XHJcbiAgcHJvdGVjdGVkIF9wYXJhbU1hcDogUGFyYW1UeXBlTWFwPFQ+ID0ge307XHJcbiAgcHJvdGVjdGVkIF9yZWdleDogUmVnRXhwIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHBhcmFtTWFwcGluZ3M6IFBhcmFtTWFwcGluZ1tdID0gW107XHJcbiAgcHJvdGVjdGVkIF9zdGF0aWNQYXJhbXM6IFBhcnRpYWw8VD4gPSB7fTtcclxuICBwcm90ZWN0ZWQgX3F1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcclxuICBwcm90ZWN0ZWQgX3N0YXRlUGFyYW1zOiBQYXJhbXMgPSB7fTtcclxuICBwcm90ZWN0ZWQgX2RhdGE6IERhdGEgPSB7fTtcclxuXHJcbiAgcHJvdGVjdGVkIF9uYW1lITogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCBfcGF0aCE6IHN0cmluZztcclxuICBwcm90ZWN0ZWQgX3BhcmVudDogUmR0Um91dGUgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgX2NoaWxkcmVuOiBSZHRSb3V0ZVtdID0gW107XHJcbiAgcHJvdGVjdGVkIF9lbnRyeURpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIF9jYW5CZUVudGVyZWQ6ICgpID0+IGJvb2xlYW4gPSBBTFdBWVNfVFJVRTtcclxuICBwcm90ZWN0ZWQgX2J1aWx0ID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2Fic29sdXRlUmVnZXg/OiBSZWdFeHA7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcCBvZiBwYXJhbWV0ZXJzIGFuZCB0aGVpciB0eXBlcy5cclxuICAgKi9cclxuICBnZXQgcGFyYW1NYXAoKTogUmVhZG9ubHk8UGFyYW1UeXBlTWFwPFQ+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1NYXA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIdW1hbiByZWFkYWJsZSBuYW1lIGZvciBkaXNwbGF5IGluIGJyZWFkY3J1bWJzLCB0aXRsZSwgZXRjLlxyXG4gICAqL1xyXG4gIGdldCBuYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXRoIG9mIHRoZSByb3V0ZSByZWxhdGl2ZSB0byBwYXJlbnQgcm91dGUuXHJcbiAgICovXHJcbiAgZ2V0IHBhdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGF0aDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcmVudCByb3V0ZS5cclxuICAgKi9cclxuICBnZXQgcGFyZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoaWxkIHJvdXRlcy5cclxuICAgKi9cclxuICBnZXQgY2hpbGRyZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBYnNvbHV0ZSBwYXRoIG9mIHBhcmVudCByb3V0ZSBvciAnLycgaWYgdGhlcmUgaXMgbm8gcGFyZW50LlxyXG4gICAqIEhvc3RuYW1lIGV4Y2x1ZGVkLlxyXG4gICAqL1xyXG4gIGdldCBiYXNlUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudCA/IHRoaXMuX3BhcmVudC5hYnNvbHV0ZVBhdGggOiAnLyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBYnNvbHV0ZSBwYXRoIG9mIHRoZSByb3V0ZS4gSG9zdG5hbWUgZXhjbHVkZWQuXHJcbiAgICovXHJcbiAgZ2V0IGFic29sdXRlUGF0aCgpIHtcclxuICAgIHJldHVybiBSZHRTdHJpbmdVdGlscy5qb2luUGF0aHModGhpcy5iYXNlUGF0aCwgdGhpcy5fcGF0aCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWd1bGFyIGV4cHJlc3Npb24gcm91dGUgcGF0aCByZWxhdGl2ZSB0byBwYXJlbnQgcm91dGUuXHJcbiAgICogSG9zdG5hbWUgZXhjbHVkZWQuXHJcbiAgICovXHJcbiAgZ2V0IHJlZ2V4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlZ2V4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIG9ubHkgdGhpcyByb3V0ZSAobm90IGNoaWxkcmVuXHJcbiAgICogb3IgcGFyZW50IHJvdXRlcykuIEhvc3RuYW1lIGV4Y2x1ZGVkLlxyXG4gICAqL1xyXG4gIGdldCBhYnNvbHV0ZVJlZ2V4KCk6IFJlZ0V4cCB7XHJcbiAgICBpZiAodGhpcy5fYWJzb2x1dGVSZWdleCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVSZWdleDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3JlZ2V4KSB7XHJcbiAgICAgIHRoaXMuX2Fic29sdXRlUmVnZXggPSBuZXcgUmVnRXhwKCdeLyQnKTtcclxuICAgICAgaWYgKHRoaXMuX3BhcmVudCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTmVzdGVkIHJvdXRlIHdpdGggZW1wdHkgcGF0aCBpcyBub3QgYWxsb3dlZC4nKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgLy8gUmVtb3ZlIGluaXRpYWwgXiBhbmQgZW5kaW5nICRcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fcGFyZW50LmFic29sdXRlUmVnZXguc291cmNlLnNsaWNlKDEsIC0xKTtcclxuICAgICAgdGhpcy5fYWJzb2x1dGVSZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgJ14nICsgUmR0U3RyaW5nVXRpbHMuam9pblBhdGhzKHBhcmVudCwgdGhpcy5fcmVnZXguc291cmNlKSArICckJ1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYWJzb2x1dGVSZWdleCA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgJ14nICsgUmR0U3RyaW5nVXRpbHMuam9pblBhdGhzKCcvJywgdGhpcy5fcmVnZXguc291cmNlKSArICckJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2Fic29sdXRlUmVnZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZW5vdGVzIGRpc2FibGVkIHJvdXRlIGVudHJ5LlxyXG4gICAqIElmIHRydWUsIHJvdXRlIHNob3VsZCBoYXZlIG5vIE5nTW9kdWxlXHJcbiAgICogb3IgY29tcG9uZW50IGFuZCBvbmx5IHNlcnZlcyBhcyB2aXJ0dWFsIG1vZHVsZVxyXG4gICAqIGZvciBicmVhZGNydW1iLlxyXG4gICAqL1xyXG4gIGdldCBlbnRyeURpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2VudHJ5RGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGF0aWNhbGx5IHNldCBzdGF0ZSBwYXJhbXMgdXNlZCB3aGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBpbnN0YW5jZS5cclxuICAgKi9cclxuICBnZXQgc3RhdGVQYXJhbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGF0aWNhbGx5IHNldCBxdWVyeSBwYXJhbXMgdXNlZCB3aGVuIG5hdmlnYXRpbmcgdG8gdGhpcyBpbnN0YW5jZS5cclxuICAgKi9cclxuICBnZXQgcXVlcnlQYXJhbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gdXJsIEFic29sdXRlIHBhdGggdG8gdGVzdC5cclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHVybCBtYXRjaGVzIHRoaXMgcm91dGUuXHJcbiAgICovXHJcbiAgdGVzdFVybCh1cmw6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYWJzb2x1dGVSZWdleC50ZXN0KHVybCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdGF0aWNhbGx5IHNldCBwYXJhbWV0ZXJzIHVzZWQgd2hlbiBuYXZpZ2F0aW5nIHRvIHRoaXMgaW5zdGFuY2UuXHJcbiAgICovXHJcbiAgZ2V0IHN0YXRpY1BhcmFtcygpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuX3N0YXRpY1BhcmFtcyB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0NhbkJlRW50ZXJlZEd1YXJkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbkJlRW50ZXJlZCAhPT0gQUxXQVlTX1RSVUU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHRoYXQgaXMgcGFzc2VkIHRvIEFuZ3VsYXIgcm91dGUgZGVmaW5pdGlvbi5cclxuICAgKi9cclxuICBnZXQgZGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0YSBndWFyZCB0aGF0IGlzIHVzZWQgYnkgW3JkdFJvdXRlckxpbmtdIGFuZCBSZHRNZW51XHJcbiAgICogdG8gZGV0ZXJtaW5lIGlmIHJvdXRlIGNhbiBiZSBlbnRlcmVkLlxyXG4gICAqIEBwYXJhbSBpbmplY3RvciBFbnZpcm9ubWVudCBvciBjdXN0b20gaW5qZWN0b3IuXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiByb3V0ZSBjYW4gYmUgZW50ZXJlZC5cclxuICAgKi9cclxuICBjYW5CZUVudGVyZWQoaW5qZWN0b3I/OiBJbmplY3Rvcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGluamVjdG9yXHJcbiAgICAgID8gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCB0aGlzLl9jYW5CZUVudGVyZWQpXHJcbiAgICAgIDogdGhpcy5fY2FuQmVFbnRlcmVkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHRyYWN0cyB1cmwgcGFyYW1ldGVycyBmcm9tIGFic29sdXRlIHBhdGggZm9yIHRoaXMgcGF0aCBhbmQgZWFjaCBwYXJlbnQuXHJcbiAgICovXHJcbiAgcGFyc2VBYnNvbHV0ZVVybCh1cmw6IHN0cmluZyk6IFJkdFJlYWRvbmx5UGFyYW1ldGVycyB8IG51bGwge1xyXG4gICAgY29uc3QgcmVnID0gdGhpcy5hYnNvbHV0ZVJlZ2V4O1xyXG4gICAgaWYgKCFyZWcudGVzdCh1cmwpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlZy5leGVjKHVybCk7XHJcbiAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICBjb25zdCB2YWx1ZXMgPSBtYXRjaGVzLnNsaWNlKDEpLnJldmVyc2UoKTtcclxuICAgICAgY29uc3Qgb2JqID0gdGhpcy5maWxsKHZhbHVlcyk7XHJcbiAgICAgIGlmIChvYmopIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJkdFJlYWRvbmx5UGFyYW1ldGVycyhvYmopO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsbCh2YWx1ZXM6IHN0cmluZ1tdLCByZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkge1xyXG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXkgaW4ga2V5b2YgVF0/OiBzdHJpbmcgfCBudW1iZXIgfSA9IHt9O1xyXG4gICAgY29uc3QgcmV2ZXJzZWRQYXJhbXMgPSB0aGlzLm9yZGVyZWRQYXJhbXMuc2xpY2UoKS5yZXZlcnNlKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJldmVyc2VkUGFyYW1zLmxlbmd0aCAmJiBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGtleSA9IHJldmVyc2VkUGFyYW1zW2ldIGFzIGtleW9mIFQ7XHJcbiAgICAgIGNvbnN0IG1hcHBlZEtleSA9XHJcbiAgICAgICAgdGhpcy5wYXJhbU1hcHBpbmdzLmZpbmQoKG0pID0+IG0udXJsTmFtZSA9PT0ga2V5KT8udGFibGVOYW1lID8/IGtleTtcclxuICAgICAgbGV0IHZhbDogc3RyaW5nIHwgbnVtYmVyID0gdmFsdWVzW2ldO1xyXG5cclxuICAgICAgaWYgKHRoaXMuX3BhcmFtTWFwW2tleV0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgdmFsID0gcGFyc2VJbnQodmFsKTtcclxuICAgICAgfVxyXG4gICAgICBwYXJhbXNbbWFwcGVkS2V5IGFzIGtleW9mIFRdID0gdmFsO1xyXG4gICAgfVxyXG4gICAgcmVzW3RoaXMuYWJzb2x1dGVQYXRoXSA9IHBhcmFtcztcclxuXHJcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA+IHJldmVyc2VkUGFyYW1zLmxlbmd0aCAmJiB0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgdGhpcy5fcGFyZW50LmZpbGwodmFsdWVzLnNsaWNlKHJldmVyc2VkUGFyYW1zLmxlbmd0aCksIHJlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsbHMgcGFyYW1ldGVycyBpbiBwYXRoIHdpdGggdmFsdWVzIGZyb20gcGFyYW1NYXAuXHJcbiAgICogVXNlIHdpdGhTdGF0aWNQYXJhbXMoKSBiZWZvcmVoYW5kIGluIGNhc2UgcGFyZW50IHBhdGhzIGNvbnRhaW4gcGFyYW1ldGVycy5cclxuICAgKiBAcGFyYW0gcGFyYW1NYXAgTXVzdCBjb250YWluIGFsbCBwYXJhbWV0ZXJzIGZvciB0aGlzIHJvdXRlLlxyXG4gICAqIEByZXR1cm5zIEFic29sdXRlIHBhdGguXHJcbiAgICovXHJcbiAgY3JlYXRlQWJzb2x1dGVVcmwocGFyYW1NYXA6IFBhcnRpYWw8VD4gPSB0aGlzLl9zdGF0aWNQYXJhbXMpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVXJsKHRoaXMuYWJzb2x1dGVQYXRoLCBwYXJhbU1hcCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUmR0U3RyaW5nVXRpbHMuam9pblBhdGhzKFxyXG4gICAgICAgIHRoaXMuX3BhcmVudC5jcmVhdGVBYnNvbHV0ZVVybCgpLFxyXG4gICAgICAgIHRoaXMuY3JlYXRlUmVsYXRpdmVVcmwocGFyYW1NYXApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVSZWxhdGl2ZVVybChwYXJhbU1hcDogUGFydGlhbDxUPiA9IHRoaXMuX3N0YXRpY1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVXJsKHRoaXMucGF0aCwgcGFyYW1NYXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVVcmwocGF0aDogc3RyaW5nLCBwYXJhbU1hcDogUGFydGlhbDxUPikge1xyXG4gICAgY29uc3QgcGFyYW1OYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuX3BhcmFtTWFwKTtcclxuICAgIHBhcmFtTmFtZXMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCk7XHJcbiAgICBjb25zdCBleHRlbmRlZFBhcmFtTWFwOiBhbnkgPSB7IC4uLnBhcmFtTWFwIH07XHJcblxyXG4gICAgdGhpcy5wYXJhbU1hcHBpbmdzLmZvckVhY2goKG1hcHBpbmcpID0+IHtcclxuICAgICAgaWYgKG1hcHBpbmcudGFibGVOYW1lIGluIHBhcmFtTWFwKSB7XHJcbiAgICAgICAgZXh0ZW5kZWRQYXJhbU1hcFttYXBwaW5nLnVybE5hbWVdID0gKHBhcmFtTWFwIGFzIGFueSlbXHJcbiAgICAgICAgICBtYXBwaW5nLnRhYmxlTmFtZVxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHBhcmFtTmFtZXMuZm9yRWFjaCgocGFyYW0pID0+IHtcclxuICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShgOiR7cGFyYW19YCwgYCR7ZXh0ZW5kZWRQYXJhbU1hcFtwYXJhbSBhcyBrZXlvZiBUXX1gKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBwYXRoO1xyXG4gIH1cclxuXHJcbiAgdG9Bbmd1bGFyUm91dGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuX2J1aWx0KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gZmlyc3QgY2FsbCAuYnVpbGQoKSBvbiByb3V0ZSEnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgUmR0QW5ndWxhclJvdXRlPFQ+KHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvdmlkZXMgc3RhdGljIG1hcHBpbmcgZm9yIHBhcmFtZXRlciBuYW1lcyB0YWJsZU5hbWUgLT4gdXJsTmFtZS5cclxuICAgKiBSZXR1cm5zIG5ldyBpbnN0YW5jZSBvZiBSZHRSb3V0ZTxUPiB0aGF0IGlzIGNsb25lIG9mXHJcbiAgICogdGhpcyByb3V0ZSBhbmQgaXRzIHBhcmVudHMgKE5PVCBjaGlsZHJlbikuXHJcbiAgICogQHJldHVybnMgQ2xvbmUgb2YgdGhpcyByb3V0ZSB3aXRoIG1hcHBlZCBwYXJhbWV0ZXIgbmFtZXMuXHJcbiAgICovXHJcbiAgd2l0aFBhcmFtTWFwcGluZ3MobWFwcGluZ3M6IFBhcmFtTWFwcGluZ1tdKSB7XHJcbiAgICBjb25zdCBjbG9uZSA9IHRoaXMuY2xvbmUoKTtcclxuICAgIGNsb25lLnBhcmFtTWFwcGluZ3MgPSBtYXBwaW5ncztcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgc3RhdGljIHBhcmFtZXRlcnMgZm9yIHRoaXMgcm91dGUuXHJcbiAgICogQHBhcmFtIHBhcmFtcyBTdGF0aWMgcGFyYW1ldGVycyBmb3IgdGhpcyByb3V0ZS5cclxuICAgKiBAcmV0dXJucyBDbG9uZSBvZiB0aGlzIHdpdGggc3RhdGljIHBhcmFtZXRlcnMgc2V0LlxyXG4gICAqL1xyXG4gIHdpdGhTdGF0aWNQYXJhbXMocGFyYW1zOiBUKTogUmR0Um91dGU8VD47XHJcbiAgd2l0aFN0YXRpY1BhcmFtczxUMiBleHRlbmRzIG9iamVjdD4oXHJcbiAgICByb3V0ZTogUmR0Um91dGU8VDI+LFxyXG4gICAgcGFyYW1zOiBUMlxyXG4gICk6IFJkdFJvdXRlPFQ+O1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHBhcmFtZXRlcnMgZm9yIGl0c2VsZiBvciBwYXJlbnRzLlxyXG4gICAqIFJldHVybnMgbmV3IGluc3RhbmNlIG9mIFJkdFJvdXRlPFQ+IHRoYXQgaXMgY2xvbmUgb2ZcclxuICAgKiB0aGlzIHJvdXRlIGFuZCBpdHMgcGFyZW50cyAoTk9UIGNoaWxkcmVuKS5cclxuICAgKiBAcmV0dXJucyBDbG9uZSBvZiB0aGlzIHJvdXRlIHdpdGggc3RhdGljIHBhcmFtZXRlcnMgc2V0LlxyXG4gICAqL1xyXG4gIHdpdGhTdGF0aWNQYXJhbXM8VDIgZXh0ZW5kcyBvYmplY3Q+KHBhcmFtMTogUmR0Um91dGU8VDI+IHwgVCwgcGFyYW0yPzogVDIpIHtcclxuICAgIGNvbnN0IGNsb25lID0gdGhpcy5jbG9uZSgpO1xyXG5cclxuICAgIGlmIChwYXJhbTIpIHtcclxuICAgICAgY29uc3Qgcm91dGVBYnNQYXRoID0gKHBhcmFtMSBhcyBSZHRSb3V0ZTxUMj4pLmFic29sdXRlUGF0aDtcclxuICAgICAgbGV0IGN1cnJlbnQ6IFJkdFJvdXRlIHwgbnVsbCA9IGNsb25lO1xyXG5cclxuICAgICAgd2hpbGUgKGN1cnJlbnQpIHtcclxuICAgICAgICBpZiAoY3VycmVudC5hYnNvbHV0ZVBhdGggPT09IHJvdXRlQWJzUGF0aCkge1xyXG4gICAgICAgICAgY3VycmVudC5fc3RhdGljUGFyYW1zID0gcGFyYW0yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5fcGFyZW50O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjbG9uZS5fc3RhdGljUGFyYW1zID0gcGFyYW0xIGFzIFQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFBhcmFtcykge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5fcXVlcnlQYXJhbXMgPSB7IC4uLnF1ZXJ5UGFyYW1zIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICB3aXRoU3RhdGVQYXJhbXMoc3RhdGVQYXJhbXM6IFBhcmFtcykge1xyXG4gICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lKCk7XHJcbiAgICBjbG9uZS5fc3RhdGVQYXJhbXMgPSB7IC4uLnN0YXRlUGFyYW1zIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcmV0dXJucyBQYXJ0aWFsIG9mIG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgcHJvcGVydGllcyBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoaXMgcm91dGUuXHJcbiAgICovXHJcbiAgZXh0cmFjdFJvdXRlUGFyYW1zKHJvdzogVCk6IFBhcnRpYWw8VD4ge1xyXG4gICAgY29uc3QgcmVzOiBQYXJ0aWFsPFQ+ID0ge307XHJcblxyXG4gICAgdGhpcy5vcmRlcmVkUGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1hcHBpbmcgPSB0aGlzLnBhcmFtTWFwcGluZ3MuZmluZCgobSkgPT4gbS51cmxOYW1lID09PSBwYXJhbSk7XHJcbiAgICAgIGNvbnN0IG1hcHBlZFBhcmFtID0gKG1hcHBpbmc/LnRhYmxlTmFtZSA/PyBwYXJhbSkgYXMga2V5b2YgVDtcclxuICAgICAgaWYgKG1hcHBlZFBhcmFtIGluIHJvdykge1xyXG4gICAgICAgIHJlc1ttYXBwZWRQYXJhbV0gPSByb3dbbWFwcGVkUGFyYW1dO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHJldHVybnMgTmV3IGluc3RhbmNlIG9mIFJkdFJvdXRlPFQ+IHRoYXQgaXMgY2xvbmUgb2ZcclxuICAgKiB0aGlzIHJvdXRlIGFuZCBpdHMgcGFyZW50cyAoTk9UIGNoaWxkcmVuKS5cclxuICAgKi9cclxuICBjbG9uZSgpIHtcclxuICAgIGNvbnN0IGNsb25lID0gbmV3IFJkdFJvdXRlPFQ+KCk7XHJcbiAgICBjbG9uZS5fbmFtZSA9IHRoaXMuX25hbWU7XHJcbiAgICBjbG9uZS5fcGFyZW50ID0gdGhpcy5fcGFyZW50Py5jbG9uZSgpID8/IG51bGw7XHJcbiAgICBjbG9uZS5fcGF0aCA9IHRoaXMucGF0aDtcclxuICAgIGNsb25lLl9lbnRyeURpc2FibGVkID0gdGhpcy5fZW50cnlEaXNhYmxlZDtcclxuICAgIGNsb25lLm9yZGVyZWRQYXJhbXMgPSBbLi4udGhpcy5vcmRlcmVkUGFyYW1zXTtcclxuICAgIGNsb25lLl9wYXJhbU1hcCA9IHsgLi4udGhpcy5fcGFyYW1NYXAgfTtcclxuICAgIGNsb25lLl9yZWdleCA9IHRoaXMuX3JlZ2V4ID8gbmV3IFJlZ0V4cCh0aGlzLl9yZWdleCkgOiBudWxsO1xyXG4gICAgY2xvbmUucGFyYW1NYXBwaW5ncyA9IHRoaXMucGFyYW1NYXBwaW5ncztcclxuICAgIGNsb25lLl9zdGF0aWNQYXJhbXMgPSB7IC4uLnRoaXMuX3N0YXRpY1BhcmFtcyB9O1xyXG4gICAgY2xvbmUuX3N0YXRlUGFyYW1zID0geyAuLi50aGlzLl9zdGF0ZVBhcmFtcyB9O1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -347,7 +347,9 @@ class RdtAngularRoute {
347
347
  return undefined;
348
348
  }
349
349
  const routeSegmentLength = this.route.path.split('/').length;
350
- const regex = new RegExp(`^${this.route.regex.source}$`);
350
+ const regex = this.route.regex
351
+ ? new RegExp(`^${this.route.regex.source}$`)
352
+ : this.route.absoluteRegex;
351
353
  return [
352
354
  (route, segments) => {
353
355
  const path = segments
@@ -393,7 +395,7 @@ function ALWAYS_TRUE() {
393
395
  class RdtRoute {
394
396
  orderedParams = [];
395
397
  _paramMap = {};
396
- _regex;
398
+ _regex = null;
397
399
  paramMappings = [];
398
400
  _staticParams = {};
399
401
  _queryParams = {};
@@ -405,6 +407,7 @@ class RdtRoute {
405
407
  _children = [];
406
408
  _entryDisabled = false;
407
409
  _canBeEntered = ALWAYS_TRUE;
410
+ _built = false;
408
411
  _absoluteRegex;
409
412
  /**
410
413
  * Map of parameters and their types.
@@ -464,7 +467,13 @@ class RdtRoute {
464
467
  if (this._absoluteRegex) {
465
468
  return this._absoluteRegex;
466
469
  }
467
- if (this._parent) {
470
+ if (!this._regex) {
471
+ this._absoluteRegex = new RegExp('^/$');
472
+ if (this._parent) {
473
+ throw new Error('Nested route with empty path is not allowed.');
474
+ }
475
+ }
476
+ else if (this._parent) {
468
477
  // Remove initial ^ and ending $
469
478
  const parent = this._parent.absoluteRegex.source.slice(1, -1);
470
479
  this._absoluteRegex = new RegExp('^' + RdtStringUtils.joinPaths(parent, this._regex.source) + '$');
@@ -601,7 +610,7 @@ class RdtRoute {
601
610
  return path;
602
611
  }
603
612
  toAngularRoute() {
604
- if (!this._regex) {
613
+ if (!this._built) {
605
614
  throw new Error('You have to first call .build() on route!');
606
615
  }
607
616
  return new RdtAngularRoute(this);
@@ -676,7 +685,7 @@ class RdtRoute {
676
685
  clone._entryDisabled = this._entryDisabled;
677
686
  clone.orderedParams = [...this.orderedParams];
678
687
  clone._paramMap = { ...this._paramMap };
679
- clone._regex = new RegExp(this._regex);
688
+ clone._regex = this._regex ? new RegExp(this._regex) : null;
680
689
  clone.paramMappings = this.paramMappings;
681
690
  clone._staticParams = { ...this._staticParams };
682
691
  clone._stateParams = { ...this._stateParams };
@@ -767,6 +776,7 @@ class RdtRouteBuilder extends RdtRoute {
767
776
  if (typeof this._path !== 'string') {
768
777
  throw new Error('Please provide path for route. Empty string is acceptable.');
769
778
  }
779
+ this._built = true;
770
780
  this.setRegex();
771
781
  return this;
772
782
  }
@@ -781,7 +791,12 @@ class RdtRouteBuilder extends RdtRoute {
781
791
  }
782
792
  substituted = substituted.replace(`:${p}`, RdtRouteBuilder.groups[type]);
783
793
  });
784
- this._regex = new RegExp(substituted);
794
+ if (substituted === '') {
795
+ this._regex = null;
796
+ }
797
+ else {
798
+ this._regex = new RegExp(substituted);
799
+ }
785
800
  }
786
801
  static groups = {
787
802
  string: '(.+)',
@@ -1 +1 @@
1
- {"version":3,"file":"ngrdt-router.mjs","sources":["../../../../@ngrdt/router/src/lib/services/rdt-cannot-be-entered.token.ts","../../../../@ngrdt/router/src/lib/services/rdt-confirm-data-loss.service.ts","../../../../@ngrdt/router/src/lib/rdt-route/utils.ts","../../../../@ngrdt/router/src/lib/services/rdt-routes.token.ts","../../../../@ngrdt/router/src/lib/services/rdt-router.service.ts","../../../../@ngrdt/router/src/lib/rdt-route/constants.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-angular-route.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-route.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-route-builder.ts","../../../../@ngrdt/router/src/lib/directives/rdt-any-route-active.directive.ts","../../../../@ngrdt/router/src/lib/directives/rdt-router-link.directive.ts","../../../../@ngrdt/router/src/lib/guards/prevent-data-loss.guard.ts","../../../../@ngrdt/router/src/lib/guards/global-route-guard.service.ts","../../../../@ngrdt/router/src/ngrdt-router.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { RdtRedirectFn, RdtRedirectReturnType } from '../rdt-route/utils';\n\n/**\n * Injection token that defines behavior when route cannot be entered (canBeEntered returns false).\n * If value is undefined, route will be redirected to ''.\n */\nexport const RDT_CANNOT_BE_ENTERED_PROVIDER = new InjectionToken<\n RdtRedirectFn | RdtRedirectReturnType\n>('RDT_CANNOT_BE_ENTERED', { factory: () => undefined, providedIn: 'root' });\n","import { InjectionToken } from '@angular/core';\r\nimport { defer, Observable, of } from 'rxjs';\r\n\r\nexport const RDT_CONFIRM_DATA_LOSS_SERVICE =\r\n new InjectionToken<RdtConfirmDataLossService>(\r\n 'RDT_CONFIRM_DATA_LOSS_SERVICE',\r\n { factory: () => new RdtConfirmDataLossServiceAlert() }\r\n );\r\n\r\nexport abstract class RdtConfirmDataLossService {\r\n abstract confirmDataLoss(): Observable<boolean>;\r\n}\r\n\r\nexport class RdtConfirmDataLossServiceAlert extends RdtConfirmDataLossService {\r\n override confirmDataLoss(): Observable<boolean> {\r\n return defer(() =>\r\n of(confirm('Are you sure you want to leave this page?'))\r\n );\r\n }\r\n}\r\n","import { RdtRoute } from './rdt-route';\r\n\r\nexport type ParamTypeMap<T> = {\r\n [key in keyof T]?: 'string' | 'number';\r\n};\r\n\r\nexport interface ParamMapping {\r\n urlName: string;\r\n tableName: string;\r\n}\r\n\r\nexport interface StaticRouteParams {\r\n [absolutePath: string]: object;\r\n}\r\n\r\nexport type RdtRedirectReturnType = string | void | undefined;\r\n\r\nexport type RdtRedirectFn = (\r\n currentPath: string,\r\n targetPath: string,\r\n targetRoute: RdtRoute\r\n) => RdtRedirectReturnType;\r\n\r\nexport class RdtReadonlyParameters {\r\n constructor(protected readonly params: StaticRouteParams = {}) {}\r\n\r\n get<T extends object>(route: RdtRoute<T>): Partial<T> | null {\r\n return (this.params[route.absolutePath] as Partial<T>) ?? null;\r\n }\r\n}\r\n\r\nexport class RdtParameters extends RdtReadonlyParameters {\r\n set<T extends object>(route: RdtRoute<T>, params: Partial<T>) {\r\n this.params[route.absolutePath] = params;\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\n\r\nexport const RDT_ROUTES_PROVIDER = new InjectionToken<RdtRoute[]>(\r\n 'RDT_ROUTES_PROVIDER'\r\n);\r\n","import { Location, PlatformLocation } from '@angular/common';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { NavigationEnd, Params, Router } from '@angular/router';\r\nimport { RdtStringUtils } from '@ngrdt/utils';\r\nimport { filter, Observable, take } from 'rxjs';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\nimport { RdtReadonlyParameters } from '../rdt-route/utils';\r\nimport { RDT_ROUTES_PROVIDER } from './rdt-routes.token';\r\n\r\nexport interface RdtNavigateExtras {\r\n state?: Params;\r\n query?: Params;\r\n target?: '_blank' | '_self' | '_parent' | '_top';\r\n replaceUrl?: boolean;\r\n}\r\n\r\nconst DEFAULT_TARGET = '_self';\r\nconst RDT_STATE_PARAMS_KEY = 'RdtStateParams';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RdtRouterService {\r\n readonly allRoutes = inject(RDT_ROUTES_PROVIDER, { optional: true });\r\n\r\n private readonly location = inject(Location);\r\n private readonly router = inject(Router);\r\n private readonly baseHref = inject(PlatformLocation).getBaseHrefFromDOM();\r\n\r\n private _previousUrl: string | null = null;\r\n private _currentUrl: string | null = null;\r\n\r\n get previousUrl() {\r\n return this._previousUrl;\r\n }\r\n\r\n get currentUrl() {\r\n return this._currentUrl;\r\n }\r\n\r\n parsePreviousUrl() {\r\n return this._previousUrl ? this.parseAbsoluteUrl(this._previousUrl) : null;\r\n }\r\n\r\n parseCurrentUrl() {\r\n return this._currentUrl ? this.parseAbsoluteUrl(this._currentUrl) : null;\r\n }\r\n\r\n readonly navigationEnd$ = this.router.events.pipe(\r\n filter((e) => e instanceof NavigationEnd)\r\n ) as Observable<NavigationEnd>;\r\n\r\n readonly nextNavigationEnd$ = this.navigationEnd$.pipe(take(1));\r\n\r\n constructor() {\r\n if (this.allRoutes === null) {\r\n console.warn(\r\n 'All routes not provided. Make sure to provide RDT_ROUTES_PROVIDER with RdtRoute[].'\r\n );\r\n this.allRoutes = [];\r\n }\r\n\r\n this.navigationEnd$.subscribe((e) => {\r\n this._previousUrl = this._currentUrl;\r\n this._currentUrl = e.url;\r\n });\r\n }\r\n\r\n /**\r\n * @returns window.history.state extended by state parameters passed from parent window.\r\n */\r\n getHistoryState() {\r\n if (\r\n 'RdtStateParams' in window &&\r\n typeof window[RDT_STATE_PARAMS_KEY] === 'object'\r\n ) {\r\n return { ...window[RDT_STATE_PARAMS_KEY], ...(history.state ?? {}) };\r\n } else {\r\n return history.state ?? {};\r\n }\r\n }\r\n\r\n /**\r\n * Navigates to the specified route.\r\n * @param link Route to navigate to.\r\n * @param params Parameter of route passed as first argument.\r\n * @param extras Allows you to specify additional parameters for navigation. These extras have higher priority than those defined in the route.\r\n * @returns Promise that resolves when navigation is complete.\r\n */\r\n navigate<T extends object>(\r\n link: RdtRoute<T>,\r\n params?: Partial<T>,\r\n extras?: RdtNavigateExtras\r\n ) {\r\n const url = params\r\n ? link.createAbsoluteUrl(params)\r\n : link.createAbsoluteUrl();\r\n\r\n const target = extras?.target ?? DEFAULT_TARGET;\r\n const queryParams = extras?.query ?? link.queryParams;\r\n const stateParams = extras?.state ?? link.stateParams;\r\n\r\n if (target === '_self') {\r\n return this.router.navigate([url], {\r\n queryParams: queryParams,\r\n state: stateParams,\r\n replaceUrl: extras?.replaceUrl,\r\n });\r\n }\r\n\r\n const absolutePath = RdtStringUtils.createAbsoluteUrl(url, this.baseHref);\r\n const pathWithParams = RdtStringUtils.appendQueryParams(\r\n absolutePath,\r\n queryParams\r\n );\r\n const win = window.open(pathWithParams, target);\r\n if (win) {\r\n (win as any)[RDT_STATE_PARAMS_KEY] = stateParams;\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n navigateHome(extras?: RdtNavigateExtras) {\r\n return this.router.navigateByUrl(\r\n RdtStringUtils.appendQueryParams('/', extras?.query ?? {}),\r\n {\r\n state: extras?.state,\r\n replaceUrl: extras?.replaceUrl,\r\n }\r\n );\r\n }\r\n\r\n navigateBack(extras?: RdtNavigateExtras) {\r\n const parsed = this.parseAbsoluteUrl();\r\n if (parsed) {\r\n let route: RdtRoute | null = parsed.route.withStaticParams(parsed.params);\r\n do {\r\n route = route.parent;\r\n } while (route && route.entryDisabled);\r\n\r\n // In case route has no ancestor with allowed entry,\r\n if (!route) {\r\n return this.navigateHome(extras);\r\n }\r\n if (extras) {\r\n if (extras.query) {\r\n route = route.withQueryParams(extras.query);\r\n }\r\n if (extras.state) {\r\n route = route.withStateParams(extras.state);\r\n }\r\n }\r\n return this.navigate(route, extras);\r\n } else {\r\n console.warn(\r\n `Cannot go back from ${this.location.path()} because no route matches current url`\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * This method will try to find matching route for given absolute URL, extract its parameters and return them.\r\n * If no route matches the URL, it returns null. Parameters are extracted only for the last matching route, not ancestors.\r\n * @param url Absolute URL to parse (e.g. '/home/details/123?query=abc').\r\n * @returns Object containing the matching route and its parameters, or null if no route is matching.\r\n */\r\n parseAbsoluteUrl(url = this.location.path()) {\r\n if (this.allRoutes) {\r\n for (const route of this.allRoutes) {\r\n const params = route.parseAbsoluteUrl(url);\r\n if (params) {\r\n return { route, params };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n extractAllParams(currentRoute?: RdtRoute): RdtReadonlyParameters | null {\r\n if (!currentRoute) {\r\n const parsed = this.parseAbsoluteUrl();\r\n if (!parsed) {\r\n console.warn('No route matches current url.');\r\n return new RdtReadonlyParameters();\r\n }\r\n currentRoute = parsed.route;\r\n }\r\n const url = this.location.path();\r\n return currentRoute.parseAbsoluteUrl(url);\r\n }\r\n\r\n isParentOfCurrentLocation(route: RdtRoute) {\r\n console.log(this.parseAbsoluteUrl());\r\n return true;\r\n }\r\n\r\n removeQueryParams(...paramNames: string[]) {\r\n const regex = new RegExp(`[?&](${paramNames.join('|')})=[^&]*`, 'g');\r\n\r\n return history.replaceState(\r\n history.state,\r\n '',\r\n location.pathname + location.search.replace(regex, '').replace(/^&/, '?')\r\n );\r\n }\r\n}\r\n","export enum RdtNavigationSource {\r\n BREADCRUMB = 'breadcrumb',\r\n}\r\n","import { Location } from '@angular/common';\r\nimport {\r\n EnvironmentInjector,\r\n EnvironmentProviders,\r\n inject,\r\n Provider,\r\n runInInjectionContext,\r\n Type,\r\n} from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivateChildFn,\r\n CanActivateFn,\r\n CanDeactivateFn,\r\n CanMatchFn,\r\n Data,\r\n LoadChildrenCallback,\r\n ResolveFn,\r\n Route,\r\n Router,\r\n RouterStateSnapshot,\r\n RunGuardsAndResolvers,\r\n UrlSegment,\r\n} from '@angular/router';\r\nimport { RDT_CANNOT_BE_ENTERED_PROVIDER } from '../services/rdt-cannot-be-entered.token';\r\nimport { RdtNavigationSource } from './constants';\r\nimport { RdtRoute } from './rdt-route';\r\n\r\nexport class RdtAngularRoute<T extends object> {\r\n private route: RdtRoute<T>;\r\n private children: Route[] = [];\r\n\r\n // Must be set from component declaration files\r\n private loadChildren?: LoadChildrenCallback;\r\n private component?: Type<any>;\r\n private providers: (Provider | EnvironmentProviders)[] = [];\r\n private resolvers: { [key: string]: ResolveFn<unknown> } = {};\r\n private canActivate: CanActivateFn[] = [];\r\n private canActivateChild: CanActivateChildFn[] = [];\r\n private canDeactivate: CanDeactivateFn<T>[] = [];\r\n private runGuardsAndResolvers?: RunGuardsAndResolvers;\r\n private data?: Data;\r\n\r\n constructor(route: RdtRoute<T>) {\r\n this.route = route;\r\n }\r\n\r\n provide(...providers: Type<unknown>[]) {\r\n this.providers.push(...providers);\r\n return this;\r\n }\r\n\r\n setModule(callback: LoadChildrenCallback) {\r\n this.loadChildren = callback;\r\n return this;\r\n }\r\n\r\n setComponent(comp: Type<any>) {\r\n this.component = comp;\r\n return this;\r\n }\r\n\r\n setChildren(...routes: Route[]) {\r\n this.children = routes;\r\n return this;\r\n }\r\n\r\n addResolve(paramName: string, resolver: ResolveFn<unknown>) {\r\n this.resolvers[paramName] = resolver;\r\n return this;\r\n }\r\n\r\n addCanActivate(...fns: CanActivateFn[]) {\r\n this.canActivate.push(...fns);\r\n return this;\r\n }\r\n\r\n addCanDeactivate(...fns: CanDeactivateFn<any>[]) {\r\n this.canDeactivate.push(...fns);\r\n return this;\r\n }\r\n\r\n addCanActivateChild(...fns: CanActivateChildFn[]) {\r\n this.canActivateChild.push(...fns);\r\n return this;\r\n }\r\n\r\n setRunGuardsAndResolvers(value: RunGuardsAndResolvers) {\r\n this.runGuardsAndResolvers = value;\r\n return this;\r\n }\r\n\r\n build(): Route {\r\n this.checkChildrenMatch();\r\n\r\n let res: Route = {\r\n path: this.route.path,\r\n providers: this.providers,\r\n title: this.route.name,\r\n canMatch: this.getCanMatch(),\r\n };\r\n\r\n if (this.component) {\r\n res.component = this.component;\r\n } else if (this.loadChildren) {\r\n res.loadChildren = this.loadChildren;\r\n }\r\n\r\n res.data = this.data ?? {\r\n breadcrumb: {\r\n label: this.route.name,\r\n disable: this.route.entryDisabled,\r\n staticStateParams: {\r\n src: RdtNavigationSource.BREADCRUMB,\r\n },\r\n },\r\n ...this.route.data,\r\n };\r\n\r\n const guard: CanActivateFn = (\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ) => {\r\n const injector = inject(EnvironmentInjector);\r\n if (\r\n runInInjectionContext(\r\n injector,\r\n this.route.canBeEntered.bind(this.route)\r\n )\r\n ) {\r\n return true;\r\n } else {\r\n const router = inject(Router);\r\n const location = inject(Location);\r\n let url = inject(RDT_CANNOT_BE_ENTERED_PROVIDER);\r\n if (typeof url === 'function') {\r\n //console.error(this.route.absolutePath);\r\n url = runInInjectionContext(\r\n injector,\r\n url.bind(url, location.path(), state.url, this.route)\r\n );\r\n }\r\n if (typeof url === 'string') {\r\n return router.parseUrl(url);\r\n } else {\r\n return false;\r\n }\r\n }\r\n };\r\n this.canActivate.push(guard);\r\n\r\n res.canActivate = this.canActivate;\r\n res.canDeactivate = this.canDeactivate;\r\n\r\n // If children exist, change\r\n // {\r\n // path: '/path',\r\n // component: FeatureComponent,\r\n // children: [...]\r\n // }\r\n // into\r\n // {\r\n // path: '/path',\r\n // children: [\r\n // {\r\n // path: '',\r\n // component: FeatureComponent\r\n // },\r\n // ...\r\n // ]\r\n // }\r\n if (this.children.length > 0) {\r\n if (this.loadChildren || this.component) {\r\n const path = res.path;\r\n res.path = '';\r\n res.pathMatch = 'full';\r\n res.canMatch = undefined;\r\n res = {\r\n path: path,\r\n children: [res, ...this.children],\r\n canActivateChild: this.canActivateChild,\r\n canMatch: this.getCanMatch(),\r\n };\r\n } else {\r\n res.children = this.children;\r\n }\r\n }\r\n\r\n if (Object.keys(this.resolvers).length > 0) {\r\n res.resolve = this.resolvers;\r\n }\r\n\r\n if (this.runGuardsAndResolvers) {\r\n res.runGuardsAndResolvers = this.runGuardsAndResolvers;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n private getCanMatch(): CanMatchFn[] | undefined {\r\n const paramMap = this.route.paramMap;\r\n const hasNumberParams = Object.keys(paramMap).some(\r\n (p) => paramMap[p as keyof T] === 'number'\r\n );\r\n if (!hasNumberParams) {\r\n return undefined;\r\n }\r\n const routeSegmentLength = this.route.path.split('/').length;\r\n const regex = new RegExp(`^${this.route.regex.source}$`);\r\n return [\r\n (route: Route, segments: UrlSegment[]) => {\r\n const path = segments\r\n .slice(0, routeSegmentLength)\r\n .map((s) => s.path)\r\n .join('/');\r\n return regex.test(path);\r\n },\r\n ];\r\n }\r\n\r\n private checkChildrenMatch() {\r\n // Check that all routes are present if route is not\r\n // lazy loaded module.\r\n if (\r\n !this.loadChildren &&\r\n (this.route.children.length > 0 || this.children.length > 0)\r\n ) {\r\n if (this.children.length < this.route.children.length) {\r\n throw new Error(\r\n `RdtRoute ${this.route.name} has ${\r\n this.route.children.length\r\n } children, but RdtAngularRoute has ${\r\n this.children.length\r\n }. These numbers must match. Did you forget to call .setChildren() method in global routes definition? Routes with following names should be present: ${this.route.children\r\n .map((ch) => ch.name)\r\n .join(', ')}`\r\n );\r\n } else if (this.children.length > this.route.children.length) {\r\n throw new Error(\r\n `RdtRoute ${this.route.name} has ${\r\n this.route.children.length\r\n } children, but RdtAngularRoute has ${\r\n this.children.length\r\n }. These numbers must match. Did you forget to call .setChildren() method in feature shell routes definition? Routes with following paths should be present: ${this.children\r\n .map((ch) => ch.path)\r\n .join(', ')}`\r\n );\r\n }\r\n const n1 = this.children.map((ch) => ch.path!);\r\n const n2 = this.route.children.map((ch) => ch.path);\r\n n1.sort();\r\n n2.sort();\r\n for (let i = 0; i < n1.length; i++) {\r\n if (n1[i] !== n2[i]) {\r\n throw new Error(\r\n `Paths of children provided in RdtRoute and\r\n RdtAngularRoute do not match. ${n1[i]} != ${n2[i]}`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Injector, runInInjectionContext } from '@angular/core';\r\nimport { Data, Params } from '@angular/router';\r\nimport { RdtStringUtils } from '@ngrdt/utils';\r\nimport { RdtAngularRoute } from './rdt-angular-route';\r\nimport { ParamMapping, ParamTypeMap, RdtReadonlyParameters } from './utils';\r\n\r\nexport function ALWAYS_TRUE() {\r\n return true;\r\n}\r\n\r\nexport class RdtRoute<T extends object = any> {\r\n protected orderedParams: string[] = [];\r\n protected _paramMap: ParamTypeMap<T> = {};\r\n protected _regex!: RegExp;\r\n protected paramMappings: ParamMapping[] = [];\r\n protected _staticParams: Partial<T> = {};\r\n protected _queryParams: Params = {};\r\n protected _stateParams: Params = {};\r\n protected _data: Data = {};\r\n\r\n protected _name!: string;\r\n protected _path!: string;\r\n protected _parent: RdtRoute | null = null;\r\n protected _children: RdtRoute[] = [];\r\n protected _entryDisabled = false;\r\n protected _canBeEntered: () => boolean = ALWAYS_TRUE;\r\n\r\n private _absoluteRegex?: RegExp;\r\n\r\n /**\r\n * Map of parameters and their types.\r\n */\r\n get paramMap(): Readonly<ParamTypeMap<T>> {\r\n return this._paramMap;\r\n }\r\n\r\n /**\r\n * Human readable name for display in breadcrumbs, title, etc.\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * Path of the route relative to parent route.\r\n */\r\n get path() {\r\n return this._path;\r\n }\r\n\r\n /**\r\n * Parent route.\r\n */\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n /**\r\n * Child routes.\r\n */\r\n get children() {\r\n return this._children;\r\n }\r\n\r\n /**\r\n * Absolute path of parent route or '/' if there is no parent.\r\n * Hostname excluded.\r\n */\r\n get basePath(): string {\r\n return this._parent ? this._parent.absolutePath : '/';\r\n }\r\n\r\n /**\r\n * Absolute path of the route. Hostname excluded.\r\n */\r\n get absolutePath() {\r\n return RdtStringUtils.joinPaths(this.basePath, this._path);\r\n }\r\n\r\n /**\r\n * Regular expression route path relative to parent route.\r\n * Hostname excluded.\r\n */\r\n get regex() {\r\n return this._regex;\r\n }\r\n\r\n /**\r\n * Regular expression to match only this route (not children\r\n * or parent routes). Hostname excluded.\r\n */\r\n get absoluteRegex(): RegExp {\r\n if (this._absoluteRegex) {\r\n return this._absoluteRegex;\r\n }\r\n\r\n if (this._parent) {\r\n // Remove initial ^ and ending $\r\n const parent = this._parent.absoluteRegex.source.slice(1, -1);\r\n this._absoluteRegex = new RegExp(\r\n '^' + RdtStringUtils.joinPaths(parent, this._regex.source) + '$'\r\n );\r\n } else {\r\n this._absoluteRegex = new RegExp(\r\n '^' + RdtStringUtils.joinPaths('/', this._regex.source) + '$'\r\n );\r\n }\r\n return this._absoluteRegex;\r\n }\r\n\r\n /**\r\n * Denotes disabled route entry.\r\n * If true, route should have no NgModule\r\n * or component and only serves as virtual module\r\n * for breadcrumb.\r\n */\r\n get entryDisabled() {\r\n return this._entryDisabled;\r\n }\r\n\r\n /**\r\n * Statically set state params used when navigating to this instance.\r\n */\r\n get stateParams() {\r\n return this._stateParams;\r\n }\r\n\r\n /**\r\n * Statically set query params used when navigating to this instance.\r\n */\r\n get queryParams() {\r\n return this._queryParams;\r\n }\r\n\r\n /**\r\n * @param url Absolute path to test.\r\n * @returns True if url matches this route.\r\n */\r\n testUrl(url: string) {\r\n return this.absoluteRegex.test(url);\r\n }\r\n\r\n /**\r\n * Statically set parameters used when navigating to this instance.\r\n */\r\n get staticParams() {\r\n return { ...this._staticParams };\r\n }\r\n\r\n get hasCanBeEnteredGuard() {\r\n return this._canBeEntered !== ALWAYS_TRUE;\r\n }\r\n\r\n /**\r\n * Data that is passed to Angular route definition.\r\n */\r\n get data() {\r\n return this._data;\r\n }\r\n\r\n /**\r\n * Meta guard that is used by [rdtRouterLink] and RdtMenu\r\n * to determine if route can be entered.\r\n * @param injector Environment or custom injector.\r\n * @returns True if route can be entered.\r\n */\r\n canBeEntered(injector?: Injector): boolean {\r\n return injector\r\n ? runInInjectionContext(injector, this._canBeEntered)\r\n : this._canBeEntered();\r\n }\r\n\r\n /**\r\n * Extracts url parameters from absolute path for this path and each parent.\r\n */\r\n parseAbsoluteUrl(url: string): RdtReadonlyParameters | null {\r\n const reg = this.absoluteRegex;\r\n if (!reg.test(url)) {\r\n return null;\r\n }\r\n const matches = reg.exec(url);\r\n if (matches) {\r\n const values = matches.slice(1).reverse();\r\n const obj = this.fill(values);\r\n if (obj) {\r\n return new RdtReadonlyParameters(obj);\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n private fill(values: string[], res: Record<string, any> = {}) {\r\n const params: { [key in keyof T]?: string | number } = {};\r\n const reversedParams = this.orderedParams.slice().reverse();\r\n for (let i = 0; i < reversedParams.length && i < values.length; i++) {\r\n const key = reversedParams[i] as keyof T;\r\n const mappedKey =\r\n this.paramMappings.find((m) => m.urlName === key)?.tableName ?? key;\r\n let val: string | number = values[i];\r\n\r\n if (this._paramMap[key] === 'number') {\r\n val = parseInt(val);\r\n }\r\n params[mappedKey as keyof T] = val;\r\n }\r\n res[this.absolutePath] = params;\r\n\r\n if (values.length > reversedParams.length && this._parent) {\r\n this._parent.fill(values.slice(reversedParams.length), res);\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Fills parameters in path with values from paramMap.\r\n * Use withStaticParams() beforehand in case parent paths contain parameters.\r\n * @param paramMap Must contain all parameters for this route.\r\n * @returns Absolute path.\r\n */\r\n createAbsoluteUrl(paramMap: Partial<T> = this._staticParams): string {\r\n if (!this._parent) {\r\n return this.createUrl(this.absolutePath, paramMap);\r\n } else {\r\n return RdtStringUtils.joinPaths(\r\n this._parent.createAbsoluteUrl(),\r\n this.createRelativeUrl(paramMap)\r\n );\r\n }\r\n }\r\n\r\n createRelativeUrl(paramMap: Partial<T> = this._staticParams) {\r\n return this.createUrl(this.path, paramMap);\r\n }\r\n\r\n private createUrl(path: string, paramMap: Partial<T>) {\r\n const paramNames = Object.keys(this._paramMap);\r\n paramNames.sort((a, b) => b.length - a.length);\r\n const extendedParamMap: any = { ...paramMap };\r\n\r\n this.paramMappings.forEach((mapping) => {\r\n if (mapping.tableName in paramMap) {\r\n extendedParamMap[mapping.urlName] = (paramMap as any)[\r\n mapping.tableName\r\n ];\r\n }\r\n });\r\n\r\n paramNames.forEach((param) => {\r\n path = path.replace(`:${param}`, `${extendedParamMap[param as keyof T]}`);\r\n });\r\n\r\n return path;\r\n }\r\n\r\n toAngularRoute() {\r\n if (!this._regex) {\r\n throw new Error('You have to first call .build() on route!');\r\n }\r\n return new RdtAngularRoute<T>(this);\r\n }\r\n\r\n /**\r\n * Provides static mapping for parameter names tableName -> urlName.\r\n * Returns new instance of RdtRoute<T> that is clone of\r\n * this route and its parents (NOT children).\r\n * @returns Clone of this route with mapped parameter names.\r\n */\r\n withParamMappings(mappings: ParamMapping[]) {\r\n const clone = this.clone();\r\n clone.paramMappings = mappings;\r\n return clone;\r\n }\r\n\r\n /**\r\n * Sets static parameters for this route.\r\n * @param params Static parameters for this route.\r\n * @returns Clone of this with static parameters set.\r\n */\r\n withStaticParams(params: T): RdtRoute<T>;\r\n withStaticParams<T2 extends object>(\r\n route: RdtRoute<T2>,\r\n params: T2\r\n ): RdtRoute<T>;\r\n\r\n /**\r\n * Sets parameters for itself or parents.\r\n * Returns new instance of RdtRoute<T> that is clone of\r\n * this route and its parents (NOT children).\r\n * @returns Clone of this route with static parameters set.\r\n */\r\n withStaticParams<T2 extends object>(param1: RdtRoute<T2> | T, param2?: T2) {\r\n const clone = this.clone();\r\n\r\n if (param2) {\r\n const routeAbsPath = (param1 as RdtRoute<T2>).absolutePath;\r\n let current: RdtRoute | null = clone;\r\n\r\n while (current) {\r\n if (current.absolutePath === routeAbsPath) {\r\n current._staticParams = param2;\r\n }\r\n current = current._parent;\r\n }\r\n } else {\r\n clone._staticParams = param1 as T;\r\n }\r\n return clone;\r\n }\r\n\r\n withQueryParams(queryParams: Params) {\r\n const clone = this.clone();\r\n clone._queryParams = { ...queryParams };\r\n return clone;\r\n }\r\n\r\n withStateParams(stateParams: Params) {\r\n const clone = this.clone();\r\n clone._stateParams = { ...stateParams };\r\n return clone;\r\n }\r\n\r\n /**\r\n * @returns Partial of object that only contains properties necessary to create this route.\r\n */\r\n extractRouteParams(row: T): Partial<T> {\r\n const res: Partial<T> = {};\r\n\r\n this.orderedParams.forEach((param) => {\r\n const mapping = this.paramMappings.find((m) => m.urlName === param);\r\n const mappedParam = (mapping?.tableName ?? param) as keyof T;\r\n if (mappedParam in row) {\r\n res[mappedParam] = row[mappedParam];\r\n }\r\n });\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * @returns New instance of RdtRoute<T> that is clone of\r\n * this route and its parents (NOT children).\r\n */\r\n clone() {\r\n const clone = new RdtRoute<T>();\r\n clone._name = this._name;\r\n clone._parent = this._parent?.clone() ?? null;\r\n clone._path = this.path;\r\n clone._entryDisabled = this._entryDisabled;\r\n clone.orderedParams = [...this.orderedParams];\r\n clone._paramMap = { ...this._paramMap };\r\n clone._regex = new RegExp(this._regex);\r\n clone.paramMappings = this.paramMappings;\r\n clone._staticParams = { ...this._staticParams };\r\n clone._stateParams = { ...this._stateParams };\r\n return clone;\r\n }\r\n}\r\n","import { Data } from '@angular/router';\r\nimport { RdtRoute } from './rdt-route';\r\n\r\nconst DEFAULT_PARAM_TYPE = 'number';\r\n\r\nexport class RdtRouteBuilder<T extends object = any> extends RdtRoute<T> {\r\n /**\r\n * CanBeEntered function is synchronous function which\r\n * lets framework hide menu buttons and disable links.\r\n * Function is run in environment injection context, so\r\n * you can inject global services, tokens, etc.\r\n * @param fn\r\n */\r\n setCanBeEntered(fn: () => boolean) {\r\n this._canBeEntered = fn;\r\n return this;\r\n }\r\n\r\n /**\r\n * Entry disabled route will generate disabled breadcrumb.\r\n * It should not have any component nor module added to it.\r\n * @param value\r\n * @returns\r\n */\r\n setEntryDisabled(value = true) {\r\n this._entryDisabled = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets path relative to parent. It is defined the same way as Angular route path including parameters.\r\n * You need to call setParam() for each parameter you use in the path.\r\n */\r\n setPath(path: string) {\r\n this._path = path;\r\n const s = path.split('/');\r\n const params: string[] = [];\r\n s.forEach((part) => {\r\n if (part.includes(':')) {\r\n const param = part.split(':')[1] as keyof T;\r\n if (param) {\r\n params.push(param as string);\r\n if (!this._paramMap[param]) {\r\n this._paramMap[param] = DEFAULT_PARAM_TYPE;\r\n }\r\n }\r\n }\r\n });\r\n this.orderedParams = params;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets Angular route data.\r\n * @param data Angular route data object. Breadcrumb key is merged into it.\r\n */\r\n setData(data: Data) {\r\n this._data = data;\r\n return this;\r\n }\r\n\r\n /**\r\n * Defines parameter type and lets framework parse it.\r\n * @param paramName\r\n * @param type\r\n */\r\n setParam(paramName: keyof T, type: 'string' | 'number') {\r\n this._paramMap[paramName] = type;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets name to display in breadcrumb, etc.\r\n */\r\n setName(name: string) {\r\n this._name = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Call .build() on children before you call this method!\r\n */\r\n setChildren(...children: RdtRoute[]) {\r\n this._children = children;\r\n for (const child of children) {\r\n (child as RdtRouteBuilder)._parent = this;\r\n }\r\n return this;\r\n }\r\n\r\n build() {\r\n if (typeof this._path !== 'string') {\r\n throw new Error(\r\n 'Please provide path for route. Empty string is acceptable.'\r\n );\r\n }\r\n this.setRegex();\r\n return this as RdtRoute<T>;\r\n }\r\n\r\n private setRegex() {\r\n const params = Object.keys(this._paramMap);\r\n params.sort((a, b) => b.length - a.length);\r\n let substituted = this.path;\r\n params.forEach((p) => {\r\n const type = this._paramMap[p as keyof T];\r\n if (!type) {\r\n throw new Error('Params is not set i');\r\n }\r\n substituted = substituted.replace(`:${p}`, RdtRouteBuilder.groups[type]);\r\n });\r\n\r\n this._regex = new RegExp(substituted);\r\n }\r\n\r\n private static readonly groups = {\r\n string: '(.+)',\r\n number: '(\\\\d+)',\r\n };\r\n}\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Renderer2,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n IsActiveMatchOptions,\r\n NavigationEnd,\r\n Router,\r\n RouterModule,\r\n} from '@angular/router';\r\nimport { filter } from 'rxjs';\r\n\r\nconst EXACT_TRUE_OPTS: IsActiveMatchOptions = {\r\n paths: 'exact',\r\n queryParams: 'exact',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n};\r\n\r\nconst EXACT_FALSE_OPTS: IsActiveMatchOptions = {\r\n paths: 'subset',\r\n queryParams: 'subset',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n};\r\n\r\n/**\r\n * Directive that appends class to host if any of the watched routes is active.\r\n */\r\n@Directive({\r\n selector: '[rdtAnyRouteActive]',\r\n standalone: true,\r\n providers: [RouterModule],\r\n})\r\nexport class RdtAnyRouteActiveDirective implements OnInit, OnChanges {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly router = inject(Router);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly elRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n\r\n @Input({ required: true, alias: 'rdtAnyRouteActive' })\r\n set anyRouteActive(data: string[] | string) {\r\n this.classes = this.parseClasses(data);\r\n }\r\n\r\n @Input({ required: true })\r\n watchedRoutes: (string | string[])[] = [];\r\n\r\n @Input()\r\n set anyRouteActiveOptions(value: { exact: boolean } | IsActiveMatchOptions) {\r\n this._anyRouteActiveOptions = this.parseOptions(value);\r\n }\r\n private _anyRouteActiveOptions: IsActiveMatchOptions = EXACT_FALSE_OPTS;\r\n\r\n @Input()\r\n ariaCurrentWhenActive?:\r\n | 'page'\r\n | 'step'\r\n | 'location'\r\n | 'date'\r\n | 'time'\r\n | true\r\n | false;\r\n\r\n get isActive() {\r\n return this._isActive;\r\n }\r\n private _isActive = false;\r\n\r\n private classes: string[] = [];\r\n\r\n ngOnInit() {\r\n this.update();\r\n this.listenRouterEvents();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['anyRouteActive']?.previousValue) {\r\n const prev = this.parseClasses(changes['anyRouteActive'].previousValue);\r\n prev.forEach((c) => this.removeClass(c));\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n update() {\r\n this._isActive = this.watchedRoutes.some((route) => {\r\n const param =\r\n typeof route === 'string' ? route : this.router.createUrlTree(route);\r\n return this.router.isActive(param, this._anyRouteActiveOptions);\r\n });\r\n this.setClasses();\r\n this.setAriaCurrent();\r\n }\r\n\r\n private setAriaCurrent() {\r\n const el = this.elRef.nativeElement;\r\n\r\n if (this._isActive && this.ariaCurrentWhenActive !== undefined) {\r\n const value = this.ariaCurrentWhenActive.toString();\r\n this.renderer.setAttribute(el, 'aria-current', value);\r\n } else {\r\n this.renderer.removeAttribute(el, 'aria-current');\r\n }\r\n }\r\n\r\n private setClasses() {\r\n if (this._isActive) {\r\n this.classes.forEach((c) => this.addClass(c));\r\n } else {\r\n this.classes.forEach((c) => this.removeClass(c));\r\n }\r\n }\r\n\r\n private addClass(className: string) {\r\n this.renderer.addClass(this.elRef.nativeElement, className);\r\n }\r\n\r\n private removeClass(className: string) {\r\n this.renderer.removeClass(this.elRef.nativeElement, className);\r\n }\r\n\r\n private listenRouterEvents() {\r\n this.router.events\r\n .pipe(\r\n filter((ev) => ev instanceof NavigationEnd),\r\n takeUntilDestroyed(this.destroyRef)\r\n )\r\n .subscribe(() => this.update());\r\n }\r\n\r\n private parseClasses(data: string[] | string) {\r\n const classes = Array.isArray(data) ? data : data.split(' ');\r\n return classes.filter((c) => !!c);\r\n }\r\n\r\n private parseOptions(input: { exact: boolean } | IsActiveMatchOptions) {\r\n if ('exact' in input) {\r\n if (input.exact) {\r\n return EXACT_TRUE_OPTS;\r\n } else {\r\n return EXACT_FALSE_OPTS;\r\n }\r\n } else {\r\n return input;\r\n }\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n Directive,\r\n EnvironmentInjector,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { Params, RouterLink } from '@angular/router';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\n\r\n@Directive({\r\n selector: '[rdtRouterLink]',\r\n standalone: true,\r\n hostDirectives: [\r\n {\r\n directive: RouterLink,\r\n inputs: ['target'],\r\n },\r\n ],\r\n})\r\nexport class RdtRouterLinkDirective<T extends object>\r\n implements OnInit, OnChanges\r\n{\r\n private readonly routerLinkRef = inject(RouterLink, { self: true });\r\n private readonly envInjector = inject(EnvironmentInjector);\r\n\r\n @Input({ alias: 'rdtRouterLink', required: true })\r\n route!: RdtRoute<T>;\r\n\r\n @Input()\r\n target: '_blank' | '_self' | '_parent' | '_top' = '_self';\r\n\r\n @Input()\r\n params?: Partial<T>;\r\n\r\n @Input()\r\n queryParams?: Params;\r\n\r\n @Input()\r\n stateParams?: Params;\r\n\r\n @Input({ transform: booleanAttribute })\r\n disabled = false;\r\n\r\n ngOnInit() {\r\n this.update();\r\n }\r\n\r\n ngOnChanges() {\r\n this.update();\r\n }\r\n\r\n private update() {\r\n if (this.route.canBeEntered(this.envInjector) && !this.disabled) {\r\n this.setLink();\r\n } else {\r\n this.disableLink();\r\n }\r\n }\r\n\r\n private setLink() {\r\n this.routerLinkRef.routerLink = this.route.createAbsoluteUrl(this.params);\r\n this.routerLinkRef.state = this.stateParams ?? this.route.stateParams;\r\n this.routerLinkRef.queryParams = this.queryParams ?? this.route.queryParams;\r\n this.routerLinkRef.ngOnChanges({});\r\n }\r\n\r\n private disableLink() {\r\n this.routerLinkRef.routerLink = null;\r\n this.routerLinkRef.ngOnChanges({});\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { CanDeactivateFn } from '@angular/router';\r\nimport { RdtComponentGuardStoreService } from '@ngrdt/core';\r\n\r\nexport const preventDataLossGuardFn: CanDeactivateFn<any> = () => {\r\n const guardStore = inject(RdtComponentGuardStoreService);\r\n return guardStore.checkCanLeaveGlobal$();\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n GuardsCheckStart,\r\n NavigationEnd,\r\n Route,\r\n Router,\r\n} from '@angular/router';\r\nimport { preventDataLossGuardFn } from './prevent-data-loss.guard';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class GlobalRouteGuardService {\r\n constructor(private router: Router) {}\r\n\r\n // This will help ensure that routes are automatically protected by ensuring that global guards are applied to every route\r\n public ensureGlobalGuards() {\r\n let lastUrl = '';\r\n\r\n this.router.events.subscribe((e) => {\r\n // Remember last url after successful navigation\r\n if (e instanceof NavigationEnd) {\r\n lastUrl = location.href;\r\n }\r\n if (e instanceof GuardsCheckStart) {\r\n let lastChild: ActivatedRouteSnapshot = e.state.root;\r\n while (lastChild?.firstChild) {\r\n lastChild = lastChild.firstChild;\r\n }\r\n // Native back button will immediately replace url on click\r\n // Replace it back to last url before guard check is finished.\r\n // Angular will set it to correct value afterwards.\r\n history.replaceState(window.history.state, '', lastUrl);\r\n\r\n if (lastChild?.routeConfig) {\r\n this.ensureCanDeactivateGuards(lastChild.routeConfig);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private ensureCanDeactivateGuards(routeConfig: Route) {\r\n if (!routeConfig.canDeactivate) {\r\n routeConfig.canDeactivate = [];\r\n }\r\n\r\n const canDeactivateGuards = routeConfig.canDeactivate;\r\n\r\n // ensure that the \"MySpecialCanDeactivateGuard\" is in effect.\r\n if (!canDeactivateGuards.find((o) => o == preventDataLossGuardFn)) {\r\n canDeactivateGuards.push(preventDataLossGuardFn);\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngrdt-router.mjs","sources":["../../../../@ngrdt/router/src/lib/services/rdt-cannot-be-entered.token.ts","../../../../@ngrdt/router/src/lib/services/rdt-confirm-data-loss.service.ts","../../../../@ngrdt/router/src/lib/rdt-route/utils.ts","../../../../@ngrdt/router/src/lib/services/rdt-routes.token.ts","../../../../@ngrdt/router/src/lib/services/rdt-router.service.ts","../../../../@ngrdt/router/src/lib/rdt-route/constants.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-angular-route.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-route.ts","../../../../@ngrdt/router/src/lib/rdt-route/rdt-route-builder.ts","../../../../@ngrdt/router/src/lib/directives/rdt-any-route-active.directive.ts","../../../../@ngrdt/router/src/lib/directives/rdt-router-link.directive.ts","../../../../@ngrdt/router/src/lib/guards/prevent-data-loss.guard.ts","../../../../@ngrdt/router/src/lib/guards/global-route-guard.service.ts","../../../../@ngrdt/router/src/ngrdt-router.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { RdtRedirectFn, RdtRedirectReturnType } from '../rdt-route/utils';\n\n/**\n * Injection token that defines behavior when route cannot be entered (canBeEntered returns false).\n * If value is undefined, route will be redirected to ''.\n */\nexport const RDT_CANNOT_BE_ENTERED_PROVIDER = new InjectionToken<\n RdtRedirectFn | RdtRedirectReturnType\n>('RDT_CANNOT_BE_ENTERED', { factory: () => undefined, providedIn: 'root' });\n","import { InjectionToken } from '@angular/core';\r\nimport { defer, Observable, of } from 'rxjs';\r\n\r\nexport const RDT_CONFIRM_DATA_LOSS_SERVICE =\r\n new InjectionToken<RdtConfirmDataLossService>(\r\n 'RDT_CONFIRM_DATA_LOSS_SERVICE',\r\n { factory: () => new RdtConfirmDataLossServiceAlert() }\r\n );\r\n\r\nexport abstract class RdtConfirmDataLossService {\r\n abstract confirmDataLoss(): Observable<boolean>;\r\n}\r\n\r\nexport class RdtConfirmDataLossServiceAlert extends RdtConfirmDataLossService {\r\n override confirmDataLoss(): Observable<boolean> {\r\n return defer(() =>\r\n of(confirm('Are you sure you want to leave this page?'))\r\n );\r\n }\r\n}\r\n","import { RdtRoute } from './rdt-route';\r\n\r\nexport type ParamTypeMap<T> = {\r\n [key in keyof T]?: 'string' | 'number';\r\n};\r\n\r\nexport interface ParamMapping {\r\n urlName: string;\r\n tableName: string;\r\n}\r\n\r\nexport interface StaticRouteParams {\r\n [absolutePath: string]: object;\r\n}\r\n\r\nexport type RdtRedirectReturnType = string | void | undefined;\r\n\r\nexport type RdtRedirectFn = (\r\n currentPath: string,\r\n targetPath: string,\r\n targetRoute: RdtRoute\r\n) => RdtRedirectReturnType;\r\n\r\nexport class RdtReadonlyParameters {\r\n constructor(protected readonly params: StaticRouteParams = {}) {}\r\n\r\n get<T extends object>(route: RdtRoute<T>): Partial<T> | null {\r\n return (this.params[route.absolutePath] as Partial<T>) ?? null;\r\n }\r\n}\r\n\r\nexport class RdtParameters extends RdtReadonlyParameters {\r\n set<T extends object>(route: RdtRoute<T>, params: Partial<T>) {\r\n this.params[route.absolutePath] = params;\r\n }\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\n\r\nexport const RDT_ROUTES_PROVIDER = new InjectionToken<RdtRoute[]>(\r\n 'RDT_ROUTES_PROVIDER'\r\n);\r\n","import { Location, PlatformLocation } from '@angular/common';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { NavigationEnd, Params, Router } from '@angular/router';\r\nimport { RdtStringUtils } from '@ngrdt/utils';\r\nimport { filter, Observable, take } from 'rxjs';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\nimport { RdtReadonlyParameters } from '../rdt-route/utils';\r\nimport { RDT_ROUTES_PROVIDER } from './rdt-routes.token';\r\n\r\nexport interface RdtNavigateExtras {\r\n state?: Params;\r\n query?: Params;\r\n target?: '_blank' | '_self' | '_parent' | '_top';\r\n replaceUrl?: boolean;\r\n}\r\n\r\nconst DEFAULT_TARGET = '_self';\r\nconst RDT_STATE_PARAMS_KEY = 'RdtStateParams';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class RdtRouterService {\r\n readonly allRoutes = inject(RDT_ROUTES_PROVIDER, { optional: true });\r\n\r\n private readonly location = inject(Location);\r\n private readonly router = inject(Router);\r\n private readonly baseHref = inject(PlatformLocation).getBaseHrefFromDOM();\r\n\r\n private _previousUrl: string | null = null;\r\n private _currentUrl: string | null = null;\r\n\r\n get previousUrl() {\r\n return this._previousUrl;\r\n }\r\n\r\n get currentUrl() {\r\n return this._currentUrl;\r\n }\r\n\r\n parsePreviousUrl() {\r\n return this._previousUrl ? this.parseAbsoluteUrl(this._previousUrl) : null;\r\n }\r\n\r\n parseCurrentUrl() {\r\n return this._currentUrl ? this.parseAbsoluteUrl(this._currentUrl) : null;\r\n }\r\n\r\n readonly navigationEnd$ = this.router.events.pipe(\r\n filter((e) => e instanceof NavigationEnd)\r\n ) as Observable<NavigationEnd>;\r\n\r\n readonly nextNavigationEnd$ = this.navigationEnd$.pipe(take(1));\r\n\r\n constructor() {\r\n if (this.allRoutes === null) {\r\n console.warn(\r\n 'All routes not provided. Make sure to provide RDT_ROUTES_PROVIDER with RdtRoute[].'\r\n );\r\n this.allRoutes = [];\r\n }\r\n\r\n this.navigationEnd$.subscribe((e) => {\r\n this._previousUrl = this._currentUrl;\r\n this._currentUrl = e.url;\r\n });\r\n }\r\n\r\n /**\r\n * @returns window.history.state extended by state parameters passed from parent window.\r\n */\r\n getHistoryState() {\r\n if (\r\n 'RdtStateParams' in window &&\r\n typeof window[RDT_STATE_PARAMS_KEY] === 'object'\r\n ) {\r\n return { ...window[RDT_STATE_PARAMS_KEY], ...(history.state ?? {}) };\r\n } else {\r\n return history.state ?? {};\r\n }\r\n }\r\n\r\n /**\r\n * Navigates to the specified route.\r\n * @param link Route to navigate to.\r\n * @param params Parameter of route passed as first argument.\r\n * @param extras Allows you to specify additional parameters for navigation. These extras have higher priority than those defined in the route.\r\n * @returns Promise that resolves when navigation is complete.\r\n */\r\n navigate<T extends object>(\r\n link: RdtRoute<T>,\r\n params?: Partial<T>,\r\n extras?: RdtNavigateExtras\r\n ) {\r\n const url = params\r\n ? link.createAbsoluteUrl(params)\r\n : link.createAbsoluteUrl();\r\n\r\n const target = extras?.target ?? DEFAULT_TARGET;\r\n const queryParams = extras?.query ?? link.queryParams;\r\n const stateParams = extras?.state ?? link.stateParams;\r\n\r\n if (target === '_self') {\r\n return this.router.navigate([url], {\r\n queryParams: queryParams,\r\n state: stateParams,\r\n replaceUrl: extras?.replaceUrl,\r\n });\r\n }\r\n\r\n const absolutePath = RdtStringUtils.createAbsoluteUrl(url, this.baseHref);\r\n const pathWithParams = RdtStringUtils.appendQueryParams(\r\n absolutePath,\r\n queryParams\r\n );\r\n const win = window.open(pathWithParams, target);\r\n if (win) {\r\n (win as any)[RDT_STATE_PARAMS_KEY] = stateParams;\r\n }\r\n return Promise.resolve(true);\r\n }\r\n\r\n navigateHome(extras?: RdtNavigateExtras) {\r\n return this.router.navigateByUrl(\r\n RdtStringUtils.appendQueryParams('/', extras?.query ?? {}),\r\n {\r\n state: extras?.state,\r\n replaceUrl: extras?.replaceUrl,\r\n }\r\n );\r\n }\r\n\r\n navigateBack(extras?: RdtNavigateExtras) {\r\n const parsed = this.parseAbsoluteUrl();\r\n if (parsed) {\r\n let route: RdtRoute | null = parsed.route.withStaticParams(parsed.params);\r\n do {\r\n route = route.parent;\r\n } while (route && route.entryDisabled);\r\n\r\n // In case route has no ancestor with allowed entry,\r\n if (!route) {\r\n return this.navigateHome(extras);\r\n }\r\n if (extras) {\r\n if (extras.query) {\r\n route = route.withQueryParams(extras.query);\r\n }\r\n if (extras.state) {\r\n route = route.withStateParams(extras.state);\r\n }\r\n }\r\n return this.navigate(route, extras);\r\n } else {\r\n console.warn(\r\n `Cannot go back from ${this.location.path()} because no route matches current url`\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * This method will try to find matching route for given absolute URL, extract its parameters and return them.\r\n * If no route matches the URL, it returns null. Parameters are extracted only for the last matching route, not ancestors.\r\n * @param url Absolute URL to parse (e.g. '/home/details/123?query=abc').\r\n * @returns Object containing the matching route and its parameters, or null if no route is matching.\r\n */\r\n parseAbsoluteUrl(url = this.location.path()) {\r\n if (this.allRoutes) {\r\n for (const route of this.allRoutes) {\r\n const params = route.parseAbsoluteUrl(url);\r\n if (params) {\r\n return { route, params };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n extractAllParams(currentRoute?: RdtRoute): RdtReadonlyParameters | null {\r\n if (!currentRoute) {\r\n const parsed = this.parseAbsoluteUrl();\r\n if (!parsed) {\r\n console.warn('No route matches current url.');\r\n return new RdtReadonlyParameters();\r\n }\r\n currentRoute = parsed.route;\r\n }\r\n const url = this.location.path();\r\n return currentRoute.parseAbsoluteUrl(url);\r\n }\r\n\r\n isParentOfCurrentLocation(route: RdtRoute) {\r\n console.log(this.parseAbsoluteUrl());\r\n return true;\r\n }\r\n\r\n removeQueryParams(...paramNames: string[]) {\r\n const regex = new RegExp(`[?&](${paramNames.join('|')})=[^&]*`, 'g');\r\n\r\n return history.replaceState(\r\n history.state,\r\n '',\r\n location.pathname + location.search.replace(regex, '').replace(/^&/, '?')\r\n );\r\n }\r\n}\r\n","export enum RdtNavigationSource {\r\n BREADCRUMB = 'breadcrumb',\r\n}\r\n","import { Location } from '@angular/common';\r\nimport {\r\n EnvironmentInjector,\r\n EnvironmentProviders,\r\n inject,\r\n Provider,\r\n runInInjectionContext,\r\n Type,\r\n} from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n CanActivateChildFn,\r\n CanActivateFn,\r\n CanDeactivateFn,\r\n CanMatchFn,\r\n Data,\r\n LoadChildrenCallback,\r\n ResolveFn,\r\n Route,\r\n Router,\r\n RouterStateSnapshot,\r\n RunGuardsAndResolvers,\r\n UrlSegment,\r\n} from '@angular/router';\r\nimport { RDT_CANNOT_BE_ENTERED_PROVIDER } from '../services/rdt-cannot-be-entered.token';\r\nimport { RdtNavigationSource } from './constants';\r\nimport { RdtRoute } from './rdt-route';\r\n\r\nexport class RdtAngularRoute<T extends object> {\r\n private route: RdtRoute<T>;\r\n private children: Route[] = [];\r\n\r\n // Must be set from component declaration files\r\n private loadChildren?: LoadChildrenCallback;\r\n private component?: Type<any>;\r\n private providers: (Provider | EnvironmentProviders)[] = [];\r\n private resolvers: { [key: string]: ResolveFn<unknown> } = {};\r\n private canActivate: CanActivateFn[] = [];\r\n private canActivateChild: CanActivateChildFn[] = [];\r\n private canDeactivate: CanDeactivateFn<T>[] = [];\r\n private runGuardsAndResolvers?: RunGuardsAndResolvers;\r\n private data?: Data;\r\n\r\n constructor(route: RdtRoute<T>) {\r\n this.route = route;\r\n }\r\n\r\n provide(...providers: Type<unknown>[]) {\r\n this.providers.push(...providers);\r\n return this;\r\n }\r\n\r\n setModule(callback: LoadChildrenCallback) {\r\n this.loadChildren = callback;\r\n return this;\r\n }\r\n\r\n setComponent(comp: Type<any>) {\r\n this.component = comp;\r\n return this;\r\n }\r\n\r\n setChildren(...routes: Route[]) {\r\n this.children = routes;\r\n return this;\r\n }\r\n\r\n addResolve(paramName: string, resolver: ResolveFn<unknown>) {\r\n this.resolvers[paramName] = resolver;\r\n return this;\r\n }\r\n\r\n addCanActivate(...fns: CanActivateFn[]) {\r\n this.canActivate.push(...fns);\r\n return this;\r\n }\r\n\r\n addCanDeactivate(...fns: CanDeactivateFn<any>[]) {\r\n this.canDeactivate.push(...fns);\r\n return this;\r\n }\r\n\r\n addCanActivateChild(...fns: CanActivateChildFn[]) {\r\n this.canActivateChild.push(...fns);\r\n return this;\r\n }\r\n\r\n setRunGuardsAndResolvers(value: RunGuardsAndResolvers) {\r\n this.runGuardsAndResolvers = value;\r\n return this;\r\n }\r\n\r\n build(): Route {\r\n this.checkChildrenMatch();\r\n\r\n let res: Route = {\r\n path: this.route.path,\r\n providers: this.providers,\r\n title: this.route.name,\r\n canMatch: this.getCanMatch(),\r\n };\r\n\r\n if (this.component) {\r\n res.component = this.component;\r\n } else if (this.loadChildren) {\r\n res.loadChildren = this.loadChildren;\r\n }\r\n\r\n res.data = this.data ?? {\r\n breadcrumb: {\r\n label: this.route.name,\r\n disable: this.route.entryDisabled,\r\n staticStateParams: {\r\n src: RdtNavigationSource.BREADCRUMB,\r\n },\r\n },\r\n ...this.route.data,\r\n };\r\n\r\n const guard: CanActivateFn = (\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ) => {\r\n const injector = inject(EnvironmentInjector);\r\n if (\r\n runInInjectionContext(\r\n injector,\r\n this.route.canBeEntered.bind(this.route)\r\n )\r\n ) {\r\n return true;\r\n } else {\r\n const router = inject(Router);\r\n const location = inject(Location);\r\n let url = inject(RDT_CANNOT_BE_ENTERED_PROVIDER);\r\n if (typeof url === 'function') {\r\n //console.error(this.route.absolutePath);\r\n url = runInInjectionContext(\r\n injector,\r\n url.bind(url, location.path(), state.url, this.route)\r\n );\r\n }\r\n if (typeof url === 'string') {\r\n return router.parseUrl(url);\r\n } else {\r\n return false;\r\n }\r\n }\r\n };\r\n this.canActivate.push(guard);\r\n\r\n res.canActivate = this.canActivate;\r\n res.canDeactivate = this.canDeactivate;\r\n\r\n // If children exist, change\r\n // {\r\n // path: '/path',\r\n // component: FeatureComponent,\r\n // children: [...]\r\n // }\r\n // into\r\n // {\r\n // path: '/path',\r\n // children: [\r\n // {\r\n // path: '',\r\n // component: FeatureComponent\r\n // },\r\n // ...\r\n // ]\r\n // }\r\n if (this.children.length > 0) {\r\n if (this.loadChildren || this.component) {\r\n const path = res.path;\r\n res.path = '';\r\n res.pathMatch = 'full';\r\n res.canMatch = undefined;\r\n res = {\r\n path: path,\r\n children: [res, ...this.children],\r\n canActivateChild: this.canActivateChild,\r\n canMatch: this.getCanMatch(),\r\n };\r\n } else {\r\n res.children = this.children;\r\n }\r\n }\r\n\r\n if (Object.keys(this.resolvers).length > 0) {\r\n res.resolve = this.resolvers;\r\n }\r\n\r\n if (this.runGuardsAndResolvers) {\r\n res.runGuardsAndResolvers = this.runGuardsAndResolvers;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n private getCanMatch(): CanMatchFn[] | undefined {\r\n const paramMap = this.route.paramMap;\r\n const hasNumberParams = Object.keys(paramMap).some(\r\n (p) => paramMap[p as keyof T] === 'number'\r\n );\r\n if (!hasNumberParams) {\r\n return undefined;\r\n }\r\n const routeSegmentLength = this.route.path.split('/').length;\r\n const regex = this.route.regex\r\n ? new RegExp(`^${this.route.regex.source}$`)\r\n : this.route.absoluteRegex;\r\n return [\r\n (route: Route, segments: UrlSegment[]) => {\r\n const path = segments\r\n .slice(0, routeSegmentLength)\r\n .map((s) => s.path)\r\n .join('/');\r\n return regex.test(path);\r\n },\r\n ];\r\n }\r\n\r\n private checkChildrenMatch() {\r\n // Check that all routes are present if route is not\r\n // lazy loaded module.\r\n if (\r\n !this.loadChildren &&\r\n (this.route.children.length > 0 || this.children.length > 0)\r\n ) {\r\n if (this.children.length < this.route.children.length) {\r\n throw new Error(\r\n `RdtRoute ${this.route.name} has ${\r\n this.route.children.length\r\n } children, but RdtAngularRoute has ${\r\n this.children.length\r\n }. These numbers must match. Did you forget to call .setChildren() method in global routes definition? Routes with following names should be present: ${this.route.children\r\n .map((ch) => ch.name)\r\n .join(', ')}`\r\n );\r\n } else if (this.children.length > this.route.children.length) {\r\n throw new Error(\r\n `RdtRoute ${this.route.name} has ${\r\n this.route.children.length\r\n } children, but RdtAngularRoute has ${\r\n this.children.length\r\n }. These numbers must match. Did you forget to call .setChildren() method in feature shell routes definition? Routes with following paths should be present: ${this.children\r\n .map((ch) => ch.path)\r\n .join(', ')}`\r\n );\r\n }\r\n const n1 = this.children.map((ch) => ch.path!);\r\n const n2 = this.route.children.map((ch) => ch.path);\r\n n1.sort();\r\n n2.sort();\r\n for (let i = 0; i < n1.length; i++) {\r\n if (n1[i] !== n2[i]) {\r\n throw new Error(\r\n `Paths of children provided in RdtRoute and\r\n RdtAngularRoute do not match. ${n1[i]} != ${n2[i]}`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { Injector, runInInjectionContext } from '@angular/core';\r\nimport { Data, Params } from '@angular/router';\r\nimport { RdtStringUtils } from '@ngrdt/utils';\r\nimport { RdtAngularRoute } from './rdt-angular-route';\r\nimport { ParamMapping, ParamTypeMap, RdtReadonlyParameters } from './utils';\r\n\r\nexport function ALWAYS_TRUE() {\r\n return true;\r\n}\r\n\r\nexport class RdtRoute<T extends object = any> {\r\n protected orderedParams: string[] = [];\r\n protected _paramMap: ParamTypeMap<T> = {};\r\n protected _regex: RegExp | null = null;\r\n protected paramMappings: ParamMapping[] = [];\r\n protected _staticParams: Partial<T> = {};\r\n protected _queryParams: Params = {};\r\n protected _stateParams: Params = {};\r\n protected _data: Data = {};\r\n\r\n protected _name!: string;\r\n protected _path!: string;\r\n protected _parent: RdtRoute | null = null;\r\n protected _children: RdtRoute[] = [];\r\n protected _entryDisabled = false;\r\n protected _canBeEntered: () => boolean = ALWAYS_TRUE;\r\n protected _built = false;\r\n\r\n private _absoluteRegex?: RegExp;\r\n\r\n /**\r\n * Map of parameters and their types.\r\n */\r\n get paramMap(): Readonly<ParamTypeMap<T>> {\r\n return this._paramMap;\r\n }\r\n\r\n /**\r\n * Human readable name for display in breadcrumbs, title, etc.\r\n */\r\n get name() {\r\n return this._name;\r\n }\r\n\r\n /**\r\n * Path of the route relative to parent route.\r\n */\r\n get path() {\r\n return this._path;\r\n }\r\n\r\n /**\r\n * Parent route.\r\n */\r\n get parent() {\r\n return this._parent;\r\n }\r\n\r\n /**\r\n * Child routes.\r\n */\r\n get children() {\r\n return this._children;\r\n }\r\n\r\n /**\r\n * Absolute path of parent route or '/' if there is no parent.\r\n * Hostname excluded.\r\n */\r\n get basePath(): string {\r\n return this._parent ? this._parent.absolutePath : '/';\r\n }\r\n\r\n /**\r\n * Absolute path of the route. Hostname excluded.\r\n */\r\n get absolutePath() {\r\n return RdtStringUtils.joinPaths(this.basePath, this._path);\r\n }\r\n\r\n /**\r\n * Regular expression route path relative to parent route.\r\n * Hostname excluded.\r\n */\r\n get regex() {\r\n return this._regex;\r\n }\r\n\r\n /**\r\n * Regular expression to match only this route (not children\r\n * or parent routes). Hostname excluded.\r\n */\r\n get absoluteRegex(): RegExp {\r\n if (this._absoluteRegex) {\r\n return this._absoluteRegex;\r\n }\r\n\r\n if (!this._regex) {\r\n this._absoluteRegex = new RegExp('^/$');\r\n if (this._parent) {\r\n throw new Error('Nested route with empty path is not allowed.');\r\n }\r\n } else if (this._parent) {\r\n // Remove initial ^ and ending $\r\n const parent = this._parent.absoluteRegex.source.slice(1, -1);\r\n this._absoluteRegex = new RegExp(\r\n '^' + RdtStringUtils.joinPaths(parent, this._regex.source) + '$'\r\n );\r\n } else {\r\n this._absoluteRegex = new RegExp(\r\n '^' + RdtStringUtils.joinPaths('/', this._regex.source) + '$'\r\n );\r\n }\r\n return this._absoluteRegex;\r\n }\r\n\r\n /**\r\n * Denotes disabled route entry.\r\n * If true, route should have no NgModule\r\n * or component and only serves as virtual module\r\n * for breadcrumb.\r\n */\r\n get entryDisabled() {\r\n return this._entryDisabled;\r\n }\r\n\r\n /**\r\n * Statically set state params used when navigating to this instance.\r\n */\r\n get stateParams() {\r\n return this._stateParams;\r\n }\r\n\r\n /**\r\n * Statically set query params used when navigating to this instance.\r\n */\r\n get queryParams() {\r\n return this._queryParams;\r\n }\r\n\r\n /**\r\n * @param url Absolute path to test.\r\n * @returns True if url matches this route.\r\n */\r\n testUrl(url: string) {\r\n return this.absoluteRegex.test(url);\r\n }\r\n\r\n /**\r\n * Statically set parameters used when navigating to this instance.\r\n */\r\n get staticParams() {\r\n return { ...this._staticParams };\r\n }\r\n\r\n get hasCanBeEnteredGuard() {\r\n return this._canBeEntered !== ALWAYS_TRUE;\r\n }\r\n\r\n /**\r\n * Data that is passed to Angular route definition.\r\n */\r\n get data() {\r\n return this._data;\r\n }\r\n\r\n /**\r\n * Meta guard that is used by [rdtRouterLink] and RdtMenu\r\n * to determine if route can be entered.\r\n * @param injector Environment or custom injector.\r\n * @returns True if route can be entered.\r\n */\r\n canBeEntered(injector?: Injector): boolean {\r\n return injector\r\n ? runInInjectionContext(injector, this._canBeEntered)\r\n : this._canBeEntered();\r\n }\r\n\r\n /**\r\n * Extracts url parameters from absolute path for this path and each parent.\r\n */\r\n parseAbsoluteUrl(url: string): RdtReadonlyParameters | null {\r\n const reg = this.absoluteRegex;\r\n if (!reg.test(url)) {\r\n return null;\r\n }\r\n const matches = reg.exec(url);\r\n if (matches) {\r\n const values = matches.slice(1).reverse();\r\n const obj = this.fill(values);\r\n if (obj) {\r\n return new RdtReadonlyParameters(obj);\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n private fill(values: string[], res: Record<string, any> = {}) {\r\n const params: { [key in keyof T]?: string | number } = {};\r\n const reversedParams = this.orderedParams.slice().reverse();\r\n for (let i = 0; i < reversedParams.length && i < values.length; i++) {\r\n const key = reversedParams[i] as keyof T;\r\n const mappedKey =\r\n this.paramMappings.find((m) => m.urlName === key)?.tableName ?? key;\r\n let val: string | number = values[i];\r\n\r\n if (this._paramMap[key] === 'number') {\r\n val = parseInt(val);\r\n }\r\n params[mappedKey as keyof T] = val;\r\n }\r\n res[this.absolutePath] = params;\r\n\r\n if (values.length > reversedParams.length && this._parent) {\r\n this._parent.fill(values.slice(reversedParams.length), res);\r\n }\r\n return res;\r\n }\r\n\r\n /**\r\n * Fills parameters in path with values from paramMap.\r\n * Use withStaticParams() beforehand in case parent paths contain parameters.\r\n * @param paramMap Must contain all parameters for this route.\r\n * @returns Absolute path.\r\n */\r\n createAbsoluteUrl(paramMap: Partial<T> = this._staticParams): string {\r\n if (!this._parent) {\r\n return this.createUrl(this.absolutePath, paramMap);\r\n } else {\r\n return RdtStringUtils.joinPaths(\r\n this._parent.createAbsoluteUrl(),\r\n this.createRelativeUrl(paramMap)\r\n );\r\n }\r\n }\r\n\r\n createRelativeUrl(paramMap: Partial<T> = this._staticParams) {\r\n return this.createUrl(this.path, paramMap);\r\n }\r\n\r\n private createUrl(path: string, paramMap: Partial<T>) {\r\n const paramNames = Object.keys(this._paramMap);\r\n paramNames.sort((a, b) => b.length - a.length);\r\n const extendedParamMap: any = { ...paramMap };\r\n\r\n this.paramMappings.forEach((mapping) => {\r\n if (mapping.tableName in paramMap) {\r\n extendedParamMap[mapping.urlName] = (paramMap as any)[\r\n mapping.tableName\r\n ];\r\n }\r\n });\r\n\r\n paramNames.forEach((param) => {\r\n path = path.replace(`:${param}`, `${extendedParamMap[param as keyof T]}`);\r\n });\r\n\r\n return path;\r\n }\r\n\r\n toAngularRoute() {\r\n if (!this._built) {\r\n throw new Error('You have to first call .build() on route!');\r\n }\r\n return new RdtAngularRoute<T>(this);\r\n }\r\n\r\n /**\r\n * Provides static mapping for parameter names tableName -> urlName.\r\n * Returns new instance of RdtRoute<T> that is clone of\r\n * this route and its parents (NOT children).\r\n * @returns Clone of this route with mapped parameter names.\r\n */\r\n withParamMappings(mappings: ParamMapping[]) {\r\n const clone = this.clone();\r\n clone.paramMappings = mappings;\r\n return clone;\r\n }\r\n\r\n /**\r\n * Sets static parameters for this route.\r\n * @param params Static parameters for this route.\r\n * @returns Clone of this with static parameters set.\r\n */\r\n withStaticParams(params: T): RdtRoute<T>;\r\n withStaticParams<T2 extends object>(\r\n route: RdtRoute<T2>,\r\n params: T2\r\n ): RdtRoute<T>;\r\n\r\n /**\r\n * Sets parameters for itself or parents.\r\n * Returns new instance of RdtRoute<T> that is clone of\r\n * this route and its parents (NOT children).\r\n * @returns Clone of this route with static parameters set.\r\n */\r\n withStaticParams<T2 extends object>(param1: RdtRoute<T2> | T, param2?: T2) {\r\n const clone = this.clone();\r\n\r\n if (param2) {\r\n const routeAbsPath = (param1 as RdtRoute<T2>).absolutePath;\r\n let current: RdtRoute | null = clone;\r\n\r\n while (current) {\r\n if (current.absolutePath === routeAbsPath) {\r\n current._staticParams = param2;\r\n }\r\n current = current._parent;\r\n }\r\n } else {\r\n clone._staticParams = param1 as T;\r\n }\r\n return clone;\r\n }\r\n\r\n withQueryParams(queryParams: Params) {\r\n const clone = this.clone();\r\n clone._queryParams = { ...queryParams };\r\n return clone;\r\n }\r\n\r\n withStateParams(stateParams: Params) {\r\n const clone = this.clone();\r\n clone._stateParams = { ...stateParams };\r\n return clone;\r\n }\r\n\r\n /**\r\n * @returns Partial of object that only contains properties necessary to create this route.\r\n */\r\n extractRouteParams(row: T): Partial<T> {\r\n const res: Partial<T> = {};\r\n\r\n this.orderedParams.forEach((param) => {\r\n const mapping = this.paramMappings.find((m) => m.urlName === param);\r\n const mappedParam = (mapping?.tableName ?? param) as keyof T;\r\n if (mappedParam in row) {\r\n res[mappedParam] = row[mappedParam];\r\n }\r\n });\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * @returns New instance of RdtRoute<T> that is clone of\r\n * this route and its parents (NOT children).\r\n */\r\n clone() {\r\n const clone = new RdtRoute<T>();\r\n clone._name = this._name;\r\n clone._parent = this._parent?.clone() ?? null;\r\n clone._path = this.path;\r\n clone._entryDisabled = this._entryDisabled;\r\n clone.orderedParams = [...this.orderedParams];\r\n clone._paramMap = { ...this._paramMap };\r\n clone._regex = this._regex ? new RegExp(this._regex) : null;\r\n clone.paramMappings = this.paramMappings;\r\n clone._staticParams = { ...this._staticParams };\r\n clone._stateParams = { ...this._stateParams };\r\n return clone;\r\n }\r\n}\r\n","import { Data } from '@angular/router';\r\nimport { RdtRoute } from './rdt-route';\r\n\r\nconst DEFAULT_PARAM_TYPE = 'number';\r\n\r\nexport class RdtRouteBuilder<T extends object = any> extends RdtRoute<T> {\r\n /**\r\n * CanBeEntered function is synchronous function which\r\n * lets framework hide menu buttons and disable links.\r\n * Function is run in environment injection context, so\r\n * you can inject global services, tokens, etc.\r\n * @param fn\r\n */\r\n setCanBeEntered(fn: () => boolean) {\r\n this._canBeEntered = fn;\r\n return this;\r\n }\r\n\r\n /**\r\n * Entry disabled route will generate disabled breadcrumb.\r\n * It should not have any component nor module added to it.\r\n * @param value\r\n * @returns\r\n */\r\n setEntryDisabled(value = true) {\r\n this._entryDisabled = value;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets path relative to parent. It is defined the same way as Angular route path including parameters.\r\n * You need to call setParam() for each parameter you use in the path.\r\n */\r\n setPath(path: string) {\r\n this._path = path;\r\n const s = path.split('/');\r\n const params: string[] = [];\r\n s.forEach((part) => {\r\n if (part.includes(':')) {\r\n const param = part.split(':')[1] as keyof T;\r\n if (param) {\r\n params.push(param as string);\r\n if (!this._paramMap[param]) {\r\n this._paramMap[param] = DEFAULT_PARAM_TYPE;\r\n }\r\n }\r\n }\r\n });\r\n this.orderedParams = params;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets Angular route data.\r\n * @param data Angular route data object. Breadcrumb key is merged into it.\r\n */\r\n setData(data: Data) {\r\n this._data = data;\r\n return this;\r\n }\r\n\r\n /**\r\n * Defines parameter type and lets framework parse it.\r\n * @param paramName\r\n * @param type\r\n */\r\n setParam(paramName: keyof T, type: 'string' | 'number') {\r\n this._paramMap[paramName] = type;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets name to display in breadcrumb, etc.\r\n */\r\n setName(name: string) {\r\n this._name = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Call .build() on children before you call this method!\r\n */\r\n setChildren(...children: RdtRoute[]) {\r\n this._children = children;\r\n for (const child of children) {\r\n (child as RdtRouteBuilder)._parent = this;\r\n }\r\n return this;\r\n }\r\n\r\n build() {\r\n if (typeof this._path !== 'string') {\r\n throw new Error(\r\n 'Please provide path for route. Empty string is acceptable.'\r\n );\r\n }\r\n this._built = true;\r\n this.setRegex();\r\n return this as RdtRoute<T>;\r\n }\r\n\r\n private setRegex() {\r\n const params = Object.keys(this._paramMap);\r\n params.sort((a, b) => b.length - a.length);\r\n let substituted = this.path;\r\n params.forEach((p) => {\r\n const type = this._paramMap[p as keyof T];\r\n if (!type) {\r\n throw new Error('Params is not set i');\r\n }\r\n substituted = substituted.replace(`:${p}`, RdtRouteBuilder.groups[type]);\r\n });\r\n\r\n if (substituted === '') {\r\n this._regex = null;\r\n } else {\r\n this._regex = new RegExp(substituted);\r\n }\r\n }\r\n\r\n private static readonly groups = {\r\n string: '(.+)',\r\n number: '(\\\\d+)',\r\n };\r\n}\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Renderer2,\r\n SimpleChanges,\r\n inject,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n IsActiveMatchOptions,\r\n NavigationEnd,\r\n Router,\r\n RouterModule,\r\n} from '@angular/router';\r\nimport { filter } from 'rxjs';\r\n\r\nconst EXACT_TRUE_OPTS: IsActiveMatchOptions = {\r\n paths: 'exact',\r\n queryParams: 'exact',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n};\r\n\r\nconst EXACT_FALSE_OPTS: IsActiveMatchOptions = {\r\n paths: 'subset',\r\n queryParams: 'subset',\r\n fragment: 'ignored',\r\n matrixParams: 'ignored',\r\n};\r\n\r\n/**\r\n * Directive that appends class to host if any of the watched routes is active.\r\n */\r\n@Directive({\r\n selector: '[rdtAnyRouteActive]',\r\n standalone: true,\r\n providers: [RouterModule],\r\n})\r\nexport class RdtAnyRouteActiveDirective implements OnInit, OnChanges {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly router = inject(Router);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly elRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n\r\n @Input({ required: true, alias: 'rdtAnyRouteActive' })\r\n set anyRouteActive(data: string[] | string) {\r\n this.classes = this.parseClasses(data);\r\n }\r\n\r\n @Input({ required: true })\r\n watchedRoutes: (string | string[])[] = [];\r\n\r\n @Input()\r\n set anyRouteActiveOptions(value: { exact: boolean } | IsActiveMatchOptions) {\r\n this._anyRouteActiveOptions = this.parseOptions(value);\r\n }\r\n private _anyRouteActiveOptions: IsActiveMatchOptions = EXACT_FALSE_OPTS;\r\n\r\n @Input()\r\n ariaCurrentWhenActive?:\r\n | 'page'\r\n | 'step'\r\n | 'location'\r\n | 'date'\r\n | 'time'\r\n | true\r\n | false;\r\n\r\n get isActive() {\r\n return this._isActive;\r\n }\r\n private _isActive = false;\r\n\r\n private classes: string[] = [];\r\n\r\n ngOnInit() {\r\n this.update();\r\n this.listenRouterEvents();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['anyRouteActive']?.previousValue) {\r\n const prev = this.parseClasses(changes['anyRouteActive'].previousValue);\r\n prev.forEach((c) => this.removeClass(c));\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n update() {\r\n this._isActive = this.watchedRoutes.some((route) => {\r\n const param =\r\n typeof route === 'string' ? route : this.router.createUrlTree(route);\r\n return this.router.isActive(param, this._anyRouteActiveOptions);\r\n });\r\n this.setClasses();\r\n this.setAriaCurrent();\r\n }\r\n\r\n private setAriaCurrent() {\r\n const el = this.elRef.nativeElement;\r\n\r\n if (this._isActive && this.ariaCurrentWhenActive !== undefined) {\r\n const value = this.ariaCurrentWhenActive.toString();\r\n this.renderer.setAttribute(el, 'aria-current', value);\r\n } else {\r\n this.renderer.removeAttribute(el, 'aria-current');\r\n }\r\n }\r\n\r\n private setClasses() {\r\n if (this._isActive) {\r\n this.classes.forEach((c) => this.addClass(c));\r\n } else {\r\n this.classes.forEach((c) => this.removeClass(c));\r\n }\r\n }\r\n\r\n private addClass(className: string) {\r\n this.renderer.addClass(this.elRef.nativeElement, className);\r\n }\r\n\r\n private removeClass(className: string) {\r\n this.renderer.removeClass(this.elRef.nativeElement, className);\r\n }\r\n\r\n private listenRouterEvents() {\r\n this.router.events\r\n .pipe(\r\n filter((ev) => ev instanceof NavigationEnd),\r\n takeUntilDestroyed(this.destroyRef)\r\n )\r\n .subscribe(() => this.update());\r\n }\r\n\r\n private parseClasses(data: string[] | string) {\r\n const classes = Array.isArray(data) ? data : data.split(' ');\r\n return classes.filter((c) => !!c);\r\n }\r\n\r\n private parseOptions(input: { exact: boolean } | IsActiveMatchOptions) {\r\n if ('exact' in input) {\r\n if (input.exact) {\r\n return EXACT_TRUE_OPTS;\r\n } else {\r\n return EXACT_FALSE_OPTS;\r\n }\r\n } else {\r\n return input;\r\n }\r\n }\r\n}\r\n","import {\r\n booleanAttribute,\r\n Directive,\r\n EnvironmentInjector,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n} from '@angular/core';\r\nimport { Params, RouterLink } from '@angular/router';\r\nimport { RdtRoute } from '../rdt-route/rdt-route';\r\n\r\n@Directive({\r\n selector: '[rdtRouterLink]',\r\n standalone: true,\r\n hostDirectives: [\r\n {\r\n directive: RouterLink,\r\n inputs: ['target'],\r\n },\r\n ],\r\n})\r\nexport class RdtRouterLinkDirective<T extends object>\r\n implements OnInit, OnChanges\r\n{\r\n private readonly routerLinkRef = inject(RouterLink, { self: true });\r\n private readonly envInjector = inject(EnvironmentInjector);\r\n\r\n @Input({ alias: 'rdtRouterLink', required: true })\r\n route!: RdtRoute<T>;\r\n\r\n @Input()\r\n target: '_blank' | '_self' | '_parent' | '_top' = '_self';\r\n\r\n @Input()\r\n params?: Partial<T>;\r\n\r\n @Input()\r\n queryParams?: Params;\r\n\r\n @Input()\r\n stateParams?: Params;\r\n\r\n @Input({ transform: booleanAttribute })\r\n disabled = false;\r\n\r\n ngOnInit() {\r\n this.update();\r\n }\r\n\r\n ngOnChanges() {\r\n this.update();\r\n }\r\n\r\n private update() {\r\n if (this.route.canBeEntered(this.envInjector) && !this.disabled) {\r\n this.setLink();\r\n } else {\r\n this.disableLink();\r\n }\r\n }\r\n\r\n private setLink() {\r\n this.routerLinkRef.routerLink = this.route.createAbsoluteUrl(this.params);\r\n this.routerLinkRef.state = this.stateParams ?? this.route.stateParams;\r\n this.routerLinkRef.queryParams = this.queryParams ?? this.route.queryParams;\r\n this.routerLinkRef.ngOnChanges({});\r\n }\r\n\r\n private disableLink() {\r\n this.routerLinkRef.routerLink = null;\r\n this.routerLinkRef.ngOnChanges({});\r\n }\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { CanDeactivateFn } from '@angular/router';\r\nimport { RdtComponentGuardStoreService } from '@ngrdt/core';\r\n\r\nexport const preventDataLossGuardFn: CanDeactivateFn<any> = () => {\r\n const guardStore = inject(RdtComponentGuardStoreService);\r\n return guardStore.checkCanLeaveGlobal$();\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n GuardsCheckStart,\r\n NavigationEnd,\r\n Route,\r\n Router,\r\n} from '@angular/router';\r\nimport { preventDataLossGuardFn } from './prevent-data-loss.guard';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class GlobalRouteGuardService {\r\n constructor(private router: Router) {}\r\n\r\n // This will help ensure that routes are automatically protected by ensuring that global guards are applied to every route\r\n public ensureGlobalGuards() {\r\n let lastUrl = '';\r\n\r\n this.router.events.subscribe((e) => {\r\n // Remember last url after successful navigation\r\n if (e instanceof NavigationEnd) {\r\n lastUrl = location.href;\r\n }\r\n if (e instanceof GuardsCheckStart) {\r\n let lastChild: ActivatedRouteSnapshot = e.state.root;\r\n while (lastChild?.firstChild) {\r\n lastChild = lastChild.firstChild;\r\n }\r\n // Native back button will immediately replace url on click\r\n // Replace it back to last url before guard check is finished.\r\n // Angular will set it to correct value afterwards.\r\n history.replaceState(window.history.state, '', lastUrl);\r\n\r\n if (lastChild?.routeConfig) {\r\n this.ensureCanDeactivateGuards(lastChild.routeConfig);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private ensureCanDeactivateGuards(routeConfig: Route) {\r\n if (!routeConfig.canDeactivate) {\r\n routeConfig.canDeactivate = [];\r\n }\r\n\r\n const canDeactivateGuards = routeConfig.canDeactivate;\r\n\r\n // ensure that the \"MySpecialCanDeactivateGuard\" is in effect.\r\n if (!canDeactivateGuards.find((o) => o == preventDataLossGuardFn)) {\r\n canDeactivateGuards.push(preventDataLossGuardFn);\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export declare function ALWAYS_TRUE(): boolean;
6
6
  export declare class RdtRoute<T extends object = any> {
7
7
  protected orderedParams: string[];
8
8
  protected _paramMap: ParamTypeMap<T>;
9
- protected _regex: RegExp;
9
+ protected _regex: RegExp | null;
10
10
  protected paramMappings: ParamMapping[];
11
11
  protected _staticParams: Partial<T>;
12
12
  protected _queryParams: Params;
@@ -18,6 +18,7 @@ export declare class RdtRoute<T extends object = any> {
18
18
  protected _children: RdtRoute[];
19
19
  protected _entryDisabled: boolean;
20
20
  protected _canBeEntered: () => boolean;
21
+ protected _built: boolean;
21
22
  private _absoluteRegex?;
22
23
  /**
23
24
  * Map of parameters and their types.
@@ -52,7 +53,7 @@ export declare class RdtRoute<T extends object = any> {
52
53
  * Regular expression route path relative to parent route.
53
54
  * Hostname excluded.
54
55
  */
55
- get regex(): RegExp;
56
+ get regex(): RegExp | null;
56
57
  /**
57
58
  * Regular expression to match only this route (not children
58
59
  * or parent routes). Hostname excluded.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngrdt/router",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18.2.0",
6
6
  "@angular/core": ">=18.2.0",