@alauda-fe/crd-form 0.0.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 (95) hide show
  1. package/esm2022/alauda-fe-crd-form.mjs +5 -0
  2. package/esm2022/lib/abstract/base-array.mjs +117 -0
  3. package/esm2022/lib/crd-form/component.mjs +334 -0
  4. package/esm2022/lib/crd-form/helper.mjs +32 -0
  5. package/esm2022/lib/crd-form.module.mjs +117 -0
  6. package/esm2022/lib/field-controls/expressions/expression-core.mjs +2 -0
  7. package/esm2022/lib/field-controls/expressions/props-expression.mjs +58 -0
  8. package/esm2022/lib/field-controls/form-item.component.mjs +121 -0
  9. package/esm2022/lib/field-controls/index.mjs +8 -0
  10. package/esm2022/lib/field-controls/module.mjs +141 -0
  11. package/esm2022/lib/field-controls/operand-advanced-field-group.component.mjs +80 -0
  12. package/esm2022/lib/field-controls/operand-array-field-group.component.mjs +112 -0
  13. package/esm2022/lib/field-controls/operand-field-group.component.mjs +98 -0
  14. package/esm2022/lib/field-controls/operand-field.component.mjs +870 -0
  15. package/esm2022/lib/field-controls/widgets/array-table/component.mjs +109 -0
  16. package/esm2022/lib/field-controls/widgets/basic-auth-secret/component.mjs +116 -0
  17. package/esm2022/lib/field-controls/widgets/basic-auth-secret/create/component.mjs +211 -0
  18. package/esm2022/lib/field-controls/widgets/basic-auth-secret/type.mjs +2 -0
  19. package/esm2022/lib/field-controls/widgets/index.mjs +8 -0
  20. package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/component.mjs +169 -0
  21. package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/util.mjs +40 -0
  22. package/esm2022/lib/field-controls/widgets/link/component.mjs +68 -0
  23. package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +524 -0
  24. package/esm2022/lib/field-controls/widgets/utils.mjs +73 -0
  25. package/esm2022/lib/field-controls/widgets/yaml-editor/yaml-editor.component.mjs +94 -0
  26. package/esm2022/lib/field-widgets/htpasswd/component.mjs +35 -0
  27. package/esm2022/lib/field-widgets/htpasswd/form.mjs +171 -0
  28. package/esm2022/lib/field-widgets/htpasswd/index.mjs +4 -0
  29. package/esm2022/lib/field-widgets/htpasswd/module.mjs +54 -0
  30. package/esm2022/lib/field-widgets/index.mjs +2 -0
  31. package/esm2022/lib/remote-widgets/constants.mjs +4 -0
  32. package/esm2022/lib/remote-widgets/index.mjs +4 -0
  33. package/esm2022/lib/remote-widgets/remote-widget.service.mjs +42 -0
  34. package/esm2022/lib/remote-widgets/token.mjs +7 -0
  35. package/esm2022/lib/spec-descriptors/capability/capability.component.mjs +139 -0
  36. package/esm2022/lib/spec-descriptors/capability-list/capability-list.component.mjs +189 -0
  37. package/esm2022/lib/spec-descriptors/index.mjs +4 -0
  38. package/esm2022/lib/spec-descriptors/util.mjs +13 -0
  39. package/esm2022/lib/types/index.mjs +73 -0
  40. package/esm2022/lib/utils/capability.mjs +295 -0
  41. package/esm2022/lib/utils/constant.mjs +22 -0
  42. package/esm2022/lib/utils/directives.mjs +19 -0
  43. package/esm2022/lib/utils/helper.mjs +201 -0
  44. package/esm2022/lib/utils/index.mjs +7 -0
  45. package/esm2022/lib/utils/service-model.mjs +12 -0
  46. package/esm2022/lib/utils/util.mjs +310 -0
  47. package/esm2022/public-api.mjs +13 -0
  48. package/index.d.ts +5 -0
  49. package/lib/abstract/base-array.d.ts +31 -0
  50. package/lib/crd-form/component.d.ts +61 -0
  51. package/lib/crd-form/helper.d.ts +7 -0
  52. package/lib/crd-form.module.d.ts +16 -0
  53. package/lib/field-controls/expressions/expression-core.d.ts +6 -0
  54. package/lib/field-controls/expressions/props-expression.d.ts +36 -0
  55. package/lib/field-controls/form-item.component.d.ts +11 -0
  56. package/lib/field-controls/index.d.ts +7 -0
  57. package/lib/field-controls/module.d.ts +23 -0
  58. package/lib/field-controls/operand-advanced-field-group.component.d.ts +16 -0
  59. package/lib/field-controls/operand-array-field-group.component.d.ts +8 -0
  60. package/lib/field-controls/operand-field-group.component.d.ts +24 -0
  61. package/lib/field-controls/operand-field.component.d.ts +110 -0
  62. package/lib/field-controls/widgets/array-table/component.d.ts +8 -0
  63. package/lib/field-controls/widgets/basic-auth-secret/component.d.ts +26 -0
  64. package/lib/field-controls/widgets/basic-auth-secret/create/component.d.ts +45 -0
  65. package/lib/field-controls/widgets/basic-auth-secret/type.d.ts +11 -0
  66. package/lib/field-controls/widgets/index.d.ts +7 -0
  67. package/lib/field-controls/widgets/k8s-resource-prefix/component.d.ts +35 -0
  68. package/lib/field-controls/widgets/k8s-resource-prefix/util.d.ts +3 -0
  69. package/lib/field-controls/widgets/link/component.d.ts +20 -0
  70. package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +88 -0
  71. package/lib/field-controls/widgets/utils.d.ts +17 -0
  72. package/lib/field-controls/widgets/yaml-editor/yaml-editor.component.d.ts +36 -0
  73. package/lib/field-widgets/htpasswd/component.d.ts +9 -0
  74. package/lib/field-widgets/htpasswd/form.d.ts +32 -0
  75. package/lib/field-widgets/htpasswd/index.d.ts +3 -0
  76. package/lib/field-widgets/htpasswd/module.d.ts +13 -0
  77. package/lib/field-widgets/index.d.ts +1 -0
  78. package/lib/remote-widgets/constants.d.ts +3 -0
  79. package/lib/remote-widgets/index.d.ts +3 -0
  80. package/lib/remote-widgets/remote-widget.service.d.ts +28 -0
  81. package/lib/remote-widgets/token.d.ts +3 -0
  82. package/lib/spec-descriptors/capability/capability.component.d.ts +20 -0
  83. package/lib/spec-descriptors/capability-list/capability-list.component.d.ts +34 -0
  84. package/lib/spec-descriptors/index.d.ts +3 -0
  85. package/lib/spec-descriptors/util.d.ts +4 -0
  86. package/lib/types/index.d.ts +122 -0
  87. package/lib/utils/capability.d.ts +54 -0
  88. package/lib/utils/constant.d.ts +12 -0
  89. package/lib/utils/directives.d.ts +9 -0
  90. package/lib/utils/helper.d.ts +61 -0
  91. package/lib/utils/index.d.ts +6 -0
  92. package/lib/utils/service-model.d.ts +44 -0
  93. package/lib/utils/util.d.ts +48 -0
  94. package/package.json +30 -0
  95. package/public-api.d.ts +9 -0
@@ -0,0 +1,7 @@
1
+ export * from './capability';
2
+ export * from './constant';
3
+ export * from './directives';
4
+ export * from './helper';
5
+ export * from './service-model';
6
+ export * from './util';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2FwYWJpbGl0eSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50JztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcyc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2UtbW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsJztcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ export const NodeModel = {
2
+ apiVersion: 'v1',
3
+ label: 'Node',
4
+ labelKey: 'public~Node',
5
+ plural: 'nodes',
6
+ abbr: 'N',
7
+ kind: 'Node',
8
+ id: 'node',
9
+ labelPlural: 'Nodes',
10
+ labelPluralKey: 'public~Nodes',
11
+ };
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3JkLWZvcm0vc3JjL2xpYi91dGlscy9zZXJ2aWNlLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1EQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQVk7SUFDaEMsVUFBVSxFQUFFLElBQUk7SUFDaEIsS0FBSyxFQUFFLE1BQU07SUFFYixRQUFRLEVBQUUsYUFBYTtJQUN2QixNQUFNLEVBQUUsT0FBTztJQUNmLElBQUksRUFBRSxHQUFHO0lBQ1QsSUFBSSxFQUFFLE1BQU07SUFDWixFQUFFLEVBQUUsTUFBTTtJQUNWLFdBQVcsRUFBRSxPQUFPO0lBRXBCLGNBQWMsRUFBRSxjQUFjO0NBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBLOHNWZXJiID1cbiAgfCAnY3JlYXRlJ1xuICB8ICdnZXQnXG4gIHwgJ2xpc3QnXG4gIHwgJ3VwZGF0ZSdcbiAgfCAncGF0Y2gnXG4gIHwgJ2RlbGV0ZSdcbiAgfCAnZGVsZXRlY29sbGVjdGlvbidcbiAgfCAnd2F0Y2gnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hdGNoRXhwcmVzc2lvbldpdGhWYWx1ZXMge1xuICBrZXk6IHN0cmluZztcbiAgb3BlcmF0b3I6ICdJbicgfCAnTm90SW4nIHwgJ0V4aXN0cycgfCAnRG9lc05vdEV4aXN0JztcbiAgdmFsdWVzOiBzdHJpbmdbXTtcbn1cbmV4cG9ydCB0eXBlIE1hdGNoRXhwcmVzc2lvbiA9XG4gIHwgeyBrZXk6IHN0cmluZzsgb3BlcmF0b3I6ICdFeGlzdHMnIHwgJ0RvZXNOb3RFeGlzdCcgfVxuICB8IE1hdGNoRXhwcmVzc2lvbldpdGhWYWx1ZXM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWF0Y2hMYWJlbHMge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0b3Ige1xuICBtYXRjaExhYmVscz86IE1hdGNoTGFiZWxzO1xuICBtYXRjaEV4cHJlc3Npb25zPzogTWF0Y2hFeHByZXNzaW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSzhzS2luZCB7XG4gIGFiYnI6IHN0cmluZztcbiAga2luZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBsYWJlbEtleT86IHN0cmluZztcbiAgbGFiZWxQbHVyYWw6IHN0cmluZztcbiAgbGFiZWxQbHVyYWxLZXk/OiBzdHJpbmc7XG4gIHBsdXJhbDogc3RyaW5nO1xuICBwcm9wYWdhdGlvblBvbGljeT86ICdGb3JlZ3JvdW5kJyB8ICdCYWNrZ3JvdW5kJztcbiAgaWQ/OiBzdHJpbmc7XG4gIGNyZD86IGJvb2xlYW47XG4gIGFwaVZlcnNpb246IHN0cmluZztcbiAgYXBpR3JvdXA/OiBzdHJpbmc7XG4gIG5hbWVzcGFjZWQ/OiBib29sZWFuO1xuICBzZWxlY3Rvcj86IFNlbGVjdG9yO1xuICBsYWJlbHM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBhbm5vdGF0aW9ucz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHZlcmJzPzogSzhzVmVyYltdO1xuICBzaG9ydE5hbWVzPzogc3RyaW5nW107XG4gIGNvbG9yPzogc3RyaW5nO1xuICBsZWdhY3lQbHVyYWxVUkw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgTm9kZU1vZGVsOiBLOHNLaW5kID0ge1xuICBhcGlWZXJzaW9uOiAndjEnLFxuICBsYWJlbDogJ05vZGUnLFxuXG4gIGxhYmVsS2V5OiAncHVibGljfk5vZGUnLFxuICBwbHVyYWw6ICdub2RlcycsXG4gIGFiYnI6ICdOJyxcbiAga2luZDogJ05vZGUnLFxuICBpZDogJ25vZGUnLFxuICBsYWJlbFBsdXJhbDogJ05vZGVzJyxcblxuICBsYWJlbFBsdXJhbEtleTogJ3B1YmxpY35Ob2RlcycsXG59O1xuIl19
@@ -0,0 +1,310 @@
1
+ import { isEqual } from '@alauda-fe/common';
2
+ import { find, flatMap, flatMapDepth, flatten, get, groupBy, isArray, map, parseInt, pick, reduce, sortBy, startCase, times, toPath, union, uniqWith, } from 'lodash-es';
3
+ import { SpecCapability, SpecCapabilityUIPrefix, SpecCapabilityWidgetsPrefix, Validations, } from '../types';
4
+ import { fieldShouldReveal, getBasicCapabilityType, getCapabilityDisabled, getCapabilityValidations, getDisplayByCapability, } from './capability';
5
+ import { DESCRIPTOR_DEFINITION_KEY, GROUP_PATTERN, MAX_DEPTH, SCHEMA_PATH, } from './constant';
6
+ import { getRelatedFields, getTreeFields, hasDescriptor, parseArrayPath, } from './helper';
7
+ export function getPropertyDepth(property, depth = 0) {
8
+ if (!property || !['object', 'array'].includes(property.type)) {
9
+ return depth;
10
+ }
11
+ return Math.max(0, ...Object.values(property.properties || property.items?.properties || {}).map(nestedProperty => getPropertyDepth(nestedProperty, depth + 1)));
12
+ }
13
+ export function getFieldsFromDescriptor({ path, description, displayName, 'x-descriptors': capabilities = [], }, data, openApi, _originDescriptors) {
14
+ const { match, pathBeforeIndex, pathAfterIndex } = parseArrayPath(path);
15
+ const filedBasicType = getBasicCapabilityType(capabilities);
16
+ const disabled = getCapabilityDisabled(capabilities);
17
+ const validations = getCapabilityValidations(capabilities);
18
+ if (match) {
19
+ const n = get(data, toPath(`spec.${pathBeforeIndex}`), []).length || 1;
20
+ const pathAfterIndexStr = `.${pathAfterIndex}`;
21
+ let extra = [];
22
+ if (_originDescriptors) {
23
+ extra = flatten(_originDescriptors
24
+ .filter(d => d.path.startsWith(`${pathBeforeIndex}[0]`) && d.path !== path)
25
+ .map(d => times(n, index => {
26
+ const oPath = d.path.replace(`${pathBeforeIndex}[0]`, `${pathBeforeIndex}[${index}]`);
27
+ return {
28
+ ...d,
29
+ path: oPath,
30
+ };
31
+ }).slice(1)));
32
+ }
33
+ return flatten([
34
+ ...times(n, index => {
35
+ const propertyPath = `spec.${pathBeforeIndex}[${index}]${pathAfterIndex && pathAfterIndexStr}`;
36
+ const property = getOpenApiPropertyByPath(`spec.${path}`, openApi);
37
+ return {
38
+ path: propertyPath,
39
+ value: get(data, propertyPath),
40
+ description,
41
+ displayName,
42
+ capabilities,
43
+ type: filedBasicType || property?.type,
44
+ required: null,
45
+ disabled,
46
+ validations: {
47
+ ...validations,
48
+ ...(property?.required && { required: true }),
49
+ },
50
+ };
51
+ }),
52
+ ...extra.map(e => getFieldsFromDescriptor(e, data, openApi)),
53
+ ]);
54
+ }
55
+ // 通过 descriptor 查找原始 CRD 节点,推导类型、validation 等信息
56
+ const propertyPath = `spec.${path}`;
57
+ const property = getOpenApiPropertyByPath(propertyPath, openApi);
58
+ return [
59
+ {
60
+ path: propertyPath,
61
+ description,
62
+ displayName,
63
+ capabilities,
64
+ disabled,
65
+ value: get(data, propertyPath),
66
+ type: filedBasicType || property?.type,
67
+ required: null,
68
+ validations: {
69
+ ...validations,
70
+ ...(property?.required && { required: true }),
71
+ },
72
+ },
73
+ ];
74
+ }
75
+ export function getOpenApiPropertyByPath(descriptorPath, openApi) {
76
+ const paths = descriptorPath.split('.');
77
+ try {
78
+ return paths.reduce((acc, path) => {
79
+ acc = path.includes('[0]')
80
+ ? acc.items.properties[path.split('[0]')[0]]
81
+ : acc.properties[path];
82
+ return acc;
83
+ }, openApi);
84
+ }
85
+ catch {
86
+ return null;
87
+ }
88
+ }
89
+ export function getFieldsFromOpenApiSchema(openApi, descriptors, data, openApiSchemaPath = SCHEMA_PATH, maxDepth = MAX_DEPTH) {
90
+ const path = isArray(openApiSchemaPath)
91
+ ? openApiSchemaPath
92
+ : openApiSchemaPath.split('.').filter(Boolean);
93
+ const properties = get(openApi, [...path, 'properties'], {});
94
+ const required = get(openApi, [...path, 'required'], []);
95
+ return reduce(properties, (accumulator, _property, propertyName) => {
96
+ const property = _property;
97
+ if (!property.type || getPropertyDepth(property) > maxDepth) {
98
+ return accumulator;
99
+ }
100
+ return [
101
+ ...accumulator,
102
+ ...flattenNestedProperties(propertyName, property, descriptors, data, {
103
+ required: required.includes(propertyName),
104
+ }),
105
+ ];
106
+ }, []);
107
+ }
108
+ export function flattenNestedProperties(propertyName, property, descriptors, data, { currentCapabilities = [], currentPath = [], required = false, }) {
109
+ if (!property) {
110
+ return [];
111
+ }
112
+ const handleObjectProperty = () => flatMap(property.properties, (nestedProperty, nestedPropertyName) => flattenNestedProperties(nestedPropertyName, nestedProperty, descriptors, data, {
113
+ currentCapabilities: [
114
+ ...currentCapabilities,
115
+ `${SpecCapability.fieldGroup}${propertyName}`,
116
+ ],
117
+ currentPath: [...currentPath, propertyName],
118
+ required: (property.required || []).includes(nestedPropertyName),
119
+ }));
120
+ const handleArrayProperty = () => {
121
+ // Find the number of array elements that are already defined in the provided object
122
+ const n = get(data, `spec.${currentPath.join('.')}${propertyName}`, []).length || 1;
123
+ // Since _.times will return a multidimensional array of OperandFields (OperandField[][]), we
124
+ // need to flatten one level deeper than _.flatMap provides.
125
+ return flatMapDepth(property.items.properties, (nestedProperty, nestedPropertyName) =>
126
+ // Repeat recursion (n) times so that the correct number of fields are created for
127
+ // existing values in obj. This ensures that further nested fields also get created.
128
+ times(n, index => flattenNestedProperties(nestedPropertyName, nestedProperty, descriptors, data, {
129
+ currentCapabilities: [
130
+ ...currentCapabilities,
131
+ `${SpecCapability.arrayFieldGroup}${propertyName}`,
132
+ ],
133
+ currentPath: [...currentPath, `${propertyName}[${index}]`], // Array field paths must include an index
134
+ required: (property?.required || []).includes(nestedPropertyName),
135
+ })), 2);
136
+ };
137
+ const handleAtomicProperty = () => {
138
+ const path = [...currentPath, propertyName].join('.');
139
+ const descriptor = descriptors.find(item => item.path === modifyArrayFieldPathIndex(path, () => 0));
140
+ const capabilities = union(descriptor?.[DESCRIPTOR_DEFINITION_KEY] || [], currentCapabilities, getCapabilitiesForOpenApiProperty(property, descriptor?.[DESCRIPTOR_DEFINITION_KEY]));
141
+ const validations = getCapabilityValidations(capabilities);
142
+ const fieldPath = `spec.${path}`;
143
+ return [
144
+ {
145
+ path: fieldPath,
146
+ type: property.type,
147
+ required,
148
+ capabilities,
149
+ description: descriptor?.description || property.description,
150
+ displayName: descriptor?.displayName || startCase(propertyName),
151
+ validations: {
152
+ ...pick(property, Object.keys(Validations)),
153
+ ...validations,
154
+ },
155
+ value: get(data, fieldPath),
156
+ },
157
+ ];
158
+ };
159
+ switch (property.type) {
160
+ case 'object': {
161
+ return handleObjectProperty();
162
+ }
163
+ case 'array': {
164
+ return handleArrayProperty();
165
+ }
166
+ default: {
167
+ return handleAtomicProperty();
168
+ }
169
+ }
170
+ }
171
+ // Accepts an OpenAPI spec property and returns a corresponding SpecCapability[] array.
172
+ export function getCapabilitiesForOpenApiProperty(property, capabilities = []) {
173
+ const formControlCapabilities = [
174
+ SpecCapabilityUIPrefix,
175
+ SpecCapabilityWidgetsPrefix,
176
+ SpecCapability.k8sResourcePrefix,
177
+ ];
178
+ if (capabilities.some(i => formControlCapabilities.some(k => i.startsWith(k)))) {
179
+ return [];
180
+ }
181
+ if (property.enum) {
182
+ return (property.enum || []).map((option) => `${SpecCapability.select}${option}`);
183
+ }
184
+ switch (property.type) {
185
+ case 'integer': {
186
+ return [SpecCapability.number];
187
+ }
188
+ case 'boolean': {
189
+ return [SpecCapability.booleanSwitch];
190
+ }
191
+ default: {
192
+ return [SpecCapability.text];
193
+ }
194
+ }
195
+ }
196
+ export function modifyArrayFieldPathIndex(path, operation) {
197
+ const { match, index, pathBeforeIndex, pathAfterIndex } = parseArrayPath(path);
198
+ const pathAfterIndexStr = `.${pathAfterIndex}`;
199
+ return match
200
+ ? `${pathBeforeIndex}[${operation(index)}]${pathAfterIndex && pathAfterIndexStr}`
201
+ : path;
202
+ }
203
+ export function pathToArray(path) {
204
+ return map(toPath(path), subPath => /^\d+$/.test(subPath) ? parseInt(subPath, 10) : subPath);
205
+ }
206
+ export function parseGroupDescriptor(field) {
207
+ const groupDescriptor = find(field.capabilities, descriptor => descriptor.startsWith(SpecCapability.fieldGroup) ||
208
+ descriptor.startsWith(SpecCapability.arrayFieldGroup));
209
+ const [match, groupType, groupName] = GROUP_PATTERN.exec(groupDescriptor) || [];
210
+ return { match, groupName, groupType };
211
+ }
212
+ export function normalizePath(path) {
213
+ return path?.startsWith('spec.') ? path : `spec.${path}`;
214
+ }
215
+ export function getFormData(formData, path, enableConvert = true) {
216
+ const value = formData.getIn(pathToArray(normalizePath(path)));
217
+ return enableConvert && value == null ? null : value;
218
+ }
219
+ export function createCapabilityField(descriptors = [], openApiSchema, data, openApiSchemaPath) {
220
+ const openApiFields = getFieldsFromOpenApiSchema(openApiSchema, descriptors, data, openApiSchemaPath);
221
+ const descriptorFields = uniqWith(reduce(descriptors, (accumulator, descriptor) => openApiFields?.some(field => field.path === `spec.${descriptor.path}`)
222
+ ? accumulator
223
+ : [
224
+ ...accumulator,
225
+ ...getFieldsFromDescriptor(descriptor, data, openApiSchema, descriptors),
226
+ ], []), isEqual);
227
+ const basicFields = [...openApiFields, ...descriptorFields];
228
+ const relationFields = getRelatedFields(basicFields.filter(fieldShouldReveal));
229
+ const treeFields = [
230
+ ...getTreeFields(relationFields.filter(f => !f.parent), relationFields.filter(f => !!f.parent)),
231
+ // 兼容老的数据结构
232
+ ...relationFields.filter(f => !f._dirty),
233
+ ];
234
+ // 保留,兼容老数据结构
235
+ const [advancedFields = [], arrayFields = [], groupFields = [], normalFields = [],] = reduce(treeFields, ([advancedFieldsAccumulator = [], arrayFieldsAccumulator = [], groupFieldsAccumulator = [], normalFieldsAccumulator = [],], field) => {
236
+ const mappers = [
237
+ { spec: SpecCapability.arrayFieldGroup, acc: arrayFieldsAccumulator },
238
+ { spec: SpecCapability.fieldGroup, acc: groupFieldsAccumulator },
239
+ { spec: SpecCapability.advanced, acc: advancedFieldsAccumulator },
240
+ ];
241
+ const acc = mappers.find(mapper => hasDescriptor(field, mapper.spec))?.acc;
242
+ return [
243
+ advancedFieldsAccumulator,
244
+ arrayFieldsAccumulator,
245
+ groupFieldsAccumulator,
246
+ normalFieldsAccumulator,
247
+ ].map(r => {
248
+ if ((!acc && r === normalFieldsAccumulator) || r === acc) {
249
+ return [...r, field];
250
+ }
251
+ return r;
252
+ });
253
+ }, []);
254
+ return {
255
+ normalFields: sortFields(normalFields, descriptors),
256
+ fieldGroups: sortGroupFields(groupFields, descriptors, descriptorFields),
257
+ arrayFieldGroups: getArrayFields(arrayFields, descriptorFields),
258
+ advancedFields: sortFields(advancedFields, descriptors),
259
+ descriptorFields,
260
+ openApiFields,
261
+ basicFields,
262
+ treeFields,
263
+ };
264
+ }
265
+ function getArrayFields(fields, descriptorFields) {
266
+ // array fields
267
+ const groupedArrayFieldsByName = groupBy(fields, field => {
268
+ const { groupName } = parseGroupDescriptor(field);
269
+ return groupName;
270
+ });
271
+ // Map {groupName: string, fieldLists: OperandField[][]}, where OperandField is a nested array
272
+ // of the appropriate fields, grouped by index.
273
+ return map(groupedArrayFieldsByName, (fieldsInGroup, groupName) => ({
274
+ groupName,
275
+ displayName: startCase(groupName),
276
+ capabilities: descriptorFields.find(field => field.path === `spec.${groupName}`)
277
+ ?.capabilities ?? [],
278
+ fieldLists: reduce(fieldsInGroup, (fieldListsAccumulator, field) => {
279
+ const { index, match } = parseArrayPath(field.path);
280
+ if (match) {
281
+ fieldListsAccumulator[index] = [
282
+ ...(fieldListsAccumulator[index] || []),
283
+ field,
284
+ ];
285
+ }
286
+ return fieldListsAccumulator;
287
+ }, []),
288
+ _dirty: false,
289
+ }));
290
+ }
291
+ function sortFields(fields, descriptors) {
292
+ return sortBy(fields, field => descriptors.findIndex(d => normalizePath(d.path) === normalizePath(field.path)));
293
+ }
294
+ function sortGroupFields(fields, descriptors, descriptorFields) {
295
+ const groupedFieldsByName = groupBy(sortFields(fields, descriptors), field => {
296
+ const { groupName } = parseGroupDescriptor(field);
297
+ return groupName;
298
+ });
299
+ return map(groupedFieldsByName, (fieldList, groupName) => ({
300
+ groupName,
301
+ displayName: startCase(groupName),
302
+ groupDisplay: fieldList
303
+ .map(field => getDisplayByCapability(field.capabilities, SpecCapability.fieldGroupName))
304
+ .find(d => !!d),
305
+ capabilities: descriptorFields.find(field => field.path === `spec.${groupName}`)
306
+ ?.capabilities ?? [],
307
+ fieldList,
308
+ }));
309
+ }
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3JkLWZvcm0vc3JjL2xpYi91dGlscy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUNMLElBQUksRUFDSixPQUFPLEVBQ1AsWUFBWSxFQUNaLE9BQU8sRUFDUCxHQUFHLEVBQ0gsT0FBTyxFQUNQLE9BQU8sRUFDUCxHQUFHLEVBQ0gsUUFBUSxFQUNSLElBQUksRUFDSixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEdBQ1QsTUFBTSxXQUFXLENBQUM7QUFFbkIsT0FBTyxFQUtMLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLFdBQVcsR0FDWixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLHNCQUFzQixHQUN2QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixTQUFTLEVBQ1QsV0FBVyxHQUNaLE1BQU0sWUFBWSxDQUFDO0FBQ3BCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGFBQWEsRUFDYixjQUFjLEdBQ2YsTUFBTSxVQUFVLENBQUM7QUFTbEIsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixRQUErQixFQUMvQixLQUFLLEdBQUcsQ0FBQztJQUVULElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDOUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNiLENBQUMsRUFDRCxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ2QsUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQ3hELENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNyRSxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsRUFDRSxJQUFJLEVBQ0osV0FBVyxFQUNYLFdBQVcsRUFDWCxlQUFlLEVBQUUsWUFBWSxHQUFHLEVBQUUsR0FDdkIsRUFDYixJQUFTLEVBQ1QsT0FBOEIsRUFDOUIsa0JBQWlDO0lBRWpDLE1BQU0sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1RCxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyRCxNQUFNLFdBQVcsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzRCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsTUFBTSxDQUFDLEdBQ0wsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDL0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQy9DLElBQUksS0FBSyxHQUFpQixFQUFFLENBQUM7UUFDN0IsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssR0FBRyxPQUFPLENBQ2Isa0JBQWtCO2lCQUNmLE1BQU0sQ0FDTCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsZUFBZSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FDbkU7aUJBQ0EsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ1AsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDZixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FDMUIsR0FBRyxlQUFlLEtBQUssRUFDdkIsR0FBRyxlQUFlLElBQUksS0FBSyxHQUFHLENBQy9CLENBQUM7Z0JBQ0YsT0FBTztvQkFDTCxHQUFHLENBQUM7b0JBQ0osSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDWixDQUNKLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7WUFDYixHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xCLE1BQU0sWUFBWSxHQUFHLFFBQVEsZUFBZSxJQUFJLEtBQUssSUFDbkQsY0FBYyxJQUFJLGlCQUNwQixFQUFFLENBQUM7Z0JBQ0gsTUFBTSxRQUFRLEdBQUcsd0JBQXdCLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFbkUsT0FBTztvQkFDTCxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDO29CQUM5QixXQUFXO29CQUNYLFdBQVc7b0JBQ1gsWUFBWTtvQkFDWixJQUFJLEVBQUUsY0FBYyxJQUFJLFFBQVEsRUFBRSxJQUFJO29CQUN0QyxRQUFRLEVBQUUsSUFBSTtvQkFDZCxRQUFRO29CQUNSLFdBQVcsRUFBRTt3QkFDWCxHQUFHLFdBQVc7d0JBQ2QsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7cUJBQzlDO2lCQUNGLENBQUM7WUFDSixDQUFDLENBQUM7WUFDRixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdELENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxnREFBZ0Q7SUFDaEQsTUFBTSxZQUFZLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakUsT0FBTztRQUNMO1lBQ0UsSUFBSSxFQUFFLFlBQVk7WUFDbEIsV0FBVztZQUNYLFdBQVc7WUFDWCxZQUFZO1lBQ1osUUFBUTtZQUNSLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQztZQUM5QixJQUFJLEVBQUUsY0FBYyxJQUFJLFFBQVEsRUFBRSxJQUFJO1lBQ3RDLFFBQVEsRUFBRSxJQUFJO1lBQ2QsV0FBVyxFQUFFO2dCQUNYLEdBQUcsV0FBVztnQkFDZCxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUM5QztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLGNBQXNCLEVBQ3RCLE9BQThCO0lBRTlCLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2hDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLE9BQThCLEVBQzlCLFdBQXlCLEVBQ3pCLElBQWEsRUFDYixvQkFBdUMsV0FBVyxFQUNsRCxRQUFRLEdBQUcsU0FBUztJQUVwQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDckMsQ0FBQyxDQUFDLGlCQUFpQjtRQUNuQixDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDN0QsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBYSxDQUFDO0lBRXJFLE9BQU8sTUFBTSxDQUNYLFVBQVUsRUFDVixDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEVBQUU7UUFDdkMsTUFBTSxRQUFRLEdBQUcsU0FBa0MsQ0FBQztRQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUM1RCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBRUQsT0FBTztZQUNMLEdBQUcsV0FBVztZQUNkLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUNwRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7YUFDMUMsQ0FBQztTQUNILENBQUM7SUFDSixDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxZQUFvQixFQUNwQixRQUErQixFQUMvQixXQUF5QixFQUN6QixJQUFTLEVBQ1QsRUFDRSxtQkFBbUIsR0FBRyxFQUFFLEVBQ3hCLFdBQVcsR0FBRyxFQUFFLEVBQ2hCLFFBQVEsR0FBRyxLQUFLLEdBQ21CO0lBRXJDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sb0JBQW9CLEdBQUcsR0FBbUIsRUFBRSxDQUNoRCxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLENBQ2xFLHVCQUF1QixDQUNyQixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLFdBQVcsRUFDWCxJQUFJLEVBQ0o7UUFDRSxtQkFBbUIsRUFBRTtZQUNuQixHQUFHLG1CQUFtQjtZQUN0QixHQUFHLGNBQWMsQ0FBQyxVQUFVLEdBQUcsWUFBWSxFQUFvQjtTQUNoRTtRQUNELFdBQVcsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLFlBQVksQ0FBQztRQUMzQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztLQUNqRSxDQUNGLENBQ0YsQ0FBQztJQUVKLE1BQU0sbUJBQW1CLEdBQUcsR0FBbUIsRUFBRTtRQUMvQyxvRkFBb0Y7UUFDcEYsTUFBTSxDQUFDLEdBQ0wsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUU1RSw2RkFBNkY7UUFDN0YsNERBQTREO1FBQzVELE9BQU8sWUFBWSxDQUNqQixRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFDekIsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsRUFBRTtRQUNyQyxrRkFBa0Y7UUFDbEYsb0ZBQW9GO1FBQ3BGLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FDZix1QkFBdUIsQ0FDckIsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxXQUFXLEVBQ1gsSUFBSSxFQUNKO1lBQ0UsbUJBQW1CLEVBQUU7Z0JBQ25CLEdBQUcsbUJBQW1CO2dCQUN0QixHQUFHLGNBQWMsQ0FBQyxlQUFlLEdBQUcsWUFBWSxFQUFvQjthQUNyRTtZQUNELFdBQVcsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsWUFBWSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsMENBQTBDO1lBQ3RHLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDO1NBQ2xFLENBQ0YsQ0FDRixFQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsTUFBTSxvQkFBb0IsR0FBRyxHQUFtQixFQUFFO1FBQ2hELE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQy9ELENBQUM7UUFDRixNQUFNLFlBQVksR0FBRyxLQUFLLENBQ3hCLFVBQVUsRUFBRSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxFQUM3QyxtQkFBbUIsRUFDbkIsaUNBQWlDLENBQy9CLFFBQVEsRUFDUixVQUFVLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUN4QyxDQUNGLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2pDLE9BQU87WUFDTDtnQkFDRSxJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLFFBQVE7Z0JBQ1IsWUFBWTtnQkFDWixXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsSUFBSSxRQUFRLENBQUMsV0FBVztnQkFDNUQsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQztnQkFDL0QsV0FBVyxFQUFFO29CQUNYLEdBQUksSUFBSSxDQUNOLFFBQVEsRUFDUixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNhO29CQUN2QyxHQUFHLFdBQVc7aUJBQ2Y7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO2FBQzVCO1NBQ2dCLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0lBRUYsUUFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2QsT0FBTyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDYixPQUFPLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixPQUFPLG9CQUFvQixFQUFFLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sVUFBVSxpQ0FBaUMsQ0FDL0MsUUFBK0IsRUFDL0IsZUFBeUIsRUFBRTtJQUUzQixNQUFNLHVCQUF1QixHQUFHO1FBQzlCLHNCQUFzQjtRQUN0QiwyQkFBMkI7UUFDM0IsY0FBYyxDQUFDLGlCQUFpQjtLQUNqQyxDQUFDO0lBQ0YsSUFDRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzFFLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQzlCLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFvQixDQUMxRSxDQUFDO0lBQ0osQ0FBQztJQUNELFFBQVEsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNmLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNmLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsSUFBWSxFQUNaLFNBQThDO0lBRTlDLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsR0FDckQsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUMvQyxPQUFPLEtBQUs7UUFDVixDQUFDLENBQUMsR0FBRyxlQUFlLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUNwQyxjQUFjLElBQUksaUJBQ3BCLEVBQUU7UUFDSixDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBWTtJQUN0QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN4RCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxLQUFtQjtJQUt0RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQzFCLEtBQUssQ0FBQyxZQUFZLEVBQ2xCLFVBQVUsQ0FBQyxFQUFFLENBQ1gsVUFBVSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO1FBQ2hELFVBQVUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUN4RCxDQUFDO0lBQ0YsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQ2pDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVk7SUFDeEMsT0FBTyxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDM0QsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQ3pCLFFBQXVCLEVBQ3ZCLElBQVksRUFDWixhQUFhLEdBQUcsSUFBSTtJQUVwQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUMxQixXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ2hCLENBQUM7SUFDbkIsT0FBTyxhQUFhLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDdkQsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsY0FBNEIsRUFBRSxFQUM5QixhQUFvQyxFQUNwQyxJQUFhLEVBQ2IsaUJBQW9DO0lBRXBDLE1BQU0sYUFBYSxHQUFHLDBCQUEwQixDQUM5QyxhQUFhLEVBQ2IsV0FBVyxFQUNYLElBQUksRUFDSixpQkFBaUIsQ0FDbEIsQ0FBQztJQUVGLE1BQU0sZ0JBQWdCLEdBQW1CLFFBQVEsQ0FDL0MsTUFBTSxDQUNKLFdBQVcsRUFDWCxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUMxQixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRSxDQUFDLENBQUMsV0FBVztRQUNiLENBQUMsQ0FBQztZQUNFLEdBQUcsV0FBVztZQUNkLEdBQUcsdUJBQXVCLENBQ3hCLFVBQVUsRUFDVixJQUFJLEVBQ0osYUFBYSxFQUNiLFdBQVcsQ0FDWjtTQUNGLEVBQ1AsRUFBRSxDQUNILEVBQ0QsT0FBTyxDQUNSLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztJQUU1RCxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FDckMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUN0QyxDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUc7UUFDakIsR0FBRyxhQUFhLENBQ2QsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUNyQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FDdkM7UUFDRCxXQUFXO1FBQ1gsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0tBQ3ZCLENBQUM7SUFFcEIsYUFBYTtJQUNiLE1BQU0sQ0FDSixjQUFjLEdBQUcsRUFBRSxFQUNuQixXQUFXLEdBQUcsRUFBRSxFQUNoQixXQUFXLEdBQUcsRUFBRSxFQUNoQixZQUFZLEdBQUcsRUFBRSxFQUNsQixHQUFHLE1BQU0sQ0FDUixVQUFVLEVBQ1YsQ0FDRSxDQUNFLHlCQUF5QixHQUFHLEVBQW9CLEVBQ2hELHNCQUFzQixHQUFHLEVBQW9CLEVBQzdDLHNCQUFzQixHQUFHLEVBQW9CLEVBQzdDLHVCQUF1QixHQUFHLEVBQW9CLEVBQy9DLEVBQ0QsS0FBbUIsRUFDbkIsRUFBRTtRQUNGLE1BQU0sT0FBTyxHQUFHO1lBQ2QsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsc0JBQXNCLEVBQUU7WUFDckUsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsc0JBQXNCLEVBQUU7WUFDaEUsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUseUJBQXlCLEVBQUU7U0FDbEUsQ0FBQztRQUNGLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDaEMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ2xDLEVBQUUsR0FBRyxDQUFDO1FBQ1AsT0FBTztZQUNMLHlCQUF5QjtZQUN6QixzQkFBc0I7WUFDdEIsc0JBQXNCO1lBQ3RCLHVCQUF1QjtTQUN4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNSLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3pELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUVGLE9BQU87UUFDTCxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7UUFDbkQsV0FBVyxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixDQUFDO1FBQ3hFLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUM7UUFDL0QsY0FBYyxFQUFFLFVBQVUsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO1FBQ3ZELGdCQUFnQjtRQUNoQixhQUFhO1FBQ2IsV0FBVztRQUNYLFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixNQUFzQixFQUN0QixnQkFBZ0M7SUFFaEMsZUFBZTtJQUNmLE1BQU0sd0JBQXdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtRQUN2RCxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFFSCw4RkFBOEY7SUFDOUYsK0NBQStDO0lBQy9DLE9BQU8sR0FBRyxDQUFDLHdCQUF3QixFQUFFLENBQUMsYUFBYSxFQUFFLFNBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUUsU0FBUztRQUNULFdBQVcsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO1FBQ2pDLFlBQVksRUFDVixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsU0FBUyxFQUFFLENBQUM7WUFDaEUsRUFBRSxZQUFZLElBQUksRUFBRTtRQUN4QixVQUFVLEVBQUUsTUFBTSxDQUNoQixhQUFhLEVBQ2IsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvQixNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRztvQkFDN0IsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDdkMsS0FBSztpQkFDTixDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8scUJBQXFCLENBQUM7UUFDL0IsQ0FBQyxFQUNELEVBQXNCLENBQ3ZCO1FBQ0QsTUFBTSxFQUFFLEtBQUs7S0FDZCxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxNQUFzQixFQUFFLFdBQXlCO0lBQ25FLE9BQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUM1QixXQUFXLENBQUMsU0FBUyxDQUNuQixDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDekQsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZUFBZSxDQUN0QixNQUFzQixFQUN0QixXQUF5QixFQUN6QixnQkFBZ0M7SUFFaEMsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQ2pDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQy9CLEtBQUssQ0FBQyxFQUFFO1FBQ04sTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMsQ0FDRixDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELFNBQVM7UUFDVCxXQUFXLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxZQUFZLEVBQUUsU0FBUzthQUNwQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDWCxzQkFBc0IsQ0FDcEIsS0FBSyxDQUFDLFlBQVksRUFDbEIsY0FBYyxDQUFDLGNBQWMsQ0FDOUIsQ0FDRjthQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakIsWUFBWSxFQUNWLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNoRSxFQUFFLFlBQVksSUFBSSxFQUFFO1FBQ3hCLFNBQVM7S0FDVixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGVuQVBJVjNTY2hlbWFPYmplY3QsIGlzRXF1YWwgfSBmcm9tICdAYWxhdWRhLWZlL2NvbW1vbic7XG5pbXBvcnQge1xuICBmaW5kLFxuICBmbGF0TWFwLFxuICBmbGF0TWFwRGVwdGgsXG4gIGZsYXR0ZW4sXG4gIGdldCxcbiAgZ3JvdXBCeSxcbiAgaXNBcnJheSxcbiAgbWFwLFxuICBwYXJzZUludCxcbiAgcGljayxcbiAgcmVkdWNlLFxuICBzb3J0QnksXG4gIHN0YXJ0Q2FzZSxcbiAgdGltZXMsXG4gIHRvUGF0aCxcbiAgdW5pb24sXG4gIHVuaXFXaXRoLFxufSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQge1xuICBEZXNjcmlwdG9yLFxuICBGb3JtRGF0YVN0YXRlLFxuICBPcGVyYW5kRmllbGQsXG4gIE9wZXJhbmRGaWVsZFZhbGlkYXRpb24sXG4gIFNwZWNDYXBhYmlsaXR5LFxuICBTcGVjQ2FwYWJpbGl0eVVJUHJlZml4LFxuICBTcGVjQ2FwYWJpbGl0eVdpZGdldHNQcmVmaXgsXG4gIFZhbGlkYXRpb25zLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7XG4gIGZpZWxkU2hvdWxkUmV2ZWFsLFxuICBnZXRCYXNpY0NhcGFiaWxpdHlUeXBlLFxuICBnZXRDYXBhYmlsaXR5RGlzYWJsZWQsXG4gIGdldENhcGFiaWxpdHlWYWxpZGF0aW9ucyxcbiAgZ2V0RGlzcGxheUJ5Q2FwYWJpbGl0eSxcbn0gZnJvbSAnLi9jYXBhYmlsaXR5JztcbmltcG9ydCB7XG4gIERFU0NSSVBUT1JfREVGSU5JVElPTl9LRVksXG4gIEdST1VQX1BBVFRFUk4sXG4gIE1BWF9ERVBUSCxcbiAgU0NIRU1BX1BBVEgsXG59IGZyb20gJy4vY29uc3RhbnQnO1xuaW1wb3J0IHtcbiAgZ2V0UmVsYXRlZEZpZWxkcyxcbiAgZ2V0VHJlZUZpZWxkcyxcbiAgaGFzRGVzY3JpcHRvcixcbiAgcGFyc2VBcnJheVBhdGgsXG59IGZyb20gJy4vaGVscGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBGbGF0dGVuTmVzdGVkUHJvcGVydGllc0FjY3VtdWxhdG9yIHtcbiAgY3VycmVudENhcGFiaWxpdGllcz86IFNwZWNDYXBhYmlsaXR5W107XG4gIGN1cnJlbnRQYXRoPzogc3RyaW5nW107XG4gIGZpZWxkcz86IE9wZXJhbmRGaWVsZFtdO1xuICByZXF1aXJlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5RGVwdGgoXG4gIHByb3BlcnR5OiBPcGVuQVBJVjNTY2hlbWFPYmplY3QsXG4gIGRlcHRoID0gMCxcbik6IG51bWJlciB7XG4gIGlmICghcHJvcGVydHkgfHwgIVsnb2JqZWN0JywgJ2FycmF5J10uaW5jbHVkZXMocHJvcGVydHkudHlwZSkpIHtcbiAgICByZXR1cm4gZGVwdGg7XG4gIH1cbiAgcmV0dXJuIE1hdGgubWF4KFxuICAgIDAsXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhcbiAgICAgIHByb3BlcnR5LnByb3BlcnRpZXMgfHwgcHJvcGVydHkuaXRlbXM/LnByb3BlcnRpZXMgfHwge30sXG4gICAgKS5tYXAobmVzdGVkUHJvcGVydHkgPT4gZ2V0UHJvcGVydHlEZXB0aChuZXN0ZWRQcm9wZXJ0eSwgZGVwdGggKyAxKSksXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZHNGcm9tRGVzY3JpcHRvcihcbiAge1xuICAgIHBhdGgsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgZGlzcGxheU5hbWUsXG4gICAgJ3gtZGVzY3JpcHRvcnMnOiBjYXBhYmlsaXRpZXMgPSBbXSxcbiAgfTogRGVzY3JpcHRvcixcbiAgZGF0YTogYW55LFxuICBvcGVuQXBpOiBPcGVuQVBJVjNTY2hlbWFPYmplY3QsXG4gIF9vcmlnaW5EZXNjcmlwdG9ycz86IERlc2NyaXB0b3JbXSxcbik6IE9wZXJhbmRGaWVsZFtdIHtcbiAgY29uc3QgeyBtYXRjaCwgcGF0aEJlZm9yZUluZGV4LCBwYXRoQWZ0ZXJJbmRleCB9ID0gcGFyc2VBcnJheVBhdGgocGF0aCk7XG4gIGNvbnN0IGZpbGVkQmFzaWNUeXBlID0gZ2V0QmFzaWNDYXBhYmlsaXR5VHlwZShjYXBhYmlsaXRpZXMpO1xuICBjb25zdCBkaXNhYmxlZCA9IGdldENhcGFiaWxpdHlEaXNhYmxlZChjYXBhYmlsaXRpZXMpO1xuICBjb25zdCB2YWxpZGF0aW9ucyA9IGdldENhcGFiaWxpdHlWYWxpZGF0aW9ucyhjYXBhYmlsaXRpZXMpO1xuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBuOiBudW1iZXIgPVxuICAgICAgZ2V0KGRhdGEsIHRvUGF0aChgc3BlYy4ke3BhdGhCZWZvcmVJbmRleH1gKSwgW10pLmxlbmd0aCB8fCAxO1xuICAgIGNvbnN0IHBhdGhBZnRlckluZGV4U3RyID0gYC4ke3BhdGhBZnRlckluZGV4fWA7XG4gICAgbGV0IGV4dHJhOiBEZXNjcmlwdG9yW10gPSBbXTtcbiAgICBpZiAoX29yaWdpbkRlc2NyaXB0b3JzKSB7XG4gICAgICBleHRyYSA9IGZsYXR0ZW4oXG4gICAgICAgIF9vcmlnaW5EZXNjcmlwdG9yc1xuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICBkID0+IGQucGF0aC5zdGFydHNXaXRoKGAke3BhdGhCZWZvcmVJbmRleH1bMF1gKSAmJiBkLnBhdGggIT09IHBhdGgsXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoZCA9PlxuICAgICAgICAgICAgdGltZXMobiwgaW5kZXggPT4ge1xuICAgICAgICAgICAgICBjb25zdCBvUGF0aCA9IGQucGF0aC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGAke3BhdGhCZWZvcmVJbmRleH1bMF1gLFxuICAgICAgICAgICAgICAgIGAke3BhdGhCZWZvcmVJbmRleH1bJHtpbmRleH1dYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5kLFxuICAgICAgICAgICAgICAgIHBhdGg6IG9QYXRoLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkuc2xpY2UoMSksXG4gICAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4oW1xuICAgICAgLi4udGltZXMobiwgaW5kZXggPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBgc3BlYy4ke3BhdGhCZWZvcmVJbmRleH1bJHtpbmRleH1dJHtcbiAgICAgICAgICBwYXRoQWZ0ZXJJbmRleCAmJiBwYXRoQWZ0ZXJJbmRleFN0clxuICAgICAgICB9YDtcbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSBnZXRPcGVuQXBpUHJvcGVydHlCeVBhdGgoYHNwZWMuJHtwYXRofWAsIG9wZW5BcGkpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGF0aDogcHJvcGVydHlQYXRoLFxuICAgICAgICAgIHZhbHVlOiBnZXQoZGF0YSwgcHJvcGVydHlQYXRoKSxcbiAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICBkaXNwbGF5TmFtZSxcbiAgICAgICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICAgICAgdHlwZTogZmlsZWRCYXNpY1R5cGUgfHwgcHJvcGVydHk/LnR5cGUsXG4gICAgICAgICAgcmVxdWlyZWQ6IG51bGwsXG4gICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgdmFsaWRhdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLnZhbGlkYXRpb25zLFxuICAgICAgICAgICAgLi4uKHByb3BlcnR5Py5yZXF1aXJlZCAmJiB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIC4uLmV4dHJhLm1hcChlID0+IGdldEZpZWxkc0Zyb21EZXNjcmlwdG9yKGUsIGRhdGEsIG9wZW5BcGkpKSxcbiAgICBdKTtcbiAgfVxuICAvLyDpgJrov4cgZGVzY3JpcHRvciDmn6Xmib7ljp/lp4sgQ1JEIOiKgueCue+8jOaOqOWvvOexu+Wei+OAgXZhbGlkYXRpb24g562J5L+h5oGvXG4gIGNvbnN0IHByb3BlcnR5UGF0aCA9IGBzcGVjLiR7cGF0aH1gO1xuICBjb25zdCBwcm9wZXJ0eSA9IGdldE9wZW5BcGlQcm9wZXJ0eUJ5UGF0aChwcm9wZXJ0eVBhdGgsIG9wZW5BcGkpO1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHBhdGg6IHByb3BlcnR5UGF0aCxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZGlzcGxheU5hbWUsXG4gICAgICBjYXBhYmlsaXRpZXMsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHZhbHVlOiBnZXQoZGF0YSwgcHJvcGVydHlQYXRoKSxcbiAgICAgIHR5cGU6IGZpbGVkQmFzaWNUeXBlIHx8IHByb3BlcnR5Py50eXBlLFxuICAgICAgcmVxdWlyZWQ6IG51bGwsXG4gICAgICB2YWxpZGF0aW9uczoge1xuICAgICAgICAuLi52YWxpZGF0aW9ucyxcbiAgICAgICAgLi4uKHByb3BlcnR5Py5yZXF1aXJlZCAmJiB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgfSxcbiAgICB9LFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlbkFwaVByb3BlcnR5QnlQYXRoKFxuICBkZXNjcmlwdG9yUGF0aDogc3RyaW5nLFxuICBvcGVuQXBpOiBPcGVuQVBJVjNTY2hlbWFPYmplY3QsXG4pIHtcbiAgY29uc3QgcGF0aHMgPSBkZXNjcmlwdG9yUGF0aC5zcGxpdCgnLicpO1xuICB0cnkge1xuICAgIHJldHVybiBwYXRocy5yZWR1Y2UoKGFjYywgcGF0aCkgPT4ge1xuICAgICAgYWNjID0gcGF0aC5pbmNsdWRlcygnWzBdJylcbiAgICAgICAgPyBhY2MuaXRlbXMucHJvcGVydGllc1twYXRoLnNwbGl0KCdbMF0nKVswXV1cbiAgICAgICAgOiBhY2MucHJvcGVydGllc1twYXRoXTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgb3BlbkFwaSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZHNGcm9tT3BlbkFwaVNjaGVtYShcbiAgb3BlbkFwaTogT3BlbkFQSVYzU2NoZW1hT2JqZWN0LFxuICBkZXNjcmlwdG9yczogRGVzY3JpcHRvcltdLFxuICBkYXRhOiB1bmtub3duLFxuICBvcGVuQXBpU2NoZW1hUGF0aDogc3RyaW5nIHwgc3RyaW5nW10gPSBTQ0hFTUFfUEFUSCxcbiAgbWF4RGVwdGggPSBNQVhfREVQVEgsXG4pOiBPcGVyYW5kRmllbGRbXSB7XG4gIGNvbnN0IHBhdGggPSBpc0FycmF5KG9wZW5BcGlTY2hlbWFQYXRoKVxuICAgID8gb3BlbkFwaVNjaGVtYVBhdGhcbiAgICA6IG9wZW5BcGlTY2hlbWFQYXRoLnNwbGl0KCcuJykuZmlsdGVyKEJvb2xlYW4pO1xuICBjb25zdCBwcm9wZXJ0aWVzID0gZ2V0KG9wZW5BcGksIFsuLi5wYXRoLCAncHJvcGVydGllcyddLCB7fSk7XG4gIGNvbnN0IHJlcXVpcmVkID0gZ2V0KG9wZW5BcGksIFsuLi5wYXRoLCAncmVxdWlyZWQnXSwgW10pIGFzIHN0cmluZ1tdO1xuXG4gIHJldHVybiByZWR1Y2UoXG4gICAgcHJvcGVydGllcyxcbiAgICAoYWNjdW11bGF0b3IsIF9wcm9wZXJ0eSwgcHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IF9wcm9wZXJ0eSBhcyBPcGVuQVBJVjNTY2hlbWFPYmplY3Q7XG4gICAgICBpZiAoIXByb3BlcnR5LnR5cGUgfHwgZ2V0UHJvcGVydHlEZXB0aChwcm9wZXJ0eSkgPiBtYXhEZXB0aCkge1xuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmFjY3VtdWxhdG9yLFxuICAgICAgICAuLi5mbGF0dGVuTmVzdGVkUHJvcGVydGllcyhwcm9wZXJ0eU5hbWUsIHByb3BlcnR5LCBkZXNjcmlwdG9ycywgZGF0YSwge1xuICAgICAgICAgIHJlcXVpcmVkOiByZXF1aXJlZC5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpLFxuICAgICAgICB9KSxcbiAgICAgIF07XG4gICAgfSxcbiAgICBbXSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5OZXN0ZWRQcm9wZXJ0aWVzKFxuICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgcHJvcGVydHk6IE9wZW5BUElWM1NjaGVtYU9iamVjdCxcbiAgZGVzY3JpcHRvcnM6IERlc2NyaXB0b3JbXSxcbiAgZGF0YTogYW55LFxuICB7XG4gICAgY3VycmVudENhcGFiaWxpdGllcyA9IFtdLFxuICAgIGN1cnJlbnRQYXRoID0gW10sXG4gICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgfTogRmxhdHRlbk5lc3RlZFByb3BlcnRpZXNBY2N1bXVsYXRvcixcbikge1xuICBpZiAoIXByb3BlcnR5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlT2JqZWN0UHJvcGVydHkgPSAoKTogT3BlcmFuZEZpZWxkW10gPT5cbiAgICBmbGF0TWFwKHByb3BlcnR5LnByb3BlcnRpZXMsIChuZXN0ZWRQcm9wZXJ0eSwgbmVzdGVkUHJvcGVydHlOYW1lKSA9PlxuICAgICAgZmxhdHRlbk5lc3RlZFByb3BlcnRpZXMoXG4gICAgICAgIG5lc3RlZFByb3BlcnR5TmFtZSxcbiAgICAgICAgbmVzdGVkUHJvcGVydHksXG4gICAgICAgIGRlc2NyaXB0b3JzLFxuICAgICAgICBkYXRhLFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudENhcGFiaWxpdGllczogW1xuICAgICAgICAgICAgLi4uY3VycmVudENhcGFiaWxpdGllcyxcbiAgICAgICAgICAgIGAke1NwZWNDYXBhYmlsaXR5LmZpZWxkR3JvdXB9JHtwcm9wZXJ0eU5hbWV9YCBhcyBTcGVjQ2FwYWJpbGl0eSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGN1cnJlbnRQYXRoOiBbLi4uY3VycmVudFBhdGgsIHByb3BlcnR5TmFtZV0sXG4gICAgICAgICAgcmVxdWlyZWQ6IChwcm9wZXJ0eS5yZXF1aXJlZCB8fCBbXSkuaW5jbHVkZXMobmVzdGVkUHJvcGVydHlOYW1lKSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcblxuICBjb25zdCBoYW5kbGVBcnJheVByb3BlcnR5ID0gKCk6IE9wZXJhbmRGaWVsZFtdID0+IHtcbiAgICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgYXJyYXkgZWxlbWVudHMgdGhhdCBhcmUgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSBwcm92aWRlZCBvYmplY3RcbiAgICBjb25zdCBuOiBudW1iZXIgPVxuICAgICAgZ2V0KGRhdGEsIGBzcGVjLiR7Y3VycmVudFBhdGguam9pbignLicpfSR7cHJvcGVydHlOYW1lfWAsIFtdKS5sZW5ndGggfHwgMTtcblxuICAgIC8vIFNpbmNlIF8udGltZXMgd2lsbCByZXR1cm4gYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5IG9mIE9wZXJhbmRGaWVsZHMgKE9wZXJhbmRGaWVsZFtdW10pLCB3ZVxuICAgIC8vIG5lZWQgdG8gZmxhdHRlbiBvbmUgbGV2ZWwgZGVlcGVyIHRoYW4gXy5mbGF0TWFwIHByb3ZpZGVzLlxuICAgIHJldHVybiBmbGF0TWFwRGVwdGgoXG4gICAgICBwcm9wZXJ0eS5pdGVtcy5wcm9wZXJ0aWVzLFxuICAgICAgKG5lc3RlZFByb3BlcnR5LCBuZXN0ZWRQcm9wZXJ0eU5hbWUpID0+XG4gICAgICAgIC8vIFJlcGVhdCByZWN1cnNpb24gKG4pIHRpbWVzIHNvIHRoYXQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGZpZWxkcyBhcmUgY3JlYXRlZCBmb3JcbiAgICAgICAgLy8gZXhpc3RpbmcgdmFsdWVzIGluIG9iai4gVGhpcyBlbnN1cmVzIHRoYXQgZnVydGhlciBuZXN0ZWQgZmllbGRzIGFsc28gZ2V0IGNyZWF0ZWQuXG4gICAgICAgIHRpbWVzKG4sIGluZGV4ID0+XG4gICAgICAgICAgZmxhdHRlbk5lc3RlZFByb3BlcnRpZXMoXG4gICAgICAgICAgICBuZXN0ZWRQcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICBuZXN0ZWRQcm9wZXJ0eSxcbiAgICAgICAgICAgIGRlc2NyaXB0b3JzLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY3VycmVudENhcGFiaWxpdGllczogW1xuICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRDYXBhYmlsaXRpZXMsXG4gICAgICAgICAgICAgICAgYCR7U3BlY0NhcGFiaWxpdHkuYXJyYXlGaWVsZEdyb3VwfSR7cHJvcGVydHlOYW1lfWAgYXMgU3BlY0NhcGFiaWxpdHksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGN1cnJlbnRQYXRoOiBbLi4uY3VycmVudFBhdGgsIGAke3Byb3BlcnR5TmFtZX1bJHtpbmRleH1dYF0sIC8vIEFycmF5IGZpZWxkIHBhdGhzIG11c3QgaW5jbHVkZSBhbiBpbmRleFxuICAgICAgICAgICAgICByZXF1aXJlZDogKHByb3BlcnR5Py5yZXF1aXJlZCB8fCBbXSkuaW5jbHVkZXMobmVzdGVkUHJvcGVydHlOYW1lKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgIDIsXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVBdG9taWNQcm9wZXJ0eSA9ICgpOiBPcGVyYW5kRmllbGRbXSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IFsuLi5jdXJyZW50UGF0aCwgcHJvcGVydHlOYW1lXS5qb2luKCcuJyk7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JzLmZpbmQoXG4gICAgICBpdGVtID0+IGl0ZW0ucGF0aCA9PT0gbW9kaWZ5QXJyYXlGaWVsZFBhdGhJbmRleChwYXRoLCAoKSA9PiAwKSxcbiAgICApO1xuICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IHVuaW9uKFxuICAgICAgZGVzY3JpcHRvcj8uW0RFU0NSSVBUT1JfREVGSU5JVElPTl9LRVldIHx8IFtdLFxuICAgICAgY3VycmVudENhcGFiaWxpdGllcyxcbiAgICAgIGdldENhcGFiaWxpdGllc0Zvck9wZW5BcGlQcm9wZXJ0eShcbiAgICAgICAgcHJvcGVydHksXG4gICAgICAgIGRlc2NyaXB0b3I/LltERVNDUklQVE9SX0RFRklOSVRJT05fS0VZXSxcbiAgICAgICksXG4gICAgKTtcbiAgICBjb25zdCB2YWxpZGF0aW9ucyA9IGdldENhcGFiaWxpdHlWYWxpZGF0aW9ucyhjYXBhYmlsaXRpZXMpO1xuICAgIGNvbnN0IGZpZWxkUGF0aCA9IGBzcGVjLiR7cGF0aH1gO1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHBhdGg6IGZpZWxkUGF0aCxcbiAgICAgICAgdHlwZTogcHJvcGVydHkudHlwZSxcbiAgICAgICAgcmVxdWlyZWQsXG4gICAgICAgIGNhcGFiaWxpdGllcyxcbiAgICAgICAgZGVzY3JpcHRpb246IGRlc2NyaXB0b3I/LmRlc2NyaXB0aW9uIHx8IHByb3BlcnR5LmRlc2NyaXB0aW9uLFxuICAgICAgICBkaXNwbGF5TmFtZTogZGVzY3JpcHRvcj8uZGlzcGxheU5hbWUgfHwgc3RhcnRDYXNlKHByb3BlcnR5TmFtZSksXG4gICAgICAgIHZhbGlkYXRpb25zOiB7XG4gICAgICAgICAgLi4uKHBpY2soXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKFZhbGlkYXRpb25zKSxcbiAgICAgICAgICApIGFzIHVua25vd24gYXMgT3BlcmFuZEZpZWxkVmFsaWRhdGlvbiksXG4gICAgICAgICAgLi4udmFsaWRhdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiBnZXQoZGF0YSwgZmllbGRQYXRoKSxcbiAgICAgIH0sXG4gICAgXSBhcyBPcGVyYW5kRmllbGRbXTtcbiAgfTtcblxuICBzd2l0Y2ggKHByb3BlcnR5LnR5cGUpIHtcbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICByZXR1cm4gaGFuZGxlT2JqZWN0UHJvcGVydHkoKTtcbiAgICB9XG4gICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICByZXR1cm4gaGFuZGxlQXJyYXlQcm9wZXJ0eSgpO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gaGFuZGxlQXRvbWljUHJvcGVydHkoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQWNjZXB0cyBhbiBPcGVuQVBJIHNwZWMgcHJvcGVydHkgYW5kIHJldHVybnMgYSBjb3JyZXNwb25kaW5nIFNwZWNDYXBhYmlsaXR5W10gYXJyYXkuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FwYWJpbGl0aWVzRm9yT3BlbkFwaVByb3BlcnR5KFxuICBwcm9wZXJ0eTogT3BlbkFQSVYzU2NoZW1hT2JqZWN0LFxuICBjYXBhYmlsaXRpZXM6IHN0cmluZ1tdID0gW10sXG4pOiBTcGVjQ2FwYWJpbGl0eVtdIHtcbiAgY29uc3QgZm9ybUNvbnRyb2xDYXBhYmlsaXRpZXMgPSBbXG4gICAgU3BlY0NhcGFiaWxpdHlVSVByZWZpeCxcbiAgICBTcGVjQ2FwYWJpbGl0eVdpZGdldHNQcmVmaXgsXG4gICAgU3BlY0NhcGFiaWxpdHkuazhzUmVzb3VyY2VQcmVmaXgsXG4gIF07XG4gIGlmIChcbiAgICBjYXBhYmlsaXRpZXMuc29tZShpID0+IGZvcm1Db250cm9sQ2FwYWJpbGl0aWVzLnNvbWUoayA9PiBpLnN0YXJ0c1dpdGgoaykpKVxuICApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKHByb3BlcnR5LmVudW0pIHtcbiAgICByZXR1cm4gKHByb3BlcnR5LmVudW0gfHwgW10pLm1hcChcbiAgICAgIChvcHRpb246IHN0cmluZykgPT4gYCR7U3BlY0NhcGFiaWxpdHkuc2VsZWN0fSR7b3B0aW9ufWAgYXMgU3BlY0NhcGFiaWxpdHksXG4gICAgKTtcbiAgfVxuICBzd2l0Y2ggKHByb3BlcnR5LnR5cGUpIHtcbiAgICBjYXNlICdpbnRlZ2VyJzoge1xuICAgICAgcmV0dXJuIFtTcGVjQ2FwYWJpbGl0eS5udW1iZXJdO1xuICAgIH1cbiAgICBjYXNlICdib29sZWFuJzoge1xuICAgICAgcmV0dXJuIFtTcGVjQ2FwYWJpbGl0eS5ib29sZWFuU3dpdGNoXTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIFtTcGVjQ2FwYWJpbGl0eS50ZXh0XTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vZGlmeUFycmF5RmllbGRQYXRoSW5kZXgoXG4gIHBhdGg6IHN0cmluZyxcbiAgb3BlcmF0aW9uOiAoaW5kZXg/OiBudW1iZXIpID0+IHN0cmluZyB8IG51bWJlcixcbik6IHN0cmluZyB7XG4gIGNvbnN0IHsgbWF0Y2gsIGluZGV4LCBwYXRoQmVmb3JlSW5kZXgsIHBhdGhBZnRlckluZGV4IH0gPVxuICAgIHBhcnNlQXJyYXlQYXRoKHBhdGgpO1xuICBjb25zdCBwYXRoQWZ0ZXJJbmRleFN0ciA9IGAuJHtwYXRoQWZ0ZXJJbmRleH1gO1xuICByZXR1cm4gbWF0Y2hcbiAgICA/IGAke3BhdGhCZWZvcmVJbmRleH1bJHtvcGVyYXRpb24oaW5kZXgpfV0ke1xuICAgICAgICBwYXRoQWZ0ZXJJbmRleCAmJiBwYXRoQWZ0ZXJJbmRleFN0clxuICAgICAgfWBcbiAgICA6IHBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoVG9BcnJheShwYXRoOiBzdHJpbmcpOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+IHtcbiAgcmV0dXJuIG1hcCh0b1BhdGgocGF0aCksIHN1YlBhdGggPT5cbiAgICAvXlxcZCskLy50ZXN0KHN1YlBhdGgpID8gcGFyc2VJbnQoc3ViUGF0aCwgMTApIDogc3ViUGF0aCxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlR3JvdXBEZXNjcmlwdG9yKGZpZWxkOiBPcGVyYW5kRmllbGQpOiB7XG4gIGdyb3VwTmFtZT86IHN0cmluZztcbiAgZ3JvdXBUeXBlPzogc3RyaW5nO1xuICBtYXRjaD86IHN0cmluZztcbn0ge1xuICBjb25zdCBncm91cERlc2NyaXB0b3IgPSBmaW5kKFxuICAgIGZpZWxkLmNhcGFiaWxpdGllcyxcbiAgICBkZXNjcmlwdG9yID0+XG4gICAgICBkZXNjcmlwdG9yLnN0YXJ0c1dpdGgoU3BlY0NhcGFiaWxpdHkuZmllbGRHcm91cCkgfHxcbiAgICAgIGRlc2NyaXB0b3Iuc3RhcnRzV2l0aChTcGVjQ2FwYWJpbGl0eS5hcnJheUZpZWxkR3JvdXApLFxuICApO1xuICBjb25zdCBbbWF0Y2gsIGdyb3VwVHlwZSwgZ3JvdXBOYW1lXSA9XG4gICAgR1JPVVBfUEFUVEVSTi5leGVjKGdyb3VwRGVzY3JpcHRvcikgfHwgW107XG4gIHJldHVybiB7IG1hdGNoLCBncm91cE5hbWUsIGdyb3VwVHlwZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHBhdGg/LnN0YXJ0c1dpdGgoJ3NwZWMuJykgPyBwYXRoIDogYHNwZWMuJHtwYXRofWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtRGF0YShcbiAgZm9ybURhdGE6IEZvcm1EYXRhU3RhdGUsXG4gIHBhdGg6IHN0cmluZyxcbiAgZW5hYmxlQ29udmVydCA9IHRydWUsIC8vIGVuYWJsZSBjb252ZXJ0IHVuZGVmaW5lZCA9PiBudWxsXG4pIHtcbiAgY29uc3QgdmFsdWUgPSBmb3JtRGF0YS5nZXRJbihcbiAgICBwYXRoVG9BcnJheShub3JtYWxpemVQYXRoKHBhdGgpKSxcbiAgKSBhcyBGb3JtRGF0YVN0YXRlO1xuICByZXR1cm4gZW5hYmxlQ29udmVydCAmJiB2YWx1ZSA9PSBudWxsID8gbnVsbCA6IHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FwYWJpbGl0eUZpZWxkKFxuICBkZXNjcmlwdG9yczogRGVzY3JpcHRvcltdID0gW10sXG4gIG9wZW5BcGlTY2hlbWE6IE9wZW5BUElWM1NjaGVtYU9iamVjdCxcbiAgZGF0YTogdW5rbm93bixcbiAgb3BlbkFwaVNjaGVtYVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuKSB7XG4gIGNvbnN0IG9wZW5BcGlGaWVsZHMgPSBnZXRGaWVsZHNGcm9tT3BlbkFwaVNjaGVtYShcbiAgICBvcGVuQXBpU2NoZW1hLFxuICAgIGRlc2NyaXB0b3JzLFxuICAgIGRhdGEsXG4gICAgb3BlbkFwaVNjaGVtYVBhdGgsXG4gICk7XG5cbiAgY29uc3QgZGVzY3JpcHRvckZpZWxkczogT3BlcmFuZEZpZWxkW10gPSB1bmlxV2l0aChcbiAgICByZWR1Y2UoXG4gICAgICBkZXNjcmlwdG9ycyxcbiAgICAgIChhY2N1bXVsYXRvciwgZGVzY3JpcHRvcikgPT5cbiAgICAgICAgb3BlbkFwaUZpZWxkcz8uc29tZShmaWVsZCA9PiBmaWVsZC5wYXRoID09PSBgc3BlYy4ke2Rlc2NyaXB0b3IucGF0aH1gKVxuICAgICAgICAgID8gYWNjdW11bGF0b3JcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgLi4uYWNjdW11bGF0b3IsXG4gICAgICAgICAgICAgIC4uLmdldEZpZWxkc0Zyb21EZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICBvcGVuQXBpU2NoZW1hLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JzLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXSxcbiAgICAgIFtdLFxuICAgICksXG4gICAgaXNFcXVhbCxcbiAgKTtcbiAgY29uc3QgYmFzaWNGaWVsZHMgPSBbLi4ub3BlbkFwaUZpZWxkcywgLi4uZGVzY3JpcHRvckZpZWxkc107XG5cbiAgY29uc3QgcmVsYXRpb25GaWVsZHMgPSBnZXRSZWxhdGVkRmllbGRzKFxuICAgIGJhc2ljRmllbGRzLmZpbHRlcihmaWVsZFNob3VsZFJldmVhbCksXG4gICk7XG5cbiAgY29uc3QgdHJlZUZpZWxkcyA9IFtcbiAgICAuLi5nZXRUcmVlRmllbGRzKFxuICAgICAgcmVsYXRpb25GaWVsZHMuZmlsdGVyKGYgPT4gIWYucGFyZW50KSxcbiAgICAgIHJlbGF0aW9uRmllbGRzLmZpbHRlcihmID0+ICEhZi5wYXJlbnQpLFxuICAgICksXG4gICAgLy8g5YW85a656ICB55qE5pWw5o2u57uT5p6EXG4gICAgLi4ucmVsYXRpb25GaWVsZHMuZmlsdGVyKGYgPT4gIWYuX2RpcnR5KSxcbiAgXSBhcyBPcGVyYW5kRmllbGRbXTtcblxuICAvLyDkv53nlZnvvIzlhbzlrrnogIHmlbDmja7nu5PmnoRcbiAgY29uc3QgW1xuICAgIGFkdmFuY2VkRmllbGRzID0gW10sXG4gICAgYXJyYXlGaWVsZHMgPSBbXSxcbiAgICBncm91cEZpZWxkcyA9IFtdLFxuICAgIG5vcm1hbEZpZWxkcyA9IFtdLFxuICBdID0gcmVkdWNlKFxuICAgIHRyZWVGaWVsZHMsXG4gICAgKFxuICAgICAgW1xuICAgICAgICBhZHZhbmNlZEZpZWxkc0FjY3VtdWxhdG9yID0gW10gYXMgT3BlcmFuZEZpZWxkW10sXG4gICAgICAgIGFycmF5RmllbGRzQWNjdW11bGF0b3IgPSBbXSBhcyBPcGVyYW5kRmllbGRbXSxcbiAgICAgICAgZ3JvdXBGaWVsZHNBY2N1bXVsYXRvciA9IFtdIGFzIE9wZXJhbmRGaWVsZFtdLFxuICAgICAgICBub3JtYWxGaWVsZHNBY2N1bXVsYXRvciA9IFtdIGFzIE9wZXJhbmRGaWVsZFtdLFxuICAgICAgXSxcbiAgICAgIGZpZWxkOiBPcGVyYW5kRmllbGQsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBtYXBwZXJzID0gW1xuICAgICAgICB7IHNwZWM6IFNwZWNDYXBhYmlsaXR5LmFycmF5RmllbGRHcm91cCwgYWNjOiBhcnJheUZpZWxkc0FjY3VtdWxhdG9yIH0sXG4gICAgICAgIHsgc3BlYzogU3BlY0NhcGFiaWxpdHkuZmllbGRHcm91cCwgYWNjOiBncm91cEZpZWxkc0FjY3VtdWxhdG9yIH0sXG4gICAgICAgIHsgc3BlYzogU3BlY0NhcGFiaWxpdHkuYWR2YW5jZWQsIGFjYzogYWR2YW5jZWRGaWVsZHNBY2N1bXVsYXRvciB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGFjYyA9IG1hcHBlcnMuZmluZChtYXBwZXIgPT5cbiAgICAgICAgaGFzRGVzY3JpcHRvcihmaWVsZCwgbWFwcGVyLnNwZWMpLFxuICAgICAgKT8uYWNjO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYWR2YW5jZWRGaWVsZHNBY2N1bXVsYXRvcixcbiAgICAgICAgYXJyYXlGaWVsZHNBY2N1bXVsYXRvcixcbiAgICAgICAgZ3JvdXBGaWVsZHNBY2N1bXVsYXRvcixcbiAgICAgICAgbm9ybWFsRmllbGRzQWNjdW11bGF0b3IsXG4gICAgICBdLm1hcChyID0+IHtcbiAgICAgICAgaWYgKCghYWNjICYmIHIgPT09IG5vcm1hbEZpZWxkc0FjY3VtdWxhdG9yKSB8fCByID09PSBhY2MpIHtcbiAgICAgICAgICByZXR1cm4gWy4uLnIsIGZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW10sXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBub3JtYWxGaWVsZHM6IHNvcnRGaWVsZHMobm9ybWFsRmllbGRzLCBkZXNjcmlwdG9ycyksXG4gICAgZmllbGRHcm91cHM6IHNvcnRHcm91cEZpZWxkcyhncm91cEZpZWxkcywgZGVzY3JpcHRvcnMsIGRlc2NyaXB0b3JGaWVsZHMpLFxuICAgIGFycmF5RmllbGRHcm91cHM6IGdldEFycmF5RmllbGRzKGFycmF5RmllbGRzLCBkZXNjcmlwdG9yRmllbGRzKSxcbiAgICBhZHZhbmNlZEZpZWxkczogc29ydEZpZWxkcyhhZHZhbmNlZEZpZWxkcywgZGVzY3JpcHRvcnMpLFxuICAgIGRlc2NyaXB0b3JGaWVsZHMsXG4gICAgb3BlbkFwaUZpZWxkcyxcbiAgICBiYXNpY0ZpZWxkcyxcbiAgICB0cmVlRmllbGRzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRBcnJheUZpZWxkcyhcbiAgZmllbGRzOiBPcGVyYW5kRmllbGRbXSxcbiAgZGVzY3JpcHRvckZpZWxkczogT3BlcmFuZEZpZWxkW10sXG4pIHtcbiAgLy8gYXJyYXkgZmllbGRzXG4gIGNvbnN0IGdyb3VwZWRBcnJheUZpZWxkc0J5TmFtZSA9IGdyb3VwQnkoZmllbGRzLCBmaWVsZCA9PiB7XG4gICAgY29uc3QgeyBncm91cE5hbWUgfSA9IHBhcnNlR3JvdXBEZXNjcmlwdG9yKGZpZWxkKTtcbiAgICByZXR1cm4gZ3JvdXBOYW1lO1xuICB9KTtcblxuICAvLyBNYXAge2dyb3VwTmFtZTogc3RyaW5nLCBmaWVsZExpc3RzOiBPcGVyYW5kRmllbGRbXVtdfSwgd2hlcmUgT3BlcmFuZEZpZWxkIGlzIGEgbmVzdGVkIGFycmF5XG4gIC8vIG9mIHRoZSBhcHByb3ByaWF0ZSBmaWVsZHMsIGdyb3VwZWQgYnkgaW5kZXguXG4gIHJldHVybiBtYXAoZ3JvdXBlZEFycmF5RmllbGRzQnlOYW1lLCAoZmllbGRzSW5Hcm91cCwgZ3JvdXBOYW1lOiBzdHJpbmcpID0+ICh7XG4gICAgZ3JvdXBOYW1lLFxuICAgIGRpc3BsYXlOYW1lOiBzdGFydENhc2UoZ3JvdXBOYW1lKSxcbiAgICBjYXBhYmlsaXRpZXM6XG4gICAgICBkZXNjcmlwdG9yRmllbGRzLmZpbmQoZmllbGQgPT4gZmllbGQucGF0aCA9PT0gYHNwZWMuJHtncm91cE5hbWV9YClcbiAgICAgICAgPy5jYXBhYmlsaXRpZXMgPz8gW10sXG4gICAgZmllbGRMaXN0czogcmVkdWNlKFxuICAgICAgZmllbGRzSW5Hcm91cCxcbiAgICAgIChmaWVsZExpc3RzQWNjdW11bGF0b3IsIGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaW5kZXgsIG1hdGNoIH0gPSBwYXJzZUFycmF5UGF0aChmaWVsZC5wYXRoKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgZmllbGRMaXN0c0FjY3VtdWxhdG9yW2luZGV4XSA9IFtcbiAgICAgICAgICAgIC4uLihmaWVsZExpc3RzQWNjdW11bGF0b3JbaW5kZXhdIHx8IFtdKSxcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpZWxkTGlzdHNBY2N1bXVsYXRvcjtcbiAgICAgIH0sXG4gICAgICBbXSBhcyBPcGVyYW5kRmllbGRbXVtdLFxuICAgICksXG4gICAgX2RpcnR5OiBmYWxzZSxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBzb3J0RmllbGRzKGZpZWxkczogT3BlcmFuZEZpZWxkW10sIGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9yW10pIHtcbiAgcmV0dXJuIHNvcnRCeShmaWVsZHMsIGZpZWxkID0+XG4gICAgZGVzY3JpcHRvcnMuZmluZEluZGV4KFxuICAgICAgZCA9PiBub3JtYWxpemVQYXRoKGQucGF0aCkgPT09IG5vcm1hbGl6ZVBhdGgoZmllbGQucGF0aCksXG4gICAgKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gc29ydEdyb3VwRmllbGRzKFxuICBmaWVsZHM6IE9wZXJhbmRGaWVsZFtdLFxuICBkZXNjcmlwdG9yczogRGVzY3JpcHRvcltdLFxuICBkZXNjcmlwdG9yRmllbGRzOiBPcGVyYW5kRmllbGRbXSxcbikge1xuICBjb25zdCBncm91cGVkRmllbGRzQnlOYW1lID0gZ3JvdXBCeShcbiAgICBzb3J0RmllbGRzKGZpZWxkcywgZGVzY3JpcHRvcnMpLFxuICAgIGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IHsgZ3JvdXBOYW1lIH0gPSBwYXJzZUdyb3VwRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICByZXR1cm4gZ3JvdXBOYW1lO1xuICAgIH0sXG4gICk7XG4gIHJldHVybiBtYXAoZ3JvdXBlZEZpZWxkc0J5TmFtZSwgKGZpZWxkTGlzdCwgZ3JvdXBOYW1lKSA9PiAoe1xuICAgIGdyb3VwTmFtZSxcbiAgICBkaXNwbGF5TmFtZTogc3RhcnRDYXNlKGdyb3VwTmFtZSksXG4gICAgZ3JvdXBEaXNwbGF5OiBmaWVsZExpc3RcbiAgICAgIC5tYXAoZmllbGQgPT5cbiAgICAgICAgZ2V0RGlzcGxheUJ5Q2FwYWJpbGl0eShcbiAgICAgICAgICBmaWVsZC5jYXBhYmlsaXRpZXMsXG4gICAgICAgICAgU3BlY0NhcGFiaWxpdHkuZmllbGRHcm91cE5hbWUsXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuZmluZChkID0+ICEhZCksXG4gICAgY2FwYWJpbGl0aWVzOlxuICAgICAgZGVzY3JpcHRvckZpZWxkcy5maW5kKGZpZWxkID0+IGZpZWxkLnBhdGggPT09IGBzcGVjLiR7Z3JvdXBOYW1lfWApXG4gICAgICAgID8uY2FwYWJpbGl0aWVzID8/IFtdLFxuICAgIGZpZWxkTGlzdCxcbiAgfSkpO1xufVxuIl19
@@ -0,0 +1,13 @@
1
+ /*
2
+ * Public API Surface of crd-form
3
+ */
4
+ export * from './lib/abstract/base-array';
5
+ export * from './lib/crd-form.module';
6
+ export * from './lib/crd-form/component';
7
+ export * from './lib/field-controls';
8
+ export * from './lib/field-widgets';
9
+ export * from './lib/remote-widgets';
10
+ export * from './lib/spec-descriptors';
11
+ export * from './lib/types';
12
+ export * from './lib/utils';
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvY3JkLWZvcm0vc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBjcmQtZm9ybVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2Fic3RyYWN0L2Jhc2UtYXJyYXknO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY3JkLWZvcm0ubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NyZC1mb3JtL2NvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC1jb250cm9scyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC13aWRnZXRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlbW90ZS13aWRnZXRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NwZWMtZGVzY3JpcHRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMnO1xuIl19
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@alauda-fe/crd-form" />
5
+ export * from './public-api';
@@ -0,0 +1,31 @@
1
+ import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
2
+ import { CrdFormComponent } from '../crd-form/component';
3
+ import { FieldValueChangeEvent, FormDataState, FormErrors, OperandArrayFieldGroup, OperandField } from '../types';
4
+ import { getFieldDisplayName } from '../utils';
5
+ import * as i0 from "@angular/core";
6
+ export declare class BaseOperandFiledArrayComponent implements OnChanges {
7
+ readonly crdForm: CrdFormComponent;
8
+ arrayFieldGroup: OperandArrayFieldGroup;
9
+ formDataState: FormDataState;
10
+ formErrors: FormErrors;
11
+ isArrayTable: boolean;
12
+ readonly: boolean;
13
+ valueChange: EventEmitter<any>;
14
+ itemRemove: EventEmitter<any>;
15
+ private _expanded;
16
+ get expanded(): boolean;
17
+ set expanded(expanded: boolean);
18
+ basicArrayFieldTemplate: OperandField[];
19
+ getFieldDisplayName: typeof getFieldDisplayName;
20
+ constructor(crdForm: CrdFormComponent);
21
+ ngOnChanges({ arrayFieldGroup, formDataState }: SimpleChanges): void;
22
+ fieldValueChange(e: FieldValueChangeEvent): void;
23
+ addItem(): void;
24
+ removeItem(index: number): void;
25
+ private deleteFormData;
26
+ fieldIsRequired(field: OperandField): boolean;
27
+ get columnFields(): OperandField[];
28
+ trackByFn(index: number): number;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseOperandFiledArrayComponent, never>;
30
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseOperandFiledArrayComponent, never, never, { "arrayFieldGroup": { "alias": "arrayFieldGroup"; "required": false; }; "formDataState": { "alias": "formDataState"; "required": false; }; "formErrors": { "alias": "formErrors"; "required": false; }; "isArrayTable": { "alias": "isArrayTable"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; }, { "valueChange": "valueChange"; "itemRemove": "itemRemove"; }, never, never, false, never>;
31
+ }
@@ -0,0 +1,61 @@
1
+ import { LabelPosition } from '@alauda/ui';
2
+ import { OpenAPIV3SchemaObject } from '@alauda-fe/common';
3
+ import { ComponentType } from '@angular/cdk/portal';
4
+ import { EventEmitter, OnChanges, QueryList, SimpleChanges } from '@angular/core';
5
+ import { AbstractControl, NgForm } from '@angular/forms';
6
+ import { Observable } from 'rxjs';
7
+ import { RemoteWidgetsService } from '../remote-widgets';
8
+ import { Descriptor, FieldValueChangeEvent, FormDataState, FormErrors, FormState, OperandArrayFieldGroup, OperandField, OperandFieldGroup } from '../types';
9
+ import { CrdFormCustomDescriptionDirective, getCustomDescription } from '../utils';
10
+ import * as i0 from "@angular/core";
11
+ export declare class CrdFormComponent implements OnChanges {
12
+ private readonly rws;
13
+ openApiSchema: OpenAPIV3SchemaObject;
14
+ descriptors: Descriptor[];
15
+ data: unknown;
16
+ debug: boolean;
17
+ openApiSchemaPath: string | string[];
18
+ readonly: boolean;
19
+ labelWidth: string;
20
+ labelPosition: LabelPosition;
21
+ cluster?: string;
22
+ namespace?: string;
23
+ formContext: any;
24
+ formContext$: Observable<any>;
25
+ keepEmptyPath: boolean;
26
+ effectControlDefaultValue: boolean;
27
+ uiContext?: Record<string, any>;
28
+ formStateChange: EventEmitter<FormState>;
29
+ formSchemaChange: EventEmitter<any>;
30
+ form: NgForm;
31
+ customDescriptions: QueryList<CrdFormCustomDescriptionDirective>;
32
+ widgets: Array<{
33
+ descriptor: string;
34
+ component: ComponentType<any>;
35
+ }>;
36
+ formDataState: FormDataState;
37
+ formErrors: FormErrors;
38
+ fields: OperandField[];
39
+ normalFields: OperandField[];
40
+ fieldGroups: OperandFieldGroup[];
41
+ arrayFieldGroups: OperandArrayFieldGroup[];
42
+ advancedFields: OperandField[];
43
+ private _lastUpdateField;
44
+ controlMap: Map<string, AbstractControl<any, any>>;
45
+ constructor(rws: RemoteWidgetsService);
46
+ remoteModuleDefinition$: Observable<import("../remote-widgets").RemoteWidgetModuleDefinition>;
47
+ ngOnChanges({ openApiSchema, descriptors, data }: SimpleChanges): void;
48
+ getCustomDescription: typeof getCustomDescription;
49
+ private setUpForm;
50
+ dirtyPathsSet: Set<string>;
51
+ fieldValueChange(event: FieldValueChangeEvent): void;
52
+ deleteFormData(path: string): void;
53
+ private updateValidPathValue;
54
+ private updateFormData;
55
+ refreshValidation(): void;
56
+ private resolveExpiredPath;
57
+ private initializeFormDataArrayProperty;
58
+ submit(): void;
59
+ static ɵfac: i0.ɵɵFactoryDeclaration<CrdFormComponent, never>;
60
+ static ɵcmp: i0.ɵɵComponentDeclaration<CrdFormComponent, "acl-crd-form", never, { "openApiSchema": { "alias": "openApiSchema"; "required": false; }; "descriptors": { "alias": "descriptors"; "required": false; }; "data": { "alias": "data"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; "openApiSchemaPath": { "alias": "openApiSchemaPath"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "labelWidth": { "alias": "labelWidth"; "required": false; }; "labelPosition": { "alias": "labelPosition"; "required": false; }; "cluster": { "alias": "cluster"; "required": false; }; "namespace": { "alias": "namespace"; "required": false; }; "formContext": { "alias": "formContext"; "required": false; }; "keepEmptyPath": { "alias": "keepEmptyPath"; "required": false; }; "effectControlDefaultValue": { "alias": "effectControlDefaultValue"; "required": false; }; "uiContext": { "alias": "uiContext"; "required": false; }; "widgets": { "alias": "widgets"; "required": false; }; }, { "formStateChange": "formStateChange"; "formSchemaChange": "formSchemaChange"; }, ["customDescriptions"], never, false, never>;
61
+ }
@@ -0,0 +1,7 @@
1
+ import { OperandField } from '../types';
2
+ export declare function differPathsTag(paths: string[], others: string[]): string[];
3
+ export declare function getAllOtherTagPath(fields: OperandField[], paths: string[]): string[];
4
+ export declare function matchValueAgainstOneOf(field: OperandField, currentValue: any): {
5
+ dirtyPaths: string[];
6
+ validPaths: string[];
7
+ };
@@ -0,0 +1,16 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./crd-form/component";
3
+ import * as i2 from "./spec-descriptors/capability/capability.component";
4
+ import * as i3 from "./spec-descriptors/capability-list/capability-list.component";
5
+ import * as i4 from "./utils/directives";
6
+ import * as i5 from "@alauda/ui";
7
+ import * as i6 from "@alauda/code-editor";
8
+ import * as i7 from "@angular/forms";
9
+ import * as i8 from "@angular/common";
10
+ import * as i9 from "@alauda-fe/common";
11
+ import * as i10 from "./field-controls/module";
12
+ export declare class CrdFormModule {
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<CrdFormModule, never>;
14
+ static ɵmod: i0.ɵɵNgModuleDeclaration<CrdFormModule, [typeof i1.CrdFormComponent, typeof i2.SpecCapabilityComponent, typeof i3.SpecCapabilityListComponent, typeof i4.CrdFormCustomDescriptionDirective], [typeof i5.TooltipModule, typeof i5.ButtonModule, typeof i5.CheckboxModule, typeof i6.CodeEditorModule, typeof i5.DropdownModule, typeof i5.FormModule, typeof i5.IconModule, typeof i5.InputModule, typeof i5.RadioModule, typeof i5.SelectModule, typeof i5.SwitchModule, typeof i6.CodeEditorModule, typeof i7.FormsModule, typeof i7.ReactiveFormsModule, typeof i8.CommonModule, typeof i9.ArrayFormTableModule, typeof i9.ErrorsMapperModule, typeof i9.CoreModule, typeof i9.ValidatorsModule, typeof i9.TranslateModule, typeof i9.WidgetModule, typeof i5.TagModule, typeof i10.FieldControlsModule], [typeof i1.CrdFormComponent, typeof i2.SpecCapabilityComponent, typeof i3.SpecCapabilityListComponent, typeof i4.CrdFormCustomDescriptionDirective, typeof i10.FieldControlsModule]>;
15
+ static ɵinj: i0.ɵɵInjectorDeclaration<CrdFormModule>;
16
+ }
@@ -0,0 +1,6 @@
1
+ import { OperandField } from '../../types';
2
+ import { PropsExpressions } from './props-expression';
3
+ export interface FieldExpression<F extends OperandField = OperandField> {
4
+ expressions: Partial<PropsExpressions>;
5
+ evaluateExpressions?(field: F): void;
6
+ }
@@ -0,0 +1,36 @@
1
+ import { FormDataState, OperandField } from '../../types';
2
+ import { FieldExpression } from './expression-core';
3
+ export declare const EXPRESSION_PROPS_PREFIX = "urn:alm:descriptor:expression:props.";
4
+ export declare const EXPRESSION_PROPS_OPTIONS_PREFIX = "urn:alm:descriptor:expression:props.options:";
5
+ export declare const EXPRESSION_PROPS_DEFAULT_PREFIX = "urn:alm:descriptor:expression:props.default:";
6
+ export declare const EXPRESSION_PROPS_HIDDEN_PREFIX = "urn:alm:descriptor:expression:props.hidden:";
7
+ export declare const EXPRESSION_PROPS_ALLOW_CREATE_PREFIX = "urn:alm:descriptor:expression:props.allowCreate:";
8
+ export interface PropsExpressions {
9
+ /**
10
+ * The form component options, such as select.
11
+ */
12
+ options?: OptionsExpressions;
13
+ /**
14
+ * The form component default value.
15
+ */
16
+ default?: string;
17
+ hidden?: string;
18
+ subscribedContextPaths: string[];
19
+ subscribedFormDataPaths: string[];
20
+ }
21
+ export interface OptionsExpressions {
22
+ api: string;
23
+ labelPath: string;
24
+ valuePath: string;
25
+ expression: string;
26
+ }
27
+ export declare class PropsFieldExpression implements FieldExpression {
28
+ expressions: PropsExpressions;
29
+ constructor(field: OperandField);
30
+ private evaluatePropsExpressions;
31
+ private evaluateOptionsExpression;
32
+ private evaluateCommonPropsExpression;
33
+ private evaluateSubscribedContextPaths;
34
+ private evaluateSubscribedFormDataPaths;
35
+ }
36
+ export declare const compareWithSubscribedPaths: (dynamicExpression: PropsExpressions, prev: [unknown, FormDataState], next: [unknown, FormDataState]) => boolean;
@@ -0,0 +1,11 @@
1
+ import { ChangeDetectorRef } from '@angular/core';
2
+ import { OperandFieldComponent } from './operand-field.component';
3
+ import * as i0 from "@angular/core";
4
+ export declare class FormItemComponent {
5
+ readonly fieldComponent: OperandFieldComponent;
6
+ private readonly cdr;
7
+ plain: boolean;
8
+ constructor(fieldComponent: OperandFieldComponent, cdr: ChangeDetectorRef);
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormItemComponent, never>;
10
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormItemComponent, "acl-crd-form-item", never, { "plain": { "alias": "plain"; "required": false; }; }, {}, never, ["*"], false, never>;
11
+ }
@@ -0,0 +1,7 @@
1
+ export * from './form-item.component';
2
+ export * from './module';
3
+ export * from './operand-advanced-field-group.component';
4
+ export * from './operand-array-field-group.component';
5
+ export * from './operand-field.component';
6
+ export * from './operand-field-group.component';
7
+ export * from './widgets';