@coolon/angular-ui-powerups 0.0.72 → 0.0.74

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 (101) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +1482 -1230
  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 +34 -32
  6. package/coolon-angular-ui-powerups.metadata.json +1 -1
  7. package/esm2015/coolon-angular-ui-powerups.js +34 -32
  8. package/esm2015/index.js +2 -2
  9. package/esm2015/lib/angular-ui-powerups.module.js +8 -22
  10. package/esm2015/lib/components/components.module.js +47 -0
  11. package/esm2015/lib/components/forms/number-input/number-input.component.js +2 -2
  12. package/esm2015/lib/components/forms/password-input/password-input.component.js +2 -2
  13. package/esm2015/lib/components/forms/select-input/select-input.component.js +2 -2
  14. package/esm2015/lib/components/forms/string-input/string-input.component.js +2 -2
  15. package/esm2015/lib/components/index.js +2 -1
  16. package/esm2015/lib/components/noop/noop.component.js +2 -2
  17. package/esm2015/lib/directives/directives.module.js +36 -0
  18. package/esm2015/lib/directives/index.js +2 -1
  19. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +3 -3
  20. package/esm2015/lib/interaction/components/activity-outlet/activity-outlet.component.js +2 -2
  21. package/esm2015/lib/interaction/components/alert-dialog/alert-dialog.component.js +3 -3
  22. package/esm2015/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +3 -3
  23. package/esm2015/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +3 -3
  24. package/esm2015/lib/interaction/components/interaction-outlet/interaction-outlet.component.js +2 -2
  25. package/esm2015/lib/interaction/services/dialog-interaction.service.js +3 -1
  26. package/esm2015/lib/place/components/abstract-place-navigation.component.js +38 -3
  27. package/esm2015/lib/place/components/busy-overlay/busy-overlay.component.js +2 -2
  28. package/esm2015/lib/place/components/empty-state/empty-state.component.js +3 -3
  29. package/esm2015/lib/place/components/list-place-nav/list-place-nav.component.js +3 -3
  30. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +61 -26
  31. package/esm2015/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +3 -3
  32. package/esm2015/lib/place/index.js +2 -2
  33. package/esm2015/lib/place/place-definition.js +2 -6
  34. package/esm2015/lib/place/place-router.js +7 -9
  35. package/esm2015/lib/place/place.decorator.js +2 -4
  36. package/esm2015/lib/place/place.module.js +4 -2
  37. package/esm2015/lib/place/route/guards/enter-place-guard.service.js +283 -0
  38. package/esm2015/lib/place/route/guards/leave-place.guard.js +70 -50
  39. package/esm2015/lib/place/visit.js +10 -1
  40. package/esm2015/public_api.js +4 -4
  41. package/esm5/coolon-angular-ui-powerups.js +34 -32
  42. package/esm5/index.js +2 -2
  43. package/esm5/lib/angular-ui-powerups.module.js +8 -22
  44. package/esm5/lib/components/components.module.js +51 -0
  45. package/esm5/lib/components/forms/number-input/number-input.component.js +2 -2
  46. package/esm5/lib/components/forms/password-input/password-input.component.js +2 -2
  47. package/esm5/lib/components/forms/select-input/select-input.component.js +2 -2
  48. package/esm5/lib/components/forms/string-input/string-input.component.js +2 -2
  49. package/esm5/lib/components/index.js +2 -1
  50. package/esm5/lib/components/noop/noop.component.js +2 -2
  51. package/esm5/lib/directives/directives.module.js +40 -0
  52. package/esm5/lib/directives/index.js +2 -1
  53. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +3 -3
  54. package/esm5/lib/interaction/components/activity-outlet/activity-outlet.component.js +2 -2
  55. package/esm5/lib/interaction/components/alert-dialog/alert-dialog.component.js +3 -3
  56. package/esm5/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.js +3 -3
  57. package/esm5/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.js +3 -3
  58. package/esm5/lib/interaction/components/interaction-outlet/interaction-outlet.component.js +2 -2
  59. package/esm5/lib/interaction/services/dialog-interaction.service.js +3 -1
  60. package/esm5/lib/place/components/abstract-place-navigation.component.js +38 -3
  61. package/esm5/lib/place/components/busy-overlay/busy-overlay.component.js +2 -2
  62. package/esm5/lib/place/components/empty-state/empty-state.component.js +3 -3
  63. package/esm5/lib/place/components/list-place-nav/list-place-nav.component.js +3 -3
  64. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +69 -31
  65. package/esm5/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.js +3 -3
  66. package/esm5/lib/place/index.js +2 -2
  67. package/esm5/lib/place/place-definition.js +2 -5
  68. package/esm5/lib/place/place-router.js +11 -10
  69. package/esm5/lib/place/place.decorator.js +2 -4
  70. package/esm5/lib/place/place.module.js +4 -2
  71. package/esm5/lib/place/route/guards/enter-place-guard.service.js +319 -0
  72. package/esm5/lib/place/route/guards/leave-place.guard.js +72 -8
  73. package/esm5/lib/place/visit.js +13 -1
  74. package/esm5/public_api.js +4 -4
  75. package/fesm2015/coolon-angular-ui-powerups.js +1172 -990
  76. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  77. package/fesm5/coolon-angular-ui-powerups.js +1440 -1192
  78. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  79. package/lib/components/components.module.d.ts +2 -0
  80. package/lib/components/index.d.ts +1 -0
  81. package/lib/directives/directives.module.d.ts +2 -0
  82. package/lib/directives/index.d.ts +1 -0
  83. package/lib/place/components/abstract-place-navigation.component.d.ts +7 -1
  84. package/lib/place/components/place-outlet/place-outlet.component.d.ts +7 -5
  85. package/lib/place/index.d.ts +1 -1
  86. package/lib/place/place-definition.d.ts +1 -2
  87. package/lib/place/place.decorator.d.ts +0 -1
  88. package/lib/place/route/guards/{place-route.guard.d.ts → enter-place-guard.service.d.ts} +6 -4
  89. package/lib/place/visit.d.ts +2 -0
  90. package/package.json +1 -1
  91. package/schematics/place-routes/place-builder.js +0 -1
  92. package/schematics/place-routes/place-builder.js.map +1 -1
  93. package/schematics/place-routes/place-class-scanner.js +0 -1
  94. package/schematics/place-routes/place-class-scanner.js.map +1 -1
  95. package/schematics/place-routes/place-def.d.ts +0 -2
  96. package/schematics/place-routes/place-def.js +12 -11
  97. package/schematics/place-routes/place-def.js.map +1 -1
  98. package/schematics/place-routes/templates/place-routes.ts.template +1 -1
  99. package/styles/styles.scss +1 -1
  100. package/esm2015/lib/place/route/guards/place-route.guard.js +0 -243
  101. package/esm5/lib/place/route/guards/place-route.guard.js +0 -273
@@ -1,273 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import * as tslib_1 from "tslib";
6
- import { Injectable, Injector } from '@angular/core';
7
- import { Router } from '@angular/router';
8
- import { lang } from '@coolon/pectin';
9
- import { Memoize } from '@typescript-plus/fast-memoize-decorator/dist/src';
10
- import { PlaceComponent } from '../../place-component';
11
- import { PlaceHistory } from '../../place-history';
12
- import { PlaceRouter } from '../../place-router';
13
- import { Visit } from '../../visit';
14
- import { VisitSanitiser } from '../visit-sanitiser';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "@angular/router";
17
- import * as i2 from "../../place-router";
18
- import * as i3 from "../../place-history";
19
- var PlaceRouteGuard = /** @class */ (function () {
20
- function PlaceRouteGuard(router, placeRouter, placeHistory, injector) {
21
- this.router = router;
22
- this.placeRouter = placeRouter;
23
- this.placeHistory = placeHistory;
24
- this.injector = injector;
25
- }
26
- // @Trace()
27
- // @Trace()
28
- /**
29
- * @param {?} activatedRoute
30
- * @param {?} state
31
- * @return {?}
32
- */
33
- PlaceRouteGuard.prototype.canActivate =
34
- // @Trace()
35
- /**
36
- * @param {?} activatedRoute
37
- * @param {?} state
38
- * @return {?}
39
- */
40
- function (activatedRoute, state) {
41
- return tslib_1.__awaiter(this, void 0, void 0, function () {
42
- var placeDefinition, params, parsedParams, initialVisit, sanitiser, sanitisedVisit, parameterCommands, commands;
43
- return tslib_1.__generator(this, function (_a) {
44
- switch (_a.label) {
45
- case 0:
46
- if (!PlaceComponent.isPlaceComponentConstructor(activatedRoute.component)) return [3 /*break*/, 2];
47
- placeDefinition = PlaceComponent.getDefinition(activatedRoute.component);
48
- // Parse our route params.
49
- params = new PlaceRouteGuard.ConsolidatedParameterMap(activatedRoute.paramMap, activatedRoute.url);
50
- parsedParams = placeDefinition.parseRouteParams(params);
51
- initialVisit = this.placeRouter.navigationSession.getVisitFor(placeDefinition) || new Visit(placeDefinition, parsedParams);
52
- sanitiser = new VisitSanitiser(activatedRoute, this.router, this.placeHistory, this.injector);
53
- return [4 /*yield*/, sanitiser.sanitise(initialVisit.mergeRouteParameters(parsedParams))];
54
- case 1:
55
- sanitisedVisit = _a.sent();
56
- // Save the visit with any updated parameters. We need to save it so we remember any non route parameters
57
- this.placeRouter.navigationSession.storeVisit(sanitisedVisit);
58
- if (initialVisit.hasRoutingChangedFrom(sanitisedVisit)) {
59
- parameterCommands = sanitisedVisit.hasRouteId() ?
60
- [placeDefinition.getFormattedRouteId(sanitisedVisit), placeDefinition.getFormattedRouteParameters(sanitisedVisit)] :
61
- [placeDefinition.getFormattedRouteParameters(sanitisedVisit)];
62
- commands = [(activatedRoute.url[0].path)].concat(parameterCommands, this.placeRouter.extractChildPath(activatedRoute));
63
- console.log('##### Redirect', commands);
64
- return [2 /*return*/, this.router.createUrlTree(commands, {
65
- replaceUrl: true,
66
- skipLocationChange: false
67
- })];
68
- }
69
- else {
70
- return [2 /*return*/, true];
71
- }
72
- return [3 /*break*/, 3];
73
- case 2: return [2 /*return*/, lang.illegalState("expected component to be an instance of PlaceComponent, got " + activatedRoute.component)];
74
- case 3: return [2 /*return*/];
75
- }
76
- });
77
- });
78
- };
79
- PlaceRouteGuard.decorators = [
80
- { type: Injectable, args: [{
81
- providedIn: 'root'
82
- },] }
83
- ];
84
- /** @nocollapse */
85
- PlaceRouteGuard.ctorParameters = function () { return [
86
- { type: Router },
87
- { type: PlaceRouter },
88
- { type: PlaceHistory },
89
- { type: Injector }
90
- ]; };
91
- /** @nocollapse */ PlaceRouteGuard.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PlaceRouteGuard_Factory() { return new PlaceRouteGuard(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.PlaceRouter), i0.ɵɵinject(i3.PlaceHistory), i0.ɵɵinject(i0.INJECTOR)); }, token: PlaceRouteGuard, providedIn: "root" });
92
- return PlaceRouteGuard;
93
- }());
94
- export { PlaceRouteGuard };
95
- if (false) {
96
- /**
97
- * @type {?}
98
- * @private
99
- */
100
- PlaceRouteGuard.prototype.router;
101
- /**
102
- * @type {?}
103
- * @private
104
- */
105
- PlaceRouteGuard.prototype.placeRouter;
106
- /**
107
- * @type {?}
108
- * @private
109
- */
110
- PlaceRouteGuard.prototype.placeHistory;
111
- /**
112
- * @type {?}
113
- * @private
114
- */
115
- PlaceRouteGuard.prototype.injector;
116
- }
117
- (function (PlaceRouteGuard) {
118
- /**
119
- * This a work around for the fact that an activated route with multiple segments doesn't
120
- * include the segment params in the paramMap as well as each segment returns an empty
121
- * param map even when `parameter`s has content.
122
- */
123
- var ConsolidatedParameterMap = /** @class */ (function () {
124
- function ConsolidatedParameterMap(paramMap, urlSegments) {
125
- this.paramMaps = [paramMap].concat((urlSegments || []).map((/**
126
- * @param {?} s
127
- * @return {?}
128
- */
129
- function (s) { return new ParamMapAdapter(s.parameters); }))).filter((/**
130
- * @param {?} m
131
- * @return {?}
132
- */
133
- function (m) { return !!m; })); // the activated route param map can be null
134
- }
135
- /**
136
- * @param {?} name
137
- * @return {?}
138
- */
139
- ConsolidatedParameterMap.prototype.get = /**
140
- * @param {?} name
141
- * @return {?}
142
- */
143
- function (name) {
144
- /** @type {?} */
145
- var paramMap = this.paramMaps.find((/**
146
- * @param {?} m
147
- * @return {?}
148
- */
149
- function (m) { return m.has(name); }));
150
- return paramMap.get(name);
151
- };
152
- /**
153
- * @param {?} name
154
- * @return {?}
155
- */
156
- ConsolidatedParameterMap.prototype.getAll = /**
157
- * @param {?} name
158
- * @return {?}
159
- */
160
- function (name) {
161
- /** @type {?} */
162
- var paramMap = this.paramMaps.find((/**
163
- * @param {?} m
164
- * @return {?}
165
- */
166
- function (m) { return m.has(name); }));
167
- return paramMap.getAll(name);
168
- };
169
- /**
170
- * @param {?} name
171
- * @return {?}
172
- */
173
- ConsolidatedParameterMap.prototype.has = /**
174
- * @param {?} name
175
- * @return {?}
176
- */
177
- function (name) {
178
- return !!this.paramMaps.find((/**
179
- * @param {?} m
180
- * @return {?}
181
- */
182
- function (m) { return m.has(name); }));
183
- };
184
- Object.defineProperty(ConsolidatedParameterMap.prototype, "keys", {
185
- get: /**
186
- * @return {?}
187
- */
188
- function () {
189
- return this.paramMaps.reduce((/**
190
- * @param {?} result
191
- * @param {?} params
192
- * @return {?}
193
- */
194
- function (result, params) { return result.concat(params.keys); }), []);
195
- },
196
- enumerable: true,
197
- configurable: true
198
- });
199
- tslib_1.__decorate([
200
- Memoize(),
201
- tslib_1.__metadata("design:type", Array),
202
- tslib_1.__metadata("design:paramtypes", [])
203
- ], ConsolidatedParameterMap.prototype, "keys", null);
204
- return ConsolidatedParameterMap;
205
- }());
206
- PlaceRouteGuard.ConsolidatedParameterMap = ConsolidatedParameterMap;
207
- if (false) {
208
- /**
209
- * @type {?}
210
- * @private
211
- */
212
- ConsolidatedParameterMap.prototype.paramMaps;
213
- }
214
- var ParamMapAdapter = /** @class */ (function () {
215
- function ParamMapAdapter(params) {
216
- this.params = params;
217
- }
218
- /**
219
- * @param {?} name
220
- * @return {?}
221
- */
222
- ParamMapAdapter.prototype.get = /**
223
- * @param {?} name
224
- * @return {?}
225
- */
226
- function (name) {
227
- return this.params[name];
228
- };
229
- /**
230
- * @param {?} name
231
- * @return {?}
232
- */
233
- ParamMapAdapter.prototype.getAll = /**
234
- * @param {?} name
235
- * @return {?}
236
- */
237
- function (name) {
238
- /** @type {?} */
239
- var value = this.get(name);
240
- return Array.isArray(value) ? value : [value];
241
- };
242
- /**
243
- * @param {?} name
244
- * @return {?}
245
- */
246
- ParamMapAdapter.prototype.has = /**
247
- * @param {?} name
248
- * @return {?}
249
- */
250
- function (name) {
251
- return this.keys.includes(name);
252
- };
253
- Object.defineProperty(ParamMapAdapter.prototype, "keys", {
254
- get: /**
255
- * @return {?}
256
- */
257
- function () {
258
- return Object.keys(this.params);
259
- },
260
- enumerable: true,
261
- configurable: true
262
- });
263
- return ParamMapAdapter;
264
- }());
265
- if (false) {
266
- /**
267
- * @type {?}
268
- * @private
269
- */
270
- ParamMapAdapter.prototype.params;
271
- }
272
- })(PlaceRouteGuard || (PlaceRouteGuard = {}));
273
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGUuZ3VhcmQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvcGxhY2Uvcm91dGUvZ3VhcmRzL3BsYWNlLXJvdXRlLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUlMLE1BQU0sRUFJUCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQVMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7O0FBRXBEO0lBS0UseUJBQTZCLE1BQWMsRUFDZCxXQUF3QixFQUN4QixZQUEwQixFQUMxQixRQUFrQjtRQUhsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUMvQyxDQUFDO0lBRUQsV0FBVzs7Ozs7OztJQUNMLHFDQUFXOzs7Ozs7O0lBQWpCLFVBQWtCLGNBQXNDLEVBQUUsS0FBMEI7Ozs7Ozs2QkFDOUUsY0FBYyxDQUFDLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBcEUsd0JBQW9FO3dCQUNoRSxlQUFlLEdBQUcsY0FBYyxD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OztRQUVELDZCQUFHOzs7O1FBQUgsVUFBSSxJQUFZO1lBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7Ozs7O1FBRUQsZ0NBQU07Ozs7UUFBTixVQUFPLElBQVk7O2dCQUNYLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUM1QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDOzs7OztRQUVELDZCQUFHOzs7O1FBQUgsVUFBSSxJQUFZO1lBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsc0JBQUksaUNBQUk7Ozs7WUFBUjtnQkFDRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLENBQUM7OztXQUFBO1FBRUgsc0JBQUM7SUFBRCxDQUFDLEFBckJELElBcUJDOzs7Ozs7UUFwQmEsaUNBQWdEOztBQXFCaEUsQ0FBQyxFQTFEZ0IsZUFBZSxLQUFmLGVBQWUsUUEwRC9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIENhbkFjdGl2YXRlLFxuICBQYXJhbU1hcCxcbiAgUm91dGVyLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxuICBVcmxTZWdtZW50LFxuICBVcmxUcmVlXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBsYW5nLCBUcmFjZSB9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7IE1lbW9pemUgfSBmcm9tICdAdHlwZXNjcmlwdC1wbHVzL2Zhc3QtbWVtb2l6ZS1kZWNvcmF0b3IvZGlzdC9zcmMnO1xuaW1wb3J0IHsgUGxhY2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wbGFjZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhY2VIaXN0b3J5IH0gZnJvbSAnLi4vLi4vcGxhY2UtaGlzdG9yeSc7XG5pbXBvcnQgeyBQbGFjZVJvdXRlciB9IGZyb20gJy4uLy4uL3BsYWNlLXJvdXRlcic7XG5pbXBvcnQgeyBWaXNpdCB9IGZyb20gJy4uLy4uL3Zpc2l0JztcbmltcG9ydCB7IFZpc2l0U2FuaXRpc2VyIH0gZnJvbSAnLi4vdmlzaXQtc2FuaXRpc2VyJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxhY2VSb3V0ZUd1YXJkIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhY2VSb3V0ZXI6IFBsYWNlUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlSGlzdG9yeTogUGxhY2VIaXN0b3J5LFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3Rvcikge1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgYXN5bmMgY2FuQWN0aXZhdGUoYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsVHJlZT4ge1xuICAgIGlmIChQbGFjZUNvbXBvbmVudC5pc1BsYWNlQ29tcG9uZW50Q29uc3RydWN0b3IoYWN0aXZhdGVkUm91dGUuY29tcG9uZW50KSkge1xuICAgICAgY29uc3QgcGxhY2VEZWZpbml0aW9uID0gUGxhY2VDb21wb25lbnQuZ2V0RGVmaW5pdGlvbihhY3RpdmF0ZWRSb3V0ZS5jb21wb25lbnQpO1xuICAgICAgLy8gUGFyc2Ugb3VyIHJvdXRlIHBhcmFtcy5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBQbGFjZVJvdXRlR3VhcmQuQ29uc29saWRhdGVkUGFyYW1ldGVyTWFwKGFjdGl2YXRlZFJvdXRlLnBhcmFtTWFwLCBhY3RpdmF0ZWRSb3V0ZS51cmwpO1xuICAgICAgY29uc3QgcGFyc2VkUGFyYW1zID0gcGxhY2VEZWZpbml0aW9uLnBhcnNlUm91dGVQYXJhbXMocGFyYW1zKTtcblxuICAgICAgY29uc3QgaW5pdGlhbFZpc2l0ID0gdGhpcy5wbGFjZVJvdXRlci5uYXZpZ2F0aW9uU2Vzc2lvbi5nZXRWaXNpdEZvcihwbGFjZURlZmluaXRpb24pIHx8IG5ldyBWaXNpdChwbGFjZURlZmluaXRpb24sIHBhcnNlZFBhcmFtcyk7XG4gICAgICBjb25zdCBzYW5pdGlzZXIgPSBuZXcgVmlzaXRTYW5pdGlzZXIoYWN0aXZhdGVkUm91dGUsIHRoaXMucm91dGVyLCB0aGlzLnBsYWNlSGlzdG9yeSwgdGhpcy5pbmplY3Rvcik7XG4gICAgICBjb25zdCBzYW5pdGlzZWRWaXNpdCA9IGF3YWl0IHNhbml0aXNlci5zYW5pdGlzZShpbml0aWFsVmlzaXQubWVyZ2VSb3V0ZVBhcmFtZXRlcnMocGFyc2VkUGFyYW1zKSk7XG5cbiAgICAgIC8vIFNhdmUgdGhlIHZpc2l0IHdpdGggYW55IHVwZGF0ZWQgcGFyYW1ldGVycy4gIFdlIG5lZWQgdG8gc2F2ZSBpdCBzbyB3ZSByZW1lbWJlciBhbnkgbm9uIHJvdXRlIHBhcmFtZXRlcnNcbiAgICAgIHRoaXMucGxhY2VSb3V0ZXIubmF2aWdhdGlvblNlc3Npb24uc3RvcmVWaXNpdChzYW5pdGlzZWRWaXNpdCk7XG4gICAgICBpZiAoaW5pdGlhbFZpc2l0Lmhhc1JvdXRpbmdDaGFuZ2VkRnJvbShzYW5pdGlzZWRWaXNpdCkpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyQ29tbWFuZHMgPSBzYW5pdGlzZWRWaXNpdC5oYXNSb3V0ZUlkKCkgP1xuICAgICAgICAgIFtwbGFjZURlZmluaXRpb24uZ2V0Rm9ybWF0dGVkUm91dGVJZChzYW5pdGlzZWRWaXNpdCksIHBsYWNlRGVmaW5pdGlvbi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnMoc2FuaXRpc2VkVmlzaXQpXSA6XG4gICAgICAgICAgW3BsYWNlRGVmaW5pdGlvbi5nZXRGb3JtYXR0ZWRSb3V0ZVBhcmFtZXRlcnMoc2FuaXRpc2VkVmlzaXQpXTtcblxuICAgICAgICBjb25zdCBjb21tYW5kcyA9IFsoYWN0aXZhdGVkUm91dGUudXJsWzBdLnBhdGgpXS5jb25jYXQocGFyYW1ldGVyQ29tbWFuZHMsIHRoaXMucGxhY2VSb3V0ZXIuZXh0cmFjdENoaWxkUGF0aChhY3RpdmF0ZWRSb3V0ZSkpO1xuICAgICAgICBjb25zb2xlLmxvZygnIyMjIyMgUmVkaXJlY3QnLCBjb21tYW5kcyk7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLCB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsYW5nLmlsbGVnYWxTdGF0ZShgZXhwZWN0ZWQgY29tcG9uZW50IHRvIGJlIGFuIGluc3RhbmNlIG9mIFBsYWNlQ29tcG9uZW50LCBnb3QgJHthY3RpdmF0ZWRSb3V0ZS5jb21wb25lbnR9YCk7XG4gICAgfVxuICB9XG5cblxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBsYWNlUm91dGVHdWFyZCB7XG4gIC8qKlxuICAgKiBUaGlzIGEgd29yayBhcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgYW4gYWN0aXZhdGVkIHJvdXRlIHdpdGggbXVsdGlwbGUgc2VnbWVudHMgZG9lc24ndFxuICAgKiBpbmNsdWRlIHRoZSBzZWdtZW50IHBhcmFtcyBpbiB0aGUgcGFyYW1NYXAgYXMgd2VsbCBhcyBlYWNoIHNlZ21lbnQgcmV0dXJucyBhbiBlbXB0eVxuICAgKiBwYXJhbSBtYXAgZXZlbiB3aGVuIGBwYXJhbWV0ZXJgcyBoYXMgY29udGVudC5cbiAgICovXG4gIGV4cG9ydCBjbGFzcyBDb25zb2xpZGF0ZWRQYXJhbWV0ZXJNYXAgaW1wbGVtZW50cyBQYXJhbU1hcCB7XG5cbiAgICBwcml2YXRlIHBhcmFtTWFwczogUGFyYW1NYXBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtTWFwOiBQYXJhbU1hcCwgdXJsU2VnbWVudHM6IFVybFNlZ21lbnRbXSkge1xuICAgICAgdGhpcy5wYXJhbU1hcHMgPSBbcGFyYW1NYXBdLmNvbmNhdChcbiAgICAgICAgKHVybFNlZ21lbnRzIHx8IFtdKS5tYXAocyA9PiBuZXcgUGFyYW1NYXBBZGFwdGVyKHMucGFyYW1ldGVycykpXG4gICAgICApLmZpbHRlcihtID0+ICEhbSk7IC8vIHRoZSBhY3RpdmF0ZWQgcm91dGUgcGFyYW0gbWFwIGNhbiBiZSBudWxsXG4gICAgfVxuXG4gICAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgY29uc3QgcGFyYW1NYXAgPSB0aGlzLnBhcmFtTWFwcy5maW5kKG0gPT4gbS5oYXMobmFtZSkpO1xuICAgICAgcmV0dXJuIHBhcmFtTWFwLmdldChuYW1lKTtcbiAgICB9XG5cbiAgICBnZXRBbGwobmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgY29uc3QgcGFyYW1NYXAgPSB0aGlzLnBhcmFtTWFwcy5maW5kKG0gPT4gbS5oYXMobmFtZSkpO1xuICAgICAgcmV0dXJuIHBhcmFtTWFwLmdldEFsbChuYW1lKTtcbiAgICB9XG5cbiAgICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gISF0aGlzLnBhcmFtTWFwcy5maW5kKG0gPT4gbS5oYXMobmFtZSkpO1xuICAgIH1cblxuICAgIEBNZW1vaXplKClcbiAgICBnZXQga2V5cygpOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJhbU1hcHMucmVkdWNlKChyZXN1bHQsIHBhcmFtcykgPT4gcmVzdWx0LmNvbmNhdChwYXJhbXMua2V5cyksIFtdKTtcbiAgICB9XG4gIH1cblxuICBjbGFzcyBQYXJhbU1hcEFkYXB0ZXIgaW1wbGVtZW50cyBQYXJhbU1hcCB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwYXJhbXM6IHsgW3A6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgfVxuXG4gICAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMucGFyYW1zW25hbWVdO1xuICAgIH1cblxuICAgIGdldEFsbChuYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KG5hbWUpO1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgIH1cblxuICAgIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmtleXMuaW5jbHVkZXMobmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0IGtleXMoKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKTtcbiAgICB9XG5cbiAgfVxufVxuIl19