@ngxs/router-plugin 3.7.4 → 3.7.5

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.
@@ -1,463 +1,368 @@
1
- import * as tslib_1 from "tslib";
2
- var RouterState_1;
3
- /**
4
- * @fileoverview added by tsickle
5
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
6
- */
7
- import { NgZone, Injectable, OnDestroy } from '@angular/core';
8
- import { NavigationCancel, NavigationError, Router, RouterStateSnapshot, RoutesRecognized, ResolveEnd, UrlSerializer, NavigationStart, NavigationEnd } from '@angular/router';
9
- import { LocationStrategy, Location } from '@angular/common';
10
- import { Action, Selector, State, StateContext, Store } from '@ngxs/store';
11
- import { isAngularInTestMode } from '@ngxs/store/internals';
12
- import { Subscription } from 'rxjs';
13
- import { first } from 'rxjs/operators';
14
- import { Navigate, RouterCancel, RouterError, RouterNavigation, RouterDataResolved } from './router.actions';
15
- import { RouterStateSerializer } from './serializer';
16
- /**
17
- * @record
18
- * @template T
19
- */
20
- export function RouterStateModel() { }
21
- if (false) {
22
- /** @type {?|undefined} */
23
- RouterStateModel.prototype.state;
24
- /** @type {?|undefined} */
25
- RouterStateModel.prototype.navigationId;
26
- /** @type {?} */
27
- RouterStateModel.prototype.trigger;
28
- }
29
- let RouterState = RouterState_1 = class RouterState {
30
- /**
31
- * @param {?} _store
32
- * @param {?} _router
33
- * @param {?} _serializer
34
- * @param {?} _ngZone
35
- * @param {?} _urlSerializer
36
- * @param {?} _locationStrategy
37
- * @param {?} _location
38
- */
39
- constructor(_store, _router, _serializer, _ngZone, _urlSerializer, _locationStrategy, _location) {
40
- this._store = _store;
41
- this._router = _router;
42
- this._serializer = _serializer;
43
- this._ngZone = _ngZone;
44
- this._urlSerializer = _urlSerializer;
45
- this._locationStrategy = _locationStrategy;
46
- this._location = _location;
47
- /**
48
- * Determines how navigation was performed by the `RouterState` itself
49
- * or outside via `new Navigate(...)`
50
- */
51
- this._trigger = 'none';
52
- /**
53
- * That's the serialized state from the `Router` class
54
- */
55
- this._routerState = null;
56
- /**
57
- * That's the value of the `RouterState` state
58
- */
59
- this._storeState = null;
60
- this._lastRoutesRecognized = (/** @type {?} */ (null));
61
- this._subscription = new Subscription();
62
- this.setUpStoreListener();
63
- this.setUpRouterEventsListener();
64
- this.checkInitialNavigationOnce();
65
- }
66
- /**
67
- * @template T
68
- * @param {?} state
69
- * @return {?}
70
- */
71
- static state(state) {
72
- return state && state.state;
73
- }
74
- /**
75
- * @param {?} state
76
- * @return {?}
77
- */
78
- static url(state) {
79
- return state && state.state && state.state.url;
80
- }
81
- /**
82
- * @return {?}
83
- */
84
- ngOnDestroy() {
85
- this._subscription.unsubscribe();
86
- }
87
- /**
88
- * @param {?} _
89
- * @param {?} action
90
- * @return {?}
91
- */
92
- navigate(_, action) {
93
- return this._ngZone.run((/**
94
- * @return {?}
95
- */
96
- () => this._router.navigate(action.path, Object.assign({ queryParams: action.queryParams }, action.extras))));
97
- }
98
- /**
99
- * @param {?} ctx
100
- * @param {?} action
101
- * @return {?}
102
- */
103
- angularRouterAction(ctx, action) {
104
- ctx.setState(Object.assign({}, ctx.getState(), { trigger: action.trigger, state: action.routerState, navigationId: action.event.id }));
105
- }
106
- /**
107
- * @private
108
- * @return {?}
109
- */
110
- setUpStoreListener() {
111
- /** @type {?} */
112
- const subscription = this._store
113
- .select(RouterState_1)
114
- .subscribe((/**
115
- * @param {?} state
116
- * @return {?}
117
- */
118
- (state) => {
119
- this.navigateIfNeeded(state);
120
- }));
121
- this._subscription.add(subscription);
122
- }
123
- /**
124
- * @private
125
- * @return {?}
126
- */
127
- setUpRouterEventsListener() {
128
- /** @type {?} */
129
- const subscription = this._router.events.subscribe((/**
130
- * @param {?} event
131
- * @return {?}
132
- */
133
- event => {
134
- if (event instanceof NavigationStart) {
135
- this.navigationStart();
136
- }
137
- else if (event instanceof RoutesRecognized) {
138
- this._lastRoutesRecognized = event;
139
- }
140
- else if (event instanceof ResolveEnd) {
141
- this.dispatchRouterDataResolved(event);
142
- }
143
- else if (event instanceof NavigationCancel) {
144
- this.dispatchRouterCancel(event);
145
- this.reset();
146
- }
147
- else if (event instanceof NavigationError) {
148
- this.dispatchRouterError(event);
149
- this.reset();
150
- }
151
- else if (event instanceof NavigationEnd) {
152
- this.navigationEnd();
153
- this.reset();
154
- }
155
- }));
156
- this._subscription.add(subscription);
157
- }
158
- /**
159
- * @private
160
- * @return {?}
161
- */
162
- navigationStart() {
163
- this._routerState = this._serializer.serialize(this._router.routerState.snapshot);
164
- if (this._trigger !== 'none') {
165
- this._storeState = this._store.selectSnapshot(RouterState_1);
166
- }
167
- }
168
- /**
169
- * @private
170
- * @return {?}
171
- */
172
- navigationEnd() {
173
- if (this.shouldDispatchRouterNavigation()) {
174
- this.dispatchRouterNavigation();
175
- }
176
- }
177
- /**
178
- * @private
179
- * @return {?}
180
- */
181
- shouldDispatchRouterNavigation() {
182
- if (!this._storeState)
183
- return true;
184
- return this._trigger !== 'store';
185
- }
186
- /**
187
- * @private
188
- * @param {?} state
189
- * @return {?}
190
- */
191
- navigateIfNeeded(state) {
192
- /** @type {?} */
193
- const canSkipNavigation = !this._storeState ||
194
- !this._storeState.state ||
195
- !state ||
196
- state.trigger === 'router' ||
197
- this._router.url === this._storeState.state.url;
198
- if (canSkipNavigation) {
199
- return;
200
- }
201
- this._trigger = 'store';
202
- this._ngZone.run((/**
203
- * @return {?}
204
- */
205
- () => {
206
- this._router.navigateByUrl((/** @type {?} */ ((/** @type {?} */ (this._storeState)).state)).url);
207
- }));
208
- }
209
- /**
210
- * @private
211
- * @return {?}
212
- */
213
- dispatchRouterNavigation() {
214
- /** @type {?} */
215
- const nextRouterState = this._serializer.serialize(this._lastRoutesRecognized.state);
216
- this.dispatchRouterAction(new RouterNavigation(nextRouterState, new RoutesRecognized(this._lastRoutesRecognized.id, this._lastRoutesRecognized.url, this._lastRoutesRecognized.urlAfterRedirects, nextRouterState), this._trigger));
217
- }
218
- /**
219
- * @private
220
- * @param {?} event
221
- * @return {?}
222
- */
223
- dispatchRouterCancel(event) {
224
- this.dispatchRouterAction(new RouterCancel((/** @type {?} */ (this._routerState)), this._storeState, event, this._trigger));
225
- }
226
- /**
227
- * @private
228
- * @param {?} event
229
- * @return {?}
230
- */
231
- dispatchRouterError(event) {
232
- this.dispatchRouterAction(new RouterError((/** @type {?} */ (this._routerState)), this._storeState, new NavigationError(event.id, event.url, `${event}`), this._trigger));
233
- }
234
- /**
235
- * @private
236
- * @template T
237
- * @param {?} action
238
- * @return {?}
239
- */
240
- dispatchRouterAction(action) {
241
- this._trigger = 'router';
242
- try {
243
- this._store.dispatch(action);
244
- }
245
- finally {
246
- this._trigger = 'none';
247
- }
248
- }
249
- /**
250
- * @private
251
- * @param {?} event
252
- * @return {?}
253
- */
254
- dispatchRouterDataResolved(event) {
255
- /** @type {?} */
256
- const routerState = this._serializer.serialize(event.state);
257
- this.dispatchRouterAction(new RouterDataResolved(routerState, event, this._trigger));
258
- }
259
- /**
260
- * @private
261
- * @return {?}
262
- */
263
- reset() {
264
- this._trigger = 'none';
265
- this._storeState = null;
266
- this._routerState = null;
267
- }
268
- /**
269
- * No sense to mess up the `setUpRouterEventsListener` method as we have
270
- * to perform this check only once and unsubscribe after the first event
271
- * is triggered
272
- * @private
273
- * @return {?}
274
- */
275
- checkInitialNavigationOnce() {
276
- // Caretaker note: we have still left the `typeof` condition in order to avoid
277
- // creating a breaking change for projects that still use the View Engine.
278
- if ((typeof ngDevMode === 'undefined' || ngDevMode) &&
279
- // Angular is running tests in development mode thus we can be sure that this method will be
280
- // skipped in tests.
281
- isAngularInTestMode()) {
282
- return;
283
- }
284
- /** @type {?} */
285
- const subscription = this._router.events
286
- .pipe(first((/**
287
- * @param {?} event
288
- * @return {?}
289
- */
290
- (event) => event instanceof RoutesRecognized)))
291
- .subscribe((/**
292
- * @param {?} __0
293
- * @return {?}
294
- */
295
- ({ url }) => {
296
- // `location.pathname` always equals manually entered URL in the address bar
297
- // e.g. `location.pathname === '/foo'`, but the `router` state has been initialized
298
- // with another URL (e.g. used in combination with `NgxsStoragePlugin`), thus the
299
- // `RouterNavigation` action will be dispatched and the user will be redirected to the
300
- // previously saved URL. We want to prevent such behavior, so we perform this check
301
- // `location.pathname` always equals manually entered URL in the address bar
302
- // e.g. `location.pathname === '/foo'`, but the `router` state has been initialized
303
- // with another URL (e.g. used in combination with `NgxsStoragePlugin`), thus the
304
- // `RouterNavigation` action will be dispatched and the user will be redirected to the
305
- // previously saved URL. We want to prevent such behavior, so we perform this check
306
- // `url` is a recognized URL by the Angular's router, while `currentUrl` is an actual URL
307
- // entered in the browser's address bar
308
- // `PathLocationStrategy.prototype.path()` returns a concatenation of
309
- // `PlatformLocation.pathname` and normalized `PlatformLocation.search`.
310
- // `Location.prototype.normalize` strips base href from the URL,
311
- // if `baseHref` (declared in angular.json) for example is `/en`
312
- // and the URL is `/test#anchor` - then `_locationStrategy.path(true)` will return `/en/test#anchor`,
313
- // but `/en/test#anchor` is not known to the Angular's router, so we have to strip `/en`
314
- // from the URL
315
- /** @type {?} */
316
- const currentUrl = this._location.normalize(this._locationStrategy.path(true));
317
- /** @type {?} */
318
- const currentUrlTree = this._urlSerializer.parse(currentUrl);
319
- // We need to serialize the URL because in that example `/test/?redirect=https://google.com/`
320
- // Angular will recognize it as `/test?redirect=https:%2F%2Fwww.google.com%2F`
321
- // so we have to run the `currentUrl` via the `UrlSerializer` that will encode characters
322
- /** @type {?} */
323
- const currentSerializedUrl = this._urlSerializer.serialize(currentUrlTree);
324
- // If URLs differ from each other - we've got to perform a redirect to the manually entered URL
325
- // in the address bar, as it must have a priority
326
- if (currentSerializedUrl !== url) {
327
- this._router.navigateByUrl(currentUrl);
328
- }
329
- }));
330
- this._subscription.add(subscription);
331
- }
332
- };
333
- RouterState.ctorParameters = () => [
334
- { type: Store },
335
- { type: Router },
336
- { type: RouterStateSerializer },
337
- { type: NgZone },
338
- { type: UrlSerializer },
339
- { type: LocationStrategy },
340
- { type: Location }
341
- ];
342
- RouterState.decorators = [
343
- { type: Injectable }
344
- ];
345
- /** @nocollapse */
346
- RouterState.ctorParameters = () => [
347
- { type: Store },
348
- { type: Router },
349
- { type: RouterStateSerializer },
350
- { type: NgZone },
351
- { type: UrlSerializer },
352
- { type: LocationStrategy },
353
- { type: Location }
354
- ];
355
- tslib_1.__decorate([
356
- Action(Navigate),
357
- tslib_1.__metadata("design:type", Function),
358
- tslib_1.__metadata("design:paramtypes", [Object, Navigate]),
359
- tslib_1.__metadata("design:returntype", void 0)
360
- ], RouterState.prototype, "navigate", null);
361
- tslib_1.__decorate([
362
- Action([RouterNavigation, RouterError, RouterCancel, RouterDataResolved]),
363
- tslib_1.__metadata("design:type", Function),
364
- tslib_1.__metadata("design:paramtypes", [Object, Object]),
365
- tslib_1.__metadata("design:returntype", void 0)
366
- ], RouterState.prototype, "angularRouterAction", null);
367
- tslib_1.__decorate([
368
- Selector(),
369
- tslib_1.__metadata("design:type", Function),
370
- tslib_1.__metadata("design:paramtypes", [Object]),
371
- tslib_1.__metadata("design:returntype", void 0)
372
- ], RouterState, "state", null);
373
- tslib_1.__decorate([
374
- Selector(),
375
- tslib_1.__metadata("design:type", Function),
376
- tslib_1.__metadata("design:paramtypes", [Object]),
377
- tslib_1.__metadata("design:returntype", Object)
378
- ], RouterState, "url", null);
379
- RouterState = RouterState_1 = tslib_1.__decorate([
380
- State({
381
- name: 'router',
382
- defaults: {
383
- state: undefined,
384
- navigationId: undefined,
385
- trigger: 'none'
386
- }
387
- }),
388
- tslib_1.__metadata("design:paramtypes", [Store,
389
- Router,
390
- RouterStateSerializer,
391
- NgZone,
392
- UrlSerializer,
393
- LocationStrategy,
394
- Location])
395
- ], RouterState);
396
- export { RouterState };
397
- if (false) {
398
- /**
399
- * Determines how navigation was performed by the `RouterState` itself
400
- * or outside via `new Navigate(...)`
401
- * @type {?}
402
- * @private
403
- */
404
- RouterState.prototype._trigger;
405
- /**
406
- * That's the serialized state from the `Router` class
407
- * @type {?}
408
- * @private
409
- */
410
- RouterState.prototype._routerState;
411
- /**
412
- * That's the value of the `RouterState` state
413
- * @type {?}
414
- * @private
415
- */
416
- RouterState.prototype._storeState;
417
- /**
418
- * @type {?}
419
- * @private
420
- */
421
- RouterState.prototype._lastRoutesRecognized;
422
- /**
423
- * @type {?}
424
- * @private
425
- */
426
- RouterState.prototype._subscription;
427
- /**
428
- * @type {?}
429
- * @private
430
- */
431
- RouterState.prototype._store;
432
- /**
433
- * @type {?}
434
- * @private
435
- */
436
- RouterState.prototype._router;
437
- /**
438
- * @type {?}
439
- * @private
440
- */
441
- RouterState.prototype._serializer;
442
- /**
443
- * @type {?}
444
- * @private
445
- */
446
- RouterState.prototype._ngZone;
447
- /**
448
- * @type {?}
449
- * @private
450
- */
451
- RouterState.prototype._urlSerializer;
452
- /**
453
- * @type {?}
454
- * @private
455
- */
456
- RouterState.prototype._locationStrategy;
457
- /**
458
- * @type {?}
459
- * @private
460
- */
461
- RouterState.prototype._location;
462
- }
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnN0YXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMvcm91dGVyLXBsdWdpbi8iLCJzb3VyY2VzIjpbInNyYy9yb3V0ZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZSxFQUNmLGFBQWEsRUFDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQ0wsUUFBUSxFQUVSLFlBQVksRUFDWixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNuQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFFckQsc0NBSUM7OztJQUhDLGlDQUFVOztJQUNWLHdDQUFzQjs7SUFDdEIsbUNBQXVCOztJQW9CWixXQUFXLHlCQUFYLFdBQVc7Ozs7Ozs7Ozs7SUErQnRCLFlBQ1UsTUFBYSxFQUNiLE9BQWUsRUFDZixXQUF1RCxFQUN2RCxPQUFlLEVBQ2YsY0FBNkIsRUFDN0IsaUJBQW1DLEVBQ25DLFNB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M0Q7QUFHRDtJQURDLE1BQU0sQ0FBQyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzs7OztzREFXekU7QUFoREQ7SUFEQyxRQUFRLEVBQUU7Ozs7OEJBR1Y7QUFHRDtJQURDLFFBQVEsRUFBRTs7Ozs0QkFHVjtBQTdCVSxXQUFXO0lBVHZCLEtBQUssQ0FBbUI7UUFDdkIsSUFBSSxFQUFFLFFBQVE7UUFDZCxRQUFRLEVBQUU7WUFDUixLQUFLLEVBQUUsU0FBUztZQUNoQixZQUFZLEVBQUUsU0FBUztZQUN2QixPQUFPLEVBQUUsTUFBTTtTQUNoQjtLQUNGLENBQUM7NkNBa0NrQixLQUFLO1FBQ0osTUFBTTtRQUNGLHFCQUFxQjtRQUN6QixNQUFNO1FBQ0MsYUFBYTtRQUNWLGdCQUFnQjtRQUN4QixRQUFRO0dBdENsQixXQUFXLENBeVB2QjtTQXpQWSxXQUFXOzs7Ozs7OztJQUt0QiwrQkFBeUM7Ozs7OztJQUt6QyxtQ0FBd0Q7Ozs7OztJQUt4RCxrQ0FBb0Q7Ozs7O0lBRXBELDRDQUF3RDs7Ozs7SUFFeEQsb0NBQTJDOzs7OztJQWF6Qyw2QkFBcUI7Ozs7O0lBQ3JCLDhCQUF1Qjs7Ozs7SUFDdkIsa0NBQStEOzs7OztJQUMvRCw4QkFBdUI7Ozs7O0lBQ3ZCLHFDQUFxQzs7Ozs7SUFDckMsd0NBQTJDOzs7OztJQUMzQyxnQ0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1pvbmUsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE5hdmlnYXRpb25DYW5jZWwsXHJcbiAgTmF2aWdhdGlvbkVycm9yLFxyXG4gIFJvdXRlcixcclxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90LFxyXG4gIFJvdXRlc1JlY29nbml6ZWQsXHJcbiAgUmVzb2x2ZUVuZCxcclxuICBVcmxTZXJpYWxpemVyLFxyXG4gIE5hdmlnYXRpb25TdGFydCxcclxuICBOYXZpZ2F0aW9uRW5kXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTG9jYXRpb25TdHJhdGVneSwgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcclxuaW1wb3J0IHsgaXNBbmd1bGFySW5UZXN0TW9kZSB9IGZyb20gJ0BuZ3hzL3N0b3JlL2ludGVybmFscyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgTmF2aWdhdGUsXHJcbiAgUm91dGVyQWN0aW9uLFxyXG4gIFJvdXRlckNhbmNlbCxcclxuICBSb3V0ZXJFcnJvcixcclxuICBSb3V0ZXJOYXZpZ2F0aW9uLFxyXG4gIFJvdXRlckRhdGFSZXNvbHZlZFxyXG59IGZyb20gJy4vcm91dGVyLmFjdGlvbnMnO1xyXG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZVNlcmlhbGl6ZXIgfSBmcm9tICcuL3NlcmlhbGl6ZXInO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJTdGF0ZU1vZGVsPFQgPSBSb3V0ZXJTdGF0ZVNuYXBzaG90PiB7XHJcbiAgc3RhdGU/OiBUO1xyXG4gIG5hdmlnYXRpb25JZD86IG51bWJlcjtcclxuICB0cmlnZ2VyOiBSb3V0ZXJUcmlnZ2VyO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSb3V0ZXJUcmlnZ2VyID0gJ25vbmUnIHwgJ3JvdXRlcicgfCAnc3RvcmUnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBXaWxsIGJlIHByb3ZpZGVkIHRocm91Z2ggVGVyc2VyIGdsb2JhbCBkZWZpbml0aW9ucyBieSBBbmd1bGFyIENMSVxyXG4gKiBkdXJpbmcgdGhlIHByb2R1Y3Rpb24gYnVpbGQuIFRoaXMgaXMgaG93IEFuZ3VsYXIgZG9lcyB0cmVlLXNoYWtpbmcgaW50ZXJuYWxseS5cclxuICovXHJcbmRlY2xhcmUgY29uc3QgbmdEZXZNb2RlOiBib29sZWFuO1xyXG5cclxuQFN0YXRlPFJvdXRlclN0YXRlTW9kZWw+KHtcclxuICBuYW1lOiAncm91dGVyJyxcclxuICBkZWZhdWx0czoge1xyXG4gICAgc3RhdGU6IHVuZGVmaW5lZCxcclxuICAgIG5hdmlnYXRpb25JZDogdW5kZWZpbmVkLFxyXG4gICAgdHJpZ2dlcjogJ25vbmUnXHJcbiAgfVxyXG59KVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBSb3V0ZXJTdGF0ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyBob3cgbmF2aWdhdGlvbiB3YXMgcGVyZm9ybWVkIGJ5IHRoZSBgUm91dGVyU3RhdGVgIGl0c2VsZlxyXG4gICAqIG9yIG91dHNpZGUgdmlhIGBuZXcgTmF2aWdhdGUoLi4uKWBcclxuICAgKi9cclxuICBwcml2YXRlIF90cmlnZ2VyOiBSb3V0ZXJUcmlnZ2VyID0gJ25vbmUnO1xyXG5cclxuICAvKipcclxuICAgKiBUaGF0J3MgdGhlIHNlcmlhbGl6ZWQgc3RhdGUgZnJvbSB0aGUgYFJvdXRlcmAgY2xhc3NcclxuICAgKi9cclxuICBwcml2YXRlIF9yb3V0ZXJTdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBUaGF0J3MgdGhlIHZhbHVlIG9mIHRoZSBgUm91dGVyU3RhdGVgIHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc3RvcmVTdGF0ZTogUm91dGVyU3RhdGVNb2RlbCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9sYXN0Um91dGVzUmVjb2duaXplZDogUm91dGVzUmVjb2duaXplZCA9IG51bGwhO1xyXG5cclxuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIEBTZWxlY3RvcigpXHJcbiAgc3RhdGljIHN0YXRlPFQgPSBSb3V0ZXJTdGF0ZVNuYXBzaG90PihzdGF0ZTogUm91dGVyU3RhdGVNb2RlbDxUPikge1xyXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLnN0YXRlO1xyXG4gIH1cclxuXHJcbiAgQFNlbGVjdG9yKClcclxuICBzdGF0aWMgdXJsKHN0YXRlOiBSb3V0ZXJTdGF0ZU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBzdGF0ZSAmJiBzdGF0ZS5zdGF0ZSAmJiBzdGF0ZS5zdGF0ZS51cmw7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3N0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBfc2VyaWFsaXplcjogUm91dGVyU3RhdGVTZXJpYWxpemVyPFJvdXRlclN0YXRlU25hcHNob3Q+LFxyXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXHJcbiAgICBwcml2YXRlIF91cmxTZXJpYWxpemVyOiBVcmxTZXJpYWxpemVyLFxyXG4gICAgcHJpdmF0ZSBfbG9jYXRpb25TdHJhdGVneTogTG9jYXRpb25TdHJhdGVneSxcclxuICAgIHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvblxyXG4gICkge1xyXG4gICAgdGhpcy5zZXRVcFN0b3JlTGlzdGVuZXIoKTtcclxuICAgIHRoaXMuc2V0VXBSb3V0ZXJFdmVudHNMaXN0ZW5lcigpO1xyXG4gICAgdGhpcy5jaGVja0luaXRpYWxOYXZpZ2F0aW9uT25jZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIEBBY3Rpb24oTmF2aWdhdGUpXHJcbiAgbmF2aWdhdGUoXzogU3RhdGVDb250ZXh0PFJvdXRlclN0YXRlTW9kZWw+LCBhY3Rpb246IE5hdmlnYXRlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmdab25lLnJ1bigoKSA9PlxyXG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoYWN0aW9uLnBhdGgsIHtcclxuICAgICAgICBxdWVyeVBhcmFtczogYWN0aW9uLnF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgIC4uLmFjdGlvbi5leHRyYXNcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBAQWN0aW9uKFtSb3V0ZXJOYXZpZ2F0aW9uLCBSb3V0ZXJFcnJvciwgUm91dGVyQ2FuY2VsLCBSb3V0ZXJEYXRhUmVzb2x2ZWRdKVxyXG4gIGFuZ3VsYXJSb3V0ZXJBY3Rpb24oXHJcbiAgICBjdHg6IFN0YXRlQ29udGV4dDxSb3V0ZXJTdGF0ZU1vZGVsPixcclxuICAgIGFjdGlvbjogUm91dGVyQWN0aW9uPFJvdXRlclN0YXRlTW9kZWwsIFJvdXRlclN0YXRlU25hcHNob3Q+XHJcbiAgKTogdm9pZCB7XHJcbiAgICBjdHguc2V0U3RhdGUoe1xyXG4gICAgICAuLi5jdHguZ2V0U3RhdGUoKSxcclxuICAgICAgdHJpZ2dlcjogYWN0aW9uLnRyaWdnZXIsXHJcbiAgICAgIHN0YXRlOiBhY3Rpb24ucm91dGVyU3RhdGUsXHJcbiAgICAgIG5hdmlnYXRpb25JZDogYWN0aW9uLmV2ZW50LmlkXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXBTdG9yZUxpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fc3RvcmVcclxuICAgICAgLnNlbGVjdChSb3V0ZXJTdGF0ZSlcclxuICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IFJvdXRlclN0YXRlTW9kZWwgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlSWZOZWVkZWQoc3RhdGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHN1YnNjcmlwdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFVwUm91dGVyRXZlbnRzTGlzdGVuZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvblN0YXJ0KCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBSb3V0ZXNSZWNvZ25pemVkKSB7XHJcbiAgICAgICAgdGhpcy5fbGFzdFJvdXRlc1JlY29nbml6ZWQgPSBldmVudDtcclxuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJlc29sdmVFbmQpIHtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoUm91dGVyRGF0YVJlc29sdmVkKGV2ZW50KTtcclxuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoUm91dGVyQ2FuY2VsKGV2ZW50KTtcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoUm91dGVyRXJyb3IoZXZlbnQpO1xyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25FbmQoKTtcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGlvblN0YXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcm91dGVyU3RhdGUgPSB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLl9yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3QpO1xyXG5cclxuICAgIGlmICh0aGlzLl90cmlnZ2VyICE9PSAnbm9uZScpIHtcclxuICAgICAgdGhpcy5fc3RvcmVTdGF0ZSA9IHRoaXMuX3N0b3JlLnNlbGVjdFNuYXBzaG90KFJvdXRlclN0YXRlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGlvbkVuZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZERpc3BhdGNoUm91dGVyTmF2aWdhdGlvbigpKSB7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJOYXZpZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3VsZERpc3BhdGNoUm91dGVyTmF2aWdhdGlvbigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5fc3RvcmVTdGF0ZSkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJpZ2dlciAhPT0gJ3N0b3JlJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGVJZk5lZWRlZChzdGF0ZTogUm91dGVyU3RhdGVNb2RlbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2FuU2tpcE5hdmlnYXRpb24gPVxyXG4gICAgICAhdGhpcy5fc3RvcmVTdGF0ZSB8fFxyXG4gICAgICAhdGhpcy5fc3RvcmVTdGF0ZS5zdGF0ZSB8fFxyXG4gICAgICAhc3RhdGUgfHxcclxuICAgICAgc3RhdGUudHJpZ2dlciA9PT0gJ3JvdXRlcicgfHxcclxuICAgICAgdGhpcy5fcm91dGVyLnVybCA9PT0gdGhpcy5fc3RvcmVTdGF0ZS5zdGF0ZS51cmw7XHJcblxyXG4gICAgaWYgKGNhblNraXBOYXZpZ2F0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl90cmlnZ2VyID0gJ3N0b3JlJztcclxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLl9zdG9yZVN0YXRlIS5zdGF0ZSEudXJsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwYXRjaFJvdXRlck5hdmlnYXRpb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXh0Um91dGVyU3RhdGUgPSB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZSh0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC5zdGF0ZSk7XHJcblxyXG4gICAgdGhpcy5kaXNwYXRjaFJvdXRlckFjdGlvbihcclxuICAgICAgbmV3IFJvdXRlck5hdmlnYXRpb24oXHJcbiAgICAgICAgbmV4dFJvdXRlclN0YXRlLFxyXG4gICAgICAgIG5ldyBSb3V0ZXNSZWNvZ25pemVkKFxyXG4gICAgICAgICAgdGhpcy5fbGFzdFJvdXRlc1JlY29nbml6ZWQuaWQsXHJcbiAgICAgICAgICB0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC51cmwsXHJcbiAgICAgICAgICB0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC51cmxBZnRlclJlZGlyZWN0cyxcclxuICAgICAgICAgIG5leHRSb3V0ZXJTdGF0ZVxyXG4gICAgICAgICksXHJcbiAgICAgICAgdGhpcy5fdHJpZ2dlclxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwYXRjaFJvdXRlckNhbmNlbChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNwYXRjaFJvdXRlckFjdGlvbihcclxuICAgICAgbmV3IFJvdXRlckNhbmNlbCh0aGlzLl9yb3V0ZXJTdGF0ZSEsIHRoaXMuX3N0b3JlU3RhdGUsIGV2ZW50LCB0aGlzLl90cmlnZ2VyKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc3BhdGNoUm91dGVyQWN0aW9uKFxyXG4gICAgICBuZXcgUm91dGVyRXJyb3IoXHJcbiAgICAgICAgdGhpcy5fcm91dGVyU3RhdGUhLFxyXG4gICAgICAgIHRoaXMuX3N0b3JlU3RhdGUsXHJcbiAgICAgICAgbmV3IE5hdmlnYXRpb25FcnJvcihldmVudC5pZCwgZXZlbnQudXJsLCBgJHtldmVudH1gKSxcclxuICAgICAgICB0aGlzLl90cmlnZ2VyXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3BhdGNoUm91dGVyQWN0aW9uPFQ+KGFjdGlvbjogUm91dGVyQWN0aW9uPFQ+KTogdm9pZCB7XHJcbiAgICB0aGlzLl90cmlnZ2VyID0gJ3JvdXRlcic7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX3RyaWdnZXIgPSAnbm9uZSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpc3BhdGNoUm91dGVyRGF0YVJlc29sdmVkKGV2ZW50OiBSZXNvbHZlRW5kKTogdm9pZCB7XHJcbiAgICBjb25zdCByb3V0ZXJTdGF0ZSA9IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplKGV2ZW50LnN0YXRlKTtcclxuICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJBY3Rpb24obmV3IFJvdXRlckRhdGFSZXNvbHZlZChyb3V0ZXJTdGF0ZSwgZXZlbnQsIHRoaXMuX3RyaWdnZXIpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90cmlnZ2VyID0gJ25vbmUnO1xyXG4gICAgdGhpcy5fc3RvcmVTdGF0ZSA9IG51bGw7XHJcbiAgICB0aGlzLl9yb3V0ZXJTdGF0ZSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBObyBzZW5zZSB0byBtZXNzIHVwIHRoZSBgc2V0VXBSb3V0ZXJFdmVudHNMaXN0ZW5lcmAgbWV0aG9kIGFzIHdlIGhhdmVcclxuICAgKiB0byBwZXJmb3JtIHRoaXMgY2hlY2sgb25seSBvbmNlIGFuZCB1bnN1YnNjcmliZSBhZnRlciB0aGUgZmlyc3QgZXZlbnRcclxuICAgKiBpcyB0cmlnZ2VyZWRcclxuICAgKi9cclxuICBwcml2YXRlIGNoZWNrSW5pdGlhbE5hdmlnYXRpb25PbmNlKCk6IHZvaWQge1xyXG4gICAgLy8gQ2FyZXRha2VyIG5vdGU6IHdlIGhhdmUgc3RpbGwgbGVmdCB0aGUgYHR5cGVvZmAgY29uZGl0aW9uIGluIG9yZGVyIHRvIGF2b2lkXHJcbiAgICAvLyBjcmVhdGluZyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgcHJvamVjdHMgdGhhdCBzdGlsbCB1c2UgdGhlIFZpZXcgRW5naW5lLlxyXG4gICAgaWYgKFxyXG4gICAgICAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJlxyXG4gICAgICAvLyBBbmd1bGFyIGlzIHJ1bm5pbmcgdGVzdHMgaW4gZGV2ZWxvcG1lbnQgbW9kZSB0aHVzIHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhpcyBtZXRob2Qgd2lsbCBiZVxyXG4gICAgICAvLyBza2lwcGVkIGluIHRlc3RzLlxyXG4gICAgICBpc0FuZ3VsYXJJblRlc3RNb2RlKClcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5fcm91dGVyLmV2ZW50c1xyXG4gICAgICAucGlwZShmaXJzdCgoZXZlbnQpOiBldmVudCBpcyBSb3V0ZXNSZWNvZ25pemVkID0+IGV2ZW50IGluc3RhbmNlb2YgUm91dGVzUmVjb2duaXplZCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHsgdXJsIH0pID0+IHtcclxuICAgICAgICAvLyBgbG9jYXRpb24ucGF0aG5hbWVgIGFsd2F5cyBlcXVhbHMgbWFudWFsbHkgZW50ZXJlZCBVUkwgaW4gdGhlIGFkZHJlc3MgYmFyXHJcbiAgICAgICAgLy8gZS5nLiBgbG9jYXRpb24ucGF0aG5hbWUgPT09ICcvZm9vJ2AsIGJ1dCB0aGUgYHJvdXRlcmAgc3RhdGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcclxuICAgICAgICAvLyB3aXRoIGFub3RoZXIgVVJMIChlLmcuIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBgTmd4c1N0b3JhZ2VQbHVnaW5gKSwgdGh1cyB0aGVcclxuICAgICAgICAvLyBgUm91dGVyTmF2aWdhdGlvbmAgYWN0aW9uIHdpbGwgYmUgZGlzcGF0Y2hlZCBhbmQgdGhlIHVzZXIgd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRoZVxyXG4gICAgICAgIC8vIHByZXZpb3VzbHkgc2F2ZWQgVVJMLiBXZSB3YW50IHRvIHByZXZlbnQgc3VjaCBiZWhhdmlvciwgc28gd2UgcGVyZm9ybSB0aGlzIGNoZWNrXHJcblxyXG4gICAgICAgIC8vIGB1cmxgIGlzIGEgcmVjb2duaXplZCBVUkwgYnkgdGhlIEFuZ3VsYXIncyByb3V0ZXIsIHdoaWxlIGBjdXJyZW50VXJsYCBpcyBhbiBhY3R1YWwgVVJMXHJcbiAgICAgICAgLy8gZW50ZXJlZCBpbiB0aGUgYnJvd3NlcidzIGFkZHJlc3MgYmFyXHJcbiAgICAgICAgLy8gYFBhdGhMb2NhdGlvblN0cmF0ZWd5LnByb3RvdHlwZS5wYXRoKClgIHJldHVybnMgYSBjb25jYXRlbmF0aW9uIG9mXHJcbiAgICAgICAgLy8gYFBsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWVgIGFuZCBub3JtYWxpemVkIGBQbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaGAuXHJcblxyXG4gICAgICAgIC8vIGBMb2NhdGlvbi5wcm90b3R5cGUubm9ybWFsaXplYCBzdHJpcHMgYmFzZSBocmVmIGZyb20gdGhlIFVSTCxcclxuICAgICAgICAvLyBpZiBgYmFzZUhyZWZgIChkZWNsYXJlZCBpbiBhbmd1bGFyLmpzb24pIGZvciBleGFtcGxlIGlzIGAvZW5gXHJcbiAgICAgICAgLy8gYW5kIHRoZSBVUkwgaXMgYC90ZXN0I2FuY2hvcmAgLSB0aGVuIGBfbG9jYXRpb25TdHJhdGVneS5wYXRoKHRydWUpYCB3aWxsIHJldHVybiBgL2VuL3Rlc3QjYW5jaG9yYCxcclxuICAgICAgICAvLyBidXQgYC9lbi90ZXN0I2FuY2hvcmAgaXMgbm90IGtub3duIHRvIHRoZSBBbmd1bGFyJ3Mgcm91dGVyLCBzbyB3ZSBoYXZlIHRvIHN0cmlwIGAvZW5gXHJcbiAgICAgICAgLy8gZnJvbSB0aGUgVVJMXHJcbiAgICAgICAgY29uc3QgY3VycmVudFVybCA9IHRoaXMuX2xvY2F0aW9uLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnBhdGgodHJ1ZSkpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRVcmxUcmVlID0gdGhpcy5fdXJsU2VyaWFsaXplci5wYXJzZShjdXJyZW50VXJsKTtcclxuICAgICAgICAvLyBXZSBuZWVkIHRvIHNlcmlhbGl6ZSB0aGUgVVJMIGJlY2F1c2UgaW4gdGhhdCBleGFtcGxlIGAvdGVzdC8/cmVkaXJlY3Q9aHR0cHM6Ly9nb29nbGUuY29tL2BcclxuICAgICAgICAvLyBBbmd1bGFyIHdpbGwgcmVjb2duaXplIGl0IGFzIGAvdGVzdD9yZWRpcmVjdD1odHRwczolMkYlMkZ3d3cuZ29vZ2xlLmNvbSUyRmBcclxuICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIHJ1biB0aGUgYGN1cnJlbnRVcmxgIHZpYSB0aGUgYFVybFNlcmlhbGl6ZXJgIHRoYXQgd2lsbCBlbmNvZGUgY2hhcmFjdGVyc1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZXJpYWxpemVkVXJsID0gdGhpcy5fdXJsU2VyaWFsaXplci5zZXJpYWxpemUoY3VycmVudFVybFRyZWUpO1xyXG5cclxuICAgICAgICAvLyBJZiBVUkxzIGRpZmZlciBmcm9tIGVhY2ggb3RoZXIgLSB3ZSd2ZSBnb3QgdG8gcGVyZm9ybSBhIHJlZGlyZWN0IHRvIHRoZSBtYW51YWxseSBlbnRlcmVkIFVSTFxyXG4gICAgICAgIC8vIGluIHRoZSBhZGRyZXNzIGJhciwgYXMgaXQgbXVzdCBoYXZlIGEgcHJpb3JpdHlcclxuICAgICAgICBpZiAoY3VycmVudFNlcmlhbGl6ZWRVcmwgIT09IHVybCkge1xyXG4gICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHN1YnNjcmlwdGlvbik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
1
+ import * as tslib_1 from "tslib";
2
+ var RouterState_1;
3
+ /**
4
+ * @fileoverview added by tsickle
5
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
6
+ */
7
+ import { NgZone, Injectable, OnDestroy } from '@angular/core';
8
+ import { NavigationCancel, NavigationError, Router, RouterStateSnapshot, RoutesRecognized, ResolveEnd, NavigationStart, NavigationEnd } from '@angular/router';
9
+ import { Action, Selector, State, StateContext, Store } from '@ngxs/store';
10
+ import { Subscription } from 'rxjs';
11
+ import { Navigate, RouterCancel, RouterError, RouterNavigation, RouterDataResolved } from './router.actions';
12
+ import { RouterStateSerializer } from './serializer';
13
+ /**
14
+ * @record
15
+ * @template T
16
+ */
17
+ export function RouterStateModel() { }
18
+ if (false) {
19
+ /** @type {?|undefined} */
20
+ RouterStateModel.prototype.state;
21
+ /** @type {?|undefined} */
22
+ RouterStateModel.prototype.navigationId;
23
+ /** @type {?} */
24
+ RouterStateModel.prototype.trigger;
25
+ }
26
+ let RouterState = RouterState_1 = class RouterState {
27
+ /**
28
+ * @param {?} _store
29
+ * @param {?} _router
30
+ * @param {?} _serializer
31
+ * @param {?} _ngZone
32
+ */
33
+ constructor(_store, _router, _serializer, _ngZone) {
34
+ this._store = _store;
35
+ this._router = _router;
36
+ this._serializer = _serializer;
37
+ this._ngZone = _ngZone;
38
+ /**
39
+ * Determines how navigation was performed by the `RouterState` itself
40
+ * or outside via `new Navigate(...)`
41
+ */
42
+ this._trigger = 'none';
43
+ /**
44
+ * That's the serialized state from the `Router` class
45
+ */
46
+ this._routerState = null;
47
+ /**
48
+ * That's the value of the `RouterState` state
49
+ */
50
+ this._storeState = null;
51
+ this._lastRoutesRecognized = (/** @type {?} */ (null));
52
+ this._subscription = new Subscription();
53
+ this.setUpStoreListener();
54
+ this.setUpRouterEventsListener();
55
+ }
56
+ /**
57
+ * @template T
58
+ * @param {?} state
59
+ * @return {?}
60
+ */
61
+ static state(state) {
62
+ return state && state.state;
63
+ }
64
+ /**
65
+ * @param {?} state
66
+ * @return {?}
67
+ */
68
+ static url(state) {
69
+ return state && state.state && state.state.url;
70
+ }
71
+ /**
72
+ * @return {?}
73
+ */
74
+ ngOnDestroy() {
75
+ this._subscription.unsubscribe();
76
+ }
77
+ /**
78
+ * @param {?} _
79
+ * @param {?} action
80
+ * @return {?}
81
+ */
82
+ navigate(_, action) {
83
+ return this._ngZone.run((/**
84
+ * @return {?}
85
+ */
86
+ () => this._router.navigate(action.path, Object.assign({ queryParams: action.queryParams }, action.extras))));
87
+ }
88
+ /**
89
+ * @param {?} ctx
90
+ * @param {?} action
91
+ * @return {?}
92
+ */
93
+ angularRouterAction(ctx, action) {
94
+ ctx.setState(Object.assign({}, ctx.getState(), { trigger: action.trigger, state: action.routerState, navigationId: action.event.id }));
95
+ }
96
+ /**
97
+ * @private
98
+ * @return {?}
99
+ */
100
+ setUpStoreListener() {
101
+ /** @type {?} */
102
+ const subscription = this._store
103
+ .select(RouterState_1)
104
+ .subscribe((/**
105
+ * @param {?} state
106
+ * @return {?}
107
+ */
108
+ (state) => {
109
+ this.navigateIfNeeded(state);
110
+ }));
111
+ this._subscription.add(subscription);
112
+ }
113
+ /**
114
+ * @private
115
+ * @return {?}
116
+ */
117
+ setUpRouterEventsListener() {
118
+ /** @type {?} */
119
+ const subscription = this._router.events.subscribe((/**
120
+ * @param {?} event
121
+ * @return {?}
122
+ */
123
+ event => {
124
+ if (event instanceof NavigationStart) {
125
+ this.navigationStart();
126
+ }
127
+ else if (event instanceof RoutesRecognized) {
128
+ this._lastRoutesRecognized = event;
129
+ }
130
+ else if (event instanceof ResolveEnd) {
131
+ this.dispatchRouterDataResolved(event);
132
+ }
133
+ else if (event instanceof NavigationCancel) {
134
+ this.dispatchRouterCancel(event);
135
+ this.reset();
136
+ }
137
+ else if (event instanceof NavigationError) {
138
+ this.dispatchRouterError(event);
139
+ this.reset();
140
+ }
141
+ else if (event instanceof NavigationEnd) {
142
+ this.navigationEnd();
143
+ this.reset();
144
+ }
145
+ }));
146
+ this._subscription.add(subscription);
147
+ }
148
+ /**
149
+ * @private
150
+ * @return {?}
151
+ */
152
+ navigationStart() {
153
+ this._routerState = this._serializer.serialize(this._router.routerState.snapshot);
154
+ if (this._trigger !== 'none') {
155
+ this._storeState = this._store.selectSnapshot(RouterState_1);
156
+ }
157
+ }
158
+ /**
159
+ * @private
160
+ * @return {?}
161
+ */
162
+ navigationEnd() {
163
+ if (this.shouldDispatchRouterNavigation()) {
164
+ this.dispatchRouterNavigation();
165
+ }
166
+ }
167
+ /**
168
+ * @private
169
+ * @return {?}
170
+ */
171
+ shouldDispatchRouterNavigation() {
172
+ if (!this._storeState)
173
+ return true;
174
+ return this._trigger !== 'store';
175
+ }
176
+ /**
177
+ * @private
178
+ * @param {?} state
179
+ * @return {?}
180
+ */
181
+ navigateIfNeeded(state) {
182
+ if (state && state.trigger === 'devtools') {
183
+ this._storeState = this._store.selectSnapshot(RouterState_1);
184
+ }
185
+ /** @type {?} */
186
+ const canSkipNavigation = !this._storeState ||
187
+ !this._storeState.state ||
188
+ !state ||
189
+ state.trigger === 'router' ||
190
+ this._router.url === this._storeState.state.url;
191
+ if (canSkipNavigation) {
192
+ return;
193
+ }
194
+ this._trigger = 'store';
195
+ this._ngZone.run((/**
196
+ * @return {?}
197
+ */
198
+ () => {
199
+ this._router.navigateByUrl((/** @type {?} */ ((/** @type {?} */ (this._storeState)).state)).url);
200
+ }));
201
+ }
202
+ /**
203
+ * @private
204
+ * @return {?}
205
+ */
206
+ dispatchRouterNavigation() {
207
+ /** @type {?} */
208
+ const nextRouterState = this._serializer.serialize(this._lastRoutesRecognized.state);
209
+ this.dispatchRouterAction(new RouterNavigation(nextRouterState, new RoutesRecognized(this._lastRoutesRecognized.id, this._lastRoutesRecognized.url, this._lastRoutesRecognized.urlAfterRedirects, nextRouterState), this._trigger));
210
+ }
211
+ /**
212
+ * @private
213
+ * @param {?} event
214
+ * @return {?}
215
+ */
216
+ dispatchRouterCancel(event) {
217
+ this.dispatchRouterAction(new RouterCancel((/** @type {?} */ (this._routerState)), this._storeState, event, this._trigger));
218
+ }
219
+ /**
220
+ * @private
221
+ * @param {?} event
222
+ * @return {?}
223
+ */
224
+ dispatchRouterError(event) {
225
+ this.dispatchRouterAction(new RouterError((/** @type {?} */ (this._routerState)), this._storeState, new NavigationError(event.id, event.url, `${event}`), this._trigger));
226
+ }
227
+ /**
228
+ * @private
229
+ * @template T
230
+ * @param {?} action
231
+ * @return {?}
232
+ */
233
+ dispatchRouterAction(action) {
234
+ this._trigger = 'router';
235
+ try {
236
+ this._store.dispatch(action);
237
+ }
238
+ finally {
239
+ this._trigger = 'none';
240
+ }
241
+ }
242
+ /**
243
+ * @private
244
+ * @param {?} event
245
+ * @return {?}
246
+ */
247
+ dispatchRouterDataResolved(event) {
248
+ /** @type {?} */
249
+ const routerState = this._serializer.serialize(event.state);
250
+ this.dispatchRouterAction(new RouterDataResolved(routerState, event, this._trigger));
251
+ }
252
+ /**
253
+ * @private
254
+ * @return {?}
255
+ */
256
+ reset() {
257
+ this._trigger = 'none';
258
+ this._storeState = null;
259
+ this._routerState = null;
260
+ }
261
+ };
262
+ RouterState.ctorParameters = () => [
263
+ { type: Store },
264
+ { type: Router },
265
+ { type: RouterStateSerializer },
266
+ { type: NgZone }
267
+ ];
268
+ RouterState.decorators = [
269
+ { type: Injectable }
270
+ ];
271
+ /** @nocollapse */
272
+ RouterState.ctorParameters = () => [
273
+ { type: Store },
274
+ { type: Router },
275
+ { type: RouterStateSerializer },
276
+ { type: NgZone }
277
+ ];
278
+ tslib_1.__decorate([
279
+ Action(Navigate),
280
+ tslib_1.__metadata("design:type", Function),
281
+ tslib_1.__metadata("design:paramtypes", [Object, Navigate]),
282
+ tslib_1.__metadata("design:returntype", void 0)
283
+ ], RouterState.prototype, "navigate", null);
284
+ tslib_1.__decorate([
285
+ Action([RouterNavigation, RouterError, RouterCancel, RouterDataResolved]),
286
+ tslib_1.__metadata("design:type", Function),
287
+ tslib_1.__metadata("design:paramtypes", [Object, Object]),
288
+ tslib_1.__metadata("design:returntype", void 0)
289
+ ], RouterState.prototype, "angularRouterAction", null);
290
+ tslib_1.__decorate([
291
+ Selector(),
292
+ tslib_1.__metadata("design:type", Function),
293
+ tslib_1.__metadata("design:paramtypes", [Object]),
294
+ tslib_1.__metadata("design:returntype", void 0)
295
+ ], RouterState, "state", null);
296
+ tslib_1.__decorate([
297
+ Selector(),
298
+ tslib_1.__metadata("design:type", Function),
299
+ tslib_1.__metadata("design:paramtypes", [Object]),
300
+ tslib_1.__metadata("design:returntype", Object)
301
+ ], RouterState, "url", null);
302
+ RouterState = RouterState_1 = tslib_1.__decorate([
303
+ State({
304
+ name: 'router',
305
+ defaults: {
306
+ state: undefined,
307
+ navigationId: undefined,
308
+ trigger: 'none'
309
+ }
310
+ }),
311
+ tslib_1.__metadata("design:paramtypes", [Store,
312
+ Router,
313
+ RouterStateSerializer,
314
+ NgZone])
315
+ ], RouterState);
316
+ export { RouterState };
317
+ if (false) {
318
+ /**
319
+ * Determines how navigation was performed by the `RouterState` itself
320
+ * or outside via `new Navigate(...)`
321
+ * @type {?}
322
+ * @private
323
+ */
324
+ RouterState.prototype._trigger;
325
+ /**
326
+ * That's the serialized state from the `Router` class
327
+ * @type {?}
328
+ * @private
329
+ */
330
+ RouterState.prototype._routerState;
331
+ /**
332
+ * That's the value of the `RouterState` state
333
+ * @type {?}
334
+ * @private
335
+ */
336
+ RouterState.prototype._storeState;
337
+ /**
338
+ * @type {?}
339
+ * @private
340
+ */
341
+ RouterState.prototype._lastRoutesRecognized;
342
+ /**
343
+ * @type {?}
344
+ * @private
345
+ */
346
+ RouterState.prototype._subscription;
347
+ /**
348
+ * @type {?}
349
+ * @private
350
+ */
351
+ RouterState.prototype._store;
352
+ /**
353
+ * @type {?}
354
+ * @private
355
+ */
356
+ RouterState.prototype._router;
357
+ /**
358
+ * @type {?}
359
+ * @private
360
+ */
361
+ RouterState.prototype._serializer;
362
+ /**
363
+ * @type {?}
364
+ * @private
365
+ */
366
+ RouterState.prototype._ngZone;
367
+ }
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLnN0YXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMvcm91dGVyLXBsdWdpbi8iLCJzb3VyY2VzIjpbInNyYy9yb3V0ZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixlQUFlLEVBQ2YsYUFBYSxFQUNkLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQ0wsUUFBUSxFQUVSLFlBQVksRUFDWixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNuQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFFckQsc0NBSUM7OztJQUhDLGlDQUFVOztJQUNWLHdDQUFzQjs7SUFDdEIsbUNBQXVCOztJQW1CWixXQUFXLHlCQUFYLFdBQVc7Ozs7Ozs7SUErQnRCLFlBQ1UsTUFBYSxFQUNiLE9BQWUsRUFDZixXQUF1RCxFQUN2RCxPQUFlO1FBSGYsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBNEM7UUFDdkQsWUFBTyxHQUFQLE9BQU8sQ0FBUTs7Ozs7UUE5QmpCLGFBQVEsR0FBa0IsTUFBTSxDQUFDOzs7O1FBS2pDLGlCQUFZLEdBQStCLElBQUksQ0FBQzs7OztRQUtoRCxnQkFBVyxHQUE0QixJ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bUI7UUFDdkIsSUFBSSxFQUFFLFFBQVE7UUFDZCxRQUFRLEVBQUU7WUFDUixLQUFLLEVBQUUsU0FBUztZQUNoQixZQUFZLEVBQUUsU0FBUztZQUN2QixPQUFPLEVBQUUsTUFBTTtTQUNoQjtLQUNGLENBQUM7NkNBa0NrQixLQUFLO1FBQ0osTUFBTTtRQUNGLHFCQUFxQjtRQUN6QixNQUFNO0dBbkNkLFdBQVcsQ0FvTXZCO1NBcE1ZLFdBQVc7Ozs7Ozs7O0lBS3RCLCtCQUF5Qzs7Ozs7O0lBS3pDLG1DQUF3RDs7Ozs7O0lBS3hELGtDQUFvRDs7Ozs7SUFFcEQsNENBQXdEOzs7OztJQUV4RCxvQ0FBMkM7Ozs7O0lBYXpDLDZCQUFxQjs7Ozs7SUFDckIsOEJBQXVCOzs7OztJQUN2QixrQ0FBK0Q7Ozs7O0lBQy9ELDhCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nWm9uZSwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIFJvdXRlcixcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcbiAgUm91dGVzUmVjb2duaXplZCxcbiAgUmVzb2x2ZUVuZCxcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBOYXZpZ2F0aW9uRW5kXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBOYXZpZ2F0ZSxcbiAgUm91dGVyQWN0aW9uLFxuICBSb3V0ZXJDYW5jZWwsXG4gIFJvdXRlckVycm9yLFxuICBSb3V0ZXJOYXZpZ2F0aW9uLFxuICBSb3V0ZXJEYXRhUmVzb2x2ZWRcbn0gZnJvbSAnLi9yb3V0ZXIuYWN0aW9ucyc7XG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZVNlcmlhbGl6ZXIgfSBmcm9tICcuL3NlcmlhbGl6ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlclN0YXRlTW9kZWw8VCA9IFJvdXRlclN0YXRlU25hcHNob3Q+IHtcbiAgc3RhdGU/OiBUO1xuICBuYXZpZ2F0aW9uSWQ/OiBudW1iZXI7XG4gIHRyaWdnZXI6IFJvdXRlclRyaWdnZXI7XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRlclRyaWdnZXIgPVxuICB8ICdub25lJ1xuICB8ICdyb3V0ZXInXG4gIHwgJ3N0b3JlJ1xuICAvLyBUaGUgYGRldnRvb2xzYCB0cmlnZ2VyIG1lYW5zIHRoYXQgdGhlIHN0YXRlIGNoYW5nZSBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgUmVkdXggRGV2VG9vbHMgKGUuZy4gd2hlbiB0aGUgdGltZS10cmF2ZWxpbmcgaXMgdXNlZCkuXG4gIHwgJ2RldnRvb2xzJztcblxuQFN0YXRlPFJvdXRlclN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ3JvdXRlcicsXG4gIGRlZmF1bHRzOiB7XG4gICAgc3RhdGU6IHVuZGVmaW5lZCxcbiAgICBuYXZpZ2F0aW9uSWQ6IHVuZGVmaW5lZCxcbiAgICB0cmlnZ2VyOiAnbm9uZSdcbiAgfVxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSb3V0ZXJTdGF0ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGhvdyBuYXZpZ2F0aW9uIHdhcyBwZXJmb3JtZWQgYnkgdGhlIGBSb3V0ZXJTdGF0ZWAgaXRzZWxmXG4gICAqIG9yIG91dHNpZGUgdmlhIGBuZXcgTmF2aWdhdGUoLi4uKWBcbiAgICovXG4gIHByaXZhdGUgX3RyaWdnZXI6IFJvdXRlclRyaWdnZXIgPSAnbm9uZSc7XG5cbiAgLyoqXG4gICAqIFRoYXQncyB0aGUgc2VyaWFsaXplZCBzdGF0ZSBmcm9tIHRoZSBgUm91dGVyYCBjbGFzc1xuICAgKi9cbiAgcHJpdmF0ZSBfcm91dGVyU3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhhdCdzIHRoZSB2YWx1ZSBvZiB0aGUgYFJvdXRlclN0YXRlYCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc3RvcmVTdGF0ZTogUm91dGVyU3RhdGVNb2RlbCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2xhc3RSb3V0ZXNSZWNvZ25pemVkOiBSb3V0ZXNSZWNvZ25pemVkID0gbnVsbCE7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIEBTZWxlY3RvcigpXG4gIHN0YXRpYyBzdGF0ZTxUID0gUm91dGVyU3RhdGVTbmFwc2hvdD4oc3RhdGU6IFJvdXRlclN0YXRlTW9kZWw8VD4pIHtcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUuc3RhdGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBzdGF0aWMgdXJsKHN0YXRlOiBSb3V0ZXJTdGF0ZU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUuc3RhdGUgJiYgc3RhdGUuc3RhdGUudXJsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgX3NlcmlhbGl6ZXI6IFJvdXRlclN0YXRlU2VyaWFsaXplcjxSb3V0ZXJTdGF0ZVNuYXBzaG90PixcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLnNldFVwU3RvcmVMaXN0ZW5lcigpO1xuICAgIHRoaXMuc2V0VXBSb3V0ZXJFdmVudHNMaXN0ZW5lcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBAQWN0aW9uKE5hdmlnYXRlKVxuICBuYXZpZ2F0ZShfOiBTdGF0ZUNvbnRleHQ8Um91dGVyU3RhdGVNb2RlbD4sIGFjdGlvbjogTmF2aWdhdGUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmdab25lLnJ1bigoKSA9PlxuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKGFjdGlvbi5wYXRoLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBhY3Rpb24ucXVlcnlQYXJhbXMsXG4gICAgICAgIC4uLmFjdGlvbi5leHRyYXNcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIEBBY3Rpb24oW1JvdXRlck5hdmlnYXRpb24sIFJvdXRlckVycm9yLCBSb3V0ZXJDYW5jZWwsIFJvdXRlckRhdGFSZXNvbHZlZF0pXG4gIGFuZ3VsYXJSb3V0ZXJBY3Rpb24oXG4gICAgY3R4OiBTdGF0ZUNvbnRleHQ8Um91dGVyU3RhdGVNb2RlbD4sXG4gICAgYWN0aW9uOiBSb3V0ZXJBY3Rpb248Um91dGVyU3RhdGVNb2RlbCwgUm91dGVyU3RhdGVTbmFwc2hvdD5cbiAgKTogdm9pZCB7XG4gICAgY3R4LnNldFN0YXRlKHtcbiAgICAgIC4uLmN0eC5nZXRTdGF0ZSgpLFxuICAgICAgdHJpZ2dlcjogYWN0aW9uLnRyaWdnZXIsXG4gICAgICBzdGF0ZTogYWN0aW9uLnJvdXRlclN0YXRlLFxuICAgICAgbmF2aWdhdGlvbklkOiBhY3Rpb24uZXZlbnQuaWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VXBTdG9yZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N0b3JlXG4gICAgICAuc2VsZWN0KFJvdXRlclN0YXRlKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGU6IFJvdXRlclN0YXRlTW9kZWwgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUlmTmVlZGVkKHN0YXRlKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRVcFJvdXRlckV2ZW50c0xpc3RlbmVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3JvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TdGFydCgpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIFJvdXRlc1JlY29nbml6ZWQpIHtcbiAgICAgICAgdGhpcy5fbGFzdFJvdXRlc1JlY29nbml6ZWQgPSBldmVudDtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBSZXNvbHZlRW5kKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJEYXRhUmVzb2x2ZWQoZXZlbnQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJvdXRlckNhbmNlbChldmVudCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJvdXRlckVycm9yKGV2ZW50KTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRW5kKCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgbmF2aWdhdGlvblN0YXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JvdXRlclN0YXRlID0gdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5fcm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90KTtcblxuICAgIGlmICh0aGlzLl90cmlnZ2VyICE9PSAnbm9uZScpIHtcbiAgICAgIHRoaXMuX3N0b3JlU3RhdGUgPSB0aGlzLl9zdG9yZS5zZWxlY3RTbmFwc2hvdChSb3V0ZXJTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0aW9uRW5kKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3VsZERpc3BhdGNoUm91dGVyTmF2aWdhdGlvbigpKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoUm91dGVyTmF2aWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkRGlzcGF0Y2hSb3V0ZXJOYXZpZ2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fc3RvcmVTdGF0ZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXIgIT09ICdzdG9yZSc7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlSWZOZWVkZWQoc3RhdGU6IFJvdXRlclN0YXRlTW9kZWwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoc3RhdGUgJiYgc3RhdGUudHJpZ2dlciA9PT0gJ2RldnRvb2xzJykge1xuICAgICAgdGhpcy5fc3RvcmVTdGF0ZSA9IHRoaXMuX3N0b3JlLnNlbGVjdFNuYXBzaG90KFJvdXRlclN0YXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYW5Ta2lwTmF2aWdhdGlvbiA9XG4gICAgICAhdGhpcy5fc3RvcmVTdGF0ZSB8fFxuICAgICAgIXRoaXMuX3N0b3JlU3RhdGUuc3RhdGUgfHxcbiAgICAgICFzdGF0ZSB8fFxuICAgICAgc3RhdGUudHJpZ2dlciA9PT0gJ3JvdXRlcicgfHxcbiAgICAgIHRoaXMuX3JvdXRlci51cmwgPT09IHRoaXMuX3N0b3JlU3RhdGUuc3RhdGUudXJsO1xuXG4gICAgaWYgKGNhblNraXBOYXZpZ2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlciA9ICdzdG9yZSc7XG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLl9zdG9yZVN0YXRlIS5zdGF0ZSEudXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJOYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRSb3V0ZXJTdGF0ZSA9IHRoaXMuX3NlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMuX2xhc3RSb3V0ZXNSZWNvZ25pemVkLnN0YXRlKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJBY3Rpb24oXG4gICAgICBuZXcgUm91dGVyTmF2aWdhdGlvbihcbiAgICAgICAgbmV4dFJvdXRlclN0YXRlLFxuICAgICAgICBuZXcgUm91dGVzUmVjb2duaXplZChcbiAgICAgICAgICB0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC5pZCxcbiAgICAgICAgICB0aGlzLl9sYXN0Um91dGVzUmVjb2duaXplZC51cmwsXG4gICAgICAgICAgdGhpcy5fbGFzdFJvdXRlc1JlY29nbml6ZWQudXJsQWZ0ZXJSZWRpcmVjdHMsXG4gICAgICAgICAgbmV4dFJvdXRlclN0YXRlXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuX3RyaWdnZXJcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaFJvdXRlckNhbmNlbChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hSb3V0ZXJBY3Rpb24oXG4gICAgICBuZXcgUm91dGVyQ2FuY2VsKHRoaXMuX3JvdXRlclN0YXRlISwgdGhpcy5fc3RvcmVTdGF0ZSwgZXZlbnQsIHRoaXMuX3RyaWdnZXIpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaFJvdXRlckFjdGlvbihcbiAgICAgIG5ldyBSb3V0ZXJFcnJvcihcbiAgICAgICAgdGhpcy5fcm91dGVyU3RhdGUhLFxuICAgICAgICB0aGlzLl9zdG9yZVN0YXRlLFxuICAgICAgICBuZXcgTmF2aWdhdGlvbkVycm9yKGV2ZW50LmlkLCBldmVudC51cmwsIGAke2V2ZW50fWApLFxuICAgICAgICB0aGlzLl90cmlnZ2VyXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hSb3V0ZXJBY3Rpb248VD4oYWN0aW9uOiBSb3V0ZXJBY3Rpb248VD4pOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2VyID0gJ3JvdXRlcic7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fdHJpZ2dlciA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoUm91dGVyRGF0YVJlc29sdmVkKGV2ZW50OiBSZXNvbHZlRW5kKTogdm9pZCB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGUgPSB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZShldmVudC5zdGF0ZSk7XG4gICAgdGhpcy5kaXNwYXRjaFJvdXRlckFjdGlvbihuZXcgUm91dGVyRGF0YVJlc29sdmVkKHJvdXRlclN0YXRlLCBldmVudCwgdGhpcy5fdHJpZ2dlcikpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2VyID0gJ25vbmUnO1xuICAgIHRoaXMuX3N0b3JlU3RhdGUgPSBudWxsO1xuICAgIHRoaXMuX3JvdXRlclN0YXRlID0gbnVsbDtcbiAgfVxufVxuIl19