@wemake4u/form-player-se 1.0.45 → 1.0.47

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 (42) hide show
  1. package/esm2022/lib/builtIn/builtIn.mjs +6 -2
  2. package/esm2022/lib/builtIn/cache.json +30 -0
  3. package/esm2022/lib/builtIn/form.json +25 -0
  4. package/esm2022/lib/builtIn/function.json +28 -0
  5. package/esm2022/lib/builtIn/nav.json +37 -0
  6. package/esm2022/lib/dialog/dialog.component.mjs +5 -4
  7. package/esm2022/lib/directives/collapse.directive.mjs +22 -2
  8. package/esm2022/lib/directives/dropdown.directive.mjs +38 -8
  9. package/esm2022/lib/directives/required.directive.mjs +2 -2
  10. package/esm2022/lib/directives/tabcontrol.directive.mjs +1 -1
  11. package/esm2022/lib/directives/treelist.directive.mjs +98 -0
  12. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +96 -34
  13. package/esm2022/lib/services/builder.service.mjs +9 -1
  14. package/esm2022/lib/services/dialog.service.mjs +1 -1
  15. package/esm2022/lib/services/feel.service.mjs +25 -7
  16. package/esm2022/lib/services/form.service.mjs +17 -1
  17. package/esm2022/lib/services/function.service.mjs +26 -8
  18. package/esm2022/lib/services/programmability.service.mjs +26 -12
  19. package/esm2022/lib/services/validation.service.mjs +89 -54
  20. package/esm2022/lib/services/weak.service.mjs +4 -3
  21. package/esm2022/lib/utils/cacheControl.mjs +24 -0
  22. package/esm2022/lib/utils/deepEqual.mjs +27 -19
  23. package/esm2022/lib/utils/flatten.mjs +44 -0
  24. package/esm2022/lib/utils/observable.mjs +7 -3
  25. package/fesm2022/wemake4u-form-player-se.mjs +710 -190
  26. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  27. package/lib/directives/collapse.directive.d.ts +6 -1
  28. package/lib/directives/dropdown.directive.d.ts +5 -2
  29. package/lib/directives/treelist.directive.d.ts +23 -0
  30. package/lib/dynamic-fields/dynamic-fields.component.d.ts +18 -4
  31. package/lib/services/dialog.service.d.ts +10 -3
  32. package/lib/services/feel.service.d.ts +7 -2
  33. package/lib/services/form.service.d.ts +3 -0
  34. package/lib/services/function.service.d.ts +4 -1
  35. package/lib/services/programmability.service.d.ts +3 -2
  36. package/lib/services/validation.service.d.ts +5 -2
  37. package/lib/services/weak.service.d.ts +1 -1
  38. package/lib/utils/cacheControl.d.ts +9 -0
  39. package/lib/utils/deepEqual.d.ts +3 -1
  40. package/lib/utils/flatten.d.ts +13 -0
  41. package/lib/utils/observable.d.ts +1 -1
  42. package/package.json +3 -3
@@ -36,14 +36,19 @@ export class ValidationService {
36
36
  const currentGroup = componentValidation.formGroup;
37
37
  const required = component?.validate?.required;
38
38
  const rules = this.getRules(component);
39
- const [validators, asyncValidators, watching] = this.validateRules(currentGroup, component, required, rules);
39
+ const [requiredValidator, validators, asyncValidators, watching] = this.validateRules(currentGroup, component, required, rules);
40
40
  control.setValidators(validators);
41
41
  control.setAsyncValidators(asyncValidators);
42
+ if (requiredValidator)
43
+ this.requiredValidators.set(control, requiredValidator);
42
44
  watching(control);
43
45
  });
44
46
  }
45
- validateRequired(control) {
46
- return this.requiredValidator(control);
47
+ validateRequired(control, currentValue) {
48
+ if (!this.requiredValidators.has(control))
49
+ return null;
50
+ const validator = this.requiredValidators.get(control);
51
+ return validator({ value: currentValue });
47
52
  }
48
53
  canAddToCollection(component) {
49
54
  const required = component?.validate?.required;
@@ -63,40 +68,42 @@ export class ValidationService {
63
68
  });
64
69
  }
65
70
  validateRules(formGroup, component, required, validations) {
71
+ const skipValidation = this.resolveSkipValidation(component);
66
72
  const validators = [];
67
73
  const asyncValidators = [];
68
- const noWatching = () => { };
69
- if (required === true) {
70
- validators.push(this.getRequiredValidator(component));
71
- }
72
- if (!Array.isArray(validations)) {
73
- return [validators, asyncValidators, noWatching];
74
+ const requiredValidator = required === true
75
+ ? this.createRequiredValidator(component, formGroup, skipValidation)
76
+ : null;
77
+ if (requiredValidator) {
78
+ validators.push(requiredValidator);
74
79
  }
75
80
  const callbacks = new CallbackRegistry();
76
- validations.forEach((item) => {
77
- if (!this.programmability.isExpression(item.expression))
78
- return;
79
- const logger = (control, result) => this.logValidation(component, item, control, result);
80
- if (item.type === "validate" || item.type === "invalidate") {
81
- const predicate = item.type === "validate"
82
- ? (result) => result
83
- : (result) => !result;
84
- if (item.async) {
85
- asyncValidators.push(this.createAsyncValidator(formGroup, item, callbacks, predicate, logger));
86
- }
87
- else {
88
- validators.push(this.createValidator(formGroup, item, predicate, logger));
81
+ if (Array.isArray(validations)) {
82
+ validations.forEach((item) => {
83
+ if (!this.programmability.isExpression(item.expression))
84
+ return;
85
+ const logger = (control, result) => this.logValidation(component, item, control, result);
86
+ if (item.type === "validate" || item.type === "invalidate") {
87
+ const predicate = item.type === "validate"
88
+ ? (result) => result
89
+ : (result) => !result;
90
+ if (item.async) {
91
+ asyncValidators.push(this.createAsyncValidator(formGroup, skipValidation, item, callbacks, predicate, logger));
92
+ }
93
+ else {
94
+ validators.push(this.createValidator(formGroup, skipValidation, item, predicate, logger));
95
+ }
89
96
  }
90
- }
91
- });
97
+ });
98
+ }
92
99
  const watching = (control) => {
93
- this.watchForValidation(formGroup, control, component.key, validations, callbacks);
100
+ this.watchForValidation(formGroup, skipValidation, control, component.key, callbacks, validations);
94
101
  };
95
- return [validators, asyncValidators, watching];
102
+ return [requiredValidator, validators, asyncValidators, watching];
96
103
  }
97
- createValidator(formGroup, item, predicate, callback) {
104
+ createValidator(formGroup, skipValidation, item, predicate, callback) {
98
105
  return (control) => {
99
- if (this.suppress)
106
+ if (this.suppress || this.shouldSkipValidation(formGroup, skipValidation))
100
107
  return null;
101
108
  const result = this.programmability.evaluateUnary(formGroup, item.expression, control.value);
102
109
  if (isObservable(result)) {
@@ -108,7 +115,7 @@ export class ValidationService {
108
115
  return validate;
109
116
  };
110
117
  }
111
- createAsyncValidator(formGroup, item, callbacks, predicate, callback) {
118
+ createAsyncValidator(formGroup, skipValidation, item, callbacks, predicate, callback) {
112
119
  const unsetState = () => ({ value: Symbol('unset'), result: null });
113
120
  let state = unsetState();
114
121
  callbacks.register(() => state = unsetState());
@@ -135,7 +142,7 @@ export class ValidationService {
135
142
  return state.result;
136
143
  };
137
144
  return (control) => {
138
- if (this.suppress)
145
+ if (this.suppress || this.shouldSkipValidation(formGroup, skipValidation))
139
146
  return this.nullObserver;
140
147
  const result = computeOnce(control);
141
148
  if (!isObservable(result)) {
@@ -145,30 +152,45 @@ export class ValidationService {
145
152
  return result;
146
153
  };
147
154
  }
155
+ createRequiredValidator(component, formGroup, skipValidation) {
156
+ const fn = (this.isTrueValidator(component)
157
+ ? this.requiredTrueValidator
158
+ : this.requiredValidator).bind(this);
159
+ return (control) => {
160
+ if (this.suppress || this.shouldSkipValidation(formGroup, skipValidation))
161
+ return null;
162
+ return fn(control);
163
+ };
164
+ }
148
165
  validationErrors(formGroup, item) {
149
166
  const message = this.programmability.evaluateString(formGroup, item.message);
150
167
  const validationError = { error: true, message };
151
168
  return validationError;
152
169
  }
153
- watchForValidation(formGroup, control, key, validations, callbacks) {
170
+ watchForValidation(formGroup, skipValidation, control, key, callbacks, validations) {
171
+ const expressions = [];
172
+ if (typeof skipValidation === "string" && this.programmability.isExpression(skipValidation)) {
173
+ expressions.push("=" + this.programmability.getExpression(skipValidation));
174
+ }
154
175
  if (Array.isArray(validations)) {
155
- const expressions = validations
176
+ const ruleExpressions = validations
156
177
  .filter(item => this.programmability.isExpression(item.expression))
157
178
  .map(item => "=" + this.programmability.getExpression(item.expression));
158
- if (expressions.length === 0)
159
- return;
160
- const feelable = toFeelable(expressions);
161
- const dependencies = this.programmability.getDependencies(formGroup, feelable)
162
- .filter(dep => dep !== key);
163
- if (dependencies.length === 0)
164
- return;
165
- this.programmability.watch(formGroup, dependencies, () => {
166
- setTimeout(() => {
167
- callbacks.invoke();
168
- control.updateValueAndValidity();
169
- });
170
- });
179
+ expressions.push(...ruleExpressions);
171
180
  }
181
+ if (expressions.length === 0)
182
+ return;
183
+ const feelable = toFeelable(expressions);
184
+ const dependencies = this.programmability.getDependencies(formGroup, feelable)
185
+ .filter(dep => dep !== key);
186
+ if (dependencies.length === 0)
187
+ return;
188
+ this.programmability.watch(formGroup, dependencies, () => {
189
+ setTimeout(() => {
190
+ callbacks.invoke();
191
+ control.updateValueAndValidity();
192
+ });
193
+ });
172
194
  }
173
195
  logValidation = (component, rule, control, result) => {
174
196
  if (this.programmability.verbose) {
@@ -187,14 +209,7 @@ export class ValidationService {
187
209
  locale(component, key) {
188
210
  return localize(this.language, component, key);
189
211
  }
190
- getRequiredValidator(component) {
191
- if (this.isTrueValidator(component)) {
192
- return this.requiredTrueValidator.bind(this);
193
- }
194
- else {
195
- return this.requiredValidator.bind(this);
196
- }
197
- }
212
+ requiredValidators = new WeakMap();
198
213
  requiredValidator(control) {
199
214
  if (Validators.required(control) == null) {
200
215
  return null;
@@ -213,10 +228,30 @@ export class ValidationService {
213
228
  getRequiredMessage() {
214
229
  return this.locale(Texts, 'RequiredField');
215
230
  }
231
+ shouldSkipValidation(formGroup, skipValidation) {
232
+ if (typeof skipValidation === 'boolean') {
233
+ return skipValidation;
234
+ }
235
+ if (typeof skipValidation === 'string') {
236
+ return this.programmability.evaluateBoolean(formGroup, skipValidation) ?? false;
237
+ }
238
+ return false;
239
+ }
240
+ resolveSkipValidation(component) {
241
+ const skipValidation = component.skipValidation;
242
+ if (typeof skipValidation === 'boolean') {
243
+ return skipValidation;
244
+ }
245
+ if (typeof skipValidation === 'string'
246
+ && this.programmability.isExpression(skipValidation)) {
247
+ return skipValidation;
248
+ }
249
+ return false;
250
+ }
216
251
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationService, deps: [{ token: i1.LanguageService }, { token: i2.ProgrammabilityService }], target: i0.ɵɵFactoryTarget.Injectable });
217
252
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationService });
218
253
  }
219
254
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationService, decorators: [{
220
255
  type: Injectable
221
256
  }], ctorParameters: () => [{ type: i1.LanguageService }, { type: i2.ProgrammabilityService }] });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUErRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6SCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBR2xCO0lBQ0E7SUFGVixZQUNVLGVBQWdDLEVBQ2hDLGVBQXVDO1FBRHZDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7SUFDakQsQ0FBQztJQUVPLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFbkMsSUFBSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBZ0MsRUFBRSxPQUF3QixFQUFFLFNBQW9CLEVBQUUsU0FB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QUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQTtJQUM1RCxDQUFDO0lBRU8scUJBQXFCLENBQUMsT0FBd0I7UUFDcEQsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFBO0lBQzVELENBQUM7SUFFTyxlQUFlLENBQUMsU0FBYztRQUNwQyxPQUFPLFNBQVMsRUFBRSxJQUFJLEtBQUssVUFBVSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM3QyxDQUFDO3dHQTlRVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIGNhdGNoRXJyb3IsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdG9GZWVsYWJsZSB9IGZyb20gJy4uL3V0aWxzL2ZlZWxhYmxlJztcclxuaW1wb3J0IHsgQ2FsbGJhY2tSZWdpc3RyeSB9IGZyb20gJy4uL3V0aWxzL0NhbGxiYWNrUmVnaXN0cnknO1xyXG5cclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQHdlbWFrZTR1L2ludGVyYWN0JztcclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlJztcclxuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxpemUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvblNlcnZpY2UgIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N1cHByZXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNldCBzdXBwcmVzcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc3VwcHJlc3MgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBzdXBwcmVzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zdXBwcmVzcztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNvbGxlY3Rpb24oKTogVmFsaWRhdGlvbkNvbGxlY3Rpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8QWJzdHJhY3RDb250cm9sLCBDb21wb25lbnRDb250ZXh0PigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9Db2xsZWN0aW9uKGNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb21wb25lbnQ6IGFueSkge1xyXG4gICAgaWYgKCFjb2xsZWN0aW9uLmhhcyhjb250cm9sKSAmJiB0aGlzLmNhbkFkZFRvQ29sbGVjdGlvbihjb21wb25lbnQpKSB7IFxyXG4gICAgICBjb2xsZWN0aW9uLnNldChjb250cm9sLCB7IGNvbXBvbmVudCwgZm9ybUdyb3VwIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBDb2xsZWN0aW9uKGNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uKSB7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGNvbXBvbmVudFZhbGlkYXRpb24sIGNvbnRyb2wpID0+IHtcclxuICAgICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50VmFsaWRhdGlvbi5jb21wb25lbnQ7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGNvbXBvbmVudFZhbGlkYXRpb24uZm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCByZXF1aXJlZCA9IGNvbXBvbmVudD8udmFsaWRhdGU/LnJlcXVpcmVkO1xyXG4gICAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoY29tcG9uZW50KTtcclxuICAgICAgY29uc3QgW3ZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycywgd2F0Y2hpbmddID0gdGhpcy52YWxpZGF0ZVJ1bGVzKGN1cnJlbnRHcm91cCwgY29tcG9uZW50LCByZXF1aXJlZCwgcnVsZXMpO1xyXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcbiAgICAgIGNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XHJcbiAgICAgIHdhdGNoaW5nKGNvbnRyb2wpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVJlcXVpcmVkKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZFZhbGlkYXRvcihjb250cm9sKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW5BZGRUb0NvbGxlY3Rpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJlcXVpcmVkID0gY29tcG9uZW50Py52YWxpZGF0ZT8ucmVxdWlyZWQ7XHJcbiAgICBjb25zdCBoYXNSdWxlcyA9IEFycmF5LmlzQXJyYXkoY29tcG9uZW50Py52YWxpZGF0aW9ucykgJiYgY29tcG9uZW50LnZhbGlkYXRpb25zLmxlbmd0aCA+IDA7XHJcbiAgICByZXR1cm4gcmVxdWlyZWQgPT09IHRydWUgfHwgaGFzUnVsZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJ1bGVzKGNvbXBvbmVudDogYW55KTogVmFsaWRhdGlvblJ1bGVbXSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50LnZhbGlkYXRpb25zKSkgcmV0dXJuIFtdO1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudC52YWxpZGF0aW9ucz8ubWFwKChydWxlOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBleHByZXNzaW9uOiBydWxlLmV4cHJlc3Npb24sXHJcbiAgICAgICAgdHlwZTogcnVsZS50eXBlLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubG9jYWxlKHJ1bGUsICdtZXNzYWdlJyksXHJcbiAgICAgICAgYXN5bmM6IHJ1bGUuYXN5bmMgPT09IHRydWVcclxuICAgICAgfSBhcyBWYWxpZGF0aW9uUnVsZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVJ1bGVzKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGNvbXBvbmVudDogYW55XHJcbiAgICAsIHJlcXVpcmVkPzogYm9vbGVhblxyXG4gICAgLCB2YWxpZGF0aW9ucz86IFZhbGlkYXRpb25SdWxlW10pOiBbVmFsaWRhdG9yRm5bXSwgQXN5bmNWYWxpZGF0b3JGbltdLCAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB2b2lkXSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcblxyXG4gICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBub1dhdGNoaW5nID0gKCkgPT4geyB9O1xyXG5cclxuICAgIGlmIChyZXF1aXJlZCA9PT0gdHJ1ZSkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5nZXRSZXF1aXJlZFZhbGlkYXRvcihjb21wb25lbnQpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsaWRhdGlvbnMpKSB7XHJcbiAgICAgIHJldHVybiBbdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzLCBub1dhdGNoaW5nXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjYWxsYmFja3MgPSBuZXcgQ2FsbGJhY2tSZWdpc3RyeSgpO1xyXG5cclxuICAgIHZhbGlkYXRpb25zLmZvckVhY2goKGl0ZW06IFZhbGlkYXRpb25SdWxlKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGl0ZW0uZXhwcmVzc2lvbikpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgbG9nZ2VyOiBWYWxpZGF0aW9uQ2FsbGJhY2sgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PlxyXG4gICAgICAgIHRoaXMubG9nVmFsaWRhdGlvbihjb21wb25lbnQsIGl0ZW0sIGNvbnRyb2wsIHJlc3VsdCk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoaXRlbS50eXBlID09PSBcInZhbGlkYXRlXCIgfHwgaXRlbS50eXBlID09PSBcImludmFsaWRhdGVcIikge1xyXG4gICAgICAgIGNvbnN0IHByZWRpY2F0ZSA9IGl0ZW0udHlwZSA9PT0gXCJ2YWxpZGF0ZVwiXHJcbiAgICAgICAgICA/IChyZXN1bHQ6IGFueSkgPT4gcmVzdWx0XHJcbiAgICAgICAgICA6IChyZXN1bHQ6IGFueSkgPT4gIXJlc3VsdDtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0uYXN5bmMpIHtcclxuICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuY3JlYXRlQXN5bmNWYWxpZGF0b3IoZm9ybUdyb3VwLCBpdGVtLCBjYWxsYmFja3MsIHByZWRpY2F0ZSwgbG9nZ2VyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuY3JlYXRlVmFsaWRhdG9yKGZvcm1Hcm91cCwgaXRlbSwgcHJlZGljYXRlLCBsb2dnZXIpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHdhdGNoaW5nID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQgPT4ge1xyXG4gICAgICB0aGlzLndhdGNoRm9yVmFsaWRhdGlvbihmb3JtR3JvdXAsIGNvbnRyb2wsIGNvbXBvbmVudC5rZXksIHZhbGlkYXRpb25zLCBjYWxsYmFja3MpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gW3ZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycywgd2F0Y2hpbmddO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVWYWxpZGF0b3IoZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgaXRlbTogVmFsaWRhdGlvblJ1bGVcclxuICAgICwgcHJlZGljYXRlOiAocmVzdWx0OiBhbnkpID0+IGJvb2xlYW5cclxuICAgICwgY2FsbGJhY2s6IFZhbGlkYXRpb25DYWxsYmFjayk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zdXBwcmVzcykgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlVW5hcnkoZm9ybUdyb3VwLCBpdGVtLmV4cHJlc3Npb24sIGNvbnRyb2wudmFsdWUpXHJcbiAgICAgIGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiW1ZhbGlkYXRvcl0gVW5leHBlY3RlZCBvYnNlcnZhYmxlIHJlc3VsdCBpbiBjcmVhdGVWYWxpZGF0b3JcIixcclxuICAgICAgICAgIHsgZXhwcmVzc2lvbjogaXRlbS5leHByZXNzaW9uLCB2YWx1ZTogY29udHJvbC52YWx1ZSwgcnVsZTogaXRlbSB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB2YWxpZGF0ZSA9IHByZWRpY2F0ZShyZXN1bHQpID8gbnVsbCA6IHRoaXMudmFsaWRhdGlvbkVycm9ycyhmb3JtR3JvdXAsIGl0ZW0pO1xyXG4gICAgICBjYWxsYmFjayhjb250cm9sLCB2YWxpZGF0ZSk7XHJcbiAgICAgIHJldHVybiB2YWxpZGF0ZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFzeW5jVmFsaWRhdG9yKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGl0ZW06IFZhbGlkYXRpb25SdWxlXHJcbiAgICAsIGNhbGxiYWNrczogQ2FsbGJhY2tSZWdpc3RyeVxyXG4gICAgLCBwcmVkaWNhdGU6IChyZXN1bHQ6IGFueSkgPT4gYm9vbGVhblxyXG4gICAgLCBjYWxsYmFjazogVmFsaWRhdGlvbkNhbGxiYWNrKTogQXN5bmNWYWxpZGF0b3JGbiB7XHJcblxyXG4gICAgY29uc3QgdW5zZXRTdGF0ZSA9ICgpID0+ICh7IHZhbHVlOiBTeW1ib2woJ3Vuc2V0JyksIHJlc3VsdDogbnVsbCB9KTtcclxuXHJcbiAgICBsZXQgc3RhdGUgPSB1bnNldFN0YXRlKCk7XHJcblxyXG4gICAgY2FsbGJhY2tzLnJlZ2lzdGVyKCgpID0+IHN0YXRlID0gdW5zZXRTdGF0ZSgpKTtcclxuXHJcbiAgICBjb25zdCBnZXRSZXN1bHQgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYW55ID0+IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgaXRlbS5leHByZXNzaW9uLCB7XHJcbiAgICAgIGNhY2hlYWJsZTogZmFsc2UsXHJcbiAgICAgIGV4dGVuZENvbnRleHQ6ICgpID0+IHsgcmV0dXJuIHsgXCI/XCI6IGNvbnRyb2wudmFsdWUgfSB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjb21wdXRlT25jZSA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBhbnkgPT4ge1xyXG4gICAgICBjb25zdCB2ID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgaWYgKHN0YXRlLnZhbHVlICE9PSB2KSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGdldFJlc3VsdChjb250cm9sKTtcclxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgYXMgT2JzZXJ2YWJsZTxhbnk+KS5waXBlKFxyXG4gICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICBtYXAoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IHByZWRpY2F0ZSh2YWx1ZSkgPyBudWxsIDogdGhpcy52YWxpZGF0aW9uRXJyb3JzKGZvcm1Hcm91cCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgY2FsbGJhY2soY29udHJvbCwgdmFsaWRhdGUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiW0FzeW5jVmFsaWRhdG9yXSBFdmFsdWF0aW9uIGVycm9yXCIsIHsgZXhwcmVzc2lvbjogaXRlbS5leHByZXNzaW9uLCBlcnIgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVsbE9ic2VydmVyO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUgPSB7IHZhbHVlOiB2LCByZXN1bHQ6IHJlc3VsdCB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnN1cHByZXNzKSByZXR1cm4gdGhpcy5udWxsT2JzZXJ2ZXI7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXB1dGVPbmNlKGNvbnRyb2wpOyAgICAgIFxyXG4gICAgICBpZiAoIWlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJbQXN5bmNWYWxpZGF0b3JdIEV4cGVjdGVkIG9ic2VydmFibGUgYnV0IGdvdCBub24tb2JzZXJ2YWJsZSByZXN1bHRcIixcclxuICAgICAgICAgIHsgZXhwcmVzc2lvbjogaXRlbS5leHByZXNzaW9uLCB2YWx1ZTogY29udHJvbC52YWx1ZSwgcmVzdWx0LCBydWxlOiBpdGVtIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm51bGxPYnNlcnZlcjtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0IGFzIE9ic2VydmFibGU8YW55PjtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRpb25FcnJvcnMoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGl0ZW06IFZhbGlkYXRpb25SdWxlKSB7XHJcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVTdHJpbmcoZm9ybUdyb3VwLCBpdGVtLm1lc3NhZ2UpO1xyXG4gICAgY29uc3QgdmFsaWRhdGlvbkVycm9yID0geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZSB9O1xyXG4gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd2F0Y2hGb3JWYWxpZGF0aW9uKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbFxyXG4gICAgLCBrZXk6IHN0cmluZ1xyXG4gICAgLCB2YWxpZGF0aW9uczogVmFsaWRhdGlvblJ1bGVbXVxyXG4gICAgLCBjYWxsYmFja3M6IENhbGxiYWNrUmVnaXN0cnkpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZGF0aW9ucykpIHtcclxuICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSB2YWxpZGF0aW9uc1xyXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiB0aGlzLnByb2dyYW1tYWJpbGl0eS5pc0V4cHJlc3Npb24oaXRlbS5leHByZXNzaW9uKSlcclxuICAgICAgICAubWFwKGl0ZW0gPT4gXCI9XCIgKyB0aGlzLnByb2dyYW1tYWJpbGl0eS5nZXRFeHByZXNzaW9uKGl0ZW0uZXhwcmVzc2lvbikpO1xyXG5cclxuICAgICAgaWYgKGV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgZmVlbGFibGUgPSB0b0ZlZWxhYmxlKGV4cHJlc3Npb25zKTtcclxuXHJcbiAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldERlcGVuZGVuY2llcyhmb3JtR3JvdXAsIGZlZWxhYmxlKVxyXG4gICAgICAgIC5maWx0ZXIoZGVwID0+IGRlcCAhPT0ga2V5KTtcclxuXHJcbiAgICAgIGlmIChkZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLnByb2dyYW1tYWJpbGl0eS53YXRjaChmb3JtR3JvdXAsIGRlcGVuZGVuY2llcywgKCkgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY2FsbGJhY2tzLmludm9rZSgpO1xyXG4gICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9nVmFsaWRhdGlvbiA9IChjb21wb25lbnQ6IGFueSwgcnVsZTogVmFsaWRhdGlvblJ1bGUsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcmVzdWx0OiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCkgPT4ge1xyXG4gICAgaWYgKHRoaXMucHJvZ3JhbW1hYmlsaXR5LnZlcmJvc2UpIHtcclxuICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFwiW1ZhbGlkYXRpb25dIEZhaWxlZFwiLCB7IGNvbnRyb2wsIGNvbXBvbmVudCwgcnVsZSwgcmVzdWx0IH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiW1ZhbGlkYXRpb25dIFN1Y2Nlc3NcIiwgeyBjb250cm9sLCBjb21wb25lbnQsIHJ1bGUsIHJlc3VsdCB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBudWxsT2JzZXJ2ZXIgPSBvZihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSBnZXQgbGFuZ3VhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRMYW5ndWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbGUoY29tcG9uZW50OiBhbnksIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbGl6ZSh0aGlzLmxhbmd1YWdlLCBjb21wb25lbnQsIGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlcXVpcmVkVmFsaWRhdG9yKGNvbXBvbmVudDogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgaWYgKHRoaXMuaXNUcnVlVmFsaWRhdG9yKGNvbXBvbmVudCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVxdWlyZWRUcnVlVmFsaWRhdG9yLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVxdWlyZWRWYWxpZGF0b3IuYmluZCh0aGlzKTtcclxuICAgIH0gIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1aXJlZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAoVmFsaWRhdG9ycy5yZXF1aXJlZChjb250cm9sKSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IHRoaXMuZ2V0UmVxdWlyZWRNZXNzYWdlKCkgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWlyZWRUcnVlVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmIChWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZShjb250cm9sKSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IHRoaXMuZ2V0UmVxdWlyZWRNZXNzYWdlKCkgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1RydWVWYWxpZGF0b3IoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb21wb25lbnQ/LnR5cGUgPT09ICdjaGVja2JveCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlcXVpcmVkTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxlKFRleHRzLCAnUmVxdWlyZWRGaWVsZCcpO1xyXG4gIH1cclxufVxyXG5cclxudHlwZSBWYWxpZGF0aW9uQ2FsbGJhY2sgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PiB2b2lkO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRDb250ZXh0IHtcclxuICBjb21wb25lbnQ6IGFueTtcclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUnVsZSB7XHJcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xyXG4gIHR5cGU6IFwidmFsaWRhdGVcIiB8IFwiaW52YWxpZGF0ZVwiO1xyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBhc3luYzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXBvbmVudENvbnRleHQ+O1xyXG4iXX0=
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUErRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6SCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBR2xCO0lBQ0E7SUFGVixZQUNVLGVBQWdDLEVBQ2hDLGVBQXVDO1FBRHZDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7SUFDakQsQ0FBQztJQUVPLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFbkMsSUFBSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBZ0MsRUFBRSxPQUF3QixFQUFFLFNBQW9CLEVBQUUsU0FB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QU8sY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLE9BQU8sY0FBYyxLQUFLLFFBQVE7ZUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxPQUFPLGNBQWMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO3dHQTNUVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIGNhdGNoRXJyb3IsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdG9GZWVsYWJsZSB9IGZyb20gJy4uL3V0aWxzL2ZlZWxhYmxlJztcclxuaW1wb3J0IHsgQ2FsbGJhY2tSZWdpc3RyeSB9IGZyb20gJy4uL3V0aWxzL0NhbGxiYWNrUmVnaXN0cnknO1xyXG5cclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQHdlbWFrZTR1L2ludGVyYWN0JztcclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlJztcclxuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxpemUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvblNlcnZpY2UgIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N1cHByZXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNldCBzdXBwcmVzcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc3VwcHJlc3MgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBzdXBwcmVzcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zdXBwcmVzcztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNvbGxlY3Rpb24oKTogVmFsaWRhdGlvbkNvbGxlY3Rpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBNYXA8QWJzdHJhY3RDb250cm9sLCBDb21wb25lbnRDb250ZXh0PigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9Db2xsZWN0aW9uKGNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb21wb25lbnQ6IGFueSkge1xyXG4gICAgaWYgKCFjb2xsZWN0aW9uLmhhcyhjb250cm9sKSAmJiB0aGlzLmNhbkFkZFRvQ29sbGVjdGlvbihjb21wb25lbnQpKSB7IFxyXG4gICAgICBjb2xsZWN0aW9uLnNldChjb250cm9sLCB7IGNvbXBvbmVudCwgZm9ybUdyb3VwIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBDb2xsZWN0aW9uKGNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uKSB7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGNvbXBvbmVudFZhbGlkYXRpb24sIGNvbnRyb2wpID0+IHtcclxuICAgICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50VmFsaWRhdGlvbi5jb21wb25lbnQ7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGNvbXBvbmVudFZhbGlkYXRpb24uZm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCByZXF1aXJlZCA9IGNvbXBvbmVudD8udmFsaWRhdGU/LnJlcXVpcmVkO1xyXG4gICAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoY29tcG9uZW50KTtcclxuICAgICAgY29uc3QgW3JlcXVpcmVkVmFsaWRhdG9yLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIHdhdGNoaW5nXSA9IHRoaXMudmFsaWRhdGVSdWxlcyhjdXJyZW50R3JvdXAsIGNvbXBvbmVudCwgcmVxdWlyZWQsIHJ1bGVzKTtcclxuICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xyXG4gICAgICBjb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgICBpZiAocmVxdWlyZWRWYWxpZGF0b3IpIHRoaXMucmVxdWlyZWRWYWxpZGF0b3JzLnNldChjb250cm9sLCByZXF1aXJlZFZhbGlkYXRvcik7XHJcbiAgICAgIHdhdGNoaW5nKGNvbnRyb2wpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZVJlcXVpcmVkKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgY3VycmVudFZhbHVlOiBhbnkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMucmVxdWlyZWRWYWxpZGF0b3JzLmhhcyhjb250cm9sKSlcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB2YWxpZGF0b3IgPSB0aGlzLnJlcXVpcmVkVmFsaWRhdG9ycy5nZXQoY29udHJvbCk7XHJcbiAgICByZXR1cm4gdmFsaWRhdG9yISh7IHZhbHVlOiBjdXJyZW50VmFsdWUgfSBhcyBhbnkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW5BZGRUb0NvbGxlY3Rpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJlcXVpcmVkID0gY29tcG9uZW50Py52YWxpZGF0ZT8ucmVxdWlyZWQ7XHJcbiAgICBjb25zdCBoYXNSdWxlcyA9IEFycmF5LmlzQXJyYXkoY29tcG9uZW50Py52YWxpZGF0aW9ucykgJiYgY29tcG9uZW50LnZhbGlkYXRpb25zLmxlbmd0aCA+IDA7XHJcbiAgICByZXR1cm4gcmVxdWlyZWQgPT09IHRydWUgfHwgaGFzUnVsZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJ1bGVzKGNvbXBvbmVudDogYW55KTogVmFsaWRhdGlvblJ1bGVbXSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50LnZhbGlkYXRpb25zKSkgcmV0dXJuIFtdO1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudC52YWxpZGF0aW9ucz8ubWFwKChydWxlOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBleHByZXNzaW9uOiBydWxlLmV4cHJlc3Npb24sXHJcbiAgICAgICAgdHlwZTogcnVsZS50eXBlLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubG9jYWxlKHJ1bGUsICdtZXNzYWdlJyksXHJcbiAgICAgICAgYXN5bmM6IHJ1bGUuYXN5bmMgPT09IHRydWVcclxuICAgICAgfSBhcyBWYWxpZGF0aW9uUnVsZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVJ1bGVzKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGNvbXBvbmVudDogYW55XHJcbiAgICAsIHJlcXVpcmVkPzogYm9vbGVhblxyXG4gICAgLCB2YWxpZGF0aW9ucz86IFZhbGlkYXRpb25SdWxlW10pOiBbVmFsaWRhdG9yRm4gfCBudWxsLCBWYWxpZGF0b3JGbltdLCBBc3luY1ZhbGlkYXRvckZuW10sIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHZvaWRdIHtcclxuXHJcbiAgICBjb25zdCBza2lwVmFsaWRhdGlvbiA9IHRoaXMucmVzb2x2ZVNraXBWYWxpZGF0aW9uKGNvbXBvbmVudCk7XHJcblxyXG4gICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCByZXF1aXJlZFZhbGlkYXRvciA9IHJlcXVpcmVkID09PSB0cnVlXHJcbiAgICAgID8gdGhpcy5jcmVhdGVSZXF1aXJlZFZhbGlkYXRvcihjb21wb25lbnQsIGZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb24pXHJcbiAgICAgIDogbnVsbDtcclxuXHJcbiAgICBpZiAocmVxdWlyZWRWYWxpZGF0b3IpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKHJlcXVpcmVkVmFsaWRhdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjYWxsYmFja3MgPSBuZXcgQ2FsbGJhY2tSZWdpc3RyeSgpO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbGlkYXRpb25zKSkge1xyXG4gICAgICB2YWxpZGF0aW9ucy5mb3JFYWNoKChpdGVtOiBWYWxpZGF0aW9uUnVsZSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGl0ZW0uZXhwcmVzc2lvbikpXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGxvZ2dlcjogVmFsaWRhdGlvbkNhbGxiYWNrID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcmVzdWx0OiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCkgPT5cclxuICAgICAgICAgIHRoaXMubG9nVmFsaWRhdGlvbihjb21wb25lbnQsIGl0ZW0sIGNvbnRyb2wsIHJlc3VsdCk7XHJcblxyXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IFwidmFsaWRhdGVcIiB8fCBpdGVtLnR5cGUgPT09IFwiaW52YWxpZGF0ZVwiKSB7XHJcbiAgICAgICAgICBjb25zdCBwcmVkaWNhdGUgPSBpdGVtLnR5cGUgPT09IFwidmFsaWRhdGVcIlxyXG4gICAgICAgICAgICA/IChyZXN1bHQ6IGFueSkgPT4gcmVzdWx0XHJcbiAgICAgICAgICAgIDogKHJlc3VsdDogYW55KSA9PiAhcmVzdWx0O1xyXG5cclxuICAgICAgICAgIGlmIChpdGVtLmFzeW5jKSB7XHJcbiAgICAgICAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuY3JlYXRlQXN5bmNWYWxpZGF0b3IoZm9ybUdyb3VwLCBza2lwVmFsaWRhdGlvbiwgaXRlbSwgY2FsbGJhY2tzLCBwcmVkaWNhdGUsIGxvZ2dlcikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLmNyZWF0ZVZhbGlkYXRvcihmb3JtR3JvdXAsIHNraXBWYWxpZGF0aW9uLCBpdGVtLCBwcmVkaWNhdGUsIGxvZ2dlcikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgd2F0Y2hpbmcgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCA9PiB7XHJcbiAgICAgIHRoaXMud2F0Y2hGb3JWYWxpZGF0aW9uKGZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb24sIGNvbnRyb2wsIGNvbXBvbmVudC5rZXksIGNhbGxiYWNrcywgdmFsaWRhdGlvbnMpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gW3JlcXVpcmVkVmFsaWRhdG9yLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIHdhdGNoaW5nXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVmFsaWRhdG9yKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIHNraXBWYWxpZGF0aW9uOiBzdHJpbmcgfCBib29sZWFuXHJcbiAgICAsIGl0ZW06IFZhbGlkYXRpb25SdWxlXHJcbiAgICAsIHByZWRpY2F0ZTogKHJlc3VsdDogYW55KSA9PiBib29sZWFuXHJcbiAgICAsIGNhbGxiYWNrOiBWYWxpZGF0aW9uQ2FsbGJhY2spOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgaWYgKHRoaXMuc3VwcHJlc3MgfHwgdGhpcy5zaG91bGRTa2lwVmFsaWRhdGlvbihmb3JtR3JvdXAsIHNraXBWYWxpZGF0aW9uKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlVW5hcnkoZm9ybUdyb3VwLCBpdGVtLmV4cHJlc3Npb24sIGNvbnRyb2wudmFsdWUpXHJcbiAgICAgIGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiW1ZhbGlkYXRvcl0gVW5leHBlY3RlZCBvYnNlcnZhYmxlIHJlc3VsdCBpbiBjcmVhdGVWYWxpZGF0b3JcIixcclxuICAgICAgICAgIHsgZXhwcmVzc2lvbjogaXRlbS5leHByZXNzaW9uLCB2YWx1ZTogY29udHJvbC52YWx1ZSwgcnVsZTogaXRlbSB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB2YWxpZGF0ZSA9IHByZWRpY2F0ZShyZXN1bHQpID8gbnVsbCA6IHRoaXMudmFsaWRhdGlvbkVycm9ycyhmb3JtR3JvdXAsIGl0ZW0pO1xyXG4gICAgICBjYWxsYmFjayhjb250cm9sLCB2YWxpZGF0ZSk7XHJcbiAgICAgIHJldHVybiB2YWxpZGF0ZTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFzeW5jVmFsaWRhdG9yKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIHNraXBWYWxpZGF0aW9uOiBzdHJpbmcgfCBib29sZWFuXHJcbiAgICAsIGl0ZW06IFZhbGlkYXRpb25SdWxlXHJcbiAgICAsIGNhbGxiYWNrczogQ2FsbGJhY2tSZWdpc3RyeVxyXG4gICAgLCBwcmVkaWNhdGU6IChyZXN1bHQ6IGFueSkgPT4gYm9vbGVhblxyXG4gICAgLCBjYWxsYmFjazogVmFsaWRhdGlvbkNhbGxiYWNrKTogQXN5bmNWYWxpZGF0b3JGbiB7XHJcblxyXG4gICAgY29uc3QgdW5zZXRTdGF0ZSA9ICgpID0+ICh7IHZhbHVlOiBTeW1ib2woJ3Vuc2V0JyksIHJlc3VsdDogbnVsbCB9KTtcclxuXHJcbiAgICBsZXQgc3RhdGUgPSB1bnNldFN0YXRlKCk7XHJcblxyXG4gICAgY2FsbGJhY2tzLnJlZ2lzdGVyKCgpID0+IHN0YXRlID0gdW5zZXRTdGF0ZSgpKTtcclxuXHJcbiAgICBjb25zdCBnZXRSZXN1bHQgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYW55ID0+IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgaXRlbS5leHByZXNzaW9uLCB7XHJcbiAgICAgIGNhY2hlYWJsZTogZmFsc2UsXHJcbiAgICAgIGV4dGVuZENvbnRleHQ6ICgpID0+IHsgcmV0dXJuIHsgXCI/XCI6IGNvbnRyb2wudmFsdWUgfSB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjb21wdXRlT25jZSA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBhbnkgPT4ge1xyXG4gICAgICBjb25zdCB2ID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgaWYgKHN0YXRlLnZhbHVlICE9PSB2KSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGdldFJlc3VsdChjb250cm9sKTtcclxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgYXMgT2JzZXJ2YWJsZTxhbnk+KS5waXBlKFxyXG4gICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICBtYXAoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IHByZWRpY2F0ZSh2YWx1ZSkgPyBudWxsIDogdGhpcy52YWxpZGF0aW9uRXJyb3JzKGZvcm1Hcm91cCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgY2FsbGJhY2soY29udHJvbCwgdmFsaWRhdGUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiW0FzeW5jVmFsaWRhdG9yXSBFdmFsdWF0aW9uIGVycm9yXCIsIHsgZXhwcmVzc2lvbjogaXRlbS5leHByZXNzaW9uLCBlcnIgfSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVsbE9ic2VydmVyO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdGUgPSB7IHZhbHVlOiB2LCByZXN1bHQ6IHJlc3VsdCB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnN1cHByZXNzIHx8IHRoaXMuc2hvdWxkU2tpcFZhbGlkYXRpb24oZm9ybUdyb3VwLCBza2lwVmFsaWRhdGlvbikpIHJldHVybiB0aGlzLm51bGxPYnNlcnZlcjtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gY29tcHV0ZU9uY2UoY29udHJvbCk7ICAgICAgXHJcbiAgICAgIGlmICghaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIltBc3luY1ZhbGlkYXRvcl0gRXhwZWN0ZWQgb2JzZXJ2YWJsZSBidXQgZ290IG5vbi1vYnNlcnZhYmxlIHJlc3VsdFwiLFxyXG4gICAgICAgICAgeyBleHByZXNzaW9uOiBpdGVtLmV4cHJlc3Npb24sIHZhbHVlOiBjb250cm9sLnZhbHVlLCByZXN1bHQsIHJ1bGU6IGl0ZW0gfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubnVsbE9ic2VydmVyO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQgYXMgT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlUmVxdWlyZWRWYWxpZGF0b3IoY29tcG9uZW50OiBhbnlcclxuICAgICwgZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgc2tpcFZhbGlkYXRpb246IHN0cmluZyB8IGJvb2xlYW4pOiBWYWxpZGF0b3JGblxyXG4gIHtcclxuICAgIGNvbnN0IGZuID0gKHRoaXMuaXNUcnVlVmFsaWRhdG9yKGNvbXBvbmVudClcclxuICAgICAgPyB0aGlzLnJlcXVpcmVkVHJ1ZVZhbGlkYXRvclxyXG4gICAgICA6IHRoaXMucmVxdWlyZWRWYWxpZGF0b3IpLmJpbmQodGhpcyk7XHJcblxyXG4gICAgcmV0dXJuIChjb250cm9sKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnN1cHByZXNzIHx8IHRoaXMuc2hvdWxkU2tpcFZhbGlkYXRpb24oZm9ybUdyb3VwLCBza2lwVmFsaWRhdGlvbikpIHJldHVybiBudWxsO1xyXG4gICAgICByZXR1cm4gZm4oY29udHJvbCk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0aW9uRXJyb3JzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBpdGVtOiBWYWxpZGF0aW9uUnVsZSkge1xyXG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlU3RyaW5nKGZvcm1Hcm91cCwgaXRlbS5tZXNzYWdlKTtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHsgZXJyb3I6IHRydWUsIG1lc3NhZ2UgfTtcclxuICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhdGNoRm9yVmFsaWRhdGlvbihmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBza2lwVmFsaWRhdGlvbjogYm9vbGVhbiB8IHN0cmluZ1xyXG4gICAgLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICwga2V5OiBzdHJpbmdcclxuICAgICwgY2FsbGJhY2tzOiBDYWxsYmFja1JlZ2lzdHJ5XHJcbiAgICAsIHZhbGlkYXRpb25zPzogVmFsaWRhdGlvblJ1bGVbXSk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGV4cHJlc3Npb25zOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGlmICh0eXBlb2Ygc2tpcFZhbGlkYXRpb24gPT09IFwic3RyaW5nXCIgJiYgdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKHNraXBWYWxpZGF0aW9uKSkge1xyXG4gICAgICBleHByZXNzaW9ucy5wdXNoKFwiPVwiICsgdGhpcy5wcm9ncmFtbWFiaWxpdHkuZ2V0RXhwcmVzc2lvbihza2lwVmFsaWRhdGlvbikpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZGF0aW9ucykpIHtcclxuICAgICAgY29uc3QgcnVsZUV4cHJlc3Npb25zID0gdmFsaWRhdGlvbnNcclxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGl0ZW0uZXhwcmVzc2lvbikpXHJcbiAgICAgICAgLm1hcChpdGVtID0+IFwiPVwiICsgdGhpcy5wcm9ncmFtbWFiaWxpdHkuZ2V0RXhwcmVzc2lvbihpdGVtLmV4cHJlc3Npb24pKTtcclxuICAgICAgZXhwcmVzc2lvbnMucHVzaCguLi5ydWxlRXhwcmVzc2lvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBmZWVsYWJsZSA9IHRvRmVlbGFibGUoZXhwcmVzc2lvbnMpO1xyXG5cclxuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldERlcGVuZGVuY2llcyhmb3JtR3JvdXAsIGZlZWxhYmxlKVxyXG4gICAgICAuZmlsdGVyKGRlcCA9PiBkZXAgIT09IGtleSk7XHJcblxyXG4gICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnByb2dyYW1tYWJpbGl0eS53YXRjaChmb3JtR3JvdXAsIGRlcGVuZGVuY2llcywgKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjYWxsYmFja3MuaW52b2tlKCk7XHJcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2dWYWxpZGF0aW9uID0gKGNvbXBvbmVudDogYW55LCBydWxlOiBWYWxpZGF0aW9uUnVsZSwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PiB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmFtbWFiaWxpdHkudmVyYm9zZSkge1xyXG4gICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJbVmFsaWRhdGlvbl0gRmFpbGVkXCIsIHsgY29udHJvbCwgY29tcG9uZW50LCBydWxlLCByZXN1bHQgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJbVmFsaWRhdGlvbl0gU3VjY2Vzc1wiLCB7IGNvbnRyb2wsIGNvbXBvbmVudCwgcnVsZSwgcmVzdWx0IH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IG51bGxPYnNlcnZlciA9IG9mKG51bGwpO1xyXG5cclxuICBwcml2YXRlIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvY2FsZShjb21wb25lbnQ6IGFueSwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsaXplKHRoaXMubGFuZ3VhZ2UsIGNvbXBvbmVudCwga2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWlyZWRWYWxpZGF0b3JzID0gbmV3IFdlYWtNYXA8QWJzdHJhY3RDb250cm9sLCBWYWxpZGF0b3JGbj4oKTtcclxuXHJcbiAgcHJpdmF0ZSByZXF1aXJlZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAoVmFsaWRhdG9ycy5yZXF1aXJlZChjb250cm9sKSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IHRoaXMuZ2V0UmVxdWlyZWRNZXNzYWdlKCkgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWlyZWRUcnVlVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmIChWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZShjb250cm9sKSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IHRoaXMuZ2V0UmVxdWlyZWRNZXNzYWdlKCkgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1RydWVWYWxpZGF0b3IoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb21wb25lbnQ/LnR5cGUgPT09ICdjaGVja2JveCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlcXVpcmVkTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxlKFRleHRzLCAnUmVxdWlyZWRGaWVsZCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG91bGRTa2lwVmFsaWRhdGlvbihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb246IHN0cmluZyB8IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2Ygc2tpcFZhbGlkYXRpb24gPT09ICdib29sZWFuJykge1xyXG4gICAgICByZXR1cm4gc2tpcFZhbGlkYXRpb247XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHNraXBWYWxpZGF0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cCwgc2tpcFZhbGlkYXRpb24pID8/IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlU2tpcFZhbGlkYXRpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHwgc3RyaW5nIHtcclxuICAgIGNvbnN0IHNraXBWYWxpZGF0aW9uID0gY29tcG9uZW50LnNraXBWYWxpZGF0aW9uO1xyXG4gICAgaWYgKHR5cGVvZiBza2lwVmFsaWRhdGlvbiA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiBza2lwVmFsaWRhdGlvbjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygc2tpcFZhbGlkYXRpb24gPT09ICdzdHJpbmcnXHJcbiAgICAgICYmIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihza2lwVmFsaWRhdGlvbikpIHtcclxuICAgICAgcmV0dXJuIHNraXBWYWxpZGF0aW9uO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxudHlwZSBWYWxpZGF0aW9uQ2FsbGJhY2sgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PiB2b2lkO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRDb250ZXh0IHtcclxuICBjb21wb25lbnQ6IGFueTtcclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUnVsZSB7XHJcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xyXG4gIHR5cGU6IFwidmFsaWRhdGVcIiB8IFwiaW52YWxpZGF0ZVwiO1xyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBhc3luYzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXBvbmVudENvbnRleHQ+O1xyXG4iXX0=
@@ -12,7 +12,7 @@ export class WeakService {
12
12
  }
13
13
  return false;
14
14
  }
15
- call(source, key, func, reusable = null, store = null) {
15
+ call(source, key, func, reusable = null, store = null, cacheable = null) {
16
16
  if (!this.cache.has(source)) {
17
17
  this.cache.set(source, {});
18
18
  }
@@ -30,7 +30,8 @@ export class WeakService {
30
30
  if (observable) {
31
31
  result = result.pipe(take(1), shareReplay(1));
32
32
  }
33
- cachedObject[key] = result;
33
+ if (cacheable == null || cacheable(result))
34
+ cachedObject[key] = result;
34
35
  return result;
35
36
  }
36
37
  invalidate(source, key) {
@@ -53,4 +54,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
53
54
  providedIn: 'root'
54
55
  }]
55
56
  }], ctorParameters: () => [] });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vhay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvd2Vhay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUs3QyxNQUFNLE9BQU8sV0FBVztJQUV0QixnQkFBZ0IsQ0FBQztJQUVULEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBK0IsQ0FBQztJQUUzRCxNQUFNLENBQUMsTUFBYyxFQUFFLEdBQVc7UUFDaEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBSSxNQUFjLEVBQUUsR0FBVyxFQUFFLElBQWEsRUFDOUMsV0FBMkMsSUFBSSxFQUMvQyxRQUFvQyxJQUFJO1FBRTFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFFLENBQUM7UUFFN0MsSUFBSSxHQUFHLElBQUksWUFBWTtlQUNsQixDQUFDLFFBQVEsSUFBSSxJQUFJO21CQUNmLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNuQyxDQUFDO1lBQ0MsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksTUFBTSxHQUFRLElBQUksRUFBRSxDQUFDO1FBRXpCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ2xCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztRQUNKLENBQUM7UUFFRCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBRTNCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBYyxFQUFFLEdBQVc7UUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBRSxDQUFDO1lBQzdDLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWM7UUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO3dHQTlEVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2Vha1NlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBwcml2YXRlIGNhY2hlID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xyXG5cclxuICBleGlzdHMoc291cmNlOiBvYmplY3QsIGtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5jYWNoZS5oYXMoc291cmNlKSkge1xyXG4gICAgICBjb25zdCBjYWNoZWRPYmplY3QgPSB0aGlzLmNhY2hlLmdldChzb3VyY2UpITtcclxuICAgICAgcmV0dXJuIChrZXkgaW4gY2FjaGVkT2JqZWN0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNhbGw8VD4oc291cmNlOiBvYmplY3QsIGtleTogc3RyaW5nLCBmdW5jOiAoKSA9PiBUXHJcbiAgICAsIHJldXNhYmxlOiAoKHZhbHVlOiBUKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsXHJcbiAgICAsIHN0b3JlOiAoKHZhbHVlOiBUKSA9PiBhbnkpIHwgbnVsbCA9IG51bGxcclxuICAgICk6IFQge1xyXG4gICAgaWYgKCF0aGlzLmNhY2hlLmhhcyhzb3VyY2UpKSB7XHJcbiAgICAgIHRoaXMuY2FjaGUuc2V0KHNvdXJjZSwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNhY2hlZE9iamVjdCA9IHRoaXMuY2FjaGUuZ2V0KHNvdXJjZSkhO1xyXG5cclxuICAgIGlmIChrZXkgaW4gY2FjaGVkT2JqZWN0XHJcbiAgICAgICYmIChyZXVzYWJsZSA9PSBudWxsXHJcbiAgICAgICAgfHwgcmV1c2FibGUoY2FjaGVkT2JqZWN0W2tleV0pKSlcclxuICAgIHtcclxuICAgICAgcmV0dXJuIGNhY2hlZE9iamVjdFtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHQ6IGFueSA9IGZ1bmMoKTtcclxuXHJcbiAgICBpZiAoc3RvcmUgIT0gbnVsbCkge1xyXG4gICAgICByZXN1bHQgPSBzdG9yZShyZXN1bHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9ic2VydmFibGUgPSBpc09ic2VydmFibGUocmVzdWx0KTtcclxuXHJcbiAgICBpZiAob2JzZXJ2YWJsZSkge1xyXG4gICAgICByZXN1bHQgPSByZXN1bHQucGlwZShcclxuICAgICAgICB0YWtlKDEpLCAgICAgICAgXHJcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjYWNoZWRPYmplY3Rba2V5XSA9IHJlc3VsdDtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaW52YWxpZGF0ZShzb3VyY2U6IG9iamVjdCwga2V5OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhzb3VyY2UpKSB7XHJcbiAgICAgIGNvbnN0IGNhY2hlZE9iamVjdCA9IHRoaXMuY2FjaGUuZ2V0KHNvdXJjZSkhO1xyXG4gICAgICBkZWxldGUgY2FjaGVkT2JqZWN0W2tleV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnZhbGlkYXRlQWxsKHNvdXJjZTogb2JqZWN0KSB7XHJcbiAgICBpZiAodGhpcy5jYWNoZS5oYXMoc291cmNlKSkge1xyXG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShzb3VyY2UpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vhay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvd2Vhay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUs3QyxNQUFNLE9BQU8sV0FBVztJQUV0QixnQkFBZ0IsQ0FBQztJQUVULEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBK0IsQ0FBQztJQUUzRCxNQUFNLENBQUMsTUFBYyxFQUFFLEdBQVc7UUFDaEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBRSxDQUFDO1lBQzdDLE9BQU8sQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBSSxNQUFjLEVBQUUsR0FBVyxFQUFFLElBQWEsRUFDOUMsV0FBMkMsSUFBSSxFQUMvQyxRQUFvQyxJQUFJLEVBQ3hDLFlBQTRDLElBQUk7UUFFbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUUsQ0FBQztRQUU3QyxJQUFJLEdBQUcsSUFBSSxZQUFZO2VBQ2xCLENBQUMsUUFBUSxJQUFJLElBQUk7bUJBQ2YsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ25DLENBQUM7WUFDQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxNQUFNLEdBQVEsSUFBSSxFQUFFLENBQUM7UUFFekIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3hDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7UUFFN0IsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFjLEVBQUUsR0FBVztRQUNwQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFFLENBQUM7WUFDN0MsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsTUFBYztRQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7d0dBaEVVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXZWFrU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIHByaXZhdGUgY2FjaGUgPSBuZXcgV2Vha01hcDxvYmplY3QsIFJlY29yZDxzdHJpbmcsIGFueT4+KCk7XHJcblxyXG4gIGV4aXN0cyhzb3VyY2U6IG9iamVjdCwga2V5OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhzb3VyY2UpKSB7XHJcbiAgICAgIGNvbnN0IGNhY2hlZE9iamVjdCA9IHRoaXMuY2FjaGUuZ2V0KHNvdXJjZSkhO1xyXG4gICAgICByZXR1cm4gKGtleSBpbiBjYWNoZWRPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2FsbDxUPihzb3VyY2U6IG9iamVjdCwga2V5OiBzdHJpbmcsIGZ1bmM6ICgpID0+IFRcclxuICAgICwgcmV1c2FibGU6ICgodmFsdWU6IFQpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGxcclxuICAgICwgc3RvcmU6ICgodmFsdWU6IFQpID0+IGFueSkgfCBudWxsID0gbnVsbFxyXG4gICAgLCBjYWNoZWFibGU6ICgodmFsdWU6IFQpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGxcclxuICAgICk6IFQge1xyXG4gICAgaWYgKCF0aGlzLmNhY2hlLmhhcyhzb3VyY2UpKSB7XHJcbiAgICAgIHRoaXMuY2FjaGUuc2V0KHNvdXJjZSwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNhY2hlZE9iamVjdCA9IHRoaXMuY2FjaGUuZ2V0KHNvdXJjZSkhO1xyXG5cclxuICAgIGlmIChrZXkgaW4gY2FjaGVkT2JqZWN0XHJcbiAgICAgICYmIChyZXVzYWJsZSA9PSBudWxsXHJcbiAgICAgICAgfHwgcmV1c2FibGUoY2FjaGVkT2JqZWN0W2tleV0pKSlcclxuICAgIHtcclxuICAgICAgcmV0dXJuIGNhY2hlZE9iamVjdFtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXN1bHQ6IGFueSA9IGZ1bmMoKTtcclxuXHJcbiAgICBpZiAoc3RvcmUgIT0gbnVsbCkge1xyXG4gICAgICByZXN1bHQgPSBzdG9yZShyZXN1bHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9ic2VydmFibGUgPSBpc09ic2VydmFibGUocmVzdWx0KTtcclxuXHJcbiAgICBpZiAob2JzZXJ2YWJsZSkge1xyXG4gICAgICByZXN1bHQgPSByZXN1bHQucGlwZShcclxuICAgICAgICB0YWtlKDEpLCAgICAgICAgXHJcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2FjaGVhYmxlID09IG51bGwgfHwgY2FjaGVhYmxlKHJlc3VsdCkpXHJcbiAgICAgIGNhY2hlZE9iamVjdFtrZXldID0gcmVzdWx0O1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBpbnZhbGlkYXRlKHNvdXJjZTogb2JqZWN0LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuY2FjaGUuaGFzKHNvdXJjZSkpIHtcclxuICAgICAgY29uc3QgY2FjaGVkT2JqZWN0ID0gdGhpcy5jYWNoZS5nZXQoc291cmNlKSE7XHJcbiAgICAgIGRlbGV0ZSBjYWNoZWRPYmplY3Rba2V5XTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGludmFsaWRhdGVBbGwoc291cmNlOiBvYmplY3QpIHtcclxuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhzb3VyY2UpKSB7XHJcbiAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKHNvdXJjZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,24 @@
1
+ import { bindFunction } from '../utils/proxy';
2
+ export class CacheControl {
3
+ _volatile = false;
4
+ _ttl;
5
+ get isVolatile() {
6
+ return this._volatile;
7
+ }
8
+ get ttl() {
9
+ return this._ttl;
10
+ }
11
+ volatile(value) {
12
+ this._volatile = true;
13
+ return value;
14
+ }
15
+ cacheFor(value, ttl) {
16
+ this._ttl = ttl;
17
+ return value;
18
+ }
19
+ configure(context) {
20
+ context["volatile"] = bindFunction(this.volatile, this);
21
+ context["cacheFor"] = bindFunction(this.cacheFor, this);
22
+ }
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVDb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvdXRpbHMvY2FjaGVDb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxNQUFNLE9BQU8sWUFBWTtJQUVmLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsSUFBSSxDQUFVO0lBRXRCLElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRU0sUUFBUSxDQUFJLEtBQVE7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sUUFBUSxDQUFJLEtBQVEsRUFBRSxHQUFXO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLFNBQVMsQ0FBQyxPQUE0QjtRQUMzQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJpbmRGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzL3Byb3h5JztcclxuXHJcbmV4cG9ydCBjbGFzcyBDYWNoZUNvbnRyb2wge1xyXG5cclxuICBwcml2YXRlIF92b2xhdGlsZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3R0bD86IG51bWJlcjtcclxuXHJcbiAgcHVibGljIGdldCBpc1ZvbGF0aWxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZvbGF0aWxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0dGwoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl90dGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdm9sYXRpbGU8VD4odmFsdWU6IFQpOiBUIHtcclxuICAgIHRoaXMuX3ZvbGF0aWxlID0gdHJ1ZTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWNoZUZvcjxUPih2YWx1ZTogVCwgdHRsOiBudW1iZXIpOiBUIHtcclxuICAgIHRoaXMuX3R0bCA9IHR0bDtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb25maWd1cmUoY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xyXG4gICAgY29udGV4dFtcInZvbGF0aWxlXCJdID0gYmluZEZ1bmN0aW9uKHRoaXMudm9sYXRpbGUsIHRoaXMpO1xyXG4gICAgY29udGV4dFtcImNhY2hlRm9yXCJdID0gYmluZEZ1bmN0aW9uKHRoaXMuY2FjaGVGb3IsIHRoaXMpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,4 +1,8 @@
1
- export function deepEqual(a, b, visited = new WeakMap()) {
1
+ export function deepEqual(a, b, options, visited) {
2
+ // Lazy init
3
+ if (options?.handleCircular && !visited) {
4
+ visited = new WeakMap();
5
+ }
2
6
  // Same reference or same primitive value
3
7
  if (a === b)
4
8
  return true;
@@ -8,39 +12,43 @@ export function deepEqual(a, b, visited = new WeakMap()) {
8
12
  // Different types
9
13
  if (typeof a !== typeof b)
10
14
  return false;
11
- // Date comparison
12
- if (a instanceof Date && b instanceof Date) {
13
- return a.getTime() === b.getTime();
14
- }
15
15
  // Non-object values (number, string, boolean, symbol)
16
- if (typeof a !== 'object') {
16
+ if (typeof a !== 'object')
17
17
  return Object.is(a, b);
18
- }
19
18
  // Circular reference handling
20
- if (visited.get(a) === b)
21
- return true;
22
- visited.set(a, b);
19
+ if (visited) {
20
+ if (visited.get(a) === b)
21
+ return true;
22
+ visited.set(a, b);
23
+ }
24
+ // Different constructors → different types
25
+ if (a.constructor !== b.constructor)
26
+ return false;
23
27
  // Array comparison (order matters)
24
28
  if (Array.isArray(a)) {
25
- if (!Array.isArray(b) || a.length !== b.length)
29
+ if (a.length !== b.length)
26
30
  return false;
27
31
  for (let i = 0; i < a.length; i++) {
28
- if (!deepEqual(a[i], b[i], visited))
32
+ if (!deepEqual(a[i], b[i], options, visited))
29
33
  return false;
30
34
  }
31
35
  return true;
32
36
  }
37
+ // Date comparison
38
+ if (a instanceof Date) {
39
+ return a.getTime() === b.getTime();
40
+ }
33
41
  // Object comparison (property order does NOT matter)
34
- const keysA = Object.keys(a);
35
- const keysB = Object.keys(b);
36
- if (keysA.length !== keysB.length)
42
+ const keys = Object.keys(a);
43
+ if (keys.length !== Object.keys(b).length)
37
44
  return false;
38
- for (const key of keysA) {
39
- if (!Object.prototype.hasOwnProperty.call(b, key))
45
+ for (let i = 0; i < keys.length; i++) {
46
+ const key = keys[i];
47
+ if (b[key] === undefined && !(key in b))
40
48
  return false;
41
- if (!deepEqual(a[key], b[key], visited))
49
+ if (!deepEqual(a[key], b[key], options, visited))
42
50
  return false;
43
51
  }
44
52
  return true;
45
53
  }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcEVxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvdXRpbHMvZGVlcEVxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUU7SUFDL0QseUNBQXlDO0lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV6QiwwQkFBMEI7SUFDMUIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJO1FBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNDLGtCQUFrQjtJQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXhDLGtCQUFrQjtJQUNsQixJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsOEJBQThCO0lBQzlCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbEIsbUNBQW1DO0lBQ25DLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUU3RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFaEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBkZWVwRXF1YWwoYTogYW55LCBiOiBhbnksIHZpc2l0ZWQgPSBuZXcgV2Vha01hcCgpKSB7XHJcbiAgLy8gU2FtZSByZWZlcmVuY2Ugb3Igc2FtZSBwcmltaXRpdmUgdmFsdWVcclxuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XHJcblxyXG4gIC8vIEhhbmRsZSBudWxsIC8gdW5kZWZpbmVkXHJcbiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBhID09PSBiO1xyXG5cclxuICAvLyBEaWZmZXJlbnQgdHlwZXNcclxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIC8vIERhdGUgY29tcGFyaXNvblxyXG4gIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcclxuICB9XHJcblxyXG4gIC8vIE5vbi1vYmplY3QgdmFsdWVzIChudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgc3ltYm9sKVxyXG4gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcpIHtcclxuICAgIHJldHVybiBPYmplY3QuaXMoYSwgYik7XHJcbiAgfVxyXG5cclxuICAvLyBDaXJjdWxhciByZWZlcmVuY2UgaGFuZGxpbmdcclxuICBpZiAodmlzaXRlZC5nZXQoYSkgPT09IGIpIHJldHVybiB0cnVlO1xyXG4gIHZpc2l0ZWQuc2V0KGEsIGIpO1xyXG5cclxuICAvLyBBcnJheSBjb21wYXJpc29uIChvcmRlciBtYXR0ZXJzKVxyXG4gIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghZGVlcEVxdWFsKGFbaV0sIGJbaV0sIHZpc2l0ZWQpKSByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIE9iamVjdCBjb21wYXJpc29uIChwcm9wZXJ0eSBvcmRlciBkb2VzIE5PVCBtYXR0ZXIpXHJcbiAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcclxuICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xyXG5cclxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcclxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIGtleSkpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCB2aXNpdGVkKSkgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcEVxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvdXRpbHMvZGVlcEVxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFDcEMsT0FBc0MsRUFDdEMsT0FBMkI7SUFFN0IsWUFBWTtJQUNaLElBQUksT0FBTyxFQUFFLGNBQWMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXpCLDBCQUEwQjtJQUMxQixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUk7UUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0Msa0JBQWtCO0lBQ2xCLElBQUksT0FBTyxDQUFDLEtBQUssT0FBTyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFeEMsc0RBQXNEO0lBQ3RELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtRQUFFLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbEQsOEJBQThCO0lBQzlCLElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCwyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxXQUFXO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFbEQsbUNBQW1DO0lBQ25DLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXhDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV4RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZGVlcEVxdWFsKGE6IGFueSwgYjogYW55XHJcbiAgLCBvcHRpb25zPzogeyBoYW5kbGVDaXJjdWxhcj86IGJvb2xlYW4gfVxyXG4gICwgdmlzaXRlZD86IFdlYWtNYXA8YW55LCBhbnk+KTogYm9vbGVhblxyXG57XHJcbiAgLy8gTGF6eSBpbml0XHJcbiAgaWYgKG9wdGlvbnM/LmhhbmRsZUNpcmN1bGFyICYmICF2aXNpdGVkKSB7XHJcbiAgICB2aXNpdGVkID0gbmV3IFdlYWtNYXAoKTtcclxuICB9XHJcblxyXG4gIC8vIFNhbWUgcmVmZXJlbmNlIG9yIHNhbWUgcHJpbWl0aXZlIHZhbHVlXHJcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xyXG5cclxuICAvLyBIYW5kbGUgbnVsbCAvIHVuZGVmaW5lZFxyXG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gYSA9PT0gYjtcclxuXHJcbiAgLy8gRGlmZmVyZW50IHR5cGVzXHJcbiAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAvLyBOb24tb2JqZWN0IHZhbHVlcyAobnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIHN5bWJvbClcclxuICBpZiAodHlwZW9mIGEgIT09ICdvYmplY3QnKSByZXR1cm4gT2JqZWN0LmlzKGEsIGIpO1xyXG5cclxuICAvLyBDaXJjdWxhciByZWZlcmVuY2UgaGFuZGxpbmdcclxuICBpZiAodmlzaXRlZCkge1xyXG4gICAgaWYgKHZpc2l0ZWQuZ2V0KGEpID09PSBiKSByZXR1cm4gdHJ1ZTtcclxuICAgIHZpc2l0ZWQuc2V0KGEsIGIpO1xyXG4gIH1cclxuXHJcbiAgLy8gRGlmZmVyZW50IGNvbnN0cnVjdG9ycyDihpIgZGlmZmVyZW50IHR5cGVzXHJcbiAgaWYgKGEuY29uc3RydWN0b3IgIT09IGIuY29uc3RydWN0b3IpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgLy8gQXJyYXkgY29tcGFyaXNvbiAob3JkZXIgbWF0dGVycylcclxuICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xyXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoIWRlZXBFcXVhbChhW2ldLCBiW2ldLCBvcHRpb25zLCB2aXNpdGVkKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBEYXRlIGNvbXBhcmlzb25cclxuICBpZiAoYSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKCk7XHJcbiAgfVxyXG5cclxuICAvLyBPYmplY3QgY29tcGFyaXNvbiAocHJvcGVydHkgb3JkZXIgZG9lcyBOT1QgbWF0dGVyKVxyXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTtcclxuICBpZiAoa2V5cy5sZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XHJcbiAgICBpZiAoYltrZXldID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gYikpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBvcHRpb25zLCB2aXNpdGVkKSkgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuIl19
@@ -0,0 +1,44 @@
1
+ export function flattenTree(nodes, options) {
2
+ if (nodes == null) {
3
+ return [];
4
+ }
5
+ if (!Array.isArray(nodes)) {
6
+ console.warn('Expected an array but received:', nodes);
7
+ return [];
8
+ }
9
+ const result = [];
10
+ let idCounter = 1;
11
+ const getChildren = (node) => {
12
+ const c = options?.children;
13
+ if (!c)
14
+ return [];
15
+ if (typeof c === 'function') {
16
+ return c(node) ?? [];
17
+ }
18
+ const children = node[c];
19
+ return Array.isArray(children) ? children : [];
20
+ };
21
+ function visit(node, parentId, level) {
22
+ const currentId = idCounter++;
23
+ const children = getChildren(node);
24
+ const hasChildren = children.length > 0;
25
+ const flatNode = {
26
+ id: currentId,
27
+ parentId,
28
+ level,
29
+ hasChildren,
30
+ expanded: false,
31
+ data: node
32
+ };
33
+ result.push(flatNode);
34
+ options?.onCreate?.(flatNode);
35
+ for (const child of children) {
36
+ visit(child, currentId, level + 1);
37
+ }
38
+ }
39
+ for (const root of nodes) {
40
+ visit(root, null, 0);
41
+ }
42
+ return result;
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3V0aWxzL2ZsYXR0ZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxVQUFVLFdBQVcsQ0FDdkIsS0FBYyxFQUNkLE9BR0M7SUFHRCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNoQixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkQsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQWtCLEVBQUUsQ0FBQztJQUNqQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFbEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFPLEVBQU8sRUFBRTtRQUNqQyxNQUFNLENBQUMsR0FBRyxPQUFPLEVBQUUsUUFBUSxDQUFDO1FBRTVCLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFbEIsSUFBSSxPQUFPLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFJLElBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25ELENBQUMsQ0FBQztJQUVGLFNBQVMsS0FBSyxDQUFDLElBQU8sRUFBRSxRQUF1QixFQUFFLEtBQWE7UUFDMUQsTUFBTSxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFFOUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRXhDLE1BQU0sUUFBUSxHQUFnQjtZQUMxQixFQUFFLEVBQUUsU0FBUztZQUNiLFFBQVE7WUFDUixLQUFLO1lBQ0wsV0FBVztZQUNYLFFBQVEsRUFBRSxLQUFLO1lBQ2YsSUFBSSxFQUFFLElBQUk7U0FDYixDQUFDO1FBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0QixPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUIsS0FBSyxNQUFNLEtBQUssSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQVksRUFBRSxDQUFDO1FBQzlCLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGbGF0Tm9kZTxUID0gYW55PiB7XHJcbiAgICBpZDogbnVtYmVyO1xyXG4gICAgcGFyZW50SWQ6IG51bWJlciB8IG51bGw7XHJcbiAgICBsZXZlbDogbnVtYmVyO1xyXG4gICAgaGFzQ2hpbGRyZW46IGJvb2xlYW47XHJcbiAgICBleHBhbmRlZDogYm9vbGVhbjtcclxuICAgIGRhdGE6IFQ7XHJcbiAgICBtZXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5UcmVlPFQ+KFxyXG4gICAgbm9kZXM6IHVua25vd24sXHJcbiAgICBvcHRpb25zPzoge1xyXG4gICAgICAgIGNoaWxkcmVuPzoga2V5b2YgVCB8ICgobm9kZTogVCkgPT4gVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgb25DcmVhdGU/OiAoZmxhdE5vZGU6IEZsYXROb2RlPFQ+KSA9PiB2b2lkO1xyXG4gICAgfVxyXG4pOiBGbGF0Tm9kZTxUPltdIHtcclxuXHJcbiAgICBpZiAobm9kZXMgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobm9kZXMpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdFeHBlY3RlZCBhbiBhcnJheSBidXQgcmVjZWl2ZWQ6Jywgbm9kZXMpO1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHQ6IEZsYXROb2RlPFQ+W10gPSBbXTtcclxuICAgIGxldCBpZENvdW50ZXIgPSAxO1xyXG5cclxuICAgIGNvbnN0IGdldENoaWxkcmVuID0gKG5vZGU6IFQpOiBUW10gPT4ge1xyXG4gICAgICAgIGNvbnN0IGMgPSBvcHRpb25zPy5jaGlsZHJlbjtcclxuXHJcbiAgICAgICAgaWYgKCFjKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gYyhub2RlKSA/PyBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKG5vZGUgYXMgYW55KVtjXTtcclxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlbiA6IFtdO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiB2aXNpdChub2RlOiBULCBwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCwgbGV2ZWw6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZCA9IGlkQ291bnRlcisrO1xyXG5cclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGdldENoaWxkcmVuKG5vZGUpO1xyXG4gICAgICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gY2hpbGRyZW4ubGVuZ3RoID4gMDtcclxuXHJcbiAgICAgICAgY29uc3QgZmxhdE5vZGU6IEZsYXROb2RlPFQ+ID0ge1xyXG4gICAgICAgICAgICBpZDogY3VycmVudElkLFxyXG4gICAgICAgICAgICBwYXJlbnRJZCxcclxuICAgICAgICAgICAgbGV2ZWwsXHJcbiAgICAgICAgICAgIGhhc0NoaWxkcmVuLFxyXG4gICAgICAgICAgICBleHBhbmRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGRhdGE6IG5vZGVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXN1bHQucHVzaChmbGF0Tm9kZSk7XHJcblxyXG4gICAgICAgIG9wdGlvbnM/Lm9uQ3JlYXRlPy4oZmxhdE5vZGUpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHZpc2l0KGNoaWxkLCBjdXJyZW50SWQsIGxldmVsICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3Qgcm9vdCBvZiBub2RlcyBhcyBUW10pIHtcclxuICAgICAgICB2aXNpdChyb290LCBudWxsLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59Il19
@@ -1,7 +1,11 @@
1
1
  import { take } from 'rxjs/operators';
2
- export function subscribeOnce(source$, next) {
2
+ export function subscribeOnce(source$, next, error, complete) {
3
3
  source$
4
4
  .pipe(take(1))
5
- .subscribe(next);
5
+ .subscribe({
6
+ next,
7
+ error,
8
+ complete
9
+ });
6
10
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3V0aWxzL29ic2VydmFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE1BQU0sVUFBVSxhQUFhLENBQzNCLE9BQXNCLEVBQ3RCLElBQXdCO0lBRXhCLE9BQU87U0FDSixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2IsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlT25jZTxUPihcclxuICBzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+LFxyXG4gIG5leHQ6ICh2YWx1ZTogVCkgPT4gdm9pZFxyXG4pOiB2b2lkIHtcclxuICBzb3VyY2UkXHJcbiAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgLnN1YnNjcmliZShuZXh0KTtcclxufVxyXG4iXX0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3V0aWxzL29ic2VydmFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE1BQU0sVUFBVSxhQUFhLENBQzNCLE9BQXNCLEVBQ3RCLElBQXdCLEVBQ3hCLEtBQTBCLEVBQzFCLFFBQXFCO0lBRXJCLE9BQU87U0FDSixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2IsU0FBUyxDQUFDO1FBQ1QsSUFBSTtRQUNKLEtBQUs7UUFDTCxRQUFRO0tBQ1QsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVPbmNlPFQ+KFxyXG4gIHNvdXJjZSQ6IE9ic2VydmFibGU8VD4sXHJcbiAgbmV4dDogKHZhbHVlOiBUKSA9PiB2b2lkLFxyXG4gIGVycm9yPzogKGVycjogYW55KSA9PiB2b2lkLFxyXG4gIGNvbXBsZXRlPzogKCkgPT4gdm9pZFxyXG4pOiB2b2lkIHtcclxuICBzb3VyY2UkXHJcbiAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQsXHJcbiAgICAgIGVycm9yLFxyXG4gICAgICBjb21wbGV0ZVxyXG4gICAgfSk7XHJcbn1cclxuIl19