@ngx-formly/core 6.3.11 → 7.0.0-alpha.0

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 (121) hide show
  1. package/README.md +1 -0
  2. package/esm2022/json-schema/formly-json-schema.service.mjs +628 -0
  3. package/esm2022/lib/components/formly.field.mjs +292 -0
  4. package/esm2022/lib/components/formly.form.mjs +164 -0
  5. package/{esm2020 → esm2022}/lib/components/formly.template.mjs +7 -7
  6. package/esm2022/lib/core.config.mjs +36 -0
  7. package/esm2022/lib/core.mjs +20 -0
  8. package/esm2022/lib/core.module.mjs +74 -0
  9. package/esm2022/lib/extensions/core/core.mjs +148 -0
  10. package/esm2022/lib/extensions/field-expression/field-expression.mjs +250 -0
  11. package/esm2022/lib/extensions/field-expression/utils.mjs +17 -0
  12. package/esm2022/lib/extensions/field-form/field-form.mjs +141 -0
  13. package/esm2022/lib/extensions/field-form/utils.mjs +100 -0
  14. package/esm2022/lib/extensions/index.mjs +2 -0
  15. package/esm2022/lib/models/fieldconfig.cache.mjs +2 -0
  16. package/esm2022/lib/models/fieldconfig.mjs +2 -0
  17. package/esm2022/lib/services/formly.builder.mjs +100 -0
  18. package/esm2022/lib/services/formly.config.mjs +229 -0
  19. package/esm2022/lib/templates/field-array.type.mjs +84 -0
  20. package/{esm2020 → esm2022}/lib/templates/field-template.type.mjs +9 -9
  21. package/esm2022/lib/templates/field.type.mjs +57 -0
  22. package/{esm2020 → esm2022}/lib/templates/field.wrapper.mjs +4 -4
  23. package/esm2022/lib/templates/formly.attributes.mjs +187 -0
  24. package/{esm2020 → esm2022}/lib/templates/formly.group.mjs +8 -8
  25. package/{esm2020 → esm2022}/lib/templates/formly.validation-message.mjs +4 -4
  26. package/esm2022/lib/utils.mjs +312 -0
  27. package/esm2022/preset/preset.config.mjs +11 -0
  28. package/esm2022/preset/preset.module.mjs +18 -0
  29. package/{esm2020 → esm2022}/select/select-options.pipe.mjs +4 -4
  30. package/{esm2020 → esm2022}/select/select.module.mjs +5 -5
  31. package/{esm2020 → esm2022}/testing/component-factory.mjs +5 -4
  32. package/{fesm2020 → fesm2022}/ngx-formly-core-json-schema.mjs +6 -6
  33. package/fesm2022/ngx-formly-core-json-schema.mjs.map +1 -0
  34. package/{fesm2020 → fesm2022}/ngx-formly-core-preset.mjs +14 -19
  35. package/fesm2022/ngx-formly-core-preset.mjs.map +1 -0
  36. package/{fesm2020 → fesm2022}/ngx-formly-core-select.mjs +7 -7
  37. package/{fesm2020 → fesm2022}/ngx-formly-core-select.mjs.map +1 -1
  38. package/{fesm2020 → fesm2022}/ngx-formly-core-testing.mjs +4 -3
  39. package/fesm2022/ngx-formly-core-testing.mjs.map +1 -0
  40. package/{fesm2020 → fesm2022}/ngx-formly-core.mjs +1750 -1705
  41. package/fesm2022/ngx-formly-core.mjs.map +1 -0
  42. package/lib/components/formly.field.d.ts +5 -1
  43. package/lib/components/formly.form.d.ts +8 -4
  44. package/lib/components/formly.template.d.ts +1 -1
  45. package/lib/core.config.d.ts +10 -0
  46. package/lib/core.d.ts +4 -3
  47. package/lib/core.module.d.ts +2 -5
  48. package/lib/extensions/field-expression/utils.d.ts +1 -1
  49. package/lib/extensions/index.d.ts +1 -0
  50. package/lib/models/config.d.ts +1 -1
  51. package/lib/models/fieldconfig.cache.d.ts +3 -3
  52. package/lib/models/fieldconfig.d.ts +8 -7
  53. package/lib/services/formly.builder.d.ts +5 -5
  54. package/lib/services/formly.config.d.ts +2 -6
  55. package/lib/templates/field-array.type.d.ts +3 -3
  56. package/lib/templates/field-template.type.d.ts +1 -1
  57. package/lib/templates/field.type.d.ts +5 -5
  58. package/lib/templates/field.wrapper.d.ts +1 -1
  59. package/lib/templates/formly.attributes.d.ts +1 -1
  60. package/lib/templates/formly.group.d.ts +1 -1
  61. package/lib/templates/formly.validation-message.d.ts +1 -1
  62. package/lib/utils.d.ts +3 -3
  63. package/package.json +23 -37
  64. package/preset/preset.config.d.ts +2 -0
  65. package/select/select-options.pipe.d.ts +1 -1
  66. package/esm2020/json-schema/formly-json-schema.service.mjs +0 -628
  67. package/esm2020/lib/components/formly.field.mjs +0 -284
  68. package/esm2020/lib/components/formly.form.mjs +0 -147
  69. package/esm2020/lib/core.mjs +0 -19
  70. package/esm2020/lib/core.module.mjs +0 -91
  71. package/esm2020/lib/extensions/core/core.mjs +0 -148
  72. package/esm2020/lib/extensions/field-expression/field-expression.mjs +0 -250
  73. package/esm2020/lib/extensions/field-expression/utils.mjs +0 -17
  74. package/esm2020/lib/extensions/field-form/field-form.mjs +0 -141
  75. package/esm2020/lib/extensions/field-form/utils.mjs +0 -100
  76. package/esm2020/lib/models/fieldconfig.cache.mjs +0 -2
  77. package/esm2020/lib/models/fieldconfig.mjs +0 -2
  78. package/esm2020/lib/services/formly.builder.mjs +0 -93
  79. package/esm2020/lib/services/formly.config.mjs +0 -229
  80. package/esm2020/lib/templates/field-array.type.mjs +0 -84
  81. package/esm2020/lib/templates/field.type.mjs +0 -57
  82. package/esm2020/lib/templates/formly.attributes.mjs +0 -187
  83. package/esm2020/lib/utils.mjs +0 -312
  84. package/esm2020/preset/preset.module.mjs +0 -32
  85. package/fesm2015/ngx-formly-core-json-schema.mjs +0 -615
  86. package/fesm2015/ngx-formly-core-json-schema.mjs.map +0 -1
  87. package/fesm2015/ngx-formly-core-preset.mjs +0 -69
  88. package/fesm2015/ngx-formly-core-preset.mjs.map +0 -1
  89. package/fesm2015/ngx-formly-core-select.mjs +0 -120
  90. package/fesm2015/ngx-formly-core-select.mjs.map +0 -1
  91. package/fesm2015/ngx-formly-core-testing.mjs +0 -87
  92. package/fesm2015/ngx-formly-core-testing.mjs.map +0 -1
  93. package/fesm2015/ngx-formly-core.mjs +0 -2417
  94. package/fesm2015/ngx-formly-core.mjs.map +0 -1
  95. package/fesm2020/ngx-formly-core-json-schema.mjs.map +0 -1
  96. package/fesm2020/ngx-formly-core-preset.mjs.map +0 -1
  97. package/fesm2020/ngx-formly-core-testing.mjs.map +0 -1
  98. package/fesm2020/ngx-formly-core.mjs.map +0 -1
  99. package/json-schema/package.json +0 -10
  100. package/preset/package.json +0 -10
  101. package/select/package.json +0 -10
  102. package/testing/package.json +0 -10
  103. /package/{esm2020 → esm2022}/json-schema/ngx-formly-core-json-schema.mjs +0 -0
  104. /package/{esm2020 → esm2022}/json-schema/public_api.mjs +0 -0
  105. /package/{esm2020 → esm2022}/lib/extensions/field-validation/field-validation.mjs +0 -0
  106. /package/{esm2020 → esm2022}/lib/models/config.mjs +0 -0
  107. /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
  108. /package/{esm2020 → esm2022}/ngx-formly-core.mjs +0 -0
  109. /package/{esm2020 → esm2022}/preset/ngx-formly-core-preset.mjs +0 -0
  110. /package/{esm2020 → esm2022}/preset/preset-substitution.extension.mjs +0 -0
  111. /package/{esm2020 → esm2022}/preset/public_api.mjs +0 -0
  112. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  113. /package/{esm2020 → esm2022}/select/ngx-formly-core-select.mjs +0 -0
  114. /package/{esm2020 → esm2022}/select/public_api.mjs +0 -0
  115. /package/{esm2020 → esm2022}/testing/ngx-formly-core-testing.mjs +0 -0
  116. /package/{esm2020 → esm2022}/testing/public_api.mjs +0 -0
  117. /package/{ngx-formly-core.d.ts → index.d.ts} +0 -0
  118. /package/json-schema/{ngx-formly-core-json-schema.d.ts → index.d.ts} +0 -0
  119. /package/preset/{ngx-formly-core-preset.d.ts → index.d.ts} +0 -0
  120. /package/select/{ngx-formly-core-select.d.ts → index.d.ts} +0 -0
  121. /package/testing/{ngx-formly-core-testing.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,20 @@
1
+ export { provideFormlyCore, provideFormlyConfig, FORMLY_CONFIG } from './core.config';
2
+ export { LegacyFormlyForm, FormlyForm } from './components/formly.form';
3
+ export { LegacyFormlyField, FormlyField } from './components/formly.field';
4
+ export { FormlyAttributes as ɵFormlyAttributes } from './templates/formly.attributes';
5
+ export { FormlyGroup as ɵFormlyGroup } from './templates/formly.group';
6
+ export { FormlyTemplate as ɵFormlyTemplate } from './components/formly.template';
7
+ export { FormlyValidationMessage as ɵFormlyValidationMessage } from './templates/formly.validation-message';
8
+ export { FormlyConfig } from './services/formly.config';
9
+ export { FormlyFormBuilder } from './services/formly.builder';
10
+ export { FieldType } from './templates/field.type';
11
+ export { FieldArrayType } from './templates/field-array.type';
12
+ export { FieldWrapper } from './templates/field.wrapper';
13
+ export { FormlyModule } from './core.module';
14
+ export { defineHiddenProp as ɵdefineHiddenProp } from './utils';
15
+ export { reverseDeepMerge as ɵreverseDeepMerge } from './utils';
16
+ export { getFieldValue as ɵgetFieldValue } from './utils';
17
+ export { clone as ɵclone } from './utils';
18
+ export { observe as ɵobserve } from './utils';
19
+ export { hasKey as ɵhasKey } from './utils';
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsSUFBSSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxJQUFJLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSx1QkFBdUIsSUFBSSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUF5QyxNQUFNLHdCQUF3QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxjQUFjLEVBQXdCLE1BQU0sOEJBQThCLENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxJQUFJLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsT0FBTyxJQUFJLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsTUFBTSxJQUFJLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHByb3ZpZGVGb3JtbHlDb3JlLCBwcm92aWRlRm9ybWx5Q29uZmlnLCBGT1JNTFlfQ09ORklHIH0gZnJvbSAnLi9jb3JlLmNvbmZpZyc7XG5leHBvcnQgeyBMZWdhY3lGb3JtbHlGb3JtLCBGb3JtbHlGb3JtIH0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1seS5mb3JtJztcbmV4cG9ydCB7XG4gIEZvcm1seUZpZWxkQ29uZmlnLFxuICBGb3JtbHlUZW1wbGF0ZU9wdGlvbnMsXG4gIEZvcm1seUZvcm1PcHRpb25zLFxuICBGb3JtbHlGaWVsZFByb3BzLFxuICBDb25maWdPcHRpb24sXG4gIEZvcm1seUV4dGVuc2lvbixcbn0gZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0IHsgTGVnYWN5Rm9ybWx5RmllbGQsIEZvcm1seUZpZWxkIH0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1seS5maWVsZCc7XG5leHBvcnQgeyBGb3JtbHlBdHRyaWJ1dGVzIGFzIMm1Rm9ybWx5QXR0cmlidXRlcyB9IGZyb20gJy4vdGVtcGxhdGVzL2Zvcm1seS5hdHRyaWJ1dGVzJztcbmV4cG9ydCB7IEZvcm1seUdyb3VwIGFzIMm1Rm9ybWx5R3JvdXAgfSBmcm9tICcuL3RlbXBsYXRlcy9mb3JtbHkuZ3JvdXAnO1xuZXhwb3J0IHsgRm9ybWx5VGVtcGxhdGUgYXMgybVGb3JtbHlUZW1wbGF0ZSB9IGZyb20gJy4vY29tcG9uZW50cy9mb3JtbHkudGVtcGxhdGUnO1xuZXhwb3J0IHsgRm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2UgYXMgybVGb3JtbHlWYWxpZGF0aW9uTWVzc2FnZSB9IGZyb20gJy4vdGVtcGxhdGVzL2Zvcm1seS52YWxpZGF0aW9uLW1lc3NhZ2UnO1xuZXhwb3J0IHsgRm9ybWx5Q29uZmlnIH0gZnJvbSAnLi9zZXJ2aWNlcy9mb3JtbHkuY29uZmlnJztcbmV4cG9ydCB7IEZvcm1seUZvcm1CdWlsZGVyIH0gZnJvbSAnLi9zZXJ2aWNlcy9mb3JtbHkuYnVpbGRlcic7XG5leHBvcnQgeyBGaWVsZFR5cGUsIEZpZWxkVHlwZUNvbmZpZywgRmllbGRHcm91cFR5cGVDb25maWcgfSBmcm9tICcuL3RlbXBsYXRlcy9maWVsZC50eXBlJztcbmV4cG9ydCB7IEZpZWxkQXJyYXlUeXBlLCBGaWVsZEFycmF5VHlwZUNvbmZpZyB9IGZyb20gJy4vdGVtcGxhdGVzL2ZpZWxkLWFycmF5LnR5cGUnO1xuZXhwb3J0IHsgRmllbGRXcmFwcGVyIH0gZnJvbSAnLi90ZW1wbGF0ZXMvZmllbGQud3JhcHBlcic7XG5leHBvcnQgeyBGb3JtbHlNb2R1bGUgfSBmcm9tICcuL2NvcmUubW9kdWxlJztcbmV4cG9ydCB7IGRlZmluZUhpZGRlblByb3AgYXMgybVkZWZpbmVIaWRkZW5Qcm9wIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyByZXZlcnNlRGVlcE1lcmdlIGFzIMm1cmV2ZXJzZURlZXBNZXJnZSB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHsgZ2V0RmllbGRWYWx1ZSBhcyDJtWdldEZpZWxkVmFsdWUgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IGNsb25lIGFzIMm1Y2xvbmUgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IG9ic2VydmUgYXMgybVvYnNlcnZlIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyBoYXNLZXkgYXMgybVoYXNLZXkgfSBmcm9tICcuL3V0aWxzJztcbiJdfQ==
@@ -0,0 +1,74 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { LegacyFormlyForm } from './components/formly.form';
4
+ import { LegacyFormlyField } from './components/formly.field';
5
+ import { FormlyAttributes } from './templates/formly.attributes';
6
+ import { FormlyConfig } from './services/formly.config';
7
+ import { FormlyFormBuilder } from './services/formly.builder';
8
+ import { FormlyGroup } from './templates/formly.group';
9
+ import { FormlyValidationMessage } from './templates/formly.validation-message';
10
+ import { FormlyTemplateType } from './templates/field-template.type';
11
+ import { FormlyTemplate } from './components/formly.template';
12
+ import { FORMLY_CONFIG, withDefaultConfig } from './core.config';
13
+ import * as i0 from "@angular/core";
14
+ export class FormlyModule {
15
+ static forRoot(config = {}) {
16
+ return {
17
+ ngModule: FormlyModule,
18
+ providers: [
19
+ { provide: FORMLY_CONFIG, multi: true, useFactory: withDefaultConfig, deps: [FormlyConfig] },
20
+ { provide: FORMLY_CONFIG, useValue: config, multi: true },
21
+ FormlyConfig,
22
+ FormlyFormBuilder,
23
+ ],
24
+ };
25
+ }
26
+ static forChild(config = {}) {
27
+ return {
28
+ ngModule: FormlyModule,
29
+ providers: [
30
+ { provide: FORMLY_CONFIG, multi: true, useFactory: withDefaultConfig, deps: [FormlyConfig] },
31
+ { provide: FORMLY_CONFIG, useValue: config, multi: true },
32
+ FormlyFormBuilder,
33
+ ],
34
+ };
35
+ }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormlyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
37
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: FormlyModule, declarations: [FormlyTemplate,
38
+ LegacyFormlyForm,
39
+ LegacyFormlyField,
40
+ FormlyAttributes,
41
+ FormlyGroup,
42
+ FormlyValidationMessage,
43
+ FormlyTemplateType], imports: [CommonModule], exports: [FormlyTemplate,
44
+ LegacyFormlyForm,
45
+ LegacyFormlyField,
46
+ FormlyAttributes,
47
+ FormlyGroup,
48
+ FormlyValidationMessage] }); }
49
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormlyModule, imports: [CommonModule] }); }
50
+ }
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormlyModule, decorators: [{
52
+ type: NgModule,
53
+ args: [{
54
+ declarations: [
55
+ FormlyTemplate,
56
+ LegacyFormlyForm,
57
+ LegacyFormlyField,
58
+ FormlyAttributes,
59
+ FormlyGroup,
60
+ FormlyValidationMessage,
61
+ FormlyTemplateType,
62
+ ],
63
+ exports: [
64
+ FormlyTemplate,
65
+ LegacyFormlyForm,
66
+ LegacyFormlyField,
67
+ FormlyAttributes,
68
+ FormlyGroup,
69
+ FormlyValidationMessage,
70
+ ],
71
+ imports: [CommonModule],
72
+ }]
73
+ }] });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL2NvcmUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQXNCakUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUF1QixFQUFFO1FBQ3RDLE9BQU87WUFDTCxRQUFRLEVBQUUsWUFBWTtZQUN0QixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUM1RixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUN6RCxZQUFZO2dCQUNaLGlCQUFpQjthQUNsQjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUF1QixFQUFFO1FBQ3ZDLE9BQU87WUFDTCxRQUFRLEVBQUUsWUFBWTtZQUN0QixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUM1RixFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO2dCQUN6RCxpQkFBaUI7YUFDbEI7U0FDRixDQUFDO0lBQ0osQ0FBQzsrR0F0QlUsWUFBWTtnSEFBWixZQUFZLGlCQWxCckIsY0FBYztZQUNkLGdCQUFnQjtZQUNoQixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLFdBQVc7WUFDWCx1QkFBdUI7WUFDdkIsa0JBQWtCLGFBVVYsWUFBWSxhQVBwQixjQUFjO1lBQ2QsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixnQkFBZ0I7WUFDaEIsV0FBVztZQUNYLHVCQUF1QjtnSEFJZCxZQUFZLFlBRmIsWUFBWTs7NEZBRVgsWUFBWTtrQkFwQnhCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCx1QkFBdUI7d0JBQ3ZCLGtCQUFrQjtxQkFDbkI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGNBQWM7d0JBQ2QsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCx1QkFBdUI7cUJBQ3hCO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IExlZ2FjeUZvcm1seUZvcm0gfSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybWx5LmZvcm0nO1xuaW1wb3J0IHsgTGVnYWN5Rm9ybWx5RmllbGQgfSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybWx5LmZpZWxkJztcbmltcG9ydCB7IEZvcm1seUF0dHJpYnV0ZXMgfSBmcm9tICcuL3RlbXBsYXRlcy9mb3JtbHkuYXR0cmlidXRlcyc7XG5pbXBvcnQgeyBGb3JtbHlDb25maWcgfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm1seS5jb25maWcnO1xuaW1wb3J0IHsgRm9ybWx5Rm9ybUJ1aWxkZXIgfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm1seS5idWlsZGVyJztcbmltcG9ydCB7IEZvcm1seUdyb3VwIH0gZnJvbSAnLi90ZW1wbGF0ZXMvZm9ybWx5Lmdyb3VwJztcbmltcG9ydCB7IEZvcm1seVZhbGlkYXRpb25NZXNzYWdlIH0gZnJvbSAnLi90ZW1wbGF0ZXMvZm9ybWx5LnZhbGlkYXRpb24tbWVzc2FnZSc7XG5pbXBvcnQgeyBGb3JtbHlUZW1wbGF0ZVR5cGUgfSBmcm9tICcuL3RlbXBsYXRlcy9maWVsZC10ZW1wbGF0ZS50eXBlJztcbmltcG9ydCB7IENvbmZpZ09wdGlvbiB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEZvcm1seVRlbXBsYXRlIH0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1seS50ZW1wbGF0ZSc7XG5pbXBvcnQgeyBGT1JNTFlfQ09ORklHLCB3aXRoRGVmYXVsdENvbmZpZyB9IGZyb20gJy4vY29yZS5jb25maWcnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBGb3JtbHlUZW1wbGF0ZSxcbiAgICBMZWdhY3lGb3JtbHlGb3JtLFxuICAgIExlZ2FjeUZvcm1seUZpZWxkLFxuICAgIEZvcm1seUF0dHJpYnV0ZXMsXG4gICAgRm9ybWx5R3JvdXAsXG4gICAgRm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2UsXG4gICAgRm9ybWx5VGVtcGxhdGVUeXBlLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgRm9ybWx5VGVtcGxhdGUsXG4gICAgTGVnYWN5Rm9ybWx5Rm9ybSxcbiAgICBMZWdhY3lGb3JtbHlGaWVsZCxcbiAgICBGb3JtbHlBdHRyaWJ1dGVzLFxuICAgIEZvcm1seUdyb3VwLFxuICAgIEZvcm1seVZhbGlkYXRpb25NZXNzYWdlLFxuICBdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5TW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBDb25maWdPcHRpb24gPSB7fSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Rm9ybWx5TW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBGb3JtbHlNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBGT1JNTFlfQ09ORklHLCBtdWx0aTogdHJ1ZSwgdXNlRmFjdG9yeTogd2l0aERlZmF1bHRDb25maWcsIGRlcHM6IFtGb3JtbHlDb25maWddIH0sXG4gICAgICAgIHsgcHJvdmlkZTogRk9STUxZX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZywgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgRm9ybWx5Q29uZmlnLFxuICAgICAgICBGb3JtbHlGb3JtQnVpbGRlcixcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JDaGlsZChjb25maWc6IENvbmZpZ09wdGlvbiA9IHt9KTogTW9kdWxlV2l0aFByb3ZpZGVyczxGb3JtbHlNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEZvcm1seU1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEZPUk1MWV9DT05GSUcsIG11bHRpOiB0cnVlLCB1c2VGYWN0b3J5OiB3aXRoRGVmYXVsdENvbmZpZywgZGVwczogW0Zvcm1seUNvbmZpZ10gfSxcbiAgICAgICAgeyBwcm92aWRlOiBGT1JNTFlfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnLCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICBGb3JtbHlGb3JtQnVpbGRlcixcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -0,0 +1,148 @@
1
+ import { ComponentRef } from '@angular/core';
2
+ import { getFieldId, assignFieldValue, isUndefined, getFieldValue, reverseDeepMerge, defineHiddenProp, clone, getField, markFieldForCheck, hasKey, observe, isHiddenField, isSignalRequired, } from '../../utils';
3
+ import { Subject } from 'rxjs';
4
+ export class CoreExtension {
5
+ constructor(config) {
6
+ this.config = config;
7
+ this.formId = 0;
8
+ }
9
+ prePopulate(field) {
10
+ const root = field.parent;
11
+ this.initRootOptions(field);
12
+ this.initFieldProps(field);
13
+ if (root) {
14
+ Object.defineProperty(field, 'options', { get: () => root.options, configurable: true });
15
+ Object.defineProperty(field, 'model', {
16
+ get: () => (hasKey(field) && field.fieldGroup ? getFieldValue(field) : root.model),
17
+ configurable: true,
18
+ });
19
+ }
20
+ Object.defineProperty(field, 'get', {
21
+ value: (key) => getField(field, key),
22
+ configurable: true,
23
+ });
24
+ this.getFieldComponentInstance(field).prePopulate?.(field);
25
+ }
26
+ onPopulate(field) {
27
+ this.initFieldOptions(field);
28
+ this.getFieldComponentInstance(field).onPopulate?.(field);
29
+ if (field.fieldGroup) {
30
+ field.fieldGroup.forEach((f, index) => {
31
+ if (f) {
32
+ Object.defineProperty(f, 'parent', { get: () => field, configurable: true });
33
+ Object.defineProperty(f, 'index', { get: () => index, configurable: true });
34
+ }
35
+ this.formId++;
36
+ });
37
+ }
38
+ }
39
+ postPopulate(field) {
40
+ this.getFieldComponentInstance(field).postPopulate?.(field);
41
+ }
42
+ initFieldProps(field) {
43
+ field.props ??= field.templateOptions;
44
+ Object.defineProperty(field, 'templateOptions', {
45
+ get: () => field.props,
46
+ set: (props) => (field.props = props),
47
+ configurable: true,
48
+ });
49
+ }
50
+ initRootOptions(field) {
51
+ if (field.parent) {
52
+ return;
53
+ }
54
+ const options = field.options;
55
+ field.options.formState = field.options.formState || {};
56
+ if (!options.showError) {
57
+ options.showError = this.config.extras.showError;
58
+ }
59
+ if (!options.fieldChanges) {
60
+ defineHiddenProp(options, 'fieldChanges', new Subject());
61
+ }
62
+ if (!options._hiddenFieldsForCheck) {
63
+ options._hiddenFieldsForCheck = [];
64
+ }
65
+ options._markForCheck = (f) => {
66
+ console.warn(`Formly: 'options._markForCheck' is deprecated since v6.0, use 'options.detectChanges' instead.`);
67
+ options.detectChanges(f);
68
+ };
69
+ options._detectChanges = (f) => {
70
+ if (f._componentRefs) {
71
+ markFieldForCheck(f);
72
+ }
73
+ f.fieldGroup?.forEach((f) => f && options._detectChanges(f));
74
+ };
75
+ options.detectChanges = (f) => {
76
+ f.options.checkExpressions?.(f);
77
+ options._detectChanges(f);
78
+ };
79
+ options.resetModel = (model) => {
80
+ model = clone(model ?? options._initialModel);
81
+ if (field.model) {
82
+ Object.keys(field.model).forEach((k) => delete field.model[k]);
83
+ Object.assign(field.model, model || {});
84
+ }
85
+ if (!isSignalRequired()) {
86
+ observe(options, ['parentForm', 'submitted']).setValue(false, false);
87
+ }
88
+ options.build(field);
89
+ field.form.reset(field.model);
90
+ };
91
+ options.updateInitialValue = (model) => (options._initialModel = clone(model ?? field.model));
92
+ field.options.updateInitialValue();
93
+ }
94
+ initFieldOptions(field) {
95
+ reverseDeepMerge(field, {
96
+ id: getFieldId(`formly_${this.formId}`, field, field.index),
97
+ hooks: {},
98
+ modelOptions: {},
99
+ validation: { messages: {} },
100
+ props: !field.type || !hasKey(field)
101
+ ? {}
102
+ : {
103
+ label: '',
104
+ placeholder: '',
105
+ disabled: false,
106
+ },
107
+ });
108
+ if (this.config.extras.resetFieldOnHide && field.resetOnHide !== false) {
109
+ field.resetOnHide = true;
110
+ }
111
+ if (field.type !== 'formly-template' &&
112
+ (field.template || field.expressions?.template || field.expressionProperties?.template)) {
113
+ field.type = 'formly-template';
114
+ }
115
+ if (!field.type && field.fieldGroup) {
116
+ field.type = 'formly-group';
117
+ }
118
+ if (field.type) {
119
+ this.config.getMergedField(field);
120
+ }
121
+ if (hasKey(field) &&
122
+ !isUndefined(field.defaultValue) &&
123
+ isUndefined(getFieldValue(field)) &&
124
+ !isHiddenField(field)) {
125
+ assignFieldValue(field, field.defaultValue);
126
+ }
127
+ field.wrappers = field.wrappers || [];
128
+ }
129
+ getFieldComponentInstance(field) {
130
+ const componentRefInstance = () => {
131
+ let componentRef = this.config.resolveFieldTypeRef(field);
132
+ const fieldComponentRef = field._componentRefs?.slice(-1)[0];
133
+ if (fieldComponentRef instanceof ComponentRef &&
134
+ fieldComponentRef?.componentType === componentRef?.componentType) {
135
+ componentRef = fieldComponentRef;
136
+ }
137
+ return componentRef?.instance;
138
+ };
139
+ if (!field._proxyInstance) {
140
+ defineHiddenProp(field, '_proxyInstance', new Proxy({}, {
141
+ get: (_, prop) => componentRefInstance()?.[prop],
142
+ set: (_, prop, value) => (componentRefInstance()[prop] = value),
143
+ }));
144
+ }
145
+ return field._proxyInstance;
146
+ }
147
+ }
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvZXh0ZW5zaW9ucy9jb3JlL2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLE9BQU8sRUFDUCxhQUFhLEVBQ2IsZ0JBQWdCLEdBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsTUFBb0I7UUFBcEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQURoQyxXQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3dCLENBQUM7SUFFNUMsV0FBVyxDQUFDLEtBQTZCO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDekYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNwQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElB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QUFDO1lBQzdELElBQ0UsaUJBQWlCLFlBQVksWUFBWTtnQkFDekMsaUJBQWlCLEVBQUUsYUFBYSxLQUFLLFlBQVksRUFBRSxhQUFhLEVBQ2hFO2dCQUNBLFlBQVksR0FBRyxpQkFBd0IsQ0FBQzthQUN6QztZQUVELE9BQU8sWUFBWSxFQUFFLFFBQWUsQ0FBQztRQUN2QyxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRTtZQUN6QixnQkFBZ0IsQ0FDZCxLQUFLLEVBQ0wsZ0JBQWdCLEVBQ2hCLElBQUksS0FBSyxDQUFDLEVBQXFCLEVBQUU7Z0JBQy9CLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hELEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQ2hFLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFFRCxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDOUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtbHlDb25maWcgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtbHkuY29uZmlnJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIEZvcm1seVZhbHVlQ2hhbmdlRXZlbnQsIEZvcm1seUV4dGVuc2lvbiwgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmllbGRJZCxcbiAgYXNzaWduRmllbGRWYWx1ZSxcbiAgaXNVbmRlZmluZWQsXG4gIGdldEZpZWxkVmFsdWUsXG4gIHJldmVyc2VEZWVwTWVyZ2UsXG4gIGRlZmluZUhpZGRlblByb3AsXG4gIGNsb25lLFxuICBnZXRGaWVsZCxcbiAgbWFya0ZpZWxkRm9yQ2hlY2ssXG4gIGhhc0tleSxcbiAgb2JzZXJ2ZSxcbiAgaXNIaWRkZW5GaWVsZCxcbiAgaXNTaWduYWxSZXF1aXJlZCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY2xhc3MgQ29yZUV4dGVuc2lvbiBpbXBsZW1lbnRzIEZvcm1seUV4dGVuc2lvbiB7XG4gIHByaXZhdGUgZm9ybUlkID0gMDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IEZvcm1seUNvbmZpZykge31cblxuICBwcmVQb3B1bGF0ZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGNvbnN0IHJvb3QgPSBmaWVsZC5wYXJlbnQ7XG4gICAgdGhpcy5pbml0Um9vdE9wdGlvbnMoZmllbGQpO1xuICAgIHRoaXMuaW5pdEZpZWxkUHJvcHMoZmllbGQpO1xuICAgIGlmIChyb290KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmllbGQsICdvcHRpb25zJywgeyBnZXQ6ICgpID0+IHJvb3Qub3B0aW9ucywgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLCAnbW9kZWwnLCB7XG4gICAgICAgIGdldDogKCkgPT4gKGhhc0tleShmaWVsZCkgJiYgZmllbGQuZmllbGRHcm91cCA/IGdldEZpZWxkVmFsdWUoZmllbGQpIDogcm9vdC5tb2RlbCksXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJ2dldCcsIHtcbiAgICAgIHZhbHVlOiAoa2V5OiBGb3JtbHlGaWVsZENvbmZpZ1sna2V5J10pID0+IGdldEZpZWxkKGZpZWxkLCBrZXkpLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5nZXRGaWVsZENvbXBvbmVudEluc3RhbmNlKGZpZWxkKS5wcmVQb3B1bGF0ZT8uKGZpZWxkKTtcbiAgfVxuXG4gIG9uUG9wdWxhdGUoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICB0aGlzLmluaXRGaWVsZE9wdGlvbnMoZmllbGQpO1xuICAgIHRoaXMuZ2V0RmllbGRDb21wb25lbnRJbnN0YW5jZShmaWVsZCkub25Qb3B1bGF0ZT8uKGZpZWxkKTtcbiAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgZmllbGQuZmllbGRHcm91cC5mb3JFYWNoKChmLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoZikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAncGFyZW50JywgeyBnZXQ6ICgpID0+IGZpZWxkLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsICdpbmRleCcsIHsgZ2V0OiAoKSA9PiBpbmRleCwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUlkKys7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwb3N0UG9wdWxhdGUoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICB0aGlzLmdldEZpZWxkQ29tcG9uZW50SW5zdGFuY2UoZmllbGQpLnBvc3RQb3B1bGF0ZT8uKGZpZWxkKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZpZWxkUHJvcHMoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICBmaWVsZC5wcm9wcyA/Pz0gZmllbGQudGVtcGxhdGVPcHRpb25zO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJ3RlbXBsYXRlT3B0aW9ucycsIHtcbiAgICAgIGdldDogKCkgPT4gZmllbGQucHJvcHMsXG4gICAgICBzZXQ6IChwcm9wcykgPT4gKGZpZWxkLnByb3BzID0gcHJvcHMpLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Um9vdE9wdGlvbnMoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICBpZiAoZmllbGQucGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkLm9wdGlvbnM7XG4gICAgZmllbGQub3B0aW9ucy5mb3JtU3RhdGUgPSBmaWVsZC5vcHRpb25zLmZvcm1TdGF0ZSB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMuc2hvd0Vycm9yKSB7XG4gICAgICBvcHRpb25zLnNob3dFcnJvciA9IHRoaXMuY29uZmlnLmV4dHJhcy5zaG93RXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmZpZWxkQ2hhbmdlcykge1xuICAgICAgZGVmaW5lSGlkZGVuUHJvcChvcHRpb25zLCAnZmllbGRDaGFuZ2VzJywgbmV3IFN1YmplY3Q8Rm9ybWx5VmFsdWVDaGFuZ2VFdmVudD4oKSk7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLl9oaWRkZW5GaWVsZHNGb3JDaGVjaykge1xuICAgICAgb3B0aW9ucy5faGlkZGVuRmllbGRzRm9yQ2hlY2sgPSBbXTtcbiAgICB9XG5cbiAgICBvcHRpb25zLl9tYXJrRm9yQ2hlY2sgPSAoZikgPT4ge1xuICAgICAgY29uc29sZS53YXJuKGBGb3JtbHk6ICdvcHRpb25zLl9tYXJrRm9yQ2hlY2snIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjYuMCwgdXNlICdvcHRpb25zLmRldGVjdENoYW5nZXMnIGluc3RlYWQuYCk7XG4gICAgICBvcHRpb25zLmRldGVjdENoYW5nZXMoZik7XG4gICAgfTtcblxuICAgIG9wdGlvbnMuX2RldGVjdENoYW5nZXMgPSAoZjogRm9ybWx5RmllbGRDb25maWdDYWNoZSkgPT4ge1xuICAgICAgaWYgKGYuX2NvbXBvbmVudFJlZnMpIHtcbiAgICAgICAgbWFya0ZpZWxkRm9yQ2hlY2soZik7XG4gICAgICB9XG5cbiAgICAgIGYuZmllbGRHcm91cD8uZm9yRWFjaCgoZikgPT4gZiAmJiBvcHRpb25zLl9kZXRlY3RDaGFuZ2VzKGYpKTtcbiAgICB9O1xuXG4gICAgb3B0aW9ucy5kZXRlY3RDaGFuZ2VzID0gKGY6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpID0+IHtcbiAgICAgIGYub3B0aW9ucy5jaGVja0V4cHJlc3Npb25zPy4oZik7XG4gICAgICBvcHRpb25zLl9kZXRlY3RDaGFuZ2VzKGYpO1xuICAgIH07XG5cbiAgICBvcHRpb25zLnJlc2V0TW9kZWwgPSAobW9kZWw/OiBhbnkpID0+IHtcbiAgICAgIG1vZGVsID0gY2xvbmUobW9kZWwgPz8gb3B0aW9ucy5faW5pdGlhbE1vZGVsKTtcbiAgICAgIGlmIChmaWVsZC5tb2RlbCkge1xuICAgICAgICBPYmplY3Qua2V5cyhmaWVsZC5tb2RlbCkuZm9yRWFjaCgoaykgPT4gZGVsZXRlIGZpZWxkLm1vZGVsW2tdKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWVsZC5tb2RlbCwgbW9kZWwgfHwge30pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzU2lnbmFsUmVxdWlyZWQoKSkge1xuICAgICAgICBvYnNlcnZlKG9wdGlvbnMsIFsncGFyZW50Rm9ybScsICdzdWJtaXR0ZWQnXSkuc2V0VmFsdWUoZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuYnVpbGQoZmllbGQpO1xuICAgICAgZmllbGQuZm9ybS5yZXNldChmaWVsZC5tb2RlbCk7XG4gICAgfTtcblxuICAgIG9wdGlvbnMudXBkYXRlSW5pdGlhbFZhbHVlID0gKG1vZGVsPzogYW55KSA9PiAob3B0aW9ucy5faW5pdGlhbE1vZGVsID0gY2xvbmUobW9kZWwgPz8gZmllbGQubW9kZWwpKTtcbiAgICBmaWVsZC5vcHRpb25zLnVwZGF0ZUluaXRpYWxWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RmllbGRPcHRpb25zKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgcmV2ZXJzZURlZXBNZXJnZShmaWVsZCwge1xuICAgICAgaWQ6IGdldEZpZWxkSWQoYGZvcm1seV8ke3RoaXMuZm9ybUlkfWAsIGZpZWxkLCBmaWVsZC5pbmRleCksXG4gICAgICBob29rczoge30sXG4gICAgICBtb2RlbE9wdGlvbnM6IHt9LFxuICAgICAgdmFsaWRhdGlvbjogeyBtZXNzYWdlczoge30gfSxcbiAgICAgIHByb3BzOlxuICAgICAgICAhZmllbGQudHlwZSB8fCAhaGFzS2V5KGZpZWxkKVxuICAgICAgICAgID8ge31cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5jb25maWcuZXh0cmFzLnJlc2V0RmllbGRPbkhpZGUgJiYgZmllbGQucmVzZXRPbkhpZGUgIT09IGZhbHNlKSB7XG4gICAgICBmaWVsZC5yZXNldE9uSGlkZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmllbGQudHlwZSAhPT0gJ2Zvcm1seS10ZW1wbGF0ZScgJiZcbiAgICAgIChmaWVsZC50ZW1wbGF0ZSB8fCBmaWVsZC5leHByZXNzaW9ucz8udGVtcGxhdGUgfHwgZmllbGQuZXhwcmVzc2lvblByb3BlcnRpZXM/LnRlbXBsYXRlKVxuICAgICkge1xuICAgICAgZmllbGQudHlwZSA9ICdmb3JtbHktdGVtcGxhdGUnO1xuICAgIH1cblxuICAgIGlmICghZmllbGQudHlwZSAmJiBmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICBmaWVsZC50eXBlID0gJ2Zvcm1seS1ncm91cCc7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnR5cGUpIHtcbiAgICAgIHRoaXMuY29uZmlnLmdldE1lcmdlZEZpZWxkKGZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBoYXNLZXkoZmllbGQpICYmXG4gICAgICAhaXNVbmRlZmluZWQoZmllbGQuZGVmYXVsdFZhbHVlKSAmJlxuICAgICAgaXNVbmRlZmluZWQoZ2V0RmllbGRWYWx1ZShmaWVsZCkpICYmXG4gICAgICAhaXNIaWRkZW5GaWVsZChmaWVsZClcbiAgICApIHtcbiAgICAgIGFzc2lnbkZpZWxkVmFsdWUoZmllbGQsIGZpZWxkLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuXG4gICAgZmllbGQud3JhcHBlcnMgPSBmaWVsZC53cmFwcGVycyB8fCBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmllbGRDb21wb25lbnRJbnN0YW5jZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZkluc3RhbmNlID0gKCkgPT4ge1xuICAgICAgbGV0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29uZmlnLnJlc29sdmVGaWVsZFR5cGVSZWYoZmllbGQpO1xuXG4gICAgICBjb25zdCBmaWVsZENvbXBvbmVudFJlZiA9IGZpZWxkLl9jb21wb25lbnRSZWZzPy5zbGljZSgtMSlbMF07XG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkQ29tcG9uZW50UmVmIGluc3RhbmNlb2YgQ29tcG9uZW50UmVmICYmXG4gICAgICAgIGZpZWxkQ29tcG9uZW50UmVmPy5jb21wb25lbnRUeXBlID09PSBjb21wb25lbnRSZWY/LmNvbXBvbmVudFR5cGVcbiAgICAgICkge1xuICAgICAgICBjb21wb25lbnRSZWYgPSBmaWVsZENvbXBvbmVudFJlZiBhcyBhbnk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21wb25lbnRSZWY/Lmluc3RhbmNlIGFzIGFueTtcbiAgICB9O1xuXG4gICAgaWYgKCFmaWVsZC5fcHJveHlJbnN0YW5jZSkge1xuICAgICAgZGVmaW5lSGlkZGVuUHJvcChcbiAgICAgICAgZmllbGQsXG4gICAgICAgICdfcHJveHlJbnN0YW5jZScsXG4gICAgICAgIG5ldyBQcm94eSh7fSBhcyBGb3JtbHlFeHRlbnNpb24sIHtcbiAgICAgICAgICBnZXQ6IChfLCBwcm9wKSA9PiBjb21wb25lbnRSZWZJbnN0YW5jZSgpPy5bcHJvcF0sXG4gICAgICAgICAgc2V0OiAoXywgcHJvcCwgdmFsdWUpID0+IChjb21wb25lbnRSZWZJbnN0YW5jZSgpW3Byb3BdID0gdmFsdWUpLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkLl9wcm94eUluc3RhbmNlO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,250 @@
1
+ import { isObject, isNil, isUndefined, isFunction, defineHiddenProp, observe, getFieldValue, assignFieldValue, hasKey, } from '../../utils';
2
+ import { evalExpression, evalStringExpression } from './utils';
3
+ import { isObservable, Observable } from 'rxjs';
4
+ import { tap } from 'rxjs/operators';
5
+ import { unregisterControl, registerControl, updateValidity } from '../field-form/utils';
6
+ import { UntypedFormArray } from '@angular/forms';
7
+ export class FieldExpressionExtension {
8
+ onPopulate(field) {
9
+ if (field._expressions) {
10
+ return;
11
+ }
12
+ // cache built expression
13
+ defineHiddenProp(field, '_expressions', {});
14
+ observe(field, ['hide'], ({ currentValue, firstChange }) => {
15
+ defineHiddenProp(field, '_hide', !!currentValue);
16
+ if (!firstChange || (firstChange && currentValue === true)) {
17
+ field.props.hidden = currentValue;
18
+ field.options._hiddenFieldsForCheck.push({ field });
19
+ }
20
+ });
21
+ if (field.hideExpression) {
22
+ observe(field, ['hideExpression'], ({ currentValue: expr }) => {
23
+ field._expressions.hide = this.parseExpressions(field, 'hide', typeof expr === 'boolean' ? () => expr : expr);
24
+ });
25
+ }
26
+ const evalExpr = (key, expr) => {
27
+ if (typeof expr === 'string' || isFunction(expr)) {
28
+ field._expressions[key] = this.parseExpressions(field, key, expr);
29
+ }
30
+ else if (expr instanceof Observable) {
31
+ field._expressions[key] = {
32
+ value$: expr.pipe(tap((v) => {
33
+ this.evalExpr(field, key, v);
34
+ field.options._detectChanges(field);
35
+ })),
36
+ };
37
+ }
38
+ };
39
+ field.expressions = field.expressions || {};
40
+ for (const key of Object.keys(field.expressions)) {
41
+ observe(field, ['expressions', key], ({ currentValue: expr }) => {
42
+ evalExpr(key, isFunction(expr) ? (...args) => expr(field, args[3]) : expr);
43
+ });
44
+ }
45
+ field.expressionProperties = field.expressionProperties || {};
46
+ for (const key of Object.keys(field.expressionProperties)) {
47
+ observe(field, ['expressionProperties', key], ({ currentValue }) => evalExpr(key, currentValue));
48
+ }
49
+ }
50
+ postPopulate(field) {
51
+ if (field.parent) {
52
+ return;
53
+ }
54
+ if (!field.options.checkExpressions) {
55
+ let checkLocked = false;
56
+ field.options.checkExpressions = (f, ignoreCache) => {
57
+ if (checkLocked) {
58
+ return;
59
+ }
60
+ checkLocked = true;
61
+ const fieldChanged = this.checkExpressions(f, ignoreCache);
62
+ const options = field.options;
63
+ options._hiddenFieldsForCheck
64
+ .sort((f) => (f.field.hide ? -1 : 1))
65
+ .forEach((f) => this.changeHideState(f.field, f.field.hide ?? f.default, !ignoreCache));
66
+ options._hiddenFieldsForCheck = [];
67
+ if (fieldChanged) {
68
+ this.checkExpressions(field);
69
+ }
70
+ checkLocked = false;
71
+ };
72
+ field.options._checkField = (f, ignoreCache) => {
73
+ console.warn(`Formly: 'options._checkField' is deprecated since v6.0, use 'options.checkExpressions' instead.`);
74
+ field.options.checkExpressions(f, ignoreCache);
75
+ };
76
+ }
77
+ }
78
+ parseExpressions(field, path, expr) {
79
+ let parentExpression;
80
+ if (field.parent && ['hide', 'props.disabled'].includes(path)) {
81
+ const rootValue = (f) => {
82
+ return path === 'hide' ? f.hide : f.props.disabled;
83
+ };
84
+ parentExpression = () => {
85
+ let root = field.parent;
86
+ while (root.parent && !rootValue(root)) {
87
+ root = root.parent;
88
+ }
89
+ return rootValue(root);
90
+ };
91
+ }
92
+ expr = expr || (() => false);
93
+ if (typeof expr === 'string') {
94
+ expr = evalStringExpression(expr, ['model', 'formState', 'field']);
95
+ }
96
+ let currentValue;
97
+ return {
98
+ callback: (ignoreCache) => {
99
+ try {
100
+ const exprValue = evalExpression(parentExpression ? (...args) => parentExpression(field) || expr(...args) : expr, { field }, [field.model, field.options.formState, field, ignoreCache]);
101
+ if (ignoreCache ||
102
+ (currentValue !== exprValue &&
103
+ (!isObject(exprValue) ||
104
+ isObservable(exprValue) ||
105
+ JSON.stringify(exprValue) !== JSON.stringify(currentValue)))) {
106
+ currentValue = exprValue;
107
+ this.evalExpr(field, path, exprValue);
108
+ return true;
109
+ }
110
+ return false;
111
+ }
112
+ catch (error) {
113
+ error.message = `[Formly Error] [Expression "${path}"] ${error.message}`;
114
+ throw error;
115
+ }
116
+ },
117
+ };
118
+ }
119
+ checkExpressions(field, ignoreCache = false) {
120
+ if (!field) {
121
+ return false;
122
+ }
123
+ let fieldChanged = false;
124
+ if (field._expressions) {
125
+ for (const key of Object.keys(field._expressions)) {
126
+ field._expressions[key].callback?.(ignoreCache) && (fieldChanged = true);
127
+ }
128
+ }
129
+ field.fieldGroup?.forEach((f) => this.checkExpressions(f, ignoreCache) && (fieldChanged = true));
130
+ return fieldChanged;
131
+ }
132
+ changeDisabledState(field, value) {
133
+ if (field.fieldGroup) {
134
+ field.fieldGroup
135
+ .filter((f) => !f._expressions.hasOwnProperty('props.disabled'))
136
+ .forEach((f) => this.changeDisabledState(f, value));
137
+ }
138
+ if (hasKey(field) && field.props.disabled !== value) {
139
+ field.props.disabled = value;
140
+ }
141
+ }
142
+ changeHideState(field, hide, resetOnHide) {
143
+ if (field.fieldGroup) {
144
+ field.fieldGroup
145
+ .filter((f) => f && !f._expressions.hide)
146
+ .forEach((f) => this.changeHideState(f, hide, resetOnHide));
147
+ }
148
+ if (field.formControl && hasKey(field)) {
149
+ defineHiddenProp(field, '_hide', !!(hide || field.hide));
150
+ const c = field.formControl;
151
+ if (c._fields?.length > 1) {
152
+ updateValidity(c);
153
+ }
154
+ if (hide === true && (!c._fields || c._fields.every((f) => !!f._hide))) {
155
+ unregisterControl(field, true);
156
+ if (resetOnHide && field.resetOnHide) {
157
+ assignFieldValue(field, undefined);
158
+ field.formControl.reset({ value: undefined, disabled: field.formControl.disabled });
159
+ field.options.fieldChanges.next({ value: undefined, field, type: 'valueChanges' });
160
+ if (field.fieldGroup && field.formControl instanceof UntypedFormArray) {
161
+ field.fieldGroup.length = 0;
162
+ }
163
+ }
164
+ }
165
+ else if (hide === false) {
166
+ if (field.resetOnHide && !isUndefined(field.defaultValue) && isUndefined(getFieldValue(field))) {
167
+ assignFieldValue(field, field.defaultValue);
168
+ }
169
+ registerControl(field, undefined, true);
170
+ if (field.resetOnHide && field.fieldArray && field.fieldGroup?.length !== field.model?.length) {
171
+ field.options.build(field);
172
+ }
173
+ }
174
+ }
175
+ if (field.options.fieldChanges) {
176
+ field.options.fieldChanges.next({ field, type: 'hidden', value: hide });
177
+ }
178
+ }
179
+ evalExpr(field, prop, value) {
180
+ if (prop.indexOf('model.') === 0) {
181
+ const key = prop.replace(/^model\./, ''), parent = field.fieldGroup ? field : field.parent;
182
+ let control = field?.key === key ? field.formControl : field.form.get(key);
183
+ if (!control && field.get(key)) {
184
+ control = field.get(key).formControl;
185
+ }
186
+ assignFieldValue({ key, parent, model: field.model }, value);
187
+ if (control && !(isNil(control.value) && isNil(value)) && control.value !== value) {
188
+ control.patchValue(value);
189
+ }
190
+ }
191
+ else {
192
+ try {
193
+ let target = field;
194
+ const paths = this._evalExpressionPath(field, prop);
195
+ const lastIndex = paths.length - 1;
196
+ for (let i = 0; i < lastIndex; i++) {
197
+ target = target[paths[i]];
198
+ }
199
+ target[paths[lastIndex]] = value;
200
+ }
201
+ catch (error) {
202
+ error.message = `[Formly Error] [Expression "${prop}"] ${error.message}`;
203
+ throw error;
204
+ }
205
+ if (['templateOptions.disabled', 'props.disabled'].includes(prop) && hasKey(field)) {
206
+ this.changeDisabledState(field, value);
207
+ }
208
+ }
209
+ this.emitExpressionChanges(field, prop, value);
210
+ }
211
+ emitExpressionChanges(field, property, value) {
212
+ if (!field.options.fieldChanges) {
213
+ return;
214
+ }
215
+ field.options.fieldChanges.next({
216
+ field,
217
+ type: 'expressionChanges',
218
+ property,
219
+ value,
220
+ });
221
+ }
222
+ _evalExpressionPath(field, prop) {
223
+ if (field._expressions[prop] && field._expressions[prop].paths) {
224
+ return field._expressions[prop].paths;
225
+ }
226
+ let paths = [];
227
+ if (prop.indexOf('[') === -1) {
228
+ paths = prop.split('.');
229
+ }
230
+ else {
231
+ prop
232
+ .split(/[[\]]{1,2}/) // https://stackoverflow.com/a/20198206
233
+ .filter((p) => p)
234
+ .forEach((path) => {
235
+ const arrayPath = path.match(/['|"](.*?)['|"]/);
236
+ if (arrayPath) {
237
+ paths.push(arrayPath[1]);
238
+ }
239
+ else {
240
+ paths.push(...path.split('.').filter((p) => p));
241
+ }
242
+ });
243
+ }
244
+ if (field._expressions[prop]) {
245
+ field._expressions[prop].paths = paths;
246
+ }
247
+ return paths;
248
+ }
249
+ }
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXhwcmVzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvZXh0ZW5zaW9ucy9maWVsZC1leHByZXNzaW9uL2ZpZWxkLWV4cHJlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFFBQVEsRUFDUixLQUFLLEVBQ0wsV0FBVyxFQUNYLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsTUFBTSxHQUNQLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxVQUFVLENBQUMsS0FBNkI7UUFDdEMsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQ3RCLE9BQU87U0FDUjtRQUVELHlCQUF5QjtRQUN6QixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUU7WUFDekQsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFD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QUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDNUIsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUk7aUJBQ0QsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLHVDQUF1QztpQkFDM0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ2hCLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ2hELElBQUksU0FBUyxFQUFFO29CQUNiLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFCO3FCQUFNO29CQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDakQ7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUN4QztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybWx5VmFsdWVDaGFuZ2VFdmVudCwgRm9ybWx5RmllbGRDb25maWdDYWNoZSB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNOaWwsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0Z1bmN0aW9uLFxuICBkZWZpbmVIaWRkZW5Qcm9wLFxuICBvYnNlcnZlLFxuICBnZXRGaWVsZFZhbHVlLFxuICBhc3NpZ25GaWVsZFZhbHVlLFxuICBoYXNLZXksXG59IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGV2YWxFeHByZXNzaW9uLCBldmFsU3RyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGb3JtbHlFeHRlbnNpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgdW5yZWdpc3RlckNvbnRyb2wsIHJlZ2lzdGVyQ29udHJvbCwgdXBkYXRlVmFsaWRpdHkgfSBmcm9tICcuLi9maWVsZC1mb3JtL3V0aWxzJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQXJyYXkgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBjbGFzcyBGaWVsZEV4cHJlc3Npb25FeHRlbnNpb24gaW1wbGVtZW50cyBGb3JtbHlFeHRlbnNpb24ge1xuICBvblBvcHVsYXRlKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgaWYgKGZpZWxkLl9leHByZXNzaW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNhY2hlIGJ1aWx0IGV4cHJlc3Npb25cbiAgICBkZWZpbmVIaWRkZW5Qcm9wKGZpZWxkLCAnX2V4cHJlc3Npb25zJywge30pO1xuXG4gICAgb2JzZXJ2ZShmaWVsZCwgWydoaWRlJ10sICh7IGN1cnJlbnRWYWx1ZSwgZmlyc3RDaGFuZ2UgfSkgPT4ge1xuICAgICAgZGVmaW5lSGlkZGVuUHJvcChmaWVsZCwgJ19oaWRlJywgISFjdXJyZW50VmFsdWUpO1xuICAgICAgaWYgKCFmaXJzdENoYW5nZSB8fCAoZmlyc3RDaGFuZ2UgJiYgY3VycmVudFZhbHVlID09PSB0cnVlKSkge1xuICAgICAgICBmaWVsZC5wcm9wcy5oaWRkZW4gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgIGZpZWxkLm9wdGlvbnMuX2hpZGRlbkZpZWxkc0ZvckNoZWNrLnB1c2goeyBmaWVsZCB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChmaWVsZC5oaWRlRXhwcmVzc2lvbikge1xuICAgICAgb2JzZXJ2ZShmaWVsZCwgWydoaWRlRXhwcmVzc2lvbiddLCAoeyBjdXJyZW50VmFsdWU6IGV4cHIgfSkgPT4ge1xuICAgICAgICBmaWVsZC5fZXhwcmVzc2lvbnMuaGlkZSA9IHRoaXMucGFyc2VFeHByZXNzaW9ucyhmaWVsZCwgJ2hpZGUnLCB0eXBlb2YgZXhwciA9PT0gJ2Jvb2xlYW4nID8gKCkgPT4gZXhwciA6IGV4cHIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZXZhbEV4cHIgPSAoa2V5OiBzdHJpbmcsIGV4cHI6IGFueSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBleHByID09PSAnc3RyaW5nJyB8fCBpc0Z1bmN0aW9uKGV4cHIpKSB7XG4gICAgICAgIGZpZWxkLl9leHByZXNzaW9uc1trZXldID0gdGhpcy5wYXJzZUV4cHJlc3Npb25zKGZpZWxkLCBrZXksIGV4cHIpO1xuICAgICAgfSBlbHNlIGlmIChleHByIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICBmaWVsZC5fZXhwcmVzc2lvbnNba2V5XSA9IHtcbiAgICAgICAgICB2YWx1ZSQ6IChleHByIGFzIE9ic2VydmFibGU8YW55PikucGlwZShcbiAgICAgICAgICAgIHRhcCgodikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmV2YWxFeHByKGZpZWxkLCBrZXksIHYpO1xuICAgICAgICAgICAgICBmaWVsZC5vcHRpb25zLl9kZXRlY3RDaGFuZ2VzKGZpZWxkKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZpZWxkLmV4cHJlc3Npb25zID0gZmllbGQuZXhwcmVzc2lvbnMgfHwge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGQuZXhwcmVzc2lvbnMpKSB7XG4gICAgICBvYnNlcnZlKGZpZWxkLCBbJ2V4cHJlc3Npb25zJywga2V5XSwgKHsgY3VycmVudFZhbHVlOiBleHByIH0pID0+IHtcbiAgICAgICAgZXZhbEV4cHIoa2V5LCBpc0Z1bmN0aW9uKGV4cHIpID8gKC4uLmFyZ3M6IGFueSkgPT4gZXhwcihmaWVsZCwgYXJnc1szXSkgOiBleHByKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZpZWxkLmV4cHJlc3Npb25Qcm9wZXJ0aWVzID0gZmllbGQuZXhwcmVzc2lvblByb3BlcnRpZXMgfHwge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGQuZXhwcmVzc2lvblByb3BlcnRpZXMpKSB7XG4gICAgICBvYnNlcnZlKGZpZWxkLCBbJ2V4cHJlc3Npb25Qcm9wZXJ0aWVzJywga2V5XSwgKHsgY3VycmVudFZhbHVlIH0pID0+IGV2YWxFeHByKGtleSwgY3VycmVudFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgcG9zdFBvcHVsYXRlKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgaWYgKGZpZWxkLnBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZmllbGQub3B0aW9ucy5jaGVja0V4cHJlc3Npb25zKSB7XG4gICAgICBsZXQgY2hlY2tMb2NrZWQgPSBmYWxzZTtcbiAgICAgIGZpZWxkLm9wdGlvbnMuY2hlY2tFeHByZXNzaW9ucyA9IChmLCBpZ25vcmVDYWNoZSkgPT4ge1xuICAgICAgICBpZiAoY2hlY2tMb2NrZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjaGVja0xvY2tlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpZWxkQ2hhbmdlZCA9IHRoaXMuY2hlY2tFeHByZXNzaW9ucyhmLCBpZ25vcmVDYWNoZSk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBmaWVsZC5vcHRpb25zO1xuICAgICAgICBvcHRpb25zLl9oaWRkZW5GaWVsZHNGb3JDaGVja1xuICAgICAgICAgIC5zb3J0KChmKSA9PiAoZi5maWVsZC5oaWRlID8gLTEgOiAxKSlcbiAgICAgICAgICAuZm9yRWFjaCgoZikgPT4gdGhpcy5jaGFuZ2VIaWRlU3RhdGUoZi5maWVsZCwgZi5maWVsZC5oaWRlID8/IGYuZGVmYXVsdCwgIWlnbm9yZUNhY2hlKSk7XG4gICAgICAgIG9wdGlvbnMuX2hpZGRlbkZpZWxkc0ZvckNoZWNrID0gW107XG4gICAgICAgIGlmIChmaWVsZENoYW5nZWQpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrRXhwcmVzc2lvbnMoZmllbGQpO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrTG9ja2VkID0gZmFsc2U7XG4gICAgICB9O1xuICAgICAgZmllbGQub3B0aW9ucy5fY2hlY2tGaWVsZCA9IChmLCBpZ25vcmVDYWNoZSkgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oYEZvcm1seTogJ29wdGlvbnMuX2NoZWNrRmllbGQnIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjYuMCwgdXNlICdvcHRpb25zLmNoZWNrRXhwcmVzc2lvbnMnIGluc3RlYWQuYCk7XG4gICAgICAgIGZpZWxkLm9wdGlvbnMuY2hlY2tFeHByZXNzaW9ucyhmLCBpZ25vcmVDYWNoZSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VFeHByZXNzaW9ucyhmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgcGF0aDogc3RyaW5nLCBleHByOiBhbnkpIHtcbiAgICBsZXQgcGFyZW50RXhwcmVzc2lvbjogYW55O1xuICAgIGlmIChmaWVsZC5wYXJlbnQgJiYgWydoaWRlJywgJ3Byb3BzLmRpc2FibGVkJ10uaW5jbHVkZXMocGF0aCkpIHtcbiAgICAgIGNvbnN0IHJvb3RWYWx1ZSA9IChmOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSA9PiB7XG4gICAgICAgIHJldHVybiBwYXRoID09PSAnaGlkZScgPyBmLmhpZGUgOiBmLnByb3BzLmRpc2FibGVkO1xuICAgICAgfTtcblxuICAgICAgcGFyZW50RXhwcmVzc2lvbiA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJvb3QgPSBmaWVsZC5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChyb290LnBhcmVudCAmJiAhcm9vdFZhbHVlKHJvb3QpKSB7XG4gICAgICAgICAgcm9vdCA9IHJvb3QucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvb3RWYWx1ZShyb290KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZXhwciA9IGV4cHIgfHwgKCgpID0+IGZhbHNlKTtcbiAgICBpZiAodHlwZW9mIGV4cHIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBleHByID0gZXZhbFN0cmluZ0V4cHJlc3Npb24oZXhwciwgWydtb2RlbCcsICdmb3JtU3RhdGUnLCAnZmllbGQnXSk7XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRWYWx1ZTogYW55O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbGxiYWNrOiAoaWdub3JlQ2FjaGU/OiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZXhwclZhbHVlID0gZXZhbEV4cHJlc3Npb24oXG4gICAgICAgICAgICBwYXJlbnRFeHByZXNzaW9uID8gKC4uLmFyZ3M6IGFueSkgPT4gcGFyZW50RXhwcmVzc2lvbihmaWVsZCkgfHwgZXhwciguLi5hcmdzKSA6IGV4cHIsXG4gICAgICAgICAgICB7IGZpZWxkIH0sXG4gICAgICAgICAgICBbZmllbGQubW9kZWwsIGZpZWxkLm9wdGlvbnMuZm9ybVN0YXRlLCBmaWVsZCwgaWdub3JlQ2FjaGVdLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpZ25vcmVDYWNoZSB8fFxuICAgICAgICAgICAgKGN1cnJlbnRWYWx1ZSAhPT0gZXhwclZhbHVlICYmXG4gICAgICAgICAgICAgICghaXNPYmplY3QoZXhwclZhbHVlKSB8fFxuICAgICAgICAgICAgICAgIGlzT2JzZXJ2YWJsZShleHByVmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXhwclZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBleHByVmFsdWU7XG4gICAgICAgICAgICB0aGlzLmV2YWxFeHByKGZpZWxkLCBwYXRoLCBleHByVmFsdWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFtGb3JtbHkgRXJyb3JdIFtFeHByZXNzaW9uIFwiJHtwYXRofVwiXSAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0V4cHJlc3Npb25zKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCBpZ25vcmVDYWNoZSA9IGZhbHNlKSB7XG4gICAgaWYgKCFmaWVsZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBmaWVsZENoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAoZmllbGQuX2V4cHJlc3Npb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmaWVsZC5fZXhwcmVzc2lvbnMpKSB7XG4gICAgICAgIGZpZWxkLl9leHByZXNzaW9uc1trZXldLmNhbGxiYWNrPy4oaWdub3JlQ2FjaGUpICYmIChmaWVsZENoYW5nZWQgPSB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZmllbGQuZmllbGRHcm91cD8uZm9yRWFjaCgoZikgPT4gdGhpcy5jaGVja0V4cHJlc3Npb25zKGYsIGlnbm9yZUNhY2hlKSAmJiAoZmllbGRDaGFuZ2VkID0gdHJ1ZSkpO1xuXG4gICAgcmV0dXJuIGZpZWxkQ2hhbmdlZDtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlRGlzYWJsZWRTdGF0ZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgZmllbGQuZmllbGRHcm91cFxuICAgICAgICAuZmlsdGVyKChmOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSA9PiAhZi5fZXhwcmVzc2lvbnMuaGFzT3duUHJvcGVydHkoJ3Byb3BzLmRpc2FibGVkJykpXG4gICAgICAgIC5mb3JFYWNoKChmKSA9PiB0aGlzLmNoYW5nZURpc2FibGVkU3RhdGUoZiwgdmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzS2V5KGZpZWxkKSAmJiBmaWVsZC5wcm9wcy5kaXNhYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIGZpZWxkLnByb3BzLmRpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VIaWRlU3RhdGUoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIGhpZGU6IGJvb2xlYW4sIHJlc2V0T25IaWRlOiBib29sZWFuKSB7XG4gICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgIGZpZWxkLmZpZWxkR3JvdXBcbiAgICAgICAgLmZpbHRlcigoZjogRm9ybWx5RmllbGRDb25maWdDYWNoZSkgPT4gZiAmJiAhZi5fZXhwcmVzc2lvbnMuaGlkZSlcbiAgICAgICAgLmZvckVhY2goKGYpID0+IHRoaXMuY2hhbmdlSGlkZVN0YXRlKGYsIGhpZGUsIHJlc2V0T25IaWRlKSk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLmZvcm1Db250cm9sICYmIGhhc0tleShmaWVsZCkpIHtcbiAgICAgIGRlZmluZUhpZGRlblByb3AoZmllbGQsICdfaGlkZScsICEhKGhpZGUgfHwgZmllbGQuaGlkZSkpO1xuICAgICAgY29uc3QgYyA9IGZpZWxkLmZvcm1Db250cm9sO1xuICAgICAgaWYgKGMuX2ZpZWxkcz8ubGVuZ3RoID4gMSkge1xuICAgICAgICB1cGRhdGVWYWxpZGl0eShjKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZGUgPT09IHRydWUgJiYgKCFjLl9maWVsZHMgfHwgYy5fZmllbGRzLmV2ZXJ5KChmKSA9PiAhIWYuX2hpZGUpKSkge1xuICAgICAgICB1bnJlZ2lzdGVyQ29udHJvbChmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXNldE9uSGlkZSAmJiBmaWVsZC5yZXNldE9uSGlkZSkge1xuICAgICAgICAgIGFzc2lnbkZpZWxkVmFsdWUoZmllbGQsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgZmllbGQuZm9ybUNvbnRyb2wucmVzZXQoeyB2YWx1ZTogdW5kZWZpbmVkLCBkaXNhYmxlZDogZmllbGQuZm9ybUNvbnRyb2wuZGlzYWJsZWQgfSk7XG4gICAgICAgICAgZmllbGQub3B0aW9ucy5maWVsZENoYW5nZXMubmV4dCh7IHZhbHVlOiB1bmRlZmluZWQsIGZpZWxkLCB0eXBlOiAndmFsdWVDaGFuZ2VzJyB9KTtcbiAgICAgICAgICBpZiAoZmllbGQuZmllbGRHcm91cCAmJiBmaWVsZC5mb3JtQ29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAubGVuZ3RoID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaGlkZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGZpZWxkLnJlc2V0T25IaWRlICYmICFpc1VuZGVmaW5lZChmaWVsZC5kZWZhdWx0VmFsdWUpICYmIGlzVW5kZWZpbmVkKGdldEZpZWxkVmFsdWUoZmllbGQpKSkge1xuICAgICAgICAgIGFzc2lnbkZpZWxkVmFsdWUoZmllbGQsIGZpZWxkLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJDb250cm9sKGZpZWxkLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICBpZiAoZmllbGQucmVzZXRPbkhpZGUgJiYgZmllbGQuZmllbGRBcnJheSAmJiBmaWVsZC5maWVsZEdyb3VwPy5sZW5ndGggIT09IGZpZWxkLm1vZGVsPy5sZW5ndGgpIHtcbiAgICAgICAgICBmaWVsZC5vcHRpb25zLmJ1aWxkKGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWVsZC5vcHRpb25zLmZpZWxkQ2hhbmdlcykge1xuICAgICAgZmllbGQub3B0aW9ucy5maWVsZENoYW5nZXMubmV4dCg8Rm9ybWx5VmFsdWVDaGFuZ2VFdmVudD57IGZpZWxkLCB0eXBlOiAnaGlkZGVuJywgdmFsdWU6IGhpZGUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBldmFsRXhwcihmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHByb3AuaW5kZXhPZignbW9kZWwuJykgPT09IDApIHtcbiAgICAgIGNvbnN0IGtleSA9IHByb3AucmVwbGFjZSgvXm1vZGVsXFwuLywgJycpLFxuICAgICAgICBwYXJlbnQgPSBmaWVsZC5maWVsZEdyb3VwID8gZmllbGQgOiBmaWVsZC5wYXJlbnQ7XG5cbiAgICAgIGxldCBjb250cm9sID0gZmllbGQ/LmtleSA9PT0ga2V5ID8gZmllbGQuZm9ybUNvbnRyb2wgOiBmaWVsZC5mb3JtLmdldChrZXkpO1xuICAgICAgaWYgKCFjb250cm9sICYmIGZpZWxkLmdldChrZXkpKSB7XG4gICAgICAgIGNvbnRyb2wgPSBmaWVsZC5nZXQoa2V5KS5mb3JtQ29udHJvbDtcbiAgICAgIH1cbiAgICAgIGFzc2lnbkZpZWxkVmFsdWUoeyBrZXksIHBhcmVudCwgbW9kZWw6IGZpZWxkLm1vZGVsIH0sIHZhbHVlKTtcbiAgICAgIGlmIChjb250cm9sICYmICEoaXNOaWwoY29udHJvbC52YWx1ZSkgJiYgaXNOaWwodmFsdWUpKSAmJiBjb250cm9sLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICBjb250cm9sLnBhdGNoVmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgdGFyZ2V0OiBhbnkgPSBmaWVsZDtcbiAgICAgICAgY29uc3QgcGF0aHMgPSB0aGlzLl9ldmFsRXhwcmVzc2lvblBhdGgoZmllbGQsIHByb3ApO1xuICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBwYXRocy5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxhc3RJbmRleDsgaSsrKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3BhdGhzW2ldXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldFtwYXRoc1tsYXN0SW5kZXhdXSA9IHZhbHVlO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gYFtGb3JtbHkgRXJyb3JdIFtFeHByZXNzaW9uIFwiJHtwcm9wfVwiXSAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChbJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCcsICdwcm9wcy5kaXNhYmxlZCddLmluY2x1ZGVzKHByb3ApICYmIGhhc0tleShmaWVsZCkpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VEaXNhYmxlZFN0YXRlKGZpZWxkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0RXhwcmVzc2lvbkNoYW5nZXMoZmllbGQsIHByb3AsIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEV4cHJlc3Npb25DaGFuZ2VzKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCBwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKCFmaWVsZC5vcHRpb25zLmZpZWxkQ2hhbmdlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZpZWxkLm9wdGlvbnMuZmllbGRDaGFuZ2VzLm5leHQoe1xuICAgICAgZmllbGQsXG4gICAgICB0eXBlOiAnZXhwcmVzc2lvbkNoYW5nZXMnLFxuICAgICAgcHJvcGVydHksXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2V2YWxFeHByZXNzaW9uUGF0aChmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgcHJvcDogc3RyaW5nKSB7XG4gICAgaWYgKGZpZWxkLl9leHByZXNzaW9uc1twcm9wXSAmJiBmaWVsZC5fZXhwcmVzc2lvbnNbcHJvcF0ucGF0aHMpIHtcbiAgICAgIHJldHVybiBmaWVsZC5fZXhwcmVzc2lvbnNbcHJvcF0ucGF0aHM7XG4gICAgfVxuXG4gICAgbGV0IHBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChwcm9wLmluZGV4T2YoJ1snKSA9PT0gLTEpIHtcbiAgICAgIHBhdGhzID0gcHJvcC5zcGxpdCgnLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wXG4gICAgICAgIC5zcGxpdCgvW1tcXF1dezEsMn0vKSAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjAxOTgyMDZcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcClcbiAgICAgICAgLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcnJheVBhdGggPSBwYXRoLm1hdGNoKC9bJ3xcIl0oLio/KVsnfFwiXS8pO1xuICAgICAgICAgIGlmIChhcnJheVBhdGgpIHtcbiAgICAgICAgICAgIHBhdGhzLnB1c2goYXJyYXlQYXRoWzFdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0aHMucHVzaCguLi5wYXRoLnNwbGl0KCcuJykuZmlsdGVyKChwKSA9PiBwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQuX2V4cHJlc3Npb25zW3Byb3BdKSB7XG4gICAgICBmaWVsZC5fZXhwcmVzc2lvbnNbcHJvcF0ucGF0aHMgPSBwYXRocztcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aHM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,17 @@
1
+ export function evalStringExpression(expression, argNames) {
2
+ try {
3
+ return Function(...argNames, `return ${expression};`);
4
+ }
5
+ catch (error) {
6
+ console.error(error);
7
+ }
8
+ }
9
+ export function evalExpression(expression, thisArg, argVal) {
10
+ if (typeof expression === 'function') {
11
+ return expression.apply(thisArg, argVal);
12
+ }
13
+ else {
14
+ return expression ? true : false;
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL2V4dGVuc2lvbnMvZmllbGQtZXhwcmVzc2lvbi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsVUFBa0IsRUFBRSxRQUFrQjtJQUN6RSxJQUFJO1FBQ0YsT0FBTyxRQUFRLENBQUMsR0FBRyxRQUFRLEVBQUUsVUFBVSxVQUFVLEdBQUcsQ0FBUSxDQUFDO0tBQzlEO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3RCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQzVCLFVBQXlELEVBQ3pELE9BQVksRUFDWixNQUFhO0lBRWIsSUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDcEMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUMxQztTQUFNO1FBQ0wsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0tBQ2xDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBldmFsU3RyaW5nRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcsIGFyZ05hbWVzOiBzdHJpbmdbXSkge1xuICB0cnkge1xuICAgIHJldHVybiBGdW5jdGlvbiguLi5hcmdOYW1lcywgYHJldHVybiAke2V4cHJlc3Npb259O2ApIGFzIGFueTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbEV4cHJlc3Npb24oXG4gIGV4cHJlc3Npb246IHN0cmluZyB8ICgoLi4udmFsdWU6IGFueVtdKSA9PiBhbnkpIHwgYm9vbGVhbixcbiAgdGhpc0FyZzogYW55LFxuICBhcmdWYWw6IGFueVtdLFxuKTogYW55IHtcbiAgaWYgKHR5cGVvZiBleHByZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uYXBwbHkodGhpc0FyZywgYXJnVmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbiA/IHRydWUgOiBmYWxzZTtcbiAgfVxufVxuIl19