@covalent/guided-tour 4.0.0 → 4.1.1-beta.3

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 (33) hide show
  1. package/README.md +32 -15
  2. package/covalent-guided-tour.d.ts +2 -1
  3. package/esm2020/covalent-guided-tour.mjs +5 -0
  4. package/esm2020/lib/guided-tour.module.mjs +19 -0
  5. package/esm2020/lib/guided-tour.service.mjs +163 -0
  6. package/esm2020/lib/guided.tour.mjs +438 -0
  7. package/esm2020/public_api.mjs +4 -0
  8. package/fesm2015/{covalent-guided-tour.js → covalent-guided-tour.mjs} +180 -615
  9. package/fesm2015/covalent-guided-tour.mjs.map +1 -0
  10. package/fesm2020/covalent-guided-tour.mjs +619 -0
  11. package/fesm2020/covalent-guided-tour.mjs.map +1 -0
  12. package/lib/guided-tour.module.d.ts +7 -0
  13. package/{guided-tour.service.d.ts → lib/guided-tour.service.d.ts} +4 -1
  14. package/{guided.tour.d.ts → lib/guided.tour.d.ts} +3 -7
  15. package/package.json +26 -22
  16. package/public_api.d.ts +3 -0
  17. package/{_guided-tour.scss → styles/guided-tour.scss} +17 -2
  18. package/_guided-tour-theme.scss +0 -78
  19. package/bundles/covalent-guided-tour.umd.js +0 -1369
  20. package/bundles/covalent-guided-tour.umd.js.map +0 -1
  21. package/bundles/covalent-guided-tour.umd.min.js +0 -16
  22. package/bundles/covalent-guided-tour.umd.min.js.map +0 -1
  23. package/covalent-guided-tour.metadata.json +0 -1
  24. package/esm2015/covalent-guided-tour.js +0 -10
  25. package/esm2015/guided-tour.module.js +0 -19
  26. package/esm2015/guided-tour.service.js +0 -312
  27. package/esm2015/guided.tour.js +0 -722
  28. package/esm2015/index.js +0 -7
  29. package/esm2015/public-api.js +0 -9
  30. package/fesm2015/covalent-guided-tour.js.map +0 -1
  31. package/guided-tour.module.d.ts +0 -2
  32. package/index.d.ts +0 -1
  33. package/public-api.d.ts +0 -3
@@ -1,312 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * Generated from: guided-tour.service.ts
4
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
- */
6
- import { __awaiter } from "tslib";
7
- import { Injectable } from '@angular/core';
8
- import { HttpClient } from '@angular/common/http';
9
- import { Router, ActivatedRoute, NavigationStart, } from '@angular/router';
10
- import { tap, map, filter } from 'rxjs/operators';
11
- import { fromEvent } from 'rxjs';
12
- import { debounceTime } from 'rxjs/operators';
13
- import { CovalentGuidedTour } from './guided.tour';
14
- /**
15
- * @record
16
- */
17
- export function IGuidedTour() { }
18
- if (false) {
19
- /** @type {?} */
20
- IGuidedTour.prototype.steps;
21
- /** @type {?|undefined} */
22
- IGuidedTour.prototype.finishButtonText;
23
- }
24
- /**
25
- * @record
26
- */
27
- export function IGuidedTourStep() { }
28
- if (false) {
29
- /** @type {?|undefined} */
30
- IGuidedTourStep.prototype.routing;
31
- }
32
- /** @enum {string} */
33
- const TourEvents = {
34
- complete: "complete",
35
- cancel: "cancel",
36
- hide: "hide",
37
- show: "show",
38
- start: "start",
39
- active: "active",
40
- inactive: "inactive",
41
- };
42
- export { TourEvents };
43
- /**
44
- * @record
45
- */
46
- export function IGuidedTourEvent() { }
47
- if (false) {
48
- /** @type {?} */
49
- IGuidedTourEvent.prototype.step;
50
- /** @type {?} */
51
- IGuidedTourEvent.prototype.previous;
52
- /** @type {?} */
53
- IGuidedTourEvent.prototype.tour;
54
- }
55
- export class CovalentGuidedTourService extends CovalentGuidedTour {
56
- /**
57
- * @param {?} _router
58
- * @param {?} _route
59
- * @param {?} _httpClient
60
- */
61
- constructor(_router, _route, _httpClient) {
62
- super();
63
- this._router = _router;
64
- this._route = _route;
65
- this._httpClient = _httpClient;
66
- this._toursMap = new Map();
67
- this._tourStepURLs = new Map();
68
- _router.events
69
- .pipe(filter((/**
70
- * @param {?} event
71
- * @return {?}
72
- */
73
- (event) => event instanceof NavigationStart && event.navigationTrigger === 'popstate')))
74
- .subscribe((/**
75
- * @param {?} event
76
- * @return {?}
77
- */
78
- (event) => {
79
- if (this.shepherdTour.isActive) {
80
- this.shepherdTour.cancel();
81
- }
82
- }));
83
- }
84
- /**
85
- * @param {?} str
86
- * @return {?}
87
- */
88
- tourEvent$(str) {
89
- return fromEvent(this.shepherdTour, str);
90
- }
91
- /**
92
- * @param {?} tourName
93
- * @param {?} tour
94
- * @return {?}
95
- */
96
- registerTour(tourName, tour) {
97
- return __awaiter(this, void 0, void 0, function* () {
98
- /** @type {?} */
99
- const guidedTour = typeof tour === 'string' ? yield this._loadTour(tour) : tour;
100
- this._toursMap.set(tourName, guidedTour);
101
- });
102
- }
103
- /**
104
- * @param {?} tourName
105
- * @return {?}
106
- */
107
- startTour(tourName) {
108
- /** @type {?} */
109
- const guidedTour = this._getTour(tourName);
110
- this.finish();
111
- if (guidedTour && guidedTour.steps && guidedTour.steps.length) {
112
- // remove steps from tour since we need to preprocess them first
113
- this.newTour(Object.assign({}, guidedTour, { steps: undefined }));
114
- /** @type {?} */
115
- const tourInstance = this.shepherdTour.addSteps(this._configureRoutesForSteps(this._prepareTour(guidedTour.steps, guidedTour.finishButtonText)));
116
- // init route transition if step URL is different then the current location.
117
- this.tourEvent$(TourEvents.show).subscribe((/**
118
- * @param {?} tourEvent
119
- * @return {?}
120
- */
121
- (tourEvent) => {
122
- /** @type {?} */
123
- const currentURL = this._router.url.split(/[?#]/)[0];
124
- const { step: { id, options }, } = tourEvent;
125
- if (this._tourStepURLs.has(id)) {
126
- /** @type {?} */
127
- const stepRoute = this._tourStepURLs.get(id);
128
- if (stepRoute !== currentURL) {
129
- this._router.navigate([stepRoute]);
130
- }
131
- }
132
- else {
133
- if (options && options.routing) {
134
- this._tourStepURLs.set(id, options.routing.route);
135
- }
136
- else {
137
- this._tourStepURLs.set(id, currentURL);
138
- }
139
- }
140
- }));
141
- this.start();
142
- return tourInstance;
143
- }
144
- else {
145
- // tslint:disable-next-line:no-console
146
- console.warn(`Tour ${tourName} does not exist. Please try another tour.`);
147
- }
148
- }
149
- // Finds the right registered tour by using queryParams
150
- // finishes any other tour and starts the new one.
151
- /**
152
- * @param {?=} queryParam
153
- * @return {?}
154
- */
155
- initializeOnQueryParams(queryParam = 'tour') {
156
- return this._route.queryParamMap.pipe(debounceTime(100), tap((/**
157
- * @param {?} params
158
- * @return {?}
159
- */
160
- (params) => {
161
- /** @type {?} */
162
- const tourParam = params.get(queryParam);
163
- if (tourParam) {
164
- this.startTour(tourParam);
165
- // get current search parameters
166
- /** @type {?} */
167
- const searchParams = new URLSearchParams(window.location.search);
168
- // delete tour queryParam
169
- searchParams.delete(queryParam);
170
- // build new URL string without it
171
- /** @type {?} */
172
- let url = window.location.protocol + '//' + window.location.host + window.location.pathname;
173
- if (searchParams.toString()) {
174
- url += '?' + searchParams.toString();
175
- }
176
- // replace state in history without triggering a navigation
177
- window.history.replaceState({ path: url }, '', url);
178
- }
179
- })));
180
- }
181
- /**
182
- * @param {?} stepId
183
- * @param {?} isDisabled
184
- * @return {?}
185
- */
186
- setNextBtnDisability(stepId, isDisabled) {
187
- if (this.shepherdTour.getById(stepId)) {
188
- /** @type {?} */
189
- const stepOptions = ((/** @type {?} */ (this.shepherdTour.getById(stepId)))).options;
190
- stepOptions.buttons.forEach((/**
191
- * @param {?} button
192
- * @return {?}
193
- */
194
- (button) => {
195
- if (button.text === 'chevron_right') {
196
- button.disabled = isDisabled;
197
- }
198
- }));
199
- this.shepherdTour.getById(stepId).updateStepOptions(stepOptions);
200
- }
201
- }
202
- /**
203
- * @private
204
- * @param {?} tourUrl
205
- * @return {?}
206
- */
207
- _loadTour(tourUrl) {
208
- return __awaiter(this, void 0, void 0, function* () {
209
- /** @type {?} */
210
- const request = this._httpClient.get(tourUrl);
211
- try {
212
- return yield request
213
- .pipe(map((/**
214
- * @param {?} resultSet
215
- * @return {?}
216
- */
217
- (resultSet) => {
218
- return JSON.parse(JSON.stringify(resultSet));
219
- })))
220
- .toPromise();
221
- }
222
- catch (_a) {
223
- return undefined;
224
- }
225
- });
226
- }
227
- /**
228
- * @private
229
- * @param {?} key
230
- * @return {?}
231
- */
232
- _getTour(key) {
233
- return this._toursMap.get(key);
234
- }
235
- /**
236
- * @private
237
- * @param {?} routedSteps
238
- * @return {?}
239
- */
240
- _configureRoutesForSteps(routedSteps) {
241
- routedSteps.forEach((/**
242
- * @param {?} step
243
- * @return {?}
244
- */
245
- (step) => {
246
- if (step.routing) {
247
- /** @type {?} */
248
- const route = step.routing.route;
249
- // if there is a beforeShowPromise, then we save it and call it after the navigation
250
- if (step.beforeShowPromise) {
251
- /** @type {?} */
252
- const beforeShowPromise = step.beforeShowPromise;
253
- step.beforeShowPromise = (/**
254
- * @return {?}
255
- */
256
- () => {
257
- return this._router.navigate([route], step.routing.extras).then((/**
258
- * @return {?}
259
- */
260
- () => {
261
- return beforeShowPromise();
262
- }));
263
- });
264
- }
265
- else {
266
- step.beforeShowPromise = (/**
267
- * @return {?}
268
- */
269
- () => this._router.navigate([route]));
270
- }
271
- }
272
- }));
273
- return routedSteps;
274
- }
275
- }
276
- CovalentGuidedTourService.decorators = [
277
- { type: Injectable }
278
- ];
279
- /** @nocollapse */
280
- CovalentGuidedTourService.ctorParameters = () => [
281
- { type: Router },
282
- { type: ActivatedRoute },
283
- { type: HttpClient }
284
- ];
285
- if (false) {
286
- /**
287
- * @type {?}
288
- * @private
289
- */
290
- CovalentGuidedTourService.prototype._toursMap;
291
- /**
292
- * @type {?}
293
- * @private
294
- */
295
- CovalentGuidedTourService.prototype._tourStepURLs;
296
- /**
297
- * @type {?}
298
- * @private
299
- */
300
- CovalentGuidedTourService.prototype._router;
301
- /**
302
- * @type {?}
303
- * @private
304
- */
305
- CovalentGuidedTourService.prototype._route;
306
- /**
307
- * @type {?}
308
- * @private
309
- */
310
- CovalentGuidedTourService.prototype._httpClient;
311
- }
312
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpZGVkLXRvdXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9zcmMvcGxhdGZvcm0vZ3VpZGVkLXRvdXIvIiwic291cmNlcyI6WyJndWlkZWQtdG91ci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxNQUFNLEVBQ04sY0FBYyxFQUdkLGVBQWUsR0FFaEIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQWMsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQTJDLE1BQU0sZUFBZSxDQUFDOzs7O0FBRTVGLGlDQUdDOzs7SUFGQyw0QkFBeUI7O0lBQ3pCLHVDQUEwQjs7Ozs7QUFHNUIscUNBS0M7OztJQUpDLGtDQUdFOzs7QUFNSixNQUFZLFVBQVU7SUFDcEIsUUFBUSxZQUFhO0lBQ3JCLE1BQU0sVUFBVztJQUNqQixJQUFJLFFBQVM7SUFDYixJQUFJLFFBQVM7SUFDYixLQUFLLFNBQVU7SUFDZixNQUFNLFVBQVc7SUFDakIsUUFBUSxZQUFhO0VBQ3RCOzs7OztBQUVELHNDQUlDOzs7SUFIQyxnQ0FBVTs7SUFDVixvQ0FBYzs7SUFDZCxnQ0FBVTs7QUFJWixNQUFNLE9BQU8seUJBQTBCLFNBQVEsa0JBQWtCOzs7Ozs7SUFHL0QsWUFBb0IsT0FBZSxFQUFVLE1BQXNCLEVBQVUsV0FBdUI7UUFDbEcsS0FBSyxFQUFFLENBQUM7UUFEVSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQVUsV0FBTSxHQUFOLE1B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LENBQUM7Ozs7OztJQUVPLHdCQUF3QixDQUFDLFdBQThCO1FBQzdELFdBQVcsQ0FBQyxPQUFPOzs7O1FBQUMsQ0FBQyxJQUFxQixFQUFFLEVBQUU7WUFDNUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFOztzQkFDVixLQUFLLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUN4QyxvRkFBb0Y7Z0JBQ3BGLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFOzswQkFDcEIsaUJBQWlCLEdBQXdCLElBQUksQ0FBQyxpQkFBaUI7b0JBQ3JFLElBQUksQ0FBQyxpQkFBaUI7OztvQkFBRyxHQUFHLEVBQUU7d0JBQzVCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUk7Ozt3QkFBQyxHQUFHLEVBQUU7NEJBQ25FLE9BQU8saUJBQWlCLEVBQUUsQ0FBQzt3QkFDN0IsQ0FBQyxFQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFBLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGlCQUFpQjs7O29CQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQSxDQUFDO2lCQUMvRDthQUNGO1FBQ0gsQ0FBQyxFQUFDLENBQUM7UUFFSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDOzs7WUF6SUYsVUFBVTs7OztZQTVDVCxNQUFNO1lBQ04sY0FBYztZQUhQLFVBQVU7Ozs7Ozs7SUFnRGpCLDhDQUE2RTs7Ozs7SUFDN0Usa0RBQXVFOzs7OztJQUMzRCw0Q0FBdUI7Ozs7O0lBQUUsMkNBQThCOzs7OztJQUFFLGdEQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICBSb3V0ZXIsXG4gIEFjdGl2YXRlZFJvdXRlLFxuICBQYXJhbU1hcCxcbiAgTmF2aWdhdGlvbkV4dHJhcyxcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBFdmVudCBhcyBOYXZpZ2F0aW9uRXZlbnQsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgU2hlcGhlcmQgZnJvbSAnc2hlcGhlcmQuanMnO1xuaW1wb3J0IHsgdGFwLCBtYXAsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ292YWxlbnRHdWlkZWRUb3VyLCBJVG91clN0ZXAsIElUb3VyT3B0aW9ucywgVG91clN0ZXBCdXR0b24gfSBmcm9tICcuL2d1aWRlZC50b3VyJztcblxuZXhwb3J0IGludGVyZmFjZSBJR3VpZGVkVG91ciBleHRlbmRzIElUb3VyT3B0aW9ucyB7XG4gIHN0ZXBzOiBJR3VpZGVkVG91clN0ZXBbXTtcbiAgZmluaXNoQnV0dG9uVGV4dD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3VpZGVkVG91clN0ZXAgZXh0ZW5kcyBJVG91clN0ZXAge1xuICByb3V0aW5nPzoge1xuICAgIHJvdXRlOiBzdHJpbmc7XG4gICAgZXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcztcbiAgfTtcbn1cblxuLyoqXG4gKiAgUm91dGVyIGVuYWJsZWQgU2hlcGhlcmQgdG91clxuICovXG5leHBvcnQgZW51bSBUb3VyRXZlbnRzIHtcbiAgY29tcGxldGUgPSAnY29tcGxldGUnLFxuICBjYW5jZWwgPSAnY2FuY2VsJyxcbiAgaGlkZSA9ICdoaWRlJyxcbiAgc2hvdyA9ICdzaG93JyxcbiAgc3RhcnQgPSAnc3RhcnQnLFxuICBhY3RpdmUgPSAnYWN0aXZlJyxcbiAgaW5hY3RpdmUgPSAnaW5hY3RpdmUnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHdWlkZWRUb3VyRXZlbnQge1xuICBzdGVwOiBhbnk7XG4gIHByZXZpb3VzOiBhbnk7XG4gIHRvdXI6IGFueTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvdmFsZW50R3VpZGVkVG91clNlcnZpY2UgZXh0ZW5kcyBDb3ZhbGVudEd1aWRlZFRvdXIge1xuICBwcml2YXRlIF90b3Vyc01hcDogTWFwPHN0cmluZywgSUd1aWRlZFRvdXI+ID0gbmV3IE1hcDxzdHJpbmcsIElHdWlkZWRUb3VyPigpO1xuICBwcml2YXRlIF90b3VyU3RlcFVSTHM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBfcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7XG4gICAgc3VwZXIoKTtcbiAgICBfcm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQ6IE5hdmlnYXRpb25FdmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgJiYgZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZScpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25FdmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zaGVwaGVyZFRvdXIuaXNBY3RpdmUpIHtcbiAgICAgICAgICB0aGlzLnNoZXBoZXJkVG91ci5jYW5jZWwoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICB0b3VyRXZlbnQkKHN0cjogVG91ckV2ZW50cyk6IE9ic2VydmFibGU8SUd1aWRlZFRvdXJFdmVudD4ge1xuICAgIHJldHVybiBmcm9tRXZlbnQodGhpcy5zaGVwaGVyZFRvdXIsIHN0cik7XG4gIH1cblxuICBhc3luYyByZWdpc3RlclRvdXIodG91ck5hbWU6IHN0cmluZywgdG91cjogSUd1aWRlZFRvdXIgfCBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBndWlkZWRUb3VyOiBJR3VpZGVkVG91ciA9IHR5cGVvZiB0b3VyID09PSAnc3RyaW5nJyA/IGF3YWl0IHRoaXMuX2xvYWRUb3VyKHRvdXIpIDogdG91cjtcbiAgICB0aGlzLl90b3Vyc01hcC5zZXQodG91ck5hbWUsIGd1aWRlZFRvdXIpO1xuICB9XG5cbiAgc3RhcnRUb3VyKHRvdXJOYW1lOiBzdHJpbmcpOiBTaGVwaGVyZC5Ub3VyIHtcbiAgICBjb25zdCBndWlkZWRUb3VyOiBJR3VpZGVkVG91ciA9IHRoaXMuX2dldFRvdXIodG91ck5hbWUpO1xuICAgIHRoaXMuZmluaXNoKCk7XG4gICAgaWYgKGd1aWRlZFRvdXIgJiYgZ3VpZGVkVG91ci5zdGVwcyAmJiBndWlkZWRUb3VyLnN0ZXBzLmxlbmd0aCkge1xuICAgICAgLy8gcmVtb3ZlIHN0ZXBzIGZyb20gdG91ciBzaW5jZSB3ZSBuZWVkIHRvIHByZXByb2Nlc3MgdGhlbSBmaXJzdFxuICAgICAgdGhpcy5uZXdUb3VyKE9iamVjdC5hc3NpZ24oe30sIGd1aWRlZFRvdXIsIHsgc3RlcHM6IHVuZGVmaW5lZCB9KSk7XG4gICAgICBjb25zdCB0b3VySW5zdGFuY2U6IFNoZXBoZXJkLlRvdXIgPSB0aGlzLnNoZXBoZXJkVG91ci5hZGRTdGVwcyhcbiAgICAgICAgdGhpcy5fY29uZmlndXJlUm91dGVzRm9yU3RlcHModGhpcy5fcHJlcGFyZVRvdXIoZ3VpZGVkVG91ci5zdGVwcywgZ3VpZGVkVG91ci5maW5pc2hCdXR0b25UZXh0KSksXG4gICAgICApO1xuICAgICAgLy8gaW5pdCByb3V0ZSB0cmFuc2l0aW9uIGlmIHN0ZXAgVVJMIGlzIGRpZmZlcmVudCB0aGVuIHRoZSBjdXJyZW50IGxvY2F0aW9uLlxuICAgICAgdGhpcy50b3VyRXZlbnQkKFRvdXJFdmVudHMuc2hvdykuc3Vic2NyaWJlKCh0b3VyRXZlbnQ6IElHdWlkZWRUb3VyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFVSTDogc3RyaW5nID0gdGhpcy5fcm91dGVyLnVybC5zcGxpdCgvWz8jXS8pWzBdO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc3RlcDogeyBpZCwgb3B0aW9ucyB9LFxuICAgICAgICB9ID0gdG91ckV2ZW50O1xuICAgICAgICBpZiAodGhpcy5fdG91clN0ZXBVUkxzLmhhcyhpZCkpIHtcbiAgICAgICAgICBjb25zdCBzdGVwUm91dGU6IHN0cmluZyA9IHRoaXMuX3RvdXJTdGVwVVJMcy5nZXQoaWQpO1xuICAgICAgICAgIGlmIChzdGVwUm91dGUgIT09IGN1cnJlbnRVUkwpIHtcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbc3RlcFJvdXRlXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucm91dGluZykge1xuICAgICAgICAgICAgdGhpcy5fdG91clN0ZXBVUkxzLnNldChpZCwgb3B0aW9ucy5yb3V0aW5nLnJvdXRlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdG91clN0ZXBVUkxzLnNldChpZCwgY3VycmVudFVSTCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3RhcnQoKTtcbiAgICAgIHJldHVybiB0b3VySW5zdGFuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oYFRvdXIgJHt0b3VyTmFtZX0gZG9lcyBub3QgZXhpc3QuIFBsZWFzZSB0cnkgYW5vdGhlciB0b3VyLmApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmRzIHRoZSByaWdodCByZWdpc3RlcmVkIHRvdXIgYnkgdXNpbmcgcXVlcnlQYXJhbXNcbiAgLy8gZmluaXNoZXMgYW55IG90aGVyIHRvdXIgYW5kIHN0YXJ0cyB0aGUgbmV3IG9uZS5cbiAgaW5pdGlhbGl6ZU9uUXVlcnlQYXJhbXMocXVlcnlQYXJhbTogc3RyaW5nID0gJ3RvdXInKTogT2JzZXJ2YWJsZTxQYXJhbU1hcD4ge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZS5xdWVyeVBhcmFtTWFwLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgIHRhcCgocGFyYW1zOiBQYXJhbU1hcCkgPT4ge1xuICAgICAgICBjb25zdCB0b3VyUGFyYW06IHN0cmluZyA9IHBhcmFtcy5nZXQocXVlcnlQYXJhbSk7XG4gICAgICAgIGlmICh0b3VyUGFyYW0pIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0VG91cih0b3VyUGFyYW0pO1xuICAgICAgICAgIC8vIGdldCBjdXJyZW50IHNlYXJjaCBwYXJhbWV0ZXJzXG4gICAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICAgIC8vIGRlbGV0ZSB0b3VyIHF1ZXJ5UGFyYW1cbiAgICAgICAgICBzZWFyY2hQYXJhbXMuZGVsZXRlKHF1ZXJ5UGFyYW0pO1xuICAgICAgICAgIC8vIGJ1aWxkIG5ldyBVUkwgc3RyaW5nIHdpdGhvdXQgaXRcbiAgICAgICAgICBsZXQgdXJsOiBzdHJpbmcgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgICAgaWYgKHNlYXJjaFBhcmFtcy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICB1cmwgKz0gJz8nICsgc2VhcmNoUGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHJlcGxhY2Ugc3RhdGUgaW4gaGlzdG9yeSB3aXRob3V0IHRyaWdnZXJpbmcgYSBuYXZpZ2F0aW9uXG4gICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHsgcGF0aDogdXJsIH0sICcnLCB1cmwpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgc2V0TmV4dEJ0bkRpc2FiaWxpdHkoc3RlcElkOiBzdHJpbmcsIGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaGVwaGVyZFRvdXIuZ2V0QnlJZChzdGVwSWQpKSB7XG4gICAgICBjb25zdCBzdGVwT3B0aW9uczogSVRvdXJTdGVwID0gKHRoaXMuc2hlcGhlcmRUb3VyLmdldEJ5SWQoc3RlcElkKSBhcyBhbnkpLm9wdGlvbnM7XG4gICAgICBzdGVwT3B0aW9ucy5idXR0b25zLmZvckVhY2goKGJ1dHRvbjogVG91clN0ZXBCdXR0b24pID0+IHtcbiAgICAgICAgaWYgKGJ1dHRvbi50ZXh0ID09PSAnY2hldnJvbl9yaWdodCcpIHtcbiAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2hlcGhlcmRUb3VyLmdldEJ5SWQoc3RlcElkKS51cGRhdGVTdGVwT3B0aW9ucyhzdGVwT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfbG9hZFRvdXIodG91clVybDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCByZXF1ZXN0OiBPYnNlcnZhYmxlPG9iamVjdD4gPSB0aGlzLl9odHRwQ2xpZW50LmdldCh0b3VyVXJsKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlcXVlc3RcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChyZXN1bHRTZXQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzdWx0U2V0KSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRUb3VyKGtleTogc3RyaW5nKTogSUd1aWRlZFRvdXIge1xuICAgIHJldHVybiB0aGlzLl90b3Vyc01hcC5nZXQoa2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ3VyZVJvdXRlc0ZvclN0ZXBzKHJvdXRlZFN0ZXBzOiBJR3VpZGVkVG91clN0ZXBbXSk6IElHdWlkZWRUb3VyU3RlcFtdIHtcbiAgICByb3V0ZWRTdGVwcy5mb3JFYWNoKChzdGVwOiBJR3VpZGVkVG91clN0ZXApID0+IHtcbiAgICAgIGlmIChzdGVwLnJvdXRpbmcpIHtcbiAgICAgICAgY29uc3Qgcm91dGU6IHN0cmluZyA9IHN0ZXAucm91dGluZy5yb3V0ZTtcbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYSBiZWZvcmVTaG93UHJvbWlzZSwgdGhlbiB3ZSBzYXZlIGl0IGFuZCBjYWxsIGl0IGFmdGVyIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgIGlmIChzdGVwLmJlZm9yZVNob3dQcm9taXNlKSB7XG4gICAgICAgICAgY29uc3QgYmVmb3JlU2hvd1Byb21pc2U6ICgpID0+IFByb21pc2U8dm9pZD4gPSBzdGVwLmJlZm9yZVNob3dQcm9taXNlO1xuICAgICAgICAgIHN0ZXAuYmVmb3JlU2hvd1Byb21pc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0sIHN0ZXAucm91dGluZy5leHRyYXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gYmVmb3JlU2hvd1Byb21pc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RlcC5iZWZvcmVTaG93UHJvbWlzZSA9ICgpID0+IHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbcm91dGVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvdXRlZFN0ZXBzO1xuICB9XG59XG4iXX0=