@contractspec/lib.overlay-engine 1.57.0 → 1.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +8 -8
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +535 -8
- package/dist/merger.d.ts +5 -9
- package/dist/merger.d.ts.map +1 -1
- package/dist/merger.js +120 -101
- package/dist/node/index.js +534 -0
- package/dist/node/merger.js +125 -0
- package/dist/node/react.js +21 -0
- package/dist/node/registry.js +262 -0
- package/dist/node/runtime.js +176 -0
- package/dist/node/signer.js +81 -0
- package/dist/node/spec.js +15 -0
- package/dist/node/types.js +0 -0
- package/dist/node/validator.js +131 -0
- package/dist/react.d.ts +6 -9
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +17 -18
- package/dist/registry.d.ts +22 -25
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +254 -98
- package/dist/runtime.d.ts +19 -23
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +174 -51
- package/dist/signer.d.ts +13 -17
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +71 -52
- package/dist/spec.d.ts +65 -69
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js +13 -12
- package/dist/types.d.ts +25 -28
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/validator.d.ts +12 -16
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +123 -92
- package/package.json +75 -31
- package/dist/merger.js.map +0 -1
- package/dist/react.js.map +0 -1
- package/dist/registry.js.map +0 -1
- package/dist/runtime.js.map +0 -1
- package/dist/signer.js.map +0 -1
- package/dist/spec.js.map +0 -1
- package/dist/validator.js.map +0 -1
package/dist/merger.js
CHANGED
|
@@ -1,107 +1,126 @@
|
|
|
1
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
// src/merger.ts
|
|
2
3
|
function applyOverlayModifications(target, overlays, options = {}) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
4
|
+
if (!overlays.length) {
|
|
5
|
+
return target;
|
|
6
|
+
}
|
|
7
|
+
const states = target.fields.map((field) => ({
|
|
8
|
+
key: field.key,
|
|
9
|
+
field: { ...field },
|
|
10
|
+
hidden: field.visible === false
|
|
11
|
+
}));
|
|
12
|
+
const fieldMap = new Map(states.map((state) => [state.key, state]));
|
|
13
|
+
let orderSequence = target.fields.map((field) => field.key);
|
|
14
|
+
const handleMissing = (field, overlayId) => {
|
|
15
|
+
if (options.strict) {
|
|
16
|
+
throw new Error(`Overlay "${overlayId}" referenced unknown field "${field}".`);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
overlays.forEach((overlay) => {
|
|
20
|
+
overlay.modifications.forEach((modification) => {
|
|
21
|
+
switch (modification.type) {
|
|
22
|
+
case "hideField": {
|
|
23
|
+
const state = fieldMap.get(modification.field);
|
|
24
|
+
if (!state)
|
|
25
|
+
return handleMissing(modification.field, overlay.overlayId);
|
|
26
|
+
state.hidden = true;
|
|
27
|
+
state.field.visible = false;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
case "renameLabel": {
|
|
31
|
+
const state = fieldMap.get(modification.field);
|
|
32
|
+
if (!state)
|
|
33
|
+
return handleMissing(modification.field, overlay.overlayId);
|
|
34
|
+
state.field.label = modification.newLabel;
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case "setDefault": {
|
|
38
|
+
const state = fieldMap.get(modification.field);
|
|
39
|
+
if (!state)
|
|
40
|
+
return handleMissing(modification.field, overlay.overlayId);
|
|
41
|
+
state.field.defaultValue = modification.value;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
case "addHelpText": {
|
|
45
|
+
const state = fieldMap.get(modification.field);
|
|
46
|
+
if (!state)
|
|
47
|
+
return handleMissing(modification.field, overlay.overlayId);
|
|
48
|
+
state.field.helpText = modification.text;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case "makeRequired": {
|
|
52
|
+
const state = fieldMap.get(modification.field);
|
|
53
|
+
if (!state)
|
|
54
|
+
return handleMissing(modification.field, overlay.overlayId);
|
|
55
|
+
state.field.required = modification.required ?? true;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
case "reorderFields": {
|
|
59
|
+
const { filtered, missing } = normalizeOrderList(modification.fields, fieldMap);
|
|
60
|
+
if (missing.length && options.strict) {
|
|
61
|
+
missing.forEach((field) => handleMissing(field, overlay.overlayId));
|
|
62
|
+
}
|
|
63
|
+
orderSequence = applyReorder(orderSequence, filtered);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
default:
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
const visibleFields = [];
|
|
72
|
+
const seen = new Set;
|
|
73
|
+
orderSequence.forEach((key) => {
|
|
74
|
+
const state = fieldMap.get(key);
|
|
75
|
+
if (!state || state.hidden) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
seen.add(key);
|
|
79
|
+
visibleFields.push(state.field);
|
|
80
|
+
});
|
|
81
|
+
states.forEach((state) => {
|
|
82
|
+
if (state.hidden || seen.has(state.key)) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
visibleFields.push(state.field);
|
|
86
|
+
});
|
|
87
|
+
visibleFields.forEach((field, index) => {
|
|
88
|
+
field.order = index;
|
|
89
|
+
field.visible = true;
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
...target,
|
|
93
|
+
fields: visibleFields
|
|
94
|
+
};
|
|
78
95
|
}
|
|
79
96
|
function normalizeOrderList(fields, fieldMap) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
const filtered = [];
|
|
98
|
+
const missing = [];
|
|
99
|
+
const seen = new Set;
|
|
100
|
+
fields.forEach((field) => {
|
|
101
|
+
if (!field?.trim()) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (!fieldMap.has(field)) {
|
|
105
|
+
missing.push(field);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (seen.has(field)) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
seen.add(field);
|
|
112
|
+
filtered.push(field);
|
|
113
|
+
});
|
|
114
|
+
return { filtered, missing };
|
|
97
115
|
}
|
|
98
116
|
function applyReorder(sequence, orderedFields) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
117
|
+
if (!orderedFields.length) {
|
|
118
|
+
return sequence;
|
|
119
|
+
}
|
|
120
|
+
const orderedSet = new Set(orderedFields);
|
|
121
|
+
const remainder = sequence.filter((key) => !orderedSet.has(key));
|
|
122
|
+
return [...orderedFields, ...remainder];
|
|
103
123
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
//# sourceMappingURL=merger.js.map
|
|
124
|
+
export {
|
|
125
|
+
applyOverlayModifications
|
|
126
|
+
};
|