@elaraai/east 1.0.84 → 1.0.86

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 (247) hide show
  1. package/dist/src/analyze.d.ts.map +1 -1
  2. package/dist/src/analyze.js +48 -0
  3. package/dist/src/analyze.js.map +1 -1
  4. package/dist/src/ast_to_ir.coerce_to.spec.js +4 -4
  5. package/dist/src/ast_to_ir.coerce_to.spec.js.map +1 -1
  6. package/dist/src/ast_to_ir.d.ts +6 -1
  7. package/dist/src/ast_to_ir.d.ts.map +1 -1
  8. package/dist/src/ast_to_ir.js +20 -7
  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 +52 -0
  13. package/dist/src/builtins.js.map +1 -1
  14. package/dist/src/codegen/canonical.d.ts +37 -0
  15. package/dist/src/codegen/canonical.d.ts.map +1 -0
  16. package/dist/src/codegen/canonical.js +208 -0
  17. package/dist/src/codegen/canonical.js.map +1 -0
  18. package/dist/src/codegen/codegen.spec.js +132 -201
  19. package/dist/src/codegen/codegen.spec.js.map +1 -1
  20. package/dist/src/codegen/printer.d.ts.map +1 -1
  21. package/dist/src/codegen/printer.js +142 -24
  22. package/dist/src/codegen/printer.js.map +1 -1
  23. package/dist/src/codegen/spellings.d.ts +4 -1
  24. package/dist/src/codegen/spellings.d.ts.map +1 -1
  25. package/dist/src/codegen/spellings.js +5 -1
  26. package/dist/src/codegen/spellings.js.map +1 -1
  27. package/dist/src/compile/builtins/index.d.ts.map +1 -1
  28. package/dist/src/compile/builtins/index.js +2 -0
  29. package/dist/src/compile/builtins/index.js.map +1 -1
  30. package/dist/src/compile/builtins/primitives.d.ts.map +1 -1
  31. package/dist/src/compile/builtins/primitives.js +2 -1
  32. package/dist/src/compile/builtins/primitives.js.map +1 -1
  33. package/dist/src/compile/builtins/query.d.ts +10 -0
  34. package/dist/src/compile/builtins/query.d.ts.map +1 -0
  35. package/dist/src/compile/builtins/query.js +5 -0
  36. package/dist/src/compile/builtins/query.js.map +1 -0
  37. package/dist/src/expr/block.d.ts.map +1 -1
  38. package/dist/src/expr/block.js +2 -1
  39. package/dist/src/expr/block.js.map +1 -1
  40. package/dist/src/expr/index.d.ts +75 -47
  41. package/dist/src/expr/index.d.ts.map +1 -1
  42. package/dist/src/expr/index.js +31 -0
  43. package/dist/src/expr/index.js.map +1 -1
  44. package/dist/src/expr/libs/datetime.d.ts +20 -20
  45. package/dist/src/expr/libs/datetime.d.ts.map +1 -1
  46. package/dist/src/expr/libs/datetime.js +208 -167
  47. package/dist/src/expr/libs/datetime.js.map +1 -1
  48. package/dist/src/expr/libs/float.d.ts +15 -15
  49. package/dist/src/expr/libs/float.d.ts.map +1 -1
  50. package/dist/src/expr/libs/float.js +298 -267
  51. package/dist/src/expr/libs/float.js.map +1 -1
  52. package/dist/src/expr/libs/integer.d.ts +12 -12
  53. package/dist/src/expr/libs/integer.d.ts.map +1 -1
  54. package/dist/src/expr/libs/integer.js +219 -194
  55. package/dist/src/expr/libs/integer.js.map +1 -1
  56. package/dist/src/expr/libs/lazy.d.ts +28 -0
  57. package/dist/src/expr/libs/lazy.d.ts.map +1 -0
  58. package/dist/src/expr/libs/lazy.js +55 -0
  59. package/dist/src/expr/libs/lazy.js.map +1 -0
  60. package/dist/src/expr/libs/lazy.spec.d.ts +6 -0
  61. package/dist/src/expr/libs/lazy.spec.d.ts.map +1 -0
  62. package/dist/src/expr/libs/lazy.spec.js +102 -0
  63. package/dist/src/expr/libs/lazy.spec.js.map +1 -0
  64. package/dist/src/expr/query.d.ts +60 -0
  65. package/dist/src/expr/query.d.ts.map +1 -0
  66. package/dist/src/expr/query.js +84 -0
  67. package/dist/src/expr/query.js.map +1 -0
  68. package/dist/src/functions.crossimport.spec.js +8 -0
  69. package/dist/src/functions.crossimport.spec.js.map +1 -1
  70. package/dist/src/functions.d.ts +45 -8
  71. package/dist/src/functions.d.ts.map +1 -1
  72. package/dist/src/functions.js +138 -28
  73. package/dist/src/functions.js.map +1 -1
  74. package/dist/src/functions.spec.js +60 -2
  75. package/dist/src/functions.spec.js.map +1 -1
  76. package/dist/src/index.d.ts +3 -0
  77. package/dist/src/index.d.ts.map +1 -1
  78. package/dist/src/index.js +3 -0
  79. package/dist/src/index.js.map +1 -1
  80. package/dist/src/internal.d.ts +4 -0
  81. package/dist/src/internal.d.ts.map +1 -1
  82. package/dist/src/internal.js +9 -0
  83. package/dist/src/internal.js.map +1 -1
  84. package/dist/src/location.d.ts +22 -0
  85. package/dist/src/location.d.ts.map +1 -1
  86. package/dist/src/location.js +31 -0
  87. package/dist/src/location.js.map +1 -1
  88. package/dist/src/naming.d.ts +5 -3
  89. package/dist/src/naming.d.ts.map +1 -1
  90. package/dist/src/naming.js.map +1 -1
  91. package/dist/src/portable.spec.d.ts +6 -0
  92. package/dist/src/portable.spec.d.ts.map +1 -0
  93. package/dist/src/portable.spec.js +181 -0
  94. package/dist/src/portable.spec.js.map +1 -0
  95. package/dist/src/query/evaluate.d.ts +98 -0
  96. package/dist/src/query/evaluate.d.ts.map +1 -0
  97. package/dist/src/query/evaluate.js +193 -0
  98. package/dist/src/query/evaluate.js.map +1 -0
  99. package/dist/src/query/index.d.ts +17 -0
  100. package/dist/src/query/index.d.ts.map +1 -0
  101. package/dist/src/query/index.js +17 -0
  102. package/dist/src/query/index.js.map +1 -0
  103. package/dist/src/query/jq/catalog.d.ts +174 -0
  104. package/dist/src/query/jq/catalog.d.ts.map +1 -0
  105. package/dist/src/query/jq/catalog.js +1740 -0
  106. package/dist/src/query/jq/catalog.js.map +1 -0
  107. package/dist/src/query/jq/check.d.ts +210 -0
  108. package/dist/src/query/jq/check.d.ts.map +1 -0
  109. package/dist/src/query/jq/check.js +2261 -0
  110. package/dist/src/query/jq/check.js.map +1 -0
  111. package/dist/src/query/jq/complete.d.ts +89 -0
  112. package/dist/src/query/jq/complete.d.ts.map +1 -0
  113. package/dist/src/query/jq/complete.js +320 -0
  114. package/dist/src/query/jq/complete.js.map +1 -0
  115. package/dist/src/query/jq/describe.d.ts +53 -0
  116. package/dist/src/query/jq/describe.d.ts.map +1 -0
  117. package/dist/src/query/jq/describe.js +149 -0
  118. package/dist/src/query/jq/describe.js.map +1 -0
  119. package/dist/src/query/jq/lex.d.ts +118 -0
  120. package/dist/src/query/jq/lex.d.ts.map +1 -0
  121. package/dist/src/query/jq/lex.js +371 -0
  122. package/dist/src/query/jq/lex.js.map +1 -0
  123. package/dist/src/query/jq/literals.d.ts +49 -0
  124. package/dist/src/query/jq/literals.d.ts.map +1 -0
  125. package/dist/src/query/jq/literals.js +78 -0
  126. package/dist/src/query/jq/literals.js.map +1 -0
  127. package/dist/src/query/jq/messages.d.ts +126 -0
  128. package/dist/src/query/jq/messages.d.ts.map +1 -0
  129. package/dist/src/query/jq/messages.js +172 -0
  130. package/dist/src/query/jq/messages.js.map +1 -0
  131. package/dist/src/query/jq/parse.d.ts +70 -0
  132. package/dist/src/query/jq/parse.d.ts.map +1 -0
  133. package/dist/src/query/jq/parse.js +1013 -0
  134. package/dist/src/query/jq/parse.js.map +1 -0
  135. package/dist/src/query/jq/print.d.ts +59 -0
  136. package/dist/src/query/jq/print.d.ts.map +1 -0
  137. package/dist/src/query/jq/print.js +587 -0
  138. package/dist/src/query/jq/print.js.map +1 -0
  139. package/dist/src/query/jq/shapes.d.ts +345 -0
  140. package/dist/src/query/jq/shapes.d.ts.map +1 -0
  141. package/dist/src/query/jq/shapes.js +584 -0
  142. package/dist/src/query/jq/shapes.js.map +1 -0
  143. package/dist/src/query/jq/spans.d.ts +133 -0
  144. package/dist/src/query/jq/spans.d.ts.map +1 -0
  145. package/dist/src/query/jq/spans.js +195 -0
  146. package/dist/src/query/jq/spans.js.map +1 -0
  147. package/dist/src/query/jq/split.d.ts +334 -0
  148. package/dist/src/query/jq/split.d.ts.map +1 -0
  149. package/dist/src/query/jq/split.js +2108 -0
  150. package/dist/src/query/jq/split.js.map +1 -0
  151. package/dist/src/query/jq/strftime.d.ts +20 -0
  152. package/dist/src/query/jq/strftime.d.ts.map +1 -0
  153. package/dist/src/query/jq/strftime.js +65 -0
  154. package/dist/src/query/jq/strftime.js.map +1 -0
  155. package/dist/src/query/jq/summary.d.ts +139 -0
  156. package/dist/src/query/jq/summary.d.ts.map +1 -0
  157. package/dist/src/query/jq/summary.js +222 -0
  158. package/dist/src/query/jq/summary.js.map +1 -0
  159. package/dist/src/query/jq/translate-builtins.d.ts +21 -0
  160. package/dist/src/query/jq/translate-builtins.d.ts.map +1 -0
  161. package/dist/src/query/jq/translate-builtins.js +1873 -0
  162. package/dist/src/query/jq/translate-builtins.js.map +1 -0
  163. package/dist/src/query/jq/translate.d.ts +627 -0
  164. package/dist/src/query/jq/translate.d.ts.map +1 -0
  165. package/dist/src/query/jq/translate.js +3364 -0
  166. package/dist/src/query/jq/translate.js.map +1 -0
  167. package/dist/src/query/types.d.ts +505 -0
  168. package/dist/src/query/types.d.ts.map +1 -0
  169. package/dist/src/query/types.js +231 -0
  170. package/dist/src/query/types.js.map +1 -0
  171. package/dist/src/runner_exec.d.ts +134 -0
  172. package/dist/src/runner_exec.d.ts.map +1 -0
  173. package/dist/src/runner_exec.js +371 -0
  174. package/dist/src/runner_exec.js.map +1 -0
  175. package/dist/src/runner_exec.spec.d.ts +6 -0
  176. package/dist/src/runner_exec.spec.d.ts.map +1 -0
  177. package/dist/src/runner_exec.spec.js +198 -0
  178. package/dist/src/runner_exec.spec.js.map +1 -0
  179. package/dist/src/runner_io.d.ts +370 -0
  180. package/dist/src/runner_io.d.ts.map +1 -0
  181. package/dist/src/runner_io.js +563 -0
  182. package/dist/src/runner_io.js.map +1 -0
  183. package/dist/src/runner_io.spec.d.ts +6 -0
  184. package/dist/src/runner_io.spec.d.ts.map +1 -0
  185. package/dist/src/runner_io.spec.js +224 -0
  186. package/dist/src/runner_io.spec.js.map +1 -0
  187. package/dist/src/runner_merge.d.ts +95 -0
  188. package/dist/src/runner_merge.d.ts.map +1 -0
  189. package/dist/src/runner_merge.js +238 -0
  190. package/dist/src/runner_merge.js.map +1 -0
  191. package/dist/src/runner_protocol.d.ts +11 -4
  192. package/dist/src/runner_protocol.d.ts.map +1 -1
  193. package/dist/src/runner_protocol.js +11 -4
  194. package/dist/src/runner_protocol.js.map +1 -1
  195. package/dist/src/serialization/beast2/index.d.ts +1 -1
  196. package/dist/src/serialization/beast2/index.d.ts.map +1 -1
  197. package/dist/src/serialization/beast2/index.js.map +1 -1
  198. package/dist/src/serialization/beast2/v5/frames.d.ts +10 -6
  199. package/dist/src/serialization/beast2/v5/frames.d.ts.map +1 -1
  200. package/dist/src/serialization/beast2/v5/frames.js +10 -6
  201. package/dist/src/serialization/beast2/v5/frames.js.map +1 -1
  202. package/dist/src/serialization/beast2/v5/frames.spec.d.ts +6 -0
  203. package/dist/src/serialization/beast2/v5/frames.spec.d.ts.map +1 -0
  204. package/dist/src/serialization/beast2/v5/frames.spec.js +42 -0
  205. package/dist/src/serialization/beast2/v5/frames.spec.js.map +1 -0
  206. package/dist/src/serialization/beast2/v5/index.spec.js +108 -0
  207. package/dist/src/serialization/beast2/v5/index.spec.js.map +1 -1
  208. package/dist/src/serialization/beast2/v5/lazy.d.ts +12 -7
  209. package/dist/src/serialization/beast2/v5/lazy.d.ts.map +1 -1
  210. package/dist/src/serialization/beast2/v5/lazy.js +16 -6
  211. package/dist/src/serialization/beast2/v5/lazy.js.map +1 -1
  212. package/dist/src/serialization/beast2/v5/lazy.spec.js +159 -18
  213. package/dist/src/serialization/beast2/v5/lazy.spec.js.map +1 -1
  214. package/dist/src/serialization/beast2/v5/stream.d.ts +110 -21
  215. package/dist/src/serialization/beast2/v5/stream.d.ts.map +1 -1
  216. package/dist/src/serialization/beast2/v5/stream.js +153 -42
  217. package/dist/src/serialization/beast2/v5/stream.js.map +1 -1
  218. package/dist/src/serialization/beast2/v5/weight.d.ts +36 -0
  219. package/dist/src/serialization/beast2/v5/weight.d.ts.map +1 -0
  220. package/dist/src/serialization/beast2/v5/weight.js +238 -0
  221. package/dist/src/serialization/beast2/v5/weight.js.map +1 -0
  222. package/dist/src/serialization/crc32.d.ts +38 -0
  223. package/dist/src/serialization/crc32.d.ts.map +1 -0
  224. package/dist/src/serialization/crc32.js +70 -0
  225. package/dist/src/serialization/crc32.js.map +1 -0
  226. package/dist/src/serialization/crc32.spec.d.ts +6 -0
  227. package/dist/src/serialization/crc32.spec.d.ts.map +1 -0
  228. package/dist/src/serialization/crc32.spec.js +92 -0
  229. package/dist/src/serialization/crc32.spec.js.map +1 -0
  230. package/dist/src/serialization/east-inferred.spec.js +4 -0
  231. package/dist/src/serialization/east-inferred.spec.js.map +1 -1
  232. package/dist/src/serialization/east.d.ts.map +1 -1
  233. package/dist/src/serialization/east.js +134 -110
  234. package/dist/src/serialization/east.js.map +1 -1
  235. package/dist/src/serialization/east.spec.js +185 -4
  236. package/dist/src/serialization/east.spec.js.map +1 -1
  237. package/dist/src/serialization/east_text.d.ts +25 -0
  238. package/dist/src/serialization/east_text.d.ts.map +1 -0
  239. package/dist/src/serialization/east_text.js +29 -0
  240. package/dist/src/serialization/east_text.js.map +1 -0
  241. package/dist/src/serialization/index.d.ts +1 -1
  242. package/dist/src/serialization/index.d.ts.map +1 -1
  243. package/dist/src/types.d.ts +1 -1
  244. package/dist/src/types.d.ts.map +1 -1
  245. package/dist/src/types.js +7 -6
  246. package/dist/src/types.js.map +1 -1
  247. package/package.json +6 -3
@@ -0,0 +1,563 @@
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
+ * What a unit reads and writes: the files it names, through a {@link UnitIO}.
7
+ *
8
+ * `executeUnit` (`runner_exec.ts`) does a unit's work over a UnitIO rather
9
+ * than over a file system, so one implementation runs wherever a unit's files
10
+ * are: east-node's `exec` hands it this machine's files, and a browser an
11
+ * {@link InMemoryUnitIO} holding the unit and every file it names. A UnitIO is
12
+ * addressed by the paths the unit names, and reads and writes synchronously,
13
+ * since a compiled East body reads its lazily opened inputs without awaiting.
14
+ *
15
+ * The readers here load what a run unit names through a UnitIO: its program,
16
+ * by its file's extension, and its inputs, each decoded whole or opened lazily
17
+ * over its file as the unit's `decode` says, a manifest's segments read from
18
+ * the files beside it (see `runner_protocol.ts`). A unit whose host places
19
+ * segments as they are read (`fetch`) has its UnitIO asked for each segment
20
+ * file before it is read.
21
+ */
22
+ import {} from "./type_of_type.js";
23
+ import { none, some, variant } from "./containers/variant.js";
24
+ import { IRType } from "./ir.js";
25
+ import { AsyncEastIR, EastIR } from "./eastir.js";
26
+ import { decodeAsyncEastIR, decodeBeast2, decodeBeast2For, decodeEastIR, encodeBeast2SegmentsFor, isBeast2LazySafe, openBeast2LazyFor, readBeast2Extents, readBeast2Manifest, spliceBeast2, } from "./serialization/beast2/index.js";
27
+ import { decodeEastFor } from "./serialization/east.js";
28
+ import { decodeJSONFor } from "./serialization/json.js";
29
+ /** A path with its `.` and empty segments dropped and its `..` segments
30
+ * applied, so one file has one key: `a/./b//c/../d` is `a/b/d`. A leading
31
+ * `/` is kept, and `..` above it stays at it. */
32
+ function normalizePath(path) {
33
+ const absolute = path.startsWith("/");
34
+ const parts = [];
35
+ for (const part of path.split("/")) {
36
+ if (part === "" || part === ".")
37
+ continue;
38
+ if (part === ".." && parts.length > 0 && parts[parts.length - 1] !== "..") {
39
+ parts.pop();
40
+ }
41
+ else if (part !== ".." || !absolute) {
42
+ parts.push(part);
43
+ }
44
+ }
45
+ const joined = parts.join("/");
46
+ return absolute ? `/${joined}` : joined;
47
+ }
48
+ /** The directory a normalized path is in: `""` for the relative root and
49
+ * `"/"` for the absolute one, each its own parent. */
50
+ function parentOf(path) {
51
+ const slash = path.lastIndexOf("/");
52
+ if (slash < 0)
53
+ return "";
54
+ return slash === 0 ? "/" : path.slice(0, slash);
55
+ }
56
+ /**
57
+ * A {@link UnitIO} holding a unit and every file it names in memory: the IO a
58
+ * host with no file system gives `executeUnit`, a browser's Web Worker among
59
+ * them.
60
+ *
61
+ * @remarks
62
+ * Files are held by their paths, normalized (`./a/../b` is `b`), and a
63
+ * directory is there when a held file is in it or it was made. Writes copy the
64
+ * bytes they are given, so the files an execution writes are the IO's own,
65
+ * and {@link files} holds them once it is done — a host collects the unit's
66
+ * outputs from there.
67
+ *
68
+ * The IO holds every file the unit names, segments included, so it never asks
69
+ * a host for a segment: {@link segment} has nothing to do, and a segment that
70
+ * is not held is read as any absent file, and fails at once.
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * const io = new InMemoryUnitIO([
75
+ * ["unit.beast2", encodeBeast2For(UnitType)(unit)],
76
+ * ["program.beast2", encodeEastIR(program)],
77
+ * ["x.beast2", encodeBeast2For(IntegerType)(7n)],
78
+ * ]);
79
+ * const result = await executeUnit(unit, io, { platforms: () => [] });
80
+ * io.files.get("out.beast2"); // the output the unit names, as its runner wrote it
81
+ * ```
82
+ */
83
+ export class InMemoryUnitIO {
84
+ held = new Map();
85
+ /** Every directory there is: both roots, each held file's parents, and each
86
+ * one made. */
87
+ directories = new Set(["", "/"]);
88
+ /**
89
+ * @param files - the unit and every file it names, by the paths the unit
90
+ * names them by
91
+ */
92
+ constructor(files = []) {
93
+ for (const [path, bytes] of files) {
94
+ const key = normalizePath(path);
95
+ this.held.set(key, bytes);
96
+ for (let dir = parentOf(key); !this.directories.has(dir); dir = parentOf(dir))
97
+ this.directories.add(dir);
98
+ }
99
+ }
100
+ /** Every file the IO holds, by its normalized path: the files it was given,
101
+ * and those written since. */
102
+ get files() {
103
+ return this.held;
104
+ }
105
+ /** @inheritDoc */
106
+ read(path) {
107
+ const bytes = this.held.get(normalizePath(path));
108
+ if (bytes === undefined)
109
+ throw new Error(`no such file: ${path}`);
110
+ return bytes;
111
+ }
112
+ /** @inheritDoc */
113
+ size(path) {
114
+ return this.read(path).length;
115
+ }
116
+ /** @inheritDoc */
117
+ readRange(path, offset, length) {
118
+ return this.read(path).subarray(offset, offset + length);
119
+ }
120
+ /** Every segment is held already, so there is none to ask for. */
121
+ segment(_path, _fetch) { }
122
+ /** @inheritDoc */
123
+ list(path) {
124
+ const dir = normalizePath(path);
125
+ if (!this.directories.has(dir)) {
126
+ throw new Error(this.held.has(dir) ? `not a directory: ${path}` : `no such directory: ${path}`);
127
+ }
128
+ const prefix = dir === "" || dir === "/" ? dir : `${dir}/`;
129
+ const names = new Set();
130
+ for (const key of [...this.held.keys(), ...this.directories]) {
131
+ // The relative root lists relative paths only.
132
+ if (key === dir || !key.startsWith(prefix) || (prefix === "" && key.startsWith("/")))
133
+ continue;
134
+ names.add(key.slice(prefix.length).split("/")[0]);
135
+ }
136
+ return [...names].sort();
137
+ }
138
+ /** @inheritDoc */
139
+ makeDirectory(path) {
140
+ const made = [];
141
+ for (let dir = normalizePath(path); !this.directories.has(dir); dir = parentOf(dir)) {
142
+ if (this.held.has(dir))
143
+ throw new Error(`not a directory: ${dir}`);
144
+ made.push(dir);
145
+ }
146
+ for (const dir of made)
147
+ this.directories.add(dir);
148
+ }
149
+ /** @inheritDoc */
150
+ write(path, bytes) {
151
+ const key = normalizePath(path);
152
+ if (this.directories.has(key))
153
+ throw new Error(`is a directory: ${path}`);
154
+ const dir = parentOf(key);
155
+ if (!this.directories.has(dir))
156
+ throw new Error(`no such directory: ${dir}`);
157
+ this.held.set(key, bytes.slice());
158
+ }
159
+ }
160
+ /**
161
+ * Resolves every path a unit names — its program, inputs, parts, outputs,
162
+ * functions, the files an intake reads and writes, and its result — keeping
163
+ * the rest of the unit as it is.
164
+ *
165
+ * @remarks
166
+ * What east-c's `east_unit_read` does as it reads a unit: a host whose unit
167
+ * names paths relative to the unit file resolves them against that file's
168
+ * directory once, so its UnitIO and its messages see the paths the files are
169
+ * at.
170
+ *
171
+ * @param unit - the unit
172
+ * @param resolve - resolves one path the unit names
173
+ * @returns the unit, naming every file by its resolved path
174
+ *
175
+ * @example
176
+ * ```ts
177
+ * const unit = decodeBeast2For(UnitType)(readFileSync(unitPath));
178
+ * const base = dirname(resolve(unitPath));
179
+ * const resolved = resolveUnitPaths(unit, (path) => resolve(base, path));
180
+ * ```
181
+ */
182
+ export function resolveUnitPaths(unit, resolve) {
183
+ const output = (out) => {
184
+ switch (out.type) {
185
+ case "value": return variant("value", resolve(out.value));
186
+ case "array": return variant("array", resolve(out.value));
187
+ case "set": return variant("set", resolve(out.value));
188
+ case "dict": return variant("dict", {
189
+ dir: resolve(out.value.dir),
190
+ merge: out.value.merge.type === "some" ? some(resolve(out.value.merge.value)) : none,
191
+ });
192
+ case "fold": return variant("fold", {
193
+ path: resolve(out.value.path),
194
+ zero: resolve(out.value.zero),
195
+ combine: resolve(out.value.combine),
196
+ });
197
+ }
198
+ };
199
+ const work = (w) => {
200
+ switch (w.type) {
201
+ case "run": return variant("run", {
202
+ program: resolve(w.value.program),
203
+ inputs: w.value.inputs.map((path) => resolve(path)),
204
+ output: output(w.value.output),
205
+ decode: w.value.decode,
206
+ });
207
+ case "merge": return variant("merge", {
208
+ parts: w.value.parts.map((path) => resolve(path)),
209
+ range: w.value.range.type === "some" ? some(resolve(w.value.range.value)) : none,
210
+ output: output(w.value.output),
211
+ });
212
+ case "intake": return variant("intake", {
213
+ input: resolve(w.value.input),
214
+ type: resolve(w.value.type),
215
+ segments: w.value.segments,
216
+ output: resolve(w.value.output),
217
+ });
218
+ }
219
+ };
220
+ return {
221
+ work: work(unit.work),
222
+ platforms: unit.platforms,
223
+ threads: unit.threads,
224
+ fetch: unit.fetch,
225
+ result: resolve(unit.result),
226
+ };
227
+ }
228
+ /** A path's extension, `.beast2` of `dir/x.beast2`: the last segment's text
229
+ * from its last dot, after any trailing separators, or empty when that
230
+ * segment has no dot but a leading one. `/` and `\` both separate. */
231
+ function extensionOf(path) {
232
+ let end = path.length;
233
+ while (end > 0 && (path[end - 1] === "/" || path[end - 1] === "\\"))
234
+ end--;
235
+ const trimmed = path.slice(0, end);
236
+ const base = trimmed.slice(Math.max(trimmed.lastIndexOf("/"), trimmed.lastIndexOf("\\")) + 1);
237
+ if (base === "..")
238
+ return "";
239
+ const dot = base.lastIndexOf(".");
240
+ return dot > 0 ? base.slice(dot) : "";
241
+ }
242
+ /**
243
+ * The encoding a file a unit names holds, by its extension: `.beast2` or
244
+ * `.beast` a beast2 blob, `.east` East text, `.json` JSON.
245
+ *
246
+ * @param path - the file
247
+ * @returns its encoding
248
+ * @throws {Error} When the extension is none of those, naming it.
249
+ */
250
+ export function unitFileFormat(path) {
251
+ const ext = extensionOf(path).toLowerCase();
252
+ switch (ext) {
253
+ case ".beast2":
254
+ case ".beast":
255
+ return "beast2";
256
+ case ".east":
257
+ return "east";
258
+ case ".json":
259
+ return "json";
260
+ default:
261
+ throw new Error(`Unsupported file extension "${ext}". Supported extensions: .beast2, .beast, .east, .json`);
262
+ }
263
+ }
264
+ /** The IR decoders of each encoding, built on first use: East text's parser
265
+ * over the IR type is costly to build, and most hosts never meet one. */
266
+ let irDecoders;
267
+ /** Decodes a program's IR from a file's bytes in the file's encoding. */
268
+ function decodeProgramIR(format, data) {
269
+ irDecoders ??= {
270
+ beast2: decodeBeast2For(IRType),
271
+ east: decodeEastFor(IRType),
272
+ json: decodeJSONFor(IRType),
273
+ };
274
+ return irDecoders[format](data);
275
+ }
276
+ /**
277
+ * Loads a unit's program: an IR file holding an East function or async
278
+ * function, in any encoding a unit may name ({@link unitFileFormat}).
279
+ *
280
+ * @remarks
281
+ * A beast2 program carries its source map, so an error it raises names where
282
+ * its source was written; East text and JSON carry none.
283
+ *
284
+ * @param io - the unit's files
285
+ * @param path - the program's file
286
+ * @returns the program, ready to compile
287
+ * @throws {Error} When the extension is not one a unit may name, the file
288
+ * cannot be read or decoded as IR, or the IR is not a function.
289
+ */
290
+ export function loadUnitProgram(io, path) {
291
+ const format = unitFileFormat(path);
292
+ const data = io.read(path);
293
+ // The root variant says whether the program is sync or async.
294
+ const ir = decodeProgramIR(format, data);
295
+ if (format === "beast2") {
296
+ if (ir.type === "Function")
297
+ return decodeEastIR(data);
298
+ if (ir.type === "AsyncFunction")
299
+ return decodeAsyncEastIR(data);
300
+ }
301
+ else {
302
+ if (ir.type === "Function")
303
+ return new EastIR(ir);
304
+ if (ir.type === "AsyncFunction")
305
+ return new AsyncEastIR(ir);
306
+ }
307
+ throw new Error(`IR file must contain a function or async function, got "${ir.type}"`);
308
+ }
309
+ /**
310
+ * A staged manifest's segment file: `<manifest>.segments/<hash>.beast2`, the
311
+ * layout every runner's opener reads and a store takes in by linking.
312
+ *
313
+ * @param manifest - the manifest's file
314
+ * @param hash - the segment's SHA-256, as the manifest names it
315
+ * @returns the segment's file
316
+ * @internal
317
+ */
318
+ export function segmentPath(manifest, hash) {
319
+ return `${manifest}.segments/${hash}.beast2`;
320
+ }
321
+ /**
322
+ * Reads exactly `length` bytes of a file from `offset`, failing a range the
323
+ * file ends inside, as a positioned reader does.
324
+ *
325
+ * @param io - the unit's files
326
+ * @param path - the file
327
+ * @param offset - the first byte's offset
328
+ * @param length - how many bytes to read
329
+ * @returns the bytes
330
+ * @throws {Error} When the file ends before the range does.
331
+ * @internal
332
+ */
333
+ export function readUnitRange(io, path, offset, length) {
334
+ const bytes = io.readRange(path, offset, length);
335
+ if (bytes.length !== length)
336
+ throw new Error(`beast2: short read at offset ${offset + bytes.length}`);
337
+ return bytes;
338
+ }
339
+ /** Whether a file is there to read. */
340
+ function holds(io, path) {
341
+ try {
342
+ io.size(path);
343
+ return true;
344
+ }
345
+ catch {
346
+ return false;
347
+ }
348
+ }
349
+ /** Ranged access to a file through `io`, adding every byte it reads to
350
+ * `counter`. */
351
+ function countedReader(io, path, counter) {
352
+ return {
353
+ size: io.size(path),
354
+ read(offset, length) {
355
+ const bytes = readUnitRange(io, path, offset, length);
356
+ counter.bytes += length;
357
+ return bytes;
358
+ },
359
+ };
360
+ }
361
+ /** The bytes each lazily opened input has read so far, for a runner's
362
+ * account of its inputs. */
363
+ const lazyReads = new WeakMap();
364
+ /**
365
+ * The bytes an input {@link openUnitInputLazy} opened has read so far: its
366
+ * geometry (tail and head), every fence it probed and each segment frame it
367
+ * decoded, across its file and, for a manifest, every segment file it read.
368
+ *
369
+ * @param value - an input's value
370
+ * @returns the byte count, or `undefined` for a value not opened lazily
371
+ */
372
+ export function lazyInputBytesRead(value) {
373
+ return typeof value === "object" && value !== null ? lazyReads.get(value)?.() : undefined;
374
+ }
375
+ /**
376
+ * The bytes an input stands for: the collection a manifest names — the
377
+ * manifest and every segment file — or any other file's own size.
378
+ *
379
+ * @remarks
380
+ * What a runner's verbose account weighs an input at. A manifest is a few
381
+ * dozen bytes per segment whatever the collection weighs, so its file's size
382
+ * would say nothing of what the input holds. The manifest is recognised
383
+ * through ranged reads, so a large blob is never read to learn that it is not
384
+ * one.
385
+ *
386
+ * @param io - the unit's files
387
+ * @param path - the input's file
388
+ * @returns the byte count
389
+ * @throws {Error} When the extension is not one a unit may name, or there is
390
+ * no file at `path`.
391
+ */
392
+ export function unitInputBytes(io, path) {
393
+ if (unitFileFormat(path) !== "beast2")
394
+ return io.size(path);
395
+ try {
396
+ const reader = countedReader(io, path, { bytes: 0 });
397
+ const manifest = readBeast2Manifest(reader);
398
+ if (manifest === null)
399
+ return reader.size;
400
+ return manifest.entries.reduce((sum, entry) => sum + Number(entry.bytes), reader.size);
401
+ }
402
+ catch {
403
+ return io.size(path);
404
+ }
405
+ }
406
+ /** One blob out of a manifest's segment files, each asked for when the unit's
407
+ * host places segments as they are read: the segments share one header, so
408
+ * splicing them decodes nothing and is byte-identical to the blob they were
409
+ * cut from. An empty collection names no segment, and is the Writer's own
410
+ * empty blob. */
411
+ function spliceManifest(io, path, manifest, fetch) {
412
+ if (manifest.entries.length === 0)
413
+ return encodeBeast2SegmentsFor(manifest.type)([]);
414
+ return spliceBeast2(manifest.entries.map((entry) => {
415
+ const file = segmentPath(path, entry.hash);
416
+ io.segment(file, fetch);
417
+ return io.read(file);
418
+ }));
419
+ }
420
+ /**
421
+ * Loads an input decoded whole, and frozen: deeply immutable from
422
+ * construction, a mutating builtin throwing the uniform copy-first error, and
423
+ * compared by value under East `Is`, as every task input is.
424
+ *
425
+ * @remarks
426
+ * A beast2 file is self-describing; a manifest is the collection it names,
427
+ * its segments spliced from the files beside it, each asked for first when the
428
+ * unit's host places segments as they are read. East text and JSON decode as
429
+ * `type`.
430
+ *
431
+ * @param io - the unit's files
432
+ * @param path - the input's file
433
+ * @param type - the parameter's type
434
+ * @param fetch - whether the unit's host places segments as they are read
435
+ * @returns the input's value
436
+ * @throws {Error} When the extension is not one a unit may name, or the file,
437
+ * or a segment its manifest names, cannot be read or decoded.
438
+ */
439
+ export function loadUnitInput(io, path, type, fetch) {
440
+ const format = unitFileFormat(path);
441
+ const data = io.read(path);
442
+ switch (format) {
443
+ case "beast2": {
444
+ const manifest = readBeast2Manifest(data);
445
+ if (manifest !== null)
446
+ return decodeBeast2(spliceManifest(io, path, manifest, fetch), { frozen: true }).value;
447
+ return decodeBeast2(data, { frozen: true }).value;
448
+ }
449
+ case "east":
450
+ return decodeEastFor(type, true)(data);
451
+ case "json":
452
+ return decodeJSONFor(type, true)(data);
453
+ }
454
+ }
455
+ /**
456
+ * Opens an input lazily, frozen, when it can be: a beast2 v5 collection blob
457
+ * carrying a segment index, or a manifest over its segment files. Its size,
458
+ * iteration and keyed reads are served a segment at a time; any other
459
+ * operation reads it whole, once, when it first needs it, to the eager value's
460
+ * exact semantics.
461
+ *
462
+ * @remarks
463
+ * The file is never read whole: the value pages segment frames from it through
464
+ * ranged reads, and a manifest's segments are read from their own files, each
465
+ * asked for as it is first read when the unit's host places segments as they
466
+ * are read. A unit whose host does not, and whose manifest names a segment not
467
+ * there, is refused here, so its input decodes whole and fails there.
468
+ *
469
+ * Frozen is what makes a lazy open safe for any nested element shape, since a
470
+ * frozen value cannot be written through; an element holding a Ref or a
471
+ * function still cannot be, and is refused ({@link isBeast2LazySafe}).
472
+ *
473
+ * @param io - the unit's files
474
+ * @param path - the input's file
475
+ * @param options - the unit's `fetch`, the host's resident-memory gauge, and
476
+ * the decoded weight the input's pager keeps
477
+ * @returns the lazy collection value, or `undefined` when the input cannot be
478
+ * opened lazily — another encoding, a version 4 or index-less blob, a root
479
+ * that is no collection, segments that alias one another, an unsafe element
480
+ * shape, or a file that is not there — for the caller to decode it whole
481
+ */
482
+ export function openUnitInputLazy(io, path, options) {
483
+ if (unitFileFormat(path) !== "beast2")
484
+ return undefined;
485
+ const counter = { bytes: 0 };
486
+ const lazy = {
487
+ frozen: true,
488
+ ...(options.resident !== undefined && { resident: options.resident }),
489
+ ...(options.cacheBytes !== undefined && { cacheBytes: options.cacheBytes }),
490
+ };
491
+ try {
492
+ const reader = countedReader(io, path, counter);
493
+ // A file whose value is a manifest is the collection it names, its
494
+ // segments the files beside it: nothing reads a segment the body does not.
495
+ const manifest = readBeast2Manifest(reader);
496
+ let value;
497
+ if (manifest !== null) {
498
+ if (!isBeast2LazySafe(manifest.type, { frozen: true }))
499
+ return undefined;
500
+ const entries = manifest.entries;
501
+ if (!options.fetch && !entries.every((entry) => holds(io, segmentPath(path, entry.hash))))
502
+ return undefined;
503
+ const readers = new Array(entries.length);
504
+ const source = {
505
+ manifest,
506
+ segment(i) {
507
+ if (readers[i] === undefined) {
508
+ const file = segmentPath(path, entries[i].hash);
509
+ io.segment(file, options.fetch);
510
+ readers[i] = countedReader(io, file, counter);
511
+ }
512
+ return readers[i];
513
+ },
514
+ };
515
+ value = openBeast2LazyFor(manifest.type, lazy)(source);
516
+ }
517
+ else {
518
+ const extents = readBeast2Extents(reader);
519
+ if (!extents.selfContained || !isBeast2LazySafe(extents.typeValue, { frozen: true }))
520
+ return undefined;
521
+ value = openBeast2LazyFor(extents.typeValue, lazy)(reader);
522
+ }
523
+ lazyReads.set(value, () => counter.bytes);
524
+ return value;
525
+ }
526
+ catch {
527
+ return undefined;
528
+ }
529
+ }
530
+ /**
531
+ * Opens a program's inputs as the unit's `decode` says, every one frozen.
532
+ *
533
+ * @remarks
534
+ * With `lazy`, each collection input opens lazily whatever it weighs
535
+ * ({@link openUnitInputLazy}); one that cannot, and every input with `whole`,
536
+ * is decoded whole before the program runs ({@link loadUnitInput}), what that
537
+ * added to resident memory measured for a report.
538
+ *
539
+ * @param io - the unit's files
540
+ * @param paths - the input files, in parameter order
541
+ * @param types - the parameters' types
542
+ * @param decode - how the collection inputs are read
543
+ * @param options - the unit's `fetch`, the host's gauge, the decoded weight a
544
+ * lazy input's pager keeps, and the report
545
+ * @returns the inputs, in parameter order
546
+ * @throws {Error} When an input decoded whole cannot be read or decoded.
547
+ */
548
+ export function openUnitInputs(io, paths, types, decode, options) {
549
+ const { report, resident } = options;
550
+ return paths.map((path, i) => {
551
+ const lazy = decode.type === "lazy" ? openUnitInputLazy(io, path, options) : undefined;
552
+ if (lazy !== undefined) {
553
+ report?.openedLazily(i);
554
+ return lazy;
555
+ }
556
+ const measured = report !== undefined && resident !== undefined;
557
+ const before = measured ? resident() : 0;
558
+ const value = loadUnitInput(io, path, types[i], options.fetch);
559
+ report?.decodedWhole(i, measured ? resident() - before : 0);
560
+ return value;
561
+ });
562
+ }
563
+ //# sourceMappingURL=runner_io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner_io.js","sourceRoot":"","sources":["../../src/runner_io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
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
+ export {};
6
+ //# sourceMappingURL=runner_io.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner_io.spec.d.ts","sourceRoot":"","sources":["../../src/runner_io.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}