@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,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhdWRhLWZlLWNyZC1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9jcmQtZm9ybS9zcmMvYWxhdWRhLWZlLWNyZC1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
@@ -0,0 +1,117 @@
1
+ import { Directive, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { last } from 'lodash-es';
3
+ import { CrdFormComponent } from '../crd-form/component';
4
+ import { Validations, } from '../types';
5
+ import { getFieldDisplayName, getFormData, modifyArrayFieldPathIndex, } from '../utils';
6
+ import { isFolded, repairFieldChildPathByCorrectIndex } from '../utils/helper';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../crd-form/component";
9
+ export class BaseOperandFiledArrayComponent {
10
+ get expanded() {
11
+ return this._expanded ?? !isFolded(this.arrayFieldGroup);
12
+ }
13
+ set expanded(expanded) {
14
+ this._expanded = expanded;
15
+ }
16
+ constructor(crdForm) {
17
+ this.crdForm = crdForm;
18
+ this.readonly = false;
19
+ this.valueChange = new EventEmitter();
20
+ this.itemRemove = new EventEmitter();
21
+ this.getFieldDisplayName = getFieldDisplayName;
22
+ }
23
+ ngOnChanges({ arrayFieldGroup, formDataState }) {
24
+ if (!this.basicArrayFieldTemplate &&
25
+ arrayFieldGroup.currentValue?.fieldLists?.length > 0) {
26
+ this.basicArrayFieldTemplate = last(arrayFieldGroup.currentValue.fieldLists);
27
+ }
28
+ if (formDataState?.currentValue && formDataState?.previousValue) {
29
+ const currValue = getFormData(formDataState.currentValue, this.arrayFieldGroup.path);
30
+ const arrayFieldLength = this.arrayFieldGroup.fieldLists?.length;
31
+ if (currValue?.size > arrayFieldLength) {
32
+ Array.from({ length: currValue.size - arrayFieldLength }).forEach(() => {
33
+ this.addItem();
34
+ });
35
+ }
36
+ }
37
+ }
38
+ fieldValueChange(e) {
39
+ this.valueChange.emit(e);
40
+ }
41
+ addItem() {
42
+ const newFields = this.basicArrayFieldTemplate.map(field => {
43
+ const toPath = modifyArrayFieldPathIndex(field.path, () => this.arrayFieldGroup.fieldLists.length);
44
+ return {
45
+ ...repairFieldChildPathByCorrectIndex(field, field.path, toPath),
46
+ };
47
+ });
48
+ this.arrayFieldGroup.fieldLists = [
49
+ ...this.arrayFieldGroup.fieldLists,
50
+ newFields,
51
+ ];
52
+ }
53
+ removeItem(index) {
54
+ const groupToRemove = this.arrayFieldGroup.fieldLists[index];
55
+ const groupUntouched = this.arrayFieldGroup.fieldLists.filter((_, idx) => idx < index);
56
+ const groupToLeftShift = this.arrayFieldGroup.fieldLists.filter((_, idx) => idx > index);
57
+ const leftShiftedGroups = groupToLeftShift.map(group => group.map(field => {
58
+ const toPath = modifyArrayFieldPathIndex(field.path, idx => idx - 1);
59
+ return {
60
+ ...repairFieldChildPathByCorrectIndex(field, field.path, toPath),
61
+ };
62
+ }));
63
+ this.arrayFieldGroup.fieldLists = [...groupUntouched, ...leftShiftedGroups];
64
+ const [match, formDataPathToRemove] =
65
+ // eslint-disable-next-line regexp/strict
66
+ /^(.*\[\d+]).*$/.exec(groupToRemove?.[0].path) || [];
67
+ if (match) {
68
+ this.itemRemove.next(formDataPathToRemove);
69
+ }
70
+ this.crdForm.controlMap.forEach((_, key) => {
71
+ if (key.startsWith(`${this.arrayFieldGroup.path}[${this.arrayFieldGroup.fieldLists.length}]`)) {
72
+ this.crdForm.controlMap.delete(key);
73
+ }
74
+ });
75
+ this.crdForm.refreshValidation();
76
+ this.deleteFormData(`${this.arrayFieldGroup.path}[${index}]`);
77
+ }
78
+ deleteFormData(path) {
79
+ this.valueChange.next({
80
+ field: {
81
+ ...this.arrayFieldGroup,
82
+ path,
83
+ },
84
+ data: null,
85
+ });
86
+ }
87
+ fieldIsRequired(field) {
88
+ return (field?.required ||
89
+ Object.keys(field?.validations || {})?.includes(Validations.required));
90
+ }
91
+ get columnFields() {
92
+ return this.basicArrayFieldTemplate;
93
+ }
94
+ trackByFn(index) {
95
+ return index;
96
+ }
97
+ static { this.ɵfac = function BaseOperandFiledArrayComponent_Factory(t) { return new (t || BaseOperandFiledArrayComponent)(i0.ɵɵdirectiveInject(i1.CrdFormComponent)); }; }
98
+ static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseOperandFiledArrayComponent, inputs: { arrayFieldGroup: "arrayFieldGroup", formDataState: "formDataState", formErrors: "formErrors", isArrayTable: "isArrayTable", readonly: "readonly" }, outputs: { valueChange: "valueChange", itemRemove: "itemRemove" }, features: [i0.ɵɵNgOnChangesFeature] }); }
99
+ }
100
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseOperandFiledArrayComponent, [{
101
+ type: Directive
102
+ }], () => [{ type: i1.CrdFormComponent }], { arrayFieldGroup: [{
103
+ type: Input
104
+ }], formDataState: [{
105
+ type: Input
106
+ }], formErrors: [{
107
+ type: Input
108
+ }], isArrayTable: [{
109
+ type: Input
110
+ }], readonly: [{
111
+ type: Input
112
+ }], valueChange: [{
113
+ type: Output
114
+ }], itemRemove: [{
115
+ type: Output
116
+ }] }); })();
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hcnJheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3JkLWZvcm0vc3JjL2xpYi9hYnN0cmFjdC9iYXNlLWFycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBTUwsV0FBVyxHQUNaLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLHlCQUF5QixHQUMxQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsUUFBUSxFQUFFLGtDQUFrQyxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUcvRSxNQUFNLE9BQU8sOEJBQThCO0lBWXpDLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLFFBQWlCO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFNRCxZQUE0QixPQUF5QjtRQUF6QixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQW5CNUMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFjMUMsd0JBQW1CLEdBQUcsbUJBQW1CLENBQUM7SUFFYyxDQUFDO0lBRXpELFdBQVcsQ0FBQyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWlCO1FBQzNELElB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QUFLLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzsrRkF2SVUsOEJBQThCO29FQUE5Qiw4QkFBOEI7O2lGQUE5Qiw4QkFBOEI7Y0FEMUMsU0FBUztpREFFQyxlQUFlO2tCQUF2QixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUVJLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxVQUFVO2tCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBsYXN0IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgQ3JkRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2NyZC1mb3JtL2NvbXBvbmVudCc7XG5pbXBvcnQge1xuICBGaWVsZFZhbHVlQ2hhbmdlRXZlbnQsXG4gIEZvcm1EYXRhU3RhdGUsXG4gIEZvcm1FcnJvcnMsXG4gIE9wZXJhbmRBcnJheUZpZWxkR3JvdXAsXG4gIE9wZXJhbmRGaWVsZCxcbiAgVmFsaWRhdGlvbnMsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGdldEZpZWxkRGlzcGxheU5hbWUsXG4gIGdldEZvcm1EYXRhLFxuICBtb2RpZnlBcnJheUZpZWxkUGF0aEluZGV4LFxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBpc0ZvbGRlZCwgcmVwYWlyRmllbGRDaGlsZFBhdGhCeUNvcnJlY3RJbmRleCB9IGZyb20gJy4uL3V0aWxzL2hlbHBlcic7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIEJhc2VPcGVyYW5kRmlsZWRBcnJheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGFycmF5RmllbGRHcm91cDogT3BlcmFuZEFycmF5RmllbGRHcm91cDtcbiAgQElucHV0KCkgZm9ybURhdGFTdGF0ZTogRm9ybURhdGFTdGF0ZTtcbiAgQElucHV0KCkgZm9ybUVycm9yczogRm9ybUVycm9ycztcbiAgQElucHV0KCkgaXNBcnJheVRhYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGl0ZW1SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBfZXhwYW5kZWQ6IGJvb2xlYW47XG5cbiAgZ2V0IGV4cGFuZGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9leHBhbmRlZCA/PyAhaXNGb2xkZWQodGhpcy5hcnJheUZpZWxkR3JvdXApO1xuICB9XG5cbiAgc2V0IGV4cGFuZGVkKGV4cGFuZGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZXhwYW5kZWQgPSBleHBhbmRlZDtcbiAgfVxuXG4gIGJhc2ljQXJyYXlGaWVsZFRlbXBsYXRlOiBPcGVyYW5kRmllbGRbXTtcblxuICBnZXRGaWVsZERpc3BsYXlOYW1lID0gZ2V0RmllbGREaXNwbGF5TmFtZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY3JkRm9ybTogQ3JkRm9ybUNvbXBvbmVudCkge31cblxuICBuZ09uQ2hhbmdlcyh7IGFycmF5RmllbGRHcm91cCwgZm9ybURhdGFTdGF0ZSB9OiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuYmFzaWNBcnJheUZpZWxkVGVtcGxhdGUgJiZcbiAgICAgIGFycmF5RmllbGRHcm91cC5jdXJyZW50VmFsdWU/LmZpZWxkTGlzdHM/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuYmFzaWNBcnJheUZpZWxkVGVtcGxhdGUgPSBsYXN0KFxuICAgICAgICBhcnJheUZpZWxkR3JvdXAuY3VycmVudFZhbHVlLmZpZWxkTGlzdHMsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZm9ybURhdGFTdGF0ZT8uY3VycmVudFZhbHVlICYmIGZvcm1EYXRhU3RhdGU/LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIGNvbnN0IGN1cnJWYWx1ZSA9IGdldEZvcm1EYXRhKFxuICAgICAgICBmb3JtRGF0YVN0YXRlLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgdGhpcy5hcnJheUZpZWxkR3JvdXAucGF0aCxcbiAgICAgICk7XG4gICAgICBjb25zdCBhcnJheUZpZWxkTGVuZ3RoID0gdGhpcy5hcnJheUZpZWxkR3JvdXAuZmllbGRMaXN0cz8ubGVuZ3RoO1xuICAgICAgaWYgKGN1cnJWYWx1ZT8uc2l6ZSA+IGFycmF5RmllbGRMZW5ndGgpIHtcbiAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogY3VyclZhbHVlLnNpemUgLSBhcnJheUZpZWxkTGVuZ3RoIH0pLmZvckVhY2goXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRJdGVtKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaWVsZFZhbHVlQ2hhbmdlKGU6IEZpZWxkVmFsdWVDaGFuZ2VFdmVudCkge1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChlKTtcbiAgfVxuXG4gIGFkZEl0ZW0oKSB7XG4gICAgY29uc3QgbmV3RmllbGRzID0gdGhpcy5iYXNpY0FycmF5RmllbGRUZW1wbGF0ZS5tYXAoZmllbGQgPT4ge1xuICAgICAgY29uc3QgdG9QYXRoID0gbW9kaWZ5QXJyYXlGaWVsZFBhdGhJbmRleChcbiAgICAgICAgZmllbGQucGF0aCxcbiAgICAgICAgKCkgPT4gdGhpcy5hcnJheUZpZWxkR3JvdXAuZmllbGRMaXN0cy5sZW5ndGgsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmVwYWlyRmllbGRDaGlsZFBhdGhCeUNvcnJlY3RJbmRleChmaWVsZCwgZmllbGQucGF0aCwgdG9QYXRoKSxcbiAgICAgIH0gYXMgT3BlcmFuZEZpZWxkO1xuICAgIH0pO1xuICAgIHRoaXMuYXJyYXlGaWVsZEdyb3VwLmZpZWxkTGlzdHMgPSBbXG4gICAgICAuLi50aGlzLmFycmF5RmllbGRHcm91cC5maWVsZExpc3RzLFxuICAgICAgbmV3RmllbGRzLFxuICAgIF07XG4gIH1cblxuICByZW1vdmVJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBncm91cFRvUmVtb3ZlID0gdGhpcy5hcnJheUZpZWxkR3JvdXAuZmllbGRMaXN0c1tpbmRleF07XG4gICAgY29uc3QgZ3JvdXBVbnRvdWNoZWQgPSB0aGlzLmFycmF5RmllbGRHcm91cC5maWVsZExpc3RzLmZpbHRlcihcbiAgICAgIChfLCBpZHgpID0+IGlkeCA8IGluZGV4LFxuICAgICk7XG4gICAgY29uc3QgZ3JvdXBUb0xlZnRTaGlmdCA9IHRoaXMuYXJyYXlGaWVsZEdyb3VwLmZpZWxkTGlzdHMuZmlsdGVyKFxuICAgICAgKF8sIGlkeCkgPT4gaWR4ID4gaW5kZXgsXG4gICAgKTtcblxuICAgIGNvbnN0IGxlZnRTaGlmdGVkR3JvdXBzID0gZ3JvdXBUb0xlZnRTaGlmdC5tYXAoZ3JvdXAgPT5cbiAgICAgIGdyb3VwLm1hcChmaWVsZCA9PiB7XG4gICAgICAgIGNvbnN0IHRvUGF0aCA9IG1vZGlmeUFycmF5RmllbGRQYXRoSW5kZXgoZmllbGQucGF0aCwgaWR4ID0+IGlkeCAtIDEpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlcGFpckZpZWxkQ2hpbGRQYXRoQnlDb3JyZWN0SW5kZXgoZmllbGQsIGZpZWxkLnBhdGgsIHRvUGF0aCksXG4gICAgICAgIH0gYXMgT3BlcmFuZEZpZWxkO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuYXJyYXlGaWVsZEdyb3VwLmZpZWxkTGlzdHMgPSBbLi4uZ3JvdXBVbnRvdWNoZWQsIC4uLmxlZnRTaGlmdGVkR3JvdXBzXTtcblxuICAgIGNvbnN0IFttYXRjaCwgZm9ybURhdGFQYXRoVG9SZW1vdmVdID1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG4gICAgICAvXiguKlxcW1xcZCtdKS4qJC8uZXhlYyhncm91cFRvUmVtb3ZlPy5bMF0ucGF0aCkgfHwgW107XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB0aGlzLml0ZW1SZW1vdmUubmV4dChmb3JtRGF0YVBhdGhUb1JlbW92ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5jcmRGb3JtLmNvbnRyb2xNYXAuZm9yRWFjaCgoXywga2V5KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGtleS5zdGFydHNXaXRoKFxuICAgICAgICAgIGAke3RoaXMuYXJyYXlGaWVsZEdyb3VwLnBhdGh9WyR7dGhpcy5hcnJheUZpZWxkR3JvdXAuZmllbGRMaXN0cy5sZW5ndGh9XWAsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNyZEZvcm0uY29udHJvbE1hcC5kZWxldGUoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNyZEZvcm0ucmVmcmVzaFZhbGlkYXRpb24oKTtcblxuICAgIHRoaXMuZGVsZXRlRm9ybURhdGEoYCR7dGhpcy5hcnJheUZpZWxkR3JvdXAucGF0aH1bJHtpbmRleH1dYCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUZvcm1EYXRhKHBhdGg6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWVDaGFuZ2UubmV4dCh7XG4gICAgICBmaWVsZDoge1xuICAgICAgICAuLi50aGlzLmFycmF5RmllbGRHcm91cCxcbiAgICAgICAgcGF0aCxcbiAgICAgIH0sXG4gICAgICBkYXRhOiBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgZmllbGRJc1JlcXVpcmVkKGZpZWxkOiBPcGVyYW5kRmllbGQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgZmllbGQ/LnJlcXVpcmVkIHx8XG4gICAgICBPYmplY3Qua2V5cyhmaWVsZD8udmFsaWRhdGlvbnMgfHwge30pPy5pbmNsdWRlcyhWYWxpZGF0aW9ucy5yZXF1aXJlZClcbiAgICApO1xuICB9XG5cbiAgZ2V0IGNvbHVtbkZpZWxkcygpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNpY0FycmF5RmllbGRUZW1wbGF0ZTtcbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,334 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { LabelPosition } from '@alauda/ui';
3
+ import { ObservableInput, } from '@alauda-fe/common';
4
+ import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Output, QueryList, ViewChild, } from '@angular/core';
5
+ import { NgForm } from '@angular/forms';
6
+ import { List, Map as $Map, fromJS } from 'immutable';
7
+ import { flattenDeep, fromPairs, isEmpty, uniq } from 'lodash-es';
8
+ import { Observable } from 'rxjs';
9
+ import { RemoteWidgetsService } from '../remote-widgets';
10
+ import { SpecCapability, } from '../types';
11
+ import { CrdFormCustomDescriptionDirective, parseArrayPath, SCHEMA_PATH, createCapabilityField, normalizePath, pathToArray, getCustomDescription, getOperandPath, getPathFromTagPath, getFieldsByPath, fieldShouldReveal, getDefaultValue, } from '../utils';
12
+ import { differPathsTag, getAllOtherTagPath, matchValueAgainstOneOf, } from './helper';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "../remote-widgets";
15
+ const _c0 = ["form"];
16
+ function CrdFormComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {
17
+ const _r1 = i0.ɵɵgetCurrentView();
18
+ i0.ɵɵelementContainerStart(0);
19
+ i0.ɵɵelementStart(1, "acl-operand-field", 4);
20
+ i0.ɵɵpipe(2, "pure");
21
+ i0.ɵɵpipe(3, "async");
22
+ i0.ɵɵlistener("valueChange", function CrdFormComponent_ng_container_2_Template_acl_operand_field_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.fieldValueChange($event)); });
23
+ i0.ɵɵelementEnd();
24
+ i0.ɵɵelementContainerEnd();
25
+ } if (rf & 2) {
26
+ const field_r3 = ctx.$implicit;
27
+ const ctx_r1 = i0.ɵɵnextContext();
28
+ i0.ɵɵadvance();
29
+ i0.ɵɵproperty("fields", ctx_r1.fields)("field", field_r3)("formDataState", ctx_r1.formDataState)("readonly", ctx_r1.readonly)("customDescription", i0.ɵɵpipeBind3(2, 6, ctx_r1.customDescriptions, ctx_r1.getCustomDescription, field_r3))("remoteModuleDefinition", i0.ɵɵpipeBind1(3, 10, ctx_r1.remoteModuleDefinition$));
30
+ } }
31
+ function CrdFormComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {
32
+ const _r4 = i0.ɵɵgetCurrentView();
33
+ i0.ɵɵelementContainerStart(0);
34
+ i0.ɵɵelementStart(1, "acl-operand-field-group", 5);
35
+ i0.ɵɵlistener("valueChange", function CrdFormComponent_ng_container_3_Template_acl_operand_field_group_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.fieldValueChange($event)); });
36
+ i0.ɵɵelementEnd();
37
+ i0.ɵɵelementContainerEnd();
38
+ } if (rf & 2) {
39
+ const group_r5 = ctx.$implicit;
40
+ const ctx_r1 = i0.ɵɵnextContext();
41
+ i0.ɵɵadvance();
42
+ i0.ɵɵproperty("fields", ctx_r1.fields)("fieldGroup", group_r5)("formDataState", ctx_r1.formDataState)("formErrors", ctx_r1.formErrors)("readonly", ctx_r1.readonly)("customDescriptions", ctx_r1.customDescriptions);
43
+ } }
44
+ function CrdFormComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {
45
+ const _r6 = i0.ɵɵgetCurrentView();
46
+ i0.ɵɵelementContainerStart(0);
47
+ i0.ɵɵelementStart(1, "acl-operand-array-field-group", 6);
48
+ i0.ɵɵlistener("valueChange", function CrdFormComponent_ng_container_4_Template_acl_operand_array_field_group_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.fieldValueChange($event)); })("itemRemove", function CrdFormComponent_ng_container_4_Template_acl_operand_array_field_group_itemRemove_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.deleteFormData($event)); });
49
+ i0.ɵɵelementEnd();
50
+ i0.ɵɵelementContainerEnd();
51
+ } if (rf & 2) {
52
+ const group_r7 = ctx.$implicit;
53
+ const ctx_r1 = i0.ɵɵnextContext();
54
+ i0.ɵɵadvance();
55
+ i0.ɵɵproperty("arrayFieldGroup", group_r7)("formDataState", ctx_r1.formDataState)("readonly", ctx_r1.readonly);
56
+ } }
57
+ function CrdFormComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
58
+ const _r8 = i0.ɵɵgetCurrentView();
59
+ i0.ɵɵelementContainerStart(0);
60
+ i0.ɵɵelementStart(1, "acl-operand-advanced-field-group", 7);
61
+ i0.ɵɵlistener("valueChange", function CrdFormComponent_ng_container_5_Template_acl_operand_advanced_field_group_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.fieldValueChange($event)); });
62
+ i0.ɵɵelementEnd();
63
+ i0.ɵɵelementContainerEnd();
64
+ } if (rf & 2) {
65
+ const ctx_r1 = i0.ɵɵnextContext();
66
+ i0.ɵɵadvance();
67
+ i0.ɵɵproperty("fields", ctx_r1.fields)("fieldList", ctx_r1.advancedFields)("formDataState", ctx_r1.formDataState)("readonly", ctx_r1.readonly);
68
+ } }
69
+ export class CrdFormComponent {
70
+ constructor(rws) {
71
+ this.rws = rws;
72
+ this.debug = false;
73
+ this.openApiSchemaPath = SCHEMA_PATH;
74
+ this.readonly = false;
75
+ this.labelPosition = LabelPosition.Right;
76
+ this.formStateChange = new EventEmitter();
77
+ this.formSchemaChange = new EventEmitter();
78
+ this.formErrors = {};
79
+ // 一个全局的 controlMap,方便控制 field 主动校验。
80
+ // 该 controlMap 以及所有 field 里的 control 实例,都是为了数据追踪与错误同步(control.error -> crdForm error),本身不影响提交,由 crd-form 的 error 去阻塞提交。
81
+ this.controlMap = new Map();
82
+ this.remoteModuleDefinition$ = this.rws.remoteModule$;
83
+ this.getCustomDescription = getCustomDescription;
84
+ // 被隐藏起来的表单的路径集合
85
+ this.dirtyPathsSet = new Set();
86
+ }
87
+ ngOnChanges({ openApiSchema, descriptors, data }) {
88
+ if (openApiSchema?.currentValue || descriptors?.currentValue) {
89
+ this.setUpForm();
90
+ }
91
+ else if (data?.currentValue) {
92
+ this.formDataState = fromJS(data.currentValue);
93
+ }
94
+ }
95
+ setUpForm() {
96
+ this.formDataState = fromJS(this.data || {});
97
+ const { normalFields, fieldGroups, arrayFieldGroups, advancedFields, descriptorFields, openApiFields, basicFields, } = createCapabilityField(this.descriptors || [], this.openApiSchema || {}, this.data, this.openApiSchemaPath);
98
+ this.fields = basicFields.filter(fieldShouldReveal);
99
+ if (this.debug) {
100
+ /* eslint-disable no-console */
101
+ console.info('openApiFields:', openApiFields);
102
+ console.info('descriptorFields:', descriptorFields);
103
+ console.info('basicFields:', basicFields);
104
+ console.info('normalFields', normalFields);
105
+ console.info('fieldGroups:', fieldGroups);
106
+ console.info('arrayFieldGroups:', arrayFieldGroups);
107
+ console.info('advancedFields:', advancedFields);
108
+ /* eslint-enable no-console */
109
+ }
110
+ this.normalFields = normalFields;
111
+ this.fieldGroups = fieldGroups;
112
+ this.arrayFieldGroups = arrayFieldGroups;
113
+ this.advancedFields = advancedFields;
114
+ this.formSchemaChange.emit({
115
+ openApiFields,
116
+ descriptorFields,
117
+ });
118
+ }
119
+ fieldValueChange(event) {
120
+ let onceDirtyPathsSet = new Set();
121
+ // TODO: 待review确认后移除该开关
122
+ if (this.formContext?.gates?.includes('onceDirtyPathsSet')) {
123
+ const operandPath = getOperandPath(event.field);
124
+ // 如果表单被隐藏且这次change是因为直接改变了包含该路径的父路径的值(例如编辑yaml)
125
+ // 那就阻止此子路径值的change逻辑
126
+ if (this.dirtyPathsSet.has(operandPath) &&
127
+ this._lastUpdateField?.path &&
128
+ operandPath.startsWith(`${this._lastUpdateField.path}.`)) {
129
+ return;
130
+ }
131
+ }
132
+ else {
133
+ onceDirtyPathsSet = this.dirtyPathsSet;
134
+ }
135
+ const eventData = event.data;
136
+ if (event.field.capabilities.some(c => c.startsWith(SpecCapability.oneOf))) {
137
+ const { dirtyPaths, validPaths } = this.resolveExpiredPath(event.field, eventData);
138
+ dirtyPaths.forEach(path => {
139
+ this.dirtyPathsSet.add(normalizePath(path));
140
+ onceDirtyPathsSet.add(normalizePath(path));
141
+ });
142
+ validPaths.forEach(path => {
143
+ this.updateValidPathValue(path);
144
+ });
145
+ }
146
+ const allOtherPaths = getAllOtherTagPath(this.fields, Array.from(onceDirtyPathsSet));
147
+ const removedPaths = uniq(
148
+ // 同一 path 可能有多个 tag,假设某个 tagged path 有效,则其对应 path 数据不应该删除
149
+ differPathsTag(Array.from(onceDirtyPathsSet), allOtherPaths).map(path => getPathFromTagPath(path))).filter(
150
+ // 只清空叶子结点,以适配 yaml 情况
151
+ path => !this.fields.some(field => {
152
+ const isParentPath = field.path.startsWith(`${path}.`);
153
+ if (isParentPath) {
154
+ // 该 field 亦为 dirty,不以为依据
155
+ return !onceDirtyPathsSet.has(field.path);
156
+ }
157
+ return false;
158
+ }));
159
+ if (eventData == null && !this.keepEmptyPath) {
160
+ if (!onceDirtyPathsSet.has(getOperandPath(event.field))) {
161
+ this.deleteFormData(event.field.path);
162
+ }
163
+ }
164
+ else {
165
+ this.updateFormData(event.field, eventData);
166
+ }
167
+ removedPaths.forEach(path => {
168
+ this.deleteFormData(path);
169
+ });
170
+ this.refreshValidation();
171
+ this.formStateChange.emit({
172
+ data: this.formDataState.toJS(),
173
+ errors: this.formErrors,
174
+ });
175
+ }
176
+ deleteFormData(path) {
177
+ this.formDataState = this.formDataState.deleteIn(pathToArray(path));
178
+ this.controlMap.get(path)?.setValue(null);
179
+ this.formStateChange.emit({
180
+ data: this.formDataState.toJS(),
181
+ errors: this.formErrors,
182
+ });
183
+ }
184
+ updateValidPathValue(path) {
185
+ // 如果有效路径是上一次的无效路径,则意味着该路径的值在上次被重置了,所以当该路径又需要显示给用户时应该使用默认值
186
+ const useDefault = this.dirtyPathsSet.has(normalizePath(path));
187
+ this.dirtyPathsSet.delete(normalizePath(path));
188
+ // 如果对一组表单都有依赖,那路径可能是这组表单的父路径,所以需要把所有子孙都找出来
189
+ const fields = getFieldsByPath(path, [
190
+ ...this.normalFields,
191
+ ...flattenDeep(this.fieldGroups.map(group => group.fieldList)),
192
+ ...flattenDeep(this.arrayFieldGroups.map(arrayGroup => arrayGroup.fieldLists)),
193
+ ...this.advancedFields,
194
+ ]);
195
+ fields.forEach(field => {
196
+ // 理论上 oneof 只影响视图,但实际还会影响 formDataState,所以需要同步更新 formDataState
197
+ let value = this.controlMap.get(getOperandPath(field)).value;
198
+ if (!value && useDefault) {
199
+ value = getDefaultValue(field);
200
+ }
201
+ this.updateFormData(field, value);
202
+ });
203
+ }
204
+ updateFormData(field, data) {
205
+ if (!field)
206
+ return;
207
+ const { match, index, pathBeforeIndex, pathAfterIndex } = parseArrayPath(field.path);
208
+ if (match && index === 0) {
209
+ this.formDataState = this.initializeFormDataArrayProperty(this.formDataState, pathBeforeIndex, pathAfterIndex, data);
210
+ }
211
+ this.formDataState = this.formDataState.setIn(pathToArray(field.path), data);
212
+ this._lastUpdateField = field;
213
+ }
214
+ refreshValidation() {
215
+ const errors = Array.from(this.controlMap).reduce((acc, [pathWithTag, control]) => {
216
+ if (this.dirtyPathsSet.has(pathWithTag)) {
217
+ return acc;
218
+ }
219
+ const path = getPathFromTagPath(pathWithTag);
220
+ acc[path] = isEmpty(control.errors) ? null : control.errors;
221
+ return acc;
222
+ }, {});
223
+ const result = fromPairs(Object.entries(errors ?? {}).filter(([_k, v]) => !!v));
224
+ this.formErrors = isEmpty(result) ? null : result;
225
+ }
226
+ // 当某个 field 发生数据变化,返回其相关 oneOf path 是否应该移除
227
+ // 仅当当前 field 中 oneOf 条件与当前数据不匹配,
228
+ resolveExpiredPath(field, currentValue) {
229
+ const { dirtyPaths, validPaths } = matchValueAgainstOneOf(field, currentValue);
230
+ const otherFieldStatus = this.fields
231
+ .filter(i => getOperandPath(i) !== getOperandPath(field))
232
+ .map(field => ({
233
+ path: getOperandPath(field),
234
+ result: matchValueAgainstOneOf(field, this.controlMap.get(getOperandPath(field))?.value),
235
+ }));
236
+ const newDirtyPaths = validPaths.filter(path => {
237
+ // 当前 valid path 在其他 field 中为 dirty,若该 field 本身也为 dirty 则忽略该影响,仍然判定为 valid,否则(该 field 有效)认定为 dirty
238
+ const fieldCandidates = otherFieldStatus.filter(status => status.result.dirtyPaths.includes(path));
239
+ return fieldCandidates.some(({ path }) => !otherFieldStatus.some(status => status.result.dirtyPaths.includes(path)));
240
+ });
241
+ return {
242
+ dirtyPaths: [...dirtyPaths, ...newDirtyPaths],
243
+ validPaths: validPaths.filter(path => !newDirtyPaths.includes(path)),
244
+ };
245
+ }
246
+ initializeFormDataArrayProperty(state, pathBeforeIndex, pathAfterIndex, value) {
247
+ if (state.getIn([...pathToArray(pathBeforeIndex), 0])) {
248
+ return state;
249
+ }
250
+ const item = $Map({}).setIn(pathToArray(pathAfterIndex), value);
251
+ const list = List([item]);
252
+ return state.setIn(pathToArray(pathBeforeIndex), list);
253
+ }
254
+ submit() {
255
+ this.refreshValidation();
256
+ this.form.onSubmit(null);
257
+ }
258
+ static { this.ɵfac = function CrdFormComponent_Factory(t) { return new (t || CrdFormComponent)(i0.ɵɵdirectiveInject(i1.RemoteWidgetsService)); }; }
259
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CrdFormComponent, selectors: [["acl-crd-form"]], contentQueries: function CrdFormComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
260
+ i0.ɵɵcontentQuery(dirIndex, CrdFormCustomDescriptionDirective, 4);
261
+ } if (rf & 2) {
262
+ let _t;
263
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.customDescriptions = _t);
264
+ } }, viewQuery: function CrdFormComponent_Query(rf, ctx) { if (rf & 1) {
265
+ i0.ɵɵviewQuery(_c0, 7);
266
+ } if (rf & 2) {
267
+ let _t;
268
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.form = _t.first);
269
+ } }, inputs: { openApiSchema: "openApiSchema", descriptors: "descriptors", data: "data", debug: "debug", openApiSchemaPath: "openApiSchemaPath", readonly: "readonly", labelWidth: "labelWidth", labelPosition: "labelPosition", cluster: "cluster", namespace: "namespace", formContext: "formContext", keepEmptyPath: "keepEmptyPath", effectControlDefaultValue: "effectControlDefaultValue", uiContext: "uiContext", widgets: "widgets" }, outputs: { formStateChange: "formStateChange", formSchemaChange: "formSchemaChange" }, features: [i0.ɵɵNgOnChangesFeature], decls: 6, vars: 7, consts: [["form", "ngForm"], ["auiForm", "", 3, "aclScrollToFirstInvalid", "auiFormLabelPosition", "auiFormLabelWidth"], [4, "ngFor", "ngForOf"], [4, "ngIf"], [3, "valueChange", "fields", "field", "formDataState", "readonly", "customDescription", "remoteModuleDefinition"], [3, "valueChange", "fields", "fieldGroup", "formDataState", "formErrors", "readonly", "customDescriptions"], [3, "valueChange", "itemRemove", "arrayFieldGroup", "formDataState", "readonly"], [3, "valueChange", "fields", "fieldList", "formDataState", "readonly"]], template: function CrdFormComponent_Template(rf, ctx) { if (rf & 1) {
270
+ i0.ɵɵelementStart(0, "form", 1, 0);
271
+ i0.ɵɵtemplate(2, CrdFormComponent_ng_container_2_Template, 4, 12, "ng-container", 2)(3, CrdFormComponent_ng_container_3_Template, 2, 6, "ng-container", 2)(4, CrdFormComponent_ng_container_4_Template, 2, 3, "ng-container", 2)(5, CrdFormComponent_ng_container_5_Template, 2, 4, "ng-container", 3);
272
+ i0.ɵɵelementEnd();
273
+ } if (rf & 2) {
274
+ i0.ɵɵproperty("aclScrollToFirstInvalid", !!ctx.formErrors)("auiFormLabelPosition", ctx.labelPosition)("auiFormLabelWidth", ctx.labelWidth);
275
+ i0.ɵɵadvance(2);
276
+ i0.ɵɵproperty("ngForOf", ctx.normalFields);
277
+ i0.ɵɵadvance();
278
+ i0.ɵɵproperty("ngForOf", ctx.fieldGroups);
279
+ i0.ɵɵadvance();
280
+ i0.ɵɵproperty("ngForOf", ctx.arrayFieldGroups);
281
+ i0.ɵɵadvance();
282
+ i0.ɵɵproperty("ngIf", ctx.advancedFields == null ? null : ctx.advancedFields.length);
283
+ } }, styles: ["[_nghost-%COMP%]{width:100%}"], changeDetection: 0 }); }
284
+ }
285
+ __decorate([
286
+ ObservableInput(),
287
+ __metadata("design:type", Observable)
288
+ ], CrdFormComponent.prototype, "formContext$", void 0);
289
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CrdFormComponent, [{
290
+ type: Component,
291
+ args: [{ selector: 'acl-crd-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n auiForm\n [aclScrollToFirstInvalid]=\"!!formErrors\"\n #form=\"ngForm\"\n [auiFormLabelPosition]=\"labelPosition\"\n [auiFormLabelWidth]=\"labelWidth\"\n>\n <!-- normal fields -->\n <ng-container *ngFor=\"let field of normalFields\">\n <acl-operand-field\n [fields]=\"fields\"\n [field]=\"field\"\n [formDataState]=\"formDataState\"\n [readonly]=\"readonly\"\n [customDescription]=\"\n customDescriptions | pure: getCustomDescription:field\n \"\n (valueChange)=\"fieldValueChange($event)\"\n [remoteModuleDefinition]=\"remoteModuleDefinition$ | async\"\n >\n </acl-operand-field>\n </ng-container>\n\n <!-- field groups \u517C\u5BB9\uFF0C\u9700\u8981\u4FDD\u7559-->\n <ng-container *ngFor=\"let group of fieldGroups\">\n <acl-operand-field-group\n [fields]=\"fields\"\n [fieldGroup]=\"group\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n [customDescriptions]=\"customDescriptions\"\n >\n </acl-operand-field-group>\n </ng-container>\n\n <!-- array field groups \u517C\u5BB9\uFF0C\u9700\u8981\u4FDD\u7559 -->\n <ng-container *ngFor=\"let group of arrayFieldGroups\">\n <acl-operand-array-field-group\n [arrayFieldGroup]=\"group\"\n [formDataState]=\"formDataState\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n (itemRemove)=\"deleteFormData($event)\"\n >\n </acl-operand-array-field-group>\n </ng-container>\n\n <!-- advanced fields -->\n <ng-container *ngIf=\"advancedFields?.length\">\n <acl-operand-advanced-field-group\n [fields]=\"fields\"\n [fieldList]=\"advancedFields\"\n [formDataState]=\"formDataState\"\n [readonly]=\"readonly\"\n (valueChange)=\"fieldValueChange($event)\"\n ></acl-operand-advanced-field-group>\n </ng-container>\n</form>\n", styles: [":host{width:100%}\n"] }]
292
+ }], () => [{ type: i1.RemoteWidgetsService }], { openApiSchema: [{
293
+ type: Input
294
+ }], descriptors: [{
295
+ type: Input
296
+ }], data: [{
297
+ type: Input
298
+ }], debug: [{
299
+ type: Input
300
+ }], openApiSchemaPath: [{
301
+ type: Input
302
+ }], readonly: [{
303
+ type: Input
304
+ }], labelWidth: [{
305
+ type: Input
306
+ }], labelPosition: [{
307
+ type: Input
308
+ }], cluster: [{
309
+ type: Input
310
+ }], namespace: [{
311
+ type: Input
312
+ }], formContext: [{
313
+ type: Input
314
+ }], formContext$: [], keepEmptyPath: [{
315
+ type: Input
316
+ }], effectControlDefaultValue: [{
317
+ type: Input
318
+ }], uiContext: [{
319
+ type: Input
320
+ }], formStateChange: [{
321
+ type: Output
322
+ }], formSchemaChange: [{
323
+ type: Output
324
+ }], form: [{
325
+ type: ViewChild,
326
+ args: ['form', { static: true }]
327
+ }], customDescriptions: [{
328
+ type: ContentChildren,
329
+ args: [CrdFormCustomDescriptionDirective]
330
+ }], widgets: [{
331
+ type: Input
332
+ }] }); })();
333
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CrdFormComponent, { className: "CrdFormComponent", filePath: "lib/crd-form/component.ts", lineNumber: 64 }); })();
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcmQtZm9ybS9zcmMvbGliL2NyZC1mb3JtL2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3JkLWZvcm0vc3JjL2xpYi9jcmQtZm9ybS90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFFTCxlQUFlLEdBRWhCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFFVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RCxPQUFPLEVBU0wsY0FBYyxHQUNmLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDTCxpQ0FBaUMsRUFDakMsY0FBYyxFQUNkLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsYUFBYSxFQUNiLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGVBQWUsR0FDaEIsTUFBTSxVQUFVLENBQUM7QUFFbEIs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QXpCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csVUFBVTtrQkFBbEIsS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUFFRyxPQUFPO2tCQUFmLEtBQUs7WUFDRyxTQUFTO2tCQUFqQixLQUFLO1lBRUcsV0FBVztrQkFBbkIsS0FBSztZQUNhLFlBQVksTUFFdEIsYUFBYTtrQkFBckIsS0FBSztZQUVHLHlCQUF5QjtrQkFBakMsS0FBSztZQUVHLFNBQVM7a0JBQWpCLEtBQUs7WUFFSSxlQUFlO2tCQUF4QixNQUFNO1lBRUcsZ0JBQWdCO2tCQUF6QixNQUFNO1lBR1AsSUFBSTtrQkFESCxTQUFTO21CQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFJbkMsa0JBQWtCO2tCQURqQixlQUFlO21CQUFDLGlDQUFpQztZQUlsRCxPQUFPO2tCQUROLEtBQUs7O2tGQWhDSyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYWJlbFBvc2l0aW9uIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQge1xuICBEaWN0aW9uYXJ5LFxuICBPYnNlcnZhYmxlSW5wdXQsXG4gIE9wZW5BUElWM1NjaGVtYU9iamVjdCxcbn0gZnJvbSAnQGFsYXVkYS1mZS9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBMaXN0LCBNYXAgYXMgJE1hcCwgZnJvbUpTIH0gZnJvbSAnaW1tdXRhYmxlJztcbmltcG9ydCB7IGZsYXR0ZW5EZWVwLCBmcm9tUGFpcnMsIGlzRW1wdHksIHVuaXEgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSZW1vdGVXaWRnZXRzU2VydmljZSB9IGZyb20gJy4uL3JlbW90ZS13aWRnZXRzJztcbmltcG9ydCB7XG4gIERlc2NyaXB0b3IsXG4gIEZpZWxkVmFsdWVDaGFuZ2VFdmVudCxcbiAgRm9ybURhdGFTdGF0ZSxcbiAgRm9ybUVycm9ycyxcbiAgRm9ybVN0YXRlLFxuICBPcGVyYW5kQXJyYXlGaWVsZEdyb3VwLFxuICBPcGVyYW5kRmllbGQsXG4gIE9wZXJhbmRGaWVsZEdyb3VwLFxuICBTcGVjQ2FwYWJpbGl0eSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgQ3JkRm9ybUN1c3RvbURlc2NyaXB0aW9uRGlyZWN0aXZlLFxuICBwYXJzZUFycmF5UGF0aCxcbiAgU0NIRU1BX1BBVEgsXG4gIGNyZWF0ZUNhcGFiaWxpdHlGaWVsZCxcbiAgbm9ybWFsaXplUGF0aCxcbiAgcGF0aFRvQXJyYXksXG4gIGdldEN1c3RvbURlc2NyaXB0aW9uLFxuICBnZXRPcGVyYW5kUGF0aCxcbiAgZ2V0UGF0aEZyb21UYWdQYXRoLFxuICBnZXRGaWVsZHNCeVBhdGgsXG4gIGZpZWxkU2hvdWxkUmV2ZWFsLFxuICBnZXREZWZhdWx0VmFsdWUsXG59IGZyb20gJy4uL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgZGlmZmVyUGF0aHNUYWcsXG4gIGdldEFsbE90aGVyVGFnUGF0aCxcbiAgbWF0Y2hWYWx1ZUFnYWluc3RPbmVPZixcbn0gZnJvbSAnLi9oZWxwZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtY3JkLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJ3RlbXBsYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc3R5bGVzLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENyZEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBvcGVuQXBpU2NoZW1hOiBPcGVuQVBJVjNTY2hlbWFPYmplY3Q7XG4gIEBJbnB1dCgpIGRlc2NyaXB0b3JzOiBEZXNjcmlwdG9yW107XG4gIEBJbnB1dCgpIGRhdGE6IHVua25vd247XG4gIEBJbnB1dCgpIGRlYnVnID0gZmFsc2U7XG4gIEBJbnB1dCgpIG9wZW5BcGlTY2hlbWFQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSA9IFNDSEVNQV9QQVRIO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBsYWJlbFdpZHRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsUG9zaXRpb246IExhYmVsUG9zaXRpb24gPSBMYWJlbFBvc2l0aW9uLlJpZ2h0O1xuXG4gIEBJbnB1dCgpIGNsdXN0ZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5hbWVzcGFjZT86IHN0cmluZztcblxuICBASW5wdXQoKSBmb3JtQ29udGV4dDogYW55O1xuICBAT2JzZXJ2YWJsZUlucHV0KCkgZm9ybUNvbnRleHQkOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgQElucHV0KCkga2VlcEVtcHR5UGF0aDogYm9vbGVhbjtcblxuICBASW5wdXQoKSBlZmZlY3RDb250cm9sRGVmYXVsdFZhbHVlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHVpQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgQE91dHB1dCgpIGZvcm1TdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybVN0YXRlPigpO1xuXG4gIEBPdXRwdXQoKSBmb3JtU2NoZW1hQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZm9ybScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGZvcm06IE5nRm9ybTtcblxuICBAQ29udGVudENoaWxkcmVuKENyZEZvcm1DdXN0b21EZXNjcmlwdGlvbkRpcmVjdGl2ZSlcbiAgY3VzdG9tRGVzY3JpcHRpb25zOiBRdWVyeUxpc3Q8Q3JkRm9ybUN1c3RvbURlc2NyaXB0aW9uRGlyZWN0aXZlPjtcblxuICBASW5wdXQoKVxuICB3aWRnZXRzOiBBcnJheTx7XG4gICAgZGVzY3JpcHRvcjogc3RyaW5nO1xuICAgIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxhbnk+O1xuICB9PjtcblxuICBmb3JtRGF0YVN0YXRlOiBGb3JtRGF0YVN0YXRlO1xuICBmb3JtRXJyb3JzOiBGb3JtRXJyb3JzID0ge307XG5cbiAgZmllbGRzOiBPcGVyYW5kRmllbGRbXTtcbiAgbm9ybWFsRmllbGRzOiBPcGVyYW5kRmllbGRbXTtcbiAgZmllbGRHcm91cHM6IE9wZXJhbmRGaWVsZEdyb3VwW107XG4gIGFycmF5RmllbGRHcm91cHM6IE9wZXJhbmRBcnJheUZpZWxkR3JvdXBbXTtcbiAgYWR2YW5jZWRGaWVsZHM6IE9wZXJhbmRGaWVsZFtdO1xuICBwcml2YXRlIF9sYXN0VXBkYXRlRmllbGQ6IE9wZXJhbmRGaWVsZDtcblxuICAvLyDkuIDkuKrlhajlsYDnmoQgY29udHJvbE1hcO+8jOaWueS+v+aOp+WItiBmaWVsZCDkuLvliqjmoKHpqozjgIJcbiAgLy8g6K+lIGNvbnRyb2xNYXAg5Lul5Y+K5omA5pyJIGZpZWxkIOmHjOeahCBjb250cm9sIOWunuS+i++8jOmDveaYr+S4uuS6huaVsOaNrui/vei4quS4jumUmeivr+WQjOatpe+8iGNvbnRyb2wuZXJyb3IgLT4gY3JkRm9ybSBlcnJvcu+8ie+8jOacrOi6q+S4jeW9seWTjeaPkOS6pO+8jOeUsSBjcmQtZm9ybSDnmoQgZXJyb3Ig5Y676Zi75aGe5o+Q5Lqk44CCXG4gIGNvbnRyb2xNYXAgPSBuZXcgTWFwPHN0cmluZywgQWJzdHJhY3RDb250cm9sPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcndzOiBSZW1vdGVXaWRnZXRzU2VydmljZSkge31cblxuICByZW1vdGVNb2R1bGVEZWZpbml0aW9uJCA9IHRoaXMucndzLnJlbW90ZU1vZHVsZSQ7XG5cbiAgbmdPbkNoYW5nZXMoeyBvcGVuQXBpU2NoZW1hLCBkZXNjcmlwdG9ycywgZGF0YSB9OiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKG9wZW5BcGlTY2hlbWE/LmN1cnJlbnRWYWx1ZSB8fCBkZXNjcmlwdG9ycz8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnNldFVwRm9ybSgpO1xuICAgIH0gZWxzZSBpZiAoZGF0YT8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhU3RhdGUgPSBmcm9tSlMoZGF0YS5jdXJyZW50VmFsdWUpIGFzIEZvcm1EYXRhU3RhdGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VzdG9tRGVzY3JpcHRpb24gPSBnZXRDdXN0b21EZXNjcmlwdGlvbjtcblxuICBwcml2YXRlIHNldFVwRm9ybSgpIHtcbiAgICB0aGlzLmZvcm1EYXRhU3RhdGUgPSBmcm9tSlModGhpcy5kYXRhIHx8IHt9KSBhcyBGb3JtRGF0YVN0YXRlO1xuXG4gICAgY29uc3Qge1xuICAgICAgbm9ybWFsRmllbGRzLFxuICAgICAgZmllbGRHcm91cHMsXG4gICAgICBhcnJheUZpZWxkR3JvdXBzLFxuICAgICAgYWR2YW5jZWRGaWVsZHMsXG4gICAgICBkZXNjcmlwdG9yRmllbGRzLFxuICAgICAgb3BlbkFwaUZpZWxkcyxcbiAgICAgIGJhc2ljRmllbGRzLFxuICAgIH0gPSBjcmVhdGVDYXBhYmlsaXR5RmllbGQoXG4gICAgICB0aGlzLmRlc2NyaXB0b3JzIHx8IFtdLFxuICAgICAgdGhpcy5vcGVuQXBpU2NoZW1hIHx8ICh7fSBhcyBPcGVuQVBJVjNTY2hlbWFPYmplY3QpLFxuICAgICAgdGhpcy5kYXRhLFxuICAgICAgdGhpcy5vcGVuQXBpU2NoZW1hUGF0aCxcbiAgICApO1xuXG4gICAgdGhpcy5maWVsZHMgPSBiYXNpY0ZpZWxkcy5maWx0ZXIoZmllbGRTaG91bGRSZXZlYWwpO1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSAgbm8tY29uc29sZSAqL1xuICAgICAgY29uc29sZS5pbmZvKCdvcGVuQXBpRmllbGRzOicsIG9wZW5BcGlGaWVsZHMpO1xuICAgICAgY29uc29sZS5pbmZvKCdkZXNjcmlwdG9yRmllbGRzOicsIGRlc2NyaXB0b3JGaWVsZHMpO1xuICAgICAgY29uc29sZS5pbmZvKCdiYXNpY0ZpZWxkczonLCBiYXNpY0ZpZWxkcyk7XG5cbiAgICAgIGNvbnNvbGUuaW5mbygnbm9ybWFsRmllbGRzJywgbm9ybWFsRmllbGRzKTtcblxuICAgICAgY29uc29sZS5pbmZvKCdmaWVsZEdyb3VwczonLCBmaWVsZEdyb3Vwcyk7XG4gICAgICBjb25zb2xlLmluZm8oJ2FycmF5RmllbGRHcm91cHM6JywgYXJyYXlGaWVsZEdyb3Vwcyk7XG4gICAgICBjb25zb2xlLmluZm8oJ2FkdmFuY2VkRmllbGRzOicsIGFkdmFuY2VkRmllbGRzKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuICAgIH1cblxuICAgIHRoaXMubm9ybWFsRmllbGRzID0gbm9ybWFsRmllbGRzO1xuICAgIHRoaXMuZmllbGRHcm91cHMgPSBmaWVsZEdyb3VwcztcbiAgICB0aGlzLmFycmF5RmllbGRHcm91cHMgPSBhcnJheUZpZWxkR3JvdXBzO1xuICAgIHRoaXMuYWR2YW5jZWRGaWVsZHMgPSBhZHZhbmNlZEZpZWxkcztcblxuICAgIHRoaXMuZm9ybVNjaGVtYUNoYW5nZS5lbWl0KHtcbiAgICAgIG9wZW5BcGlGaWVsZHMsXG4gICAgICBkZXNjcmlwdG9yRmllbGRzLFxuICAgIH0pO1xuICB9XG5cbiAgLy8g6KKr6ZqQ6JeP6LW35p2l55qE6KGo5Y2V55qE6Lev5b6E6ZuG5ZCIXG4gIGRpcnR5UGF0aHNTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmaWVsZFZhbHVlQ2hhbmdlKGV2ZW50OiBGaWVsZFZhbHVlQ2hhbmdlRXZlbnQpIHtcbiAgICBsZXQgb25jZURpcnR5UGF0aHNTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIFRPRE86IOW+hXJldmlld+ehruiupOWQjuenu+mZpOivpeW8gOWFs1xuICAgIGlmICgodGhpcy5mb3JtQ29udGV4dD8uZ2F0ZXMgYXMgc3RyaW5nW10pPy5pbmNsdWRlcygnb25jZURpcnR5UGF0aHNTZXQnKSkge1xuICAgICAgY29uc3Qgb3BlcmFuZFBhdGggPSBnZXRPcGVyYW5kUGF0aChldmVudC5maWVsZCk7XG4gICAgICAvLyDlpoLmnpzooajljZXooqvpmpDol4/kuJTov5nmrKFjaGFuZ2XmmK/lm6DkuLrnm7TmjqXmlLnlj5jkuobljIXlkKvor6Xot6/lvoTnmoTniLbot6/lvoTnmoTlgLzvvIjkvovlpoLnvJbovpF5YW1s77yJXG4gICAgICAvLyDpgqPlsLHpmLvmraLmraTlrZDot6/lvoTlgLznmoRjaGFuZ2XpgLvovpFcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kaXJ0eVBhdGhzU2V0LmhhcyhvcGVyYW5kUGF0aCkgJiZcbiAgICAgICAgdGhpcy5fbGFzdFVwZGF0ZUZpZWxkPy5wYXRoICYmXG4gICAgICAgIG9wZXJhbmRQYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy5fbGFzdFVwZGF0ZUZpZWxkLnBhdGh9LmApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbmNlRGlydHlQYXRoc1NldCA9IHRoaXMuZGlydHlQYXRoc1NldDtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudERhdGEgPSBldmVudC5kYXRhO1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmZpZWxkLmNhcGFiaWxpdGllcy5zb21lKGMgPT4gYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5Lm9uZU9mKSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgZGlydHlQYXRocywgdmFsaWRQYXRocyB9ID0gdGhpcy5yZXNvbHZlRXhwaXJlZFBhdGgoXG4gICAgICAgIGV2ZW50LmZpZWxkLFxuICAgICAgICBldmVudERhdGEsXG4gICAgICApO1xuXG4gICAgICBkaXJ0eVBhdGhzLmZvckVhY2gocGF0aCA9PiB7XG4gICAgICAgIHRoaXMuZGlydHlQYXRoc1NldC5hZGQobm9ybWFsaXplUGF0aChwYXRoKSk7XG4gICAgICAgIG9uY2VEaXJ0eVBhdGhzU2V0LmFkZChub3JtYWxpemVQYXRoKHBhdGgpKTtcbiAgICAgIH0pO1xuXG4gICAgICB2YWxpZFBhdGhzLmZvckVhY2gocGF0aCA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsaWRQYXRoVmFsdWUocGF0aCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgYWxsT3RoZXJQYXRocyA9IGdldEFsbE90aGVyVGFnUGF0aChcbiAgICAgIHRoaXMuZmllbGRzLFxuICAgICAgQXJyYXkuZnJvbShvbmNlRGlydHlQYXRoc1NldCksXG4gICAgKTtcbiAgICBjb25zdCByZW1vdmVkUGF0aHMgPSB1bmlxKFxuICAgICAgLy8g5ZCM5LiAIHBhdGgg5Y+v6IO95pyJ5aSa5LiqIHRhZ++8jOWBh+iuvuafkOS4qiB0YWdnZWQgcGF0aCDmnInmlYjvvIzliJnlhbblr7nlupQgcGF0aCDmlbDmja7kuI3lupTor6XliKDpmaRcbiAgICAgIGRpZmZlclBhdGhzVGFnKEFycmF5LmZyb20ob25jZURpcnR5UGF0aHNTZXQpLCBhbGxPdGhlclBhdGhzKS5tYXAocGF0aCA9PlxuICAgICAgICBnZXRQYXRoRnJvbVRhZ1BhdGgocGF0aCksXG4gICAgICApLFxuICAgICkuZmlsdGVyKFxuICAgICAgLy8g5Y+q5riF56m65Y+25a2Q57uT54K577yM5Lul6YCC6YWNIHlhbWwg5oOF5Ya1XG4gICAgICBwYXRoID0+XG4gICAgICAgICF0aGlzLmZpZWxkcy5zb21lKGZpZWxkID0+IHtcbiAgICAgICAgICBjb25zdCBpc1BhcmVudFBhdGggPSBmaWVsZC5wYXRoLnN0YXJ0c1dpdGgoYCR7cGF0aH0uYCk7XG4gICAgICAgICAgaWYgKGlzUGFyZW50UGF0aCkge1xuICAgICAgICAgICAgLy8g6K+lIGZpZWxkIOS6puS4uiBkaXJ0ee+8jOS4jeS7peS4uuS+neaNrlxuICAgICAgICAgICAgcmV0dXJuICFvbmNlRGlydHlQYXRoc1NldC5oYXMoZmllbGQucGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSksXG4gICAgKTtcbiAgICBpZiAoZXZlbnREYXRhID09IG51bGwgJiYgIXRoaXMua2VlcEVtcHR5UGF0aCkge1xuICAgICAgaWYgKCFvbmNlRGlydHlQYXRoc1NldC5oYXMoZ2V0T3BlcmFuZFBhdGgoZXZlbnQuZmllbGQpKSkge1xuICAgICAgICB0aGlzLmRlbGV0ZUZvcm1EYXRhKGV2ZW50LmZpZWxkLnBhdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1EYXRhKGV2ZW50LmZpZWxkLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIHJlbW92ZWRQYXRocy5mb3JFYWNoKHBhdGggPT4ge1xuICAgICAgdGhpcy5kZWxldGVGb3JtRGF0YShwYXRoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZnJlc2hWYWxpZGF0aW9uKCk7XG4gICAgdGhpcy5mb3JtU3RhdGVDaGFuZ2UuZW1pdCh7XG4gICAgICBkYXRhOiB0aGlzLmZvcm1EYXRhU3RhdGUudG9KUygpLFxuICAgICAgZXJyb3JzOiB0aGlzLmZvcm1FcnJvcnMsXG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVGb3JtRGF0YShwYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZvcm1EYXRhU3RhdGUgPSB0aGlzLmZvcm1EYXRhU3RhdGUuZGVsZXRlSW4ocGF0aFRvQXJyYXkocGF0aCkpO1xuICAgIHRoaXMuY29udHJvbE1hcC5nZXQocGF0aCk/LnNldFZhbHVlKG51bGwpO1xuXG4gICAgdGhpcy5mb3JtU3RhdGVDaGFuZ2UuZW1pdCh7XG4gICAgICBkYXRhOiB0aGlzLmZvcm1EYXRhU3RhdGUudG9KUygpLFxuICAgICAgZXJyb3JzOiB0aGlzLmZvcm1FcnJvcnMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbGlkUGF0aFZhbHVlKHBhdGg6IHN0cmluZykge1xuICAgIC8vIOWmguaenOacieaViOi3r+W+hOaYr+S4iuS4gOasoeeahOaXoOaViOi3r+W+hO+8jOWImeaEj+WRs+edgOivpei3r+W+hOeahOWAvOWcqOS4iuasoeiiq+mHjee9ruS6hu+8jOaJgOS7peW9k+ivpei3r+W+hOWPiOmcgOimgeaYvuekuue7meeUqOaIt+aXtuW6lOivpeS9v+eUqOm7mOiupOWAvFxuICAgIGNvbnN0IHVzZURlZmF1bHQgPSB0aGlzLmRpcnR5UGF0aHNTZXQuaGFzKG5vcm1hbGl6ZVBhdGgocGF0aCkpO1xuICAgIHRoaXMuZGlydHlQYXRoc1NldC5kZWxldGUobm9ybWFsaXplUGF0aChwYXRoKSk7XG4gICAgLy8g5aaC5p6c5a+55LiA57uE6KGo5Y2V6YO95pyJ5L6d6LWW77yM6YKj6Lev5b6E5Y+v6IO95piv6L+Z57uE6KGo5Y2V55qE54i26Lev5b6E77yM5omA5Lul6ZyA6KaB5oqK5omA5pyJ5a2Q5a2Z6YO95om+5Ye65p2lXG4gICAgY29uc3QgZmllbGRzID0gZ2V0RmllbGRzQnlQYXRoKHBhdGgsIFtcbiAgICAgIC4uLnRoaXMubm9ybWFsRmllbGRzLFxuICAgICAgLi4uZmxhdHRlbkRlZXAodGhpcy5maWVsZEdyb3Vwcy5tYXAoZ3JvdXAgPT4gZ3JvdXAuZmllbGRMaXN0KSksXG4gICAgICAuLi5mbGF0dGVuRGVlcChcbiAgICAgICAgdGhpcy5hcnJheUZpZWxkR3JvdXBzLm1hcChhcnJheUdyb3VwID0+IGFycmF5R3JvdXAuZmllbGRMaXN0cyksXG4gICAgICApLFxuICAgICAgLi4udGhpcy5hZHZhbmNlZEZpZWxkcyxcbiAgICBdKTtcbiAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAvLyDnkIborrrkuIogb25lb2Yg5Y+q5b2x5ZON6KeG5Zu+77yM5L2G5a6e6ZmF6L+Y5Lya5b2x5ZONIGZvcm1EYXRhU3RhdGXvvIzmiYDku6XpnIDopoHlkIzmraXmm7TmlrAgZm9ybURhdGFTdGF0ZVxuICAgICAgbGV0IHZhbHVlID0gdGhpcy5jb250cm9sTWFwLmdldChnZXRPcGVyYW5kUGF0aChmaWVsZCkpLnZhbHVlO1xuICAgICAgaWYgKCF2YWx1ZSAmJiB1c2VEZWZhdWx0KSB7XG4gICAgICAgIHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKGZpZWxkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlRm9ybURhdGEoZmllbGQsIHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9ybURhdGEoZmllbGQ6IE9wZXJhbmRGaWVsZCwgZGF0YTogdW5rbm93bikge1xuICAgIGlmICghZmllbGQpIHJldHVybjtcbiAgICBjb25zdCB7IG1hdGNoLCBpbmRleCwgcGF0aEJlZm9yZUluZGV4LCBwYXRoQWZ0ZXJJbmRleCB9ID0gcGFyc2VBcnJheVBhdGgoXG4gICAgICBmaWVsZC5wYXRoLFxuICAgICk7XG4gICAgaWYgKG1hdGNoICYmIGluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhU3RhdGUgPSB0aGlzLmluaXRpYWxpemVGb3JtRGF0YUFycmF5UHJvcGVydHkoXG4gICAgICAgIHRoaXMuZm9ybURhdGFTdGF0ZSxcbiAgICAgICAgcGF0aEJlZm9yZUluZGV4LFxuICAgICAgICBwYXRoQWZ0ZXJJbmRleCxcbiAgICAgICAgZGF0YSxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZm9ybURhdGFTdGF0ZSA9IHRoaXMuZm9ybURhdGFTdGF0ZS5zZXRJbihcbiAgICAgIHBhdGhUb0FycmF5KGZpZWxkLnBhdGgpLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHRoaXMuX2xhc3RVcGRhdGVGaWVsZCA9IGZpZWxkO1xuICB9XG5cbiAgcmVmcmVzaFZhbGlkYXRpb24oKSB7XG4gICAgY29uc3QgZXJyb3JzID0gQXJyYXkuZnJvbSh0aGlzLmNvbnRyb2xNYXApLnJlZHVjZShcbiAgICAgIChhY2MsIFtwYXRoV2l0aFRhZywgY29udHJvbF0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlydHlQYXRoc1NldC5oYXMocGF0aFdpdGhUYWcpKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXRoID0gZ2V0UGF0aEZyb21UYWdQYXRoKHBhdGhXaXRoVGFnKTtcbiAgICAgICAgYWNjW3BhdGhdID0gaXNFbXB0eShjb250cm9sLmVycm9ycykgPyBudWxsIDogY29udHJvbC5lcnJvcnM7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge30gYXMgRGljdGlvbmFyeTxGb3JtRXJyb3JzPixcbiAgICApO1xuICAgIGNvbnN0IHJlc3VsdCA9IGZyb21QYWlycyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKGVycm9ycyA/PyB7fSkuZmlsdGVyKChbX2ssIHZdKSA9PiAhIXYpLFxuICAgICk7XG5cbiAgICB0aGlzLmZvcm1FcnJvcnMgPSBpc0VtcHR5KHJlc3VsdCkgPyBudWxsIDogcmVzdWx0O1xuICB9XG5cbiAgLy8g5b2T5p+Q5LiqIGZpZWxkIOWPkeeUn+aVsOaNruWPmOWMlu+8jOi/lOWbnuWFtuebuOWFsyBvbmVPZiBwYXRoIOaYr+WQpuW6lOivpeenu+mZpFxuICAvLyDku4XlvZPlvZPliY0gZmllbGQg5LitIG9uZU9mIOadoeS7tuS4juW9k+WJjeaVsOaNruS4jeWMuemFje+8jFxuICBwcml2YXRlIHJlc29sdmVFeHBpcmVkUGF0aChmaWVsZDogT3BlcmFuZEZpZWxkLCBjdXJyZW50VmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHsgZGlydHlQYXRocywgdmFsaWRQYXRocyB9ID0gbWF0Y2hWYWx1ZUFnYWluc3RPbmVPZihcbiAgICAgIGZpZWxkLFxuICAgICAgY3VycmVudFZhbHVlLFxuICAgICk7XG4gICAgY29uc3Qgb3RoZXJGaWVsZFN0YXR1cyA9IHRoaXMuZmllbGRzXG4gICAgICAuZmlsdGVyKGkgPT4gZ2V0T3BlcmFuZFBhdGgoaSkgIT09IGdldE9wZXJhbmRQYXRoKGZpZWxkKSlcbiAgICAgIC5tYXAoZmllbGQgPT4gKHtcbiAgICAgICAgcGF0aDogZ2V0T3BlcmFuZFBhdGgoZmllbGQpLFxuICAgICAgICByZXN1bHQ6IG1hdGNoVmFsdWVBZ2FpbnN0T25lT2YoXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgdGhpcy5jb250cm9sTWFwLmdldChnZXRPcGVyYW5kUGF0aChmaWVsZCkpPy52YWx1ZSxcbiAgICAgICAgKSxcbiAgICAgIH0pKTtcblxuICAgIGNvbnN0IG5ld0RpcnR5UGF0aHMgPSB2YWxpZFBhdGhzLmZpbHRlcihwYXRoID0+IHtcbiAgICAgIC8vIOW9k+WJjSB2YWxpZCBwYXRoIOWcqOWFtuS7liBmaWVsZCDkuK3kuLogZGlydHnvvIzoi6Xor6UgZmllbGQg5pys6Lqr5Lmf5Li6IGRpcnR5IOWImeW/veeVpeivpeW9seWTje+8jOS7jeeEtuWIpOWumuS4uiB2YWxpZO+8jOWQpuWIme+8iOivpSBmaWVsZCDmnInmlYjvvInorqTlrprkuLogZGlydHlcbiAgICAgIGNvbnN0IGZpZWxkQ2FuZGlkYXRlcyA9IG90aGVyRmllbGRTdGF0dXMuZmlsdGVyKHN0YXR1cyA9PlxuICAgICAgICBzdGF0dXMucmVzdWx0LmRpcnR5UGF0aHMuaW5jbHVkZXMocGF0aCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZpZWxkQ2FuZGlkYXRlcy5zb21lKFxuICAgICAgICAoeyBwYXRoIH0pID0+XG4gICAgICAgICAgIW90aGVyRmllbGRTdGF0dXMuc29tZShzdGF0dXMgPT5cbiAgICAgICAgICAgIHN0YXR1cy5yZXN1bHQuZGlydHlQYXRocy5pbmNsdWRlcyhwYXRoKSxcbiAgICAgICAgICApLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlydHlQYXRoczogWy4uLmRpcnR5UGF0aHMsIC4uLm5ld0RpcnR5UGF0aHNdLFxuICAgICAgdmFsaWRQYXRoczogdmFsaWRQYXRocy5maWx0ZXIocGF0aCA9PiAhbmV3RGlydHlQYXRocy5pbmNsdWRlcyhwYXRoKSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm1EYXRhQXJyYXlQcm9wZXJ0eShcbiAgICBzdGF0ZTogRm9ybURhdGFTdGF0ZSxcbiAgICBwYXRoQmVmb3JlSW5kZXg6IHN0cmluZyxcbiAgICBwYXRoQWZ0ZXJJbmRleDogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICkge1xuICAgIGlmIChzdGF0ZS5nZXRJbihbLi4ucGF0aFRvQXJyYXkocGF0aEJlZm9yZUluZGV4KSwgMF0pKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSAkTWFwKHt9KS5zZXRJbihwYXRoVG9BcnJheShwYXRoQWZ0ZXJJbmRleCksIHZhbHVlKTtcbiAgICBjb25zdCBsaXN0ID0gTGlzdChbaXRlbV0pO1xuICAgIHJldHVybiBzdGF0ZS5zZXRJbihwYXRoVG9BcnJheShwYXRoQmVmb3JlSW5kZXgpLCBsaXN0KTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLnJlZnJlc2hWYWxpZGF0aW9uKCk7XG4gICAgdGhpcy5mb3JtLm9uU3VibWl0KG51bGwpO1xuICB9XG59XG4iLCI8Zm9ybVxuICBhdWlGb3JtXG4gIFthY2xTY3JvbGxUb0ZpcnN0SW52YWxpZF09XCIhIWZvcm1FcnJvcnNcIlxuICAjZm9ybT1cIm5nRm9ybVwiXG4gIFthdWlGb3JtTGFiZWxQb3NpdGlvbl09XCJsYWJlbFBvc2l0aW9uXCJcbiAgW2F1aUZvcm1MYWJlbFdpZHRoXT1cImxhYmVsV2lkdGhcIlxuPlxuICA8IS0tIG5vcm1hbCBmaWVsZHMgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIG5vcm1hbEZpZWxkc1wiPlxuICAgIDxhY2wtb3BlcmFuZC1maWVsZFxuICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgIFtjdXN0b21EZXNjcmlwdGlvbl09XCJcbiAgICAgICAgY3VzdG9tRGVzY3JpcHRpb25zIHwgcHVyZTogZ2V0Q3VzdG9tRGVzY3JpcHRpb246ZmllbGRcbiAgICAgIFwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiZmllbGRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIFtyZW1vdGVNb2R1bGVEZWZpbml0aW9uXT1cInJlbW90ZU1vZHVsZURlZmluaXRpb24kIHwgYXN5bmNcIlxuICAgID5cbiAgICA8L2FjbC1vcGVyYW5kLWZpZWxkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIGZpZWxkIGdyb3VwcyDlhbzlrrnvvIzpnIDopoHkv53nlZktLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZmllbGRHcm91cHNcIj5cbiAgICA8YWNsLW9wZXJhbmQtZmllbGQtZ3JvdXBcbiAgICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICAgIFtmaWVsZEdyb3VwXT1cImdyb3VwXCJcbiAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgW2Zvcm1FcnJvcnNdPVwiZm9ybUVycm9yc1wiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cImZpZWxkVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBbY3VzdG9tRGVzY3JpcHRpb25zXT1cImN1c3RvbURlc2NyaXB0aW9uc1wiXG4gICAgPlxuICAgIDwvYWNsLW9wZXJhbmQtZmllbGQtZ3JvdXA+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gYXJyYXkgZmllbGQgZ3JvdXBzIOWFvOWuue+8jOmcgOimgeS/neeVmSAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgYXJyYXlGaWVsZEdyb3Vwc1wiPlxuICAgIDxhY2wtb3BlcmFuZC1hcnJheS1maWVsZC1ncm91cFxuICAgICAgW2FycmF5RmllbGRHcm91cF09XCJncm91cFwiXG4gICAgICBbZm9ybURhdGFTdGF0ZV09XCJmb3JtRGF0YVN0YXRlXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiZmllbGRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChpdGVtUmVtb3ZlKT1cImRlbGV0ZUZvcm1EYXRhKCRldmVudClcIlxuICAgID5cbiAgICA8L2FjbC1vcGVyYW5kLWFycmF5LWZpZWxkLWdyb3VwPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIGFkdmFuY2VkIGZpZWxkcyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFkdmFuY2VkRmllbGRzPy5sZW5ndGhcIj5cbiAgICA8YWNsLW9wZXJhbmQtYWR2YW5jZWQtZmllbGQtZ3JvdXBcbiAgICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICAgIFtmaWVsZExpc3RdPVwiYWR2YW5jZWRGaWVsZHNcIlxuICAgICAgW2Zvcm1EYXRhU3RhdGVdPVwiZm9ybURhdGFTdGF0ZVwiXG4gICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cImZpZWxkVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvYWNsLW9wZXJhbmQtYWR2YW5jZWQtZmllbGQtZ3JvdXA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9mb3JtPlxuIl19
@@ -0,0 +1,32 @@
1
+ import { differenceBy } from 'lodash-es';
2
+ import { convertValue, getOneOfMap, getOperandPath, getPathFromTagPath, normalizePath, } from '../utils';
3
+ // 去除 others 和 paths 中主 path 相同的部分
4
+ export function differPathsTag(paths, others) {
5
+ return differenceBy(paths, others, pathWithTag => getPathFromTagPath(pathWithTag));
6
+ }
7
+ export function getAllOtherTagPath(fields, paths) {
8
+ return fields
9
+ .map(path => getOperandPath(path))
10
+ .filter(path => !paths.includes(path));
11
+ }
12
+ export function matchValueAgainstOneOf(field, currentValue) {
13
+ // oneOfMap 里应当为 tagged path
14
+ const oneOfMap = getOneOfMap(field);
15
+ // 使用两个 set 处理多条 OneOf 中存在公共 path 的情形
16
+ const dirtyPathSet = new Set();
17
+ const validPathSet = new Set();
18
+ Object.entries(oneOfMap).forEach(([value, paths]) => {
19
+ paths.forEach(path => {
20
+ (convertValue(value, field.type) === currentValue
21
+ ? validPathSet
22
+ : dirtyPathSet).add(path);
23
+ });
24
+ });
25
+ return {
26
+ dirtyPaths: Array.from(dirtyPathSet)
27
+ .filter(i => !validPathSet.has(i))
28
+ .map(path => normalizePath(path)),
29
+ validPaths: Array.from(validPathSet).map(path => normalizePath(path)),
30
+ };
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcmQtZm9ybS9zcmMvbGliL2NyZC1mb3JtL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3pDLE9BQU8sRUFDTCxZQUFZLEVBQ1osV0FBVyxFQUNYLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsYUFBYSxHQUNkLE1BQU0sVUFBVSxDQUFDO0FBRWxCLGtDQUFrQztBQUNsQyxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWUsRUFBRSxNQUFnQjtJQUM5RCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQy9DLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFzQixFQUFFLEtBQWU7SUFDeEUsT0FBTyxNQUFNO1NBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBbUIsRUFBRSxZQUFpQjtJQUMzRSw0QkFBNEI7SUFDNUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLHFDQUFxQztJQUNyQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQ2xELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkIsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxZQUFZO2dCQUMvQyxDQUFDLENBQUMsWUFBWTtnQkFDZCxDQUFDLENBQUMsWUFBWSxDQUNmLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU87UUFDTCxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDakMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdEUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkaWZmZXJlbmNlQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQgeyBPcGVyYW5kRmllbGQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICBjb252ZXJ0VmFsdWUsXG4gIGdldE9uZU9mTWFwLFxuICBnZXRPcGVyYW5kUGF0aCxcbiAgZ2V0UGF0aEZyb21UYWdQYXRoLFxuICBub3JtYWxpemVQYXRoLFxufSBmcm9tICcuLi91dGlscyc7XG5cbi8vIOWOu+mZpCBvdGhlcnMg5ZKMIHBhdGhzIOS4reS4uyBwYXRoIOebuOWQjOeahOmDqOWIhlxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlclBhdGhzVGFnKHBhdGhzOiBzdHJpbmdbXSwgb3RoZXJzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gZGlmZmVyZW5jZUJ5KHBhdGhzLCBvdGhlcnMsIHBhdGhXaXRoVGFnID0+XG4gICAgZ2V0UGF0aEZyb21UYWdQYXRoKHBhdGhXaXRoVGFnKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbE90aGVyVGFnUGF0aChmaWVsZHM6IE9wZXJhbmRGaWVsZFtdLCBwYXRoczogc3RyaW5nW10pIHtcbiAgcmV0dXJuIGZpZWxkc1xuICAgIC5tYXAocGF0aCA9PiBnZXRPcGVyYW5kUGF0aChwYXRoKSlcbiAgICAuZmlsdGVyKHBhdGggPT4gIXBhdGhzLmluY2x1ZGVzKHBhdGgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoVmFsdWVBZ2FpbnN0T25lT2YoZmllbGQ6IE9wZXJhbmRGaWVsZCwgY3VycmVudFZhbHVlOiBhbnkpIHtcbiAgLy8gb25lT2ZNYXAg6YeM5bqU5b2T5Li6IHRhZ2dlZCBwYXRoXG4gIGNvbnN0IG9uZU9mTWFwID0gZ2V0T25lT2ZNYXAoZmllbGQpO1xuICAvLyDkvb/nlKjkuKTkuKogc2V0IOWkhOeQhuWkmuadoSBPbmVPZiDkuK3lrZjlnKjlhazlhbEgcGF0aCDnmoTmg4XlvaJcbiAgY29uc3QgZGlydHlQYXRoU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHZhbGlkUGF0aFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBPYmplY3QuZW50cmllcyhvbmVPZk1hcCkuZm9yRWFjaCgoW3ZhbHVlLCBwYXRoc10pID0+IHtcbiAgICBwYXRocy5mb3JFYWNoKHBhdGggPT4ge1xuICAgICAgKGNvbnZlcnRWYWx1ZSh2YWx1ZSwgZmllbGQudHlwZSkgPT09IGN1cnJlbnRWYWx1ZVxuICAgICAgICA/IHZhbGlkUGF0aFNldFxuICAgICAgICA6IGRpcnR5UGF0aFNldFxuICAgICAgKS5hZGQocGF0aCk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGRpcnR5UGF0aHM6IEFycmF5LmZyb20oZGlydHlQYXRoU2V0KVxuICAgICAgLmZpbHRlcihpID0+ICF2YWxpZFBhdGhTZXQuaGFzKGkpKVxuICAgICAgLm1hcChwYXRoID0+IG5vcm1hbGl6ZVBhdGgocGF0aCkpLFxuICAgIHZhbGlkUGF0aHM6IEFycmF5LmZyb20odmFsaWRQYXRoU2V0KS5tYXAocGF0aCA9PiBub3JtYWxpemVQYXRoKHBhdGgpKSxcbiAgfTtcbn1cbiJdfQ==