@ngx-formly/core 6.3.12 → 7.0.0-alpha.1

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 (129) 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 +8 -8
  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/field-validation/field-validation.mjs +135 -0
  15. package/esm2022/lib/extensions/index.mjs +2 -0
  16. package/esm2022/lib/models/fieldconfig.cache.mjs +2 -0
  17. package/esm2022/lib/models/fieldconfig.mjs +2 -0
  18. package/esm2022/lib/services/formly.builder.mjs +100 -0
  19. package/esm2022/lib/services/formly.config.mjs +229 -0
  20. package/esm2022/lib/templates/field-array.type.mjs +84 -0
  21. package/esm2022/lib/templates/field-template.type.mjs +34 -0
  22. package/esm2022/lib/templates/field.type.mjs +57 -0
  23. package/{esm2020 → esm2022}/lib/templates/field.wrapper.mjs +4 -4
  24. package/esm2022/lib/templates/formly.attributes.mjs +187 -0
  25. package/{esm2020 → esm2022}/lib/templates/formly.group.mjs +8 -8
  26. package/esm2022/lib/templates/formly.validation-message.mjs +69 -0
  27. package/esm2022/lib/utils.mjs +312 -0
  28. package/esm2022/preset/preset-substitution.extension.mjs +30 -0
  29. package/esm2022/preset/preset.config.mjs +11 -0
  30. package/esm2022/preset/preset.module.mjs +18 -0
  31. package/esm2022/select/select-options.pipe.mjs +100 -0
  32. package/{esm2020 → esm2022}/select/select.module.mjs +5 -5
  33. package/esm2022/testing/component-factory.mjs +86 -0
  34. package/{fesm2020 → fesm2022}/ngx-formly-core-json-schema.mjs +16 -16
  35. package/fesm2022/ngx-formly-core-json-schema.mjs.map +1 -0
  36. package/fesm2022/ngx-formly-core-preset.mjs +62 -0
  37. package/fesm2022/ngx-formly-core-preset.mjs.map +1 -0
  38. package/{fesm2020 → fesm2022}/ngx-formly-core-select.mjs +7 -7
  39. package/{fesm2020 → fesm2022}/ngx-formly-core-select.mjs.map +1 -1
  40. package/{fesm2020 → fesm2022}/ngx-formly-core-testing.mjs +5 -4
  41. package/fesm2022/ngx-formly-core-testing.mjs.map +1 -0
  42. package/{fesm2020 → fesm2022}/ngx-formly-core.mjs +1747 -1702
  43. package/fesm2022/ngx-formly-core.mjs.map +1 -0
  44. package/lib/components/formly.field.d.ts +5 -1
  45. package/lib/components/formly.form.d.ts +8 -4
  46. package/lib/components/formly.template.d.ts +1 -1
  47. package/lib/core.config.d.ts +10 -0
  48. package/lib/core.d.ts +4 -3
  49. package/lib/core.module.d.ts +2 -5
  50. package/lib/extensions/field-expression/utils.d.ts +1 -1
  51. package/lib/extensions/index.d.ts +1 -0
  52. package/lib/models/config.d.ts +1 -1
  53. package/lib/models/fieldconfig.cache.d.ts +3 -3
  54. package/lib/models/fieldconfig.d.ts +8 -7
  55. package/lib/services/formly.builder.d.ts +5 -5
  56. package/lib/services/formly.config.d.ts +3 -9
  57. package/lib/templates/field-array.type.d.ts +3 -3
  58. package/lib/templates/field-template.type.d.ts +1 -1
  59. package/lib/templates/field.type.d.ts +5 -5
  60. package/lib/templates/field.wrapper.d.ts +1 -1
  61. package/lib/templates/formly.attributes.d.ts +1 -1
  62. package/lib/templates/formly.group.d.ts +1 -1
  63. package/lib/templates/formly.validation-message.d.ts +1 -1
  64. package/lib/utils.d.ts +5 -5
  65. package/package.json +23 -37
  66. package/preset/preset.config.d.ts +2 -0
  67. package/select/select-options.pipe.d.ts +1 -1
  68. package/testing/component-factory.d.ts +2 -2
  69. package/esm2020/json-schema/formly-json-schema.service.mjs +0 -628
  70. package/esm2020/lib/components/formly.field.mjs +0 -284
  71. package/esm2020/lib/components/formly.form.mjs +0 -147
  72. package/esm2020/lib/core.mjs +0 -19
  73. package/esm2020/lib/core.module.mjs +0 -91
  74. package/esm2020/lib/extensions/core/core.mjs +0 -148
  75. package/esm2020/lib/extensions/field-expression/field-expression.mjs +0 -250
  76. package/esm2020/lib/extensions/field-expression/utils.mjs +0 -17
  77. package/esm2020/lib/extensions/field-form/field-form.mjs +0 -141
  78. package/esm2020/lib/extensions/field-form/utils.mjs +0 -100
  79. package/esm2020/lib/extensions/field-validation/field-validation.mjs +0 -135
  80. package/esm2020/lib/models/fieldconfig.cache.mjs +0 -2
  81. package/esm2020/lib/models/fieldconfig.mjs +0 -2
  82. package/esm2020/lib/services/formly.builder.mjs +0 -93
  83. package/esm2020/lib/services/formly.config.mjs +0 -229
  84. package/esm2020/lib/templates/field-array.type.mjs +0 -84
  85. package/esm2020/lib/templates/field-template.type.mjs +0 -34
  86. package/esm2020/lib/templates/field.type.mjs +0 -57
  87. package/esm2020/lib/templates/formly.attributes.mjs +0 -187
  88. package/esm2020/lib/templates/formly.validation-message.mjs +0 -69
  89. package/esm2020/lib/utils.mjs +0 -312
  90. package/esm2020/preset/preset-substitution.extension.mjs +0 -30
  91. package/esm2020/preset/preset.module.mjs +0 -32
  92. package/esm2020/select/select-options.pipe.mjs +0 -100
  93. package/esm2020/testing/component-factory.mjs +0 -85
  94. package/fesm2015/ngx-formly-core-json-schema.mjs +0 -615
  95. package/fesm2015/ngx-formly-core-json-schema.mjs.map +0 -1
  96. package/fesm2015/ngx-formly-core-preset.mjs +0 -69
  97. package/fesm2015/ngx-formly-core-preset.mjs.map +0 -1
  98. package/fesm2015/ngx-formly-core-select.mjs +0 -120
  99. package/fesm2015/ngx-formly-core-select.mjs.map +0 -1
  100. package/fesm2015/ngx-formly-core-testing.mjs +0 -87
  101. package/fesm2015/ngx-formly-core-testing.mjs.map +0 -1
  102. package/fesm2015/ngx-formly-core.mjs +0 -2417
  103. package/fesm2015/ngx-formly-core.mjs.map +0 -1
  104. package/fesm2020/ngx-formly-core-json-schema.mjs.map +0 -1
  105. package/fesm2020/ngx-formly-core-preset.mjs +0 -67
  106. package/fesm2020/ngx-formly-core-preset.mjs.map +0 -1
  107. package/fesm2020/ngx-formly-core-testing.mjs.map +0 -1
  108. package/fesm2020/ngx-formly-core.mjs.map +0 -1
  109. package/json-schema/package.json +0 -10
  110. package/preset/package.json +0 -10
  111. package/select/package.json +0 -10
  112. package/testing/package.json +0 -10
  113. /package/{esm2020 → esm2022}/json-schema/ngx-formly-core-json-schema.mjs +0 -0
  114. /package/{esm2020 → esm2022}/json-schema/public_api.mjs +0 -0
  115. /package/{esm2020 → esm2022}/lib/models/config.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
  117. /package/{esm2020 → esm2022}/ngx-formly-core.mjs +0 -0
  118. /package/{esm2020 → esm2022}/preset/ngx-formly-core-preset.mjs +0 -0
  119. /package/{esm2020 → esm2022}/preset/public_api.mjs +0 -0
  120. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  121. /package/{esm2020 → esm2022}/select/ngx-formly-core-select.mjs +0 -0
  122. /package/{esm2020 → esm2022}/select/public_api.mjs +0 -0
  123. /package/{esm2020 → esm2022}/testing/ngx-formly-core-testing.mjs +0 -0
  124. /package/{esm2020 → esm2022}/testing/public_api.mjs +0 -0
  125. /package/{ngx-formly-core.d.ts → index.d.ts} +0 -0
  126. /package/json-schema/{ngx-formly-core-json-schema.d.ts → index.d.ts} +0 -0
  127. /package/preset/{ngx-formly-core-preset.d.ts → index.d.ts} +0 -0
  128. /package/select/{ngx-formly-core-select.d.ts → index.d.ts} +0 -0
  129. /package/testing/{ngx-formly-core-testing.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,141 @@
1
+ import { UntypedFormGroup, UntypedFormControl, Validators, FormControl, } from '@angular/forms';
2
+ import { getFieldValue, defineHiddenProp, hasKey, getKeyPath } from '../../utils';
3
+ import { registerControl, findControl, updateValidity } from './utils';
4
+ import { of } from 'rxjs';
5
+ export class FieldFormExtension {
6
+ prePopulate(field) {
7
+ if (!this.root) {
8
+ this.root = field;
9
+ }
10
+ if (field.parent) {
11
+ Object.defineProperty(field, 'form', {
12
+ get: () => field.parent.formControl,
13
+ configurable: true,
14
+ });
15
+ }
16
+ }
17
+ onPopulate(field) {
18
+ if (field.hasOwnProperty('fieldGroup') && !hasKey(field)) {
19
+ defineHiddenProp(field, 'formControl', field.form);
20
+ }
21
+ else {
22
+ this.addFormControl(field);
23
+ }
24
+ }
25
+ postPopulate(field) {
26
+ if (this.root !== field) {
27
+ return;
28
+ }
29
+ this.root = null;
30
+ const markForCheck = this.setValidators(field);
31
+ if (markForCheck && field.parent) {
32
+ let parent = field.parent;
33
+ while (parent) {
34
+ if (hasKey(parent) || !parent.parent) {
35
+ updateValidity(parent.formControl, true);
36
+ }
37
+ parent = parent.parent;
38
+ }
39
+ }
40
+ }
41
+ addFormControl(field) {
42
+ let control = findControl(field);
43
+ if (field.fieldArray) {
44
+ return;
45
+ }
46
+ if (!control) {
47
+ const controlOptions = { updateOn: field.modelOptions.updateOn };
48
+ if (field.fieldGroup) {
49
+ control = new UntypedFormGroup({}, controlOptions);
50
+ }
51
+ else {
52
+ const value = hasKey(field) ? getFieldValue(field) : field.defaultValue;
53
+ control = new UntypedFormControl({ value, disabled: !!field.props.disabled }, { ...controlOptions, initialValueIsDefault: true });
54
+ }
55
+ }
56
+ else {
57
+ if (control instanceof FormControl) {
58
+ const value = hasKey(field) ? getFieldValue(field) : field.defaultValue;
59
+ control.defaultValue = value;
60
+ }
61
+ }
62
+ registerControl(field, control);
63
+ }
64
+ setValidators(field, disabled = false) {
65
+ if (disabled === false && hasKey(field) && field.props?.disabled) {
66
+ disabled = true;
67
+ }
68
+ let markForCheck = false;
69
+ field.fieldGroup?.forEach((f) => f && this.setValidators(f, disabled) && (markForCheck = true));
70
+ if (hasKey(field) || !field.parent || (!hasKey(field) && !field.fieldGroup)) {
71
+ const { formControl: c } = field;
72
+ if (c) {
73
+ if (hasKey(field) && c instanceof FormControl) {
74
+ if (disabled && c.enabled) {
75
+ c.disable({ emitEvent: false, onlySelf: true });
76
+ markForCheck = true;
77
+ }
78
+ if (!disabled && c.disabled) {
79
+ c.enable({ emitEvent: false, onlySelf: true });
80
+ markForCheck = true;
81
+ }
82
+ }
83
+ if (null === c.validator && this.hasValidators(field, '_validators')) {
84
+ c.setValidators(() => {
85
+ const v = Validators.compose(this.mergeValidators(field, '_validators'));
86
+ return v ? v(c) : null;
87
+ });
88
+ markForCheck = true;
89
+ }
90
+ if (null === c.asyncValidator && this.hasValidators(field, '_asyncValidators')) {
91
+ c.setAsyncValidators(() => {
92
+ const v = Validators.composeAsync(this.mergeValidators(field, '_asyncValidators'));
93
+ return v ? v(c) : of(null);
94
+ });
95
+ markForCheck = true;
96
+ }
97
+ if (markForCheck) {
98
+ updateValidity(c, true);
99
+ // update validity of `FormGroup` instance created by field with nested key.
100
+ let parent = c.parent;
101
+ for (let i = 1; i < getKeyPath(field).length; i++) {
102
+ if (parent) {
103
+ updateValidity(parent, true);
104
+ parent = parent.parent;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+ return markForCheck;
111
+ }
112
+ hasValidators(field, type) {
113
+ const c = field.formControl;
114
+ if (c?._fields?.length > 1 && c._fields.some((f) => f[type].length > 0)) {
115
+ return true;
116
+ }
117
+ else if (field[type].length > 0) {
118
+ return true;
119
+ }
120
+ return field.fieldGroup?.some((f) => f?.fieldGroup && !hasKey(f) && this.hasValidators(f, type));
121
+ }
122
+ mergeValidators(field, type) {
123
+ const validators = [];
124
+ const c = field.formControl;
125
+ if (c?._fields?.length > 1) {
126
+ c._fields
127
+ .filter((f) => !f._hide)
128
+ .forEach((f) => validators.push(...f[type]));
129
+ }
130
+ else if (field[type]) {
131
+ validators.push(...field[type]);
132
+ }
133
+ if (field.fieldGroup) {
134
+ field.fieldGroup
135
+ .filter((f) => f?.fieldGroup && !hasKey(f))
136
+ .forEach((f) => validators.push(...this.mergeValidators(f, type)));
137
+ }
138
+ return validators;
139
+ }
140
+ }
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvZXh0ZW5zaW9ucy9maWVsZC1mb3JtL2ZpZWxkLWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQkFBa0IsRUFFbEIsVUFBVSxFQUdWLFdBQVcsR0FDWixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQixNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLFdBQVcsQ0FBQyxLQUE2QjtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDbkMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFPLENBQUMsV0FBVztnQkFDcEMsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBNkI7UUFDdEMsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekQsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxD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QUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsS0FBSyxDQUFDLFVBQVU7aUJBQ2IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1seUV4dGVuc2lvbiwgRm9ybWx5RmllbGRDb25maWdDYWNoZSB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBVbnR5cGVkRm9ybUdyb3VwLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIEFic3RyYWN0Q29udHJvbE9wdGlvbnMsXG4gIFZhbGlkYXRvcnMsXG4gIFZhbGlkYXRvckZuLFxuICBBc3luY1ZhbGlkYXRvckZuLFxuICBGb3JtQ29udHJvbCxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0RmllbGRWYWx1ZSwgZGVmaW5lSGlkZGVuUHJvcCwgaGFzS2V5LCBnZXRLZXlQYXRoIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJDb250cm9sLCBmaW5kQ29udHJvbCwgdXBkYXRlVmFsaWRpdHkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBGaWVsZEZvcm1FeHRlbnNpb24gaW1wbGVtZW50cyBGb3JtbHlFeHRlbnNpb24ge1xuICBwcml2YXRlIHJvb3Q6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGU7XG4gIHByZVBvcHVsYXRlKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgaWYgKCF0aGlzLnJvb3QpIHtcbiAgICAgIHRoaXMucm9vdCA9IGZpZWxkO1xuICAgIH1cblxuICAgIGlmIChmaWVsZC5wYXJlbnQpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJ2Zvcm0nLCB7XG4gICAgICAgIGdldDogKCkgPT4gZmllbGQucGFyZW50IS5mb3JtQ29udHJvbCxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25Qb3B1bGF0ZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGlmIChmaWVsZC5oYXNPd25Qcm9wZXJ0eSgnZmllbGRHcm91cCcpICYmICFoYXNLZXkoZmllbGQpKSB7XG4gICAgICBkZWZpbmVIaWRkZW5Qcm9wKGZpZWxkLCAnZm9ybUNvbnRyb2wnLCBmaWVsZC5mb3JtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRGb3JtQ29udHJvbChmaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgcG9zdFBvcHVsYXRlKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgaWYgKHRoaXMucm9vdCAhPT0gZmllbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSBudWxsO1xuICAgIGNvbnN0IG1hcmtGb3JDaGVjayA9IHRoaXMuc2V0VmFsaWRhdG9ycyhmaWVsZCk7XG4gICAgaWYgKG1hcmtGb3JDaGVjayAmJiBmaWVsZC5wYXJlbnQpIHtcbiAgICAgIGxldCBwYXJlbnQgPSBmaWVsZC5wYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChoYXNLZXkocGFyZW50KSB8fCAhcGFyZW50LnBhcmVudCkge1xuICAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KHBhcmVudC5mb3JtQ29udHJvbCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEZvcm1Db250cm9sKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgbGV0IGNvbnRyb2wgPSBmaW5kQ29udHJvbChmaWVsZCk7XG4gICAgaWYgKGZpZWxkLmZpZWxkQXJyYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xPcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zID0geyB1cGRhdGVPbjogZmllbGQubW9kZWxPcHRpb25zLnVwZGF0ZU9uIH07XG5cbiAgICAgIGlmIChmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICAgIGNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSwgY29udHJvbE9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBoYXNLZXkoZmllbGQpID8gZ2V0RmllbGRWYWx1ZShmaWVsZCkgOiBmaWVsZC5kZWZhdWx0VmFsdWU7XG4gICAgICAgIGNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxuICAgICAgICAgIHsgdmFsdWUsIGRpc2FibGVkOiAhIWZpZWxkLnByb3BzLmRpc2FibGVkIH0sXG4gICAgICAgICAgeyAuLi5jb250cm9sT3B0aW9ucywgaW5pdGlhbFZhbHVlSXNEZWZhdWx0OiB0cnVlIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBoYXNLZXkoZmllbGQpID8gZ2V0RmllbGRWYWx1ZShmaWVsZCkgOiBmaWVsZC5kZWZhdWx0VmFsdWU7XG4gICAgICAgIChjb250cm9sIGFzIGFueSkuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJDb250cm9sKGZpZWxkLCBjb250cm9sKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmFsaWRhdG9ycyhmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgZGlzYWJsZWQgPSBmYWxzZSkge1xuICAgIGlmIChkaXNhYmxlZCA9PT0gZmFsc2UgJiYgaGFzS2V5KGZpZWxkKSAmJiBmaWVsZC5wcm9wcz8uZGlzYWJsZWQpIHtcbiAgICAgIGRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgbWFya0ZvckNoZWNrID0gZmFsc2U7XG4gICAgZmllbGQuZmllbGRHcm91cD8uZm9yRWFjaCgoZikgPT4gZiAmJiB0aGlzLnNldFZhbGlkYXRvcnMoZiwgZGlzYWJsZWQpICYmIChtYXJrRm9yQ2hlY2sgPSB0cnVlKSk7XG4gICAgaWYgKGhhc0tleShmaWVsZCkgfHwgIWZpZWxkLnBhcmVudCB8fCAoIWhhc0tleShmaWVsZCkgJiYgIWZpZWxkLmZpZWxkR3JvdXApKSB7XG4gICAgICBjb25zdCB7IGZvcm1Db250cm9sOiBjIH0gPSBmaWVsZDtcbiAgICAgIGlmIChjKSB7XG4gICAgICAgIGlmIChoYXNLZXkoZmllbGQpICYmIGMgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICAgIGlmIChkaXNhYmxlZCAmJiBjLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGMuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgbWFya0ZvckNoZWNrID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWRpc2FibGVkICYmIGMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGMuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICBtYXJrRm9yQ2hlY2sgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChudWxsID09PSBjLnZhbGlkYXRvciAmJiB0aGlzLmhhc1ZhbGlkYXRvcnMoZmllbGQsICdfdmFsaWRhdG9ycycpKSB7XG4gICAgICAgICAgYy5zZXRWYWxpZGF0b3JzKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBWYWxpZGF0b3JzLmNvbXBvc2UodGhpcy5tZXJnZVZhbGlkYXRvcnM8VmFsaWRhdG9yRm4+KGZpZWxkLCAnX3ZhbGlkYXRvcnMnKSk7XG5cbiAgICAgICAgICAgIHJldHVybiB2ID8gdihjKSA6IG51bGw7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbWFya0ZvckNoZWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChudWxsID09PSBjLmFzeW5jVmFsaWRhdG9yICYmIHRoaXMuaGFzVmFsaWRhdG9ycyhmaWVsZCwgJ19hc3luY1ZhbGlkYXRvcnMnKSkge1xuICAgICAgICAgIGMuc2V0QXN5bmNWYWxpZGF0b3JzKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBWYWxpZGF0b3JzLmNvbXBvc2VBc3luYyh0aGlzLm1lcmdlVmFsaWRhdG9yczxBc3luY1ZhbGlkYXRvckZuPihmaWVsZCwgJ19hc3luY1ZhbGlkYXRvcnMnKSk7XG4gICAgICAgICAgICByZXR1cm4gdiA/IHYoYykgOiBvZihudWxsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtYXJrRm9yQ2hlY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hcmtGb3JDaGVjaykge1xuICAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KGMsIHRydWUpO1xuXG4gICAgICAgICAgLy8gdXBkYXRlIHZhbGlkaXR5IG9mIGBGb3JtR3JvdXBgIGluc3RhbmNlIGNyZWF0ZWQgYnkgZmllbGQgd2l0aCBuZXN0ZWQga2V5LlxuICAgICAgICAgIGxldCBwYXJlbnQgPSBjLnBhcmVudDtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGdldEtleVBhdGgoZmllbGQpLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KHBhcmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmtGb3JDaGVjaztcbiAgfVxuXG4gIHByaXZhdGUgaGFzVmFsaWRhdG9ycyhmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgdHlwZTogJ192YWxpZGF0b3JzJyB8ICdfYXN5bmNWYWxpZGF0b3JzJyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGMgPSBmaWVsZC5mb3JtQ29udHJvbDtcbiAgICBpZiAoYz8uX2ZpZWxkcz8ubGVuZ3RoID4gMSAmJiBjLl9maWVsZHMuc29tZSgoZikgPT4gZlt0eXBlXS5sZW5ndGggPiAwKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChmaWVsZFt0eXBlXS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGQuZmllbGRHcm91cD8uc29tZSgoZikgPT4gZj8uZmllbGRHcm91cCAmJiAhaGFzS2V5KGYpICYmIHRoaXMuaGFzVmFsaWRhdG9ycyhmLCB0eXBlKSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlVmFsaWRhdG9yczxUPihmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgdHlwZTogJ192YWxpZGF0b3JzJyB8ICdfYXN5bmNWYWxpZGF0b3JzJyk6IFRbXSB7XG4gICAgY29uc3QgdmFsaWRhdG9yczogYW55ID0gW107XG4gICAgY29uc3QgYyA9IGZpZWxkLmZvcm1Db250cm9sO1xuICAgIGlmIChjPy5fZmllbGRzPy5sZW5ndGggPiAxKSB7XG4gICAgICBjLl9maWVsZHNcbiAgICAgICAgLmZpbHRlcigoZjogRm9ybWx5RmllbGRDb25maWdDYWNoZSkgPT4gIWYuX2hpZGUpXG4gICAgICAgIC5mb3JFYWNoKChmOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSA9PiB2YWxpZGF0b3JzLnB1c2goLi4uZlt0eXBlXSkpO1xuICAgIH0gZWxzZSBpZiAoZmllbGRbdHlwZV0pIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaCguLi5maWVsZFt0eXBlXSk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgIGZpZWxkLmZpZWxkR3JvdXBcbiAgICAgICAgLmZpbHRlcigoZikgPT4gZj8uZmllbGRHcm91cCAmJiAhaGFzS2V5KGYpKVxuICAgICAgICAuZm9yRWFjaCgoZikgPT4gdmFsaWRhdG9ycy5wdXNoKC4uLnRoaXMubWVyZ2VWYWxpZGF0b3JzKGYsIHR5cGUpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,100 @@
1
+ import { UntypedFormArray, UntypedFormGroup, FormControl } from '@angular/forms';
2
+ import { getKeyPath, getFieldValue, isNil, defineHiddenProp, observe, hasKey } from '../../utils';
3
+ export function unregisterControl(field, emitEvent = false) {
4
+ const control = field.formControl;
5
+ const fieldIndex = control._fields ? control._fields.indexOf(field) : -1;
6
+ if (fieldIndex !== -1) {
7
+ control._fields.splice(fieldIndex, 1);
8
+ }
9
+ const form = control.parent;
10
+ if (!form) {
11
+ return;
12
+ }
13
+ const opts = { emitEvent };
14
+ if (form instanceof UntypedFormArray) {
15
+ const key = form.controls.findIndex((c) => c === control);
16
+ if (key !== -1) {
17
+ form.removeAt(key, opts);
18
+ }
19
+ }
20
+ else if (form instanceof UntypedFormGroup) {
21
+ const paths = getKeyPath(field);
22
+ const key = paths[paths.length - 1];
23
+ if (form.get([key]) === control) {
24
+ form.removeControl(key, opts);
25
+ }
26
+ }
27
+ control.setParent(null);
28
+ }
29
+ export function findControl(field) {
30
+ if (field.formControl) {
31
+ return field.formControl;
32
+ }
33
+ if (field.shareFormControl === false) {
34
+ return null;
35
+ }
36
+ return field.form?.get(getKeyPath(field));
37
+ }
38
+ export function registerControl(field, control, emitEvent = false) {
39
+ control = control || field.formControl;
40
+ if (!control._fields) {
41
+ defineHiddenProp(control, '_fields', []);
42
+ }
43
+ if (control._fields.indexOf(field) === -1) {
44
+ control._fields.push(field);
45
+ }
46
+ if (!field.formControl && control) {
47
+ defineHiddenProp(field, 'formControl', control);
48
+ control.setValidators(null);
49
+ control.setAsyncValidators(null);
50
+ field.props.disabled = !!field.props.disabled;
51
+ const disabledObserver = observe(field, ['props', 'disabled'], ({ firstChange, currentValue }) => {
52
+ if (!firstChange) {
53
+ currentValue ? field.formControl.disable() : field.formControl.enable();
54
+ }
55
+ });
56
+ if (control instanceof FormControl) {
57
+ control.registerOnDisabledChange(disabledObserver.setValue);
58
+ }
59
+ }
60
+ if (!field.form || !hasKey(field)) {
61
+ return;
62
+ }
63
+ let form = field.form;
64
+ const paths = getKeyPath(field);
65
+ const value = getFieldValue(field);
66
+ if (!(isNil(control.value) && isNil(value)) && control.value !== value && control instanceof FormControl) {
67
+ control.patchValue(value);
68
+ }
69
+ for (let i = 0; i < paths.length - 1; i++) {
70
+ const path = paths[i];
71
+ if (!form.get([path])) {
72
+ form.setControl(path, new UntypedFormGroup({}), { emitEvent });
73
+ }
74
+ form = form.get([path]);
75
+ }
76
+ const key = paths[paths.length - 1];
77
+ if (!field._hide && form.get([key]) !== control) {
78
+ form.setControl(key, control, { emitEvent });
79
+ }
80
+ }
81
+ export function updateValidity(c, onlySelf = false) {
82
+ const status = c.status;
83
+ const value = c.value;
84
+ c.updateValueAndValidity({ emitEvent: false, onlySelf });
85
+ if (status !== c.status) {
86
+ c.statusChanges.emit(c.status);
87
+ }
88
+ if (value !== c.value) {
89
+ c.valueChanges.emit(c.value);
90
+ }
91
+ }
92
+ export function clearControl(form) {
93
+ delete form?._fields;
94
+ form.setValidators(null);
95
+ form.setAsyncValidators(null);
96
+ if (form instanceof UntypedFormGroup || form instanceof UntypedFormArray) {
97
+ Object.values(form.controls).forEach((c) => clearControl(c));
98
+ }
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL2V4dGVuc2lvbnMvZmllbGQtZm9ybS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQW1CLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR2xHLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUE2QixFQUFFLFNBQVMsR0FBRyxLQUFLO0lBQ2hGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFDbEMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBNkMsQ0FBQztJQUNuRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDM0IsSUFBSSxJQUFJLFlBQVksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE9B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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0S2V5UGF0aCwgZ2V0RmllbGRWYWx1ZSwgaXNOaWwsIGRlZmluZUhpZGRlblByb3AsIG9ic2VydmUsIGhhc0tleSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckNvbnRyb2woZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIGVtaXRFdmVudCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbnRyb2wgPSBmaWVsZC5mb3JtQ29udHJvbDtcbiAgY29uc3QgZmllbGRJbmRleCA9IGNvbnRyb2wuX2ZpZWxkcyA/IGNvbnRyb2wuX2ZpZWxkcy5pbmRleE9mKGZpZWxkKSA6IC0xO1xuICBpZiAoZmllbGRJbmRleCAhPT0gLTEpIHtcbiAgICBjb250cm9sLl9maWVsZHMuc3BsaWNlKGZpZWxkSW5kZXgsIDEpO1xuICB9XG5cbiAgY29uc3QgZm9ybSA9IGNvbnRyb2wucGFyZW50IGFzIFVudHlwZWRGb3JtQXJyYXkgfCBVbnR5cGVkRm9ybUdyb3VwO1xuICBpZiAoIWZvcm0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcHRzID0geyBlbWl0RXZlbnQgfTtcbiAgaWYgKGZvcm0gaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgY29uc3Qga2V5ID0gZm9ybS5jb250cm9scy5maW5kSW5kZXgoKGMpID0+IGMgPT09IGNvbnRyb2wpO1xuICAgIGlmIChrZXkgIT09IC0xKSB7XG4gICAgICBmb3JtLnJlbW92ZUF0KGtleSwgb3B0cyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGZvcm0gaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgY29uc3QgcGF0aHMgPSBnZXRLZXlQYXRoKGZpZWxkKTtcbiAgICBjb25zdCBrZXkgPSBwYXRoc1twYXRocy5sZW5ndGggLSAxXTtcbiAgICBpZiAoZm9ybS5nZXQoW2tleV0pID09PSBjb250cm9sKSB7XG4gICAgICBmb3JtLnJlbW92ZUNvbnRyb2woa2V5LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBjb250cm9sLnNldFBhcmVudChudWxsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb250cm9sKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKTogQWJzdHJhY3RDb250cm9sIHtcbiAgaWYgKGZpZWxkLmZvcm1Db250cm9sKSB7XG4gICAgcmV0dXJuIGZpZWxkLmZvcm1Db250cm9sO1xuICB9XG5cbiAgaWYgKGZpZWxkLnNoYXJlRm9ybUNvbnRyb2wgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZmllbGQuZm9ybT8uZ2V0KGdldEtleVBhdGgoZmllbGQpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29udHJvbChcbiAgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsXG4gIGNvbnRyb2w/OiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlWydmb3JtQ29udHJvbCddLFxuICBlbWl0RXZlbnQgPSBmYWxzZSxcbikge1xuICBjb250cm9sID0gY29udHJvbCB8fCBmaWVsZC5mb3JtQ29udHJvbDtcblxuICBpZiAoIWNvbnRyb2wuX2ZpZWxkcykge1xuICAgIGRlZmluZUhpZGRlblByb3AoY29udHJvbCwgJ19maWVsZHMnLCBbXSk7XG4gIH1cbiAgaWYgKGNvbnRyb2wuX2ZpZWxkcy5pbmRleE9mKGZpZWxkKSA9PT0gLTEpIHtcbiAgICBjb250cm9sLl9maWVsZHMucHVzaChmaWVsZCk7XG4gIH1cblxuICBpZiAoIWZpZWxkLmZvcm1Db250cm9sICYmIGNvbnRyb2wpIHtcbiAgICBkZWZpbmVIaWRkZW5Qcm9wKGZpZWxkLCAnZm9ybUNvbnRyb2wnLCBjb250cm9sKTtcbiAgICBjb250cm9sLnNldFZhbGlkYXRvcnMobnVsbCk7XG4gICAgY29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMobnVsbCk7XG5cbiAgICBmaWVsZC5wcm9wcy5kaXNhYmxlZCA9ICEhZmllbGQucHJvcHMuZGlzYWJsZWQ7XG4gICAgY29uc3QgZGlzYWJsZWRPYnNlcnZlciA9IG9ic2VydmUoZmllbGQsIFsncHJvcHMnLCAnZGlzYWJsZWQnXSwgKHsgZmlyc3RDaGFuZ2UsIGN1cnJlbnRWYWx1ZSB9KSA9PiB7XG4gICAgICBpZiAoIWZpcnN0Q2hhbmdlKSB7XG4gICAgICAgIGN1cnJlbnRWYWx1ZSA/IGZpZWxkLmZvcm1Db250cm9sLmRpc2FibGUoKSA6IGZpZWxkLmZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgIGNvbnRyb2wucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGRpc2FibGVkT2JzZXJ2ZXIuc2V0VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZmllbGQuZm9ybSB8fCAhaGFzS2V5KGZpZWxkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBmb3JtID0gZmllbGQuZm9ybTtcbiAgY29uc3QgcGF0aHMgPSBnZXRLZXlQYXRoKGZpZWxkKTtcbiAgY29uc3QgdmFsdWUgPSBnZXRGaWVsZFZhbHVlKGZpZWxkKTtcbiAgaWYgKCEoaXNOaWwoY29udHJvbC52YWx1ZSkgJiYgaXNOaWwodmFsdWUpKSAmJiBjb250cm9sLnZhbHVlICE9PSB2YWx1ZSAmJiBjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICBjb250cm9sLnBhdGNoVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBwYXRoID0gcGF0aHNbaV07XG4gICAgaWYgKCFmb3JtLmdldChbcGF0aF0pKSB7XG4gICAgICAoZm9ybSBhcyBVbnR5cGVkRm9ybUdyb3VwKS5zZXRDb250cm9sKHBhdGgsIG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KSwgeyBlbWl0RXZlbnQgfSk7XG4gICAgfVxuXG4gICAgZm9ybSA9IDxVbnR5cGVkRm9ybUdyb3VwPmZvcm0uZ2V0KFtwYXRoXSk7XG4gIH1cblxuICBjb25zdCBrZXkgPSBwYXRoc1twYXRocy5sZW5ndGggLSAxXTtcbiAgaWYgKCFmaWVsZC5faGlkZSAmJiBmb3JtLmdldChba2V5XSkgIT09IGNvbnRyb2wpIHtcbiAgICAoZm9ybSBhcyBVbnR5cGVkRm9ybUdyb3VwKS5zZXRDb250cm9sKGtleSwgY29udHJvbCwgeyBlbWl0RXZlbnQgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZhbGlkaXR5KGM6IEFic3RyYWN0Q29udHJvbCwgb25seVNlbGYgPSBmYWxzZSkge1xuICBjb25zdCBzdGF0dXMgPSBjLnN0YXR1cztcbiAgY29uc3QgdmFsdWUgPSBjLnZhbHVlO1xuICBjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZiB9KTtcbiAgaWYgKHN0YXR1cyAhPT0gYy5zdGF0dXMpIHtcbiAgICAoYy5zdGF0dXNDaGFuZ2VzIGFzIEV2ZW50RW1pdHRlcjxzdHJpbmc+KS5lbWl0KGMuc3RhdHVzKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSAhPT0gYy52YWx1ZSkge1xuICAgIChjLnZhbHVlQ2hhbmdlcyBhcyBFdmVudEVtaXR0ZXI8YW55PikuZW1pdChjLnZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJDb250cm9sKGZvcm06IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGVbJ2Zvcm1Db250cm9sJ10pIHtcbiAgZGVsZXRlIGZvcm0/Ll9maWVsZHM7XG4gIGZvcm0uc2V0VmFsaWRhdG9ycyhudWxsKTtcbiAgZm9ybS5zZXRBc3luY1ZhbGlkYXRvcnMobnVsbCk7XG4gIGlmIChmb3JtIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCB8fCBmb3JtIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgIE9iamVjdC52YWx1ZXMoZm9ybS5jb250cm9scykuZm9yRWFjaCgoYykgPT4gY2xlYXJDb250cm9sKGMpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,135 @@
1
+ import { Validators } from '@angular/forms';
2
+ import { FORMLY_VALIDATORS, defineHiddenProp, isPromise, observe, clone, isObject, hasKey } from '../../utils';
3
+ import { updateValidity } from '../field-form/utils';
4
+ import { isObservable } from 'rxjs';
5
+ import { map } from 'rxjs/operators';
6
+ export class FieldValidationExtension {
7
+ constructor(config) {
8
+ this.config = config;
9
+ }
10
+ onPopulate(field) {
11
+ this.initFieldValidation(field, 'validators');
12
+ this.initFieldValidation(field, 'asyncValidators');
13
+ }
14
+ initFieldValidation(field, type) {
15
+ const validators = [];
16
+ if (type === 'validators' && !(field.hasOwnProperty('fieldGroup') && !hasKey(field))) {
17
+ validators.push(this.getPredefinedFieldValidation(field));
18
+ }
19
+ if (field[type]) {
20
+ for (const validatorName of Object.keys(field[type])) {
21
+ validatorName === 'validation'
22
+ ? validators.push(...field[type].validation.map((v) => this.wrapNgValidatorFn(field, v)))
23
+ : validators.push(this.wrapNgValidatorFn(field, field[type][validatorName], validatorName));
24
+ }
25
+ }
26
+ defineHiddenProp(field, '_' + type, validators);
27
+ }
28
+ getPredefinedFieldValidation(field) {
29
+ let VALIDATORS = [];
30
+ FORMLY_VALIDATORS.forEach((opt) => observe(field, ['props', opt], ({ currentValue, firstChange }) => {
31
+ VALIDATORS = VALIDATORS.filter((o) => o !== opt);
32
+ if (opt === 'required' && currentValue != null && typeof currentValue !== 'boolean') {
33
+ console.warn(`Formly: Invalid prop 'required' of type '${typeof currentValue}', expected 'boolean' (Field:${field.key}).`);
34
+ }
35
+ if (currentValue != null && currentValue !== false) {
36
+ VALIDATORS.push(opt);
37
+ }
38
+ if (!firstChange && field.formControl) {
39
+ updateValidity(field.formControl);
40
+ }
41
+ }));
42
+ return (control) => {
43
+ if (VALIDATORS.length === 0) {
44
+ return null;
45
+ }
46
+ return Validators.compose(VALIDATORS.map((opt) => () => {
47
+ const value = field.props[opt];
48
+ switch (opt) {
49
+ case 'required':
50
+ return Validators.required(control);
51
+ case 'pattern':
52
+ return Validators.pattern(value)(control);
53
+ case 'minLength':
54
+ const minLengthResult = Validators.minLength(value)(control);
55
+ const minLengthKey = this.config.getValidatorMessage('minlength') || field.validation?.messages?.minlength
56
+ ? 'minlength'
57
+ : 'minLength';
58
+ return minLengthResult ? { [minLengthKey]: minLengthResult.minlength } : null;
59
+ case 'maxLength':
60
+ const maxLengthResult = Validators.maxLength(value)(control);
61
+ const maxLengthKey = this.config.getValidatorMessage('maxlength') || field.validation?.messages?.maxlength
62
+ ? 'maxlength'
63
+ : 'maxLength';
64
+ return maxLengthResult ? { [maxLengthKey]: maxLengthResult.maxlength } : null;
65
+ case 'min':
66
+ return Validators.min(value)(control);
67
+ case 'max':
68
+ return Validators.max(value)(control);
69
+ default:
70
+ return null;
71
+ }
72
+ }))(control);
73
+ };
74
+ }
75
+ wrapNgValidatorFn(field, validator, validatorName) {
76
+ let validatorOption;
77
+ if (typeof validator === 'string') {
78
+ validatorOption = clone(this.config.getValidator(validator));
79
+ }
80
+ if (typeof validator === 'object' && validator.name) {
81
+ validatorOption = clone(this.config.getValidator(validator.name));
82
+ if (validator.options) {
83
+ validatorOption.options = validator.options;
84
+ }
85
+ }
86
+ if (typeof validator === 'object' && validator.expression) {
87
+ const { expression, ...options } = validator;
88
+ validatorOption = {
89
+ name: validatorName,
90
+ validation: expression,
91
+ options: Object.keys(options).length > 0 ? options : null,
92
+ };
93
+ }
94
+ if (typeof validator === 'function') {
95
+ validatorOption = {
96
+ name: validatorName,
97
+ validation: validator,
98
+ };
99
+ }
100
+ return (control) => {
101
+ const errors = validatorOption.validation(control, field, validatorOption.options);
102
+ if (isPromise(errors)) {
103
+ return errors.then((v) => this.handleResult(field, validatorName ? !!v : v, validatorOption));
104
+ }
105
+ if (isObservable(errors)) {
106
+ return errors.pipe(map((v) => this.handleResult(field, validatorName ? !!v : v, validatorOption)));
107
+ }
108
+ return this.handleResult(field, validatorName ? !!errors : errors, validatorOption);
109
+ };
110
+ }
111
+ handleResult(field, errors, { name, options }) {
112
+ if (typeof errors === 'boolean') {
113
+ errors = errors ? null : { [name]: options ? options : true };
114
+ }
115
+ const ctrl = field.formControl;
116
+ ctrl?._childrenErrors?.[name]?.();
117
+ if (isObject(errors)) {
118
+ Object.keys(errors).forEach((name) => {
119
+ const errorPath = errors[name].errorPath ? errors[name].errorPath : options?.errorPath;
120
+ const childCtrl = errorPath ? field.formControl.get(errorPath) : null;
121
+ if (childCtrl) {
122
+ const { errorPath: _errorPath, ...opts } = errors[name];
123
+ childCtrl.setErrors({ ...(childCtrl.errors || {}), [name]: opts });
124
+ !ctrl._childrenErrors && defineHiddenProp(ctrl, '_childrenErrors', {});
125
+ ctrl._childrenErrors[name] = () => {
126
+ const { [name]: _toDelete, ...childErrors } = childCtrl.errors || {};
127
+ childCtrl.setErrors(Object.keys(childErrors).length === 0 ? null : childErrors);
128
+ };
129
+ }
130
+ });
131
+ }
132
+ return errors;
133
+ }
134
+ }
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtdmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvZXh0ZW5zaW9ucy9maWVsZC12YWxpZGF0aW9uL2ZpZWxkLXZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFtQixVQUFVLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUFvQixNQUFvQjtRQUFwQixXQUFNLEdBQU4sTUFBTSxDQUFjO0lBQUcsQ0FBQztJQUU1QyxVQUFVLENBQUMsS0FBNkI7UUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQTZCLEVBQUUsSUFBc0M7UUFDL0YsTUFBTSxVQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JGLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixD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LFdBQVcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ2xGLENBQUMsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybWx5Q29uZmlnIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybWx5LmNvbmZpZyc7XG5pbXBvcnQgeyBGb3JtbHlFeHRlbnNpb24sIFZhbGlkYXRvck9wdGlvbiwgRm9ybWx5RmllbGRDb25maWdDYWNoZSB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRk9STUxZX1ZBTElEQVRPUlMsIGRlZmluZUhpZGRlblByb3AsIGlzUHJvbWlzZSwgb2JzZXJ2ZSwgY2xvbmUsIGlzT2JqZWN0LCBoYXNLZXkgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyB1cGRhdGVWYWxpZGl0eSB9IGZyb20gJy4uL2ZpZWxkLWZvcm0vdXRpbHMnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBGaWVsZFZhbGlkYXRpb25FeHRlbnNpb24gaW1wbGVtZW50cyBGb3JtbHlFeHRlbnNpb24ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogRm9ybWx5Q29uZmlnKSB7fVxuXG4gIG9uUG9wdWxhdGUoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICB0aGlzLmluaXRGaWVsZFZhbGlkYXRpb24oZmllbGQsICd2YWxpZGF0b3JzJyk7XG4gICAgdGhpcy5pbml0RmllbGRWYWxpZGF0aW9uKGZpZWxkLCAnYXN5bmNWYWxpZGF0b3JzJyk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGaWVsZFZhbGlkYXRpb24oZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIHR5cGU6ICd2YWxpZGF0b3JzJyB8ICdhc3luY1ZhbGlkYXRvcnMnKSB7XG4gICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xuICAgIGlmICh0eXBlID09PSAndmFsaWRhdG9ycycgJiYgIShmaWVsZC5oYXNPd25Qcm9wZXJ0eSgnZmllbGRHcm91cCcpICYmICFoYXNLZXkoZmllbGQpKSkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKHRoaXMuZ2V0UHJlZGVmaW5lZEZpZWxkVmFsaWRhdGlvbihmaWVsZCkpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZFt0eXBlXSkge1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3JOYW1lIG9mIE9iamVjdC5rZXlzKGZpZWxkW3R5cGVdKSkge1xuICAgICAgICB2YWxpZGF0b3JOYW1lID09PSAndmFsaWRhdGlvbidcbiAgICAgICAgICA/IHZhbGlkYXRvcnMucHVzaCguLi5maWVsZFt0eXBlXS52YWxpZGF0aW9uLm1hcCgodjogYW55KSA9PiB0aGlzLndyYXBOZ1ZhbGlkYXRvckZuKGZpZWxkLCB2KSkpXG4gICAgICAgICAgOiB2YWxpZGF0b3JzLnB1c2godGhpcy53cmFwTmdWYWxpZGF0b3JGbihmaWVsZCwgZmllbGRbdHlwZV1bdmFsaWRhdG9yTmFtZV0sIHZhbGlkYXRvck5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWZpbmVIaWRkZW5Qcm9wKGZpZWxkLCAnXycgKyB0eXBlLCB2YWxpZGF0b3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJlZGVmaW5lZEZpZWxkVmFsaWRhdGlvbihmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSk6IFZhbGlkYXRvckZuIHtcbiAgICBsZXQgVkFMSURBVE9SUzogc3RyaW5nW10gPSBbXTtcbiAgICBGT1JNTFlfVkFMSURBVE9SUy5mb3JFYWNoKChvcHQpID0+XG4gICAgICBvYnNlcnZlKGZpZWxkLCBbJ3Byb3BzJywgb3B0XSwgKHsgY3VycmVudFZhbHVlLCBmaXJzdENoYW5nZSB9KSA9PiB7XG4gICAgICAgIFZBTElEQVRPUlMgPSBWQUxJREFUT1JTLmZpbHRlcigobykgPT4gbyAhPT0gb3B0KTtcbiAgICAgICAgaWYgKG9wdCA9PT0gJ3JlcXVpcmVkJyAmJiBjdXJyZW50VmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgY3VycmVudFZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgRm9ybWx5OiBJbnZhbGlkIHByb3AgJ3JlcXVpcmVkJyBvZiB0eXBlICcke3R5cGVvZiBjdXJyZW50VmFsdWV9JywgZXhwZWN0ZWQgJ2Jvb2xlYW4nIChGaWVsZDoke1xuICAgICAgICAgICAgICBmaWVsZC5rZXlcbiAgICAgICAgICAgIH0pLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCAmJiBjdXJyZW50VmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgVkFMSURBVE9SUy5wdXNoKG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaXJzdENoYW5nZSAmJiBmaWVsZC5mb3JtQ29udHJvbCkge1xuICAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KGZpZWxkLmZvcm1Db250cm9sKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICBpZiAoVkFMSURBVE9SUy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBWYWxpZGF0b3JzLmNvbXBvc2UoXG4gICAgICAgIFZBTElEQVRPUlMubWFwKChvcHQpID0+ICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLnByb3BzW29wdF07XG4gICAgICAgICAgc3dpdGNoIChvcHQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucmVxdWlyZWQoY29udHJvbCk7XG4gICAgICAgICAgICBjYXNlICdwYXR0ZXJuJzpcbiAgICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybih2YWx1ZSkoY29udHJvbCk7XG4gICAgICAgICAgICBjYXNlICdtaW5MZW5ndGgnOlxuICAgICAgICAgICAgICBjb25zdCBtaW5MZW5ndGhSZXN1bHQgPSBWYWxpZGF0b3JzLm1pbkxlbmd0aCh2YWx1ZSkoY29udHJvbCk7XG4gICAgICAgICAgICAgIGNvbnN0IG1pbkxlbmd0aEtleSA9XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZ2V0VmFsaWRhdG9yTWVzc2FnZSgnbWlubGVuZ3RoJykgfHwgZmllbGQudmFsaWRhdGlvbj8ubWVzc2FnZXM/Lm1pbmxlbmd0aFxuICAgICAgICAgICAgICAgICAgPyAnbWlubGVuZ3RoJ1xuICAgICAgICAgICAgICAgICAgOiAnbWluTGVuZ3RoJztcblxuICAgICAgICAgICAgICByZXR1cm4gbWluTGVuZ3RoUmVzdWx0ID8geyBbbWluTGVuZ3RoS2V5XTogbWluTGVuZ3RoUmVzdWx0Lm1pbmxlbmd0aCB9IDogbnVsbDtcbiAgICAgICAgICAgIGNhc2UgJ21heExlbmd0aCc6XG4gICAgICAgICAgICAgIGNvbnN0IG1heExlbmd0aFJlc3VsdCA9IFZhbGlkYXRvcnMubWF4TGVuZ3RoKHZhbHVlKShjb250cm9sKTtcbiAgICAgICAgICAgICAgY29uc3QgbWF4TGVuZ3RoS2V5ID1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5nZXRWYWxpZGF0b3JNZXNzYWdlKCdtYXhsZW5ndGgnKSB8fCBmaWVsZC52YWxpZGF0aW9uPy5tZXNzYWdlcz8ubWF4bGVuZ3RoXG4gICAgICAgICAgICAgICAgICA/ICdtYXhsZW5ndGgnXG4gICAgICAgICAgICAgICAgICA6ICdtYXhMZW5ndGgnO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtYXhMZW5ndGhSZXN1bHQgPyB7IFttYXhMZW5ndGhLZXldOiBtYXhMZW5ndGhSZXN1bHQubWF4bGVuZ3RoIH0gOiBudWxsO1xuICAgICAgICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMubWluKHZhbHVlKShjb250cm9sKTtcbiAgICAgICAgICAgIGNhc2UgJ21heCc6XG4gICAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1heCh2YWx1ZSkoY29udHJvbCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKSEoY29udHJvbCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcE5nVmFsaWRhdG9yRm4oZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIHZhbGlkYXRvcjogYW55LCB2YWxpZGF0b3JOYW1lPzogc3RyaW5nKSB7XG4gICAgbGV0IHZhbGlkYXRvck9wdGlvbjogVmFsaWRhdG9yT3B0aW9uO1xuICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsaWRhdG9yT3B0aW9uID0gY2xvbmUodGhpcy5jb25maWcuZ2V0VmFsaWRhdG9yKHZhbGlkYXRvcikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSAnb2JqZWN0JyAmJiB2YWxpZGF0b3IubmFtZSkge1xuICAgICAgdmFsaWRhdG9yT3B0aW9uID0gY2xvbmUodGhpcy5jb25maWcuZ2V0VmFsaWRhdG9yKHZhbGlkYXRvci5uYW1lKSk7XG4gICAgICBpZiAodmFsaWRhdG9yLm9wdGlvbnMpIHtcbiAgICAgICAgdmFsaWRhdG9yT3B0aW9uLm9wdGlvbnMgPSB2YWxpZGF0b3Iub3B0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbGlkYXRvciA9PT0gJ29iamVjdCcgJiYgdmFsaWRhdG9yLmV4cHJlc3Npb24pIHtcbiAgICAgIGNvbnN0IHsgZXhwcmVzc2lvbiwgLi4ub3B0aW9ucyB9ID0gdmFsaWRhdG9yO1xuICAgICAgdmFsaWRhdG9yT3B0aW9uID0ge1xuICAgICAgICBuYW1lOiB2YWxpZGF0b3JOYW1lLFxuICAgICAgICB2YWxpZGF0aW9uOiBleHByZXNzaW9uLFxuICAgICAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwID8gb3B0aW9ucyA6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YWxpZGF0b3JPcHRpb24gPSB7XG4gICAgICAgIG5hbWU6IHZhbGlkYXRvck5hbWUsXG4gICAgICAgIHZhbGlkYXRpb246IHZhbGlkYXRvcixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yczogYW55ID0gdmFsaWRhdG9yT3B0aW9uLnZhbGlkYXRpb24oY29udHJvbCwgZmllbGQsIHZhbGlkYXRvck9wdGlvbi5vcHRpb25zKTtcbiAgICAgIGlmIChpc1Byb21pc2UoZXJyb3JzKSkge1xuICAgICAgICByZXR1cm4gZXJyb3JzLnRoZW4oKHYpID0+IHRoaXMuaGFuZGxlUmVzdWx0KGZpZWxkLCB2YWxpZGF0b3JOYW1lID8gISF2IDogdiwgdmFsaWRhdG9yT3B0aW9uKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc09ic2VydmFibGUoZXJyb3JzKSkge1xuICAgICAgICByZXR1cm4gZXJyb3JzLnBpcGUobWFwKCh2KSA9PiB0aGlzLmhhbmRsZVJlc3VsdChmaWVsZCwgdmFsaWRhdG9yTmFtZSA/ICEhdiA6IHYsIHZhbGlkYXRvck9wdGlvbikpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzdWx0KGZpZWxkLCB2YWxpZGF0b3JOYW1lID8gISFlcnJvcnMgOiBlcnJvcnMsIHZhbGlkYXRvck9wdGlvbik7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzdWx0KGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCBlcnJvcnM6IGFueSwgeyBuYW1lLCBvcHRpb25zIH06IFZhbGlkYXRvck9wdGlvbikge1xuICAgIGlmICh0eXBlb2YgZXJyb3JzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGVycm9ycyA9IGVycm9ycyA/IG51bGwgOiB7IFtuYW1lXTogb3B0aW9ucyA/IG9wdGlvbnMgOiB0cnVlIH07XG4gICAgfVxuXG4gICAgY29uc3QgY3RybCA9IGZpZWxkLmZvcm1Db250cm9sO1xuICAgIGN0cmw/Ll9jaGlsZHJlbkVycm9ycz8uW25hbWVdPy4oKTtcblxuICAgIGlmIChpc09iamVjdChlcnJvcnMpKSB7XG4gICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JQYXRoID0gZXJyb3JzW25hbWVdLmVycm9yUGF0aCA/IGVycm9yc1tuYW1lXS5lcnJvclBhdGggOiBvcHRpb25zPy5lcnJvclBhdGg7XG5cbiAgICAgICAgY29uc3QgY2hpbGRDdHJsID0gZXJyb3JQYXRoID8gZmllbGQuZm9ybUNvbnRyb2wuZ2V0KGVycm9yUGF0aCkgOiBudWxsO1xuICAgICAgICBpZiAoY2hpbGRDdHJsKSB7XG4gICAgICAgICAgY29uc3QgeyBlcnJvclBhdGg6IF9lcnJvclBhdGgsIC4uLm9wdHMgfSA9IGVycm9yc1tuYW1lXTtcbiAgICAgICAgICBjaGlsZEN0cmwuc2V0RXJyb3JzKHsgLi4uKGNoaWxkQ3RybC5lcnJvcnMgfHwge30pLCBbbmFtZV06IG9wdHMgfSk7XG5cbiAgICAgICAgICAhY3RybC5fY2hpbGRyZW5FcnJvcnMgJiYgZGVmaW5lSGlkZGVuUHJvcChjdHJsLCAnX2NoaWxkcmVuRXJyb3JzJywge30pO1xuICAgICAgICAgIGN0cmwuX2NoaWxkcmVuRXJyb3JzW25hbWVdID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBbbmFtZV06IF90b0RlbGV0ZSwgLi4uY2hpbGRFcnJvcnMgfSA9IGNoaWxkQ3RybC5lcnJvcnMgfHwge307XG4gICAgICAgICAgICBjaGlsZEN0cmwuc2V0RXJyb3JzKE9iamVjdC5rZXlzKGNoaWxkRXJyb3JzKS5sZW5ndGggPT09IDAgPyBudWxsIDogY2hpbGRFcnJvcnMpO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export { FieldExpressionExtension } from './field-expression/field-expression';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL2V4dGVuc2lvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBGaWVsZEV4cHJlc3Npb25FeHRlbnNpb24gfSBmcm9tICcuL2ZpZWxkLWV4cHJlc3Npb24vZmllbGQtZXhwcmVzc2lvbic7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRjb25maWcuY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL21vZGVscy9maWVsZGNvbmZpZy5jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYsIEluamVjdG9yLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Hcm91cCwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICcuLi90ZW1wbGF0ZXMvZmllbGQudHlwZSc7XG5pbXBvcnQgeyBGb3JtbHlFeHRlbnNpb24gfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5Rm9ybU9wdGlvbnMgfSBmcm9tICcuL2ZpZWxkY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlIGV4dGVuZHMgRm9ybWx5RmllbGRDb25maWcge1xuICBmb3JtPzogVW50eXBlZEZvcm1Hcm91cCB8IFVudHlwZWRGb3JtQXJyYXk7XG4gIG1vZGVsPzogYW55O1xuICBmb3JtQ29udHJvbD86IEFic3RyYWN0Q29udHJvbCAmIHtcbiAgICBfZmllbGRzPzogRm9ybWx5RmllbGRDb25maWdDYWNoZVtdO1xuICAgIF9jaGlsZHJlbkVycm9ycz86IHsgW2lkOiBzdHJpbmddOiAoKSA9PiB2b2lkIH07XG4gIH07XG4gIHBhcmVudD86IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGU7XG4gIG9wdGlvbnM/OiBGb3JtbHlGb3JtT3B0aW9uc0NhY2hlO1xuICBzaGFyZUZvcm1Db250cm9sPzogYm9vbGVhbjtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIF9sb2NhbEZpZWxkcz86IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGVbXTtcbiAgX2VsZW1lbnRSZWZzPzogRWxlbWVudFJlZltdO1xuICBfZXhwcmVzc2lvbnM/OiB7XG4gICAgW3Byb3BlcnR5OiBzdHJpbmddOiB7XG4gICAgICBjYWxsYmFjaz86IChpbmdvcmVDYWNoZTogYm9vbGVhbikgPT4gYm9vbGVhbjtcbiAgICAgIHBhdGhzPzogc3RyaW5nW107XG4gICAgICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb24gfCBudWxsO1xuICAgICAgdmFsdWUkPzogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIH07XG4gIH07XG4gIF9oaWRlPzogYm9vbGVhbjtcbiAgX3ZhbGlkYXRvcnM/OiBWYWxpZGF0b3JGbltdO1xuICBfYXN5bmNWYWxpZGF0b3JzPzogQXN5bmNWYWxpZGF0b3JGbltdO1xuICBfY29tcG9uZW50UmVmcz86IChDb21wb25lbnRSZWY8RmllbGRUeXBlPiB8IEVtYmVkZGVkVmlld1JlZjxGaWVsZFR5cGU+KVtdO1xuICBfcHJveHlJbnN0YW5jZT86IEZvcm1seUV4dGVuc2lvbjtcbiAgX2tleVBhdGg/OiB7XG4gICAga2V5OiBGb3JtbHlGaWVsZENvbmZpZ1sna2V5J107XG4gICAgcGF0aDogc3RyaW5nW107XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5Rm9ybU9wdGlvbnNDYWNoZSBleHRlbmRzIEZvcm1seUZvcm1PcHRpb25zIHtcbiAgY2hlY2tFeHByZXNzaW9ucz86IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcsIGluZ29yZUNhY2hlPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgX3ZpZXdDb250YWluZXJSZWY/OiBWaWV3Q29udGFpbmVyUmVmO1xuICBfaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgX2hpZGRlbkZpZWxkc0ZvckNoZWNrPzogeyBmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZTsgZGVmYXVsdD86IGJvb2xlYW4gfVtdO1xuICBfaW5pdGlhbE1vZGVsPzogYW55O1xuICBfZGV0ZWN0Q2hhbmdlcz86IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHZvaWQ7XG5cbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIF9idWlsZEZvcm0/OiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBfY2hlY2tGaWVsZD86IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcsIGluZ29yZUNhY2hlPzogYm9vbGVhbikgPT4gdm9pZDtcblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgX21hcmtGb3JDaGVjaz86IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHZvaWQ7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRjb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL21vZGVscy9maWVsZGNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVW50eXBlZEZvcm1Hcm91cCxcbiAgVW50eXBlZEZvcm1BcnJheSxcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gIFZhbGlkYXRvckZuLFxuICBBc3luY1ZhbGlkYXRvckZuLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICcuLi90ZW1wbGF0ZXMvZmllbGQudHlwZSc7XG5pbXBvcnQgeyBGaWVsZFdyYXBwZXIgfSBmcm9tICcuLi90ZW1wbGF0ZXMvZmllbGQud3JhcHBlcic7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZU9wdGlvbiB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbnR5cGUgRmllbGRFeHByZXNzaW9uPFQgPSBhbnk+ID0gc3RyaW5nIHwgKChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IFQpIHwgT2JzZXJ2YWJsZTxUPjtcbnR5cGUgRmllbGRFeHByZXNzaW9ucyA9IHsgW3Byb3BlcnR5OiBzdHJpbmddOiBGaWVsZEV4cHJlc3Npb24gfSAmIHtcbiAgY2xhc3NOYW1lPzogRmllbGRFeHByZXNzaW9uPHN0cmluZz47XG4gIGhpZGU/OiBGaWVsZEV4cHJlc3Npb248Ym9vbGVhbj47XG4gICdwcm9wcy5kaXNhYmxlZCc/OiBGaWVsZEV4cHJlc3Npb248Ym9vbGVhbj47XG4gICdwcm9wcy5yZXF1aXJlZCc/OiBGaWVsZEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seUZpZWxkQ29uZmlnPFByb3BzID0gRm9ybWx5RmllbGRQcm9wcyAmIHsgW2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBzdHJpbmddOiBhbnkgfT4ge1xuICAvKipcbiAgICogVGhlIGtleSB0aGF0IHJlbGF0ZXMgdG8gdGhlIG1vZGVsLiBUaGlzIHdpbGwgbGluayB0aGUgZmllbGQgdmFsdWUgdG8gdGhlIG1vZGVsXG4gICAqL1xuICBrZXk/OiBzdHJpbmcgfCBudW1iZXIgfCAoc3RyaW5nIHwgbnVtYmVyKVtdO1xuXG4gIC8qKlxuICAgKiBUaGlzIHNob3VsZCBiZSBhIGZvcm1seS1maWVsZCB0eXBlIGFkZGVkIGVpdGhlciBieSB5b3Ugb3IgYSBwbHVnaW4uIE1vcmUgaW5mb3JtYXRpb24gb3ZlciBhdCBDcmVhdGluZyBGb3JtbHkgRmllbGRzLlxuICAgKi9cbiAgdHlwZT86IHN0cmluZyB8IFR5cGU8RmllbGRUeXBlPjtcblxuICAvKipcbiAgICogVXNlIGBkZWZhdWx0VmFsdWVgIHRvIGluaXRpYWxpemUgaXQgdGhlIG1vZGVsLiBJZiB0aGlzIGlzIHByb3ZpZGVkIGFuZCB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIGF0IGNvbXBpbGUtdGltZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHZhbHVlIG9mIHRoZSBtb2RlbCB3aWxsIGJlIGFzc2lnbmVkIHRvIGBkZWZhdWx0VmFsdWVgLlxuICAgKi9cbiAgZGVmYXVsdFZhbHVlPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgYGlkYCBvZiB5b3VyIGZpZWxkLiBOb3RlLCB0aGUgYGlkYCBpcyBnZW5lcmF0ZWQgaWYgbm90IHNldC5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB5b3Ugd2lzaCwgeW91IGNhbiBzcGVjaWZ5IGEgc3BlY2lmaWMgYG5hbWVgIGZvciB5b3VyIGZpZWxkLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UncmUgcG9zdGluZyB0aGUgZm9ybSB0byBhIHNlcnZlciB1c2luZyB0ZWNobmlxdWVzIG9mIHllc3Rlci15ZWFyLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyBpcyByZXNlcnZlZCBmb3IgdGhlIHRlbXBsYXRlcy4gQW55IHRlbXBsYXRlLXNwZWNpZmljIG9wdGlvbnMgZ28gaW4gaGVyZS4gTG9vayBhdCB5b3VyIHNwZWNpZmljIHRlbXBsYXRlIGltcGxlbWVudGF0aW9uIHRvIGtub3cgdGhlIG9wdGlvbnMgcmVxdWlyZWQgZm9yIHRoaXMuXG4gICAqL1xuICBwcm9wcz86IFByb3BzO1xuXG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgYHByb3BzYCBpbnN0ZWFkLiAqL1xuICB0ZW1wbGF0ZU9wdGlvbnM/OiBGb3JtbHlUZW1wbGF0ZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFuIG9iamVjdCB3aXRoIGEgZmV3IHVzZWZ1bCBwcm9wZXJ0aWVzXG4gICAqIC0gYHZhbGlkYXRpb24ubWVzc2FnZXNgOiBBIG1hcCBvZiBtZXNzYWdlIG5hbWVzIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiB0aGUgZmllbGQgaGFzIGVycm9ycy5cbiAgICogLSBgdmFsaWRhdGlvbi5zaG93YDogQSBib29sZWFuIHlvdSBhcyB0aGUgZGV2ZWxvcGVyIGNhbiBzZXQgdG8gZm9yY2UgZGlzcGxheWluZyBlcnJvcnMgd2hhdGV2ZXIgdGhlIHN0YXRlIG9mIGZpZWxkLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSdyZSB0cnlpbmcgdG8gY2FsbCB0aGUgdXNlcidzIGF0dGVudGlvbiB0byBzb21lIGZpZWxkcyBmb3Igc29tZSByZWFzb24uXG4gICAqL1xuICB2YWxpZGF0aW9uPzoge1xuICAgIG1lc3NhZ2VzPzogeyBbbWVzc2FnZVByb3BlcnRpZXM6IHN0cmluZ106IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uWydtZXNzYWdlJ10gfSAmIHtcbiAgICAgIC8qKiBAZGVwcmVjYXRlZCB1c2UgYG1pbkxlbmd0aGAgKi9cbiAgICAgIG1pbmxlbmd0aD86IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uWydtZXNzYWdlJ107XG5cbiAgICAgIC8qKiBAZGVwcmVjYXRlZCB1c2UgYG1heExlbmd0aGAgKi9cbiAgICAgIG1heGxlbmd0aD86IFZhbGlkYXRpb25NZXNzYWdlT3B0aW9uWydtZXNzYWdlJ107XG4gICAgfTtcbiAgICBzaG93PzogYm9vbGVhbjtcbiAgICBbYWRkaXRpb25hbFByb3BlcnRpZXM6IHN0cmluZ106IGFueTtcbiAgfTtcblxuICAvKipcbiAgICogVXNlZCB0byBzZXQgdmFsaWRhdGlvbiBydWxlcyBmb3IgYSBwYXJ0aWN1bGFyIGZpZWxkLlxuICAgKiBTaG91bGQgYmUgYW4gb2JqZWN0IG9mIGtleSAtIHZhbHVlIHBhaXJzLiBUaGUgdmFsdWUgY2FuIGVpdGhlciBiZSBhbiBleHByZXNzaW9uIHRvIGV2YWx1YXRlIG9yIGEgZnVuY3Rpb24gdG8gcnVuLlxuICAgKiBFYWNoIHNob3VsZCByZXR1cm4gYSBib29sZWFuIHZhbHVlLCByZXR1cm5pbmcgdHJ1ZSB3aGVuIHRoZSBmaWVsZCBpcyB2YWxpZC4gU2VlIFZhbGlkYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAqL1xuICB2YWxpZGF0b3JzPzogRm9ybWx5VmFsaWRhdGlvbjxWYWxpZGF0b3JGbiwgYm9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG9uZSBmb3IgYW55dGhpbmcgdGhhdCBuZWVkcyB0byB2YWxpZGF0ZSBhc3luY2hyb25vdXNseS5cbiAgICogUHJldHR5IG11Y2ggZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgdmFsaWRhdG9ycyBhcGksIGV4Y2VwdCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcHJvbWlzZS5cbiAgICovXG4gIGFzeW5jVmFsaWRhdG9ycz86IEZvcm1seVZhbGlkYXRpb248QXN5bmNWYWxpZGF0b3JGbiwgUHJvbWlzZTxib29sZWFuPiB8IE9ic2VydmFibGU8Ym9vbGVhbj4+O1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgc2V0IGluc3RlYWQgb2YgYHR5cGVgIHRvIHJlbmRlciBjdXN0b20gaHRtbCBjb250ZW50LlxuICAgKi9cbiAgdGVtcGxhdGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqICBJdCBpcyBleHBlY3RlZCB0byBiZSB0aGUgbmFtZSBvZiB0aGUgd3JhcHBlcnMuXG4gICAqICBUaGUgZm9ybWx5IGZpZWxkIHRlbXBsYXRlIHdpbGwgYmUgd3JhcHBlZCBieSB0aGUgZmlyc3Qgd3JhcHBlciwgdGhlbiB0aGUgc2Vjb25kLCB0aGVuIHRoZSB0aGlyZCwgZXRjLlxuICAgKiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlc2UgYXMgcGFydCBvZiBhIHR5cGUgKHdoaWNoIGlzIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaCkuXG4gICAqL1xuICB3cmFwcGVycz86IChzdHJpbmcgfCBUeXBlPEZpZWxkV3JhcHBlcj4pW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaGlkZSB0aGUgZmllbGQuIERlZmF1bHRzIHRvIGZhbHNlLiBJZiB5b3Ugd2lzaCB0aGlzIHRvIGJlIGNvbmRpdGlvbmFsIHVzZSBgZXhwcmVzc2lvbnM6IHsgaGlkZTogLi4uIH1gXG4gICAqL1xuICBoaWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXNldCB0aGUgdmFsdWUgb24gaGlkZSBvciBub3QuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlc2V0T25IaWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZGl0aW9uYWxseSBoaWRpbmcgRmllbGQgYmFzZWQgb24gdmFsdWVzIGZyb20gb3RoZXIgRmllbGRzXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgZXhwcmVzc2lvbnM6IHsgaGlkZTogLi4uIH1gXG4gICAqL1xuICBoaWRlRXhwcmVzc2lvbj86IGJvb2xlYW4gfCBzdHJpbmcgfCAoKG1vZGVsOiBhbnksIGZvcm1TdGF0ZTogYW55LCBmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKTtcblxuICAvKipcbiAgICogQW4gb2JqZWN0IHdoZXJlIHRoZSBrZXkgaXMgYSBwcm9wZXJ0eSB0byBiZSBzZXQgb24gdGhlIG1haW4gZmllbGQgY29uZmlnIGFuZCB0aGUgdmFsdWUgaXMgYW4gZXhwcmVzc2lvbiB1c2VkIHRvIGFzc2lnbiB0aGF0IHByb3BlcnR5LlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGV4cHJlc3Npb25zYFxuICAgKi9cbiAgZXhwcmVzc2lvblByb3BlcnRpZXM/OiB7XG4gICAgW3Byb3BlcnR5OiBzdHJpbmddOiBzdHJpbmcgfCAoKG1vZGVsOiBhbnksIGZvcm1TdGF0ZTogYW55LCBmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBhbnkpIHwgT2JzZXJ2YWJsZTxhbnk+O1xuICB9O1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgd2hlcmUgdGhlIGtleSBpcyBhIHByb3BlcnR5IHRvIGJlIHNldCBvbiB0aGUgbWFpbiBmaWVsZCBjb25maWcgYW5kIHRoZSB2YWx1ZSBpcyBhbiBleHByZXNzaW9uIHVzZWQgdG8gYXNzaWduIHRoYXQgcHJvcGVydHkuXG4gICAqL1xuICBleHByZXNzaW9ucz86IEZpZWxkRXhwcmVzc2lvbnM7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3BlY2lmeSB5b3VyIG93biBjbGFzcyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgYGZvcm1seS1maWVsZGAgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHlvdXIgb3duIGNsYXNzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBgZm9ybWx5LWdyb3VwYCBjb21wb25lbnQuXG4gICAqL1xuICBmaWVsZEdyb3VwQ2xhc3NOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGZpZWxkIGdyb3VwIGlzIGEgd2F5IHRvIGdyb3VwIGZpZWxkcyB0b2dldGhlciwgbWFraW5nIGFkdmFuY2VkIGxheW91dCB2ZXJ5IHNpbXBsZS5cbiAgICogSXQgY2FuIGFsc28gYmUgdXNlZCB0byBncm91cCBmaWVsZHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIG1vZGVsICh1c2VmdWwgaWYgaXQncyBkaWZmZXJlbnQgdGhhbiB0aGUgbW9kZWwgZm9yIHRoZSByZXN0IG9mIHRoZSBmaWVsZHMpLlxuICAgKi9cbiAgZmllbGRHcm91cD86IEZvcm1seUZpZWxkQ29uZmlnW107XG5cbiAgZmllbGRBcnJheT86IEZvcm1seUZpZWxkQ29uZmlnIHwgKChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IEZvcm1seUZpZWxkQ29uZmlnKTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBmb2N1cyBvciBibHVyIHRoZSBlbGVtZW50IGZpZWxkLiBEZWZhdWx0cyB0byBmYWxzZS4gSWYgeW91IHdpc2ggdGhpcyB0byBiZSBjb25kaXRpb25hbCB1c2UgYGV4cHJlc3Npb25zYFxuICAgKi9cbiAgZm9jdXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgd2l0aCBhIGZldyB1c2VmdWwgcHJvcGVydGllcyB0byBjb250cm9sIHRoZSBtb2RlbCBjaGFuZ2VzXG4gICAqIC0gYGRlYm91bmNlYDogaW50ZWdlciB2YWx1ZSB3aGljaCBjb250YWlucyB0aGUgZGVib3VuY2UgbW9kZWwgdXBkYXRlIHZhbHVlIGluIG1pbGxpc2Vjb25kcy4gQSB2YWx1ZSBvZiAwIHRyaWdnZXJzIGFuIGltbWVkaWF0ZSB1cGRhdGUuXG4gICAqIC0gYHVwZGF0ZU9uYDogc3RyaW5nIGV2ZW50IHZhbHVlIHRoYXQgaW5zdHJ1Y3RzIHdoZW4gdGhlIGNvbnRyb2wgc2hvdWxkIGJlIHVwZGF0ZWRcbiAgICovXG4gIG1vZGVsT3B0aW9ucz86IHtcbiAgICBkZWJvdW5jZT86IHtcbiAgICAgIGRlZmF1bHQ6IG51bWJlcjtcbiAgICB9O1xuICAgIC8vIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9mb3Jtcy9BYnN0cmFjdENvbnRyb2wjdXBkYXRlT25cbiAgICB1cGRhdGVPbj86ICdjaGFuZ2UnIHwgJ2JsdXInIHwgJ3N1Ym1pdCc7XG4gIH07XG5cbiAgaG9va3M/OiBGb3JtbHlIb29rQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBmdW5jdGlvbnMgdG8gZXhlY3V0ZSwgYXMgYSBwaXBlbGluZSwgd2hlbmV2ZXIgdGhlIG1vZGVsIHVwZGF0ZXMsIHVzdWFsbHkgdmlhIHVzZXIgaW5wdXQuXG4gICAqL1xuICBwYXJzZXJzPzogKCh2YWx1ZTogYW55KSA9PiBhbnkpW107XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY2hpbGQgZmllbGQgYnkga2V5IG5hbWVcbiAgICovXG4gIGdldD86IChrZXk6IEZvcm1seUZpZWxkQ29uZmlnWydrZXknXSkgPT4gRm9ybWx5RmllbGRDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RlbCB0aGF0IHN0b3JlcyBhbGwgdGhlIGRhdGEsIHdoZXJlIHRoZSBtb2RlbFtrZXldIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGRcbiAgICovXG4gIHJlYWRvbmx5IG1vZGVsPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IGZpZWxkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50PzogRm9ybWx5RmllbGRDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zPzogRm9ybWx5Rm9ybU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgZm9ybS5cbiAgICovXG4gIHJlYWRvbmx5IGZvcm0/OiBVbnR5cGVkRm9ybUdyb3VwIHwgVW50eXBlZEZvcm1BcnJheTtcblxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgW0Zvcm1Db250cm9sXShodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0Zvcm1Db250cm9sKSBmb3IgdGhlIGZpZWxkLlxuICAgKiBJdCBwcm92aWRlcyB5b3UgbW9yZSBjb250cm9sIGxpa2UgcnVubmluZyB2YWxpZGF0b3JzLCBjYWxjdWxhdGluZyBzdGF0dXMsIGFuZCByZXNldHRpbmcgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSBmb3JtQ29udHJvbD86IEFic3RyYWN0Q29udHJvbDtcblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgb3B0aW9uc1R5cGVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCB0eXBlIEZvcm1seUF0dHJpYnV0ZUV2ZW50ID0gKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgZXZlbnQ/OiBhbnkpID0+IHZvaWQ7XG5cbi8qKiAgQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5VGVtcGxhdGVPcHRpb25zIGV4dGVuZHMgRm9ybWx5RmllbGRQcm9wcyB7XG4gIFthZGRpdGlvbmFsUHJvcGVydGllczogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seUZpZWxkUHJvcHMge1xuICB0eXBlPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb3B0aW9ucz86IGFueVtdIHwgT2JzZXJ2YWJsZTxhbnlbXT47XG4gIHJvd3M/OiBudW1iZXI7XG4gIGNvbHM/OiBudW1iZXI7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBtYXg/OiBudW1iZXI7XG4gIG1pbj86IG51bWJlcjtcblxuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgYG1pbkxlbmd0aGAgKi9cbiAgbWlubGVuZ3RoPzogbnVtYmVyO1xuXG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBgbWF4TGVuZ3RoYCAqL1xuICBtYXhsZW5ndGg/OiBudW1iZXI7XG5cbiAgcGF0dGVybj86IHN0cmluZyB8IFJlZ0V4cDtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICB0YWJpbmRleD86IG51bWJlcjtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICBhdHRyaWJ1dGVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfTtcbiAgc3RlcD86IG51bWJlcjtcbiAgZm9jdXM/OiBGb3JtbHlBdHRyaWJ1dGVFdmVudDtcbiAgYmx1cj86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xuICBrZXl1cD86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xuICBrZXlkb3duPzogRm9ybWx5QXR0cmlidXRlRXZlbnQ7XG4gIGNsaWNrPzogRm9ybWx5QXR0cmlidXRlRXZlbnQ7XG4gIGNoYW5nZT86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xuICBrZXlwcmVzcz86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xuICB3aGVlbD86IEZvcm1seUF0dHJpYnV0ZUV2ZW50O1xufVxuXG5leHBvcnQgdHlwZSBGb3JtbHlIb29rRm4gPSAoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seUhvb2tDb25maWcge1xuICBvbkluaXQ/OiBGb3JtbHlIb29rRm4gfCAoKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gT2JzZXJ2YWJsZTxhbnk+KTtcbiAgb25DaGFuZ2VzPzogRm9ybWx5SG9va0ZuO1xuICBhZnRlckNvbnRlbnRJbml0PzogRm9ybWx5SG9va0ZuO1xuICBhZnRlclZpZXdJbml0PzogRm9ybWx5SG9va0ZuO1xuICBvbkRlc3Ryb3k/OiBGb3JtbHlIb29rRm47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWx5Rm9ybU9wdGlvbnMge1xuICB1cGRhdGVJbml0aWFsVmFsdWU/OiAobW9kZWw/OiBhbnkpID0+IHZvaWQ7XG4gIHJlc2V0TW9kZWw/OiAobW9kZWw/OiBhbnkpID0+IHZvaWQ7XG4gIGZvcm1TdGF0ZT86IGFueTtcbiAgZmllbGRDaGFuZ2VzPzogU3ViamVjdDxGb3JtbHlWYWx1ZUNoYW5nZUV2ZW50PjtcbiAgc2hvd0Vycm9yPzogKGZpZWxkOiBGaWVsZFR5cGUpID0+IGJvb2xlYW47XG4gIGJ1aWxkPzogKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IEZvcm1seUZpZWxkQ29uZmlnO1xuICBjaGVja0V4cHJlc3Npb25zPzogKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gdm9pZDtcbiAgZGV0ZWN0Q2hhbmdlcz86IChmaWVsZDogRm9ybWx5RmllbGRDb25maWcpID0+IHZvaWQ7XG4gIHBhcmVudEZvcm0/OiBGb3JtR3JvdXBEaXJlY3RpdmUgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1seVZhbHVlQ2hhbmdlRXZlbnQge1xuICBmaWVsZDogRm9ybWx5RmllbGRDb25maWc7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IGFueTtcbiAgW21ldGE6IHN0cmluZ106IGFueTtcbn1cblxuaW50ZXJmYWNlIEZvcm1seVZhbGlkYXRpb248VCwgUj4ge1xuICB2YWxpZGF0aW9uPzogKHN0cmluZyB8IFQpW10gfCBhbnk7XG4gIFtrZXk6IHN0cmluZ106IEZvcm1seVZhbGlkYXRvckZuPFI+IHwgRm9ybWx5VmFsaWRhdG9yRXhwcmVzc2lvbkZuPFI+IHwgYW55O1xufVxudHlwZSBGb3JtbHlWYWxpZGF0b3JGbjxUPiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gVDtcblxuaW50ZXJmYWNlIEZvcm1seVZhbGlkYXRvckV4cHJlc3Npb25GbjxUPiB7XG4gIGV4cHJlc3Npb246IEZvcm1seVZhbGlkYXRvckZuPFQ+O1xuICBtZXNzYWdlOiBzdHJpbmcgfCAoKGVycm9yOiBhbnksIGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykgPT4gc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+KTtcbn1cbiJdfQ==
@@ -0,0 +1,100 @@
1
+ import { Inject, Injectable, Optional } from '@angular/core';
2
+ import { UntypedFormGroup } from '@angular/forms';
3
+ import { defineHiddenProp, observe, disableTreeValidityCall, isHiddenField, isSignalRequired } from '../utils';
4
+ import { FORMLY_CONFIG } from '../core.config';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./formly.config";
7
+ import * as i2 from "@angular/forms";
8
+ export class FormlyFormBuilder {
9
+ constructor(config, injector, viewContainerRef, parentForm, configs = []) {
10
+ this.config = config;
11
+ this.injector = injector;
12
+ this.viewContainerRef = viewContainerRef;
13
+ this.parentForm = parentForm;
14
+ configs.forEach((c) => config.addConfig(c));
15
+ }
16
+ buildForm(form, fieldGroup = [], model, options) {
17
+ this.build({ fieldGroup, model, form, options });
18
+ }
19
+ build(field) {
20
+ if (!this.config.extensions.core) {
21
+ throw new Error('NgxFormly: missing `forRoot()` call. use `forRoot()` when registering the `FormlyModule`.');
22
+ }
23
+ if (!field.parent) {
24
+ this._setOptions(field);
25
+ }
26
+ disableTreeValidityCall(field.form, () => {
27
+ this._build(field);
28
+ // TODO: add test for https://github.com/ngx-formly/ngx-formly/issues/3910
29
+ if (!field.parent || field.fieldArray) {
30
+ // detect changes early to avoid reset value by hidden fields
31
+ const options = field.options;
32
+ if (field.parent && isHiddenField(field)) {
33
+ // when hide is used in expression set defaul value will not be set until detect hide changes
34
+ // which causes default value not set on new item is added
35
+ options._hiddenFieldsForCheck?.push({ field, default: false });
36
+ }
37
+ options.checkExpressions?.(field, true);
38
+ options._detectChanges?.(field);
39
+ }
40
+ });
41
+ }
42
+ _build(field) {
43
+ if (!field) {
44
+ return;
45
+ }
46
+ const extensions = Object.values(this.config.extensions);
47
+ extensions.forEach((extension) => extension.prePopulate?.(field));
48
+ extensions.forEach((extension) => extension.onPopulate?.(field));
49
+ field.fieldGroup?.forEach((f) => this._build(f));
50
+ extensions.forEach((extension) => extension.postPopulate?.(field));
51
+ }
52
+ _setOptions(field) {
53
+ field.form = field.form || new UntypedFormGroup({});
54
+ field.model = field.model || {};
55
+ field.options = field.options || {};
56
+ const options = field.options;
57
+ if (!options._viewContainerRef) {
58
+ defineHiddenProp(options, '_viewContainerRef', this.viewContainerRef);
59
+ }
60
+ if (!options._injector) {
61
+ defineHiddenProp(options, '_injector', this.injector);
62
+ }
63
+ if (!options.build) {
64
+ options._buildForm = () => {
65
+ console.warn(`Formly: 'options._buildForm' is deprecated since v6.0, use 'options.build' instead.`);
66
+ this.build(field);
67
+ };
68
+ options.build = (f = field) => {
69
+ this.build(f);
70
+ return f;
71
+ };
72
+ }
73
+ if (!options.parentForm && this.parentForm) {
74
+ defineHiddenProp(options, 'parentForm', this.parentForm);
75
+ if (!isSignalRequired()) {
76
+ observe(options, ['parentForm', 'submitted'], ({ firstChange }) => {
77
+ if (!firstChange) {
78
+ options.detectChanges(field);
79
+ }
80
+ });
81
+ }
82
+ }
83
+ }
84
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyFormBuilder, deps: [{ token: i1.FormlyConfig }, { token: i0.Injector }, { token: i0.ViewContainerRef, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: FORMLY_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
85
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyFormBuilder, providedIn: 'root' }); }
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormlyFormBuilder, decorators: [{
88
+ type: Injectable,
89
+ args: [{ providedIn: 'root' }]
90
+ }], ctorParameters: () => [{ type: i1.FormlyConfig }, { type: i0.Injector }, { type: i0.ViewContainerRef, decorators: [{
91
+ type: Optional
92
+ }] }, { type: i2.FormGroupDirective, decorators: [{
93
+ type: Optional
94
+ }] }, { type: undefined, decorators: [{
95
+ type: Optional
96
+ }, {
97
+ type: Inject,
98
+ args: [FORMLY_CONFIG]
99
+ }] }] });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL3NlcnZpY2VzL2Zvcm1seS5idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFZLFFBQVEsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUF3QyxNQUFNLGdCQUFnQixDQUFDO0FBR3hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUcvQyxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQ1UsTUFBb0IsRUFDcEIsUUFBa0IsRUFDTixnQkFBa0MsRUFDbEMsVUFBOEIsRUFDZixVQUEwQixFQUFFO1FBSnZELFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNOLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFHbEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxTQUFTLENBQ1AsSUFBeUMsRUFDekMsYUFBa0MsRUFBRSxFQUNwQyxLQUFVLEVBQ1YsT0FBMEI7UUFFMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUF3QjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE1B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bCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybWx5Q29uZmlnIH0gZnJvbSAnLi9mb3JtbHkuY29uZmlnJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtT3B0aW9ucywgRm9ybWx5RmllbGRDb25maWdDYWNoZSwgQ29uZmlnT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IGRlZmluZUhpZGRlblByb3AsIG9ic2VydmUsIGRpc2FibGVUcmVlVmFsaWRpdHlDYWxsLCBpc0hpZGRlbkZpZWxkLCBpc1NpZ25hbFJlcXVpcmVkIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRk9STUxZX0NPTkZJRyB9IGZyb20gJy4uL2NvcmUuY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlGb3JtQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlnOiBGb3JtbHlDb25maWcsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcGFyZW50Rm9ybTogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRk9STUxZX0NPTkZJRykgY29uZmlnczogQ29uZmlnT3B0aW9uW10gPSBbXSxcbiAgKSB7XG4gICAgY29uZmlncy5mb3JFYWNoKChjKSA9PiBjb25maWcuYWRkQ29uZmlnKGMpKTtcbiAgfVxuXG4gIGJ1aWxkRm9ybShcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwIHwgVW50eXBlZEZvcm1BcnJheSxcbiAgICBmaWVsZEdyb3VwOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10sXG4gICAgbW9kZWw6IGFueSxcbiAgICBvcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucyxcbiAgKSB7XG4gICAgdGhpcy5idWlsZCh7IGZpZWxkR3JvdXAsIG1vZGVsLCBmb3JtLCBvcHRpb25zIH0pO1xuICB9XG5cbiAgYnVpbGQoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5leHRlbnNpb25zLmNvcmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmd4Rm9ybWx5OiBtaXNzaW5nIGBmb3JSb290KClgIGNhbGwuIHVzZSBgZm9yUm9vdCgpYCB3aGVuIHJlZ2lzdGVyaW5nIHRoZSBgRm9ybWx5TW9kdWxlYC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpZWxkLnBhcmVudCkge1xuICAgICAgdGhpcy5fc2V0T3B0aW9ucyhmaWVsZCk7XG4gICAgfVxuXG4gICAgZGlzYWJsZVRyZWVWYWxpZGl0eUNhbGwoZmllbGQuZm9ybSwgKCkgPT4ge1xuICAgICAgdGhpcy5fYnVpbGQoZmllbGQpO1xuICAgICAgLy8gVE9ETzogYWRkIHRlc3QgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9uZ3gtZm9ybWx5L25neC1mb3JtbHkvaXNzdWVzLzM5MTBcbiAgICAgIGlmICghZmllbGQucGFyZW50IHx8IChmaWVsZCBhcyBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKS5maWVsZEFycmF5KSB7XG4gICAgICAgIC8vIGRldGVjdCBjaGFuZ2VzIGVhcmx5IHRvIGF2b2lkIHJlc2V0IHZhbHVlIGJ5IGhpZGRlbiBmaWVsZHNcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChmaWVsZCBhcyBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKS5vcHRpb25zO1xuXG4gICAgICAgIGlmIChmaWVsZC5wYXJlbnQgJiYgaXNIaWRkZW5GaWVsZChmaWVsZCkpIHtcbiAgICAgICAgICAvLyB3aGVuIGhpZGUgaXMgdXNlZCBpbiBleHByZXNzaW9uIHNldCBkZWZhdWwgdmFsdWUgd2lsbCBub3QgYmUgc2V0IHVudGlsIGRldGVjdCBoaWRlIGNoYW5nZXNcbiAgICAgICAgICAvLyB3aGljaCBjYXVzZXMgZGVmYXVsdCB2YWx1ZSBub3Qgc2V0IG9uIG5ldyBpdGVtIGlzIGFkZGVkXG4gICAgICAgICAgb3B0aW9ucy5faGlkZGVuRmllbGRzRm9yQ2hlY2s/LnB1c2goeyBmaWVsZCwgZGVmYXVsdDogZmFsc2UgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLmNoZWNrRXhwcmVzc2lvbnM/LihmaWVsZCwgdHJ1ZSk7XG4gICAgICAgIG9wdGlvbnMuX2RldGVjdENoYW5nZXM/LihmaWVsZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9idWlsZChmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGlmICghZmllbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlbnNpb25zID0gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbmZpZy5leHRlbnNpb25zKTtcbiAgICBleHRlbnNpb25zLmZvckVhY2goKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uLnByZVBvcHVsYXRlPy4oZmllbGQpKTtcbiAgICBleHRlbnNpb25zLmZvckVhY2goKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uLm9uUG9wdWxhdGU/LihmaWVsZCkpO1xuICAgIGZpZWxkLmZpZWxkR3JvdXA/LmZvckVhY2goKGYpID0+IHRoaXMuX2J1aWxkKGYpKTtcbiAgICBleHRlbnNpb25zLmZvckVhY2goKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uLnBvc3RQb3B1bGF0ZT8uKGZpZWxkKSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRPcHRpb25zKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgZmllbGQuZm9ybSA9IGZpZWxkLmZvcm0gfHwgbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xuICAgIGZpZWxkLm1vZGVsID0gZmllbGQubW9kZWwgfHwge307XG4gICAgZmllbGQub3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMgfHwge307XG4gICAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkLm9wdGlvbnM7XG5cbiAgICBpZiAoIW9wdGlvbnMuX3ZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgIGRlZmluZUhpZGRlblByb3Aob3B0aW9ucywgJ192aWV3Q29udGFpbmVyUmVmJywgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuX2luamVjdG9yKSB7XG4gICAgICBkZWZpbmVIaWRkZW5Qcm9wKG9wdGlvbnMsICdfaW5qZWN0b3InLCB0aGlzLmluamVjdG9yKTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuYnVpbGQpIHtcbiAgICAgIG9wdGlvbnMuX2J1aWxkRm9ybSA9ICgpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBGb3JtbHk6ICdvcHRpb25zLl9idWlsZEZvcm0nIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjYuMCwgdXNlICdvcHRpb25zLmJ1aWxkJyBpbnN0ZWFkLmApO1xuICAgICAgICB0aGlzLmJ1aWxkKGZpZWxkKTtcbiAgICAgIH07XG5cbiAgICAgIG9wdGlvbnMuYnVpbGQgPSAoZjogRm9ybWx5RmllbGRDb25maWcgPSBmaWVsZCkgPT4ge1xuICAgICAgICB0aGlzLmJ1aWxkKGYpO1xuXG4gICAgICAgIHJldHVybiBmO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMucGFyZW50Rm9ybSAmJiB0aGlzLnBhcmVudEZvcm0pIHtcbiAgICAgIGRlZmluZUhpZGRlblByb3Aob3B0aW9ucywgJ3BhcmVudEZvcm0nLCB0aGlzLnBhcmVudEZvcm0pO1xuXG4gICAgICBpZiAoIWlzU2lnbmFsUmVxdWlyZWQoKSkge1xuICAgICAgICBvYnNlcnZlKG9wdGlvbnMsIFsncGFyZW50Rm9ybScsICdzdWJtaXR0ZWQnXSwgKHsgZmlyc3RDaGFuZ2UgfSkgPT4ge1xuICAgICAgICAgIGlmICghZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZGV0ZWN0Q2hhbmdlcyhmaWVsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==