@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.
- package/dist/src/analyze.d.ts.map +1 -1
- package/dist/src/analyze.js +48 -0
- package/dist/src/analyze.js.map +1 -1
- package/dist/src/ast_to_ir.coerce_to.spec.js +4 -4
- package/dist/src/ast_to_ir.coerce_to.spec.js.map +1 -1
- package/dist/src/ast_to_ir.d.ts +6 -1
- package/dist/src/ast_to_ir.d.ts.map +1 -1
- package/dist/src/ast_to_ir.js +20 -7
- package/dist/src/ast_to_ir.js.map +1 -1
- package/dist/src/builtins.d.ts +1 -1
- package/dist/src/builtins.d.ts.map +1 -1
- package/dist/src/builtins.js +52 -0
- package/dist/src/builtins.js.map +1 -1
- package/dist/src/codegen/canonical.d.ts +37 -0
- package/dist/src/codegen/canonical.d.ts.map +1 -0
- package/dist/src/codegen/canonical.js +208 -0
- package/dist/src/codegen/canonical.js.map +1 -0
- package/dist/src/codegen/codegen.spec.js +132 -201
- package/dist/src/codegen/codegen.spec.js.map +1 -1
- package/dist/src/codegen/printer.d.ts.map +1 -1
- package/dist/src/codegen/printer.js +142 -24
- package/dist/src/codegen/printer.js.map +1 -1
- package/dist/src/codegen/spellings.d.ts +4 -1
- package/dist/src/codegen/spellings.d.ts.map +1 -1
- package/dist/src/codegen/spellings.js +5 -1
- package/dist/src/codegen/spellings.js.map +1 -1
- package/dist/src/compile/builtins/index.d.ts.map +1 -1
- package/dist/src/compile/builtins/index.js +2 -0
- package/dist/src/compile/builtins/index.js.map +1 -1
- package/dist/src/compile/builtins/primitives.d.ts.map +1 -1
- package/dist/src/compile/builtins/primitives.js +2 -1
- package/dist/src/compile/builtins/primitives.js.map +1 -1
- package/dist/src/compile/builtins/query.d.ts +10 -0
- package/dist/src/compile/builtins/query.d.ts.map +1 -0
- package/dist/src/compile/builtins/query.js +5 -0
- package/dist/src/compile/builtins/query.js.map +1 -0
- package/dist/src/expr/block.d.ts.map +1 -1
- package/dist/src/expr/block.js +2 -1
- package/dist/src/expr/block.js.map +1 -1
- package/dist/src/expr/index.d.ts +75 -47
- package/dist/src/expr/index.d.ts.map +1 -1
- package/dist/src/expr/index.js +31 -0
- package/dist/src/expr/index.js.map +1 -1
- package/dist/src/expr/libs/datetime.d.ts +20 -20
- package/dist/src/expr/libs/datetime.d.ts.map +1 -1
- package/dist/src/expr/libs/datetime.js +208 -167
- package/dist/src/expr/libs/datetime.js.map +1 -1
- package/dist/src/expr/libs/float.d.ts +15 -15
- package/dist/src/expr/libs/float.d.ts.map +1 -1
- package/dist/src/expr/libs/float.js +298 -267
- package/dist/src/expr/libs/float.js.map +1 -1
- package/dist/src/expr/libs/integer.d.ts +12 -12
- package/dist/src/expr/libs/integer.d.ts.map +1 -1
- package/dist/src/expr/libs/integer.js +219 -194
- package/dist/src/expr/libs/integer.js.map +1 -1
- package/dist/src/expr/libs/lazy.d.ts +28 -0
- package/dist/src/expr/libs/lazy.d.ts.map +1 -0
- package/dist/src/expr/libs/lazy.js +55 -0
- package/dist/src/expr/libs/lazy.js.map +1 -0
- package/dist/src/expr/libs/lazy.spec.d.ts +6 -0
- package/dist/src/expr/libs/lazy.spec.d.ts.map +1 -0
- package/dist/src/expr/libs/lazy.spec.js +102 -0
- package/dist/src/expr/libs/lazy.spec.js.map +1 -0
- package/dist/src/expr/query.d.ts +60 -0
- package/dist/src/expr/query.d.ts.map +1 -0
- package/dist/src/expr/query.js +84 -0
- package/dist/src/expr/query.js.map +1 -0
- package/dist/src/functions.crossimport.spec.js +8 -0
- package/dist/src/functions.crossimport.spec.js.map +1 -1
- package/dist/src/functions.d.ts +45 -8
- package/dist/src/functions.d.ts.map +1 -1
- package/dist/src/functions.js +138 -28
- package/dist/src/functions.js.map +1 -1
- package/dist/src/functions.spec.js +60 -2
- package/dist/src/functions.spec.js.map +1 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/internal.d.ts +4 -0
- package/dist/src/internal.d.ts.map +1 -1
- package/dist/src/internal.js +9 -0
- package/dist/src/internal.js.map +1 -1
- package/dist/src/location.d.ts +22 -0
- package/dist/src/location.d.ts.map +1 -1
- package/dist/src/location.js +31 -0
- package/dist/src/location.js.map +1 -1
- package/dist/src/naming.d.ts +5 -3
- package/dist/src/naming.d.ts.map +1 -1
- package/dist/src/naming.js.map +1 -1
- package/dist/src/portable.spec.d.ts +6 -0
- package/dist/src/portable.spec.d.ts.map +1 -0
- package/dist/src/portable.spec.js +181 -0
- package/dist/src/portable.spec.js.map +1 -0
- package/dist/src/query/evaluate.d.ts +98 -0
- package/dist/src/query/evaluate.d.ts.map +1 -0
- package/dist/src/query/evaluate.js +193 -0
- package/dist/src/query/evaluate.js.map +1 -0
- package/dist/src/query/index.d.ts +17 -0
- package/dist/src/query/index.d.ts.map +1 -0
- package/dist/src/query/index.js +17 -0
- package/dist/src/query/index.js.map +1 -0
- package/dist/src/query/jq/catalog.d.ts +174 -0
- package/dist/src/query/jq/catalog.d.ts.map +1 -0
- package/dist/src/query/jq/catalog.js +1740 -0
- package/dist/src/query/jq/catalog.js.map +1 -0
- package/dist/src/query/jq/check.d.ts +210 -0
- package/dist/src/query/jq/check.d.ts.map +1 -0
- package/dist/src/query/jq/check.js +2261 -0
- package/dist/src/query/jq/check.js.map +1 -0
- package/dist/src/query/jq/complete.d.ts +89 -0
- package/dist/src/query/jq/complete.d.ts.map +1 -0
- package/dist/src/query/jq/complete.js +320 -0
- package/dist/src/query/jq/complete.js.map +1 -0
- package/dist/src/query/jq/describe.d.ts +53 -0
- package/dist/src/query/jq/describe.d.ts.map +1 -0
- package/dist/src/query/jq/describe.js +149 -0
- package/dist/src/query/jq/describe.js.map +1 -0
- package/dist/src/query/jq/lex.d.ts +118 -0
- package/dist/src/query/jq/lex.d.ts.map +1 -0
- package/dist/src/query/jq/lex.js +371 -0
- package/dist/src/query/jq/lex.js.map +1 -0
- package/dist/src/query/jq/literals.d.ts +49 -0
- package/dist/src/query/jq/literals.d.ts.map +1 -0
- package/dist/src/query/jq/literals.js +78 -0
- package/dist/src/query/jq/literals.js.map +1 -0
- package/dist/src/query/jq/messages.d.ts +126 -0
- package/dist/src/query/jq/messages.d.ts.map +1 -0
- package/dist/src/query/jq/messages.js +172 -0
- package/dist/src/query/jq/messages.js.map +1 -0
- package/dist/src/query/jq/parse.d.ts +70 -0
- package/dist/src/query/jq/parse.d.ts.map +1 -0
- package/dist/src/query/jq/parse.js +1013 -0
- package/dist/src/query/jq/parse.js.map +1 -0
- package/dist/src/query/jq/print.d.ts +59 -0
- package/dist/src/query/jq/print.d.ts.map +1 -0
- package/dist/src/query/jq/print.js +587 -0
- package/dist/src/query/jq/print.js.map +1 -0
- package/dist/src/query/jq/shapes.d.ts +345 -0
- package/dist/src/query/jq/shapes.d.ts.map +1 -0
- package/dist/src/query/jq/shapes.js +584 -0
- package/dist/src/query/jq/shapes.js.map +1 -0
- package/dist/src/query/jq/spans.d.ts +133 -0
- package/dist/src/query/jq/spans.d.ts.map +1 -0
- package/dist/src/query/jq/spans.js +195 -0
- package/dist/src/query/jq/spans.js.map +1 -0
- package/dist/src/query/jq/split.d.ts +334 -0
- package/dist/src/query/jq/split.d.ts.map +1 -0
- package/dist/src/query/jq/split.js +2108 -0
- package/dist/src/query/jq/split.js.map +1 -0
- package/dist/src/query/jq/strftime.d.ts +20 -0
- package/dist/src/query/jq/strftime.d.ts.map +1 -0
- package/dist/src/query/jq/strftime.js +65 -0
- package/dist/src/query/jq/strftime.js.map +1 -0
- package/dist/src/query/jq/summary.d.ts +139 -0
- package/dist/src/query/jq/summary.d.ts.map +1 -0
- package/dist/src/query/jq/summary.js +222 -0
- package/dist/src/query/jq/summary.js.map +1 -0
- package/dist/src/query/jq/translate-builtins.d.ts +21 -0
- package/dist/src/query/jq/translate-builtins.d.ts.map +1 -0
- package/dist/src/query/jq/translate-builtins.js +1873 -0
- package/dist/src/query/jq/translate-builtins.js.map +1 -0
- package/dist/src/query/jq/translate.d.ts +627 -0
- package/dist/src/query/jq/translate.d.ts.map +1 -0
- package/dist/src/query/jq/translate.js +3364 -0
- package/dist/src/query/jq/translate.js.map +1 -0
- package/dist/src/query/types.d.ts +505 -0
- package/dist/src/query/types.d.ts.map +1 -0
- package/dist/src/query/types.js +231 -0
- package/dist/src/query/types.js.map +1 -0
- package/dist/src/runner_exec.d.ts +134 -0
- package/dist/src/runner_exec.d.ts.map +1 -0
- package/dist/src/runner_exec.js +371 -0
- package/dist/src/runner_exec.js.map +1 -0
- package/dist/src/runner_exec.spec.d.ts +6 -0
- package/dist/src/runner_exec.spec.d.ts.map +1 -0
- package/dist/src/runner_exec.spec.js +198 -0
- package/dist/src/runner_exec.spec.js.map +1 -0
- package/dist/src/runner_io.d.ts +370 -0
- package/dist/src/runner_io.d.ts.map +1 -0
- package/dist/src/runner_io.js +563 -0
- package/dist/src/runner_io.js.map +1 -0
- package/dist/src/runner_io.spec.d.ts +6 -0
- package/dist/src/runner_io.spec.d.ts.map +1 -0
- package/dist/src/runner_io.spec.js +224 -0
- package/dist/src/runner_io.spec.js.map +1 -0
- package/dist/src/runner_merge.d.ts +95 -0
- package/dist/src/runner_merge.d.ts.map +1 -0
- package/dist/src/runner_merge.js +238 -0
- package/dist/src/runner_merge.js.map +1 -0
- package/dist/src/runner_protocol.d.ts +11 -4
- package/dist/src/runner_protocol.d.ts.map +1 -1
- package/dist/src/runner_protocol.js +11 -4
- package/dist/src/runner_protocol.js.map +1 -1
- package/dist/src/serialization/beast2/index.d.ts +1 -1
- package/dist/src/serialization/beast2/index.d.ts.map +1 -1
- package/dist/src/serialization/beast2/index.js.map +1 -1
- package/dist/src/serialization/beast2/v5/frames.d.ts +10 -6
- package/dist/src/serialization/beast2/v5/frames.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/frames.js +10 -6
- package/dist/src/serialization/beast2/v5/frames.js.map +1 -1
- package/dist/src/serialization/beast2/v5/frames.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/frames.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/frames.spec.js +42 -0
- package/dist/src/serialization/beast2/v5/frames.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/index.spec.js +108 -0
- package/dist/src/serialization/beast2/v5/index.spec.js.map +1 -1
- package/dist/src/serialization/beast2/v5/lazy.d.ts +12 -7
- package/dist/src/serialization/beast2/v5/lazy.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/lazy.js +16 -6
- package/dist/src/serialization/beast2/v5/lazy.js.map +1 -1
- package/dist/src/serialization/beast2/v5/lazy.spec.js +159 -18
- package/dist/src/serialization/beast2/v5/lazy.spec.js.map +1 -1
- package/dist/src/serialization/beast2/v5/stream.d.ts +110 -21
- package/dist/src/serialization/beast2/v5/stream.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/stream.js +153 -42
- package/dist/src/serialization/beast2/v5/stream.js.map +1 -1
- package/dist/src/serialization/beast2/v5/weight.d.ts +36 -0
- package/dist/src/serialization/beast2/v5/weight.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/weight.js +238 -0
- package/dist/src/serialization/beast2/v5/weight.js.map +1 -0
- package/dist/src/serialization/crc32.d.ts +38 -0
- package/dist/src/serialization/crc32.d.ts.map +1 -0
- package/dist/src/serialization/crc32.js +70 -0
- package/dist/src/serialization/crc32.js.map +1 -0
- package/dist/src/serialization/crc32.spec.d.ts +6 -0
- package/dist/src/serialization/crc32.spec.d.ts.map +1 -0
- package/dist/src/serialization/crc32.spec.js +92 -0
- package/dist/src/serialization/crc32.spec.js.map +1 -0
- package/dist/src/serialization/east-inferred.spec.js +4 -0
- package/dist/src/serialization/east-inferred.spec.js.map +1 -1
- package/dist/src/serialization/east.d.ts.map +1 -1
- package/dist/src/serialization/east.js +134 -110
- package/dist/src/serialization/east.js.map +1 -1
- package/dist/src/serialization/east.spec.js +185 -4
- package/dist/src/serialization/east.spec.js.map +1 -1
- package/dist/src/serialization/east_text.d.ts +25 -0
- package/dist/src/serialization/east_text.d.ts.map +1 -0
- package/dist/src/serialization/east_text.js +29 -0
- package/dist/src/serialization/east_text.js.map +1 -0
- package/dist/src/serialization/index.d.ts +1 -1
- package/dist/src/serialization/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +7 -6
- package/dist/src/types.js.map +1 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"runner_io.spec.d.ts","sourceRoot":"","sources":["../../src/runner_io.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|