@wemake4u/form-player-se 1.0.24 → 1.0.26

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 (60) hide show
  1. package/esm2022/lib/dialog/dialog.component.mjs +15 -7
  2. package/esm2022/lib/directives/collapse.directive.mjs +20 -12
  3. package/esm2022/lib/directives/date.directive.mjs +2 -2
  4. package/esm2022/lib/directives/dialog.directive.mjs +2 -1
  5. package/esm2022/lib/directives/dropdown.directive.mjs +23 -5
  6. package/esm2022/lib/directives/formIndex.directive.mjs +25 -0
  7. package/esm2022/lib/directives/grid.directive.mjs +64 -19
  8. package/esm2022/lib/directives/readonly.directive.mjs +101 -0
  9. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +51 -25
  10. package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +123 -107
  11. package/esm2022/lib/locale/locale-de.mjs +3 -2
  12. package/esm2022/lib/locale/locale-en.mjs +3 -2
  13. package/esm2022/lib/locale/locale-es.mjs +3 -2
  14. package/esm2022/lib/locale/locale-fr.mjs +3 -2
  15. package/esm2022/lib/locale/locale-it.mjs +3 -2
  16. package/esm2022/lib/locale/locale-pt.mjs +3 -2
  17. package/esm2022/lib/services/chart.service.mjs +62 -56
  18. package/esm2022/lib/services/dialog.service.mjs +17 -2
  19. package/esm2022/lib/services/feel.service.mjs +186 -19
  20. package/esm2022/lib/services/form.service.mjs +100 -12
  21. package/esm2022/lib/services/formatter.service.mjs +68 -54
  22. package/esm2022/lib/services/function.service.mjs +2 -4
  23. package/esm2022/lib/services/grid.service.mjs +163 -51
  24. package/esm2022/lib/services/metadata.service.mjs +1 -8
  25. package/esm2022/lib/services/programmability.service.mjs +318 -64
  26. package/esm2022/lib/services/weak.service.mjs +3 -5
  27. package/esm2022/lib/utils/groupByRow.mjs +3 -1
  28. package/fesm2022/wemake4u-form-player-se.mjs +1337 -582
  29. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  30. package/lib/components/deleteRowRenderer/deleteRowRenderer.component.d.ts +1 -0
  31. package/lib/components/objectURLRenderer/objectURLRenderer.component.d.ts +1 -0
  32. package/lib/components/setFilter/setFilter.component.d.ts +1 -0
  33. package/lib/dialog/dialog.component.d.ts +11 -0
  34. package/lib/directives/collapse.directive.d.ts +7 -4
  35. package/lib/directives/dropdown.directive.d.ts +4 -0
  36. package/lib/directives/formIndex.directive.d.ts +10 -0
  37. package/lib/directives/grid.directive.d.ts +12 -5
  38. package/lib/directives/{disable.directive.d.ts → readonly.directive.d.ts} +7 -4
  39. package/lib/dynamic-fields/dynamic-fields.component.d.ts +27 -4
  40. package/lib/dynamic-form/dynamic-form.component.d.ts +19 -10
  41. package/lib/locale/locale-de.d.ts +1 -0
  42. package/lib/locale/locale-en.d.ts +1 -0
  43. package/lib/locale/locale-es.d.ts +1 -0
  44. package/lib/locale/locale-fr.d.ts +1 -0
  45. package/lib/locale/locale-it.d.ts +1 -0
  46. package/lib/locale/locale-pt.d.ts +1 -0
  47. package/lib/locale/locale.d.ts +7 -0
  48. package/lib/services/chart.service.d.ts +5 -2
  49. package/lib/services/dialog.service.d.ts +1 -1
  50. package/lib/services/feel.service.d.ts +8 -0
  51. package/lib/services/form.service.d.ts +12 -1
  52. package/lib/services/formatter.service.d.ts +8 -6
  53. package/lib/services/grid.service.d.ts +13 -3
  54. package/lib/services/metadata.service.d.ts +0 -3
  55. package/lib/services/programmability.service.d.ts +28 -4
  56. package/lib/utils/groupByRow.d.ts +2 -0
  57. package/package.json +2 -2
  58. package/esm2022/lib/directives/disable.directive.mjs +0 -90
  59. package/esm2022/lib/directives/disable.path.directive.mjs +0 -40
  60. package/lib/directives/disable.path.directive.d.ts +0 -16
@@ -54,6 +54,20 @@ export class DialogService {
54
54
  };
55
55
  this.showDialog(formSchema, formOptions);
56
56
  }
57
+ show(text, options) {
58
+ const formSchema = this.createTextSchema(text);
59
+ const formOptions = {
60
+ type: "info",
61
+ buttons: 'OK',
62
+ ...options,
63
+ isDrawer: false,
64
+ showNav: false,
65
+ showNavButton: false,
66
+ showProgress: false,
67
+ showFormTitle: false
68
+ };
69
+ this.showDialog(formSchema, formOptions);
70
+ }
57
71
  prompt(text, defaultValue, options) {
58
72
  const formSchema = this.createInputSchema(text, defaultValue);
59
73
  const formOptions = {
@@ -73,7 +87,8 @@ export class DialogService {
73
87
  'openDialog',
74
88
  'alert',
75
89
  'info',
76
- 'confirm'
90
+ 'confirm',
91
+ 'show'
77
92
  ]);
78
93
  }
79
94
  showDialog(formSchema, options) {
@@ -140,4 +155,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
140
155
  providedIn: 'root'
141
156
  }]
142
157
  }], ctorParameters: () => [{ type: i1.SirioDialogService }] });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBR3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7OztBQUs5RSxNQUFNLE9BQU8sYUFBYTtJQUdkO0lBRFYsWUFDVSxhQUFpQztRQUFqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7SUFFekMsQ0FBQztJQUVILFVBQVUsQ0FBQyxVQUFlLEVBQUUsT0FBMkI7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZLEVBQUUsT0FBdUI7UUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sV0FBVyxHQUF1QjtZQUN0QyxHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsU0FBUztZQUNmLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLEtBQUs7WUFDZixPQUFPLEVBQUUsS0FBSztZQUNkLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGFBQWEsRUFBRSxLQUFLO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVksRUFBRSxPQUF1QjtRQUN4QyxNQUFNLFVBQVUsR0FB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QUFJOzZCQUNoQjs0QkFDRCxJQUFJLEVBQUUsZUFBZTs0QkFDckIsS0FBSyxFQUFFLE9BQU87eUJBQ2Y7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLElBQUksRUFBRSxjQUFjO29CQUNwQixlQUFlLEVBQUUsRUFBRTtpQkFDcEI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO3dHQTFJVSxhQUFhOzRHQUFiLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpcmlvRGlhbG9nU2VydmljZSwgRGlhbG9nVHlwZXMsIERpYWxvZ1NpemVzIH0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcbmltcG9ydCB7IElFdmFsdWF0b3JQcm92aWRlciB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9Cb3VuZEFycm93cyB9IGZyb20gJy4uL3V0aWxzL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHluYW1pY0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWZvcm0vZHluYW1pYy1mb3JtLmNvbXBvbmVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dTZXJ2aWNlIGltcGxlbWVudHMgSUV2YWx1YXRvclByb3ZpZGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IFNpcmlvRGlhbG9nU2VydmljZVxyXG4gICAgKVxyXG4gIHsgfVxyXG5cclxuICBvcGVuRGlhbG9nKGZvcm1TY2hlbWE6IGFueSwgb3B0aW9ucz86IEZvcm1EaWFsb2dPcHRpb25zKSB7XHJcbiAgICB0aGlzLnNob3dEaWFsb2coZm9ybVNjaGVtYSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBhbGVydCh0ZXh0OiBzdHJpbmcsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5jcmVhdGVUZXh0U2NoZW1hKHRleHQpO1xyXG4gICAgY29uc3QgZm9ybU9wdGlvbnMgOiBGb3JtRGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgdHlwZTogXCJ3YXJuaW5nXCIsXHJcbiAgICAgIGJ1dHRvbnM6ICdPSycsXHJcbiAgICAgIGlzRHJhd2VyOiBmYWxzZSxcclxuICAgICAgc2hvd05hdjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXZCdXR0b246IGZhbHNlLFxyXG4gICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgICBzaG93Rm9ybVRpdGxlOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBpbmZvKHRleHQ6IHN0cmluZywgb3B0aW9ucz86IERpYWxvZ09wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm1TY2hlbWEgPSB0aGlzLmNyZWF0ZVRleHRTY2hlbWEodGV4dCk7XHJcbiAgICBjb25zdCBmb3JtT3B0aW9uczogRm9ybURpYWxvZ09wdGlvbnMgPSB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIHR5cGU6IFwiaW5mb1wiLFxyXG4gICAgICBidXR0b25zOiAnT0snLFxyXG4gICAgICBpc0RyYXdlcjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXY6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2QnV0dG9uOiBmYWxzZSxcclxuICAgICAgc2hvd1Byb2dyZXNzOiBmYWxzZSxcclxuICAgICAgc2hvd0Zvcm1UaXRsZTogZmFsc2VcclxuICAgIH07XHJcbiAgICB0aGlzLnNob3dEaWFsb2coZm9ybVNjaGVtYSwgZm9ybU9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybSh0ZXh0OiBzdHJpbmcsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5jcmVhdGVUZXh0U2NoZW1hKHRleHQpO1xyXG4gICAgY29uc3QgZm9ybU9wdGlvbnM6IEZvcm1EaWFsb2dPcHRpb25zID0ge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICB0eXBlOiBcImluZm9cIixcclxuICAgICAgYnV0dG9uczogJ1llc05vJyxcclxuICAgICAgaXNEcmF3ZXI6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2OiBmYWxzZSxcclxuICAgICAgc2hvd05hdkJ1dHRvbjogZmFsc2UsXHJcbiAgICAgIHNob3dQcm9ncmVzczogZmFsc2UsXHJcbiAgICAgIHNob3dGb3JtVGl0bGU6IGZhbHNlXHJcbiAgICB9OyAgICBcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcm9tcHQodGV4dDogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5jcmVhdGVJbnB1dFNjaGVtYSh0ZXh0LCBkZWZhdWx0VmFsdWUpO1xyXG4gICAgY29uc3QgZm9ybU9wdGlvbnM6IEZvcm1EaWFsb2dPcHRpb25zID0ge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICB0eXBlOiBcImluZm9cIixcclxuICAgICAgYnV0dG9uczogJ09LQ2FuY2VsJyxcclxuICAgICAgaXNEcmF3ZXI6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2OiBmYWxzZSxcclxuICAgICAgc2hvd05hdkJ1dHRvbjogZmFsc2UsXHJcbiAgICAgIHNob3dQcm9ncmVzczogZmFsc2UsXHJcbiAgICAgIHNob3dGb3JtVGl0bGU6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zaG93RGlhbG9nKGZvcm1TY2hlbWEsIGZvcm1PcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldENvbnRleHQoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICByZXR1cm4gVG9Cb3VuZEFycm93cyh0aGlzLCBbXHJcbiAgICAgICdvcGVuRGlhbG9nJyxcclxuICAgICAgJ2FsZXJ0JyxcclxuICAgICAgJ2luZm8nLFxyXG4gICAgICAnY29uZmlybSdcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93RGlhbG9nKGZvcm1TY2hlbWE6IGFueSwgb3B0aW9ucz86IEZvcm1EaWFsb2dPcHRpb25zKSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIGZvcm1TY2hlbWEsXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGR5bmFtaWNGb3JtVHlwZTogRHluYW1pY0Zvcm1Db21wb25lbnRcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlXHJcbiAgICAgIC5vcGVuRGlhbG9nKERpYWxvZ0NvbXBvbmVudCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVRleHRTY2hlbWEodGV4dDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBcImZvcm1zXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcImNvbXBvbmVudHNcIjogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJ0ZXh0XCI6IHRleHQsXHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxyXG4gICAgICAgICAgICAgIFwibGF5b3V0XCI6IHtcclxuICAgICAgICAgICAgICAgIFwicm93XCI6IFwiUm93XzE0ejlteW9cIixcclxuICAgICAgICAgICAgICAgIFwiY29sdW1uc1wiOiBudWxsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBcImlkXCI6IFwiRmllbGRfMXhpYnAyclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICBcImlkXCI6IFwiRm9ybV8wbG90bTJoXCIsXHJcbiAgICAgICAgICBcInNjaGVtYVZlcnNpb25cIjogMThcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlSW5wdXRTY2hlbWEobGFiZWw6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBcImZvcm1zXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcImNvbXBvbmVudHNcIjogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJsYWJlbFwiOiBsYWJlbCxcclxuICAgICAgICAgICAgICBcImRlZmF1bHRWYWx1ZVwiOiBkZWZhdWx0VmFsdWUsXHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dGZpZWxkXCIsXHJcbiAgICAgICAgICAgICAgXCJsYXlvdXRcIjoge1xyXG4gICAgICAgICAgICAgICAgXCJyb3dcIjogXCJSb3dfMXd4ejVnZFwiLFxyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IG51bGxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIFwiaWRcIjogXCJGaWVsZF8xdGF1NTN4XCIsXHJcbiAgICAgICAgICAgICAgXCJrZXlcIjogXCJpbnB1dFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICBcImlkXCI6IFwiRm9ybV8xb250d254XCIsXHJcbiAgICAgICAgICBcInNjaGVtYVZlcnNpb25cIjogMThcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ09wdGlvbnMge1xyXG4gIHR5cGU/OiBEaWFsb2dUeXBlcztcclxuICBzaXplPzogRGlhbG9nU2l6ZXM7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgaXNEcmF3ZXI/OiBib29sZWFuOyAgXHJcbiAgY2xvc2VCdXR0b24/OiBib29sZWFuO1xyXG4gIGxhbmd1YWdlPzogc3RyaW5nO1xyXG4gIGJ1dHRvbnM/OiBEaWFsb2dCdXR0b25zOyAgXHJcbiAgb25SZXN1bHQ/OiAocmVzdWx0OiBEaWFsb2dSZXN1bHQpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybURpYWxvZ09wdGlvbnMgZXh0ZW5kcyBEaWFsb2dPcHRpb25zIHtcclxuICB2YWx1ZT86IGFueTtcclxuICBpbmplY3Rvcj86IEluamVjdG9yO1xyXG4gIHNob3dOYXY/OiBib29sZWFuO1xyXG4gIHNob3dOYXZCdXR0b24/OiBib29sZWFuO1xyXG4gIHNob3dQcm9ncmVzcz86IGJvb2xlYW47XHJcbiAgc2hvd0Zvcm1UaXRsZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nUmVzdWx0IHtcclxuICBhY3Rpb246IERpYWxvZ0FjdGlvbjtcclxuICB2YWx1ZT86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRGlhbG9nQWN0aW9uID0gJ09LJ1xyXG4gIHwgJ0NhbmNlbCdcclxuICB8ICdZZXMnXHJcbiAgfCAnTm8nXHJcbiAgfCAnQ29uZmlybSdcclxuICB8ICdDbG9zZSdcclxuICB8ICdBYm9ydCdcclxuICB8ICdSZXRyeSdcclxuICB8ICdJZ25vcmUnXHJcbiAgfCAnVHJ5J1xyXG4gIHwgJ0NvbnRpbnVlJztcclxuXHJcbmV4cG9ydCB0eXBlIERpYWxvZ0J1dHRvbnMgPSAnT0snXHJcbiAgfCAnT0tDYW5jZWwnXHJcbiAgfCAnQ29uZmlybUNhbmNlbCdcclxuICB8ICdBYm9ydFJldHJ5SWdub3JlJ1xyXG4gIHwgJ1llc05vQ2FuY2VsJ1xyXG4gIHwgJ1llc05vJ1xyXG4gIHwgJ1JldHJ5Q2FuY2VsJ1xyXG4gIHwgJ0NhbmNlbFRyeUNvbnRpbnVlJztcclxuIl19
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBR3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7OztBQUs5RSxNQUFNLE9BQU8sYUFBYTtJQUdkO0lBRFYsWUFDVSxhQUFpQztRQUFqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBb0I7SUFFekMsQ0FBQztJQUVILFVBQVUsQ0FBQyxVQUFlLEVBQUUsT0FBMkI7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZLEVBQUUsT0FBdUI7UUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sV0FBVyxHQUF1QjtZQUN0QyxHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsU0FBUztZQUNmLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLEtBQUs7WUFDZixPQUFPLEVBQUUsS0FBSztZQUNkLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLFlBQVksRUFBRSxLQUFLO1lBQ25CLGFBQWEsRUFBRSxLQUFLO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVksRUFBRSxPQUF1QjtRQUN4QyxNQUFNLFVBQVUsR0FB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LElBQUk7NkJBQ2hCOzRCQUNELElBQUksRUFBRSxlQUFlO3lCQUN0QjtxQkFDRjtvQkFDRCxNQUFNLEVBQUUsU0FBUztvQkFDakIsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLGVBQWUsRUFBRSxFQUFFO2lCQUNwQjthQUNGO1NBQ0YsQ0FBQTtJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFhLEVBQUUsWUFBcUI7UUFDNUQsT0FBTztZQUNMLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxZQUFZLEVBQUU7d0JBQ1o7NEJBQ0UsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsY0FBYyxFQUFFLFlBQVk7NEJBQzVCLE1BQU0sRUFBRSxXQUFXOzRCQUNuQixRQUFRLEVBQUU7Z0NBQ1IsS0FBSyxFQUFFLGFBQWE7Z0NBQ3BCLFNBQVMsRUFBRSxJQUFJOzZCQUNoQjs0QkFDRCxJQUFJLEVBQUUsZUFBZTs0QkFDckIsS0FBSyxFQUFFLE9BQU87eUJBQ2Y7cUJBQ0Y7b0JBQ0QsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLElBQUksRUFBRSxjQUFjO29CQUNwQixlQUFlLEVBQUUsRUFBRTtpQkFDcEI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO3dHQTFKVSxhQUFhOzRHQUFiLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpcmlvRGlhbG9nU2VydmljZSwgRGlhbG9nVHlwZXMsIERpYWxvZ1NpemVzIH0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcbmltcG9ydCB7IElFdmFsdWF0b3JQcm92aWRlciB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9Cb3VuZEFycm93cyB9IGZyb20gJy4uL3V0aWxzL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHluYW1pY0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi9keW5hbWljLWZvcm0vZHluYW1pYy1mb3JtLmNvbXBvbmVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dTZXJ2aWNlIGltcGxlbWVudHMgSUV2YWx1YXRvclByb3ZpZGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IFNpcmlvRGlhbG9nU2VydmljZVxyXG4gICAgKVxyXG4gIHsgfVxyXG5cclxuICBvcGVuRGlhbG9nKGZvcm1TY2hlbWE6IGFueSwgb3B0aW9ucz86IEZvcm1EaWFsb2dPcHRpb25zKSB7XHJcbiAgICB0aGlzLnNob3dEaWFsb2coZm9ybVNjaGVtYSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBhbGVydCh0ZXh0OiBzdHJpbmcsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5jcmVhdGVUZXh0U2NoZW1hKHRleHQpO1xyXG4gICAgY29uc3QgZm9ybU9wdGlvbnMgOiBGb3JtRGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgdHlwZTogXCJ3YXJuaW5nXCIsXHJcbiAgICAgIGJ1dHRvbnM6ICdPSycsXHJcbiAgICAgIGlzRHJhd2VyOiBmYWxzZSxcclxuICAgICAgc2hvd05hdjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXZCdXR0b246IGZhbHNlLFxyXG4gICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgICBzaG93Rm9ybVRpdGxlOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBpbmZvKHRleHQ6IHN0cmluZywgb3B0aW9ucz86IERpYWxvZ09wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm1TY2hlbWEgPSB0aGlzLmNyZWF0ZVRleHRTY2hlbWEodGV4dCk7XHJcbiAgICBjb25zdCBmb3JtT3B0aW9uczogRm9ybURpYWxvZ09wdGlvbnMgPSB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIHR5cGU6IFwiaW5mb1wiLFxyXG4gICAgICBidXR0b25zOiAnT0snLFxyXG4gICAgICBpc0RyYXdlcjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXY6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2QnV0dG9uOiBmYWxzZSxcclxuICAgICAgc2hvd1Byb2dyZXNzOiBmYWxzZSxcclxuICAgICAgc2hvd0Zvcm1UaXRsZTogZmFsc2VcclxuICAgIH07XHJcbiAgICB0aGlzLnNob3dEaWFsb2coZm9ybVNjaGVtYSwgZm9ybU9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybSh0ZXh0OiBzdHJpbmcsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKSB7XHJcbiAgICBjb25zdCBmb3JtU2NoZW1hID0gdGhpcy5jcmVhdGVUZXh0U2NoZW1hKHRleHQpO1xyXG4gICAgY29uc3QgZm9ybU9wdGlvbnM6IEZvcm1EaWFsb2dPcHRpb25zID0ge1xyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICB0eXBlOiBcImluZm9cIixcclxuICAgICAgYnV0dG9uczogJ1llc05vJyxcclxuICAgICAgaXNEcmF3ZXI6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2OiBmYWxzZSxcclxuICAgICAgc2hvd05hdkJ1dHRvbjogZmFsc2UsXHJcbiAgICAgIHNob3dQcm9ncmVzczogZmFsc2UsXHJcbiAgICAgIHNob3dGb3JtVGl0bGU6IGZhbHNlXHJcbiAgICB9OyAgICBcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBzaG93KHRleHQ6IHN0cmluZywgb3B0aW9ucz86IERpYWxvZ09wdGlvbnMpIHtcclxuICAgIGNvbnN0IGZvcm1TY2hlbWEgPSB0aGlzLmNyZWF0ZVRleHRTY2hlbWEodGV4dCk7XHJcbiAgICBjb25zdCBmb3JtT3B0aW9uczogRm9ybURpYWxvZ09wdGlvbnMgPSB7XHJcbiAgICAgIHR5cGU6IFwiaW5mb1wiLFxyXG4gICAgICBidXR0b25zOiAnT0snLFxyXG4gICAgICAuLi5vcHRpb25zLFxyXG4gICAgICBpc0RyYXdlcjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXY6IGZhbHNlLFxyXG4gICAgICBzaG93TmF2QnV0dG9uOiBmYWxzZSxcclxuICAgICAgc2hvd1Byb2dyZXNzOiBmYWxzZSxcclxuICAgICAgc2hvd0Zvcm1UaXRsZTogZmFsc2VcclxuICAgIH07XHJcbiAgICB0aGlzLnNob3dEaWFsb2coZm9ybVNjaGVtYSwgZm9ybU9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJvbXB0KHRleHQ6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nLCBvcHRpb25zPzogRGlhbG9nT3B0aW9ucykge1xyXG4gICAgY29uc3QgZm9ybVNjaGVtYSA9IHRoaXMuY3JlYXRlSW5wdXRTY2hlbWEodGV4dCwgZGVmYXVsdFZhbHVlKTtcclxuICAgIGNvbnN0IGZvcm1PcHRpb25zOiBGb3JtRGlhbG9nT3B0aW9ucyA9IHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgdHlwZTogXCJpbmZvXCIsXHJcbiAgICAgIGJ1dHRvbnM6ICdPS0NhbmNlbCcsXHJcbiAgICAgIGlzRHJhd2VyOiBmYWxzZSxcclxuICAgICAgc2hvd05hdjogZmFsc2UsXHJcbiAgICAgIHNob3dOYXZCdXR0b246IGZhbHNlLFxyXG4gICAgICBzaG93UHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgICBzaG93Rm9ybVRpdGxlOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2hvd0RpYWxvZyhmb3JtU2NoZW1hLCBmb3JtT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0KCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgcmV0dXJuIFRvQm91bmRBcnJvd3ModGhpcywgW1xyXG4gICAgICAnb3BlbkRpYWxvZycsXHJcbiAgICAgICdhbGVydCcsXHJcbiAgICAgICdpbmZvJyxcclxuICAgICAgJ2NvbmZpcm0nLFxyXG4gICAgICAnc2hvdydcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93RGlhbG9nKGZvcm1TY2hlbWE6IGFueSwgb3B0aW9ucz86IEZvcm1EaWFsb2dPcHRpb25zKSB7XHJcbiAgICBcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIGZvcm1TY2hlbWEsXHJcbiAgICAgIG9wdGlvbnMsXHJcbiAgICAgIGR5bmFtaWNGb3JtVHlwZTogRHluYW1pY0Zvcm1Db21wb25lbnRcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlXHJcbiAgICAgIC5vcGVuRGlhbG9nKERpYWxvZ0NvbXBvbmVudCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVRleHRTY2hlbWEodGV4dDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBcImZvcm1zXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcImNvbXBvbmVudHNcIjogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJ0ZXh0XCI6IHRleHQsXHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxyXG4gICAgICAgICAgICAgIFwibGF5b3V0XCI6IHtcclxuICAgICAgICAgICAgICAgIFwicm93XCI6IFwiUm93XzE0ejlteW9cIixcclxuICAgICAgICAgICAgICAgIFwiY29sdW1uc1wiOiBudWxsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBcImlkXCI6IFwiRmllbGRfMXhpYnAyclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICBcImlkXCI6IFwiRm9ybV8wbG90bTJoXCIsXHJcbiAgICAgICAgICBcInNjaGVtYVZlcnNpb25cIjogMThcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlSW5wdXRTY2hlbWEobGFiZWw6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBcImZvcm1zXCI6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBcImNvbXBvbmVudHNcIjogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJsYWJlbFwiOiBsYWJlbCxcclxuICAgICAgICAgICAgICBcImRlZmF1bHRWYWx1ZVwiOiBkZWZhdWx0VmFsdWUsXHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dGZpZWxkXCIsXHJcbiAgICAgICAgICAgICAgXCJsYXlvdXRcIjoge1xyXG4gICAgICAgICAgICAgICAgXCJyb3dcIjogXCJSb3dfMXd4ejVnZFwiLFxyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IG51bGxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIFwiaWRcIjogXCJGaWVsZF8xdGF1NTN4XCIsXHJcbiAgICAgICAgICAgICAgXCJrZXlcIjogXCJpbnB1dFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBcInR5cGVcIjogXCJkZWZhdWx0XCIsXHJcbiAgICAgICAgICBcImlkXCI6IFwiRm9ybV8xb250d254XCIsXHJcbiAgICAgICAgICBcInNjaGVtYVZlcnNpb25cIjogMThcclxuICAgICAgICB9XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ09wdGlvbnMge1xyXG4gIHR5cGU/OiBEaWFsb2dUeXBlcztcclxuICBzaXplPzogRGlhbG9nU2l6ZXM7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgaXNEcmF3ZXI/OiBib29sZWFuOyAgXHJcbiAgY2xvc2VCdXR0b24/OiBib29sZWFuO1xyXG4gIGJ1dHRvbnM/OiBEaWFsb2dCdXR0b25zOyAgXHJcbiAgb25SZXN1bHQ/OiAocmVzdWx0OiBEaWFsb2dSZXN1bHQpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybURpYWxvZ09wdGlvbnMgZXh0ZW5kcyBEaWFsb2dPcHRpb25zIHtcclxuICB2YWx1ZT86IGFueTtcclxuICBpbmplY3Rvcj86IEluamVjdG9yO1xyXG4gIHNob3dOYXY/OiBib29sZWFuO1xyXG4gIHNob3dOYXZCdXR0b24/OiBib29sZWFuO1xyXG4gIHNob3dQcm9ncmVzcz86IGJvb2xlYW47XHJcbiAgc2hvd0Zvcm1UaXRsZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nUmVzdWx0IHtcclxuICBhY3Rpb246IERpYWxvZ0FjdGlvbjtcclxuICB2YWx1ZT86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRGlhbG9nQWN0aW9uID0gJ09LJ1xyXG4gIHwgJ0NhbmNlbCdcclxuICB8ICdZZXMnXHJcbiAgfCAnTm8nXHJcbiAgfCAnQ29uZmlybSdcclxuICB8ICdDbG9zZSdcclxuICB8ICdBYm9ydCdcclxuICB8ICdSZXRyeSdcclxuICB8ICdJZ25vcmUnXHJcbiAgfCAnVHJ5J1xyXG4gIHwgJ0NvbnRpbnVlJztcclxuXHJcbmV4cG9ydCB0eXBlIERpYWxvZ0J1dHRvbnMgPSAnT0snXHJcbiAgfCAnT0tDYW5jZWwnXHJcbiAgfCAnQ29uZmlybUNhbmNlbCdcclxuICB8ICdBYm9ydFJldHJ5SWdub3JlJ1xyXG4gIHwgJ1llc05vQ2FuY2VsJ1xyXG4gIHwgJ1llc05vJ1xyXG4gIHwgJ1JldHJ5Q2FuY2VsJ1xyXG4gIHwgJ0NhbmNlbFRyeUNvbnRpbnVlJztcclxuIl19
@@ -1,7 +1,17 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { evaluate as evaluateTemplate } from 'feelers';
2
+ import { buildSimpleTree, parser, evaluate as evaluateTemplate } from 'feelers';
3
3
  import { unaryTest, evaluate, parseExpression } from 'feelin';
4
4
  import * as i0 from "@angular/core";
5
+ const PathExpression = "PathExpression";
6
+ const VariableName = "VariableName";
7
+ const FunctionInvocation = "FunctionInvocation";
8
+ const PositionalParameters = "PositionalParameters";
9
+ const NamedParameters = "NamedParameters";
10
+ const ParameterName = "ParameterName";
11
+ const StringLiteral = "StringLiteral";
12
+ const NumericLiteral = "NumericLiteral";
13
+ const List = "List";
14
+ const StatusDependency = "$status";
5
15
  export class FeelService {
6
16
  constructor() { }
7
17
  evalTemplate(template, context = {}) {
@@ -34,33 +44,190 @@ export class FeelService {
34
44
  return true;
35
45
  }
36
46
  };
47
+ const nodes = [{ type: "root", text: expression, children: [], parent: null }];
48
+ const peek = () => {
49
+ return nodes.length > 0 ? nodes[nodes.length - 1] : null;
50
+ };
51
+ const isAllowedPathExpression = (node) => {
52
+ if (node.type === VariableName) {
53
+ return true;
54
+ }
55
+ if (node.type !== PathExpression || !Array.isArray(node.children)) {
56
+ return false;
57
+ }
58
+ return node.children.every(isAllowedPathExpression);
59
+ };
60
+ const getPathExpression = (item) => {
61
+ if (item.type === VariableName) {
62
+ return [item.text];
63
+ }
64
+ if (item.type === PathExpression) {
65
+ return item.children.flatMap(getPathExpression);
66
+ }
67
+ return [];
68
+ };
37
69
  parseExpression(expression, context).iterate({
38
70
  enter: (node) => {
39
- if (node.name === 'VariableName') {
40
- const text = expression.substring(node.from, node.to);
41
- if (addSet(text)) {
42
- dependencies.push(text);
43
- }
71
+ const type = node.name;
72
+ const text = expression.substring(node.from, node.to);
73
+ const parent = peek();
74
+ const item = { type, text, children: [], parent: parent };
75
+ if (parent) {
76
+ parent.children.push(item);
44
77
  }
45
- else if (node.name === 'PathExpression') {
46
- const text = expression.substring(node.from, node.to);
47
- if (addSet(text)) {
48
- const path = [];
49
- node.iterate((subnode) => {
50
- if (subnode.name === 'VariableName') {
51
- const part = expression.substring(subnode.from, subnode.to);
52
- path.push(part);
78
+ nodes.push(item);
79
+ },
80
+ leave: (node) => {
81
+ if (nodes.length > 0) {
82
+ const item = nodes.pop();
83
+ if (!item)
84
+ return;
85
+ const parent = peek();
86
+ if (item.type === PathExpression) {
87
+ const ignore = (parent?.type === FunctionInvocation
88
+ || parent?.type === PathExpression
89
+ || item.children.length == 0
90
+ || !isAllowedPathExpression(item));
91
+ if (!ignore) {
92
+ const pathExpression = getPathExpression(item);
93
+ if (addSet(pathExpression.join('.'))) {
94
+ dependencies.push(pathExpression);
95
+ }
96
+ }
97
+ }
98
+ else if (item.type === VariableName) {
99
+ const ignore = (parent?.type === FunctionInvocation
100
+ || parent?.type === PathExpression);
101
+ if (!ignore) {
102
+ const pathExpression = item.text;
103
+ if (addSet(pathExpression)) {
104
+ dependencies.push(pathExpression);
105
+ }
106
+ }
107
+ }
108
+ else if (item.type === FunctionInvocation) {
109
+ const functionName = this.getFunctionName(item, getPathExpression);
110
+ if (functionName == "fn.status") {
111
+ const statusDeps = this.getStatusDependencies(item);
112
+ if (statusDeps && addSet(statusDeps.join('.'))) {
113
+ dependencies.push(statusDeps);
53
114
  }
54
- });
55
- dependencies.push(path);
115
+ }
56
116
  }
57
- return false;
58
117
  }
59
- return true;
60
118
  }
61
119
  });
62
120
  return dependencies;
63
121
  }
122
+ getTemplateDependencies(expression, context = {}) {
123
+ if (!expression)
124
+ return [];
125
+ const simpleTree = buildSimpleTree(parser.parse(expression), expression);
126
+ const result = [];
127
+ function traverse(nodeArray) {
128
+ for (const node of nodeArray) {
129
+ if (node.name === 'FeelBlock' && node.content) {
130
+ result.push(node.content);
131
+ }
132
+ if (node.children && node.children.length > 0) {
133
+ traverse(node.children);
134
+ }
135
+ }
136
+ }
137
+ traverse([simpleTree]);
138
+ const arrayExpression = `[ ${result.join(', ')} ]`;
139
+ return this.getDependencies(arrayExpression, context);
140
+ }
141
+ //#region Private Members
142
+ findAncestor(node, predicate) {
143
+ let current = node.parent;
144
+ while (current !== null) {
145
+ if (predicate(current)) {
146
+ return current;
147
+ }
148
+ current = current.parent;
149
+ }
150
+ return null;
151
+ }
152
+ findDescendant(node, predicate) {
153
+ for (const child of node.children) {
154
+ if (predicate(child)) {
155
+ return child;
156
+ }
157
+ const found = this.findDescendant(child, predicate);
158
+ if (found !== null) {
159
+ return found;
160
+ }
161
+ }
162
+ return null;
163
+ }
164
+ findChild(node, predicate) {
165
+ for (const child of node.children) {
166
+ if (predicate(child)) {
167
+ return child;
168
+ }
169
+ }
170
+ return null;
171
+ }
172
+ findChildren(node, predicate) {
173
+ return node.children.filter(predicate);
174
+ }
175
+ getFunctionName(node, pathResolver) {
176
+ const pathExpression = this.findChild(node, (n) => n.type === PathExpression);
177
+ if (pathExpression) {
178
+ return pathResolver(pathExpression).join('.');
179
+ }
180
+ const variableName = this.findChild(node, (n) => n.type === VariableName);
181
+ if (variableName) {
182
+ return pathResolver(variableName).join('.');
183
+ }
184
+ return null;
185
+ }
186
+ getStatusDependencies(node) {
187
+ if (node.type != FunctionInvocation)
188
+ return [];
189
+ let pathParameter = null;
190
+ const namedParameters = this.findChild(node, (n) => n.type === NamedParameters);
191
+ if (namedParameters) {
192
+ const pathName = this.findDescendant(namedParameters, (n) => n.type == ParameterName && n.text === "path");
193
+ const namedParameter = pathName?.parent;
194
+ if (namedParameter && namedParameter.children.length > 1) {
195
+ pathParameter = namedParameter.children[1];
196
+ }
197
+ }
198
+ const positionalParameters = this.findChild(node, (n) => n.type === PositionalParameters);
199
+ if (positionalParameters) {
200
+ pathParameter = positionalParameters.children[0];
201
+ }
202
+ if (pathParameter) {
203
+ const getPathExpression = (item) => {
204
+ if (item.type === StringLiteral) {
205
+ return this.splitQuoted(item.text);
206
+ }
207
+ else if (item.type === NumericLiteral) {
208
+ return [item.text];
209
+ }
210
+ else if (item.type === List) {
211
+ const items = this.findChildren(item, (n) => n.type !== "[" && n.type !== "]");
212
+ if (items.every(n => n.type === StringLiteral || n.type === NumericLiteral)) {
213
+ return items.flatMap(getPathExpression);
214
+ }
215
+ }
216
+ return [];
217
+ };
218
+ const path = getPathExpression(pathParameter);
219
+ if (path.length > 0)
220
+ return [StatusDependency, ...path];
221
+ }
222
+ return null;
223
+ }
224
+ splitQuoted(input, separator = '.') {
225
+ input = (input ?? "").slice(1, -1);
226
+ return input
227
+ .split(separator)
228
+ .map(part => part.trim())
229
+ .filter(part => part.length > 0);
230
+ }
64
231
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
65
232
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelService, providedIn: 'root' });
66
233
  }
@@ -70,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
70
237
  providedIn: 'root'
71
238
  }]
72
239
  }], ctorParameters: () => [] });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZmVlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBSzlELE1BQU0sT0FBTyxXQUFXO0lBRXRCLGdCQUFnQixDQUFDO0lBRWpCLFlBQVksQ0FBQyxRQUFnQixFQUFFLFVBQWUsRUFBRTtRQUM5QyxPQUFPLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQUEsQ0FBQztJQUVGLGNBQWMsQ0FBQyxVQUFrQixFQUFFLFVBQStCLEVBQUU7UUFDbEUsT0FBTyxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFBQSxDQUFDO0lBRUYsYUFBYSxDQUFDLFVBQWtCLEVBQUUsVUFBK0IsRUFBRSxFQUFFLFFBQWEsSUFBSTtRQUNwRixJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxDQUFDO2dCQUNPLENBQUM7WUFDUCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUFBLENBQUM7SUFFRixlQUFlLENBQUMsVUFBa0IsRUFBRSxVQUErQixFQUFFO1FBQ25FLE1BQU0sWUFBWSxHQUEwQixFQUFFLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNwQyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFO1lBQzlCLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4QixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7aUJBQ0ksQ0FBQztnQkFDSixTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixlQUFlLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMzQyxLQUFLLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO29CQUNqQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN0RCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNqQixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMxQixDQUFDO2dCQUNILENBQUM7cUJBQ0ksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFLENBQUM7b0JBQ3hDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3RELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2pCLE1BQU0sSUFBSSxHQUFhLEVBQUUsQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFOzRCQUM1QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFLENBQUM7Z0NBQ3BDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0NBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ2xCLENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7d0dBNURVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBldmFsdWF0ZSBhcyBldmFsdWF0ZVRlbXBsYXRlIH0gZnJvbSAnZmVlbGVycyc7XHJcbmltcG9ydCB7IHVuYXJ5VGVzdCwgZXZhbHVhdGUsIHBhcnNlRXhwcmVzc2lvbiB9IGZyb20gJ2ZlZWxpbic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWVsU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIGV2YWxUZW1wbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nLCBjb250ZXh0OiBhbnkgPSB7fSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZXZhbHVhdGVUZW1wbGF0ZSh0ZW1wbGF0ZSwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgZXZhbEV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nLCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiBhbnkge1xyXG4gICAgcmV0dXJuIGV2YWx1YXRlKGV4cHJlc3Npb24sIGNvbnRleHQpO1xyXG4gIH07XHJcblxyXG4gIGV2YWxVbmFyeVRlc3QoZXhwcmVzc2lvbjogc3RyaW5nLCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sIGlucHV0OiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb250ZXh0Wyc/J10gPSBpbnB1dDtcclxuICAgICAgcmV0dXJuIHVuYXJ5VGVzdChleHByZXNzaW9uLCBjb250ZXh0KTtcclxuICAgIH0gICAgXHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgZGVsZXRlIGNvbnRleHRbJz8nXTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBnZXREZXBlbmRlbmNpZXMoZXhwcmVzc2lvbjogc3RyaW5nLCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiAoc3RyaW5nIHwgc3RyaW5nW10pW10ge1xyXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10gPSBbXTtcclxuICAgIGNvbnN0IHVuaXF1ZVNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgY29uc3QgYWRkU2V0ID0gKHRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAodW5pcXVlU2V0Lmhhcyh0ZXh0KSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB1bmlxdWVTZXQuYWRkKHRleHQpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9O1xyXG4gICAgcGFyc2VFeHByZXNzaW9uKGV4cHJlc3Npb24sIGNvbnRleHQpLml0ZXJhdGUoe1xyXG4gICAgICBlbnRlcjogKG5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChub2RlLm5hbWUgPT09ICdWYXJpYWJsZU5hbWUnKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcobm9kZS5mcm9tLCBub2RlLnRvKTtcclxuICAgICAgICAgIGlmIChhZGRTZXQodGV4dCkpIHtcclxuICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2godGV4dCk7XHJcbiAgICAgICAgICB9ICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChub2RlLm5hbWUgPT09ICdQYXRoRXhwcmVzc2lvbicpIHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBleHByZXNzaW9uLnN1YnN0cmluZyhub2RlLmZyb20sIG5vZGUudG8pO1xyXG4gICAgICAgICAgaWYgKGFkZFNldCh0ZXh0KSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXRoOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICBub2RlLml0ZXJhdGUoKHN1Ym5vZGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChzdWJub2RlLm5hbWUgPT09ICdWYXJpYWJsZU5hbWUnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0ID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcoc3Vibm9kZS5mcm9tLCBzdWJub2RlLnRvKTtcclxuICAgICAgICAgICAgICAgIHBhdGgucHVzaChwYXJ0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChwYXRoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRlcGVuZGVuY2llcztcclxuICB9XHJcbn1cclxuIl19
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZmVlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsUUFBUSxJQUFJLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7QUFFOUQsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUM7QUFDeEMsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDO0FBQ3BDLE1BQU0sa0JBQWtCLEdBQUcsb0JBQW9CLENBQUM7QUFDaEQsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQUNwRCxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQUMxQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUM7QUFDdEMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDO0FBQ3RDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0FBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQixNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUtuQyxNQUFNLE9BQU8sV0FBVztJQUV0QixnQkFBZ0IsQ0FBQztJQUVqQixZQUFZLENBQUMsUUFBZ0IsRUFBRSxVQUFlLEVBQUU7UUFDOUMsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUFBLENBQUM7SUFFRixjQUFjLENBQUMsVUFBa0IsRUFBRSxVQUErQixFQUFFO1FBQ2xFLE9BQU8sUUFBUSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lB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QyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbEMsT0FBTyxLQUFLO2FBQ1QsS0FBSyxDQUFDLFNBQVMsQ0FBQzthQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO3dHQXhQVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYnVpbGRTaW1wbGVUcmVlLCBwYXJzZXIsIGV2YWx1YXRlIGFzIGV2YWx1YXRlVGVtcGxhdGUgfSBmcm9tICdmZWVsZXJzJztcclxuaW1wb3J0IHsgdW5hcnlUZXN0LCBldmFsdWF0ZSwgcGFyc2VFeHByZXNzaW9uIH0gZnJvbSAnZmVlbGluJztcclxuXHJcbmNvbnN0IFBhdGhFeHByZXNzaW9uID0gXCJQYXRoRXhwcmVzc2lvblwiO1xyXG5jb25zdCBWYXJpYWJsZU5hbWUgPSBcIlZhcmlhYmxlTmFtZVwiO1xyXG5jb25zdCBGdW5jdGlvbkludm9jYXRpb24gPSBcIkZ1bmN0aW9uSW52b2NhdGlvblwiO1xyXG5jb25zdCBQb3NpdGlvbmFsUGFyYW1ldGVycyA9IFwiUG9zaXRpb25hbFBhcmFtZXRlcnNcIjtcclxuY29uc3QgTmFtZWRQYXJhbWV0ZXJzID0gXCJOYW1lZFBhcmFtZXRlcnNcIjtcclxuY29uc3QgUGFyYW1ldGVyTmFtZSA9IFwiUGFyYW1ldGVyTmFtZVwiO1xyXG5jb25zdCBTdHJpbmdMaXRlcmFsID0gXCJTdHJpbmdMaXRlcmFsXCI7XHJcbmNvbnN0IE51bWVyaWNMaXRlcmFsID0gXCJOdW1lcmljTGl0ZXJhbFwiO1xyXG5jb25zdCBMaXN0ID0gXCJMaXN0XCI7XHJcbmNvbnN0IFN0YXR1c0RlcGVuZGVuY3kgPSBcIiRzdGF0dXNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZlZWxTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgZXZhbFRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcsIGNvbnRleHQ6IGFueSA9IHt9KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBldmFsdWF0ZVRlbXBsYXRlKHRlbXBsYXRlLCBjb250ZXh0KTtcclxuICB9O1xyXG5cclxuICBldmFsRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcsIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSk6IGFueSB7XHJcbiAgICByZXR1cm4gZXZhbHVhdGUoZXhwcmVzc2lvbiwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgZXZhbFVuYXJ5VGVzdChleHByZXNzaW9uOiBzdHJpbmcsIGNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSwgaW5wdXQ6IGFueSA9IG51bGwpOiBib29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnRleHRbJz8nXSA9IGlucHV0O1xyXG4gICAgICByZXR1cm4gdW5hcnlUZXN0KGV4cHJlc3Npb24sIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgIGRlbGV0ZSBjb250ZXh0Wyc/J107XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZ2V0RGVwZW5kZW5jaWVzKGV4cHJlc3Npb246IHN0cmluZywgY29udGV4dDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KTogKHN0cmluZyB8IHN0cmluZ1tdKVtdIHtcclxuICAgIGNvbnN0IGRlcGVuZGVuY2llczogKHN0cmluZyB8IHN0cmluZ1tdKVtdID0gW107XHJcbiAgICBjb25zdCB1bmlxdWVTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgIGNvbnN0IGFkZFNldCA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKHVuaXF1ZVNldC5oYXModGV4dCkpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdW5pcXVlU2V0LmFkZCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBub2RlczogTm9kZUl0ZW1bXSA9IFt7IHR5cGU6IFwicm9vdFwiLCB0ZXh0OiBleHByZXNzaW9uLCBjaGlsZHJlbjogW10sIHBhcmVudDogbnVsbCB9XTtcclxuXHJcbiAgICBjb25zdCBwZWVrID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gbm9kZXMubGVuZ3RoID4gMCA/IG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdIDogbnVsbDtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24gPSAobm9kZTogTm9kZUl0ZW0pOiBib29sZWFuID0+IHtcclxuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gVmFyaWFibGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gUGF0aEV4cHJlc3Npb24gfHwgIUFycmF5LmlzQXJyYXkobm9kZS5jaGlsZHJlbikpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4uZXZlcnkoaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBnZXRQYXRoRXhwcmVzc2lvbiA9IChpdGVtOiBOb2RlSXRlbSk6IHN0cmluZ1tdID0+IHtcclxuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gVmFyaWFibGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIFtpdGVtLnRleHRdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09IFBhdGhFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW4uZmxhdE1hcChnZXRQYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfTtcclxuXHJcbiAgICBwYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgY29udGV4dCkuaXRlcmF0ZSh7XHJcbiAgICAgIGVudGVyOiAobm9kZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IG5vZGUubmFtZTtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZXhwcmVzc2lvbi5zdWJzdHJpbmcobm9kZS5mcm9tLCBub2RlLnRvKTtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBwZWVrKCk7XHJcbiAgICAgICAgY29uc3QgaXRlbTogTm9kZUl0ZW0gPSB7IHR5cGUsIHRleHQsIGNoaWxkcmVuOiBbXSwgcGFyZW50OiBwYXJlbnQgfTtcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZXMucHVzaChpdGVtKTtcclxuICAgICAgfSxcclxuICAgICAgbGVhdmU6IChub2RlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAobm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IG5vZGVzLnBvcCgpO1xyXG4gICAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBwZWVrKCk7XHJcblxyXG4gICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gUGF0aEV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgY29uc3QgaWdub3JlID0gKHBhcmVudD8udHlwZSA9PT0gRnVuY3Rpb25JbnZvY2F0aW9uXHJcbiAgICAgICAgICAgICAgfHwgcGFyZW50Py50eXBlID09PSBQYXRoRXhwcmVzc2lvblxyXG4gICAgICAgICAgICAgIHx8IGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09IDBcclxuICAgICAgICAgICAgICB8fCAhaXNBbGxvd2VkUGF0aEV4cHJlc3Npb24oaXRlbSkpO1xyXG4gICAgICAgICAgICBpZiAoIWlnbm9yZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhFeHByZXNzaW9uID0gZ2V0UGF0aEV4cHJlc3Npb24oaXRlbSk7XHJcbiAgICAgICAgICAgICAgaWYgKGFkZFNldChwYXRoRXhwcmVzc2lvbi5qb2luKCcuJykpKSB7XHJcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChwYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09IFZhcmlhYmxlTmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpZ25vcmUgPSAocGFyZW50Py50eXBlID09PSBGdW5jdGlvbkludm9jYXRpb25cclxuICAgICAgICAgICAgICB8fCBwYXJlbnQ/LnR5cGUgPT09IFBhdGhFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgaWYgKCFpZ25vcmUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwYXRoRXhwcmVzc2lvbiA9IGl0ZW0udGV4dDtcclxuICAgICAgICAgICAgICBpZiAoYWRkU2V0KHBhdGhFeHByZXNzaW9uKSkge1xyXG4gICAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2gocGF0aEV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChpdGVtLnR5cGUgPT09IEZ1bmN0aW9uSW52b2NhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZShpdGVtLCBnZXRQYXRoRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgIGlmIChmdW5jdGlvbk5hbWUgPT0gXCJmbi5zdGF0dXNcIikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0RlcHMgPSB0aGlzLmdldFN0YXR1c0RlcGVuZGVuY2llcyhpdGVtKTtcclxuICAgICAgICAgICAgICBpZiAoc3RhdHVzRGVwcyAmJiBhZGRTZXQoc3RhdHVzRGVwcy5qb2luKCcuJykpKSB7XHJcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaChzdGF0dXNEZXBzKTtcclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZGVwZW5kZW5jaWVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGVEZXBlbmRlbmNpZXMoZXhwcmVzc2lvbjogc3RyaW5nLCBjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pOiAoc3RyaW5nIHwgc3RyaW5nW10pW10ge1xyXG4gICAgaWYgKCFleHByZXNzaW9uKSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3Qgc2ltcGxlVHJlZSA9IGJ1aWxkU2ltcGxlVHJlZShwYXJzZXIucGFyc2UoZXhwcmVzc2lvbiksIGV4cHJlc3Npb24pO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBmdW5jdGlvbiB0cmF2ZXJzZShub2RlQXJyYXk6IGFueVtdKSB7XHJcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2RlQXJyYXkpIHtcclxuICAgICAgICBpZiAobm9kZS5uYW1lID09PSAnRmVlbEJsb2NrJyAmJiBub2RlLmNvbnRlbnQpIHtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUuY29udGVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdHJhdmVyc2Uobm9kZS5jaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJhdmVyc2UoW3NpbXBsZVRyZWVdKTtcclxuXHJcbiAgICBjb25zdCBhcnJheUV4cHJlc3Npb24gPSBgWyAke3Jlc3VsdC5qb2luKCcsICcpfSBdYDtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5nZXREZXBlbmRlbmNpZXMoYXJyYXlFeHByZXNzaW9uLCBjb250ZXh0KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBQcml2YXRlIE1lbWJlcnNcclxuXHJcbiAgcHJpdmF0ZSBmaW5kQW5jZXN0b3Iobm9kZTogTm9kZUl0ZW0sIHByZWRpY2F0ZTogKGNoaWxkOiBOb2RlSXRlbSkgPT4gYm9vbGVhbik6IE5vZGVJdGVtIHwgbnVsbCB7XHJcbiAgICBsZXQgY3VycmVudCA9IG5vZGUucGFyZW50O1xyXG4gICAgd2hpbGUgKGN1cnJlbnQgIT09IG51bGwpIHtcclxuICAgICAgaWYgKHByZWRpY2F0ZShjdXJyZW50KSkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kRGVzY2VuZGFudChub2RlOiBOb2RlSXRlbSwgcHJlZGljYXRlOiAoY2hpbGQ6IE5vZGVJdGVtKSA9PiBib29sZWFuKTogTm9kZUl0ZW0gfCBudWxsIHtcclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZERlc2NlbmRhbnQoY2hpbGQsIHByZWRpY2F0ZSk7XHJcbiAgICAgIGlmIChmb3VuZCAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBmb3VuZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDaGlsZChub2RlOiBOb2RlSXRlbSwgcHJlZGljYXRlOiAoY2hpbGQ6IE5vZGVJdGVtKSA9PiBib29sZWFuKTogTm9kZUl0ZW0gfCBudWxsIHtcclxuICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xyXG4gICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDaGlsZHJlbihub2RlOiBOb2RlSXRlbSwgcHJlZGljYXRlOiAoY2hpbGQ6IE5vZGVJdGVtKSA9PiBib29sZWFuKTogTm9kZUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlbi5maWx0ZXIocHJlZGljYXRlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RnVuY3Rpb25OYW1lKG5vZGU6IE5vZGVJdGVtLCBwYXRoUmVzb2x2ZXI6IChpdGVtOiBOb2RlSXRlbSkgPT4gc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcclxuXHJcbiAgICBjb25zdCBwYXRoRXhwcmVzc2lvbiA9IHRoaXMuZmluZENoaWxkKG5vZGUsIChuKSA9PiBuLnR5cGUgPT09IFBhdGhFeHByZXNzaW9uKTtcclxuICAgIGlmIChwYXRoRXhwcmVzc2lvbikge1xyXG4gICAgICByZXR1cm4gcGF0aFJlc29sdmVyKHBhdGhFeHByZXNzaW9uKS5qb2luKCcuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdmFyaWFibGVOYW1lID0gdGhpcy5maW5kQ2hpbGQobm9kZSwgKG4pID0+IG4udHlwZSA9PT0gVmFyaWFibGVOYW1lKTtcclxuICAgIGlmICh2YXJpYWJsZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIHBhdGhSZXNvbHZlcih2YXJpYWJsZU5hbWUpLmpvaW4oJy4nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3RhdHVzRGVwZW5kZW5jaWVzKG5vZGU6IE5vZGVJdGVtKTogc3RyaW5nW10gfCBudWxsIHtcclxuICAgIGlmIChub2RlLnR5cGUgIT0gRnVuY3Rpb25JbnZvY2F0aW9uKSByZXR1cm4gW107XHJcblxyXG4gICAgbGV0IHBhdGhQYXJhbWV0ZXI6IE5vZGVJdGVtIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgY29uc3QgbmFtZWRQYXJhbWV0ZXJzID0gdGhpcy5maW5kQ2hpbGQobm9kZSwgKG4pID0+IG4udHlwZSA9PT0gTmFtZWRQYXJhbWV0ZXJzKTtcclxuXHJcbiAgICBpZiAobmFtZWRQYXJhbWV0ZXJzKSB7XHJcbiAgICAgIGNvbnN0IHBhdGhOYW1lID0gdGhpcy5maW5kRGVzY2VuZGFudChuYW1lZFBhcmFtZXRlcnMsIChuKSA9PiBuLnR5cGUgPT0gUGFyYW1ldGVyTmFtZSAmJiBuLnRleHQgPT09IFwicGF0aFwiKTtcclxuICAgICAgY29uc3QgbmFtZWRQYXJhbWV0ZXIgPSBwYXRoTmFtZT8ucGFyZW50O1xyXG4gICAgICBpZiAobmFtZWRQYXJhbWV0ZXIgJiYgbmFtZWRQYXJhbWV0ZXIuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHBhdGhQYXJhbWV0ZXIgPSBuYW1lZFBhcmFtZXRlci5jaGlsZHJlblsxXTtcclxuICAgICAgfSAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gdGhpcy5maW5kQ2hpbGQobm9kZSwgKG4pID0+IG4udHlwZSA9PT0gUG9zaXRpb25hbFBhcmFtZXRlcnMpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbmFsUGFyYW1ldGVycykge1xyXG4gICAgICBwYXRoUGFyYW1ldGVyID0gcG9zaXRpb25hbFBhcmFtZXRlcnMuY2hpbGRyZW5bMF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhdGhQYXJhbWV0ZXIpIHtcclxuXHJcbiAgICAgIGNvbnN0IGdldFBhdGhFeHByZXNzaW9uID0gKGl0ZW06IE5vZGVJdGVtKTogc3RyaW5nW10gPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IFN0cmluZ0xpdGVyYWwpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnNwbGl0UXVvdGVkKGl0ZW0udGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gTnVtZXJpY0xpdGVyYWwpIHtcclxuICAgICAgICAgIHJldHVybiBbaXRlbS50ZXh0XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS50eXBlID09PSBMaXN0KSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZmluZENoaWxkcmVuKGl0ZW0sIChuKSA9PiBuLnR5cGUgIT09IFwiW1wiICYmIG4udHlwZSAhPT0gXCJdXCIpO1xyXG4gICAgICAgICAgaWYgKGl0ZW1zLmV2ZXJ5KG4gPT4gbi50eXBlID09PSBTdHJpbmdMaXRlcmFsIHx8IG4udHlwZSA9PT0gTnVtZXJpY0xpdGVyYWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcy5mbGF0TWFwKGdldFBhdGhFeHByZXNzaW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcGF0aCA9IGdldFBhdGhFeHByZXNzaW9uKHBhdGhQYXJhbWV0ZXIpO1xyXG4gICAgICBpZiAocGF0aC5sZW5ndGggPiAwKSAgICAgIFxyXG4gICAgICAgIHJldHVybiBbU3RhdHVzRGVwZW5kZW5jeSwgLi4ucGF0aF07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzcGxpdFF1b3RlZChpbnB1dDogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyA9ICcuJyk6IHN0cmluZ1tdIHtcclxuICAgIGlucHV0ID0gKGlucHV0ID8/IFwiXCIpLnNsaWNlKDEsIC0xKVxyXG4gICAgcmV0dXJuIGlucHV0XHJcbiAgICAgIC5zcGxpdChzZXBhcmF0b3IpXHJcbiAgICAgIC5tYXAocGFydCA9PiBwYXJ0LnRyaW0oKSlcclxuICAgICAgLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMCk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG5cclxuaW50ZXJmYWNlIE5vZGVJdGVtIHtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGNoaWxkcmVuOiBOb2RlSXRlbVtdO1xyXG4gIHBhcmVudDogTm9kZUl0ZW0gfCBudWxsO1xyXG59XHJcbiJdfQ==