@wemake4u/form-player-se 1.0.39 → 1.0.40

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 (63) hide show
  1. package/esm2022/lib/builtIn/builtIn.mjs +24 -0
  2. package/esm2022/lib/builtIn/console.json +253 -0
  3. package/esm2022/lib/builtIn/dialog.json +109 -0
  4. package/esm2022/lib/builtIn/feel.json +26 -0
  5. package/esm2022/lib/builtIn/form.json +172 -0
  6. package/esm2022/lib/builtIn/formGroup.json +218 -0
  7. package/esm2022/lib/builtIn/formatter.json +112 -0
  8. package/esm2022/lib/builtIn/function.json +53 -0
  9. package/esm2022/lib/builtIn/register.json +14 -0
  10. package/esm2022/lib/components/setFilter/setFilter.component.mjs +18 -3
  11. package/esm2022/lib/directives/accordionpanel.directive.mjs +10 -5
  12. package/esm2022/lib/directives/collapse.directive.mjs +22 -12
  13. package/esm2022/lib/directives/collapsepatch.directive.mjs +2 -1
  14. package/esm2022/lib/directives/datetime.directive.mjs +18 -21
  15. package/esm2022/lib/directives/dropdown.directive.mjs +31 -16
  16. package/esm2022/lib/directives/grid.directive.mjs +10 -8
  17. package/esm2022/lib/directives/readonly.directive.mjs +10 -9
  18. package/esm2022/lib/directives/register.directive.mjs +8 -10
  19. package/esm2022/lib/directives/required.directive.mjs +57 -0
  20. package/esm2022/lib/directives/tabcontrol.directive.mjs +10 -9
  21. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +20 -4
  22. package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +43 -21
  23. package/esm2022/lib/dynamic-host/dynamic-host.component.mjs +32 -10
  24. package/esm2022/lib/services/event.service.mjs +17 -6
  25. package/esm2022/lib/services/grid.service.mjs +4 -1
  26. package/esm2022/lib/services/listener.service.mjs +23 -0
  27. package/esm2022/lib/services/programmability.service.mjs +54 -38
  28. package/esm2022/lib/services/status.service.mjs +10 -5
  29. package/esm2022/lib/services/subscribe.service.mjs +54 -0
  30. package/esm2022/lib/services/validation.service.mjs +11 -2
  31. package/esm2022/lib/utils/deepEqual.mjs +46 -0
  32. package/esm2022/lib/utils/observable.mjs +7 -0
  33. package/esm2022/lib/utils/proxy.mjs +28 -1
  34. package/esm2022/lib/utils/resolveRefs.mjs +67 -0
  35. package/esm2022/public-api.mjs +5 -1
  36. package/fesm2022/wemake4u-form-player-se.mjs +1573 -175
  37. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  38. package/lib/builtIn/builtIn.d.ts +32 -0
  39. package/lib/components/setFilter/setFilter.component.d.ts +1 -0
  40. package/lib/directives/accordionpanel.directive.d.ts +4 -2
  41. package/lib/directives/collapse.directive.d.ts +5 -3
  42. package/lib/directives/datetime.directive.d.ts +7 -8
  43. package/lib/directives/dropdown.directive.d.ts +6 -3
  44. package/lib/directives/grid.directive.d.ts +4 -3
  45. package/lib/directives/readonly.directive.d.ts +3 -4
  46. package/lib/directives/register.directive.d.ts +3 -3
  47. package/lib/directives/required.directive.d.ts +17 -0
  48. package/lib/directives/tabcontrol.directive.d.ts +5 -6
  49. package/lib/dynamic-fields/dynamic-fields.component.d.ts +1 -0
  50. package/lib/dynamic-form/dynamic-form.component.d.ts +4 -1
  51. package/lib/dynamic-host/dynamic-host.component.d.ts +6 -2
  52. package/lib/services/event.service.d.ts +8 -2
  53. package/lib/services/listener.service.d.ts +11 -0
  54. package/lib/services/programmability.service.d.ts +8 -9
  55. package/lib/services/status.service.d.ts +5 -1
  56. package/lib/services/subscribe.service.d.ts +14 -0
  57. package/lib/services/validation.service.d.ts +5 -2
  58. package/lib/utils/deepEqual.d.ts +1 -0
  59. package/lib/utils/observable.d.ts +2 -0
  60. package/lib/utils/proxy.d.ts +2 -0
  61. package/lib/utils/resolveRefs.d.ts +12 -0
  62. package/package.json +1 -1
  63. package/public-api.d.ts +4 -0
@@ -15,7 +15,13 @@ export class ValidationService {
15
15
  this.languageService = languageService;
16
16
  this.programmability = programmability;
17
17
  }
18
- suppress = false;
18
+ _suppress = false;
19
+ set suppress(value) {
20
+ this._suppress = value;
21
+ }
22
+ get suppress() {
23
+ return this._suppress;
24
+ }
19
25
  createCollection() {
20
26
  return new Map();
21
27
  }
@@ -36,6 +42,9 @@ export class ValidationService {
36
42
  watching(control);
37
43
  });
38
44
  }
45
+ validateRequired(control) {
46
+ return this.requiredValidator(control);
47
+ }
39
48
  canAddToCollection(component) {
40
49
  const required = component?.validate?.required;
41
50
  const hasRules = Array.isArray(component?.validations) && component.validations.length > 0;
@@ -210,4 +219,4 @@ export class ValidationService {
210
219
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationService, decorators: [{
211
220
  type: Injectable
212
221
  }], ctorParameters: () => [{ type: i1.LanguageService }, { type: i2.ProgrammabilityService }] });
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUErRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6SCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBR2xCO0lBQ0E7SUFGVixZQUNVLGVBQWdDLEVBQ2hDLGVBQXVDO1FBRHZDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7SUFDakQsQ0FBQztJQUVELFFBQVEsR0FBWSxLQUFLLENBQUM7SUFFMUIsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQWdDLEVBQUUsT0FBd0IsRUFBRSxTQUFvQixFQUFFLFNBQWM7UUFDOUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVB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TyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUE7SUFDNUQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxTQUFjO1FBQ3BDLE9BQU8sU0FBUyxFQUFFLElBQUksS0FBSyxVQUFVLENBQUM7SUFDeEMsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7d0dBbFFVLGlCQUFpQjs0R0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgY2F0Y2hFcnJvciwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0b0ZlZWxhYmxlIH0gZnJvbSAnLi4vdXRpbHMvZmVlbGFibGUnO1xyXG5pbXBvcnQgeyBDYWxsYmFja1JlZ2lzdHJ5IH0gZnJvbSAnLi4vdXRpbHMvQ2FsbGJhY2tSZWdpc3RyeSc7XHJcblxyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAd2VtYWtlNHUvaW50ZXJhY3QnO1xyXG5pbXBvcnQgeyBUZXh0cyB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGUnO1xyXG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGl6ZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uU2VydmljZSAge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgc3VwcHJlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY3JlYXRlQ29sbGVjdGlvbigpOiBWYWxpZGF0aW9uQ29sbGVjdGlvbiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXBvbmVudENvbnRleHQ+KCk7XHJcbiAgfVxyXG5cclxuICBhZGRUb0NvbGxlY3Rpb24oY29sbGVjdGlvbjogVmFsaWRhdGlvbkNvbGxlY3Rpb24sIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBpZiAoIWNvbGxlY3Rpb24uaGFzKGNvbnRyb2wpICYmIHRoaXMuY2FuQWRkVG9Db2xsZWN0aW9uKGNvbXBvbmVudCkpIHsgXHJcbiAgICAgIGNvbGxlY3Rpb24uc2V0KGNvbnRyb2wsIHsgY29tcG9uZW50LCBmb3JtR3JvdXAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXR1cENvbGxlY3Rpb24oY29sbGVjdGlvbjogVmFsaWRhdGlvbkNvbGxlY3Rpb24pIHtcclxuICAgIGNvbGxlY3Rpb24uZm9yRWFjaCgoY29tcG9uZW50VmFsaWRhdGlvbiwgY29udHJvbCkgPT4ge1xyXG4gICAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRWYWxpZGF0aW9uLmNvbXBvbmVudDtcclxuICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gY29tcG9uZW50VmFsaWRhdGlvbi5mb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IHJlcXVpcmVkID0gY29tcG9uZW50Py52YWxpZGF0ZT8ucmVxdWlyZWQ7XHJcbiAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlcyhjb21wb25lbnQpO1xyXG4gICAgICBjb25zdCBbdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzLCB3YXRjaGluZ10gPSB0aGlzLnZhbGlkYXRlUnVsZXMoY3VycmVudEdyb3VwLCBjb21wb25lbnQsIHJlcXVpcmVkLCBydWxlcyk7XHJcbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgICAgY29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcclxuICAgICAgd2F0Y2hpbmcoY29udHJvbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FuQWRkVG9Db2xsZWN0aW9uKGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZXF1aXJlZCA9IGNvbXBvbmVudD8udmFsaWRhdGU/LnJlcXVpcmVkO1xyXG4gICAgY29uc3QgaGFzUnVsZXMgPSBBcnJheS5pc0FycmF5KGNvbXBvbmVudD8udmFsaWRhdGlvbnMpICYmIGNvbXBvbmVudC52YWxpZGF0aW9ucy5sZW5ndGggPiAwO1xyXG4gICAgcmV0dXJuIHJlcXVpcmVkID09PSB0cnVlIHx8IGhhc1J1bGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSdWxlcyhjb21wb25lbnQ6IGFueSk6IFZhbGlkYXRpb25SdWxlW10ge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbXBvbmVudC52YWxpZGF0aW9ucykpIHJldHVybiBbXTtcclxuICAgIHJldHVybiBjb21wb25lbnQudmFsaWRhdGlvbnM/Lm1hcCgocnVsZTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZXhwcmVzc2lvbjogcnVsZS5leHByZXNzaW9uLFxyXG4gICAgICAgIHR5cGU6IHJ1bGUudHlwZSxcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLmxvY2FsZShydWxlLCAnbWVzc2FnZScpLFxyXG4gICAgICAgIGFzeW5jOiBydWxlLmFzeW5jID09PSB0cnVlXHJcbiAgICAgIH0gYXMgVmFsaWRhdGlvblJ1bGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVSdWxlcyhmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBjb21wb25lbnQ6IGFueVxyXG4gICAgLCByZXF1aXJlZD86IGJvb2xlYW5cclxuICAgICwgdmFsaWRhdGlvbnM/OiBWYWxpZGF0aW9uUnVsZVtdKTogW1ZhbGlkYXRvckZuW10sIEFzeW5jVmFsaWRhdG9yRm5bXSwgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gdm9pZF0ge1xyXG4gICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JGbltdID0gW107XHJcblxyXG4gICAgY29uc3Qgbm9XYXRjaGluZyA9ICgpID0+IHsgfTtcclxuXHJcbiAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuZ2V0UmVxdWlyZWRWYWxpZGF0b3IoY29tcG9uZW50KSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbGlkYXRpb25zKSkge1xyXG4gICAgICByZXR1cm4gW3ZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycywgbm9XYXRjaGluZ107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2FsbGJhY2tzID0gbmV3IENhbGxiYWNrUmVnaXN0cnkoKTtcclxuXHJcbiAgICB2YWxpZGF0aW9ucy5mb3JFYWNoKChpdGVtOiBWYWxpZGF0aW9uUnVsZSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihpdGVtLmV4cHJlc3Npb24pKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGxvZ2dlcjogVmFsaWRhdGlvbkNhbGxiYWNrID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcmVzdWx0OiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCkgPT5cclxuICAgICAgICB0aGlzLmxvZ1ZhbGlkYXRpb24oY29tcG9uZW50LCBpdGVtLCBjb250cm9sLCByZXN1bHQpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gXCJ2YWxpZGF0ZVwiIHx8IGl0ZW0udHlwZSA9PT0gXCJpbnZhbGlkYXRlXCIpIHtcclxuICAgICAgICBjb25zdCBwcmVkaWNhdGUgPSBpdGVtLnR5cGUgPT09IFwidmFsaWRhdGVcIlxyXG4gICAgICAgICAgPyAocmVzdWx0OiBhbnkpID0+IHJlc3VsdFxyXG4gICAgICAgICAgOiAocmVzdWx0OiBhbnkpID0+ICFyZXN1bHQ7XHJcblxyXG4gICAgICAgIGlmIChpdGVtLmFzeW5jKSB7XHJcbiAgICAgICAgICBhc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLmNyZWF0ZUFzeW5jVmFsaWRhdG9yKGZvcm1Hcm91cCwgaXRlbSwgY2FsbGJhY2tzLCBwcmVkaWNhdGUsIGxvZ2dlcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLmNyZWF0ZVZhbGlkYXRvcihmb3JtR3JvdXAsIGl0ZW0sIHByZWRpY2F0ZSwgbG9nZ2VyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB3YXRjaGluZyA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkID0+IHtcclxuICAgICAgdGhpcy53YXRjaEZvclZhbGlkYXRpb24oZm9ybUdyb3VwLCBjb250cm9sLCBjb21wb25lbnQua2V5LCB2YWxpZGF0aW9ucywgY2FsbGJhY2tzKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIFt2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIHdhdGNoaW5nXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVmFsaWRhdG9yKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGl0ZW06IFZhbGlkYXRpb25SdWxlXHJcbiAgICAsIHByZWRpY2F0ZTogKHJlc3VsdDogYW55KSA9PiBib29sZWFuXHJcbiAgICAsIGNhbGxiYWNrOiBWYWxpZGF0aW9uQ2FsbGJhY2spOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgaWYgKHRoaXMuc3VwcHJlc3MpIHJldHVybiBudWxsO1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVVuYXJ5KGZvcm1Hcm91cCwgaXRlbS5leHByZXNzaW9uLCBjb250cm9sLnZhbHVlKVxyXG4gICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIltWYWxpZGF0b3JdIFVuZXhwZWN0ZWQgb2JzZXJ2YWJsZSByZXN1bHQgaW4gY3JlYXRlVmFsaWRhdG9yXCIsXHJcbiAgICAgICAgICB7IGV4cHJlc3Npb246IGl0ZW0uZXhwcmVzc2lvbiwgdmFsdWU6IGNvbnRyb2wudmFsdWUsIHJ1bGU6IGl0ZW0gfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdmFsaWRhdGUgPSBwcmVkaWNhdGUocmVzdWx0KSA/IG51bGwgOiB0aGlzLnZhbGlkYXRpb25FcnJvcnMoZm9ybUdyb3VwLCBpdGVtKTtcclxuICAgICAgY2FsbGJhY2soY29udHJvbCwgdmFsaWRhdGUpO1xyXG4gICAgICByZXR1cm4gdmFsaWRhdGU7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVBc3luY1ZhbGlkYXRvcihmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBpdGVtOiBWYWxpZGF0aW9uUnVsZVxyXG4gICAgLCBjYWxsYmFja3M6IENhbGxiYWNrUmVnaXN0cnlcclxuICAgICwgcHJlZGljYXRlOiAocmVzdWx0OiBhbnkpID0+IGJvb2xlYW5cclxuICAgICwgY2FsbGJhY2s6IFZhbGlkYXRpb25DYWxsYmFjayk6IEFzeW5jVmFsaWRhdG9yRm4ge1xyXG5cclxuICAgIGNvbnN0IHVuc2V0U3RhdGUgPSAoKSA9PiAoeyB2YWx1ZTogU3ltYm9sKCd1bnNldCcpLCByZXN1bHQ6IG51bGwgfSk7XHJcblxyXG4gICAgbGV0IHN0YXRlID0gdW5zZXRTdGF0ZSgpO1xyXG5cclxuICAgIGNhbGxiYWNrcy5yZWdpc3RlcigoKSA9PiBzdGF0ZSA9IHVuc2V0U3RhdGUoKSk7XHJcblxyXG4gICAgY29uc3QgZ2V0UmVzdWx0ID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGFueSA9PiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGl0ZW0uZXhwcmVzc2lvbiwge1xyXG4gICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiB7IHJldHVybiB7IFwiP1wiOiBjb250cm9sLnZhbHVlIH0gfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY29tcHV0ZU9uY2UgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYW55ID0+IHtcclxuICAgICAgY29uc3QgdiA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgIGlmIChzdGF0ZS52YWx1ZSAhPT0gdikge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBnZXRSZXN1bHQoY29udHJvbCk7XHJcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSAocmVzdWx0IGFzIE9ic2VydmFibGU8YW55PikucGlwZShcclxuICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgbWFwKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGUgPSBwcmVkaWNhdGUodmFsdWUpID8gbnVsbCA6IHRoaXMudmFsaWRhdGlvbkVycm9ycyhmb3JtR3JvdXAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgIGNhbGxiYWNrKGNvbnRyb2wsIHZhbGlkYXRlKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGU7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltBc3luY1ZhbGlkYXRvcl0gRXZhbHVhdGlvbiBlcnJvclwiLCB7IGV4cHJlc3Npb246IGl0ZW0uZXhwcmVzc2lvbiwgZXJyIH0pO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bGxPYnNlcnZlcjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlID0geyB2YWx1ZTogdiwgcmVzdWx0OiByZXN1bHQgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3RhdGUucmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zdXBwcmVzcykgcmV0dXJuIHRoaXMubnVsbE9ic2VydmVyO1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBjb21wdXRlT25jZShjb250cm9sKTsgICAgICBcclxuICAgICAgaWYgKCFpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiW0FzeW5jVmFsaWRhdG9yXSBFeHBlY3RlZCBvYnNlcnZhYmxlIGJ1dCBnb3Qgbm9uLW9ic2VydmFibGUgcmVzdWx0XCIsXHJcbiAgICAgICAgICB7IGV4cHJlc3Npb246IGl0ZW0uZXhwcmVzc2lvbiwgdmFsdWU6IGNvbnRyb2wudmFsdWUsIHJlc3VsdCwgcnVsZTogaXRlbSB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5udWxsT2JzZXJ2ZXI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdCBhcyBPYnNlcnZhYmxlPGFueT47XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0aW9uRXJyb3JzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBpdGVtOiBWYWxpZGF0aW9uUnVsZSkge1xyXG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlU3RyaW5nKGZvcm1Hcm91cCwgaXRlbS5tZXNzYWdlKTtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHsgZXJyb3I6IHRydWUsIG1lc3NhZ2UgfTtcclxuICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhdGNoRm9yVmFsaWRhdGlvbihmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICwga2V5OiBzdHJpbmdcclxuICAgICwgdmFsaWRhdGlvbnM6IFZhbGlkYXRpb25SdWxlW11cclxuICAgICwgY2FsbGJhY2tzOiBDYWxsYmFja1JlZ2lzdHJ5KTogdm9pZCB7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsaWRhdGlvbnMpKSB7XHJcbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gdmFsaWRhdGlvbnNcclxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGl0ZW0uZXhwcmVzc2lvbikpXHJcbiAgICAgICAgLm1hcChpdGVtID0+IFwiPVwiICsgdGhpcy5wcm9ncmFtbWFiaWxpdHkuZ2V0RXhwcmVzc2lvbihpdGVtLmV4cHJlc3Npb24pKTtcclxuXHJcbiAgICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGZlZWxhYmxlID0gdG9GZWVsYWJsZShleHByZXNzaW9ucyk7XHJcblxyXG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5nZXREZXBlbmRlbmNpZXMoZmVlbGFibGUpXHJcbiAgICAgICAgLmZpbHRlcihkZXAgPT4gZGVwICE9PSBrZXkpO1xyXG5cclxuICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMucHJvZ3JhbW1hYmlsaXR5LndhdGNoKGZvcm1Hcm91cCwgZGVwZW5kZW5jaWVzLCAoKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjYWxsYmFja3MuaW52b2tlKCk7XHJcbiAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2dWYWxpZGF0aW9uID0gKGNvbXBvbmVudDogYW55LCBydWxlOiBWYWxpZGF0aW9uUnVsZSwgY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PiB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmFtbWFiaWxpdHkudmVyYm9zZSkge1xyXG4gICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXCJbVmFsaWRhdGlvbl0gRmFpbGVkXCIsIHsgY29udHJvbCwgY29tcG9uZW50LCBydWxlLCByZXN1bHQgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJbVmFsaWRhdGlvbl0gU3VjY2Vzc1wiLCB7IGNvbnRyb2wsIGNvbXBvbmVudCwgcnVsZSwgcmVzdWx0IH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IG51bGxPYnNlcnZlciA9IG9mKG51bGwpO1xyXG5cclxuICBwcml2YXRlIGdldCBsYW5ndWFnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmd1YWdlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvY2FsZShjb21wb25lbnQ6IGFueSwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsaXplKHRoaXMubGFuZ3VhZ2UsIGNvbXBvbmVudCwga2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVxdWlyZWRWYWxpZGF0b3IoY29tcG9uZW50OiBhbnkpOiBWYWxpZGF0b3JGbiB7XHJcbiAgICBpZiAodGhpcy5pc1RydWVWYWxpZGF0b3IoY29tcG9uZW50KSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZXF1aXJlZFRydWVWYWxpZGF0b3IuYmluZCh0aGlzKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5yZXF1aXJlZFZhbGlkYXRvci5iaW5kKHRoaXMpO1xyXG4gICAgfSAgXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcXVpcmVkVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmIChWYWxpZGF0b3JzLnJlcXVpcmVkKGNvbnRyb2wpID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogdGhpcy5nZXRSZXF1aXJlZE1lc3NhZ2UoKSB9ICAgIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1aXJlZFRydWVWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgaWYgKFZhbGlkYXRvcnMucmVxdWlyZWRUcnVlKGNvbnRyb2wpID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogdGhpcy5nZXRSZXF1aXJlZE1lc3NhZ2UoKSB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVHJ1ZVZhbGlkYXRvcihjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudD8udHlwZSA9PT0gJ2NoZWNrYm94JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVxdWlyZWRNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2NhbGUoVGV4dHMsICdSZXF1aXJlZEZpZWxkJyk7XHJcbiAgfVxyXG59XHJcblxyXG50eXBlIFZhbGlkYXRpb25DYWxsYmFjayA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHJlc3VsdDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwpID0+IHZvaWQ7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudENvbnRleHQge1xyXG4gIGNvbXBvbmVudDogYW55O1xyXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25SdWxlIHtcclxuICBleHByZXNzaW9uOiBzdHJpbmc7XHJcbiAgdHlwZTogXCJ2YWxpZGF0ZVwiIHwgXCJpbnZhbGlkYXRlXCI7XHJcbiAgbWVzc2FnZTogc3RyaW5nLFxyXG4gIGFzeW5jOiBib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25Db2xsZWN0aW9uID0gTWFwPEFic3RyYWN0Q29udHJvbCwgQ29tcG9uZW50Q29udGV4dD47XHJcbiJdfQ==
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUErRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6SCxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUc5QyxNQUFNLE9BQU8saUJBQWlCO0lBR2xCO0lBQ0E7SUFGVixZQUNVLGVBQWdDLEVBQ2hDLGVBQXVDO1FBRHZDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7SUFDakQsQ0FBQztJQUVPLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFbkMsSUFBSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBZ0MsRUFBRSxPQUF3QixFQUFFLFNBQW9CLEVBQUUsU0FB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QUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3pDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFBO0lBQzVELENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxPQUF3QjtRQUNwRCxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUE7SUFDNUQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxTQUFjO1FBQ3BDLE9BQU8sU0FBUyxFQUFFLElBQUksS0FBSyxVQUFVLENBQUM7SUFDeEMsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7d0dBOVFVLGlCQUFpQjs0R0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgY2F0Y2hFcnJvciwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0b0ZlZWxhYmxlIH0gZnJvbSAnLi4vdXRpbHMvZmVlbGFibGUnO1xyXG5pbXBvcnQgeyBDYWxsYmFja1JlZ2lzdHJ5IH0gZnJvbSAnLi4vdXRpbHMvQ2FsbGJhY2tSZWdpc3RyeSc7XHJcblxyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAd2VtYWtlNHUvaW50ZXJhY3QnO1xyXG5pbXBvcnQgeyBUZXh0cyB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGUnO1xyXG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGl6ZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uU2VydmljZSAge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3VwcHJlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc2V0IHN1cHByZXNzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zdXBwcmVzcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN1cHByZXNzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N1cHByZXNzO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQ29sbGVjdGlvbigpOiBWYWxpZGF0aW9uQ29sbGVjdGlvbiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXBvbmVudENvbnRleHQ+KCk7XHJcbiAgfVxyXG5cclxuICBhZGRUb0NvbGxlY3Rpb24oY29sbGVjdGlvbjogVmFsaWRhdGlvbkNvbGxlY3Rpb24sIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBpZiAoIWNvbGxlY3Rpb24uaGFzKGNvbnRyb2wpICYmIHRoaXMuY2FuQWRkVG9Db2xsZWN0aW9uKGNvbXBvbmVudCkpIHsgXHJcbiAgICAgIGNvbGxlY3Rpb24uc2V0KGNvbnRyb2wsIHsgY29tcG9uZW50LCBmb3JtR3JvdXAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXR1cENvbGxlY3Rpb24oY29sbGVjdGlvbjogVmFsaWRhdGlvbkNvbGxlY3Rpb24pIHtcclxuICAgIGNvbGxlY3Rpb24uZm9yRWFjaCgoY29tcG9uZW50VmFsaWRhdGlvbiwgY29udHJvbCkgPT4ge1xyXG4gICAgICBjb25zdCBjb21wb25lbnQgPSBjb21wb25lbnRWYWxpZGF0aW9uLmNvbXBvbmVudDtcclxuICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gY29tcG9uZW50VmFsaWRhdGlvbi5mb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IHJlcXVpcmVkID0gY29tcG9uZW50Py52YWxpZGF0ZT8ucmVxdWlyZWQ7XHJcbiAgICAgIGNvbnN0IHJ1bGVzID0gdGhpcy5nZXRSdWxlcyhjb21wb25lbnQpO1xyXG4gICAgICBjb25zdCBbdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzLCB3YXRjaGluZ10gPSB0aGlzLnZhbGlkYXRlUnVsZXMoY3VycmVudEdyb3VwLCBjb21wb25lbnQsIHJlcXVpcmVkLCBydWxlcyk7XHJcbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgICAgY29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcclxuICAgICAgd2F0Y2hpbmcoY29udHJvbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlUmVxdWlyZWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnJlcXVpcmVkVmFsaWRhdG9yKGNvbnRyb2wpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbkFkZFRvQ29sbGVjdGlvbihjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcmVxdWlyZWQgPSBjb21wb25lbnQ/LnZhbGlkYXRlPy5yZXF1aXJlZDtcclxuICAgIGNvbnN0IGhhc1J1bGVzID0gQXJyYXkuaXNBcnJheShjb21wb25lbnQ/LnZhbGlkYXRpb25zKSAmJiBjb21wb25lbnQudmFsaWRhdGlvbnMubGVuZ3RoID4gMDtcclxuICAgIHJldHVybiByZXF1aXJlZCA9PT0gdHJ1ZSB8fCBoYXNSdWxlcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UnVsZXMoY29tcG9uZW50OiBhbnkpOiBWYWxpZGF0aW9uUnVsZVtdIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShjb21wb25lbnQudmFsaWRhdGlvbnMpKSByZXR1cm4gW107XHJcbiAgICByZXR1cm4gY29tcG9uZW50LnZhbGlkYXRpb25zPy5tYXAoKHJ1bGU6IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGV4cHJlc3Npb246IHJ1bGUuZXhwcmVzc2lvbixcclxuICAgICAgICB0eXBlOiBydWxlLnR5cGUsXHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5sb2NhbGUocnVsZSwgJ21lc3NhZ2UnKSxcclxuICAgICAgICBhc3luYzogcnVsZS5hc3luYyA9PT0gdHJ1ZVxyXG4gICAgICB9IGFzIFZhbGlkYXRpb25SdWxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlUnVsZXMoZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgY29tcG9uZW50OiBhbnlcclxuICAgICwgcmVxdWlyZWQ/OiBib29sZWFuXHJcbiAgICAsIHZhbGlkYXRpb25zPzogVmFsaWRhdGlvblJ1bGVbXSk6IFtWYWxpZGF0b3JGbltdLCBBc3luY1ZhbGlkYXRvckZuW10sIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHZvaWRdIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IG5vV2F0Y2hpbmcgPSAoKSA9PiB7IH07XHJcblxyXG4gICAgaWYgKHJlcXVpcmVkID09PSB0cnVlKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLmdldFJlcXVpcmVkVmFsaWRhdG9yKGNvbXBvbmVudCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZGF0aW9ucykpIHtcclxuICAgICAgcmV0dXJuIFt2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIG5vV2F0Y2hpbmddO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNhbGxiYWNrcyA9IG5ldyBDYWxsYmFja1JlZ2lzdHJ5KCk7XHJcblxyXG4gICAgdmFsaWRhdGlvbnMuZm9yRWFjaCgoaXRlbTogVmFsaWRhdGlvblJ1bGUpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnByb2dyYW1tYWJpbGl0eS5pc0V4cHJlc3Npb24oaXRlbS5leHByZXNzaW9uKSlcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBsb2dnZXI6IFZhbGlkYXRpb25DYWxsYmFjayA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHJlc3VsdDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwpID0+XHJcbiAgICAgICAgdGhpcy5sb2dWYWxpZGF0aW9uKGNvbXBvbmVudCwgaXRlbSwgY29udHJvbCwgcmVzdWx0KTtcclxuICAgICAgXHJcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFwidmFsaWRhdGVcIiB8fCBpdGVtLnR5cGUgPT09IFwiaW52YWxpZGF0ZVwiKSB7XHJcbiAgICAgICAgY29uc3QgcHJlZGljYXRlID0gaXRlbS50eXBlID09PSBcInZhbGlkYXRlXCJcclxuICAgICAgICAgID8gKHJlc3VsdDogYW55KSA9PiByZXN1bHRcclxuICAgICAgICAgIDogKHJlc3VsdDogYW55KSA9PiAhcmVzdWx0O1xyXG5cclxuICAgICAgICBpZiAoaXRlbS5hc3luYykge1xyXG4gICAgICAgICAgYXN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy5jcmVhdGVBc3luY1ZhbGlkYXRvcihmb3JtR3JvdXAsIGl0ZW0sIGNhbGxiYWNrcywgcHJlZGljYXRlLCBsb2dnZXIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2godGhpcy5jcmVhdGVWYWxpZGF0b3IoZm9ybUdyb3VwLCBpdGVtLCBwcmVkaWNhdGUsIGxvZ2dlcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgd2F0Y2hpbmcgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCA9PiB7XHJcbiAgICAgIHRoaXMud2F0Y2hGb3JWYWxpZGF0aW9uKGZvcm1Hcm91cCwgY29udHJvbCwgY29tcG9uZW50LmtleSwgdmFsaWRhdGlvbnMsIGNhbGxiYWNrcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBbdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzLCB3YXRjaGluZ107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVZhbGlkYXRvcihmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBpdGVtOiBWYWxpZGF0aW9uUnVsZVxyXG4gICAgLCBwcmVkaWNhdGU6IChyZXN1bHQ6IGFueSkgPT4gYm9vbGVhblxyXG4gICAgLCBjYWxsYmFjazogVmFsaWRhdGlvbkNhbGxiYWNrKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnN1cHByZXNzKSByZXR1cm4gbnVsbDtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVVbmFyeShmb3JtR3JvdXAsIGl0ZW0uZXhwcmVzc2lvbiwgY29udHJvbC52YWx1ZSlcclxuICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJbVmFsaWRhdG9yXSBVbmV4cGVjdGVkIG9ic2VydmFibGUgcmVzdWx0IGluIGNyZWF0ZVZhbGlkYXRvclwiLFxyXG4gICAgICAgICAgeyBleHByZXNzaW9uOiBpdGVtLmV4cHJlc3Npb24sIHZhbHVlOiBjb250cm9sLnZhbHVlLCBydWxlOiBpdGVtIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHZhbGlkYXRlID0gcHJlZGljYXRlKHJlc3VsdCkgPyBudWxsIDogdGhpcy52YWxpZGF0aW9uRXJyb3JzKGZvcm1Hcm91cCwgaXRlbSk7XHJcbiAgICAgIGNhbGxiYWNrKGNvbnRyb2wsIHZhbGlkYXRlKTtcclxuICAgICAgcmV0dXJuIHZhbGlkYXRlO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQXN5bmNWYWxpZGF0b3IoZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgaXRlbTogVmFsaWRhdGlvblJ1bGVcclxuICAgICwgY2FsbGJhY2tzOiBDYWxsYmFja1JlZ2lzdHJ5XHJcbiAgICAsIHByZWRpY2F0ZTogKHJlc3VsdDogYW55KSA9PiBib29sZWFuXHJcbiAgICAsIGNhbGxiYWNrOiBWYWxpZGF0aW9uQ2FsbGJhY2spOiBBc3luY1ZhbGlkYXRvckZuIHtcclxuXHJcbiAgICBjb25zdCB1bnNldFN0YXRlID0gKCkgPT4gKHsgdmFsdWU6IFN5bWJvbCgndW5zZXQnKSwgcmVzdWx0OiBudWxsIH0pO1xyXG5cclxuICAgIGxldCBzdGF0ZSA9IHVuc2V0U3RhdGUoKTtcclxuXHJcbiAgICBjYWxsYmFja3MucmVnaXN0ZXIoKCkgPT4gc3RhdGUgPSB1bnNldFN0YXRlKCkpO1xyXG5cclxuICAgIGNvbnN0IGdldFJlc3VsdCA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBhbnkgPT4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBpdGVtLmV4cHJlc3Npb24sIHtcclxuICAgICAgY2FjaGVhYmxlOiBmYWxzZSxcclxuICAgICAgZXh0ZW5kQ29udGV4dDogKCkgPT4geyByZXR1cm4geyBcIj9cIjogY29udHJvbC52YWx1ZSB9IH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNvbXB1dGVPbmNlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGFueSA9PiB7XHJcbiAgICAgIGNvbnN0IHYgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICBpZiAoc3RhdGUudmFsdWUgIT09IHYpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZ2V0UmVzdWx0KGNvbnRyb2wpO1xyXG4gICAgICAgIGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCBhcyBPYnNlcnZhYmxlPGFueT4pLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgIG1hcCgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlID0gcHJlZGljYXRlKHZhbHVlKSA/IG51bGwgOiB0aGlzLnZhbGlkYXRpb25FcnJvcnMoZm9ybUdyb3VwLCBpdGVtKTtcclxuICAgICAgICAgICAgICBjYWxsYmFjayhjb250cm9sLCB2YWxpZGF0ZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbQXN5bmNWYWxpZGF0b3JdIEV2YWx1YXRpb24gZXJyb3JcIiwgeyBleHByZXNzaW9uOiBpdGVtLmV4cHJlc3Npb24sIGVyciB9KTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udWxsT2JzZXJ2ZXI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzdGF0ZSA9IHsgdmFsdWU6IHYsIHJlc3VsdDogcmVzdWx0IH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN0YXRlLnJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc3VwcHJlc3MpIHJldHVybiB0aGlzLm51bGxPYnNlcnZlcjtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gY29tcHV0ZU9uY2UoY29udHJvbCk7ICAgICAgXHJcbiAgICAgIGlmICghaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIltBc3luY1ZhbGlkYXRvcl0gRXhwZWN0ZWQgb2JzZXJ2YWJsZSBidXQgZ290IG5vbi1vYnNlcnZhYmxlIHJlc3VsdFwiLFxyXG4gICAgICAgICAgeyBleHByZXNzaW9uOiBpdGVtLmV4cHJlc3Npb24sIHZhbHVlOiBjb250cm9sLnZhbHVlLCByZXN1bHQsIHJ1bGU6IGl0ZW0gfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubnVsbE9ic2VydmVyO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQgYXMgT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGlvbkVycm9ycyhmb3JtR3JvdXA6IEZvcm1Hcm91cCwgaXRlbTogVmFsaWRhdGlvblJ1bGUpIHtcclxuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVN0cmluZyhmb3JtR3JvdXAsIGl0ZW0ubWVzc2FnZSk7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSB7IGVycm9yOiB0cnVlLCBtZXNzYWdlIH07XHJcbiAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXRjaEZvclZhbGlkYXRpb24oZm9ybUdyb3VwOiBGb3JtR3JvdXBcclxuICAgICwgY29udHJvbDogQWJzdHJhY3RDb250cm9sXHJcbiAgICAsIGtleTogc3RyaW5nXHJcbiAgICAsIHZhbGlkYXRpb25zOiBWYWxpZGF0aW9uUnVsZVtdXHJcbiAgICAsIGNhbGxiYWNrczogQ2FsbGJhY2tSZWdpc3RyeSk6IHZvaWQge1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbGlkYXRpb25zKSkge1xyXG4gICAgICBjb25zdCBleHByZXNzaW9ucyA9IHZhbGlkYXRpb25zXHJcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihpdGVtLmV4cHJlc3Npb24pKVxyXG4gICAgICAgIC5tYXAoaXRlbSA9PiBcIj1cIiArIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmdldEV4cHJlc3Npb24oaXRlbS5leHByZXNzaW9uKSk7XHJcblxyXG4gICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBmZWVsYWJsZSA9IHRvRmVlbGFibGUoZXhwcmVzc2lvbnMpO1xyXG5cclxuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZ2V0RGVwZW5kZW5jaWVzKGZlZWxhYmxlKVxyXG4gICAgICAgIC5maWx0ZXIoZGVwID0+IGRlcCAhPT0ga2V5KTtcclxuXHJcbiAgICAgIGlmIChkZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLnByb2dyYW1tYWJpbGl0eS53YXRjaChmb3JtR3JvdXAsIGRlcGVuZGVuY2llcywgKCkgPT4ge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY2FsbGJhY2tzLmludm9rZSgpO1xyXG4gICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9nVmFsaWRhdGlvbiA9IChjb21wb25lbnQ6IGFueSwgcnVsZTogVmFsaWRhdGlvblJ1bGUsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcmVzdWx0OiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCkgPT4ge1xyXG4gICAgaWYgKHRoaXMucHJvZ3JhbW1hYmlsaXR5LnZlcmJvc2UpIHtcclxuICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFwiW1ZhbGlkYXRpb25dIEZhaWxlZFwiLCB7IGNvbnRyb2wsIGNvbXBvbmVudCwgcnVsZSwgcmVzdWx0IH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiW1ZhbGlkYXRpb25dIFN1Y2Nlc3NcIiwgeyBjb250cm9sLCBjb21wb25lbnQsIHJ1bGUsIHJlc3VsdCB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBudWxsT2JzZXJ2ZXIgPSBvZihudWxsKTtcclxuXHJcbiAgcHJpdmF0ZSBnZXQgbGFuZ3VhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRMYW5ndWFnZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbGUoY29tcG9uZW50OiBhbnksIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbGl6ZSh0aGlzLmxhbmd1YWdlLCBjb21wb25lbnQsIGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlcXVpcmVkVmFsaWRhdG9yKGNvbXBvbmVudDogYW55KTogVmFsaWRhdG9yRm4ge1xyXG4gICAgaWYgKHRoaXMuaXNUcnVlVmFsaWRhdG9yKGNvbXBvbmVudCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVxdWlyZWRUcnVlVmFsaWRhdG9yLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmVxdWlyZWRWYWxpZGF0b3IuYmluZCh0aGlzKTtcclxuICAgIH0gIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1aXJlZFZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBpZiAoVmFsaWRhdG9ycy5yZXF1aXJlZChjb250cm9sKSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IHRoaXMuZ2V0UmVxdWlyZWRNZXNzYWdlKCkgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWlyZWRUcnVlVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmIChWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZShjb250cm9sKSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6IHRoaXMuZ2V0UmVxdWlyZWRNZXNzYWdlKCkgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1RydWVWYWxpZGF0b3IoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb21wb25lbnQ/LnR5cGUgPT09ICdjaGVja2JveCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlcXVpcmVkTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxlKFRleHRzLCAnUmVxdWlyZWRGaWVsZCcpO1xyXG4gIH1cclxufVxyXG5cclxudHlwZSBWYWxpZGF0aW9uQ2FsbGJhY2sgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PiB2b2lkO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRDb250ZXh0IHtcclxuICBjb21wb25lbnQ6IGFueTtcclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUnVsZSB7XHJcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xyXG4gIHR5cGU6IFwidmFsaWRhdGVcIiB8IFwiaW52YWxpZGF0ZVwiO1xyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBhc3luYzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXBvbmVudENvbnRleHQ+O1xyXG4iXX0=
@@ -0,0 +1,46 @@
1
+ export function deepEqual(a, b, visited = new WeakMap()) {
2
+ // Same reference or same primitive value
3
+ if (a === b)
4
+ return true;
5
+ // Handle null / undefined
6
+ if (a == null || b == null)
7
+ return a === b;
8
+ // Different types
9
+ if (typeof a !== typeof b)
10
+ return false;
11
+ // Date comparison
12
+ if (a instanceof Date && b instanceof Date) {
13
+ return a.getTime() === b.getTime();
14
+ }
15
+ // Non-object values (number, string, boolean, symbol)
16
+ if (typeof a !== 'object') {
17
+ return Object.is(a, b);
18
+ }
19
+ // Circular reference handling
20
+ if (visited.get(a) === b)
21
+ return true;
22
+ visited.set(a, b);
23
+ // Array comparison (order matters)
24
+ if (Array.isArray(a)) {
25
+ if (!Array.isArray(b) || a.length !== b.length)
26
+ return false;
27
+ for (let i = 0; i < a.length; i++) {
28
+ if (!deepEqual(a[i], b[i], visited))
29
+ return false;
30
+ }
31
+ return true;
32
+ }
33
+ // 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)
37
+ return false;
38
+ for (const key of keysA) {
39
+ if (!Object.prototype.hasOwnProperty.call(b, key))
40
+ return false;
41
+ if (!deepEqual(a[key], b[key], visited))
42
+ return false;
43
+ }
44
+ return true;
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcEVxdWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvdXRpbHMvZGVlcEVxdWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUU7SUFDL0QseUNBQXlDO0lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV6QiwwQkFBMEI7SUFDMUIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJO1FBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNDLGtCQUFrQjtJQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRXhDLGtCQUFrQjtJQUNsQixJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsOEJBQThCO0lBQzlCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbEIsbUNBQW1DO0lBQ25DLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUU3RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFaEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBkZWVwRXF1YWwoYTogYW55LCBiOiBhbnksIHZpc2l0ZWQgPSBuZXcgV2Vha01hcCgpKSB7XHJcbiAgLy8gU2FtZSByZWZlcmVuY2Ugb3Igc2FtZSBwcmltaXRpdmUgdmFsdWVcclxuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XHJcblxyXG4gIC8vIEhhbmRsZSBudWxsIC8gdW5kZWZpbmVkXHJcbiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBhID09PSBiO1xyXG5cclxuICAvLyBEaWZmZXJlbnQgdHlwZXNcclxuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gIC8vIERhdGUgY29tcGFyaXNvblxyXG4gIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcclxuICB9XHJcblxyXG4gIC8vIE5vbi1vYmplY3QgdmFsdWVzIChudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgc3ltYm9sKVxyXG4gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcpIHtcclxuICAgIHJldHVybiBPYmplY3QuaXMoYSwgYik7XHJcbiAgfVxyXG5cclxuICAvLyBDaXJjdWxhciByZWZlcmVuY2UgaGFuZGxpbmdcclxuICBpZiAodmlzaXRlZC5nZXQoYSkgPT09IGIpIHJldHVybiB0cnVlO1xyXG4gIHZpc2l0ZWQuc2V0KGEsIGIpO1xyXG5cclxuICAvLyBBcnJheSBjb21wYXJpc29uIChvcmRlciBtYXR0ZXJzKVxyXG4gIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghZGVlcEVxdWFsKGFbaV0sIGJbaV0sIHZpc2l0ZWQpKSByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIE9iamVjdCBjb21wYXJpc29uIChwcm9wZXJ0eSBvcmRlciBkb2VzIE5PVCBtYXR0ZXIpXHJcbiAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcclxuICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xyXG5cclxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcclxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIGtleSkpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCB2aXNpdGVkKSkgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuIl19
@@ -0,0 +1,7 @@
1
+ import { take } from 'rxjs/operators';
2
+ export function subscribeOnce(source$, next) {
3
+ source$
4
+ .pipe(take(1))
5
+ .subscribe(next);
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3V0aWxzL29ic2VydmFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE1BQU0sVUFBVSxhQUFhLENBQzNCLE9BQXNCLEVBQ3RCLElBQXdCO0lBRXhCLE9BQU87U0FDSixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2IsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlT25jZTxUPihcclxuICBzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+LFxyXG4gIG5leHQ6ICh2YWx1ZTogVCkgPT4gdm9pZFxyXG4pOiB2b2lkIHtcclxuICBzb3VyY2UkXHJcbiAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgLnN1YnNjcmliZShuZXh0KTtcclxufVxyXG4iXX0=
@@ -1,3 +1,5 @@
1
+ const IS_PROXY = Symbol('IS_PROXY');
2
+ const RAW_TARGET = Symbol('RAW_TARGET');
1
3
  export function bindFunction(fn, context) {
2
4
  if (fn.bind && context && fn.prototype !== undefined) {
3
5
  return fn.bind(context);
@@ -7,10 +9,16 @@ export function bindFunction(fn, context) {
7
9
  export function toProxy(instance, seen = new WeakMap()) {
8
10
  if (instance === null || typeof instance !== 'object')
9
11
  return instance;
12
+ if (instance[IS_PROXY])
13
+ return instance;
10
14
  if (seen.has(instance))
11
15
  return seen.get(instance);
12
16
  const proxy = new Proxy(instance, {
13
17
  get: (target, property, receiver) => {
18
+ if (property === IS_PROXY)
19
+ return true;
20
+ if (property === RAW_TARGET)
21
+ return target;
14
22
  let value;
15
23
  try {
16
24
  value = Reflect.get(target, property, receiver);
@@ -32,10 +40,19 @@ export function toProxy(instance, seen = new WeakMap()) {
32
40
  return seen.get(value);
33
41
  const arrayProxy = new Proxy(value, {
34
42
  get(arrTarget, index, arrReceiver) {
43
+ if (index === IS_PROXY)
44
+ return true;
45
+ if (index === RAW_TARGET)
46
+ return arrTarget;
35
47
  const item = Reflect.get(arrTarget, index, arrReceiver);
36
48
  return typeof item === 'object' && item !== null
37
49
  ? toProxy(item, seen)
38
50
  : item;
51
+ },
52
+ has(arrTarget, key) {
53
+ if (key === IS_PROXY || key === RAW_TARGET)
54
+ return true;
55
+ return key in arrTarget;
39
56
  }
40
57
  });
41
58
  seen.set(value, arrayProxy);
@@ -46,10 +63,20 @@ export function toProxy(instance, seen = new WeakMap()) {
46
63
  return value;
47
64
  },
48
65
  has(target, key) {
66
+ if (key === IS_PROXY || key === RAW_TARGET)
67
+ return true;
49
68
  return key in target;
50
69
  }
51
70
  });
52
71
  seen.set(instance, proxy);
53
72
  return proxy;
54
73
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi91dGlscy9wcm94eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsWUFBWSxDQUFDLEVBQVksRUFBRSxPQUFZO0lBQ3JELElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNyRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsUUFBYSxFQUFFLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRTtJQUN6RCxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3ZFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1FBQ2hDLEdBQUcsRUFBRSxDQUFDLE1BQVcsRUFBRSxRQUFxQixFQUFFLFFBQWEsRUFBRSxFQUFFO1lBQ3pELElBQUksS0FBVSxDQUFDO1lBQ2YsSUFBSSxDQUFDO2dCQUNILEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFFeEUsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2hELElBQUksS0FBSyxZQUFZLElBQUksSUFBSSxLQUFLLFlBQVksTUFBTSxJQUFJLEtBQUssWUFBWSxHQUFHLElBQUksS0FBSyxZQUFZLEdBQUcsRUFBRSxDQUFDO29CQUNyRyxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN6QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO3dCQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO3dCQUNsQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXOzRCQUMvQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7NEJBQ3hELE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJO2dDQUM5QyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7Z0NBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ1gsQ0FBQztxQkFDRixDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzVCLE9BQU8sVUFBVSxDQUFDO2dCQUNwQixDQUFDO2dCQUVELE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHO1lBQ2IsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDO1FBQ3ZCLENBQUM7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gYmluZEZ1bmN0aW9uKGZuOiBGdW5jdGlvbiwgY29udGV4dDogYW55KSB7XHJcbiAgaWYgKGZuLmJpbmQgJiYgY29udGV4dCAmJiBmbi5wcm90b3R5cGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgcmV0dXJuIGZuLmJpbmQoY29udGV4dCk7XHJcbiAgfVxyXG4gIHJldHVybiAoLi4uYXJnczogYW55W10pID0+IGZuLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdG9Qcm94eShpbnN0YW5jZTogYW55LCBzZWVuID0gbmV3IFdlYWtNYXAoKSk6IGFueSB7ICBcclxuICBpZiAoaW5zdGFuY2UgPT09IG51bGwgfHwgdHlwZW9mIGluc3RhbmNlICE9PSAnb2JqZWN0JykgcmV0dXJuIGluc3RhbmNlO1xyXG4gIGlmIChzZWVuLmhhcyhpbnN0YW5jZSkpIHJldHVybiBzZWVuLmdldChpbnN0YW5jZSk7XHJcblxyXG4gIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KGluc3RhbmNlLCB7XHJcbiAgICBnZXQ6ICh0YXJnZXQ6IGFueSwgcHJvcGVydHk6IFByb3BlcnR5S2V5LCByZWNlaXZlcjogYW55KSA9PiB7XHJcbiAgICAgIGxldCB2YWx1ZTogYW55O1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnc3ltYm9sJyB8fCBwcm9wZXJ0eSA9PT0gJ3RvSlNPTicpIHJldHVybiB2YWx1ZTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gYmluZEZ1bmN0aW9uKHZhbHVlLCBpbnN0YW5jZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fCB2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSByZXR1cm4gc2Vlbi5nZXQodmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgYXJyYXlQcm94eSA9IG5ldyBQcm94eSh2YWx1ZSwge1xyXG4gICAgICAgICAgICBnZXQoYXJyVGFyZ2V0LCBpbmRleCwgYXJyUmVjZWl2ZXIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gUmVmbGVjdC5nZXQoYXJyVGFyZ2V0LCBpbmRleCwgYXJyUmVjZWl2ZXIpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgPyB0b1Byb3h5KGl0ZW0sIHNlZW4pXHJcbiAgICAgICAgICAgICAgICA6IGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc2Vlbi5zZXQodmFsdWUsIGFycmF5UHJveHkpO1xyXG4gICAgICAgICAgcmV0dXJuIGFycmF5UHJveHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG9Qcm94eSh2YWx1ZSwgc2Vlbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0sXHJcbiAgICBoYXModGFyZ2V0LCBrZXkpIHtcclxuICAgICAgcmV0dXJuIGtleSBpbiB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHNlZW4uc2V0KGluc3RhbmNlLCBwcm94eSk7XHJcbiAgcmV0dXJuIHByb3h5O1xyXG59XHJcbiJdfQ==
74
+ export function isProxy(value) {
75
+ return !!value && typeof value === 'object' && value[IS_PROXY] === true;
76
+ }
77
+ export function getTarget(value) {
78
+ if (!isProxy(value))
79
+ return value;
80
+ return value[RAW_TARGET];
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi91dGlscy9wcm94eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRXhDLE1BQU0sVUFBVSxZQUFZLENBQUMsRUFBWSxFQUFFLE9BQVk7SUFDckQsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxFQUFFLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3JELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxRQUFhLEVBQUUsSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFO0lBQ3pELElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDdkUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDeEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVsRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7UUFDaEMsR0FBRyxFQUFFLENBQUMsTUFBVyxFQUFFLFFBQXFCLEVBQUUsUUFBYSxFQUFFLEVBQUU7WUFDekQsSUFBSSxRQUFRLEtBQUssUUFBUTtn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LEtBQUssSUFBSSxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQVU7SUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUNqQyxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgSVNfUFJPWFkgPSBTeW1ib2woJ0lTX1BST1hZJyk7XHJcbmNvbnN0IFJBV19UQVJHRVQgPSBTeW1ib2woJ1JBV19UQVJHRVQnKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBiaW5kRnVuY3Rpb24oZm46IEZ1bmN0aW9uLCBjb250ZXh0OiBhbnkpIHtcclxuICBpZiAoZm4uYmluZCAmJiBjb250ZXh0ICYmIGZuLnByb3RvdHlwZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gZm4uYmluZChjb250ZXh0KTtcclxuICB9XHJcbiAgcmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4gZm4uYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0b1Byb3h5KGluc3RhbmNlOiBhbnksIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogYW55IHsgIFxyXG4gIGlmIChpbnN0YW5jZSA9PT0gbnVsbCB8fCB0eXBlb2YgaW5zdGFuY2UgIT09ICdvYmplY3QnKSByZXR1cm4gaW5zdGFuY2U7XHJcbiAgaWYgKGluc3RhbmNlW0lTX1BST1hZXSkgcmV0dXJuIGluc3RhbmNlO1xyXG4gIGlmIChzZWVuLmhhcyhpbnN0YW5jZSkpIHJldHVybiBzZWVuLmdldChpbnN0YW5jZSk7XHJcblxyXG4gIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KGluc3RhbmNlLCB7XHJcbiAgICBnZXQ6ICh0YXJnZXQ6IGFueSwgcHJvcGVydHk6IFByb3BlcnR5S2V5LCByZWNlaXZlcjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChwcm9wZXJ0eSA9PT0gSVNfUFJPWFkpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAocHJvcGVydHkgPT09IFJBV19UQVJHRVQpIHJldHVybiB0YXJnZXQ7XHJcbiAgICAgIGxldCB2YWx1ZTogYW55O1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnc3ltYm9sJyB8fCBwcm9wZXJ0eSA9PT0gJ3RvSlNPTicpIHJldHVybiB2YWx1ZTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gYmluZEZ1bmN0aW9uKHZhbHVlLCBpbnN0YW5jZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCB8fCB2YWx1ZSBpbnN0YW5jZW9mIE1hcCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSByZXR1cm4gc2Vlbi5nZXQodmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgYXJyYXlQcm94eSA9IG5ldyBQcm94eSh2YWx1ZSwge1xyXG4gICAgICAgICAgICBnZXQoYXJyVGFyZ2V0LCBpbmRleCwgYXJyUmVjZWl2ZXIpIHtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IElTX1BST1hZKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IFJBV19UQVJHRVQpIHJldHVybiBhcnJUYXJnZXQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IFJlZmxlY3QuZ2V0KGFyclRhcmdldCwgaW5kZXgsIGFyclJlY2VpdmVyKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGxcclxuICAgICAgICAgICAgICAgID8gdG9Qcm94eShpdGVtLCBzZWVuKVxyXG4gICAgICAgICAgICAgICAgOiBpdGVtO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBoYXMoYXJyVGFyZ2V0LCBrZXkpIHtcclxuICAgICAgICAgICAgICBpZiAoa2V5ID09PSBJU19QUk9YWSB8fCBrZXkgPT09IFJBV19UQVJHRVQpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gYXJyVGFyZ2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHNlZW4uc2V0KHZhbHVlLCBhcnJheVByb3h5KTtcclxuICAgICAgICAgIHJldHVybiBhcnJheVByb3h5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRvUHJveHkodmFsdWUsIHNlZW4pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9LFxyXG4gICAgaGFzKHRhcmdldCwga2V5KSB7XHJcbiAgICAgIGlmIChrZXkgPT09IElTX1BST1hZIHx8IGtleSA9PT0gUkFXX1RBUkdFVCkgcmV0dXJuIHRydWU7XHJcbiAgICAgIHJldHVybiBrZXkgaW4gdGFyZ2V0O1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBzZWVuLnNldChpbnN0YW5jZSwgcHJveHkpO1xyXG4gIHJldHVybiBwcm94eTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJveHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWVbSVNfUFJPWFldID09PSB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0KHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gIGlmICghaXNQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZVxyXG4gIHJldHVybiB2YWx1ZVtSQVdfVEFSR0VUXTtcclxufVxyXG4iXX0=
@@ -0,0 +1,67 @@
1
+ export function resolveRefs(input, resolver, options = {}) {
2
+ const { mergeRef = false } = options;
3
+ function visit(node, parent, key, root) {
4
+ // Array
5
+ if (Array.isArray(node)) {
6
+ return node.map((v, i) => visit(v, node, i, root));
7
+ }
8
+ // Object
9
+ if (node && typeof node === 'object') {
10
+ if (Object.prototype.hasOwnProperty.call(node, '$ref') &&
11
+ typeof node.$ref === 'string') {
12
+ const resolved = resolver(node.$ref, { parent, key, root });
13
+ if (mergeRef) {
14
+ const { $ref, ...overrides } = node;
15
+ return {
16
+ ...resolved,
17
+ ...overrides
18
+ };
19
+ }
20
+ return resolved;
21
+ }
22
+ const result = {};
23
+ for (const k of Object.keys(node)) {
24
+ result[k] = visit(node[k], node, k, root);
25
+ }
26
+ return result;
27
+ }
28
+ return node;
29
+ }
30
+ return visit(input, null, null, input);
31
+ }
32
+ export async function resolveRefsAsync(input, resolver, options = {}) {
33
+ const { mergeRef = false } = options;
34
+ async function visit(node, parent, key, root) {
35
+ // Array
36
+ if (Array.isArray(node)) {
37
+ const result = [];
38
+ for (let i = 0; i < node.length; i++) {
39
+ result[i] = await visit(node[i], node, i, root);
40
+ }
41
+ return result;
42
+ }
43
+ // Object
44
+ if (node && typeof node === 'object') {
45
+ if (Object.prototype.hasOwnProperty.call(node, '$ref') &&
46
+ typeof node.$ref === 'string') {
47
+ const resolved = await resolver(node.$ref, { parent, key, root });
48
+ if (mergeRef) {
49
+ const { $ref, ...overrides } = node;
50
+ return {
51
+ ...resolved,
52
+ ...overrides
53
+ };
54
+ }
55
+ return resolved;
56
+ }
57
+ const result = {};
58
+ for (const k of Object.keys(node)) {
59
+ result[k] = await visit(node[k], node, k, root);
60
+ }
61
+ return result;
62
+ }
63
+ return node;
64
+ }
65
+ return visit(input, null, null, input);
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZVJlZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi91dGlscy9yZXNvbHZlUmVmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQkEsTUFBTSxVQUFVLFdBQVcsQ0FDekIsS0FBUSxFQUNSLFFBQXFCLEVBQ3JCLFVBQThCLEVBQUU7SUFHaEMsTUFBTSxFQUFFLFFBQVEsR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFckMsU0FBUyxLQUFLLENBQ1osSUFBUyxFQUNULE1BQVcsRUFDWCxHQUFRLEVBQ1IsSUFBUztRQUdULFFBQVE7UUFDUixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsU0FBUztRQUNULElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBRXJDLElBQ0UsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7Z0JBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQzdCLENBQUM7Z0JBRUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRTVELElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2IsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztvQkFDcEMsT0FBTzt3QkFDTCxHQUFHLFFBQVE7d0JBQ1gsR0FBRyxTQUFTO3FCQUNiLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUdELE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLEtBQVEsRUFDUixRQUEwQixFQUMxQixVQUE4QixFQUFFO0lBR2hDLE1BQU0sRUFBRSxRQUFRLEdBQUcsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXJDLEtBQUssVUFBVSxLQUFLLENBQ2xCLElBQVMsRUFDVCxNQUFXLEVBQ1gsR0FBUSxFQUNSLElBQVM7UUFHVCxRQUFRO1FBQ1IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELFNBQVM7UUFDVCxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUVyQyxJQUNFLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO2dCQUNsRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUM3QixDQUFDO2dCQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRWxFLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2IsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztvQkFDcEMsT0FBTzt3QkFDTCxHQUFHLFFBQVE7d0JBQ1gsR0FBRyxTQUFTO3FCQUNiLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQVEsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBSZWZDb250ZXh0IHtcclxuICBwYXJlbnQ6IGFueTtcclxuICBrZXk6IHN0cmluZyB8IG51bWJlciB8IG51bGw7XHJcbiAgcm9vdDogYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWZSZXNvbHZlciA9IChcclxuICByZWY6IHN0cmluZyxcclxuICBjdHg6IFJlZkNvbnRleHRcclxuKSA9PiBhbnk7XHJcblxyXG5leHBvcnQgdHlwZSBBc3luY1JlZlJlc29sdmVyID0gKFxyXG4gIHJlZjogc3RyaW5nLFxyXG4gIGN0eDogUmVmQ29udGV4dFxyXG4pID0+IFByb21pc2U8YW55PjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZVJlZnNPcHRpb25zIHtcclxuICBtZXJnZVJlZj86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUmVmczxUPihcclxuICBpbnB1dDogVCxcclxuICByZXNvbHZlcjogUmVmUmVzb2x2ZXIsXHJcbiAgb3B0aW9uczogUmVzb2x2ZVJlZnNPcHRpb25zID0ge31cclxuKTogVCB7XHJcblxyXG4gIGNvbnN0IHsgbWVyZ2VSZWYgPSBmYWxzZSB9ID0gb3B0aW9ucztcclxuXHJcbiAgZnVuY3Rpb24gdmlzaXQoXHJcbiAgICBub2RlOiBhbnksXHJcbiAgICBwYXJlbnQ6IGFueSxcclxuICAgIGtleTogYW55LFxyXG4gICAgcm9vdDogYW55XHJcbiAgKTogYW55IHtcclxuXHJcbiAgICAvLyBBcnJheVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcclxuICAgICAgcmV0dXJuIG5vZGUubWFwKCh2LCBpKSA9PiB2aXNpdCh2LCBub2RlLCBpLCByb290KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT2JqZWN0XHJcbiAgICBpZiAobm9kZSAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgJyRyZWYnKSAmJlxyXG4gICAgICAgIHR5cGVvZiBub2RlLiRyZWYgPT09ICdzdHJpbmcnXHJcbiAgICAgICkge1xyXG5cclxuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVyKG5vZGUuJHJlZiwgeyBwYXJlbnQsIGtleSwgcm9vdCB9KTtcclxuXHJcbiAgICAgICAgaWYgKG1lcmdlUmVmKSB7XHJcbiAgICAgICAgICBjb25zdCB7ICRyZWYsIC4uLm92ZXJyaWRlcyB9ID0gbm9kZTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnJlc29sdmVkLFxyXG4gICAgICAgICAgICAuLi5vdmVycmlkZXNcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcbiAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhub2RlKSkge1xyXG4gICAgICAgIHJlc3VsdFtrXSA9IHZpc2l0KG5vZGVba10sIG5vZGUsIGssIHJvb3QpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdmlzaXQoaW5wdXQsIG51bGwsIG51bGwsIGlucHV0KTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUmVmc0FzeW5jPFQ+KFxyXG4gIGlucHV0OiBULFxyXG4gIHJlc29sdmVyOiBBc3luY1JlZlJlc29sdmVyLFxyXG4gIG9wdGlvbnM6IFJlc29sdmVSZWZzT3B0aW9ucyA9IHt9XHJcbik6IFByb21pc2U8VD4ge1xyXG5cclxuICBjb25zdCB7IG1lcmdlUmVmID0gZmFsc2UgfSA9IG9wdGlvbnM7XHJcblxyXG4gIGFzeW5jIGZ1bmN0aW9uIHZpc2l0KFxyXG4gICAgbm9kZTogYW55LFxyXG4gICAgcGFyZW50OiBhbnksXHJcbiAgICBrZXk6IGFueSxcclxuICAgIHJvb3Q6IGFueVxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcblxyXG4gICAgLy8gQXJyYXlcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICByZXN1bHRbaV0gPSBhd2FpdCB2aXNpdChub2RlW2ldLCBub2RlLCBpLCByb290KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9iamVjdFxyXG4gICAgaWYgKG5vZGUgJiYgdHlwZW9mIG5vZGUgPT09ICdvYmplY3QnKSB7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsICckcmVmJykgJiZcclxuICAgICAgICB0eXBlb2Ygbm9kZS4kcmVmID09PSAnc3RyaW5nJ1xyXG4gICAgICApIHtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlcihub2RlLiRyZWYsIHsgcGFyZW50LCBrZXksIHJvb3QgfSk7XHJcblxyXG4gICAgICAgIGlmIChtZXJnZVJlZikge1xyXG4gICAgICAgICAgY29uc3QgeyAkcmVmLCAuLi5vdmVycmlkZXMgfSA9IG5vZGU7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5yZXNvbHZlZCxcclxuICAgICAgICAgICAgLi4ub3ZlcnJpZGVzXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMobm9kZSkpIHtcclxuICAgICAgICByZXN1bHRba10gPSBhd2FpdCB2aXNpdChub2RlW2tdLCBub2RlLCBrLCByb290KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBub2RlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHZpc2l0KGlucHV0LCBudWxsLCBudWxsLCBpbnB1dCk7XHJcbn1cclxuXHJcblxyXG4iXX0=
@@ -1,6 +1,9 @@
1
1
  export * from './lib/dynamic-form/dynamic-form.component';
2
2
  export * from './lib/utils/toFormData';
3
3
  export * from './lib/utils/syncronize';
4
+ export * from './lib/utils/resolveRefs';
5
+ export * from './lib/utils/observable';
6
+ export * from './lib/utils/deepEqual';
4
7
  export * from './lib/services/toast.service';
5
8
  export * from './lib/services/sanitize.service';
6
9
  export * from './lib/services/feel.service';
@@ -13,4 +16,5 @@ export * from './lib/services/form.service';
13
16
  export * from './lib/interact/confirmation';
14
17
  export * from './lib/interact/notification';
15
18
  export * from './lib/interact/prompt';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJDQUEyQyxDQUFDO0FBRTFELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQztBQUV2QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3RvRm9ybURhdGEnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9zeW5jcm9uaXplJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zYW5pdGl6ZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZmVlbC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvbWFya2Rvd24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Njb3BlLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyYWN0L2NvbmZpcm1hdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyYWN0L25vdGlmaWNhdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyYWN0L3Byb21wdCc7XHJcbiJdfQ==
19
+ export * from './lib/builtIn/builtIn';
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJDQUEyQyxDQUFDO0FBRTFELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvdG9Gb3JtRGF0YSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3N5bmNyb25pemUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9yZXNvbHZlUmVmcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL29ic2VydmFibGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9kZWVwRXF1YWwnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvdG9hc3Quc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Nhbml0aXplLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9mZWVsLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tYXJrZG93bi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvc2NvcGUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJhY3QvY29uZmlybWF0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJhY3Qvbm90aWZpY2F0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJhY3QvcHJvbXB0JztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1aWx0SW4vYnVpbHRJbic7XHJcbiJdfQ==