@elaraai/east-node-cli 1.0.83 → 1.0.85

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/exec.spec.js CHANGED
@@ -7,18 +7,57 @@
7
7
  * through this runner, writes the corpus's bytes and comes to its outcome, as
8
8
  * east-c's and east-py's runners must. The corpus is `east`'s
9
9
  * (`test/runner_corpus.spec.ts`): read from `EAST_RUNNER_CORPUS` when that
10
- * names one, and written afresh for this run otherwise.
10
+ * names one, and written afresh for this run otherwise. `exec` is the file
11
+ * wrapper of east's `executeUnit`, so every case also runs over the in-memory
12
+ * UnitIO a browser gives it, which must write the very files `exec` writes.
11
13
  */
12
- import { describe, it, before, after } from 'node:test';
14
+ import { describe, it, before, after, beforeEach } from 'node:test';
13
15
  import assert from 'node:assert/strict';
14
- import { spawnSync } from 'node:child_process';
15
- import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
16
+ import { spawn, spawnSync } from 'node:child_process';
17
+ import { copyFileSync, cpSync, existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from 'node:fs';
16
18
  import { tmpdir } from 'node:os';
17
19
  import { dirname, join } from 'node:path';
18
20
  import { fileURLToPath } from 'node:url';
19
- import { ArrayType, Beast2ManifestWriter, BooleanType, DictType, East, IntegerType, NullType, StringType, UnitOutcomeType, UnitResultType, UnitType, decodeBeast2, decodeBeast2For, encodeBeast2For, encodeEastIR, equalFor, variant, } from '@elaraai/east';
20
- import { inputBytes } from './loader.js';
21
+ import { ArrayType, Beast2ManifestWriter, BooleanType, DictType, East, FETCH_SEGMENTS_ENV, InMemoryUnitIO, IntegerType, NullType, StringType, UnitOutcomeType, UnitResultType, UnitType, decodeBeast2, decodeBeast2For, decodeCollectionManifest, encodeBeast2For, encodeBeast2SegmentsFor, encodeEastIR, equalFor, executeUnit, printFor, variant, } from '@elaraai/east';
22
+ import { execUnit, readUnit } from './exec.js';
23
+ import { inputBytes, loadPlatform } from './loader.js';
21
24
  const bin = fileURLToPath(new URL('../bin/east-node.mjs', import.meta.url));
25
+ /** An outcome as a message shows it. */
26
+ const printOutcome = printFor(UnitOutcomeType);
27
+ /** Every file under `root`, by its path relative to `root`, forward-slashed —
28
+ * the paths a unit names them by. */
29
+ function filesUnder(root) {
30
+ const files = [];
31
+ const walk = (rel) => {
32
+ for (const name of readdirSync(join(root, rel))) {
33
+ const path = rel === '' ? name : `${rel}/${name}`;
34
+ if (statSync(join(root, path)).isDirectory())
35
+ walk(path);
36
+ else
37
+ files.push([path, new Uint8Array(readFileSync(join(root, path)))]);
38
+ }
39
+ };
40
+ walk('');
41
+ return files;
42
+ }
43
+ /**
44
+ * Asserts an in-memory UnitIO holds the tree at `root`, and nothing else: each
45
+ * directory's entries, and every file's bytes.
46
+ */
47
+ function assertHoldsTree(io, root, label) {
48
+ const walk = (rel) => {
49
+ const names = readdirSync(join(root, rel)).sort();
50
+ assert.deepEqual(io.list(rel), names, `${label}: the entries of ${rel || '.'}`);
51
+ for (const name of names) {
52
+ const path = rel === '' ? name : `${rel}/${name}`;
53
+ if (statSync(join(root, path)).isDirectory())
54
+ walk(path);
55
+ else
56
+ assert.deepEqual(io.read(path), new Uint8Array(readFileSync(join(root, path))), `${label}: ${path}`);
57
+ }
58
+ };
59
+ walk('');
60
+ }
22
61
  describe('exec: the runner protocol corpus', () => {
23
62
  let corpus;
24
63
  let generated;
@@ -55,10 +94,7 @@ describe('exec: the runner protocol corpus', () => {
55
94
  // A copy per case: a unit writes beside itself.
56
95
  const dir = join(scratch, name);
57
96
  cpSync(join(corpus, name), dir, { recursive: true });
58
- const run = spawnSync(process.execPath, [bin, 'exec', join(dir, 'unit.beast2')], {
59
- env: { ...process.env, ...(expected.lazy && { EAST_LAZY_INPUT_BYTES: '1' }) },
60
- encoding: 'utf8',
61
- });
97
+ const run = spawnSync(process.execPath, [bin, 'exec', join(dir, 'unit.beast2')], { encoding: 'utf8' });
62
98
  const ok = expected.outcome.type === 'ok';
63
99
  assert.equal(run.status, ok ? 0 : 1, `${name}: exit ${run.status}\n${run.stderr.slice(-2_000)}`);
64
100
  const result = decodeBeast2For(UnitResultType)(readFileSync(join(dir, 'result.beast2')));
@@ -73,6 +109,41 @@ describe('exec: the runner protocol corpus', () => {
73
109
  assert.ok(!existsSync(join(dir, path)), `${name}: ${path} is not written`);
74
110
  }
75
111
  });
112
+ it('writes, over the in-memory UnitIO, the very files its file wrapper writes on disk, and comes to the same outcome', async () => {
113
+ const names = decodeBeast2For(ArrayType(StringType))(readFileSync(join(corpus, 'index.beast2')));
114
+ const equalOutcome = equalFor(UnitOutcomeType);
115
+ // The file wrapper turns the fetch variable on or off for its process,
116
+ // as its unit says: this one's is put back after.
117
+ const fetching = process.env[FETCH_SEGMENTS_ENV];
118
+ try {
119
+ for (const name of names) {
120
+ const expected = decodeBeast2(readFileSync(join(corpus, name, 'case.beast2'))).value;
121
+ // On disk: a copy of the case, executed by `exec`'s file
122
+ // wrapper in this process — all of `exec` but the result file
123
+ // it records and the exit status, which the case above holds.
124
+ const dir = join(scratch, 'in-memory', name);
125
+ cpSync(join(corpus, name), dir, { recursive: true });
126
+ const onDisk = await execUnit(readUnit(join(dir, 'unit.beast2')));
127
+ // In memory: the case's files as the corpus holds them, the
128
+ // platforms resolved as the file wrapper resolves them.
129
+ const io = new InMemoryUnitIO(filesUnder(join(corpus, name)));
130
+ const unit = decodeBeast2For(UnitType)(io.read('unit.beast2'));
131
+ const inMemory = await executeUnit(unit, io, { platforms: loadPlatform });
132
+ assert.ok(equalOutcome(inMemory.outcome, onDisk.outcome), `${name}: in memory ${printOutcome(inMemory.outcome)}, on disk ${printOutcome(onDisk.outcome)}`);
133
+ assert.ok(equalOutcome(inMemory.outcome, expected.outcome), `${name}: ${printOutcome(inMemory.outcome)}`);
134
+ assert.ok(onDisk.peakBytes > 0n, `${name}: the process's peak is measured`);
135
+ assert.equal(inMemory.peakBytes, 0n, `${name}: a host that measures no memory reports no peak`);
136
+ // Every directory and file, byte for byte.
137
+ assertHoldsTree(io, dir, name);
138
+ }
139
+ }
140
+ finally {
141
+ if (fetching === undefined)
142
+ delete process.env[FETCH_SEGMENTS_ENV];
143
+ else
144
+ process.env[FETCH_SEGMENTS_ENV] = fetching;
145
+ }
146
+ });
76
147
  });
77
148
  describe('exec -v: the account of each input', () => {
78
149
  // The protocol e3 runs a task through, and the only form whose stderr
@@ -84,7 +155,7 @@ describe('exec -v: the account of each input', () => {
84
155
  after(() => {
85
156
  rmSync(dir, { recursive: true, force: true });
86
157
  });
87
- it('says what each input weighs, that it opened lazily, and what reading it came to', () => {
158
+ it('says what each input weighs, how it opened as the unit says, and what reading it came to', () => {
88
159
  const DT = DictType(IntegerType, StringType);
89
160
  // The input as e3 stages it: a manifest directory, whose own file is
90
161
  // a few dozen bytes per segment.
@@ -99,29 +170,226 @@ describe('exec -v: the account of each input', () => {
99
170
  writer.add([BigInt(i), `row-${i}`]);
100
171
  writer.finish();
101
172
  writeFileSync(join(dir, 'program.beast2'), encodeEastIR(East.function([DT], BooleanType, ($, table) => table.has(42n)).toIR()));
102
- writeFileSync(join(dir, 'unit.beast2'), encodeBeast2For(UnitType)({
103
- work: variant('run', { program: 'program.beast2', inputs: ['table.beast2'], output: variant('value', 'out.beast2') }),
104
- platforms: [],
105
- threads: 1n,
106
- fetch: false,
107
- result: 'result.beast2',
108
- }));
173
+ const writeUnit = (decode) => {
174
+ rmSync(join(dir, 'out.beast2'), { force: true });
175
+ writeFileSync(join(dir, 'unit.beast2'), encodeBeast2For(UnitType)({
176
+ work: variant('run', {
177
+ program: 'program.beast2',
178
+ inputs: ['table.beast2'],
179
+ output: variant('value', 'out.beast2'),
180
+ decode: decode === 'lazy' ? variant('lazy', null) : variant('whole', null),
181
+ }),
182
+ platforms: [],
183
+ threads: 1n,
184
+ fetch: false,
185
+ result: 'result.beast2',
186
+ }));
187
+ };
109
188
  const exec = (...flags) => {
110
- const run = spawnSync(process.execPath, [bin, 'exec', join(dir, 'unit.beast2'), ...flags], {
111
- env: { ...process.env, EAST_LAZY_INPUT_BYTES: '1' },
112
- encoding: 'utf8',
113
- });
189
+ const run = spawnSync(process.execPath, [bin, 'exec', join(dir, 'unit.beast2'), ...flags], { encoding: 'utf8' });
114
190
  assert.equal(run.status, 0, run.stderr);
115
191
  return run.stderr;
116
192
  };
193
+ writeUnit('lazy');
117
194
  const verbose = exec('-v');
118
195
  const formatSize = (bytes) => bytes < 1024 ? `${bytes} B`
119
196
  : bytes < 1024 * 1024 ? `${(bytes / 1024).toFixed(1)} KB` : `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
120
197
  assert.ok(inputBytes(input) > 4 * statSync(input).size, 'the manifest weighs far less than the collection');
121
198
  assert.ok(verbose.includes(` input 0: ${input} (${formatSize(inputBytes(input))})`), `the input is weighed by the collection, not its manifest:\n${verbose}`);
122
199
  assert.ok(verbose.includes('input 0: opened lazily'), `the input opened lazily:\n${verbose}`);
123
- assert.ok(/input 0: [\d.]+ (B|KB|MB) read of /.test(verbose), `what reading it came to:\n${verbose}`);
200
+ // One keyed read: its segment decoded, and every fence the manifest
201
+ // carries probed once.
202
+ assert.ok(/input 0: 1 of (\d+) segments decoded, \1 fences probed — [\d.]+ (B|KB|MB) read of /.test(verbose), `what reading it came to:\n${verbose}`);
124
203
  assert.ok(!exec().includes('input 0:'), 'without -v the inputs are not reported');
204
+ // A unit whose `decode` is whole decodes the input before the program
205
+ // runs, and says what it holds in memory.
206
+ writeUnit('whole');
207
+ const whole = exec('-v');
208
+ assert.ok(!whole.includes('opened lazily'), `a whole unit opened its input lazily:\n${whole}`);
209
+ assert.match(whole, /input 0: decoded whole — \+[\d.]+ (B|KB|MB) resident/);
210
+ });
211
+ it('keeps what its keyed reads decode within EAST_PAGED_CACHE_BYTES of decoded weight, as east-c\'s and east-py\'s runners do', () => {
212
+ // Keyed reads that cycle over five segments. In the one-segment mode
213
+ // every read decodes its segment again; at the default budget the
214
+ // segments stay, but for the three the first pass, reading in key
215
+ // order, dropped behind it, which the second pass decodes again.
216
+ const DT = DictType(IntegerType, StringType);
217
+ const entries = Array.from({ length: 500 }, (_, i) => [BigInt(i), `row-${i}`]);
218
+ writeFileSync(join(dir, 'cycle.beast2'), encodeBeast2SegmentsFor(DT)(Array.from({ length: 5 }, (_, i) => new Map(entries.slice(i * 100, (i + 1) * 100)))));
219
+ const program = East.function([DT], IntegerType, ($, table) => {
220
+ const hits = $.let(0n);
221
+ $.for(East.Array.range(0n, 50n), ($, i) => {
222
+ $.if(table.has(i.remainder(5n).multiply(100n)), ($) => {
223
+ $.assign(hits, hits.add(1n));
224
+ });
225
+ });
226
+ return hits;
227
+ });
228
+ writeFileSync(join(dir, 'cycle-program.beast2'), encodeEastIR(program.toIR()));
229
+ writeFileSync(join(dir, 'cycle-unit.beast2'), encodeBeast2For(UnitType)({
230
+ work: variant('run', { program: 'cycle-program.beast2', inputs: ['cycle.beast2'], output: variant('value', 'cycle-out.beast2'), decode: variant('lazy', null) }),
231
+ platforms: [],
232
+ threads: 1n,
233
+ fetch: false,
234
+ result: 'cycle-result.beast2',
235
+ }));
236
+ const { EAST_PAGED_CACHE_BYTES: _budget, ...env } = process.env;
237
+ const decodes = (budget) => {
238
+ const run = spawnSync(process.execPath, [bin, 'exec', join(dir, 'cycle-unit.beast2'), '-v'], {
239
+ env: budget === undefined ? env : { ...env, EAST_PAGED_CACHE_BYTES: budget },
240
+ encoding: 'utf8',
241
+ });
242
+ assert.equal(run.status, 0, run.stderr);
243
+ assert.equal(decodeBeast2For(IntegerType)(readFileSync(join(dir, 'cycle-out.beast2'))), 50n);
244
+ const account = /input 0: (\d+) segment decodes of its 5 segments, 5 fences probed/.exec(run.stderr);
245
+ assert.ok(account !== null, `the reads' account:\n${run.stderr}`);
246
+ return Number(account[1]);
247
+ };
248
+ assert.equal(decodes('1'), 50, 'one segment kept: every read decodes its segment');
249
+ assert.equal(decodes(), 8, 'the default budget: each segment decoded once, and the three dropped behind again');
250
+ });
251
+ });
252
+ describe('exec: a unit whose host places segments as they are read', () => {
253
+ // A host whose store is elsewhere stages a manifest without its segments
254
+ // and places each as the runner asks for it: `<segment>.want`, answered
255
+ // with the file or with `<segment>.error`. Only a unit that says `fetch`
256
+ // asks.
257
+ const DT = DictType(IntegerType, StringType);
258
+ let dir;
259
+ let input;
260
+ let segmentDir;
261
+ let store;
262
+ let segments;
263
+ before(() => {
264
+ dir = mkdtempSync(join(tmpdir(), 'east-node-exec-fetch-'));
265
+ input = join(dir, 'table.beast2');
266
+ segmentDir = `${input}.segments`;
267
+ store = join(dir, 'store');
268
+ mkdirSync(segmentDir);
269
+ mkdirSync(store);
270
+ // Staged as e3 stages it, and every segment moved to the host's store.
271
+ const writer = new Beast2ManifestWriter(DT, {
272
+ object: (hash, bytes) => writeFileSync(join(store, `${hash}.beast2`), bytes),
273
+ manifest: (bytes) => writeFileSync(input, bytes),
274
+ });
275
+ for (let i = 0; i < 20_000; i++)
276
+ writer.add([BigInt(i), `row-${i}`]);
277
+ writer.finish();
278
+ segments = decodeCollectionManifest(new Uint8Array(readFileSync(input))).entries.map((entry) => `${entry.hash}.beast2`);
279
+ assert.ok(segments.length > 4, `several segments, got ${segments.length}`);
280
+ writeFileSync(join(dir, 'program.beast2'), encodeEastIR(East.function([DT], StringType, ($, table) => table.get(9999n)).toIR()));
281
+ });
282
+ after(() => {
283
+ rmSync(dir, { recursive: true, force: true });
284
+ });
285
+ beforeEach(() => {
286
+ // Each run starts with no segment placed, and nothing asked for.
287
+ for (const name of readdirSync(segmentDir))
288
+ rmSync(join(segmentDir, name));
289
+ rmSync(join(dir, 'out.beast2'), { force: true });
290
+ rmSync(join(dir, 'result.beast2'), { force: true });
291
+ });
292
+ /** Writes the unit: the program on the table, fetching or not, lazily or
293
+ * whole. */
294
+ function writeUnit(fetch, decode) {
295
+ const unitPath = join(dir, 'unit.beast2');
296
+ writeFileSync(unitPath, encodeBeast2For(UnitType)({
297
+ work: variant('run', {
298
+ program: 'program.beast2',
299
+ inputs: ['table.beast2'],
300
+ output: variant('value', 'out.beast2'),
301
+ decode: decode === 'lazy' ? variant('lazy', null) : variant('whole', null),
302
+ }),
303
+ platforms: [],
304
+ threads: 1n,
305
+ fetch,
306
+ result: 'result.beast2',
307
+ }));
308
+ return unitPath;
309
+ }
310
+ /**
311
+ * Executes a unit while this process is its host, placing each segment it
312
+ * asks for from the store — or, given a refusal, answering each ask with
313
+ * it — within a bounded wait.
314
+ *
315
+ * @returns the exit status, stderr, and the segments asked for, in order
316
+ */
317
+ async function execHosted(unitPath, refusal) {
318
+ const child = spawn(process.execPath, [bin, 'exec', unitPath], { stdio: ['ignore', 'ignore', 'pipe'] });
319
+ let stderr = '';
320
+ child.stderr.setEncoding('utf8');
321
+ child.stderr.on('data', (chunk) => { stderr += chunk; });
322
+ const closed = new Promise((resolve) => child.on('close', (code) => resolve(code)));
323
+ const asked = [];
324
+ const host = setInterval(() => {
325
+ for (const name of readdirSync(segmentDir)) {
326
+ if (!name.endsWith('.want'))
327
+ continue;
328
+ const segment = name.slice(0, -'.want'.length);
329
+ if (asked.includes(segment))
330
+ continue;
331
+ asked.push(segment);
332
+ const file = join(segmentDir, segment);
333
+ // Whole, or not at all: the runner reads either file the moment
334
+ // it is there, so each is written under a name of its own and
335
+ // renamed into place, as e3's host writes them.
336
+ if (refusal !== undefined) {
337
+ writeFileSync(`${file}.error.partial`, refusal);
338
+ renameSync(`${file}.error.partial`, `${file}.error`);
339
+ }
340
+ else {
341
+ copyFileSync(join(store, segment), `${file}.placing`);
342
+ renameSync(`${file}.placing`, file);
343
+ }
344
+ }
345
+ }, 2);
346
+ let timer;
347
+ try {
348
+ const status = await Promise.race([closed, new Promise((resolve) => { timer = setTimeout(() => resolve('late'), 60_000); })]);
349
+ assert.notEqual(status, 'late', `the runner did not finish within 60 s:\n${stderr}`);
350
+ return { status: status, stderr, asked };
351
+ }
352
+ finally {
353
+ clearInterval(host);
354
+ clearTimeout(timer);
355
+ if (child.exitCode === null && child.signalCode === null)
356
+ child.kill('SIGKILL');
357
+ }
358
+ }
359
+ /** The unit's recorded outcome. */
360
+ const outcome = () => decodeBeast2For(UnitResultType)(readFileSync(join(dir, 'result.beast2'))).outcome;
361
+ it('asks for the one segment a lazy read reads, and for every segment a whole decode reads', async () => {
362
+ const lazy = await execHosted(writeUnit(true, 'lazy'));
363
+ assert.equal(lazy.status, 0, lazy.stderr);
364
+ assert.equal(decodeBeast2For(StringType)(readFileSync(join(dir, 'out.beast2'))), 'row-9999');
365
+ assert.equal(lazy.asked.length, 1, `one segment asked for, of ${segments.length}: ${lazy.asked.join(', ')}`);
366
+ assert.ok(segments.includes(lazy.asked[0]), 'a segment the manifest names');
367
+ for (const name of readdirSync(segmentDir))
368
+ rmSync(join(segmentDir, name));
369
+ const whole = await execHosted(writeUnit(true, 'whole'));
370
+ assert.equal(whole.status, 0, whole.stderr);
371
+ assert.equal(decodeBeast2For(StringType)(readFileSync(join(dir, 'out.beast2'))), 'row-9999');
372
+ assert.deepEqual(whole.asked, segments, 'every segment, in the manifest\'s order');
373
+ });
374
+ it('fails in the host\'s words when the host cannot place a segment', async () => {
375
+ const refused = await execHosted(writeUnit(true, 'lazy'), 'the store is throttling');
376
+ assert.equal(refused.status, 1, refused.stderr);
377
+ const failed = outcome();
378
+ if (failed.type !== 'failed')
379
+ assert.fail(`the outcome is ${failed.type}`);
380
+ // The segment as every runner names it: `<input>.segments/<hash>.beast2`.
381
+ assert.equal(failed.value.message, `beast2 v5: manifest segment ${input}.segments/${refused.asked[0]} cannot be placed: the store is throttling`);
382
+ assert.ok(!existsSync(join(dir, 'out.beast2')), 'nothing is written');
383
+ });
384
+ it('asks for nothing for a unit that does not say fetch, and fails on the absent segment at once', async () => {
385
+ const unasked = await execHosted(writeUnit(false, 'lazy'));
386
+ assert.equal(unasked.status, 1, unasked.stderr);
387
+ assert.deepEqual(unasked.asked, []);
388
+ assert.deepEqual(readdirSync(segmentDir), [], 'no segment asked for');
389
+ const failed = outcome();
390
+ if (failed.type !== 'failed')
391
+ assert.fail(`the outcome is ${failed.type}`);
392
+ assert.match(failed.value.message, /^ENOENT: no such file or directory, open '.*\.beast2'$/);
125
393
  });
126
394
  });
127
395
  describe('exec: a unit given no platform', () => {
@@ -144,7 +412,7 @@ describe('exec: a unit given no platform', () => {
144
412
  writeFileSync(join(dir, 'program.beast2'), encodeEastIR(program.toIR()));
145
413
  writeFileSync(join(dir, 'x.beast2'), encodeBeast2For(IntegerType)(7n));
146
414
  writeFileSync(join(dir, 'unit.beast2'), encodeBeast2For(UnitType)({
147
- work: variant('run', { program: 'program.beast2', inputs: ['x.beast2'], output: variant('value', 'out.beast2') }),
415
+ work: variant('run', { program: 'program.beast2', inputs: ['x.beast2'], output: variant('value', 'out.beast2'), decode: variant('lazy', null) }),
148
416
  platforms: [],
149
417
  threads: 1n,
150
418
  fetch: false,
@@ -1 +1 @@
1
- {"version":3,"file":"exec.spec.js","sourceRoot":"","sources":["../src/exec.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exec.spec.js","sourceRoot":"","sources":["../src/exec.spec.ts"],"names":[],"mappings":"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"}
package/dist/loader.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 { EastIR, AsyncEastIR, type EastTypeValue } from '@elaraai/east';
5
+ import { type AsyncEastIR, type EastIR, type EastTypeValue, type UnitIO } from '@elaraai/east';
6
6
  import type { PlatformFunction, IR, ValueTypeOf } from '@elaraai/east/internal';
7
7
  /**
8
8
  * Metadata about a loaded platform package.
@@ -40,6 +40,64 @@ export declare function loadPlatformWithMetadata(packageName: string): Promise<P
40
40
  * @returns Combined array of all platform functions
41
41
  */
42
42
  export declare function loadPlatforms(packageNames: string[]): Promise<PlatformFunction[]>;
43
+ /**
44
+ * A staged manifest's segment file, present: asked of the host when it is
45
+ * absent and the host places segments as they are read (`fetch`), by creating
46
+ * `<file>.want` and waiting for the host to place the file or to write
47
+ * `<file>.error`, why it cannot — each whole, renamed into place, since this
48
+ * reads either the moment it is there. Without `fetch`, an absent file is
49
+ * returned as it is, for its read to fail as ever.
50
+ *
51
+ * @param file - the segment's file, `<input>.segments/<hash>.beast2`
52
+ * @param fetch - whether the unit's host places segments as they are read
53
+ * @returns the file
54
+ * @throws {Error} When the host writes why it cannot place the segment.
55
+ */
56
+ export declare function segmentFile(file: string, fetch: boolean): string;
57
+ /**
58
+ * Whether this process's units' hosts place segments as they are read:
59
+ * {@link FETCH_SEGMENTS_ENV} is `1`, which `exec` sets from its unit's
60
+ * `fetch`, and which a host never sets for a runner.
61
+ *
62
+ * @returns whether an absent segment of a staged manifest is asked for
63
+ */
64
+ export declare function fetchingSegments(): boolean;
65
+ /**
66
+ * The process's resident memory now, in bytes: the gauge a lazily opened
67
+ * input weighs a read of it whole by, and the verbose account weighs an input
68
+ * decoded whole by.
69
+ *
70
+ * @returns the resident set size
71
+ */
72
+ export declare function residentBytes(): number;
73
+ /** The variable east-c's pager reads its cache's budget from as it opens an
74
+ * input, which this runner reads for its own. */
75
+ export declare const PAGED_CACHE_BYTES_ENV = "EAST_PAGED_CACHE_BYTES";
76
+ /**
77
+ * The decoded weight, in bytes, a lazily opened input's pager keeps of the
78
+ * segments its keyed and index reads decode (`v5/SPEC.md`, "The pager's
79
+ * cache"): {@link PAGED_CACHE_BYTES_ENV}, read as east-c's pager reads it, so a
80
+ * test runs all three runners in one mode — `1` keeps one segment.
81
+ *
82
+ * @returns the budget, or `undefined` — the pager's default, 256 MiB — when
83
+ * the variable is unset or not a whole number in decimal digits, which
84
+ * east-c ignores too
85
+ */
86
+ export declare function pagedCacheBytes(): number | undefined;
87
+ /**
88
+ * The {@link UnitIO} over this machine's files, by the paths it is given — a
89
+ * relative one taken against the working directory, as every `fs` call takes
90
+ * it. `exec` hands it a unit whose paths it resolved against the unit file's
91
+ * directory first.
92
+ *
93
+ * @remarks
94
+ * A file's size and each ranged read open the file and close it after, so a
95
+ * lazily opened input holds no descriptor for its life, and a body that
96
+ * iterates every segment of a large manifest runs out of none. A missing file
97
+ * fails as opening it fails, and a directory is no file. A segment asked for
98
+ * is asked of the host through `<file>.want` ({@link segmentFile}).
99
+ */
100
+ export declare const nodeUnitIO: UnitIO;
43
101
  /**
44
102
  * Loads an IR file and returns the parsed IR.
45
103
  *
@@ -60,19 +118,19 @@ export declare function loadIR(filePath: string): ValueTypeOf<IR>;
60
118
  * map). Prefer this over {@link loadIR} when the caller will compile + run
61
119
  * the IR, so that error locations resolve end-to-end.
62
120
  *
63
- * Supports `.beast2` / `.beast` (source map read from the blob), `.json`
64
- * (source map read from the `{ir, source_map}` wrapper format), and `.east`
65
- * (no source map available — field stays null).
121
+ * Supports `.beast2` / `.beast` (source map read from the blob), `.json` and
122
+ * `.east` (no source map available — field stays null): east's
123
+ * `loadUnitProgram` over this machine's files.
66
124
  */
67
125
  export declare function loadEastIR(filePath: string): EastIR<any, any> | AsyncEastIR<any, any>;
68
126
  /**
69
- * Loads input data from a file.
70
- *
71
- * The type of the input must be provided to decode correctly.
127
+ * Loads input data from a file, decoded whole.
72
128
  *
73
129
  * Task inputs decode **frozen**: deeply immutable from construction, with
74
130
  * mutating builtins throwing the uniform runtime error naming the copy-first
75
- * remedy. Frozen collections compare by value under East `Is`.
131
+ * remedy. Frozen collections compare by value under East `Is`. A manifest is
132
+ * the collection it names, its segments spliced from the files beside it, each
133
+ * asked of the host when it places segments as they are read.
76
134
  *
77
135
  * @param filePath - Path to the input file
78
136
  * @param type - The expected East type of the input
@@ -91,17 +149,18 @@ export declare function loadInput(filePath: string, type: EastTypeValue): unknow
91
149
  export declare function lazyInputBytesRead(value: unknown): number | undefined;
92
150
  /**
93
151
  * Opens an input file as a lazy pager-backed collection value, when it can
94
- * be: a beast2 v5 collection blob carrying a segment index. Size, iteration
95
- * and keyed reads are then served from the index with O(segment) decoded
96
- * memory; any other operation hydrates transparently to the eager value's
97
- * exact semantics.
98
- *
99
- * The file is never buffered whole: the value pages segment frames from an
100
- * open descriptor through positioned reads (a Set or Dict input's first
101
- * keyed read probes every segment's fence once), so its residency is the
102
- * page cache and the process heap holds one decoded segment at a time — the
103
- * difference between an out-of-memory kill and graceful eviction for an
104
- * input near the runner's memory limit.
152
+ * be: a beast2 v5 collection blob carrying a segment index, or a manifest over
153
+ * its segment files. Size, iteration and keyed reads are then served from the
154
+ * index with O(segment) decoded memory; any other operation hydrates
155
+ * transparently to the eager value's exact semantics, and what that added to
156
+ * the process's resident memory is kept for the runner's verbose account.
157
+ *
158
+ * The file is never buffered whole: the value pages segment frames from it
159
+ * through positioned reads (a Set or Dict input's first keyed read probes
160
+ * every segment's fence once), so its residency is the page cache and the
161
+ * process heap holds one decoded segment at a time — the difference between an
162
+ * out-of-memory kill and graceful eviction for an input near the runner's
163
+ * memory limit.
105
164
  *
106
165
  * Returns `undefined` when the file cannot be served lazily (a non-beast2
107
166
  * format, a v4 or index-less blob, a non-collection root, cross-segment
@@ -113,39 +172,24 @@ export declare function lazyInputBytesRead(value: unknown): number | undefined;
113
172
  * mutated (no write through a freshly decoded element to drop) and frozen
114
173
  * collections compare by value. Only `Ref` (an identity cell even when
115
174
  * frozen) and function shapes fall back to the eager (frozen) decode.
116
- * {@link isBeast2LazySafe} is the gate.
175
+ *
176
+ * Its pager keeps the segments keyed and index reads decode, up to
177
+ * {@link pagedCacheBytes} of decoded weight.
117
178
  *
118
179
  * @param filePath - Path to the input file
119
180
  * @returns The lazy collection value, or `undefined` to fall back
120
181
  */
121
182
  export declare function loadInputLazy(filePath: string): unknown | undefined;
122
- /** The directory a manifest-rooted input's segment files sit in, beside the
123
- * file itself: `<input>.segments/<hash>.beast2`. The convention is shared
124
- * with e3-core's staging and with the other runtimes. */
125
- export declare function segmentDirFor(filePath: string): string;
126
- /**
127
- * A staged manifest's segment file, present: asked of the host when it is
128
- * absent and the host places segments as they are read ({@link
129
- * FETCH_SEGMENTS_ENV} is `1`), by creating `<file>.want` and waiting for the
130
- * host to place the file, whole, or to write `<file>.error`, why it cannot.
131
- * Without the variable, an absent file is returned as it is, for its read to
132
- * fail as ever.
133
- *
134
- * @param file - the segment's file, `<input>.segments/<hash>.beast2`
135
- * @returns the file
136
- * @throws {Error} When the host writes why it cannot place the segment.
137
- */
138
- export declare function segmentFile(file: string): string;
139
183
  /**
140
184
  * The bytes an input stands for: the collection a manifest-rooted file names
141
185
  * — the manifest and every segment file — or any other file's own size.
142
186
  *
143
187
  * @remarks
144
- * What the lazy-open threshold and the verbose account measure. A manifest is
145
- * a few dozen bytes per segment whatever the collection weighs, so its file's
146
- * size would put a multi-gigabyte input under any threshold and decode it
147
- * whole. The manifest is recognised through a positioned reader, so a large
148
- * blob is never read to learn that it is not one.
188
+ * What the verbose account weighs an input at. A manifest is a few dozen bytes
189
+ * per segment whatever the collection weighs, so its file's size would say
190
+ * nothing of what the input holds. The manifest is recognised through a
191
+ * positioned reader, so a large blob is never read to learn that it is not
192
+ * one.
149
193
  *
150
194
  * @param filePath - Path to the input file
151
195
  * @returns the byte count
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAiBH,MAAM,EACN,WAAW,EACX,KAAK,aAAa,EAErB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAWhF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,GAAG,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAsDD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAyCnF;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsB7F;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CASvF;AAmDD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAgCxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAuBrF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CA2BxE;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAErE;AAeD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAwBnE;AAED;;0DAE0D;AAC1D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAchD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAanD"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAMH,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,MAAM,EACd,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAmBhF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,GAAG,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AA4ED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA0CnF;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsB7F;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CASvF;AAgCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAchE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;kDACkD;AAClD,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAGpD;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU,EAAE,MAqCxB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAgCxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAErF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAExE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAErE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAOnE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD"}