@coolon/angular-ui-powerups 0.0.67 → 0.0.68

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.
Files changed (121) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +2712 -2285
  2. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  3. package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
  4. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  5. package/coolon-angular-ui-powerups.d.ts +24 -22
  6. package/coolon-angular-ui-powerups.metadata.json +1 -1
  7. package/esm2015/coolon-angular-ui-powerups.js +24 -22
  8. package/esm2015/index.js +2 -2
  9. package/esm2015/lib/angular-ui-powerups.module.js +6 -3
  10. package/esm2015/lib/components/index.js +2 -1
  11. package/esm2015/lib/components/noop/noop.component.js +19 -0
  12. package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.js +2 -2
  13. package/esm2015/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +2 -2
  14. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +2 -2
  15. package/esm2015/lib/interaction/components/interaction-outlet/interaction-outlet.component.js +19 -0
  16. package/esm2015/lib/interaction/guards/interaction-guard.service.js +85 -0
  17. package/esm2015/lib/interaction/index.js +3 -2
  18. package/esm2015/lib/interaction/interaction.module.js +8 -3
  19. package/esm2015/lib/interaction/services/dialog-interaction.service.js +30 -5
  20. package/esm2015/lib/place/components/abstract-place-navigation.component.js +5 -5
  21. package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.js +2 -2
  22. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +60 -66
  23. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +2 -2
  24. package/esm2015/lib/place/index.js +9 -8
  25. package/esm2015/lib/place/navigation-session.js +147 -0
  26. package/esm2015/lib/place/place-component.js +18 -14
  27. package/esm2015/lib/place/place-definition.js +197 -5
  28. package/esm2015/lib/place/place-history.js +3 -2
  29. package/esm2015/lib/place/place-router.js +183 -89
  30. package/esm2015/lib/place/route/formatter.js +63 -0
  31. package/esm2015/lib/place/route/guards/leave-place.guard.js +193 -0
  32. package/esm2015/lib/place/route/guards/place-route.guard.js +243 -0
  33. package/esm2015/lib/place/route/parameter-decorators.js +35 -18
  34. package/esm2015/lib/place/route/parameter-definition.class.js +123 -67
  35. package/esm2015/lib/place/route/parameter-sanitiser.js +4 -3
  36. package/esm2015/lib/place/route/parameter-snapshot.js +11 -388
  37. package/esm2015/lib/place/route/visit-sanitiser.js +88 -0
  38. package/esm2015/lib/place/visit.js +107 -8
  39. package/esm2015/public_api.js +4 -4
  40. package/esm5/coolon-angular-ui-powerups.js +24 -22
  41. package/esm5/index.js +2 -2
  42. package/esm5/lib/angular-ui-powerups.module.js +6 -3
  43. package/esm5/lib/components/index.js +2 -1
  44. package/esm5/lib/components/noop/noop.component.js +21 -0
  45. package/esm5/lib/interaction/components/alert-dialog/alert-dialog.component.js +2 -2
  46. package/esm5/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +2 -2
  47. package/esm5/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +2 -2
  48. package/esm5/lib/interaction/components/interaction-outlet/interaction-outlet.component.js +21 -0
  49. package/esm5/lib/interaction/guards/interaction-guard.service.js +94 -0
  50. package/esm5/lib/interaction/index.js +3 -2
  51. package/esm5/lib/interaction/interaction.module.js +8 -3
  52. package/esm5/lib/interaction/services/dialog-interaction.service.js +28 -5
  53. package/esm5/lib/place/components/abstract-place-navigation.component.js +5 -5
  54. package/esm5/lib/place/components/list-place-nav/list-place-nav.component.js +2 -2
  55. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +70 -82
  56. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +2 -2
  57. package/esm5/lib/place/index.js +9 -8
  58. package/esm5/lib/place/navigation-session.js +193 -0
  59. package/esm5/lib/place/place-component.js +19 -15
  60. package/esm5/lib/place/place-definition.js +253 -5
  61. package/esm5/lib/place/place-history.js +7 -3
  62. package/esm5/lib/place/place-router.js +240 -108
  63. package/esm5/lib/place/route/formatter.js +96 -0
  64. package/esm5/lib/place/route/guards/leave-place.guard.js +152 -0
  65. package/esm5/lib/place/route/guards/place-route.guard.js +273 -0
  66. package/esm5/lib/place/route/parameter-decorators.js +35 -18
  67. package/esm5/lib/place/route/parameter-definition.class.js +179 -76
  68. package/esm5/lib/place/route/parameter-sanitiser.js +4 -3
  69. package/esm5/lib/place/route/parameter-snapshot.js +11 -480
  70. package/esm5/lib/place/route/visit-sanitiser.js +99 -0
  71. package/esm5/lib/place/visit.js +160 -8
  72. package/esm5/public_api.js +4 -4
  73. package/fesm2015/coolon-angular-ui-powerups.js +1441 -1108
  74. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  75. package/fesm5/coolon-angular-ui-powerups.js +2705 -2282
  76. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  77. package/lib/components/index.d.ts +1 -0
  78. package/lib/components/noop/noop.component.d.ts +3 -0
  79. package/lib/interaction/components/interaction-outlet/interaction-outlet.component.d.ts +3 -0
  80. package/lib/interaction/guards/interaction-guard.service.d.ts +13 -0
  81. package/lib/interaction/index.d.ts +2 -1
  82. package/lib/interaction/services/dialog-interaction.service.d.ts +5 -1
  83. package/lib/place/components/place-outlet/place-outlet.component.d.ts +12 -12
  84. package/lib/place/index.d.ts +5 -4
  85. package/lib/place/navigation-session.d.ts +26 -0
  86. package/lib/place/place-component.d.ts +3 -3
  87. package/lib/place/place-definition.d.ts +30 -3
  88. package/lib/place/place-history.d.ts +3 -3
  89. package/lib/place/place-router.d.ts +25 -19
  90. package/lib/place/route/{parameter-type.d.ts → formatter.d.ts} +5 -5
  91. package/lib/place/{guards → route/guards}/leave-place.guard.d.ts +3 -3
  92. package/lib/place/route/guards/place-route.guard.d.ts +27 -0
  93. package/lib/place/route/parameter-decorators.d.ts +14 -6
  94. package/lib/place/route/parameter-definition.class.d.ts +21 -17
  95. package/lib/place/route/parameter-sanitiser.d.ts +3 -2
  96. package/lib/place/route/parameter-snapshot.d.ts +4 -26
  97. package/lib/place/route/visit-sanitiser.d.ts +12 -0
  98. package/lib/place/visit.d.ts +24 -3
  99. package/package.json +1 -1
  100. package/schematics/place-routes/place-class-scanner.d.ts +2 -2
  101. package/schematics/place-routes/place-class-scanner.js +7 -7
  102. package/schematics/place-routes/place-class-scanner.js.map +1 -1
  103. package/schematics/place-routes/place-def.d.ts +3 -2
  104. package/schematics/place-routes/place-def.js +21 -12
  105. package/schematics/place-routes/place-def.js.map +1 -1
  106. package/schematics/place-routes/templates/place-destinations.ts.template +5 -3
  107. package/schematics/place-routes/templates/place-routes.ts.template +10 -1
  108. package/schematics/place-routes/templates/place-visits.ts.template +21 -0
  109. package/esm2015/lib/interaction/guards/close-interaction.guard.js +0 -62
  110. package/esm2015/lib/place/guards/leave-place.guard.js +0 -194
  111. package/esm2015/lib/place/guards/place-route.guard.js +0 -74
  112. package/esm2015/lib/place/route/parameter-type.js +0 -61
  113. package/esm2015/lib/place/route/route-parameter-value.js +0 -230
  114. package/esm5/lib/interaction/guards/close-interaction.guard.js +0 -66
  115. package/esm5/lib/place/guards/leave-place.guard.js +0 -159
  116. package/esm5/lib/place/guards/place-route.guard.js +0 -78
  117. package/esm5/lib/place/route/parameter-type.js +0 -94
  118. package/esm5/lib/place/route/route-parameter-value.js +0 -316
  119. package/lib/interaction/guards/close-interaction.guard.d.ts +0 -12
  120. package/lib/place/guards/place-route.guard.d.ts +0 -10
  121. package/lib/place/route/route-parameter-value.d.ts +0 -42
@@ -12,11 +12,15 @@ var PlaceHistory = /** @class */ (function () {
12
12
  this.router = router;
13
13
  this._history = new Map();
14
14
  }
15
+ // @Trace()
16
+ // @Trace()
15
17
  /**
16
18
  * @param {?} state
17
19
  * @return {?}
18
20
  */
19
- PlaceHistory.prototype.add = /**
21
+ PlaceHistory.prototype.add =
22
+ // @Trace()
23
+ /**
20
24
  * @param {?} state
21
25
  * @return {?}
22
26
  */
@@ -25,7 +29,7 @@ var PlaceHistory = /** @class */ (function () {
25
29
  var history = this.getHistory(state.placeDefinition);
26
30
  /** @type {?} */
27
31
  var previousState = _.last(history);
28
- if (!previousState || state.hasChanged(previousState)) {
32
+ if (!previousState || state.hasChangedFrom(previousState)) {
29
33
  history.unshift(state); // LIFO
30
34
  this.setHistory(state.placeDefinition, history.slice(0, 3)); // limit our history to 4 visits
31
35
  }
@@ -87,4 +91,4 @@ if (false) {
87
91
  */
88
92
  PlaceHistory.prototype.router;
89
93
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9wbGFjZS1oaXN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7OztBQUl2QjtJQU9FLHNCQUE2QixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUZuQyxhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXdDLENBQUM7SUFHbkUsQ0FBQzs7Ozs7SUFFRCwwQkFBRzs7OztJQUFILFVBQUksS0FBd0I7O1lBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7O1lBQ2hELGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDckQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0M7U0FDOUY7SUFDSCxDQUFDOzs7OztJQUVELGlDQUFVOzs7O0lBQVYsVUFBVyxRQUF5Qjs7WUFDOUIsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7Ozs7OztJQUVPLGlDQUFVOzs7Ozs7SUFBbEIsVUFBbUIsUUFBeUIsRUFBRSxPQUE0QjtRQUN4RSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7Z0JBOUJGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBUFEsTUFBTTs7O3VCQURmO0NBa0RDLEFBNUNELElBNENDO1NBekNZLFlBQVk7Ozs7OztJQUV2QixnQ0FBbUU7Ozs7O0lBRXZELDhCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUGxhY2VEZWZpbml0aW9uIH0gZnJvbSAnLi9wbGFjZS1kZWZpbml0aW9uJztcbmltcG9ydCB7IFBhcmFtZXRlclNuYXBzaG90IH0gZnJvbSAnLi9yb3V0ZS9wYXJhbWV0ZXItc25hcHNob3QnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFjZUhpc3Rvcnkge1xuXG4gIHByaXZhdGUgX2hpc3RvcnkgPSBuZXcgTWFwPFBsYWNlRGVmaW5pdGlvbiwgUGFyYW1ldGVyU25hcHNob3RbXT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyKSB7XG4gIH1cblxuICBhZGQoc3RhdGU6IFBhcmFtZXRlclNuYXBzaG90KSB7XG4gICAgY29uc3QgaGlzdG9yeSA9IHRoaXMuZ2V0SGlzdG9yeShzdGF0ZS5wbGFjZURlZmluaXRpb24pO1xuICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBfLmxhc3QoaGlzdG9yeSk7XG4gICAgaWYgKCFwcmV2aW91c1N0YXRlIHx8IHN0YXRlLmhhc0NoYW5nZWQocHJldmlvdXNTdGF0ZSkpIHtcbiAgICAgIGhpc3RvcnkudW5zaGlmdChzdGF0ZSk7IC8vIExJRk9cbiAgICAgIHRoaXMuc2V0SGlzdG9yeShzdGF0ZS5wbGFjZURlZmluaXRpb24sIGhpc3Rvcnkuc2xpY2UoMCwgMykpOyAvLyBsaW1pdCBvdXIgaGlzdG9yeSB0byA0IHZpc2l0c1xuICAgIH1cbiAgfVxuXG4gIGdldEhpc3RvcnkocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbik6IFBhcmFtZXRlclNuYXBzaG90W10ge1xuICAgIGxldCBoaXN0b3J5ID0gdGhpcy5faGlzdG9yeS5nZXQocGxhY2VEZWYpO1xuICAgIGlmICghaGlzdG9yeSkge1xuICAgICAgaGlzdG9yeSA9IFtdO1xuICAgICAgdGhpcy5zZXRIaXN0b3J5KHBsYWNlRGVmLCBoaXN0b3J5KTtcbiAgICB9XG4gICAgcmV0dXJuIGhpc3Rvcnk7XG4gIH1cblxuICBwcml2YXRlIHNldEhpc3RvcnkocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbiwgaGlzdG9yeTogUGFyYW1ldGVyU25hcHNob3RbXSkge1xuICAgIHRoaXMuX2hpc3Rvcnkuc2V0KHBsYWNlRGVmLCBoaXN0b3J5KTtcbiAgfVxuXG4vLyBwcmV2aW91c1Zpc2l0KCk6IFZpc2l0IHtcbiAgLy8gICByZXR1cm4gXy5sYXN0KHRoaXMuX2hpc3RvcnkpO1xuICAvLyB9XG4gIC8vXG4gIC8vIHdpdGhQcmV2aW91c1Zpc2l0PFI+KGNhbGxiYWNrOihwcmV2aW91c1Zpc2l0OlZpc2l0KT0+UiwgZGVmYXVsdFZhbHVlOlIgPSBudWxsKTpSe1xuICAvLyAgIGNvbnN0IHZpc2l0ID0gdGhpcy5wcmV2aW91c1Zpc2l0KCk7XG4gIC8vICAgcmV0dXJuIHZpc2l0ID8gY2FsbGJhY2sodmlzaXQpIDogZGVmYXVsdFZhbHVlO1xuICAvLyB9XG4gIC8vXG4gIC8vIHByZXZpb3VzVmlzaXRUbyhwbGFjZTogUGxhY2UpOiBWaXNpdCB7XG4gIC8vICAgcmV0dXJuIG5ldyBWaXNpdEhpc3RvcnkuUXVlcnkodGhpcy5faGlzdG9yeSkudG8ocGxhY2UpLmxhc3QoKTtcbiAgLy8gfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFZpc2l0SGlzdG9yeSB7XG5cbiAgLy8gZXhwb3J0IGNsYXNzIFF1ZXJ5IHtcbiAgLy8gICBwcml2YXRlIF9oaXN0b3J5OiBWaXNpdC5TdGF0ZVtdO1xuICAvLyAgIHByaXZhdGUgX3BsYWNlczogUGxhY2VbXTtcbiAgLy8gICBwcml2YXRlIF9wcmVkaWNhdGU6ICh2aXNpdDogYW55KSA9PiBib29sZWFuO1xuICAvLyAgIHByaXZhdGUgX2xpbWl0OiBudW1iZXI7XG4gIC8vXG4gIC8vICAgY29uc3RydWN0b3IoaGlzdG9yeSwgbGltaXQgPSBoaXN0b3J5Lmxlbmd0aCkge1xuICAvLyAgICAgdGhpcy5faGlzdG9yeSA9IGhpc3Rvcnk7XG4gIC8vICAgICB0aGlzLl9wbGFjZXMgPSBbXTtcbiAgLy8gICAgIHRoaXMuX3ByZWRpY2F0ZSA9ICh2aXNpdCA9PiB0cnVlKTtcbiAgLy8gICAgIHRoaXMuX2xpbWl0ID0gbGltaXQ7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIHRvKC4uLnBsYWNlczpQbGFjZVtdKTp0aGlzIHtcbiAgLy8gICAgIHRoaXMuX3BsYWNlcyA9IHBsYWNlcztcbiAgLy8gICAgIHJldHVybiB0aGlzO1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICB3aXRoKHBhcmFtZXRlcnM6IHsgW3BhcmFtZXRlcjogc3RyaW5nXTogYW55IH0pOiB0aGlzIHtcbiAgLy8gICAgIHRoaXMubWF0Y2hpbmcoc3RhdGUgPT4ge1xuICAvLyAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocGFyYW1ldGVycykucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IG1hdGNoVmFsdWUgPSBwYXJhbWV0ZXJzW2tleV07XG4gIC8vICAgICAgICAgY29uc3QgdmlzaXRWYWx1ZSA9IHN0YXRlLmdldChrZXkpO1xuICAvLyAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBtYXRjaFZhbHVlID09PSAnKicgPyAhXy5pc05pbCh2aXNpdFZhbHVlKSA6IHZpc2l0VmFsdWUgPT0gbWF0Y2hWYWx1ZTtcbiAgLy8gICAgICAgICAvLyBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYG1hdGNoZWQ9JHttYXRjaGVkfWAsIHBhcmFtZXRlcnMsIHZpc2l0VmFsdWUpO1xuICAvLyAgICAgICAgIHJldHVybiBhY2MgJiYgbWF0Y2hlZDtcbiAgLy8gICAgICAgfSwgdHJ1ZSk7XG4gIC8vICAgICB9KTtcbiAgLy8gICAgIHJldHVybiB0aGlzO1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICBsYXN0KCk6IFZpc2l0LlN0YXRlIHtcbiAgLy8gICAgIHJldHVybiBfLmZpbmRMYXN0KHRoaXMuX2hpc3RvcnksIHZpc2l0ID0+IHRoaXMuX21hdGNoZXModmlzaXQpKVxuICAvLyAgIH1cbiAgLy9cbiAgLy8gICAvLyBAdHJhY2VcbiAgLy8gICBhbGxUaGF0TWF0Y2goKTogVmlzaXQuU3RhdGVbXSB7XG4gIC8vICAgICByZXR1cm4gXy5maWx0ZXIodGhpcy5faGlzdG9yeSwgdmlzaXQgPT4gdGhpcy5fbWF0Y2hlcyh2aXNpdCkpLnNsaWNlKC10aGlzLl9saW1pdCk7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIC8vIEB0cmFjZVxuICAvLyAgIG1vc3RSZWNlbnRWYWx1ZU9mPFQ9YW55PihwYXJhbTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQgPSBudWxsKTogVCB7XG4gIC8vICAgICBjb25zdCBsYXN0U3RhdGVXaXRoUGFyYW0gPSBfLmZpbmRMYXN0KHRoaXMuYWxsVGhhdE1hdGNoKCksIHN0YXRlID0+ICFfLmlzTmlsKHN0YXRlLmdldChwYXJhbSkpKTtcbiAgLy8gICAgIHJldHVybiBfLmlzTmlsKGxhc3RTdGF0ZVdpdGhQYXJhbSkgPyBkZWZhdWx0VmFsdWUgOiBsYXN0U3RhdGVXaXRoUGFyYW0uZ2V0KHBhcmFtKTtcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgbGltaXQobGltaXQ6IG51bWJlcik6IHRoaXMge1xuICAvLyAgICAgdGhpcy5fbGltaXQgPSBsaW1pdDtcbiAgLy8gICAgIHJldHVybiB0aGlzO1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICBtYXRjaGluZyhwcmVkaWNhdGU6ICh2aXNpdDogVmlzaXQuU3RhdGUpID0+IGJvb2xlYW4pOiB0aGlzIHtcbiAgLy8gICAgIHRoaXMuX3ByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgLy8gICAgIHJldHVybiB0aGlzO1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICBfbWF0Y2hlcyh2aXNpdDogVmlzaXQuU3RhdGUpIHtcbiAgLy8gICAgIHJldHVybiB0aGlzLl9pc1BsYWNlTWF0Y2godmlzaXQpICYmIHRoaXMuX3ByZWRpY2F0ZSh2aXNpdCk7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIF9pc1BsYWNlTWF0Y2godmlzaXQ6IFZpc2l0LlN0YXRlKSB7XG4gIC8vICAgICByZXR1cm4gdGhpcy5fcGxhY2VzLmxlbmd0aCA8IDEgfHwgdGhpcy5fcGxhY2VzLmluY2x1ZGVzKHZpc2l0LnBsYWNlKVxuICAvLyAgIH1cbiAgLy9cbiAgLy8gfVxuXG59XG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9wbGFjZS1oaXN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7OztBQUl2QjtJQU9FLHNCQUE2QixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUZuQyxhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFHdkQsQ0FBQztJQUVELFdBQVc7Ozs7OztJQUNYLDBCQUFHOzs7Ozs7SUFBSCxVQUFJLEtBQVk7O1lBQ1IsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQzs7WUFDaEQsYUFBYSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUN6RCxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTztZQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztTQUM5RjtJQUNILENBQUM7Ozs7O0lBRUQsaUNBQVU7Ozs7SUFBVixVQUFXLFFBQXlCOztZQUM5QixPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDcEM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDOzs7Ozs7O0lBRU8saUNBQVU7Ozs7OztJQUFsQixVQUFtQixRQUF5QixFQUFFLE9BQWdCO1FBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDOztnQkEvQkYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7OztnQkFSUSxNQUFNOzs7dUJBRGY7Q0FvREMsQUE3Q0QsSUE2Q0M7U0ExQ1ksWUFBWTs7Ozs7O0lBRXZCLGdDQUF1RDs7Ozs7SUFFM0MsOEJBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFBsYWNlRGVmaW5pdGlvbiB9IGZyb20gJy4vcGxhY2UtZGVmaW5pdGlvbic7XG5pbXBvcnQgeyBWaXNpdCB9IGZyb20gJy4vdmlzaXQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFjZUhpc3Rvcnkge1xuXG4gIHByaXZhdGUgX2hpc3RvcnkgPSBuZXcgTWFwPFBsYWNlRGVmaW5pdGlvbiwgVmlzaXRbXT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyKSB7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBhZGQoc3RhdGU6IFZpc2l0KSB7XG4gICAgY29uc3QgaGlzdG9yeSA9IHRoaXMuZ2V0SGlzdG9yeShzdGF0ZS5wbGFjZURlZmluaXRpb24pO1xuICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBfLmxhc3QoaGlzdG9yeSk7XG4gICAgaWYgKCFwcmV2aW91c1N0YXRlIHx8IHN0YXRlLmhhc0NoYW5nZWRGcm9tKHByZXZpb3VzU3RhdGUpKSB7XG4gICAgICBoaXN0b3J5LnVuc2hpZnQoc3RhdGUpOyAvLyBMSUZPXG4gICAgICB0aGlzLnNldEhpc3Rvcnkoc3RhdGUucGxhY2VEZWZpbml0aW9uLCBoaXN0b3J5LnNsaWNlKDAsIDMpKTsgLy8gbGltaXQgb3VyIGhpc3RvcnkgdG8gNCB2aXNpdHNcbiAgICB9XG4gIH1cblxuICBnZXRIaXN0b3J5KHBsYWNlRGVmOiBQbGFjZURlZmluaXRpb24pOiBWaXNpdFtdIHtcbiAgICBsZXQgaGlzdG9yeSA9IHRoaXMuX2hpc3RvcnkuZ2V0KHBsYWNlRGVmKTtcbiAgICBpZiAoIWhpc3RvcnkpIHtcbiAgICAgIGhpc3RvcnkgPSBbXTtcbiAgICAgIHRoaXMuc2V0SGlzdG9yeShwbGFjZURlZiwgaGlzdG9yeSk7XG4gICAgfVxuICAgIHJldHVybiBoaXN0b3J5O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIaXN0b3J5KHBsYWNlRGVmOiBQbGFjZURlZmluaXRpb24sIGhpc3Rvcnk6IFZpc2l0W10pIHtcbiAgICB0aGlzLl9oaXN0b3J5LnNldChwbGFjZURlZiwgaGlzdG9yeSk7XG4gIH1cblxuLy8gcHJldmlvdXNWaXNpdCgpOiBWaXNpdCB7XG4gIC8vICAgcmV0dXJuIF8ubGFzdCh0aGlzLl9oaXN0b3J5KTtcbiAgLy8gfVxuICAvL1xuICAvLyB3aXRoUHJldmlvdXNWaXNpdDxSPihjYWxsYmFjazoocHJldmlvdXNWaXNpdDpWaXNpdCk9PlIsIGRlZmF1bHRWYWx1ZTpSID0gbnVsbCk6UntcbiAgLy8gICBjb25zdCB2aXNpdCA9IHRoaXMucHJldmlvdXNWaXNpdCgpO1xuICAvLyAgIHJldHVybiB2aXNpdCA/IGNhbGxiYWNrKHZpc2l0KSA6IGRlZmF1bHRWYWx1ZTtcbiAgLy8gfVxuICAvL1xuICAvLyBwcmV2aW91c1Zpc2l0VG8ocGxhY2U6IFBsYWNlKTogVmlzaXQge1xuICAvLyAgIHJldHVybiBuZXcgVmlzaXRIaXN0b3J5LlF1ZXJ5KHRoaXMuX2hpc3RvcnkpLnRvKHBsYWNlKS5sYXN0KCk7XG4gIC8vIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBWaXNpdEhpc3Rvcnkge1xuXG4gIC8vIGV4cG9ydCBjbGFzcyBRdWVyeSB7XG4gIC8vICAgcHJpdmF0ZSBfaGlzdG9yeTogVmlzaXQuU3RhdGVbXTtcbiAgLy8gICBwcml2YXRlIF9wbGFjZXM6IFBsYWNlW107XG4gIC8vICAgcHJpdmF0ZSBfcHJlZGljYXRlOiAodmlzaXQ6IGFueSkgPT4gYm9vbGVhbjtcbiAgLy8gICBwcml2YXRlIF9saW1pdDogbnVtYmVyO1xuICAvL1xuICAvLyAgIGNvbnN0cnVjdG9yKGhpc3RvcnksIGxpbWl0ID0gaGlzdG9yeS5sZW5ndGgpIHtcbiAgLy8gICAgIHRoaXMuX2hpc3RvcnkgPSBoaXN0b3J5O1xuICAvLyAgICAgdGhpcy5fcGxhY2VzID0gW107XG4gIC8vICAgICB0aGlzLl9wcmVkaWNhdGUgPSAodmlzaXQgPT4gdHJ1ZSk7XG4gIC8vICAgICB0aGlzLl9saW1pdCA9IGxpbWl0O1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICB0byguLi5wbGFjZXM6UGxhY2VbXSk6dGhpcyB7XG4gIC8vICAgICB0aGlzLl9wbGFjZXMgPSBwbGFjZXM7XG4gIC8vICAgICByZXR1cm4gdGhpcztcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgd2l0aChwYXJhbWV0ZXJzOiB7IFtwYXJhbWV0ZXI6IHN0cmluZ106IGFueSB9KTogdGhpcyB7XG4gIC8vICAgICB0aGlzLm1hdGNoaW5nKHN0YXRlID0+IHtcbiAgLy8gICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgLy8gICAgICAgICBjb25zdCBtYXRjaFZhbHVlID0gcGFyYW1ldGVyc1trZXldO1xuICAvLyAgICAgICAgIGNvbnN0IHZpc2l0VmFsdWUgPSBzdGF0ZS5nZXQoa2V5KTtcbiAgLy8gICAgICAgICBjb25zdCBtYXRjaGVkID0gbWF0Y2hWYWx1ZSA9PT0gJyonID8gIV8uaXNOaWwodmlzaXRWYWx1ZSkgOiB2aXNpdFZhbHVlID09IG1hdGNoVmFsdWU7XG4gIC8vICAgICAgICAgLy8gTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBtYXRjaGVkPSR7bWF0Y2hlZH1gLCBwYXJhbWV0ZXJzLCB2aXNpdFZhbHVlKTtcbiAgLy8gICAgICAgICByZXR1cm4gYWNjICYmIG1hdGNoZWQ7XG4gIC8vICAgICAgIH0sIHRydWUpO1xuICAvLyAgICAgfSk7XG4gIC8vICAgICByZXR1cm4gdGhpcztcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgbGFzdCgpOiBWaXNpdC5TdGF0ZSB7XG4gIC8vICAgICByZXR1cm4gXy5maW5kTGFzdCh0aGlzLl9oaXN0b3J5LCB2aXNpdCA9PiB0aGlzLl9tYXRjaGVzKHZpc2l0KSlcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgLy8gQHRyYWNlXG4gIC8vICAgYWxsVGhhdE1hdGNoKCk6IFZpc2l0LlN0YXRlW10ge1xuICAvLyAgICAgcmV0dXJuIF8uZmlsdGVyKHRoaXMuX2hpc3RvcnksIHZpc2l0ID0+IHRoaXMuX21hdGNoZXModmlzaXQpKS5zbGljZSgtdGhpcy5fbGltaXQpO1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICAvLyBAdHJhY2VcbiAgLy8gICBtb3N0UmVjZW50VmFsdWVPZjxUPWFueT4ocGFyYW06IHN0cmluZywgZGVmYXVsdFZhbHVlOiBUID0gbnVsbCk6IFQge1xuICAvLyAgICAgY29uc3QgbGFzdFN0YXRlV2l0aFBhcmFtID0gXy5maW5kTGFzdCh0aGlzLmFsbFRoYXRNYXRjaCgpLCBzdGF0ZSA9PiAhXy5pc05pbChzdGF0ZS5nZXQocGFyYW0pKSk7XG4gIC8vICAgICByZXR1cm4gXy5pc05pbChsYXN0U3RhdGVXaXRoUGFyYW0pID8gZGVmYXVsdFZhbHVlIDogbGFzdFN0YXRlV2l0aFBhcmFtLmdldChwYXJhbSk7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIGxpbWl0KGxpbWl0OiBudW1iZXIpOiB0aGlzIHtcbiAgLy8gICAgIHRoaXMuX2xpbWl0ID0gbGltaXQ7XG4gIC8vICAgICByZXR1cm4gdGhpcztcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgbWF0Y2hpbmcocHJlZGljYXRlOiAodmlzaXQ6IFZpc2l0LlN0YXRlKSA9PiBib29sZWFuKTogdGhpcyB7XG4gIC8vICAgICB0aGlzLl9wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gIC8vICAgICByZXR1cm4gdGhpcztcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgX21hdGNoZXModmlzaXQ6IFZpc2l0LlN0YXRlKSB7XG4gIC8vICAgICByZXR1cm4gdGhpcy5faXNQbGFjZU1hdGNoKHZpc2l0KSAmJiB0aGlzLl9wcmVkaWNhdGUodmlzaXQpO1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICBfaXNQbGFjZU1hdGNoKHZpc2l0OiBWaXNpdC5TdGF0ZSkge1xuICAvLyAgICAgcmV0dXJuIHRoaXMuX3BsYWNlcy5sZW5ndGggPCAxIHx8IHRoaXMuX3BsYWNlcy5pbmNsdWRlcyh2aXNpdC5wbGFjZSlcbiAgLy8gICB9XG4gIC8vXG4gIC8vIH1cblxufVxuIl19
@@ -2,152 +2,278 @@
2
2
  * @fileoverview added by tsickle
3
3
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
+ import * as tslib_1 from "tslib";
5
6
  import { Location } from '@angular/common';
6
7
  import { Injectable } from '@angular/core';
7
- import { NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';
8
- import { MutableValueModel } from '@coolon/pectin';
8
+ import { ActivatedRoute, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';
9
+ import { Dsl, GarbageCollector, MutableListModel, MutableValueModel, Trace } from '@coolon/pectin';
9
10
  import _ from 'lodash';
11
+ import { NavigationSession } from './navigation-session';
12
+ import { PlaceHistory } from './place-history';
13
+ import { Visit } from './visit';
10
14
  import * as i0 from "@angular/core";
11
15
  import * as i1 from "@angular/router";
12
16
  import * as i2 from "@angular/common";
13
- var NavigationSession = /** @class */ (function () {
14
- function NavigationSession(isPopState, initialUrl) {
15
- this.isPopState = isPopState;
16
- this.initialUrl = initialUrl;
17
- this._alreadyAccepted = [];
18
- console.log('NavigationSession', { isPopState: isPopState, initialUrl: initialUrl });
19
- }
20
- /**
21
- * @param {?} placeComponent
22
- * @return {?}
23
- */
24
- NavigationSession.prototype.alreadyAccepted = /**
25
- * @param {?} placeComponent
26
- * @return {?}
27
- */
28
- function (placeComponent) {
29
- return this._alreadyAccepted.includes(placeComponent);
30
- };
31
- /**
32
- * @param {?} component
33
- * @return {?}
34
- */
35
- NavigationSession.prototype.rememberAcceptanceOf = /**
36
- * @param {?} component
37
- * @return {?}
38
- */
39
- function (component) {
40
- this._alreadyAccepted.push(component);
41
- };
42
- return NavigationSession;
43
- }());
44
- if (false) {
45
- /**
46
- * @type {?}
47
- * @private
48
- */
49
- NavigationSession.prototype._alreadyAccepted;
50
- /** @type {?} */
51
- NavigationSession.prototype.isPopState;
52
- /** @type {?} */
53
- NavigationSession.prototype.initialUrl;
54
- }
55
- var PlaceRouter = /** @class */ (function () {
56
- function PlaceRouter(router, angularLocation) {
57
- var _this = this;
58
- this.router = router;
59
- this.angularLocation = angularLocation;
60
- this._navigationSession = new MutableValueModel();
17
+ import * as i3 from "./place-history";
18
+ var PlaceRouter = /** @class */ (function (_super) {
19
+ tslib_1.__extends(PlaceRouter, _super);
20
+ function PlaceRouter(router, angularLocation, placeHistory) {
21
+ var _this = _super.call(this) || this;
22
+ _this.router = router;
23
+ _this.angularLocation = angularLocation;
24
+ _this.placeHistory = placeHistory;
25
+ _this.firstRoute = true;
26
+ _this._navigationSessionModel = new MutableValueModel();
27
+ _this._activeVisits = new MutableListModel();
28
+ var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
29
+ _this.activeVisitIndex = chain(_this._activeVisits).indexBy('placeDefinition');
61
30
  angularLocation.onUrlChange((/**
62
31
  * @param {?} url
63
32
  * @return {?}
64
33
  */
65
34
  function (url) {
66
- console.log("### " + url);
35
+ console.log("location.onUrlChange -> " + url);
67
36
  }));
68
- this.router.events.subscribe((/**
37
+ // TODO: make setup the callbacks in during module initiation to make this testable.
38
+ _this.router.events.subscribe((/**
69
39
  * @param {?} event
70
40
  * @return {?}
71
41
  */
72
42
  function (event) {
73
- // console.log(`${event.constructor.name}`, location.pathname, angularLocation.getState());
74
- // NavigationStart -> .... -> NavigationCancel === redirect (so don't ask again)
75
- // NavigationStart -> .... -> NavigationEnd === navigated (so ask next time)
76
- // NavigationStart -> .... -> NavigationError === canceled (guard cancelled so ask next time)
77
- if (event instanceof NavigationStart && !_this.navigationSession) {
78
- _this._navigationSession.value = new NavigationSession(event.navigationTrigger === 'popstate', _this.router.routerState.snapshot.url);
79
- }
80
- if (event instanceof NavigationEnd) {
81
- console.log('navigation ended');
82
- _this._navigationSession.value = null;
43
+ // Routing event sequence
44
+ // ======================
45
+ // NavigationStart -> .... -> NavigationCancel --> redirect, go around again in the same session
46
+ // NavigationStart -> .... -> NavigationEnd --> navigation complete, end session.
47
+ // NavigationStart -> .... -> NavigationError --> navigation canceled, end session.
48
+ // =======================
49
+ if (event instanceof NavigationStart) {
50
+ _this.onAngularRouterStarted(event);
83
51
  }
84
- if (event instanceof NavigationError) {
85
- console.log('navigation errored');
86
- _this._navigationSession.value = null;
52
+ if (event instanceof NavigationEnd || event instanceof NavigationError) {
53
+ _this.onAngularRouterFinished();
87
54
  }
88
55
  }));
56
+ _this.navigationSessionActive = chain(_this.navigationSessionModel).isNotNil();
57
+ _this.navigationSessionActive.subscribe((/**
58
+ * @param {?} active
59
+ * @return {?}
60
+ */
61
+ function (active) {
62
+ console.log('navigationSessionActive', active);
63
+ }));
64
+ return _this;
65
+ // const txo = new TransactionObserver().onEvent(e => console.log(e.toString()));
66
+ // txo.observe('this.navigationSessionModel', this.navigationSessionModel);
89
67
  }
90
68
  Object.defineProperty(PlaceRouter.prototype, "navigationSession", {
91
69
  get: /**
92
70
  * @return {?}
93
71
  */
94
72
  function () {
95
- return this._navigationSession.value;
73
+ return this._navigationSessionModel.value;
96
74
  },
97
75
  enumerable: true,
98
76
  configurable: true
99
77
  });
78
+ Object.defineProperty(PlaceRouter.prototype, "navigationSessionModel", {
79
+ get: /**
80
+ * @return {?}
81
+ */
82
+ function () {
83
+ return this._navigationSessionModel.readonly;
84
+ },
85
+ enumerable: true,
86
+ configurable: true
87
+ });
88
+ Object.defineProperty(PlaceRouter.prototype, "activeVisits", {
89
+ get: /**
90
+ * @return {?}
91
+ */
92
+ function () {
93
+ return this._activeVisits.readonly;
94
+ },
95
+ enumerable: true,
96
+ configurable: true
97
+ });
98
+ /**
99
+ * placeRouter.navigate(placeDestinations.somePlace.createVisit(routeId, ...visitParams));
100
+ * @param visit
101
+ */
102
+ // @Trace()
103
+ /**
104
+ * placeRouter.navigate(placeDestinations.somePlace.createVisit(routeId, ...visitParams));
105
+ * @param {?} visit
106
+ * @return {?}
107
+ */
108
+ // @Trace()
109
+ PlaceRouter.prototype.navigate = /**
110
+ * placeRouter.navigate(placeDestinations.somePlace.createVisit(routeId, ...visitParams));
111
+ * @param {?} visit
112
+ * @return {?}
113
+ */
114
+ // @Trace()
115
+ function (visit) {
116
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
117
+ return tslib_1.__generator(this, function (_a) {
118
+ this.doNavigation(visit);
119
+ return [2 /*return*/];
120
+ });
121
+ });
122
+ };
100
123
  /**
101
124
  * @param {?} activatedRoute
102
125
  * @param {?} previous
103
126
  * @param {?} next
104
127
  * @return {?}
105
128
  */
106
- PlaceRouter.prototype.pushParameterChangesToRoute = /**
129
+ PlaceRouter.prototype.pushVisitChangesToRoute = /**
107
130
  * @param {?} activatedRoute
108
131
  * @param {?} previous
109
132
  * @param {?} next
110
133
  * @return {?}
111
134
  */
112
135
  function (activatedRoute, previous, next) {
113
- /** @type {?} */
114
- var relativePath = !!previous.hasRouteId() ? '..' : '.';
115
- this.router.navigate([relativePath].concat(this.createRouteParameters(next), this.getChildPath(activatedRoute.snapshot)), {
116
- relativeTo: activatedRoute
136
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
137
+ var _this = this;
138
+ return tslib_1.__generator(this, function (_a) {
139
+ // FIXME: no route id -> route id duplicates route parameters
140
+ if (next.hasRoutingChangedFrom(previous)) {
141
+ return [2 /*return*/, this.doNavigation(next, (/**
142
+ * @param {?} router
143
+ * @return {?}
144
+ */
145
+ function (router) {
146
+ /** @type {?} */
147
+ var relativePath = !!previous.placeDefinition.hasRouteId() ? '..' : '.';
148
+ /** @type {?} */
149
+ var def = next.placeDefinition;
150
+ /** @type {?} */
151
+ var params = next.hasRouteId() ?
152
+ [def.getFormattedRouteId(next), def.getFormattedRouteParameters(next)] :
153
+ [def.getFormattedRouteParameters(next)];
154
+ /** @type {?} */
155
+ var commands = [relativePath].concat(params, _this.getChildPath(activatedRoute.snapshot));
156
+ console.log('### Redirect', commands);
157
+ return router.navigate(commands, {
158
+ relativeTo: activatedRoute
159
+ });
160
+ }))];
161
+ }
162
+ else {
163
+ this.placeHistory.add(next);
164
+ }
165
+ return [2 /*return*/];
166
+ });
167
+ });
168
+ };
169
+ /**
170
+ * @param {?} visit
171
+ * @param {?=} customNavigation
172
+ * @return {?}
173
+ */
174
+ PlaceRouter.prototype.doNavigation = /**
175
+ * @param {?} visit
176
+ * @param {?=} customNavigation
177
+ * @return {?}
178
+ */
179
+ function (visit, customNavigation) {
180
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
181
+ var def, parameterCommands, commands;
182
+ return tslib_1.__generator(this, function (_a) {
183
+ switch (_a.label) {
184
+ case 0:
185
+ this._navigationSessionModel.value = NavigationSession.createInternal(visit);
186
+ _a.label = 1;
187
+ case 1:
188
+ _a.trys.push([1, , 6, 7]);
189
+ if (!customNavigation) return [3 /*break*/, 3];
190
+ return [4 /*yield*/, customNavigation(this.router)];
191
+ case 2:
192
+ _a.sent();
193
+ return [3 /*break*/, 5];
194
+ case 3:
195
+ def = visit.placeDefinition;
196
+ parameterCommands = visit.hasRouteId() ?
197
+ [def.getFormattedRouteId(visit), def.getFormattedRouteParameters(visit)] :
198
+ [def.getFormattedRouteParameters(visit)];
199
+ commands = [def.path].concat(parameterCommands);
200
+ console.log('_doNavigation', visit, commands);
201
+ return [4 /*yield*/, this.router.navigate(commands)];
202
+ case 4:
203
+ _a.sent();
204
+ _a.label = 5;
205
+ case 5: return [3 /*break*/, 7];
206
+ case 6:
207
+ if (this.navigationSession && !this.router.getCurrentNavigation()) {
208
+ this.onAngularRouterFinished();
209
+ }
210
+ return [7 /*endfinally*/];
211
+ case 7: return [2 /*return*/];
212
+ }
213
+ });
117
214
  });
118
215
  };
119
216
  // @Trace()
120
217
  // @Trace()
121
218
  /**
122
- * @param {?} activatedRoute
123
- * @param {?} sanitised
219
+ * @private
220
+ * @param {?} event
124
221
  * @return {?}
125
222
  */
126
- PlaceRouter.prototype.getRedirectUrlTree =
223
+ PlaceRouter.prototype.onAngularRouterStarted =
127
224
  // @Trace()
128
225
  /**
129
- * @param {?} activatedRoute
130
- * @param {?} sanitised
226
+ * @private
227
+ * @param {?} event
131
228
  * @return {?}
132
229
  */
133
- function (activatedRoute, sanitised) {
134
- /** @type {?} */
135
- var urlSegments = activatedRoute.url;
230
+ function (event) {
231
+ if (!this.navigationSession) { // We been activated by an external route rather than placeRouter.go(visit)
232
+ console.log('navigation started', { firstTime: this.firstRoute });
233
+ /** @type {?} */
234
+ var session = NavigationSession.createExternal(this.firstRoute);
235
+ if (event.navigationTrigger === 'popstate') {
236
+ session.setPopstateReturn(this.router.routerState.snapshot.url);
237
+ }
238
+ this._navigationSessionModel.value = session;
239
+ }
240
+ this.firstRoute = false;
241
+ };
242
+ // @Trace()
243
+ // @Trace()
244
+ /**
245
+ * @private
246
+ * @return {?}
247
+ */
248
+ PlaceRouter.prototype.onAngularRouterFinished =
249
+ // @Trace()
250
+ /**
251
+ * @private
252
+ * @return {?}
253
+ */
254
+ function () {
255
+ var _this = this;
136
256
  /** @type {?} */
137
- var weHaveARouteId = sanitised.hasRouteId() && sanitised.getFormattedRouteId();
257
+ var session = this._navigationSessionModel.value;
258
+ // Update visits before we end the navigation session. This allows the place out let to
259
+ // gate ignore changes that occur while the visit is active
138
260
  /** @type {?} */
139
- var commands = (weHaveARouteId) ?
140
- [urlSegments[0].path, sanitised.getFormattedRouteId(), sanitised.getFormattedParameters()] :
141
- [urlSegments[0].path, sanitised.getFormattedParameters()];
142
- return this.router.createUrlTree(commands);
261
+ var visits = session.getVisits();
262
+ visits.forEach((/**
263
+ * @param {?} v
264
+ * @return {?}
265
+ */
266
+ function (v) {
267
+ _this.placeHistory.add(v);
268
+ }));
269
+ this._activeVisits.value = visits;
270
+ this._navigationSessionModel.value = null;
143
271
  };
144
272
  /**
145
- * @protected
146
273
  * @param {?} activatedRoute
147
274
  * @return {?}
148
275
  */
149
276
  PlaceRouter.prototype.getChildPath = /**
150
- * @protected
151
277
  * @param {?} activatedRoute
152
278
  * @return {?}
153
279
  */
@@ -158,23 +284,6 @@ var PlaceRouter = /** @class */ (function () {
158
284
  */
159
285
  function (child) { return child.url; })));
160
286
  };
161
- /**
162
- * @protected
163
- * @param {?} parameters
164
- * @return {?}
165
- */
166
- PlaceRouter.prototype.createRouteParameters = /**
167
- * @protected
168
- * @param {?} parameters
169
- * @return {?}
170
- */
171
- function (parameters) {
172
- /** @type {?} */
173
- var routeId = parameters.getFormattedRouteId();
174
- return routeId ?
175
- [routeId, parameters.getFormattedParameters()] :
176
- [parameters.getFormattedParameters()];
177
- };
178
287
  PlaceRouter.decorators = [
179
288
  { type: Injectable, args: [{
180
289
  providedIn: 'root'
@@ -183,18 +292,39 @@ var PlaceRouter = /** @class */ (function () {
183
292
  /** @nocollapse */
184
293
  PlaceRouter.ctorParameters = function () { return [
185
294
  { type: Router },
186
- { type: Location }
295
+ { type: Location },
296
+ { type: PlaceHistory }
187
297
  ]; };
188
- /** @nocollapse */ PlaceRouter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.Location)); }, token: PlaceRouter, providedIn: "root" });
298
+ /** @nocollapse */ PlaceRouter.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PlaceRouter_Factory() { return new PlaceRouter(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.Location), i0.ɵɵinject(i3.PlaceHistory)); }, token: PlaceRouter, providedIn: "root" });
299
+ tslib_1.__decorate([
300
+ Trace(),
301
+ tslib_1.__metadata("design:type", Function),
302
+ tslib_1.__metadata("design:paramtypes", [ActivatedRoute, Visit, Visit]),
303
+ tslib_1.__metadata("design:returntype", Promise)
304
+ ], PlaceRouter.prototype, "pushVisitChangesToRoute", null);
189
305
  return PlaceRouter;
190
- }());
306
+ }(GarbageCollector));
191
307
  export { PlaceRouter };
192
308
  if (false) {
193
309
  /**
194
310
  * @type {?}
195
311
  * @private
196
312
  */
197
- PlaceRouter.prototype._navigationSession;
313
+ PlaceRouter.prototype.firstRoute;
314
+ /**
315
+ * @type {?}
316
+ * @private
317
+ */
318
+ PlaceRouter.prototype._navigationSessionModel;
319
+ /**
320
+ * @type {?}
321
+ * @private
322
+ */
323
+ PlaceRouter.prototype._activeVisits;
324
+ /** @type {?} */
325
+ PlaceRouter.prototype.navigationSessionActive;
326
+ /** @type {?} */
327
+ PlaceRouter.prototype.activeVisitIndex;
198
328
  /**
199
329
  * @type {?}
200
330
  * @private
@@ -202,5 +332,7 @@ if (false) {
202
332
  PlaceRouter.prototype.router;
203
333
  /** @type {?} */
204
334
  PlaceRouter.prototype.angularLocation;
335
+ /** @type {?} */
336
+ PlaceRouter.prototype.placeHistory;
205
337
  }
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUdMLGFBQWEsRUFDYixlQUFlLEVBQ2YsZUFBZSxFQUNmLE1BQU0sRUFFUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxpQkFBaUIsRUFBUyxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7OztBQUl2QjtJQUdFLDJCQUFxQixVQUFtQixFQUFXLFVBQWtCO1FBQWhELGVBQVUsR0FBVixVQUFVLENBQVM7UUFBVyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBRjdELHFCQUFnQixHQUFxQixFQUFFLENBQUM7UUFHOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFVBQVUsWUFBQSxFQUFFLFVBQVUsWUFBQSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDOzs7OztJQUVELDJDQUFlOzs7O0lBQWYsVUFBZ0IsY0FBOEI7UUFDNUMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7Ozs7O0lBRUQsZ0RBQW9COzs7O0lBQXBCLFVBQXFCLFNBQXlCO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNILHdCQUFDO0FBQUQsQ0FBQyxBQWRELElBY0M7Ozs7OztJQWJDLDZDQUFnRDs7SUFFcEMsdUNBQTRCOztJQUFFLHVDQUEyQjs7QUFjdkU7SUFPRSxxQkFBNkIsTUFB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QVEsQ0FBQyxHQUFHOzs7O1FBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFLLENBQUMsR0FBRyxFQUFULENBQVMsRUFBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQzs7Ozs7O0lBRVMsMkNBQXFCOzs7OztJQUEvQixVQUFnQyxVQUE2Qjs7WUFDckQsT0FBTyxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTtRQUNoRCxPQUFPLE9BQU8sQ0FBQyxDQUFDO1lBQ2QsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hELENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDOztnQkE1REYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7OztnQkEzQkMsTUFBTTtnQkFSQyxRQUFROzs7c0JBQWpCO0NBOEZDLEFBN0RELElBNkRDO1NBMURZLFdBQVc7Ozs7OztJQUV0Qix5Q0FBaUY7Ozs7O0lBRXJFLDZCQUErQjs7SUFBRSxzQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZSxcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgTmF2aWdhdGlvbkVuZCxcbiAgTmF2aWdhdGlvbkVycm9yLFxuICBOYXZpZ2F0aW9uU3RhcnQsXG4gIFJvdXRlcixcbiAgVXJsVHJlZVxufSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTXV0YWJsZVZhbHVlTW9kZWwsIFRyYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFBsYWNlQ29tcG9uZW50IH0gZnJvbSAnLi9wbGFjZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFyYW1ldGVyU25hcHNob3QgfSBmcm9tICcuL3JvdXRlL3BhcmFtZXRlci1zbmFwc2hvdCc7XG5cbmNsYXNzIE5hdmlnYXRpb25TZXNzaW9uIHtcbiAgcHJpdmF0ZSBfYWxyZWFkeUFjY2VwdGVkOiBQbGFjZUNvbXBvbmVudFtdID0gW107XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgaXNQb3BTdGF0ZTogYm9vbGVhbiwgcmVhZG9ubHkgaW5pdGlhbFVybDogc3RyaW5nKSB7XG4gICAgY29uc29sZS5sb2coJ05hdmlnYXRpb25TZXNzaW9uJywgeyBpc1BvcFN0YXRlLCBpbml0aWFsVXJsIH0pO1xuICB9XG5cbiAgYWxyZWFkeUFjY2VwdGVkKHBsYWNlQ29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hbHJlYWR5QWNjZXB0ZWQuaW5jbHVkZXMocGxhY2VDb21wb25lbnQpO1xuICB9XG5cbiAgcmVtZW1iZXJBY2NlcHRhbmNlT2YoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCkge1xuICAgIHRoaXMuX2FscmVhZHlBY2NlcHRlZC5wdXNoKGNvbXBvbmVudCk7XG4gIH1cbn1cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFjZVJvdXRlciB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmF2aWdhdGlvblNlc3Npb24gPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8TmF2aWdhdGlvblNlc3Npb24+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlciwgcmVhZG9ubHkgYW5ndWxhckxvY2F0aW9uOiBMb2NhdGlvbikge1xuICAgIGFuZ3VsYXJMb2NhdGlvbi5vblVybENoYW5nZSh1cmwgPT4ge1xuICAgICAgY29uc29sZS5sb2coYCMjIyAke3VybH1gKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGAke2V2ZW50LmNvbnN0cnVjdG9yLm5hbWV9YCwgbG9jYXRpb24ucGF0aG5hbWUsIGFuZ3VsYXJMb2NhdGlvbi5nZXRTdGF0ZSgpKTtcbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25DYW5jZWwgPT09IHJlZGlyZWN0IChzbyBkb24ndCBhc2sgYWdhaW4pXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRW5kID09PSBuYXZpZ2F0ZWQgKHNvIGFzayBuZXh0IHRpbWUpXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRXJyb3IgPT09IGNhbmNlbGVkIChndWFyZCBjYW5jZWxsZWQgc28gYXNrIG5leHQgdGltZSlcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCAmJiAhdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbikge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbi52YWx1ZSA9IG5ldyBOYXZpZ2F0aW9uU2Vzc2lvbihldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJywgdGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ25hdmlnYXRpb24gZW5kZWQnKTtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb24udmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCduYXZpZ2F0aW9uIGVycm9yZWQnKTtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvblNlc3Npb24udmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TZXNzaW9uKCk6IE5hdmlnYXRpb25TZXNzaW9uIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvblNlc3Npb24udmFsdWU7XG4gIH1cblxuICBwdXNoUGFyYW1ldGVyQ2hhbmdlc1RvUm91dGUoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcmV2aW91czogUGFyYW1ldGVyU25hcHNob3QsIG5leHQ6IFBhcmFtZXRlclNuYXBzaG90KSB7XG4gICAgY29uc3QgcmVsYXRpdmVQYXRoID0gISFwcmV2aW91cy5oYXNSb3V0ZUlkKCkgPyAnLi4nIDogJy4nO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyZWxhdGl2ZVBhdGhdLmNvbmNhdCh0aGlzLmNyZWF0ZVJvdXRlUGFyYW1ldGVycyhuZXh0KSwgdGhpcy5nZXRDaGlsZFBhdGgoYWN0aXZhdGVkUm91dGUuc25hcHNob3QpKSwge1xuICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGVcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGdldFJlZGlyZWN0VXJsVHJlZShhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc2FuaXRpc2VkOiBQYXJhbWV0ZXJTbmFwc2hvdCk6IFVybFRyZWUge1xuICAgIGNvbnN0IHVybFNlZ21lbnRzID0gYWN0aXZhdGVkUm91dGUudXJsO1xuICAgIGNvbnN0IHdlSGF2ZUFSb3V0ZUlkID0gc2FuaXRpc2VkLmhhc1JvdXRlSWQoKSAmJiBzYW5pdGlzZWQuZ2V0Rm9ybWF0dGVkUm91dGVJZCgpO1xuICAgIGNvbnN0IGNvbW1hbmRzID0gKHdlSGF2ZUFSb3V0ZUlkKSA/XG4gICAgICBbdXJsU2VnbWVudHNbMF0ucGF0aCwgc2FuaXRpc2VkLmdldEZvcm1hdHRlZFJvdXRlSWQoKSwgc2FuaXRpc2VkLmdldEZvcm1hdHRlZFBhcmFtZXRlcnMoKV0gOlxuICAgICAgW3VybFNlZ21lbnRzWzBdLnBhdGgsIHNhbml0aXNlZC5nZXRGb3JtYXR0ZWRQYXJhbWV0ZXJzKCldO1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDaGlsZFBhdGgoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBhbnlbXSB7XG4gICAgcmV0dXJuIF8uZmxhdHRlbihhY3RpdmF0ZWRSb3V0ZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGQudXJsKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUm91dGVQYXJhbWV0ZXJzKHBhcmFtZXRlcnM6IFBhcmFtZXRlclNuYXBzaG90KTogYW55W10ge1xuICAgIGNvbnN0IHJvdXRlSWQgPSBwYXJhbWV0ZXJzLmdldEZvcm1hdHRlZFJvdXRlSWQoKTtcbiAgICByZXR1cm4gcm91dGVJZCA/XG4gICAgICBbcm91dGVJZCwgcGFyYW1ldGVycy5nZXRGb3JtYXR0ZWRQYXJhbWV0ZXJzKCldIDpcbiAgICAgIFtwYXJhbWV0ZXJzLmdldEZvcm1hdHRlZFBhcmFtZXRlcnMoKV07XG4gIH1cbn1cbiJdfQ==
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3BsYWNlLXJvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxjQUFjLEVBRWQsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsTUFBTSxFQUNQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUVMLEdBQUcsRUFDSCxnQkFBZ0IsRUFHaEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixLQUFLLEVBRU4sTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7O0FBR2hDO0lBR2lDLHVDQUFnQjtJQVUvQyxxQkFBNkIsTUFBYyxFQUFXLGVBQXlCLEVBQVcsWUFBMEI7UUFBcEgsWUFDRSxpQkFBTyxTQThCUjtRQS9CNEIsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUFXLHFCQUFlLEdBQWYsZUFBZSxDQUFVO1FBQVcsa0JBQVksR0FBWixZQUFZLENBQWM7UUFSNUcsZ0JBQVUsR0FBRyxJQUFJLENBQUM7UUFFVCw2QkFBdUIsR0FBRyxJQUFJLGlCQUFpQixFQUFxQixDQUFDO1FBQ3JFLG1CQUFhLEdBQUcsSUFBSSxnQkFBZ0IsRUFBUyxDQUFDO1FBT3ZELElBQUEsMkJBQWtGLEVBQWhGLGdCQUFLLEVBQUUsb0JBQU8sRUFBRSxrQkFBTSxFQUFF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LENBQUMsdUJBQXVCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUM1QyxDQUFDOzs7OztJQUVELGtDQUFZOzs7O0lBQVosVUFBYSxjQUFzQztRQUNqRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHOzs7O1FBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFLLENBQUMsR0FBRyxFQUFULENBQVMsRUFBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQzs7Z0JBMUlGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBckJDLE1BQU07Z0JBUkMsUUFBUTtnQkF1QlIsWUFBWTs7O0lBd0VuQjtRQURDLEtBQUssRUFBRTs7aURBQ3NDLGNBQWMsRUFBWSxLQUFLLEVBQVEsS0FBSzs7OERBa0J6RjtzQkFqSEg7Q0FzS0MsQUEzSUQsQ0FHaUMsZ0JBQWdCLEdBd0loRDtTQXhJWSxXQUFXOzs7Ozs7SUFFdEIsaUNBQTBCOzs7OztJQUUxQiw4Q0FBc0Y7Ozs7O0lBQ3RGLG9DQUErRDs7SUFFL0QsOENBQXlEOztJQUN6RCx1Q0FBc0U7Ozs7O0lBRTFELDZCQUErQjs7SUFBRSxzQ0FBa0M7O0lBQUUsbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGUsXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIE5hdmlnYXRpb25FbmQsXG4gIE5hdmlnYXRpb25FcnJvcixcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBSb3V0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW4sXG4gIERzbCxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgSGFzT25lSW5kZXhDaGFpbixcbiAgTGlzdE1vZGVsLFxuICBNdXRhYmxlTGlzdE1vZGVsLFxuICBNdXRhYmxlVmFsdWVNb2RlbCxcbiAgVHJhY2UsXG4gIFZhbHVlTW9kZWxcbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXNzaW9uIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLXNlc3Npb24nO1xuaW1wb3J0IHsgUGxhY2VIaXN0b3J5IH0gZnJvbSAnLi9wbGFjZS1oaXN0b3J5JztcbmltcG9ydCB7IFZpc2l0IH0gZnJvbSAnLi92aXNpdCc7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxhY2VSb3V0ZXIgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIGZpcnN0Um91dGUgPSB0cnVlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25hdmlnYXRpb25TZXNzaW9uTW9kZWwgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8TmF2aWdhdGlvblNlc3Npb24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVZpc2l0cyA9IG5ldyBNdXRhYmxlTGlzdE1vZGVsPFZpc2l0PigpO1xuXG4gIHJlYWRvbmx5IG5hdmlnYXRpb25TZXNzaW9uQWN0aXZlOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICByZWFkb25seSBhY3RpdmVWaXNpdEluZGV4OiBIYXNPbmVJbmRleENoYWluPCdwbGFjZURlZmluaXRpb24nLCBWaXNpdD47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlciwgcmVhZG9ubHkgYW5ndWxhckxvY2F0aW9uOiBMb2NhdGlvbiwgcmVhZG9ubHkgcGxhY2VIaXN0b3J5OiBQbGFjZUhpc3RvcnkpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHsgY2hhaW4sIHZhbHVlT2YsIGJlZm9yZSwgd2hlbiwgYWZ0ZXIsIG9ic2VydmUsIHN3aXRjaE9uIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5hY3RpdmVWaXNpdEluZGV4ID0gY2hhaW4odGhpcy5fYWN0aXZlVmlzaXRzKS5pbmRleEJ5KCdwbGFjZURlZmluaXRpb24nKTtcblxuICAgIGFuZ3VsYXJMb2NhdGlvbi5vblVybENoYW5nZSh1cmwgPT4ge1xuICAgICAgY29uc29sZS5sb2coYGxvY2F0aW9uLm9uVXJsQ2hhbmdlIC0+ICR7dXJsfWApO1xuICAgIH0pO1xuXG4gICAgLy8gVE9ETzogbWFrZSBzZXR1cCB0aGUgY2FsbGJhY2tzIGluIGR1cmluZyBtb2R1bGUgaW5pdGlhdGlvbiB0byBtYWtlIHRoaXMgdGVzdGFibGUuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAvLyBSb3V0aW5nIGV2ZW50IHNlcXVlbmNlXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uQ2FuY2VsIC0tPiByZWRpcmVjdCwgZ28gYXJvdW5kIGFnYWluIGluIHRoZSBzYW1lIHNlc3Npb25cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25FbmQgLS0+IG5hdmlnYXRpb24gY29tcGxldGUsIGVuZCBzZXNzaW9uLlxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVycm9yIC0tPiBuYXZpZ2F0aW9uIGNhbmNlbGVkLCBlbmQgc2Vzc2lvbi5cbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICAgICAgdGhpcy5vbkFuZ3VsYXJSb3V0ZXJTdGFydGVkKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgfHwgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbkFuZ3VsYXJSb3V0ZXJGaW5pc2hlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbkFjdGl2ZSA9IGNoYWluKHRoaXMubmF2aWdhdGlvblNlc3Npb25Nb2RlbCkuaXNOb3ROaWwoKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXNzaW9uQWN0aXZlLnN1YnNjcmliZShhY3RpdmUgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ25hdmlnYXRpb25TZXNzaW9uQWN0aXZlJywgYWN0aXZlKTtcbiAgICB9KTtcbiAgICAvLyBjb25zdCB0eG8gPSBuZXcgVHJhbnNhY3Rpb25PYnNlcnZlcigpLm9uRXZlbnQoZSA9PiBjb25zb2xlLmxvZyhlLnRvU3RyaW5nKCkpKTtcbiAgICAvLyB0eG8ub2JzZXJ2ZSgndGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsJywgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsKTtcbiAgfVxuXG4gIGdldCBuYXZpZ2F0aW9uU2Vzc2lvbigpOiBOYXZpZ2F0aW9uU2Vzc2lvbiB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWU7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvblNlc3Npb25Nb2RlbCgpOiBWYWx1ZU1vZGVsPE5hdmlnYXRpb25TZXNzaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgYWN0aXZlVmlzaXRzKCk6IExpc3RNb2RlbDxWaXNpdD4ge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVWaXNpdHMucmVhZG9ubHk7XG4gIH1cblxuICAvKipcbiAgICogIHBsYWNlUm91dGVyLm5hdmlnYXRlKHBsYWNlRGVzdGluYXRpb25zLnNvbWVQbGFjZS5jcmVhdGVWaXNpdChyb3V0ZUlkLCAuLi52aXNpdFBhcmFtcykpO1xuICAgKiBAcGFyYW0gdmlzaXRcbiAgICovXG4gIC8vIEBUcmFjZSgpXG4gIGFzeW5jIG5hdmlnYXRlKHZpc2l0OiBWaXNpdCkge1xuICAgIHRoaXMuZG9OYXZpZ2F0aW9uKHZpc2l0KTtcbiAgfVxuXG4gIEBUcmFjZSgpXG4gIGFzeW5jIHB1c2hWaXNpdENoYW5nZXNUb1JvdXRlKGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJldmlvdXM6IFZpc2l0LCBuZXh0OiBWaXNpdCkge1xuICAgIC8vIEZJWE1FOiBubyByb3V0ZSBpZCAtPiByb3V0ZSBpZCBkdXBsaWNhdGVzIHJvdXRlIHBhcmFtZXRlcnNcbiAgICBpZiAobmV4dC5oYXNSb3V0aW5nQ2hhbmdlZEZyb20ocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb05hdmlnYXRpb24obmV4dCwgcm91dGVyID0+IHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gISFwcmV2aW91cy5wbGFjZURlZmluaXRpb24uaGFzUm91dGVJZCgpID8gJy4uJyA6ICcuJztcbiAgICAgICAgY29uc3QgZGVmID0gbmV4dC5wbGFjZURlZmluaXRpb247XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5leHQuaGFzUm91dGVJZCgpID9cbiAgICAgICAgICBbZGVmLmdldEZvcm1hdHRlZFJvdXRlSWQobmV4dCksIGRlZi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnMobmV4dCldIDpcbiAgICAgICAgICBbZGVmLmdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyhuZXh0KV07XG4gICAgICAgIGNvbnN0IGNvbW1hbmRzID0gW3JlbGF0aXZlUGF0aF0uY29uY2F0KHBhcmFtcywgdGhpcy5nZXRDaGlsZFBhdGgoYWN0aXZhdGVkUm91dGUuc25hcHNob3QpKTtcbiAgICAgICAgY29uc29sZS5sb2coJyMjIyBSZWRpcmVjdCcsIGNvbW1hbmRzKTtcbiAgICAgICAgcmV0dXJuIHJvdXRlci5uYXZpZ2F0ZShjb21tYW5kcywge1xuICAgICAgICAgIHJlbGF0aXZlVG86IGFjdGl2YXRlZFJvdXRlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2VIaXN0b3J5LmFkZChuZXh0KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkb05hdmlnYXRpb24odmlzaXQ6IFZpc2l0LCBjdXN0b21OYXZpZ2F0aW9uPzogKHJvdXRlcjogUm91dGVyKSA9PiBhbnkpIHtcbiAgICB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnZhbHVlID0gTmF2aWdhdGlvblNlc3Npb24uY3JlYXRlSW50ZXJuYWwodmlzaXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoY3VzdG9tTmF2aWdhdGlvbikge1xuICAgICAgICBhd2FpdCBjdXN0b21OYXZpZ2F0aW9uKHRoaXMucm91dGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlZiA9IHZpc2l0LnBsYWNlRGVmaW5pdGlvbjtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyQ29tbWFuZHMgPSB2aXNpdC5oYXNSb3V0ZUlkKCkgP1xuICAgICAgICAgIFtkZWYuZ2V0Rm9ybWF0dGVkUm91dGVJZCh2aXNpdCksIGRlZi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpXSA6XG4gICAgICAgICAgW2RlZi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnModmlzaXQpXTtcbiAgICAgICAgY29uc3QgY29tbWFuZHMgPSBbZGVmLnBhdGhdLmNvbmNhdChwYXJhbWV0ZXJDb21tYW5kcyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdfZG9OYXZpZ2F0aW9uJywgdmlzaXQsIGNvbW1hbmRzKTtcbiAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiAmJiAhdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKSkge1xuICAgICAgICB0aGlzLm9uQW5ndWxhclJvdXRlckZpbmlzaGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgcHJpdmF0ZSBvbkFuZ3VsYXJSb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICBpZiAoIXRoaXMubmF2aWdhdGlvblNlc3Npb24pIHsgLy8gV2UgYmVlbiBhY3RpdmF0ZWQgYnkgYW4gZXh0ZXJuYWwgcm91dGUgcmF0aGVyIHRoYW4gcGxhY2VSb3V0ZXIuZ28odmlzaXQpXG4gICAgICBjb25zb2xlLmxvZygnbmF2aWdhdGlvbiBzdGFydGVkJywgeyBmaXJzdFRpbWU6IHRoaXMuZmlyc3RSb3V0ZSB9KTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBOYXZpZ2F0aW9uU2Vzc2lvbi5jcmVhdGVFeHRlcm5hbCh0aGlzLmZpcnN0Um91dGUpO1xuICAgICAgaWYgKGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnKSB7XG4gICAgICAgIHNlc3Npb24uc2V0UG9wc3RhdGVSZXR1cm4odGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QudXJsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWUgPSBzZXNzaW9uO1xuICAgIH1cbiAgICB0aGlzLmZpcnN0Um91dGUgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIHByaXZhdGUgb25Bbmd1bGFyUm91dGVyRmluaXNoZWQoKSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuX25hdmlnYXRpb25TZXNzaW9uTW9kZWwudmFsdWU7XG4gICAgLy8gVXBkYXRlIHZpc2l0cyBiZWZvcmUgd2UgZW5kIHRoZSBuYXZpZ2F0aW9uIHNlc3Npb24uICBUaGlzIGFsbG93cyB0aGUgcGxhY2Ugb3V0IGxldCB0b1xuICAgIC8vIGdhdGUgaWdub3JlIGNoYW5nZXMgdGhhdCBvY2N1ciB3aGlsZSB0aGUgdmlzaXQgaXMgYWN0aXZlXG4gICAgY29uc3QgdmlzaXRzID0gc2Vzc2lvbi5nZXRWaXNpdHMoKTtcbiAgICB2aXNpdHMuZm9yRWFjaCh2ID0+IHtcbiAgICAgIHRoaXMucGxhY2VIaXN0b3J5LmFkZCh2KTtcbiAgICB9KTtcbiAgICB0aGlzLl9hY3RpdmVWaXNpdHMudmFsdWUgPSB2aXNpdHM7XG5cbiAgICB0aGlzLl9uYXZpZ2F0aW9uU2Vzc2lvbk1vZGVsLnZhbHVlID0gbnVsbDtcbiAgfVxuXG4gIGdldENoaWxkUGF0aChhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IGFueVtdIHtcbiAgICByZXR1cm4gXy5mbGF0dGVuKGFjdGl2YXRlZFJvdXRlLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZC51cmwpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import _ from 'lodash';
6
+ // WARNING: interface has both a type and a value, skipping emit
7
+ export var Formatter;
8
+ (function (Formatter) {
9
+ var StringType = /** @class */ (function () {
10
+ function StringType() {
11
+ }
12
+ /**
13
+ * @param {?} value
14
+ * @return {?}
15
+ */
16
+ StringType.prototype.format = /**
17
+ * @param {?} value
18
+ * @return {?}
19
+ */
20
+ function (value) {
21
+ return value;
22
+ };
23
+ /**
24
+ * @param {?} value
25
+ * @return {?}
26
+ */
27
+ StringType.prototype.parse = /**
28
+ * @param {?} value
29
+ * @return {?}
30
+ */
31
+ function (value) {
32
+ return value;
33
+ };
34
+ return StringType;
35
+ }());
36
+ var NumberType = /** @class */ (function () {
37
+ function NumberType() {
38
+ }
39
+ /**
40
+ * @param {?} value
41
+ * @return {?}
42
+ */
43
+ NumberType.prototype.format = /**
44
+ * @param {?} value
45
+ * @return {?}
46
+ */
47
+ function (value) {
48
+ return _.isNumber(value) && !_.isNaN(value) ? "" + value : null;
49
+ };
50
+ /**
51
+ * @param {?} value
52
+ * @return {?}
53
+ */
54
+ NumberType.prototype.parse = /**
55
+ * @param {?} value
56
+ * @return {?}
57
+ */
58
+ function (value) {
59
+ /** @type {?} */
60
+ var parsed = Number.parseFloat(value);
61
+ return _.isNaN(parsed) ? null : parsed;
62
+ };
63
+ return NumberType;
64
+ }());
65
+ var BooleanType = /** @class */ (function () {
66
+ function BooleanType() {
67
+ }
68
+ /**
69
+ * @param {?} value
70
+ * @return {?}
71
+ */
72
+ BooleanType.prototype.format = /**
73
+ * @param {?} value
74
+ * @return {?}
75
+ */
76
+ function (value) {
77
+ return value ? 'true' : 'false';
78
+ };
79
+ /**
80
+ * @param {?} value
81
+ * @return {?}
82
+ */
83
+ BooleanType.prototype.parse = /**
84
+ * @param {?} value
85
+ * @return {?}
86
+ */
87
+ function (value) {
88
+ return value === 'true';
89
+ };
90
+ return BooleanType;
91
+ }());
92
+ Formatter.STRING = new StringType();
93
+ Formatter.NUMBER = new NumberType();
94
+ Formatter.BOOLEAN = new BooleanType();
95
+ })(Formatter || (Formatter = {}));
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvb2xvbi9hbmd1bGFyLXVpLXBvd2VydXBzLyIsInNvdXJjZXMiOlsibGliL3BsYWNlL3JvdXRlL2Zvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDOztBQVF2QixNQUFNLEtBQVcsU0FBUyxDQW9DekI7QUFwQ0QsV0FBaUIsU0FBUztJQUV4QjtRQUFBO1FBUUEsQ0FBQzs7Ozs7UUFQQywyQkFBTTs7OztRQUFOLFVBQU8sS0FBYTtZQUNsQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7Ozs7O1FBRUQsMEJBQUs7Ozs7UUFBTCxVQUFNLEtBQWE7WUFDakIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0gsaUJBQUM7SUFBRCxDQUFDLEFBUkQsSUFRQztJQUVEO1FBQUE7UUFTQSxDQUFDOzs7OztRQVJDLDJCQUFNOzs7O1FBQU4sVUFBTyxLQUFhO1lBQ2xCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUcsS0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbEUsQ0FBQzs7Ozs7UUFFRCwwQkFBSzs7OztRQUFMLFVBQU0sS0FBYTs7Z0JBQ1gsTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDekMsQ0FBQztRQUNILGlCQUFDO0lBQUQsQ0FBQyxBQVRELElBU0M7SUFFRDtRQUFBO1FBUUEsQ0FBQzs7Ozs7UUFQQyw0QkFBTTs7OztRQUFOLFVBQU8sS0FBYztZQUNuQixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbEMsQ0FBQzs7Ozs7UUFFRCwyQkFBSzs7OztRQUFMLFVBQU0sS0FBYTtZQUNqQixPQUFPLEtBQUssS0FBSyxNQUFNLENBQUM7UUFDMUIsQ0FBQztRQUNILGtCQUFDO0lBQUQsQ0FBQyxBQVJELElBUUM7SUFFWSxnQkFBTSxHQUFHLElBQUksVUFBVSxFQUFFO0lBQ3pCLGdCQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUU7SUFDekIsaUJBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRTtBQUMxQyxDQUFDLEVBcENnQixTQUFTLEtBQVQsU0FBUyxRQW9DekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdHRlcjxUPiB7XG4gIGZvcm1hdCh2YWx1ZTogVCk6IHN0cmluZztcblxuICBwYXJzZSh2YWx1ZTogc3RyaW5nKTogVDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBGb3JtYXR0ZXIge1xuXG4gIGNsYXNzIFN0cmluZ1R5cGUgaW1wbGVtZW50cyBGb3JtYXR0ZXI8c3RyaW5nPiB7XG4gICAgZm9ybWF0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGNsYXNzIE51bWJlclR5cGUgaW1wbGVtZW50cyBGb3JtYXR0ZXI8bnVtYmVyPiB7XG4gICAgZm9ybWF0KHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIF8uaXNOdW1iZXIodmFsdWUpICYmICFfLmlzTmFOKHZhbHVlKSA/IGAke3ZhbHVlfWAgOiBudWxsO1xuICAgIH1cblxuICAgIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgY29uc3QgcGFyc2VkID0gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgcmV0dXJuIF8uaXNOYU4ocGFyc2VkKSA/IG51bGwgOiBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgY2xhc3MgQm9vbGVhblR5cGUgaW1wbGVtZW50cyBGb3JtYXR0ZXI8Ym9vbGVhbj4ge1xuICAgIGZvcm1hdCh2YWx1ZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjb25zdCBTVFJJTkcgPSBuZXcgU3RyaW5nVHlwZSgpO1xuICBleHBvcnQgY29uc3QgTlVNQkVSID0gbmV3IE51bWJlclR5cGUoKTtcbiAgZXhwb3J0IGNvbnN0IEJPT0xFQU4gPSBuZXcgQm9vbGVhblR5cGUoKTtcbn1cbiJdfQ==