@contractspec/lib.overlay-engine 1.57.0 → 1.58.0

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