@elaraai/east-node-cli 1.0.82 → 1.0.84
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/README.md +30 -13
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +27 -5
- package/dist/cli.js.map +1 -1
- package/dist/exec.d.ts +6 -3
- package/dist/exec.d.ts.map +1 -1
- package/dist/exec.js +16 -16
- package/dist/exec.js.map +1 -1
- package/dist/exec.spec.js +64 -17
- package/dist/exec.spec.js.map +1 -1
- package/dist/loader.d.ts +20 -6
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +55 -16
- package/dist/loader.js.map +1 -1
- package/dist/loader.spec.js +140 -23
- package/dist/loader.spec.js.map +1 -1
- package/dist/merge.d.ts.map +1 -1
- package/dist/merge.js +4 -3
- package/dist/merge.js.map +1 -1
- package/dist/runner.d.ts +57 -10
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +103 -37
- package/dist/runner.js.map +1 -1
- package/dist/runner.spec.js +107 -60
- package/dist/runner.spec.js.map +1 -1
- package/package.json +3 -3
package/dist/runner.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
3
|
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
|
-
import { type UnitResult } from '@elaraai/east';
|
|
5
|
+
import { type UnitDecode, type UnitResult } from '@elaraai/east';
|
|
6
6
|
import type { PlatformFunction, EastTypeValue } from '@elaraai/east/internal';
|
|
7
7
|
/** A file's size for the verbose account, or `?` when it cannot be read. @internal */
|
|
8
8
|
export declare function formatFileSize(path: string): string;
|
|
@@ -25,8 +25,48 @@ export declare function reportInput(i: number, path: string, type: EastTypeValue
|
|
|
25
25
|
*/
|
|
26
26
|
export declare function reportInputLazy(i: number): void;
|
|
27
27
|
/**
|
|
28
|
-
* Prints
|
|
29
|
-
*
|
|
28
|
+
* Prints the verbose account of an input decoded whole as it loaded: the
|
|
29
|
+
* growth in resident memory across its decode — what it holds in memory, as a
|
|
30
|
+
* runner that loads its inputs first sees it — beside what it weighs on disk,
|
|
31
|
+
* since a nested collection decodes at many times that.
|
|
32
|
+
*
|
|
33
|
+
* @param i - the input's position
|
|
34
|
+
* @param bytes - the growth in resident memory, in bytes
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export declare function reportInputWhole(i: number, bytes: number): void;
|
|
38
|
+
/**
|
|
39
|
+
* Opens a program's inputs, always frozen: task inputs are immutable, and
|
|
40
|
+
* mutating one throws the uniform copy-first error.
|
|
41
|
+
*
|
|
42
|
+
* With `decode` lazy, each beast2 collection input opens as a paged value
|
|
43
|
+
* whatever it weighs, so a read decodes only the segments it reaches and an
|
|
44
|
+
* operation the pager cannot serve decodes it whole, once, when it first needs
|
|
45
|
+
* it; frozen collapses the shape gate, so nested element shapes open lazily
|
|
46
|
+
* too. With `whole`, every input is decoded before the program runs. An input
|
|
47
|
+
* that cannot open lazily — another format, an index-less blob, an element
|
|
48
|
+
* shape holding a Ref or a function — is decoded whole either way. A manifest
|
|
49
|
+
* is the collection it names, its segments the files beside it.
|
|
50
|
+
*
|
|
51
|
+
* @param paths - the input files, in parameter order
|
|
52
|
+
* @param types - the parameters' types
|
|
53
|
+
* @param decode - how the collection inputs are read
|
|
54
|
+
* @param verbose - print how each input opened: lazily, or decoded whole and
|
|
55
|
+
* the resident memory it added
|
|
56
|
+
* @returns the inputs, in parameter order
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
export declare function openInputs(paths: readonly string[], types: readonly EastTypeValue[], decode: UnitDecode, verbose: boolean): unknown[];
|
|
60
|
+
/**
|
|
61
|
+
* Prints what reading a lazily opened input came to; nothing for an input
|
|
62
|
+
* decoded whole as it loaded.
|
|
63
|
+
*
|
|
64
|
+
* An operation the pager cannot serve decoded the input whole, and says what
|
|
65
|
+
* that added to resident memory; reads that decoded segments again, beyond the
|
|
66
|
+
* ones the pager keeps, say so, since decoding the input whole would decode
|
|
67
|
+
* each once; any other reads say the segments they decoded and the fences
|
|
68
|
+
* they probed, and then the bytes they read, against what the input weighs.
|
|
69
|
+
* east-c and east-py say each in the same words, but for the bytes read.
|
|
30
70
|
*
|
|
31
71
|
* @param i - the input's position
|
|
32
72
|
* @param path - its file
|
|
@@ -46,16 +86,23 @@ export declare function reportInputReads(i: number, path: string, value: unknown
|
|
|
46
86
|
export declare class UsageError extends Error {
|
|
47
87
|
constructor(message: string);
|
|
48
88
|
}
|
|
49
|
-
/** Resolves the lazy-open threshold: the environment, else the default. An
|
|
50
|
-
* unset or empty `EAST_LAZY_INPUT_BYTES` falls through to the 64 MiB default
|
|
51
|
-
* (`Number('')` is `0`, which would silently DISABLE lazy opening); invalid
|
|
52
|
-
* or negative values fall through too, matching east-c and east-py. Exported
|
|
53
|
-
* for `exec` and the spec. @internal */
|
|
54
|
-
export declare function lazyThreshold(): number;
|
|
55
89
|
/**
|
|
56
90
|
* Runs an East IR program.
|
|
91
|
+
*
|
|
92
|
+
* @param irPath - the program's IR file
|
|
93
|
+
* @param platformFns - the platform functions it may call
|
|
94
|
+
* @param packages - the platform packages they came from, for the verbose
|
|
95
|
+
* account
|
|
96
|
+
* @param inputPaths - one input file per parameter, in order
|
|
97
|
+
* @param outputPath - where the result is written, in its extension's format;
|
|
98
|
+
* without it the result prints as East text
|
|
99
|
+
* @param verbose - print where the time went, the peak memory and how each
|
|
100
|
+
* input opened
|
|
101
|
+
* @param decode - how the collection inputs are read: lazily (the default), or
|
|
102
|
+
* decoded whole before the program runs
|
|
103
|
+
* @returns the result, when it is not written to `outputPath`
|
|
57
104
|
*/
|
|
58
|
-
export declare function runProgram(irPath: string, platformFns: PlatformFunction[], packages: string[], inputPaths: string[], outputPath?: string, verbose?: boolean): Promise<unknown>;
|
|
105
|
+
export declare function runProgram(irPath: string, platformFns: PlatformFunction[], packages: string[], inputPaths: string[], outputPath?: string, verbose?: boolean, decode?: UnitDecode): Promise<unknown>;
|
|
59
106
|
/** A compiled `(K, V, V) -> V` fold of equal keys. */
|
|
60
107
|
export type MergeFunction = (key: unknown, acc: unknown, value: unknown) => unknown;
|
|
61
108
|
/**
|
package/dist/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAUH,KAAK,UAAU,EACf,KAAK,UAAU,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAa9E,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAQD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAG9E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAE/C;AAeD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAE/D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,aAAa,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,CAYrI;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAc9E;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAW,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAI9B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,gBAAgB,EAAE,EAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM,EAAE,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,UAAQ,EACf,MAAM,GAAE,UAAkC,GAC3C,OAAO,CAAC,OAAO,CAAC,CAyFlB;AAED,sDAAsD;AACtD,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAEpF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAejK;AAqBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAUpD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAQlC"}
|
package/dist/runner.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { readFileSync, statSync, writeFileSync } from 'fs';
|
|
6
6
|
import { extname } from 'path';
|
|
7
|
-
import { EastIR, encodeBeast2For, encodeBeast2PagedFor, encodeEastFor, encodeJSONFor, isTypeValueEqual, printFor, variant, } from '@elaraai/east';
|
|
7
|
+
import { EastIR, beast2LazyStats, encodeBeast2For, encodeBeast2PagedFor, encodeEastFor, encodeJSONFor, isTypeValueEqual, printFor, variant, } from '@elaraai/east';
|
|
8
8
|
import { printTypeValue } from '@elaraai/east/internal';
|
|
9
9
|
import { inputBytes, lazyInputBytesRead, loadEastIR, loadInput, loadInputLazy } from './loader.js';
|
|
10
10
|
function now() { return process.hrtime.bigint(); }
|
|
@@ -59,8 +59,76 @@ export function reportInputLazy(i) {
|
|
|
59
59
|
console.error(` input ${i}: opened lazily — paged from the file`);
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
62
|
+
* What a whole decode added to resident memory, as the verbose account says
|
|
63
|
+
* it: `+X resident`, never below 0 B, since memory freed across the decode can
|
|
64
|
+
* leave the process smaller after it. The load-time and the mid-run
|
|
65
|
+
* whole-decode accounts both say it through here.
|
|
66
|
+
*
|
|
67
|
+
* @param bytes - the growth in resident memory, in bytes
|
|
68
|
+
* @returns the account's words for it
|
|
69
|
+
*/
|
|
70
|
+
function formatResident(bytes) {
|
|
71
|
+
return `+${formatSize(Math.max(0, bytes))} resident`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Prints the verbose account of an input decoded whole as it loaded: the
|
|
75
|
+
* growth in resident memory across its decode — what it holds in memory, as a
|
|
76
|
+
* runner that loads its inputs first sees it — beside what it weighs on disk,
|
|
77
|
+
* since a nested collection decodes at many times that.
|
|
78
|
+
*
|
|
79
|
+
* @param i - the input's position
|
|
80
|
+
* @param bytes - the growth in resident memory, in bytes
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
export function reportInputWhole(i, bytes) {
|
|
84
|
+
console.error(` input ${i}: decoded whole — ${formatResident(bytes)}`);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Opens a program's inputs, always frozen: task inputs are immutable, and
|
|
88
|
+
* mutating one throws the uniform copy-first error.
|
|
89
|
+
*
|
|
90
|
+
* With `decode` lazy, each beast2 collection input opens as a paged value
|
|
91
|
+
* whatever it weighs, so a read decodes only the segments it reaches and an
|
|
92
|
+
* operation the pager cannot serve decodes it whole, once, when it first needs
|
|
93
|
+
* it; frozen collapses the shape gate, so nested element shapes open lazily
|
|
94
|
+
* too. With `whole`, every input is decoded before the program runs. An input
|
|
95
|
+
* that cannot open lazily — another format, an index-less blob, an element
|
|
96
|
+
* shape holding a Ref or a function — is decoded whole either way. A manifest
|
|
97
|
+
* is the collection it names, its segments the files beside it.
|
|
98
|
+
*
|
|
99
|
+
* @param paths - the input files, in parameter order
|
|
100
|
+
* @param types - the parameters' types
|
|
101
|
+
* @param decode - how the collection inputs are read
|
|
102
|
+
* @param verbose - print how each input opened: lazily, or decoded whole and
|
|
103
|
+
* the resident memory it added
|
|
104
|
+
* @returns the inputs, in parameter order
|
|
105
|
+
* @internal
|
|
106
|
+
*/
|
|
107
|
+
export function openInputs(paths, types, decode, verbose) {
|
|
108
|
+
return paths.map((path, i) => {
|
|
109
|
+
const lazy = decode.type === 'lazy' ? loadInputLazy(path) : undefined;
|
|
110
|
+
if (lazy !== undefined) {
|
|
111
|
+
if (verbose)
|
|
112
|
+
reportInputLazy(i);
|
|
113
|
+
return lazy;
|
|
114
|
+
}
|
|
115
|
+
const before = verbose ? process.memoryUsage.rss() : 0;
|
|
116
|
+
const value = loadInput(path, types[i]);
|
|
117
|
+
if (verbose)
|
|
118
|
+
reportInputWhole(i, process.memoryUsage.rss() - before);
|
|
119
|
+
return value;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Prints what reading a lazily opened input came to; nothing for an input
|
|
124
|
+
* decoded whole as it loaded.
|
|
125
|
+
*
|
|
126
|
+
* An operation the pager cannot serve decoded the input whole, and says what
|
|
127
|
+
* that added to resident memory; reads that decoded segments again, beyond the
|
|
128
|
+
* ones the pager keeps, say so, since decoding the input whole would decode
|
|
129
|
+
* each once; any other reads say the segments they decoded and the fences
|
|
130
|
+
* they probed, and then the bytes they read, against what the input weighs.
|
|
131
|
+
* east-c and east-py say each in the same words, but for the bytes read.
|
|
64
132
|
*
|
|
65
133
|
* @param i - the input's position
|
|
66
134
|
* @param path - its file
|
|
@@ -69,8 +137,21 @@ export function reportInputLazy(i) {
|
|
|
69
137
|
*/
|
|
70
138
|
export function reportInputReads(i, path, value) {
|
|
71
139
|
const read = lazyInputBytesRead(value);
|
|
72
|
-
|
|
73
|
-
|
|
140
|
+
const stats = beast2LazyStats(value);
|
|
141
|
+
if (read === undefined || stats === undefined)
|
|
142
|
+
return;
|
|
143
|
+
if (stats.hydrated) {
|
|
144
|
+
console.error(` input ${i}: decoded whole (an operation the pager cannot serve) — ${formatResident(stats.hydratedBytes)}`);
|
|
145
|
+
}
|
|
146
|
+
else if (stats.segmentsDecoded > stats.segments) {
|
|
147
|
+
console.error(` input ${i}: ${stats.segmentsDecoded} segment decodes of its ${stats.segments} segments, ` +
|
|
148
|
+
`${stats.fencesProbed} fences probed — its reads land at random beyond the segments kept, so decoding it ` +
|
|
149
|
+
'whole would decode each once');
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
console.error(` input ${i}: ${stats.segmentsDecoded} of ${stats.segments} segments decoded, ${stats.fencesProbed} fences probed — ` +
|
|
153
|
+
`${formatSize(read)} read of ${formatInputSize(path)}`);
|
|
154
|
+
}
|
|
74
155
|
}
|
|
75
156
|
/**
|
|
76
157
|
* A refusal of the command line itself — a function the inputs given do not
|
|
@@ -87,26 +168,23 @@ export class UsageError extends Error {
|
|
|
87
168
|
this.name = 'UsageError';
|
|
88
169
|
}
|
|
89
170
|
}
|
|
90
|
-
/** Default size threshold above which collection inputs open lazily. */
|
|
91
|
-
const LAZY_INPUT_BYTES_DEFAULT = 64 * 1024 * 1024;
|
|
92
|
-
/** Resolves the lazy-open threshold: the environment, else the default. An
|
|
93
|
-
* unset or empty `EAST_LAZY_INPUT_BYTES` falls through to the 64 MiB default
|
|
94
|
-
* (`Number('')` is `0`, which would silently DISABLE lazy opening); invalid
|
|
95
|
-
* or negative values fall through too, matching east-c and east-py. Exported
|
|
96
|
-
* for `exec` and the spec. @internal */
|
|
97
|
-
export function lazyThreshold() {
|
|
98
|
-
const raw = process.env.EAST_LAZY_INPUT_BYTES;
|
|
99
|
-
if (raw !== undefined && raw !== '') {
|
|
100
|
-
const env = Number(raw);
|
|
101
|
-
if (Number.isFinite(env) && env >= 0)
|
|
102
|
-
return env;
|
|
103
|
-
}
|
|
104
|
-
return LAZY_INPUT_BYTES_DEFAULT;
|
|
105
|
-
}
|
|
106
171
|
/**
|
|
107
172
|
* Runs an East IR program.
|
|
173
|
+
*
|
|
174
|
+
* @param irPath - the program's IR file
|
|
175
|
+
* @param platformFns - the platform functions it may call
|
|
176
|
+
* @param packages - the platform packages they came from, for the verbose
|
|
177
|
+
* account
|
|
178
|
+
* @param inputPaths - one input file per parameter, in order
|
|
179
|
+
* @param outputPath - where the result is written, in its extension's format;
|
|
180
|
+
* without it the result prints as East text
|
|
181
|
+
* @param verbose - print where the time went, the peak memory and how each
|
|
182
|
+
* input opened
|
|
183
|
+
* @param decode - how the collection inputs are read: lazily (the default), or
|
|
184
|
+
* decoded whole before the program runs
|
|
185
|
+
* @returns the result, when it is not written to `outputPath`
|
|
108
186
|
*/
|
|
109
|
-
export async function runProgram(irPath, platformFns, packages, inputPaths, outputPath, verbose = false) {
|
|
187
|
+
export async function runProgram(irPath, platformFns, packages, inputPaths, outputPath, verbose = false, decode = variant('lazy', null)) {
|
|
110
188
|
const t0 = now();
|
|
111
189
|
// Load as an EastIR bundle so source_map travels with the IR and error
|
|
112
190
|
// frames resolve end-to-end.
|
|
@@ -139,21 +217,9 @@ export async function runProgram(irPath, platformFns, packages, inputPaths, outp
|
|
|
139
217
|
console.error(` ${printTypeValue(outputType)}`);
|
|
140
218
|
}
|
|
141
219
|
}
|
|
142
|
-
// Load inputs
|
|
143
|
-
//
|
|
144
|
-
|
|
145
|
-
// indexed input stops paying a whole decode — and because frozen collapses
|
|
146
|
-
// the shape gate, nested-container element shapes open lazily too. The
|
|
147
|
-
// size is the value's: an input staged as a manifest is a small file
|
|
148
|
-
// naming large ones.
|
|
149
|
-
const threshold = lazyThreshold();
|
|
150
|
-
const inputs = [];
|
|
151
|
-
for (let i = 0; i < inputPaths.length; i++) {
|
|
152
|
-
const lazy = threshold > 0 && inputBytes(inputPaths[i]) >= threshold ? loadInputLazy(inputPaths[i]) : undefined;
|
|
153
|
-
if (lazy !== undefined && verbose)
|
|
154
|
-
reportInputLazy(i);
|
|
155
|
-
inputs.push(lazy !== undefined ? lazy : loadInput(inputPaths[i], inputTypes[i]));
|
|
156
|
-
}
|
|
220
|
+
// Load inputs, frozen: each collection lazily, unless --decode whole says
|
|
221
|
+
// to decode them before the program runs.
|
|
222
|
+
const inputs = openInputs(inputPaths, inputTypes, decode, verbose);
|
|
157
223
|
/** The verbose summary's account of each lazy input: what paging came
|
|
158
224
|
* to, against the size of the value. */
|
|
159
225
|
const reportLazyReads = () => {
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.spec.js
CHANGED
|
@@ -15,7 +15,7 @@ import { join } from 'node:path';
|
|
|
15
15
|
import { spawn, spawnSync } from 'node:child_process';
|
|
16
16
|
import { fileURLToPath } from 'node:url';
|
|
17
17
|
import { ArrayType, DictType, FloatType, FunctionType, IntegerType, NullType, OptionType, SetType, StringType, StructType, Beast2ManifestWriter, East, SortedMap, SortedSet, UnitType, compareFor, decodeBeast2For, decodeCollectionManifest, encodeBeast2For, encodeBeast2PagedFor, encodeBeast2SegmentsFor, toEastTypeValue, encodeEastIR, none, openBeast2PagesFor, some, spliceBeast2, variant, } from '@elaraai/east';
|
|
18
|
-
import { runProgram
|
|
18
|
+
import { runProgram } from './runner.js';
|
|
19
19
|
import { mergeBlobs } from './merge.js';
|
|
20
20
|
/** Runs `run` with console.error captured; returns what it printed. */
|
|
21
21
|
async function stderrOf(run) {
|
|
@@ -30,20 +30,6 @@ async function stderrOf(run) {
|
|
|
30
30
|
}
|
|
31
31
|
return lines.join('\n');
|
|
32
32
|
}
|
|
33
|
-
/** Runs `run` with the lazy-open threshold set to `bytes`. */
|
|
34
|
-
async function withLazyThreshold(bytes, run) {
|
|
35
|
-
const saved = process.env.EAST_LAZY_INPUT_BYTES;
|
|
36
|
-
process.env.EAST_LAZY_INPUT_BYTES = String(bytes);
|
|
37
|
-
try {
|
|
38
|
-
return await run();
|
|
39
|
-
}
|
|
40
|
-
finally {
|
|
41
|
-
if (saved === undefined)
|
|
42
|
-
delete process.env.EAST_LAZY_INPUT_BYTES;
|
|
43
|
-
else
|
|
44
|
-
process.env.EAST_LAZY_INPUT_BYTES = saved;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
33
|
/** `promise`'s value, or `undefined` once `ms` pass first — a bounded wait. */
|
|
48
34
|
async function within(promise, ms) {
|
|
49
35
|
let timer;
|
|
@@ -115,12 +101,12 @@ describe('lazy inputs', () => {
|
|
|
115
101
|
writeFileSync(inputPath, encodeBeast2SegmentsFor(DT)(Array.from({ length: 8 }, (_, i) => new Map(entries.slice(i * 250, (i + 1) * 250)))));
|
|
116
102
|
const fn = East.function([DT], StringType, ($, table) => table.get(1234n));
|
|
117
103
|
const outputPath = join(tempDir, 'output.beast2');
|
|
118
|
-
//
|
|
119
|
-
await
|
|
104
|
+
// Every collection input opens lazily, whatever it weighs.
|
|
105
|
+
await runProgram(writeIr(fn), [], [], [inputPath], outputPath);
|
|
120
106
|
const result = decodeBeast2For(StringType)(new Uint8Array(readFileSync(outputPath)));
|
|
121
107
|
assert.equal(result, 'row-1234');
|
|
122
108
|
});
|
|
123
|
-
it('reports a lazily opened input in verbose output', async () => {
|
|
109
|
+
it('reports a lazily opened input in verbose output, and what an input decoded whole holds', async () => {
|
|
124
110
|
const DT = DictType(IntegerType, StringType);
|
|
125
111
|
const table = new SortedMap(Array.from({ length: 500 }, (_, i) => [BigInt(i), `row-${i}`]), compareFor(IntegerType));
|
|
126
112
|
const inputPath = join(tempDir, 'table.beast2');
|
|
@@ -128,20 +114,72 @@ describe('lazy inputs', () => {
|
|
|
128
114
|
writeFileSync(inputPath, encodeBeast2SegmentsFor(DT)(Array.from({ length: 5 }, (_, i) => new Map(entries.slice(i * 100, (i + 1) * 100)))));
|
|
129
115
|
const fn = East.function([DT], StringType, ($, table) => table.get(42n));
|
|
130
116
|
const outputPath = join(tempDir, 'output.beast2');
|
|
131
|
-
const err = await stderrOf(() =>
|
|
117
|
+
const err = await stderrOf(() => runProgram(writeIr(fn), [], [], [inputPath], outputPath, true));
|
|
132
118
|
assert.ok(err.includes('input 0: opened lazily'), `verbose output names the lazy input:\n${err}`);
|
|
119
|
+
assert.ok(!err.includes('decoded whole'), `a lazy input is not decoded whole:\n${err}`);
|
|
120
|
+
assert.equal(decodeBeast2For(StringType)(new Uint8Array(readFileSync(outputPath))), 'row-42');
|
|
121
|
+
// `whole` decodes it before the program runs, and says what it holds.
|
|
122
|
+
const whole = await stderrOf(() => runProgram(writeIr(fn), [], [], [inputPath], outputPath, true, variant('whole', null)));
|
|
123
|
+
assert.ok(!whole.includes('opened lazily'), `a whole input opened lazily:\n${whole}`);
|
|
124
|
+
assert.match(whole, /input 0: decoded whole — \+[\d.]+ (B|KB|MB) resident/);
|
|
133
125
|
assert.equal(decodeBeast2For(StringType)(new Uint8Array(readFileSync(outputPath))), 'row-42');
|
|
134
126
|
});
|
|
135
|
-
it('a
|
|
127
|
+
it('says a lazy input an operation read whole, and what that added to resident memory, in east-c\'s and east-py\'s words', async () => {
|
|
128
|
+
// A struct holds what it is built from whole, which the pager cannot
|
|
129
|
+
// serve: the input opens lazily, and the body reads it whole once.
|
|
130
|
+
const DT = DictType(IntegerType, StringType);
|
|
131
|
+
const inputPath = join(tempDir, 'table.beast2');
|
|
132
|
+
writeFileSync(inputPath, encodeBeast2PagedFor(DT)(new SortedMap(Array.from({ length: 500 }, (_, i) => [BigInt(i), `row-${i}`]), compareFor(IntegerType))));
|
|
133
|
+
const Boxed = StructType({ table: DT });
|
|
134
|
+
const fn = East.function([DT], IntegerType, ($, table) => {
|
|
135
|
+
const boxed = $.let({ table }, Boxed);
|
|
136
|
+
return boxed.table.size();
|
|
137
|
+
});
|
|
138
|
+
const outputPath = join(tempDir, 'output.beast2');
|
|
139
|
+
const err = await stderrOf(() => runProgram(writeIr(fn), [], [], [inputPath], outputPath, true));
|
|
140
|
+
assert.equal(decodeBeast2For(IntegerType)(new Uint8Array(readFileSync(outputPath))), 500n);
|
|
141
|
+
assert.ok(err.includes('input 0: opened lazily'), err);
|
|
142
|
+
assert.match(err, /input 0: decoded whole \(an operation the pager cannot serve\) — \+[\d.]+ (B|KB|MB) resident/);
|
|
143
|
+
assert.ok(!err.includes(' read of '), `a whole read says so, not the bytes it read:\n${err}`);
|
|
144
|
+
});
|
|
145
|
+
it('says a lazy input\'s reads decoded its segments again, in east-c\'s and east-py\'s words', async () => {
|
|
146
|
+
// Keyed reads that cycle over five segments, one more than the pager
|
|
147
|
+
// keeps: each read decodes its segment again.
|
|
148
|
+
const DT = DictType(IntegerType, StringType);
|
|
149
|
+
const entries = Array.from({ length: 500 }, (_, i) => [BigInt(i), `row-${i}`]);
|
|
150
|
+
const inputPath = join(tempDir, 'table.beast2');
|
|
151
|
+
writeFileSync(inputPath, encodeBeast2SegmentsFor(DT)(Array.from({ length: 5 }, (_, i) => new Map(entries.slice(i * 100, (i + 1) * 100)))));
|
|
152
|
+
const fn = East.function([DT], IntegerType, ($, table) => {
|
|
153
|
+
const hits = $.let(0n);
|
|
154
|
+
$.for(East.Array.range(0n, 50n), ($, i) => {
|
|
155
|
+
$.if(table.has(i.remainder(5n).multiply(100n)), ($) => {
|
|
156
|
+
$.assign(hits, hits.add(1n));
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
return hits;
|
|
160
|
+
});
|
|
161
|
+
const outputPath = join(tempDir, 'output.beast2');
|
|
162
|
+
const err = await stderrOf(() => runProgram(writeIr(fn), [], [], [inputPath], outputPath, true));
|
|
163
|
+
assert.equal(decodeBeast2For(IntegerType)(new Uint8Array(readFileSync(outputPath))), 50n);
|
|
164
|
+
const account = /input 0: (\d+) segment decodes of its (\d+) segments, (\d+) fences probed — its reads land at random beyond the segments kept, so decoding it whole would decode each once/.exec(err);
|
|
165
|
+
assert.ok(account !== null, `the reads' account:\n${err}`);
|
|
166
|
+
assert.deepEqual(account.slice(1).map(Number), [50, 5, 5], 'every read decoded its segment, and the fences were probed once');
|
|
167
|
+
// Decoded whole before the program runs, the input has no reads to account for.
|
|
168
|
+
const whole = await stderrOf(() => runProgram(writeIr(fn), [], [], [inputPath], outputPath, true, variant('whole', null)));
|
|
169
|
+
assert.equal(decodeBeast2For(IntegerType)(new Uint8Array(readFileSync(outputPath))), 50n);
|
|
170
|
+
assert.ok(!whole.includes('segment decodes'), whole);
|
|
171
|
+
});
|
|
172
|
+
it('a lazily opened wide input reads a fraction of the file and stays below the whole run\'s residency', { skip: process.platform === 'win32' ? 'no RSS comparison on Windows' : false }, () => {
|
|
136
173
|
// A keyed read twice through the CLI binary, each run its own process:
|
|
137
|
-
// the lazy run pages the wide file from its descriptor, the
|
|
138
|
-
// control reads and decodes it whole. The runner's verbose summary
|
|
174
|
+
// the lazy run pages the wide file from its descriptor, the `--decode
|
|
175
|
+
// whole` control reads and decodes it whole. The runner's verbose summary
|
|
139
176
|
// accounts for every byte the lazy input read (geometry, fence probes,
|
|
140
177
|
// the one decoded segment), and that count must be a fraction of the
|
|
141
178
|
// file — the exact gate a positioned-read runtime allows, where RSS
|
|
142
179
|
// alone would not be (Node's own baseline wanders by more than a
|
|
143
|
-
// segment between identical runs). The
|
|
144
|
-
// sit above the lazy run's: it pays the file's bytes plus every row
|
|
180
|
+
// segment between identical runs). The whole control's RSS must still
|
|
181
|
+
// sit above the lazy run's: it pays the file's bytes plus every row, and
|
|
182
|
+
// it says what the input holds in memory.
|
|
145
183
|
const DT = DictType(IntegerType, StringType);
|
|
146
184
|
const rows = 160_000;
|
|
147
185
|
const table = new SortedMap(Array.from({ length: rows }, (_, i) => [BigInt(i), `row-${i}-` + String.fromCharCode(97 + (i % 26)).repeat(190)]), compareFor(IntegerType));
|
|
@@ -155,22 +193,24 @@ describe('lazy inputs', () => {
|
|
|
155
193
|
// search dirs e3 passes it; in a pnpm layout east-node-std is not a
|
|
156
194
|
// dependency of this package, so point the loader at the package itself.
|
|
157
195
|
const stdDir = fileURLToPath(new URL('../../east-node-std', import.meta.url));
|
|
158
|
-
const run = (
|
|
159
|
-
const outputPath = join(tempDir, `wide-${
|
|
160
|
-
const result = spawnSync(process.execPath, [bin, 'run', irPath, '-p', '@elaraai/east-node-std', '-i', inputPath, '-o', outputPath, '-v'], {
|
|
161
|
-
env: { ...process.env,
|
|
196
|
+
const run = (decode) => {
|
|
197
|
+
const outputPath = join(tempDir, `wide-${decode}.beast2`);
|
|
198
|
+
const result = spawnSync(process.execPath, [bin, 'run', irPath, '-p', '@elaraai/east-node-std', '-i', inputPath, '-o', outputPath, '--decode', decode, '-v'], {
|
|
199
|
+
env: { ...process.env, E3_RUNNER_SEARCH_DIRS: stdDir },
|
|
162
200
|
encoding: 'utf8',
|
|
163
201
|
});
|
|
164
202
|
assert.equal(result.status, 0, result.stderr);
|
|
165
203
|
assert.equal(decodeBeast2For(StringType)(new Uint8Array(readFileSync(outputPath))), table.get(42n));
|
|
166
204
|
return result.stderr;
|
|
167
205
|
};
|
|
168
|
-
const lazyErr = run('
|
|
169
|
-
const eagerErr = run('
|
|
206
|
+
const lazyErr = run('lazy');
|
|
207
|
+
const eagerErr = run('whole');
|
|
170
208
|
assert.ok(lazyErr.includes('input 0: opened lazily'), lazyErr);
|
|
171
209
|
assert.ok(!eagerErr.includes('opened lazily'), eagerErr);
|
|
210
|
+
assert.match(eagerErr, /input 0: decoded whole — \+[\d.]+ MB resident/);
|
|
172
211
|
const sizeMb = (m) => m ? Number(m[1]) / (m[2] === 'B' ? 1024 * 1024 : m[2] === 'KB' ? 1024 : 1) : null;
|
|
173
|
-
|
|
212
|
+
assert.match(lazyErr, /input 0: 1 of (\d+) segments decoded, \1 fences probed — /, 'one segment decoded, every fence probed once');
|
|
213
|
+
const read = sizeMb(/input 0: .* — ([\d.]+) (B|KB|MB) read of/.exec(lazyErr));
|
|
174
214
|
assert.ok(read !== null, `the summary accounts for the lazy input's reads:\n${lazyErr}`);
|
|
175
215
|
assert.ok(read < wireMb / 2, `the lazy input read ${read.toFixed(1)} MB of a ${wireMb.toFixed(1)} MB file — was it read whole?`);
|
|
176
216
|
const peak = (err) => sizeMb(/Peak RSS:\s+([\d.]+) (MB)/.exec(err));
|
|
@@ -479,9 +519,10 @@ describe('the blob merge and the stdin lifeline (#770)', () => {
|
|
|
479
519
|
writeIr('spin.beast2', spin);
|
|
480
520
|
const unitPath = join(tempDir, 'unit.beast2');
|
|
481
521
|
writeFileSync(unitPath, encodeBeast2For(UnitType)({
|
|
482
|
-
work: variant('run', { program: 'spin.beast2', inputs: [], output: variant('set', 'spin-output') }),
|
|
522
|
+
work: variant('run', { program: 'spin.beast2', inputs: [], output: variant('set', 'spin-output'), decode: variant('lazy', null) }),
|
|
483
523
|
platforms: [],
|
|
484
524
|
threads: 1n,
|
|
525
|
+
fetch: false,
|
|
485
526
|
result: 'result.beast2',
|
|
486
527
|
}));
|
|
487
528
|
const bin = fileURLToPath(new URL('../bin/east-node.mjs', import.meta.url));
|
|
@@ -664,10 +705,9 @@ describe('frozen inputs', () => {
|
|
|
664
705
|
});
|
|
665
706
|
it('the frozen shape gate admits nested containers lazily, blob or manifest: reads serve, writes refuse', async () => {
|
|
666
707
|
// Frozen is what makes lazy service safe for nested element shapes, so
|
|
667
|
-
//
|
|
668
|
-
//
|
|
669
|
-
//
|
|
670
|
-
// says the input was paged.
|
|
708
|
+
// this opens pager-backed AND immutable. A gate that refused the shape
|
|
709
|
+
// would fall back to the whole frozen decode, which answers both the same,
|
|
710
|
+
// so the runner's own account, under -v, is what says the input was paged.
|
|
671
711
|
const read = East.function([NestedT], IntegerType, ($, d) => d.get(1n).xs.size());
|
|
672
712
|
const write = East.function([NestedT], IntegerType, ($, d) => {
|
|
673
713
|
const row = $.let(d.get(1n));
|
|
@@ -676,37 +716,44 @@ describe('frozen inputs', () => {
|
|
|
676
716
|
});
|
|
677
717
|
for (const input of [writeNestedInput(), writeNestedManifest()]) {
|
|
678
718
|
const outputPath = join(tempDir, 'out.beast2');
|
|
679
|
-
const readErr = await stderrOf(() =>
|
|
719
|
+
const readErr = await stderrOf(() => runProgram(writeIr(read), [], [], [input], outputPath, true));
|
|
680
720
|
assert.ok(readErr.includes('input 0: opened lazily'), `${input} was paged:\n${readErr}`);
|
|
681
721
|
assert.equal(decodeBeast2For(IntegerType)(new Uint8Array(readFileSync(outputPath))), 2n);
|
|
682
|
-
const writeErr = await stderrOf(() =>
|
|
722
|
+
const writeErr = await stderrOf(() => assert.rejects(runProgram(writeIr(write), [], [], [input], join(tempDir, 'out2.beast2'), true), /cannot mutate a frozen value \(task inputs are immutable\) — copy first/));
|
|
683
723
|
assert.ok(writeErr.includes('input 0: opened lazily'), `${input} was paged:\n${writeErr}`);
|
|
684
724
|
}
|
|
685
725
|
});
|
|
686
726
|
});
|
|
687
|
-
describe('
|
|
688
|
-
|
|
727
|
+
describe('--decode', () => {
|
|
728
|
+
let tempDir;
|
|
729
|
+
beforeEach(() => {
|
|
730
|
+
tempDir = mkdtempSync(join(tmpdir(), 'east-node-decode-'));
|
|
731
|
+
});
|
|
689
732
|
afterEach(() => {
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
assert.
|
|
733
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
734
|
+
});
|
|
735
|
+
it('opens collection inputs lazily unless it says whole, the same choice east-c and east-py take, and refuses anything else', () => {
|
|
736
|
+
const DT = DictType(IntegerType, StringType);
|
|
737
|
+
const inputPath = join(tempDir, 'table.beast2');
|
|
738
|
+
writeFileSync(inputPath, encodeBeast2PagedFor(DT)(new SortedMap([[1n, 'a'], [2n, 'b']], compareFor(IntegerType))));
|
|
739
|
+
const irPath = join(tempDir, 'program.beast2');
|
|
740
|
+
writeFileSync(irPath, encodeEastIR(East.function([DT], StringType, ($, table) => table.get(2n)).toIR()));
|
|
741
|
+
const bin = fileURLToPath(new URL('../bin/east-node.mjs', import.meta.url));
|
|
742
|
+
const stdDir = fileURLToPath(new URL('../../east-node-std', import.meta.url));
|
|
743
|
+
const run = (...flags) => spawnSync(process.execPath, [bin, 'run', irPath, '-p', '@elaraai/east-node-std', '-i', inputPath, '-v', ...flags], { env: { ...process.env, E3_RUNNER_SEARCH_DIRS: stdDir }, encoding: 'utf8' });
|
|
744
|
+
for (const flags of [[], ['--decode', 'lazy']]) {
|
|
745
|
+
const lazy = run(...flags);
|
|
746
|
+
assert.equal(lazy.status, 0, lazy.stderr);
|
|
747
|
+
assert.ok(lazy.stderr.includes('input 0: opened lazily'), `${flags.join(' ') || 'no flag'}:\n${lazy.stderr}`);
|
|
748
|
+
assert.equal(lazy.stdout.trim(), '"b"');
|
|
749
|
+
}
|
|
750
|
+
const whole = run('--decode', 'whole');
|
|
751
|
+
assert.equal(whole.status, 0, whole.stderr);
|
|
752
|
+
assert.match(whole.stderr, /input 0: decoded whole — \+[\d.]+ (B|KB|MB) resident/);
|
|
753
|
+
assert.equal(whole.stdout.trim(), '"b"');
|
|
754
|
+
const refused = run('--decode', 'eager');
|
|
755
|
+
assert.equal(refused.status, 1);
|
|
756
|
+
assert.equal(refused.stderr.trim(), 'Error: --decode takes lazy or whole, not eager');
|
|
710
757
|
});
|
|
711
758
|
});
|
|
712
759
|
//# sourceMappingURL=runner.spec.js.map
|