@elaraai/east 0.0.1-beta.25 → 0.0.1-beta.27

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 (123) hide show
  1. package/dist/src/analyze.d.ts +3 -0
  2. package/dist/src/analyze.d.ts.map +1 -1
  3. package/dist/src/analyze.js +30 -9
  4. package/dist/src/analyze.js.map +1 -1
  5. package/dist/src/ast.d.ts +1 -0
  6. package/dist/src/ast.d.ts.map +1 -1
  7. package/dist/src/ast_to_ir.d.ts.map +1 -1
  8. package/dist/src/ast_to_ir.js +2 -1
  9. package/dist/src/ast_to_ir.js.map +1 -1
  10. package/dist/src/builtins.d.ts +1 -1
  11. package/dist/src/builtins.d.ts.map +1 -1
  12. package/dist/src/builtins.js +22 -0
  13. package/dist/src/builtins.js.map +1 -1
  14. package/dist/src/compile.d.ts.map +1 -1
  15. package/dist/src/compile.js +54 -3
  16. package/dist/src/compile.js.map +1 -1
  17. package/dist/src/datetime_format/types.d.ts +23 -23
  18. package/dist/src/expr/array.d.ts +8 -0
  19. package/dist/src/expr/array.d.ts.map +1 -1
  20. package/dist/src/expr/array.js +11 -0
  21. package/dist/src/expr/array.js.map +1 -1
  22. package/dist/src/expr/blob.d.ts +8 -0
  23. package/dist/src/expr/blob.d.ts.map +1 -1
  24. package/dist/src/expr/blob.js +11 -0
  25. package/dist/src/expr/blob.js.map +1 -1
  26. package/dist/src/expr/block.d.ts +179 -1
  27. package/dist/src/expr/block.d.ts.map +1 -1
  28. package/dist/src/expr/block.js +468 -1
  29. package/dist/src/expr/block.js.map +1 -1
  30. package/dist/src/expr/boolean.d.ts +8 -0
  31. package/dist/src/expr/boolean.d.ts.map +1 -1
  32. package/dist/src/expr/boolean.js +11 -0
  33. package/dist/src/expr/boolean.js.map +1 -1
  34. package/dist/src/expr/datetime.d.ts +28 -0
  35. package/dist/src/expr/datetime.d.ts.map +1 -1
  36. package/dist/src/expr/datetime.js +31 -0
  37. package/dist/src/expr/datetime.js.map +1 -1
  38. package/dist/src/expr/dict.d.ts +8 -0
  39. package/dist/src/expr/dict.d.ts.map +1 -1
  40. package/dist/src/expr/dict.js +11 -0
  41. package/dist/src/expr/dict.js.map +1 -1
  42. package/dist/src/expr/float.d.ts +46 -0
  43. package/dist/src/expr/float.d.ts.map +1 -1
  44. package/dist/src/expr/float.js +52 -0
  45. package/dist/src/expr/float.js.map +1 -1
  46. package/dist/src/expr/index.d.ts +162 -2
  47. package/dist/src/expr/index.d.ts.map +1 -1
  48. package/dist/src/expr/index.js +168 -2
  49. package/dist/src/expr/index.js.map +1 -1
  50. package/dist/src/expr/integer.d.ts +73 -0
  51. package/dist/src/expr/integer.d.ts.map +1 -1
  52. package/dist/src/expr/integer.js +52 -0
  53. package/dist/src/expr/integer.js.map +1 -1
  54. package/dist/src/expr/set.d.ts +8 -0
  55. package/dist/src/expr/set.d.ts.map +1 -1
  56. package/dist/src/expr/set.js +11 -0
  57. package/dist/src/expr/set.js.map +1 -1
  58. package/dist/src/expr/string.d.ts +28 -0
  59. package/dist/src/expr/string.d.ts.map +1 -1
  60. package/dist/src/expr/string.js +31 -0
  61. package/dist/src/expr/string.js.map +1 -1
  62. package/dist/src/expr/variant.d.ts +8 -0
  63. package/dist/src/expr/variant.d.ts.map +1 -1
  64. package/dist/src/expr/variant.js +11 -0
  65. package/dist/src/expr/variant.js.map +1 -1
  66. package/dist/src/fuzz.d.ts +36 -2
  67. package/dist/src/fuzz.d.ts.map +1 -1
  68. package/dist/src/fuzz.js +344 -77
  69. package/dist/src/fuzz.js.map +1 -1
  70. package/dist/src/index.d.ts +1 -0
  71. package/dist/src/index.d.ts.map +1 -1
  72. package/dist/src/index.js +1 -0
  73. package/dist/src/index.js.map +1 -1
  74. package/dist/src/internal.d.ts +5 -0
  75. package/dist/src/internal.d.ts.map +1 -1
  76. package/dist/src/internal.js +6 -0
  77. package/dist/src/internal.js.map +1 -1
  78. package/dist/src/ir.d.ts +1406 -1371
  79. package/dist/src/ir.d.ts.map +1 -1
  80. package/dist/src/ir.js +1 -1
  81. package/dist/src/ir.js.map +1 -1
  82. package/dist/src/patch/apply.d.ts +15 -0
  83. package/dist/src/patch/apply.d.ts.map +1 -0
  84. package/dist/src/patch/apply.js +380 -0
  85. package/dist/src/patch/apply.js.map +1 -0
  86. package/dist/src/patch/compose.d.ts +15 -0
  87. package/dist/src/patch/compose.d.ts.map +1 -0
  88. package/dist/src/patch/compose.js +480 -0
  89. package/dist/src/patch/compose.js.map +1 -0
  90. package/dist/src/patch/diff.d.ts +15 -0
  91. package/dist/src/patch/diff.d.ts.map +1 -0
  92. package/dist/src/patch/diff.js +328 -0
  93. package/dist/src/patch/diff.js.map +1 -0
  94. package/dist/src/patch/fuzz.d.ts +73 -0
  95. package/dist/src/patch/fuzz.d.ts.map +1 -0
  96. package/dist/src/patch/fuzz.js +159 -0
  97. package/dist/src/patch/fuzz.js.map +1 -0
  98. package/dist/src/patch/index.d.ts +18 -0
  99. package/dist/src/patch/index.d.ts.map +1 -0
  100. package/dist/src/patch/index.js +20 -0
  101. package/dist/src/patch/index.js.map +1 -0
  102. package/dist/src/patch/invert.d.ts +15 -0
  103. package/dist/src/patch/invert.d.ts.map +1 -0
  104. package/dist/src/patch/invert.js +302 -0
  105. package/dist/src/patch/invert.js.map +1 -0
  106. package/dist/src/patch/type_of_patch.d.ts +17 -0
  107. package/dist/src/patch/type_of_patch.d.ts.map +1 -0
  108. package/dist/src/patch/type_of_patch.js +143 -0
  109. package/dist/src/patch/type_of_patch.js.map +1 -0
  110. package/dist/src/patch/types.d.ts +166 -0
  111. package/dist/src/patch/types.d.ts.map +1 -0
  112. package/dist/src/patch/types.js +69 -0
  113. package/dist/src/patch/types.js.map +1 -0
  114. package/dist/src/platform.d.ts +6 -0
  115. package/dist/src/platform.d.ts.map +1 -1
  116. package/dist/src/serialization/csv.d.ts +17 -17
  117. package/dist/src/type_of_type.d.ts +34 -34
  118. package/dist/src/type_of_type.js +1 -1
  119. package/dist/src/type_of_type.js.map +1 -1
  120. package/dist/src/types.d.ts +8 -8
  121. package/dist/src/types.d.ts.map +1 -1
  122. package/dist/src/types.js.map +1 -1
  123. package/package.json +1 -2
@@ -0,0 +1,302 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * invertFor - Invert a patch.
7
+ *
8
+ * @module
9
+ */
10
+ import { toEastTypeValue } from "../type_of_type.js";
11
+ import { isVariant, variant } from "../containers/variant.js";
12
+ import { equalFor, compareFor } from "../comparison.js";
13
+ import { SortedMap } from "../containers/sortedmap.js";
14
+ import {} from "./types.js";
15
+ export function invertFor(type, ctx = { invert: [], types: [], equal: [] }) {
16
+ // Convert to EastTypeValue and use a properly typed variable
17
+ const t = isVariant(type) ? type : toEastTypeValue(type);
18
+ if (t.type === "Never") {
19
+ return (_patch) => {
20
+ throw new Error("Cannot invert patches for type Never");
21
+ };
22
+ }
23
+ else if (t.type === "Null" ||
24
+ t.type === "Boolean" ||
25
+ t.type === "Integer" ||
26
+ t.type === "Float" ||
27
+ t.type === "String" ||
28
+ t.type === "DateTime" ||
29
+ t.type === "Blob") {
30
+ return (patch) => {
31
+ if (patch.type === "unchanged") {
32
+ return patch;
33
+ }
34
+ else if (patch.type === "replace") {
35
+ return variant("replace", { before: patch.value.after, after: patch.value.before });
36
+ }
37
+ else {
38
+ throw new Error(`Invalid patch type for primitive inversion: ${patch.type}`);
39
+ }
40
+ };
41
+ }
42
+ else if (t.type === "Array") {
43
+ let elementInvert;
44
+ const ret = (patch) => {
45
+ if (patch.type === "unchanged") {
46
+ return patch;
47
+ }
48
+ else if (patch.type === "replace") {
49
+ return variant("replace", { before: patch.value.after, after: patch.value.before });
50
+ }
51
+ else if (patch.type === "patch") {
52
+ const operations = patch.value;
53
+ const inverted = [];
54
+ for (let i = operations.length - 1; i >= 0; i--) {
55
+ const op = operations[i];
56
+ if (op.operation.type === "delete") {
57
+ // Delete becomes insert at same position
58
+ inverted.push({
59
+ key: op.key,
60
+ offset: 0n,
61
+ operation: variant("insert", op.operation.value),
62
+ });
63
+ }
64
+ else if (op.operation.type === "insert") {
65
+ // Insert becomes delete at same position
66
+ inverted.push({
67
+ key: op.key,
68
+ offset: 0n,
69
+ operation: variant("delete", op.operation.value),
70
+ });
71
+ }
72
+ else if (op.operation.type === "update") {
73
+ inverted.push({
74
+ key: op.key,
75
+ offset: 0n,
76
+ operation: variant("update", elementInvert(op.operation.value)),
77
+ });
78
+ }
79
+ }
80
+ return variant("patch", inverted);
81
+ }
82
+ else {
83
+ throw new Error(`Invalid patch type for array inversion: ${patch.type}`);
84
+ }
85
+ };
86
+ // Build array equality using equalFor with current context
87
+ const arrayEqual = equalFor(t, ctx.equal);
88
+ ctx.invert.push(ret);
89
+ ctx.types.push(t);
90
+ ctx.equal.push(arrayEqual);
91
+ elementInvert = invertFor(t.value, ctx);
92
+ ctx.invert.pop();
93
+ ctx.types.pop();
94
+ ctx.equal.pop();
95
+ return ret;
96
+ }
97
+ else if (t.type === "Set") {
98
+ const keyCompare = compareFor(t.value);
99
+ return (patch) => {
100
+ if (patch.type === "unchanged") {
101
+ return patch;
102
+ }
103
+ else if (patch.type === "replace") {
104
+ return variant("replace", { before: patch.value.after, after: patch.value.before });
105
+ }
106
+ else if (patch.type === "patch") {
107
+ const operations = patch.value;
108
+ const inverted = new SortedMap(undefined, keyCompare);
109
+ for (const [key, op] of operations) {
110
+ if (op.type === "delete") {
111
+ inverted.set(key, variant("insert", null));
112
+ }
113
+ else if (op.type === "insert") {
114
+ inverted.set(key, variant("delete", null));
115
+ }
116
+ }
117
+ return variant("patch", inverted);
118
+ }
119
+ else {
120
+ throw new Error(`Invalid patch type for set inversion: ${patch.type}`);
121
+ }
122
+ };
123
+ }
124
+ else if (t.type === "Dict") {
125
+ let valueInvert;
126
+ const keyCompare = compareFor(t.value.key);
127
+ const ret = (patch) => {
128
+ if (patch.type === "unchanged") {
129
+ return patch;
130
+ }
131
+ else if (patch.type === "replace") {
132
+ return variant("replace", { before: patch.value.after, after: patch.value.before });
133
+ }
134
+ else if (patch.type === "patch") {
135
+ const operations = patch.value;
136
+ const inverted = new SortedMap(undefined, keyCompare);
137
+ for (const [key, op] of operations) {
138
+ if (op.type === "delete") {
139
+ inverted.set(key, variant("insert", op.value));
140
+ }
141
+ else if (op.type === "insert") {
142
+ inverted.set(key, variant("delete", op.value));
143
+ }
144
+ else if (op.type === "update") {
145
+ inverted.set(key, variant("update", valueInvert(op.value)));
146
+ }
147
+ }
148
+ return variant("patch", inverted);
149
+ }
150
+ else {
151
+ throw new Error(`Invalid patch type for dict inversion: ${patch.type}`);
152
+ }
153
+ };
154
+ // Build dict equality using equalFor with current context
155
+ const dictEqual = equalFor(t, ctx.equal);
156
+ ctx.invert.push(ret);
157
+ ctx.types.push(t);
158
+ ctx.equal.push(dictEqual);
159
+ valueInvert = invertFor(t.value.value, ctx);
160
+ ctx.invert.pop();
161
+ ctx.types.pop();
162
+ ctx.equal.pop();
163
+ return ret;
164
+ }
165
+ else if (t.type === "Struct") {
166
+ const fieldInverts = {};
167
+ const ret = (patch) => {
168
+ if (patch.type === "unchanged") {
169
+ return patch;
170
+ }
171
+ else if (patch.type === "replace") {
172
+ return variant("replace", { before: patch.value.after, after: patch.value.before });
173
+ }
174
+ else if (patch.type === "patch") {
175
+ const result = {};
176
+ let allUnchanged = true;
177
+ for (const { name } of t.value) {
178
+ const inverted = fieldInverts[name](patch.value[name]);
179
+ result[name] = inverted;
180
+ if (inverted.type !== "unchanged") {
181
+ allUnchanged = false;
182
+ }
183
+ }
184
+ if (allUnchanged) {
185
+ return variant("unchanged", null);
186
+ }
187
+ return variant("patch", result);
188
+ }
189
+ else {
190
+ throw new Error(`Invalid patch type for struct inversion: ${patch.type}`);
191
+ }
192
+ };
193
+ // Build struct equality using equalFor with current context
194
+ const structEqual = equalFor(t, ctx.equal);
195
+ ctx.invert.push(ret);
196
+ ctx.types.push(t);
197
+ ctx.equal.push(structEqual);
198
+ for (const { name, type: fieldType } of t.value) {
199
+ fieldInverts[name] = invertFor(fieldType, ctx);
200
+ }
201
+ ctx.invert.pop();
202
+ ctx.types.pop();
203
+ ctx.equal.pop();
204
+ return ret;
205
+ }
206
+ else if (t.type === "Variant") {
207
+ const caseInverts = {};
208
+ const ret = (patch) => {
209
+ if (patch.type === "unchanged") {
210
+ return patch;
211
+ }
212
+ else if (patch.type === "replace") {
213
+ return variant("replace", { before: patch.value.after, after: patch.value.before });
214
+ }
215
+ else if (patch.type === "patch") {
216
+ const caseName = patch.value.type;
217
+ const inverted = caseInverts[caseName](patch.value.value);
218
+ if (inverted.type === "unchanged") {
219
+ return variant("unchanged", null);
220
+ }
221
+ return variant("patch", variant(caseName, inverted));
222
+ }
223
+ else {
224
+ throw new Error(`Invalid patch type for variant inversion: ${patch.type}`);
225
+ }
226
+ };
227
+ // Build variant equality using equalFor with current context
228
+ const variantEqual = equalFor(t, ctx.equal);
229
+ ctx.invert.push(ret);
230
+ ctx.types.push(t);
231
+ ctx.equal.push(variantEqual);
232
+ for (const { name, type: caseType } of t.value) {
233
+ caseInverts[name] = invertFor(caseType, ctx);
234
+ }
235
+ ctx.invert.pop();
236
+ ctx.types.pop();
237
+ ctx.equal.pop();
238
+ return ret;
239
+ }
240
+ else if (t.type === "Ref") {
241
+ let innerInvert;
242
+ const ret = (patch) => {
243
+ if (patch.type === "unchanged") {
244
+ return patch;
245
+ }
246
+ else if (patch.type === "replace") {
247
+ return variant("replace", { before: patch.value.after, after: patch.value.before });
248
+ }
249
+ else if (patch.type === "patch") {
250
+ const inverted = innerInvert(patch.value);
251
+ if (inverted.type === "unchanged") {
252
+ return variant("unchanged", null);
253
+ }
254
+ return variant("patch", inverted);
255
+ }
256
+ else {
257
+ throw new Error(`Invalid patch type for ref inversion: ${patch.type}`);
258
+ }
259
+ };
260
+ // Build ref equality using equalFor with current context
261
+ const refEqual = equalFor(t, ctx.equal);
262
+ ctx.invert.push(ret);
263
+ ctx.types.push(t);
264
+ ctx.equal.push(refEqual);
265
+ innerInvert = invertFor(t.value, ctx);
266
+ ctx.invert.pop();
267
+ ctx.types.pop();
268
+ ctx.equal.pop();
269
+ return ret;
270
+ }
271
+ else if (t.type === "Recursive") {
272
+ // Recursive types use replace-only semantics - only unchanged and replace patches
273
+ return (patch) => {
274
+ if (patch.type === "unchanged") {
275
+ return patch;
276
+ }
277
+ else if (patch.type === "replace") {
278
+ return variant("replace", { before: patch.value.after, after: patch.value.before });
279
+ }
280
+ else {
281
+ throw new Error(`Invalid patch type for recursive type inversion: ${patch.type}`);
282
+ }
283
+ };
284
+ }
285
+ else if (t.type === "Function" || t.type === "AsyncFunction") {
286
+ return (patch) => {
287
+ if (patch.type === "unchanged") {
288
+ return patch;
289
+ }
290
+ else if (patch.type === "replace") {
291
+ return variant("replace", { before: patch.value.after, after: patch.value.before });
292
+ }
293
+ else {
294
+ throw new Error(`Invalid patch type for function inversion: ${patch.type}`);
295
+ }
296
+ };
297
+ }
298
+ else {
299
+ throw new Error(`Unhandled type in invertFor: ${t.type}`);
300
+ }
301
+ }
302
+ //# sourceMappingURL=invert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invert.js","sourceRoot":"","sources":["../../../src/patch/invert.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAsB,MAAM,oBAAoB,CAAC;AAEzE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAgC,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAsB,MAAM,YAAY,CAAC;AAIhD,MAAM,UAAU,SAAS,CAAC,IAA8B,EAAE,MAAqB,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IACjH,6DAA6D;IAC7D,MAAM,CAAC,GAAkB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAgB,CAAC,CAAC;IAEpF,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,CAAC,MAAW,EAAE,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC,CAAC;IACJ,CAAC;SAAM,IACL,CAAC,CAAC,IAAI,KAAK,MAAM;QACjB,CAAC,CAAC,IAAI,KAAK,SAAS;QACpB,CAAC,CAAC,IAAI,KAAK,SAAS;QACpB,CAAC,CAAC,IAAI,KAAK,OAAO;QAClB,CAAC,CAAC,IAAI,KAAK,QAAQ;QACnB,CAAC,CAAC,IAAI,KAAK,UAAU;QACrB,CAAC,CAAC,IAAI,KAAK,MAAM,EACjB,CAAC;QACD,OAAO,CAAC,KAAmB,EAAE,EAAE;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,+CAA+C,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,IAAI,aAAkC,CAAC;QAEvC,MAAM,GAAG,GAAG,CAAC,KAAmB,EAAE,EAAE;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAU,KAAK,CAAC,KAAK,CAAC;gBACtC,MAAM,QAAQ,GAAU,EAAE,CAAC;gBAE3B,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChD,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;oBAC1B,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACnC,yCAAyC;wBACzC,QAAQ,CAAC,IAAI,CAAC;4BACZ,GAAG,EAAE,EAAE,CAAC,GAAG;4BACX,MAAM,EAAE,EAAE;4BACV,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;yBACjD,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC1C,yCAAyC;wBACzC,QAAQ,CAAC,IAAI,CAAC;4BACZ,GAAG,EAAE,EAAE,CAAC,GAAG;4BACX,MAAM,EAAE,EAAE;4BACV,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;yBACjD,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC1C,QAAQ,CAAC,IAAI,CAAC;4BACZ,GAAG,EAAE,EAAE,CAAC,GAAG;4BACX,MAAM,EAAE,EAAE;4BACV,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;yBAChE,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,OAAO,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,2CAA2C,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC,CAAC;QAEF,2DAA2D;QAC3D,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAE1C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3B,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAEhB,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEvC,OAAO,CAAC,KAAmB,EAAE,EAAE;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAwB,KAAK,CAAC,KAAK,CAAC;gBACpD,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAW,SAAS,EAAE,UAAU,CAAC,CAAC;gBAEhE,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;oBACnC,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC7C,CAAC;yBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAChC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;gBAED,OAAO,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,IAAI,WAAgC,CAAC;QACrC,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE3C,MAAM,GAAG,GAAG,CAAC,KAAmB,EAAE,EAAE;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAwB,KAAK,CAAC,KAAK,CAAC;gBACpD,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAW,SAAS,EAAE,UAAU,CAAC,CAAC;gBAEhE,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;oBACnC,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBACjD,CAAC;yBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAChC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;oBACjD,CAAC;yBAAM,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAChC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;gBAED,OAAO,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,0CAA0C,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC;QAEF,0DAA0D;QAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAEzC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1B,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAEhB,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAwC,EAAE,CAAC;QAE7D,MAAM,GAAG,GAAG,CAAC,KAAmB,EAAE,EAAE;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAwB,EAAE,CAAC;gBACvC,IAAI,YAAY,GAAG,IAAI,CAAC;gBAExB,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBACxD,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;oBACxB,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;wBAClC,YAAY,GAAG,KAAK,CAAC;oBACvB,CAAC;gBACH,CAAC;gBAED,IAAI,YAAY,EAAE,CAAC;oBACjB,OAAO,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACpC,CAAC;gBAED,OAAO,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,4CAA4C,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC,CAAC;QAEF,4DAA4D;QAC5D,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YAChD,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAEhB,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,WAAW,GAAwC,EAAE,CAAC;QAE5D,MAAM,GAAG,GAAG,CAAC,KAAmB,EAAE,EAAE;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;gBAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAE3D,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAClC,OAAO,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACpC,CAAC;gBAED,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,6CAA6C,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC,CAAC;QAEF,6DAA6D;QAC7D,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAE5C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YAC/C,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAEhB,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,IAAI,WAAgC,CAAC;QAErC,MAAM,GAAG,GAAG,CAAC,KAAmB,EAAE,EAAE;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBAClC,OAAO,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACpC,CAAC;gBACD,OAAO,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC,CAAC;QAEF,yDAAyD;QACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAExC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACjB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAEhB,OAAO,GAAG,CAAC;IACb,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAClC,kFAAkF;QAClF,OAAO,CAAC,KAAmB,EAAE,EAAE;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,oDAAoD,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QAC/D,OAAO,CAAC,KAAmB,EAAE,EAAE;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,8CAA8C,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,gCAAiC,CAAmB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * PatchType constructor for computing patch types from East types.
7
+ *
8
+ * @module
9
+ */
10
+ import { type EastType } from "../types.js";
11
+ /**
12
+ * Construct the patch type for a given East type.
13
+ * Works directly with EastType objects (not EastTypeValue variants).
14
+ * Uses a context map to handle recursive types.
15
+ */
16
+ export declare function PatchType<T extends EastType>(type: T, ctx?: Map<EastType, EastType>): EastType;
17
+ //# sourceMappingURL=type_of_patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type_of_patch.d.ts","sourceRoot":"","sources":["../../../src/patch/type_of_patch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH,OAAO,EACL,KAAK,QAAQ,EAOd,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CA4H9F"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * PatchType constructor for computing patch types from East types.
7
+ *
8
+ * @module
9
+ */
10
+ import { NullType, StructType, VariantType, ArrayType, DictType, IntegerType, } from "../types.js";
11
+ /**
12
+ * Construct the patch type for a given East type.
13
+ * Works directly with EastType objects (not EastTypeValue variants).
14
+ * Uses a context map to handle recursive types.
15
+ */
16
+ export function PatchType(type, ctx) {
17
+ // Initialize context for tracking recursive types
18
+ const context = ctx ?? new Map();
19
+ // Check if we've already computed the patch type for this type (handles recursion)
20
+ const cached = context.get(type);
21
+ if (cached !== undefined) {
22
+ return cached;
23
+ }
24
+ const t = type;
25
+ if (t.type === "Never" ||
26
+ t.type === "Null" ||
27
+ t.type === "Boolean" ||
28
+ t.type === "Integer" ||
29
+ t.type === "Float" ||
30
+ t.type === "String" ||
31
+ t.type === "DateTime" ||
32
+ t.type === "Blob") {
33
+ return VariantType({
34
+ unchanged: NullType,
35
+ replace: StructType({ before: type, after: type }),
36
+ });
37
+ }
38
+ else if (t.type === "Array") {
39
+ const elementType = t.value;
40
+ const elementPatchType = PatchType(elementType, context);
41
+ const operationType = VariantType({
42
+ delete: elementType,
43
+ insert: elementType,
44
+ update: elementPatchType,
45
+ });
46
+ const entryType = StructType({
47
+ key: IntegerType,
48
+ offset: IntegerType,
49
+ operation: operationType,
50
+ });
51
+ return VariantType({
52
+ unchanged: NullType,
53
+ replace: StructType({ before: type, after: type }),
54
+ patch: ArrayType(entryType),
55
+ });
56
+ }
57
+ else if (t.type === "Set") {
58
+ const keyType = t.key;
59
+ const operationType = VariantType({
60
+ delete: NullType,
61
+ insert: NullType,
62
+ });
63
+ return VariantType({
64
+ unchanged: NullType,
65
+ replace: StructType({ before: type, after: type }),
66
+ patch: DictType(keyType, operationType),
67
+ });
68
+ }
69
+ else if (t.type === "Dict") {
70
+ const keyType = t.key;
71
+ const valueType = t.value;
72
+ const valuePatchType = PatchType(valueType, context);
73
+ const operationType = VariantType({
74
+ delete: valueType,
75
+ insert: valueType,
76
+ update: valuePatchType,
77
+ });
78
+ return VariantType({
79
+ unchanged: NullType,
80
+ replace: StructType({ before: type, after: type }),
81
+ patch: DictType(keyType, operationType),
82
+ });
83
+ }
84
+ else if (t.type === "Struct") {
85
+ const fieldTypes = t.fields;
86
+ const patchFields = {};
87
+ for (const [name, fieldType] of Object.entries(fieldTypes)) {
88
+ patchFields[name] = PatchType(fieldType, context);
89
+ }
90
+ return VariantType({
91
+ unchanged: NullType,
92
+ replace: StructType({ before: type, after: type }),
93
+ patch: StructType(patchFields),
94
+ });
95
+ }
96
+ else if (t.type === "Variant") {
97
+ const caseTypes = t.cases;
98
+ const patchCases = {};
99
+ for (const [name, caseType] of Object.entries(caseTypes)) {
100
+ patchCases[name] = PatchType(caseType, context);
101
+ }
102
+ return VariantType({
103
+ unchanged: NullType,
104
+ replace: StructType({ before: type, after: type }),
105
+ patch: VariantType(patchCases),
106
+ });
107
+ }
108
+ else if (t.type === "Ref") {
109
+ const innerType = t.value;
110
+ const innerPatchType = PatchType(innerType, context);
111
+ return VariantType({
112
+ unchanged: NullType,
113
+ replace: StructType({ before: type, after: type }),
114
+ patch: innerPatchType,
115
+ });
116
+ }
117
+ else if (t.type === "Recursive") {
118
+ // Check if we've already seen this type (handles circular back-references)
119
+ const cached = context.get(type);
120
+ if (cached !== undefined) {
121
+ return cached;
122
+ }
123
+ // For back-references within the recursive structure, use replace-only semantics
124
+ // Register this BEFORE recursing so circular refs are caught
125
+ const replaceOnlyType = VariantType({
126
+ unchanged: NullType,
127
+ replace: StructType({ before: type, after: type }),
128
+ });
129
+ context.set(type, replaceOnlyType);
130
+ // Recurse into the node - the outer structure gets structural patching
131
+ return PatchType(t.node, context);
132
+ }
133
+ else if (t.type === "Function" || t.type === "AsyncFunction") {
134
+ return VariantType({
135
+ unchanged: NullType,
136
+ replace: StructType({ before: type, after: type }),
137
+ });
138
+ }
139
+ else {
140
+ throw new Error(`Unhandled type in PatchType: ${t.type}`);
141
+ }
142
+ }
143
+ //# sourceMappingURL=type_of_patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type_of_patch.js","sourceRoot":"","sources":["../../../src/patch/type_of_patch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Shared types and context interfaces for the patch system.
7
+ *
8
+ * @module
9
+ */
10
+ import type { EastTypeValue } from "../type_of_type.js";
11
+ import type { EastType, NullType, NeverType, BooleanType, IntegerType, FloatType, StringType, DateTimeType, BlobType, RefType, ArrayType, SetType, DictType, StructType, VariantType, RecursiveType } from "../types.js";
12
+ /**
13
+ * Context for building diff handlers with proper recursive type support.
14
+ * Handlers are built in parallel so that when we encounter a `.Recursive n`
15
+ * back-reference, we can look up the appropriate handler from any array.
16
+ */
17
+ export interface DiffContext {
18
+ /** Diff handlers: (before, after) => Patch */
19
+ diff: Array<(before: any, after: any) => any>;
20
+ /** Types at each level - used to call equalFor/compareFor on Recursive back-references */
21
+ types: Array<EastTypeValue>;
22
+ /** Equality handlers built in parallel - passed to equalFor for Recursive resolution */
23
+ equal: Array<(a: any, b: any) => boolean>;
24
+ }
25
+ /**
26
+ * Context for building apply handlers with proper recursive type support.
27
+ */
28
+ export interface ApplyContext {
29
+ /** Apply handlers: (base, patch) => value */
30
+ apply: Array<(base: any, patch: any) => any>;
31
+ /** Types at each level */
32
+ types: Array<EastTypeValue>;
33
+ /** Equality handlers built in parallel - passed to equalFor for Recursive resolution */
34
+ equal: Array<(a: any, b: any) => boolean>;
35
+ /** Print handlers built in parallel - used for error messages */
36
+ print: Array<(value: any) => string>;
37
+ }
38
+ /**
39
+ * Context for building compose handlers with proper recursive type support.
40
+ */
41
+ export interface ComposeContext {
42
+ /** Compose handlers: (first, second) => combined patch */
43
+ compose: Array<(first: any, second: any) => any>;
44
+ /** Apply handlers built in parallel - used instead of calling applyFor with fresh context */
45
+ apply: Array<(base: any, patch: any) => any>;
46
+ /** Invert handlers built in parallel - used instead of calling invertFor with fresh context */
47
+ invert: Array<(patch: any) => any>;
48
+ /** Types at each level */
49
+ types: Array<EastTypeValue>;
50
+ /** Equality handlers built in parallel - passed to equalFor for Recursive resolution */
51
+ equal: Array<(a: any, b: any) => boolean>;
52
+ /** Print handlers built in parallel - used for error messages */
53
+ print: Array<(value: any) => string>;
54
+ }
55
+ /**
56
+ * Context for building invert handlers with proper recursive type support.
57
+ */
58
+ export interface InvertContext {
59
+ /** Invert handlers: (patch) => inverted patch */
60
+ invert: Array<(patch: any) => any>;
61
+ /** Types at each level */
62
+ types: Array<EastTypeValue>;
63
+ /** Equality handlers built in parallel - passed to equalFor for Recursive resolution */
64
+ equal: Array<(a: any, b: any) => boolean>;
65
+ }
66
+ /** Type-level computation of the patch type for a given East type. */
67
+ export type PatchTypeOf<T extends EastType> = T extends NeverType | NullType | BooleanType | IntegerType | FloatType | StringType | DateTimeType | BlobType ? VariantType<{
68
+ unchanged: NullType;
69
+ replace: StructType<{
70
+ before: T;
71
+ after: T;
72
+ }>;
73
+ }> : T extends RefType<infer V extends EastType> ? VariantType<{
74
+ unchanged: NullType;
75
+ replace: StructType<{
76
+ before: T;
77
+ after: T;
78
+ }>;
79
+ patch: PatchTypeOf<V>;
80
+ }> : T extends ArrayType<infer E extends EastType> ? VariantType<{
81
+ unchanged: NullType;
82
+ replace: StructType<{
83
+ before: T;
84
+ after: T;
85
+ }>;
86
+ patch: ArrayType<StructType<{
87
+ key: IntegerType;
88
+ offset: IntegerType;
89
+ operation: VariantType<{
90
+ delete: E;
91
+ insert: E;
92
+ update: PatchTypeOf<E>;
93
+ }>;
94
+ }>>;
95
+ }> : T extends SetType<infer K> ? VariantType<{
96
+ unchanged: NullType;
97
+ replace: StructType<{
98
+ before: T;
99
+ after: T;
100
+ }>;
101
+ patch: DictType<K, VariantType<{
102
+ delete: NullType;
103
+ insert: NullType;
104
+ }>>;
105
+ }> : T extends DictType<infer K, infer V extends EastType> ? VariantType<{
106
+ unchanged: NullType;
107
+ replace: StructType<{
108
+ before: T;
109
+ after: T;
110
+ }>;
111
+ patch: DictType<K, VariantType<{
112
+ delete: V;
113
+ insert: V;
114
+ update: PatchTypeOf<V>;
115
+ }>>;
116
+ }> : T extends StructType<infer Fields> ? VariantType<{
117
+ unchanged: NullType;
118
+ replace: StructType<{
119
+ before: T;
120
+ after: T;
121
+ }>;
122
+ patch: StructType<{
123
+ [K in keyof Fields]: Fields[K] extends EastType ? PatchTypeOf<Fields[K]> : never;
124
+ }>;
125
+ }> : T extends VariantType<infer Cases> ? VariantType<{
126
+ unchanged: NullType;
127
+ replace: StructType<{
128
+ before: T;
129
+ after: T;
130
+ }>;
131
+ patch: VariantType<{
132
+ [K in keyof Cases]: Cases[K] extends EastType ? PatchTypeOf<Cases[K]> : never;
133
+ }>;
134
+ }> : T extends RecursiveType<infer _Node extends EastType> ? VariantType<{
135
+ unchanged: NullType;
136
+ replace: StructType<{
137
+ before: T;
138
+ after: T;
139
+ }>;
140
+ }> : VariantType<{
141
+ unchanged: NullType;
142
+ replace: StructType<{
143
+ before: T;
144
+ after: T;
145
+ }>;
146
+ }>;
147
+ /**
148
+ * Error thrown when patch operations encounter conflicts.
149
+ */
150
+ export declare class ConflictError extends Error {
151
+ constructor(message: string);
152
+ }
153
+ /**
154
+ * Resolve a type that might be a Recursive back-reference.
155
+ * @internal
156
+ */
157
+ export declare function resolveType(t: EastTypeValue, types: Array<EastTypeValue>): EastTypeValue;
158
+ /**
159
+ * Compute the Longest Common Subsequence of two arrays.
160
+ * @internal
161
+ */
162
+ export declare function computeLCS<T>(before: T[], after: T[], equal: (a: T, b: T) => boolean): {
163
+ beforeIndices: number[];
164
+ afterIndices: number[];
165
+ };
166
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/patch/types.ts"],"names":[],"mappings":"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"}