@elaraai/east 0.0.1-beta.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 (251) hide show
  1. package/LICENSE.md +682 -0
  2. package/README.md +276 -0
  3. package/dist/src/analyze.d.ts +95 -0
  4. package/dist/src/analyze.d.ts.map +1 -0
  5. package/dist/src/analyze.js +1110 -0
  6. package/dist/src/analyze.js.map +1 -0
  7. package/dist/src/ast.d.ts +263 -0
  8. package/dist/src/ast.d.ts.map +1 -0
  9. package/dist/src/ast.js +151 -0
  10. package/dist/src/ast.js.map +1 -0
  11. package/dist/src/ast_to_ir.d.ts +24 -0
  12. package/dist/src/ast_to_ir.d.ts.map +1 -0
  13. package/dist/src/ast_to_ir.js +834 -0
  14. package/dist/src/ast_to_ir.js.map +1 -0
  15. package/dist/src/builtins.d.ts +18 -0
  16. package/dist/src/builtins.d.ts.map +1 -0
  17. package/dist/src/builtins.js +1105 -0
  18. package/dist/src/builtins.js.map +1 -0
  19. package/dist/src/comparison.d.ts +28 -0
  20. package/dist/src/comparison.d.ts.map +1 -0
  21. package/dist/src/comparison.js +1017 -0
  22. package/dist/src/comparison.js.map +1 -0
  23. package/dist/src/compile.d.ts +22 -0
  24. package/dist/src/compile.d.ts.map +1 -0
  25. package/dist/src/compile.js +3260 -0
  26. package/dist/src/compile.js.map +1 -0
  27. package/dist/src/containers/ref.d.ts +106 -0
  28. package/dist/src/containers/ref.d.ts.map +1 -0
  29. package/dist/src/containers/ref.js +100 -0
  30. package/dist/src/containers/ref.js.map +1 -0
  31. package/dist/src/containers/sortedmap.d.ts +165 -0
  32. package/dist/src/containers/sortedmap.d.ts.map +1 -0
  33. package/dist/src/containers/sortedmap.js +237 -0
  34. package/dist/src/containers/sortedmap.js.map +1 -0
  35. package/dist/src/containers/sortedset.d.ts +185 -0
  36. package/dist/src/containers/sortedset.d.ts.map +1 -0
  37. package/dist/src/containers/sortedset.js +312 -0
  38. package/dist/src/containers/sortedset.js.map +1 -0
  39. package/dist/src/containers/variant.d.ts +131 -0
  40. package/dist/src/containers/variant.d.ts.map +1 -0
  41. package/dist/src/containers/variant.js +68 -0
  42. package/dist/src/containers/variant.js.map +1 -0
  43. package/dist/src/datetime_format/parse.d.ts +50 -0
  44. package/dist/src/datetime_format/parse.d.ts.map +1 -0
  45. package/dist/src/datetime_format/parse.js +908 -0
  46. package/dist/src/datetime_format/parse.js.map +1 -0
  47. package/dist/src/datetime_format/print.d.ts +35 -0
  48. package/dist/src/datetime_format/print.d.ts.map +1 -0
  49. package/dist/src/datetime_format/print.js +157 -0
  50. package/dist/src/datetime_format/print.js.map +1 -0
  51. package/dist/src/datetime_format/tokenize.d.ts +76 -0
  52. package/dist/src/datetime_format/tokenize.d.ts.map +1 -0
  53. package/dist/src/datetime_format/tokenize.js +271 -0
  54. package/dist/src/datetime_format/tokenize.js.map +1 -0
  55. package/dist/src/datetime_format/types.d.ts +99 -0
  56. package/dist/src/datetime_format/types.d.ts.map +1 -0
  57. package/dist/src/datetime_format/types.js +103 -0
  58. package/dist/src/datetime_format/types.js.map +1 -0
  59. package/dist/src/datetime_format/validate.d.ts +51 -0
  60. package/dist/src/datetime_format/validate.d.ts.map +1 -0
  61. package/dist/src/datetime_format/validate.js +208 -0
  62. package/dist/src/datetime_format/validate.js.map +1 -0
  63. package/dist/src/default.d.ts +21 -0
  64. package/dist/src/default.d.ts.map +1 -0
  65. package/dist/src/default.js +82 -0
  66. package/dist/src/default.js.map +1 -0
  67. package/dist/src/eastir.d.ts +33 -0
  68. package/dist/src/eastir.d.ts.map +1 -0
  69. package/dist/src/eastir.js +92 -0
  70. package/dist/src/eastir.js.map +1 -0
  71. package/dist/src/error.d.ts +13 -0
  72. package/dist/src/error.d.ts.map +1 -0
  73. package/dist/src/error.js +8 -0
  74. package/dist/src/error.js.map +1 -0
  75. package/dist/src/expr/array.d.ts +1711 -0
  76. package/dist/src/expr/array.d.ts.map +1 -0
  77. package/dist/src/expr/array.js +1805 -0
  78. package/dist/src/expr/array.js.map +1 -0
  79. package/dist/src/expr/ast.d.ts +17 -0
  80. package/dist/src/expr/ast.d.ts.map +1 -0
  81. package/dist/src/expr/ast.js +302 -0
  82. package/dist/src/expr/ast.js.map +1 -0
  83. package/dist/src/expr/blob.d.ts +141 -0
  84. package/dist/src/expr/blob.d.ts.map +1 -0
  85. package/dist/src/expr/blob.js +198 -0
  86. package/dist/src/expr/blob.js.map +1 -0
  87. package/dist/src/expr/block.d.ts +201 -0
  88. package/dist/src/expr/block.d.ts.map +1 -0
  89. package/dist/src/expr/block.js +1505 -0
  90. package/dist/src/expr/block.js.map +1 -0
  91. package/dist/src/expr/boolean.d.ts +207 -0
  92. package/dist/src/expr/boolean.d.ts.map +1 -0
  93. package/dist/src/expr/boolean.js +261 -0
  94. package/dist/src/expr/boolean.js.map +1 -0
  95. package/dist/src/expr/datetime.d.ts +544 -0
  96. package/dist/src/expr/datetime.d.ts.map +1 -0
  97. package/dist/src/expr/datetime.js +980 -0
  98. package/dist/src/expr/datetime.js.map +1 -0
  99. package/dist/src/expr/dict.d.ts +1242 -0
  100. package/dist/src/expr/dict.d.ts.map +1 -0
  101. package/dist/src/expr/dict.js +1492 -0
  102. package/dist/src/expr/dict.js.map +1 -0
  103. package/dist/src/expr/expr.d.ts +95 -0
  104. package/dist/src/expr/expr.d.ts.map +1 -0
  105. package/dist/src/expr/expr.js +171 -0
  106. package/dist/src/expr/expr.js.map +1 -0
  107. package/dist/src/expr/float.d.ts +357 -0
  108. package/dist/src/expr/float.d.ts.map +1 -0
  109. package/dist/src/expr/float.js +637 -0
  110. package/dist/src/expr/float.js.map +1 -0
  111. package/dist/src/expr/function.d.ts +46 -0
  112. package/dist/src/expr/function.d.ts.map +1 -0
  113. package/dist/src/expr/function.js +58 -0
  114. package/dist/src/expr/function.js.map +1 -0
  115. package/dist/src/expr/index.d.ts +450 -0
  116. package/dist/src/expr/index.d.ts.map +1 -0
  117. package/dist/src/expr/index.js +423 -0
  118. package/dist/src/expr/index.js.map +1 -0
  119. package/dist/src/expr/integer.d.ts +256 -0
  120. package/dist/src/expr/integer.d.ts.map +1 -0
  121. package/dist/src/expr/integer.js +311 -0
  122. package/dist/src/expr/integer.js.map +1 -0
  123. package/dist/src/expr/libs/array.d.ts +106 -0
  124. package/dist/src/expr/libs/array.d.ts.map +1 -0
  125. package/dist/src/expr/libs/array.js +140 -0
  126. package/dist/src/expr/libs/array.js.map +1 -0
  127. package/dist/src/expr/libs/blob.d.ts +42 -0
  128. package/dist/src/expr/libs/blob.d.ts.map +1 -0
  129. package/dist/src/expr/libs/blob.js +70 -0
  130. package/dist/src/expr/libs/blob.js.map +1 -0
  131. package/dist/src/expr/libs/datetime.d.ts +479 -0
  132. package/dist/src/expr/libs/datetime.d.ts.map +1 -0
  133. package/dist/src/expr/libs/datetime.js +624 -0
  134. package/dist/src/expr/libs/datetime.js.map +1 -0
  135. package/dist/src/expr/libs/dict.d.ts +66 -0
  136. package/dist/src/expr/libs/dict.d.ts.map +1 -0
  137. package/dist/src/expr/libs/dict.js +77 -0
  138. package/dist/src/expr/libs/dict.js.map +1 -0
  139. package/dist/src/expr/libs/float.d.ts +299 -0
  140. package/dist/src/expr/libs/float.d.ts.map +1 -0
  141. package/dist/src/expr/libs/float.js +564 -0
  142. package/dist/src/expr/libs/float.js.map +1 -0
  143. package/dist/src/expr/libs/integer.d.ts +228 -0
  144. package/dist/src/expr/libs/integer.d.ts.map +1 -0
  145. package/dist/src/expr/libs/integer.js +398 -0
  146. package/dist/src/expr/libs/integer.js.map +1 -0
  147. package/dist/src/expr/libs/set.d.ts +59 -0
  148. package/dist/src/expr/libs/set.d.ts.map +1 -0
  149. package/dist/src/expr/libs/set.js +69 -0
  150. package/dist/src/expr/libs/set.js.map +1 -0
  151. package/dist/src/expr/libs/string.d.ts +71 -0
  152. package/dist/src/expr/libs/string.d.ts.map +1 -0
  153. package/dist/src/expr/libs/string.js +75 -0
  154. package/dist/src/expr/libs/string.js.map +1 -0
  155. package/dist/src/expr/never.d.ts +15 -0
  156. package/dist/src/expr/never.d.ts.map +1 -0
  157. package/dist/src/expr/never.js +12 -0
  158. package/dist/src/expr/never.js.map +1 -0
  159. package/dist/src/expr/null.d.ts +15 -0
  160. package/dist/src/expr/null.d.ts.map +1 -0
  161. package/dist/src/expr/null.js +12 -0
  162. package/dist/src/expr/null.js.map +1 -0
  163. package/dist/src/expr/ref.d.ts +103 -0
  164. package/dist/src/expr/ref.d.ts.map +1 -0
  165. package/dist/src/expr/ref.js +131 -0
  166. package/dist/src/expr/ref.js.map +1 -0
  167. package/dist/src/expr/regex_validation.d.ts +25 -0
  168. package/dist/src/expr/regex_validation.d.ts.map +1 -0
  169. package/dist/src/expr/regex_validation.js +130 -0
  170. package/dist/src/expr/regex_validation.js.map +1 -0
  171. package/dist/src/expr/set.d.ts +1071 -0
  172. package/dist/src/expr/set.d.ts.map +1 -0
  173. package/dist/src/expr/set.js +1137 -0
  174. package/dist/src/expr/set.js.map +1 -0
  175. package/dist/src/expr/string.d.ts +414 -0
  176. package/dist/src/expr/string.d.ts.map +1 -0
  177. package/dist/src/expr/string.js +683 -0
  178. package/dist/src/expr/string.js.map +1 -0
  179. package/dist/src/expr/struct.d.ts +48 -0
  180. package/dist/src/expr/struct.d.ts.map +1 -0
  181. package/dist/src/expr/struct.js +65 -0
  182. package/dist/src/expr/struct.js.map +1 -0
  183. package/dist/src/expr/types.d.ts +68 -0
  184. package/dist/src/expr/types.d.ts.map +1 -0
  185. package/dist/src/expr/types.js +6 -0
  186. package/dist/src/expr/types.js.map +1 -0
  187. package/dist/src/expr/variant.d.ts +137 -0
  188. package/dist/src/expr/variant.d.ts.map +1 -0
  189. package/dist/src/expr/variant.js +105 -0
  190. package/dist/src/expr/variant.js.map +1 -0
  191. package/dist/src/fuzz.d.ts +80 -0
  192. package/dist/src/fuzz.d.ts.map +1 -0
  193. package/dist/src/fuzz.js +300 -0
  194. package/dist/src/fuzz.js.map +1 -0
  195. package/dist/src/index.d.ts +21 -0
  196. package/dist/src/index.d.ts.map +1 -0
  197. package/dist/src/index.js +21 -0
  198. package/dist/src/index.js.map +1 -0
  199. package/dist/src/internal.d.ts +36 -0
  200. package/dist/src/internal.d.ts.map +1 -0
  201. package/dist/src/internal.js +11 -0
  202. package/dist/src/internal.js.map +1 -0
  203. package/dist/src/ir.d.ts +1571 -0
  204. package/dist/src/ir.d.ts.map +1 -0
  205. package/dist/src/ir.js +56 -0
  206. package/dist/src/ir.js.map +1 -0
  207. package/dist/src/location.d.ts +48 -0
  208. package/dist/src/location.d.ts.map +1 -0
  209. package/dist/src/location.js +62 -0
  210. package/dist/src/location.js.map +1 -0
  211. package/dist/src/platform.d.ts +21 -0
  212. package/dist/src/platform.d.ts.map +1 -0
  213. package/dist/src/platform.js +8 -0
  214. package/dist/src/platform.js.map +1 -0
  215. package/dist/src/serialization/beast.d.ts +39 -0
  216. package/dist/src/serialization/beast.d.ts.map +1 -0
  217. package/dist/src/serialization/beast.js +555 -0
  218. package/dist/src/serialization/beast.js.map +1 -0
  219. package/dist/src/serialization/beast2-stream.d.ts +38 -0
  220. package/dist/src/serialization/beast2-stream.d.ts.map +1 -0
  221. package/dist/src/serialization/beast2-stream.js +665 -0
  222. package/dist/src/serialization/beast2-stream.js.map +1 -0
  223. package/dist/src/serialization/beast2.d.ts +41 -0
  224. package/dist/src/serialization/beast2.d.ts.map +1 -0
  225. package/dist/src/serialization/beast2.js +489 -0
  226. package/dist/src/serialization/beast2.js.map +1 -0
  227. package/dist/src/serialization/binary-utils.d.ts +151 -0
  228. package/dist/src/serialization/binary-utils.d.ts.map +1 -0
  229. package/dist/src/serialization/binary-utils.js +929 -0
  230. package/dist/src/serialization/binary-utils.js.map +1 -0
  231. package/dist/src/serialization/east.d.ts +84 -0
  232. package/dist/src/serialization/east.d.ts.map +1 -0
  233. package/dist/src/serialization/east.js +1802 -0
  234. package/dist/src/serialization/east.js.map +1 -0
  235. package/dist/src/serialization/index.d.ts +11 -0
  236. package/dist/src/serialization/index.d.ts.map +1 -0
  237. package/dist/src/serialization/index.js +12 -0
  238. package/dist/src/serialization/index.js.map +1 -0
  239. package/dist/src/serialization/json.d.ts +36 -0
  240. package/dist/src/serialization/json.d.ts.map +1 -0
  241. package/dist/src/serialization/json.js +849 -0
  242. package/dist/src/serialization/json.js.map +1 -0
  243. package/dist/src/type_of_type.d.ts +115 -0
  244. package/dist/src/type_of_type.d.ts.map +1 -0
  245. package/dist/src/type_of_type.js +362 -0
  246. package/dist/src/type_of_type.js.map +1 -0
  247. package/dist/src/types.d.ts +648 -0
  248. package/dist/src/types.d.ts.map +1 -0
  249. package/dist/src/types.js +1631 -0
  250. package/dist/src/types.js.map +1 -0
  251. package/package.json +87 -0
@@ -0,0 +1,555 @@
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
+ import { BufferWriter, readInt64Twiddled, readFloat64Twiddled, readStringUtf8Null, } from "./binary-utils.js";
6
+ import { isVariant, variant } from "../containers/variant.js";
7
+ import { EastTypeValueType, toEastTypeValue } from "../type_of_type.js";
8
+ import { printFor } from "./east.js";
9
+ import { equalFor } from "../comparison.js";
10
+ const printTypeValue = printFor(EastTypeValueType);
11
+ const isTypeValueEqual = equalFor(EastTypeValueType);
12
+ // =============================================================================
13
+ // Beast v1 Type encoding/decoding (different from beast2!)
14
+ // =============================================================================
15
+ //
16
+ // NULLABLE TYPE HANDLING:
17
+ //
18
+ // Old East supported nullable types with a special flag (bit 7 set in type byte).
19
+ // New East removed nullable in favor of explicit Option/Variant types.
20
+ //
21
+ // DECODING: We auto-convert nullable types to Variant<{notNull: T, null: Null}>
22
+ // - This allows reading legacy .beast files seamlessly
23
+ // - The variant cases are named to sort correctly: "notNull" < "null" alphabetically
24
+ // - Tag mapping: tag 0 = notNull (has value), tag 1 = null
25
+ // - This matches the old nullable encoding perfectly for values (byte-for-byte identical)
26
+ //
27
+ // ENCODING: We currently do NOT auto-convert Variant<{notNull: T, null: Null}> back to nullable
28
+ // - Pro: Simpler, more explicit, no magic behavior
29
+ // - Con: Type schemas are larger (expanded Variant vs single nullable flag)
30
+ // - Con: Old ELARACore cannot read files written by new East
31
+ //
32
+ // FUTURE WORK: Consider implementing inverse transform on encode for full interoperability:
33
+ // - Detect Variant with exactly 2 cases: "notNull": T and "null": Null
34
+ // - Encode as nullable T (type byte with bit 7 set)
35
+ // - This would enable bidirectional compatibility and smaller type schemas
36
+ // - Trade-off: More magic behavior, but symmetric with decode behavior
37
+ //
38
+ // =============================================================================
39
+ // Beast v1 uses single-byte type tags (0-13) with nullable flag at bit 7
40
+ export const BEAST_TYPE_TO_BYTE = {
41
+ Array: 0,
42
+ Blob: 1,
43
+ Boolean: 2,
44
+ DateTime: 3,
45
+ Dict: 4,
46
+ Float: 5,
47
+ Integer: 6,
48
+ // Node: 7, // Not implemented in this version
49
+ Null: 8,
50
+ Set: 9,
51
+ String: 10,
52
+ Struct: 11,
53
+ // Tree: 12, // Not implemented in this version
54
+ Variant: 13,
55
+ };
56
+ export const BEAST_BYTE_TO_TYPE = [
57
+ "Array", "Blob", "Boolean", "DateTime", "Dict", "Float", "Integer",
58
+ undefined, // 7 - Node (not implemented)
59
+ "Null", "Set", "String", "Struct",
60
+ undefined, // 12 - Tree (not implemented)
61
+ "Variant",
62
+ ];
63
+ export function encodeTypeToBeastBuffer(type, writer) {
64
+ const t = type.type;
65
+ // NOTE: We don't currently detect Variant<{notNull: T, null: Null}> and convert it
66
+ // back to the old nullable encoding. This means type schemas are larger than necessary
67
+ // but encoding is simpler and more explicit. See comments at top of file for trade-offs.
68
+ if (t === "Recursive") {
69
+ throw new Error("TODO");
70
+ }
71
+ const typeByte = BEAST_TYPE_TO_BYTE[t];
72
+ if (typeByte === undefined) {
73
+ throw new Error(`Unsupported type for Beast v1: ${t}`);
74
+ }
75
+ writer.writeUint8(typeByte);
76
+ if (t === "Array") {
77
+ encodeTypeToBeastBuffer(type.value, writer);
78
+ }
79
+ else if (t === "Set") {
80
+ encodeTypeToBeastBuffer(type.value, writer);
81
+ }
82
+ else if (t === "Dict") {
83
+ encodeTypeToBeastBuffer(type.value.key, writer);
84
+ encodeTypeToBeastBuffer(type.value.value, writer);
85
+ }
86
+ else if (t === "Struct") {
87
+ for (const { name: fieldName, type: fieldType } of type.value) {
88
+ writer.writeUint8(1); // continuation byte
89
+ writer.writeStringUtf8Null(fieldName);
90
+ encodeTypeToBeastBuffer(fieldType, writer);
91
+ }
92
+ writer.writeUint8(0); // terminator
93
+ }
94
+ else if (t === "Variant") {
95
+ for (const { name: caseName, type: caseType } of type.value) {
96
+ writer.writeUint8(1); // continuation byte
97
+ writer.writeStringUtf8Null(caseName);
98
+ encodeTypeToBeastBuffer(caseType, writer);
99
+ }
100
+ writer.writeUint8(0); // terminator
101
+ }
102
+ }
103
+ export function decodeTypeBeast(buffer, offset) {
104
+ const typeByte = buffer[offset];
105
+ offset += 1;
106
+ // Check for nullable flag (bit 7)
107
+ // In old East, nullable types were encoded with bit 7 set
108
+ // We convert these to Variant types with cases "notNull" (tag 0) and "null" (tag 1)
109
+ // which matches the old encoding where tag 0 = has value, tag 1 = null
110
+ const nullable = typeByte >= 128;
111
+ const actualTypeByte = nullable ? typeByte - 128 : typeByte;
112
+ const t = BEAST_BYTE_TO_TYPE[actualTypeByte];
113
+ if (!t) {
114
+ throw new Error(`Invalid type byte 0x${typeByte.toString(16).padStart(2, '0')} at offset ${offset - 1}`);
115
+ }
116
+ // Decode the base type
117
+ let baseType;
118
+ if (t === "Null") {
119
+ baseType = variant("Null", null);
120
+ }
121
+ else if (t === "Boolean") {
122
+ baseType = variant("Boolean", null);
123
+ }
124
+ else if (t === "Integer") {
125
+ baseType = variant("Integer", null);
126
+ }
127
+ else if (t === "Float") {
128
+ baseType = variant("Float", null);
129
+ }
130
+ else if (t === "DateTime") {
131
+ baseType = variant("DateTime", null);
132
+ }
133
+ else if (t === "String") {
134
+ baseType = variant("String", null);
135
+ }
136
+ else if (t === "Blob") {
137
+ baseType = variant("Blob", null);
138
+ }
139
+ else if (t === "Array") {
140
+ const [elementType, newOffset] = decodeTypeBeast(buffer, offset);
141
+ offset = newOffset;
142
+ baseType = variant("Array", elementType);
143
+ }
144
+ else if (t === "Set") {
145
+ const [keyType, newOffset] = decodeTypeBeast(buffer, offset);
146
+ offset = newOffset;
147
+ baseType = variant("Set", keyType);
148
+ }
149
+ else if (t === "Dict") {
150
+ const [keyType, keyOffset] = decodeTypeBeast(buffer, offset);
151
+ const [valueType, valueOffset] = decodeTypeBeast(buffer, keyOffset);
152
+ offset = valueOffset;
153
+ baseType = variant("Dict", { key: keyType, value: valueType });
154
+ }
155
+ else if (t === "Struct") {
156
+ const fields = [];
157
+ while (buffer[offset] === 1) {
158
+ offset += 1;
159
+ const [fieldName, nameOffset] = readStringUtf8Null(buffer, offset);
160
+ const [fieldType, typeOffset] = decodeTypeBeast(buffer, nameOffset);
161
+ fields.push({ name: fieldName, type: fieldType });
162
+ offset = typeOffset;
163
+ }
164
+ if (buffer[offset] !== 0) {
165
+ throw new Error(`Unexpected struct field separator ${buffer[offset]} at offset ${offset}`);
166
+ }
167
+ offset += 1;
168
+ baseType = variant("Struct", fields);
169
+ }
170
+ else if (t === "Variant") {
171
+ const cases = [];
172
+ while (buffer[offset] === 1) {
173
+ offset += 1;
174
+ const [caseName, nameOffset] = readStringUtf8Null(buffer, offset);
175
+ const [caseType, typeOffset] = decodeTypeBeast(buffer, nameOffset);
176
+ cases.push({ name: caseName, type: caseType });
177
+ offset = typeOffset;
178
+ }
179
+ if (buffer[offset] !== 0) {
180
+ throw new Error(`Unexpected variant case separator ${buffer[offset]} at offset ${offset}`);
181
+ }
182
+ offset += 1;
183
+ baseType = variant("Variant", cases);
184
+ }
185
+ else {
186
+ throw new Error(`Unhandled type: ${t}`);
187
+ }
188
+ // If nullable, wrap in a Variant with "notNull" (tag 0) and "null" (tag 1)
189
+ // This matches the old encoding where tag 0 = has value, tag 1 = null
190
+ if (nullable) {
191
+ return [variant("Variant", [{ name: "notNull", type: baseType }, { name: "null", type: variant("Null", null) }]), offset];
192
+ }
193
+ return [baseType, offset];
194
+ }
195
+ // =============================================================================
196
+ // Value encoding/decoding factories (closure-compiler pattern)
197
+ // =============================================================================
198
+ export function encodeBeastValueToBufferFor(type) {
199
+ if (type.type === "Never") {
200
+ return (_, _writer) => { throw new Error(`Cannot encode Never type`); };
201
+ }
202
+ else if (type.type === "Null") {
203
+ return (_, _writer) => { };
204
+ }
205
+ else if (type.type === "Boolean") {
206
+ return (x, writer) => writer.writeUint8(x ? 1 : 0);
207
+ }
208
+ else if (type.type === "Integer") {
209
+ return (x, writer) => writer.writeInt64Twiddled(x);
210
+ }
211
+ else if (type.type === "Float") {
212
+ return (x, writer) => writer.writeFloat64Twiddled(x);
213
+ }
214
+ else if (type.type === "String") {
215
+ return (x, writer) => writer.writeStringUtf8Null(x);
216
+ }
217
+ else if (type.type === "DateTime") {
218
+ return (x, writer) => writer.writeInt64Twiddled(BigInt(x.valueOf()));
219
+ }
220
+ else if (type.type === "Blob") {
221
+ // Preallocate length buffer (reused across calls)
222
+ const lengthBytes = new Uint8Array(8);
223
+ const lengthView = new DataView(lengthBytes.buffer);
224
+ return (x, writer) => {
225
+ // Old format: 8-byte big-endian length + raw bytes
226
+ lengthView.setBigUint64(0, BigInt(x.length), false); // big-endian
227
+ writer.writeBytes(lengthBytes);
228
+ writer.writeBytes(x);
229
+ };
230
+ }
231
+ else if (type.type === "Ref") {
232
+ throw new Error(`Beast v1 format does not support ref types`);
233
+ }
234
+ else if (type.type === "Array") {
235
+ const valueEncoder = encodeBeastValueToBufferFor(type.value);
236
+ return (x, writer) => {
237
+ // Old format: continuation bytes (0x01 before each element, 0x00 at end)
238
+ for (const item of x) {
239
+ writer.writeUint8(1); // continuation byte
240
+ valueEncoder(item, writer);
241
+ }
242
+ writer.writeUint8(0); // end marker
243
+ };
244
+ }
245
+ else if (type.type === "Set") {
246
+ const keyEncoder = encodeBeastValueToBufferFor(type.value);
247
+ return (x, writer) => {
248
+ // Old format: continuation bytes (0x01 before each element, 0x00 at end)
249
+ for (const key of x) {
250
+ writer.writeUint8(1); // continuation byte
251
+ keyEncoder(key, writer);
252
+ }
253
+ writer.writeUint8(0); // end marker
254
+ };
255
+ }
256
+ else if (type.type === "Dict") {
257
+ const keyEncoder = encodeBeastValueToBufferFor(type.value.key);
258
+ const valueEncoder = encodeBeastValueToBufferFor(type.value.value);
259
+ return (x, writer) => {
260
+ // Old format: continuation bytes (0x01 before each entry, 0x00 at end)
261
+ for (const [k, v] of x) {
262
+ writer.writeUint8(1); // continuation byte
263
+ keyEncoder(k, writer);
264
+ valueEncoder(v, writer);
265
+ }
266
+ writer.writeUint8(0); // end marker
267
+ };
268
+ }
269
+ else if (type.type === "Struct") {
270
+ const fieldEncoders = type.value.map(({ name, type }) => [name, encodeBeastValueToBufferFor(type)]);
271
+ return (x, writer) => {
272
+ for (const [k, encoder] of fieldEncoders) {
273
+ encoder(x[k], writer);
274
+ }
275
+ };
276
+ }
277
+ else if (type.type === "Variant") {
278
+ const caseEncoders = Object.fromEntries(type.value.map(({ name, type }) => [name, encodeBeastValueToBufferFor(type)]));
279
+ const caseTags = Object.fromEntries(type.value.map(({ name }, i) => [name, i]));
280
+ return (x, writer) => {
281
+ const tag = x.type;
282
+ const tagIndex = caseTags[tag]; // Assume valid input
283
+ writer.writeUint8(tagIndex);
284
+ caseEncoders[tag](x.value, writer);
285
+ };
286
+ }
287
+ else if (type.type === "Recursive") {
288
+ throw new Error(`Beast v1 format does not support recursive types`);
289
+ }
290
+ else if (type.type === "Function") {
291
+ throw new Error(`Functions cannot be serialized`);
292
+ }
293
+ else {
294
+ throw new Error(`Unhandled type ${type.type}`);
295
+ }
296
+ }
297
+ export function decodeBeastValueFor(type) {
298
+ // Convert EastType to EastTypeValue if necessary
299
+ if (!isVariant(type)) {
300
+ type = toEastTypeValue(type);
301
+ }
302
+ if (type.type === "Never") {
303
+ return (_buffer, _offset) => { throw new Error(`Cannot decode Never type`); };
304
+ }
305
+ else if (type.type === "Null") {
306
+ return (_buffer, offset) => [null, offset];
307
+ }
308
+ else if (type.type === "Boolean") {
309
+ return (buffer, offset) => {
310
+ if (offset >= buffer.length) {
311
+ throw new Error(`Buffer underflow reading boolean at offset ${offset}`);
312
+ }
313
+ return [buffer[offset] !== 0, offset + 1];
314
+ };
315
+ }
316
+ else if (type.type === "Integer") {
317
+ return (buffer, offset) => {
318
+ const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
319
+ return readInt64Twiddled(view, offset);
320
+ };
321
+ }
322
+ else if (type.type === "Float") {
323
+ return (buffer, offset) => {
324
+ const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
325
+ const value = readFloat64Twiddled(view, offset);
326
+ return [value, offset + 8];
327
+ };
328
+ }
329
+ else if (type.type === "String") {
330
+ return (buffer, offset) => readStringUtf8Null(buffer, offset);
331
+ }
332
+ else if (type.type === "DateTime") {
333
+ return (buffer, offset) => {
334
+ const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
335
+ const [unixTime, newOffset] = readInt64Twiddled(view, offset);
336
+ return [new Date(Number(unixTime)), newOffset];
337
+ };
338
+ }
339
+ else if (type.type === "Blob") {
340
+ return (buffer, offset) => {
341
+ if (offset + 8 > buffer.length) {
342
+ throw new Error(`Buffer underflow reading blob length at offset ${offset}`);
343
+ }
344
+ const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
345
+ const length = Number(view.getBigUint64(offset, false)); // big-endian
346
+ const newOffset = offset + 8;
347
+ if (newOffset + length > buffer.length) {
348
+ throw new Error(`Buffer underflow reading blob data at offset ${newOffset}, length ${length}`);
349
+ }
350
+ const blob = buffer.slice(newOffset, newOffset + length);
351
+ return [blob, newOffset + length];
352
+ };
353
+ }
354
+ else if (type.type === "Ref") {
355
+ throw new Error("Beast v1 format does not support ref types");
356
+ ;
357
+ }
358
+ else if (type.type === "Array") {
359
+ const valueDecoder = decodeBeastValueFor(type.value);
360
+ return (buffer, offset) => {
361
+ const result = [];
362
+ while (true) {
363
+ if (offset >= buffer.length) {
364
+ throw new Error(`Buffer underflow reading array continuation byte at offset ${offset}`);
365
+ }
366
+ const continuationByte = buffer[offset++];
367
+ if (continuationByte === 0) {
368
+ break; // end of array
369
+ }
370
+ else if (continuationByte === 1) {
371
+ const [value, newOffset] = valueDecoder(buffer, offset);
372
+ result.push(value);
373
+ offset = newOffset;
374
+ }
375
+ else {
376
+ throw new Error(`Invalid continuation byte ${continuationByte} at offset ${offset - 1}`);
377
+ }
378
+ }
379
+ return [result, offset];
380
+ };
381
+ }
382
+ else if (type.type === "Set") {
383
+ const keyDecoder = decodeBeastValueFor(type.value);
384
+ return (buffer, offset) => {
385
+ const result = new Set();
386
+ while (true) {
387
+ if (offset >= buffer.length) {
388
+ throw new Error(`Buffer underflow reading set continuation byte at offset ${offset}`);
389
+ }
390
+ const continuationByte = buffer[offset++];
391
+ if (continuationByte === 0) {
392
+ break; // end of set
393
+ }
394
+ else if (continuationByte === 1) {
395
+ const [key, newOffset] = keyDecoder(buffer, offset);
396
+ result.add(key);
397
+ offset = newOffset;
398
+ }
399
+ else {
400
+ throw new Error(`Invalid continuation byte ${continuationByte} at offset ${offset - 1}`);
401
+ }
402
+ }
403
+ return [result, offset];
404
+ };
405
+ }
406
+ else if (type.type === "Dict") {
407
+ const keyDecoder = decodeBeastValueFor(type.value.key);
408
+ const valueDecoder = decodeBeastValueFor(type.value.value);
409
+ return (buffer, offset) => {
410
+ const result = new Map();
411
+ while (true) {
412
+ if (offset >= buffer.length) {
413
+ throw new Error(`Buffer underflow reading dict continuation byte at offset ${offset}`);
414
+ }
415
+ const continuationByte = buffer[offset++];
416
+ if (continuationByte === 0) {
417
+ break; // end of dict
418
+ }
419
+ else if (continuationByte === 1) {
420
+ const [key, keyOffset] = keyDecoder(buffer, offset);
421
+ const [value, valueOffset] = valueDecoder(buffer, keyOffset);
422
+ result.set(key, value);
423
+ offset = valueOffset;
424
+ }
425
+ else {
426
+ throw new Error(`Invalid continuation byte ${continuationByte} at offset ${offset - 1}`);
427
+ }
428
+ }
429
+ return [result, offset];
430
+ };
431
+ }
432
+ else if (type.type === "Struct") {
433
+ const fieldDecoders = type.value.map(({ name, type }) => [name, decodeBeastValueFor(type)]);
434
+ return (buffer, offset) => {
435
+ const result = {};
436
+ let currentOffset = offset;
437
+ for (const [k, decoder] of fieldDecoders) {
438
+ const [value, nextOffset] = decoder(buffer, currentOffset);
439
+ result[k] = value;
440
+ currentOffset = nextOffset;
441
+ }
442
+ return [result, currentOffset];
443
+ };
444
+ }
445
+ else if (type.type === "Variant") {
446
+ const caseDecoders = type.value.map(({ name, type }) => [name, decodeBeastValueFor(type)]);
447
+ return (buffer, offset) => {
448
+ if (offset >= buffer.length) {
449
+ throw new Error(`Buffer underflow reading variant tag at offset ${offset}`);
450
+ }
451
+ const tagIndex = buffer[offset++];
452
+ if (tagIndex >= caseDecoders.length) {
453
+ throw new Error(`Invalid variant tag ${tagIndex} at offset ${offset - 1}`);
454
+ }
455
+ const [caseName, caseDecoder] = caseDecoders[tagIndex];
456
+ const [value, finalOffset] = caseDecoder(buffer, offset);
457
+ return [variant(caseName, value), finalOffset];
458
+ };
459
+ }
460
+ else if (type.type === "Recursive") {
461
+ throw new Error("Beast v1 format does not support recursive types");
462
+ ;
463
+ }
464
+ else if (type.type === "Function") {
465
+ throw new Error(`Functions cannot be deserialized`);
466
+ }
467
+ else {
468
+ throw new Error(`Unhandled type ${type.type}`);
469
+ }
470
+ }
471
+ export function encodeBeastValueFor(type) {
472
+ // Convert EastType to EastTypeValue if necessary
473
+ if (!isVariant(type)) {
474
+ type = toEastTypeValue(type);
475
+ }
476
+ const encoder = encodeBeastValueToBufferFor(type);
477
+ return (value) => {
478
+ const writer = new BufferWriter();
479
+ encoder(value, writer);
480
+ return writer.toUint8Array();
481
+ };
482
+ }
483
+ export const MAGIC_BYTES = Uint8Array.from([69, 97, 115, 116, 0, 234, 87, 255]);
484
+ export function encodeBeastFor(type) {
485
+ // Convert EastType to EastTypeValue if necessary
486
+ if (!isVariant(type)) {
487
+ type = toEastTypeValue(type);
488
+ }
489
+ const valueEncoder = encodeBeastValueToBufferFor(type);
490
+ return (value) => {
491
+ const writer = new BufferWriter();
492
+ // Write magic bytes (8 bytes)
493
+ writer.writeBytes(MAGIC_BYTES);
494
+ // Write type schema (using beast v1 type encoding)
495
+ encodeTypeToBeastBuffer(type, writer);
496
+ // Write value (using beast v1 encoding)
497
+ valueEncoder(value, writer);
498
+ return writer.toUint8Array();
499
+ };
500
+ }
501
+ export function decodeBeast(data) {
502
+ // Verify magic bytes
503
+ if (data.length < MAGIC_BYTES.length) {
504
+ throw new Error(`Data too short for Beast format: ${data.length} bytes`);
505
+ }
506
+ for (let i = 0; i < MAGIC_BYTES.length; i++) {
507
+ if (data[i] !== MAGIC_BYTES[i]) {
508
+ throw new Error(`Invalid Beast magic bytes at offset ${i}: expected 0x${MAGIC_BYTES[i].toString(16)}, got 0x${data[i].toString(16)}`);
509
+ }
510
+ }
511
+ // Decode type schema
512
+ let offset = MAGIC_BYTES.length;
513
+ const [type, typeEndOffset] = decodeTypeBeast(data, offset);
514
+ // Decode value
515
+ const valueDecoder = decodeBeastValueFor(type);
516
+ const [value, valueEndOffset] = valueDecoder(data, typeEndOffset);
517
+ // Verify we consumed all data
518
+ if (valueEndOffset !== data.length) {
519
+ throw new Error(`Unexpected data after Beast value at offset ${valueEndOffset} (${data.length - valueEndOffset} bytes remaining)`);
520
+ }
521
+ return { type, value };
522
+ }
523
+ export function decodeBeastFor(type) {
524
+ // Convert EastType to EastTypeValue if necessary
525
+ if (!isVariant(type)) {
526
+ type = toEastTypeValue(type);
527
+ }
528
+ const valueDecoder = decodeBeastValueFor(type);
529
+ return (data) => {
530
+ // Verify magic bytes
531
+ if (data.length < MAGIC_BYTES.length) {
532
+ throw new Error(`Data too short for Beast format: ${data.length} bytes`);
533
+ }
534
+ for (let i = 0; i < MAGIC_BYTES.length; i++) {
535
+ if (data[i] !== MAGIC_BYTES[i]) {
536
+ throw new Error(`Invalid Beast magic bytes at offset ${i}: expected 0x${MAGIC_BYTES[i].toString(16)}, got 0x${data[i].toString(16)}`);
537
+ }
538
+ }
539
+ // Decode type schema
540
+ let offset = MAGIC_BYTES.length;
541
+ const [decodedType, typeEndOffset] = decodeTypeBeast(data, offset);
542
+ // Verify type matches expected type
543
+ if (!isTypeValueEqual(decodedType, type)) {
544
+ throw new Error(`Type mismatch: expected ${printTypeValue(type)}, got ${printTypeValue(decodedType)}`);
545
+ }
546
+ // Decode value
547
+ const [value, valueEndOffset] = valueDecoder(data, typeEndOffset);
548
+ // Verify we consumed all data
549
+ if (valueEndOffset !== data.length) {
550
+ throw new Error(`Unexpected data after Beast value at offset ${valueEndOffset} (${data.length - valueEndOffset} bytes remaining)`);
551
+ }
552
+ return value;
553
+ };
554
+ }
555
+ //# sourceMappingURL=beast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beast.js","sourceRoot":"","sources":["../../../src/serialization/beast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
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
+ import { type EastType, type ValueTypeOf } from "../types.js";
6
+ import { type EastTypeValue } from "../type_of_type.js";
7
+ /**
8
+ * Encode an East value to a ReadableStream in Beast v2 format with true backpressure.
9
+ *
10
+ * Uses pull-based control flow: the consumer pulls chunks via ReadableStream.pull(),
11
+ * which drives the generator to produce the next chunk. This provides automatic
12
+ * backpressure without any buffering or queueing.
13
+ *
14
+ * @param type The type of the value to encode
15
+ * @returns A function that takes a value and returns a ReadableStream<Uint8Array>
16
+ */
17
+ export declare function encodeBeast2ToStreamFor(type: EastTypeValue): (value: any) => ReadableStream<Uint8Array>;
18
+ export declare function encodeBeast2ToStreamFor<T extends EastType>(type: T): (value: ValueTypeOf<T>) => ReadableStream<Uint8Array>;
19
+ /**
20
+ * Decode a Beast v2 format stream to an East value.
21
+ * Reads the type schema from the stream and returns both type and value.
22
+ *
23
+ * @param stream The input stream to decode
24
+ * @returns Promise resolving to { type, value }
25
+ */
26
+ export declare function decodeBeast2FromStream(stream: ReadableStream<Uint8Array>): Promise<{
27
+ type: EastTypeValue;
28
+ value: any;
29
+ }>;
30
+ /**
31
+ * Create a streaming decoder for a specific Beast v2 type.
32
+ * Factory pattern: the type is verified once, returns async decoder.
33
+ *
34
+ * @param type The expected type to decode
35
+ * @returns A function that takes a stream and returns a Promise of the decoded value
36
+ */
37
+ export declare function decodeBeast2FromStreamFor<T extends EastTypeValue>(type: T): (stream: ReadableStream<Uint8Array>) => Promise<ValueTypeOf<T>>;
38
+ //# sourceMappingURL=beast2-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beast2-stream.d.ts","sourceRoot":"","sources":["../../../src/serialization/beast2-stream.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAI9D,OAAO,EAAsC,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAuX5F;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,aAAa,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,cAAc,CAAC,UAAU,CAAC,CAAA;AACxG,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,UAAU,CAAC,CAAA;AA6R3H;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GACjC,OAAO,CAAC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,CAAC,CAwB9C;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,aAAa,EAC/D,IAAI,EAAE,CAAC,GACN,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAkCjE"}