@elaraai/east-node-cli 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/README.md +9 -6
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/exec.d.ts +14 -19
- package/dist/exec.d.ts.map +1 -1
- package/dist/exec.js +40 -330
- package/dist/exec.js.map +1 -1
- package/dist/exec.spec.js +263 -6
- package/dist/exec.spec.js.map +1 -1
- package/dist/loader.d.ts +81 -38
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +180 -305
- package/dist/loader.js.map +1 -1
- package/dist/loader.spec.js +42 -2
- package/dist/loader.spec.js.map +1 -1
- package/dist/merge.d.ts +5 -1
- package/dist/merge.d.ts.map +1 -1
- package/dist/merge.js +24 -241
- package/dist/merge.js.map +1 -1
- package/dist/runner.d.ts +36 -28
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +59 -57
- package/dist/runner.js.map +1 -1
- package/dist/runner.spec.js +29 -4
- package/dist/runner.spec.js.map +1 -1
- package/package.json +3 -3
package/dist/loader.js
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
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 { closeSync, existsSync, fstatSync, openSync, readFileSync, readSync,
|
|
5
|
+
import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readdirSync, readFileSync, readSync, realpathSync, writeFileSync } from 'fs';
|
|
6
6
|
import { createRequire } from 'module';
|
|
7
7
|
import * as path from 'path';
|
|
8
|
-
import { extname } from 'path';
|
|
9
8
|
import { fileURLToPath, pathToFileURL } from 'url';
|
|
10
|
-
import { IRType, FETCH_SEGMENTS_ENV, decodeBeast2For,
|
|
9
|
+
import { IRType, FETCH_SEGMENTS_ENV, decodeBeast2For, decodeEastFor, decodeJSONFor, } from '@elaraai/east';
|
|
10
|
+
import { lazyInputBytesRead as lazyUnitInputBytesRead, loadUnitInput, loadUnitProgram, openUnitInputLazy, unitFileFormat, unitInputBytes, } from '@elaraai/east/internal';
|
|
11
11
|
// Decoder for IR from beast2 format (self-describing)
|
|
12
12
|
const decodeIRFromBeast2 = decodeBeast2For(IRType);
|
|
13
13
|
// Decoder for IR from east text format
|
|
@@ -31,6 +31,13 @@ const decodeIRFromJSON = decodeJSONFor(IRType);
|
|
|
31
31
|
* require root sits inside that package — i.e. at the project root.
|
|
32
32
|
* 3. The process cwd (`process.cwd()`) — for a standalone `east-node run`
|
|
33
33
|
* invoked from the project shell, where cwd IS the project root.
|
|
34
|
+
* 4. The REAL path of the CLI's own script (`realpath(process.argv[1])`'s
|
|
35
|
+
* dir) — for a global install. npm's global bin links into the install,
|
|
36
|
+
* and the walk up from the link's own directory reaches no `node_modules`;
|
|
37
|
+
* the walk up from the script's real path reaches the global
|
|
38
|
+
* `node_modules`, and the packages installed beside the CLI, with no
|
|
39
|
+
* `NODE_PATH`. Last, never first: under pnpm the real path is in the
|
|
40
|
+
* store, whose walk up misses the project's own packages.
|
|
34
41
|
*
|
|
35
42
|
* All roots are tried; the first that resolves wins. Stock platforms still
|
|
36
43
|
* resolve via step 1 first, so existing behaviour is unchanged.
|
|
@@ -42,9 +49,25 @@ function platformRequireRoots() {
|
|
|
42
49
|
if (fromE3)
|
|
43
50
|
roots.push(...fromE3.split(path.delimiter).filter(Boolean));
|
|
44
51
|
roots.push(process.cwd());
|
|
52
|
+
const real = realScript(cliEntry);
|
|
53
|
+
if (real !== undefined)
|
|
54
|
+
roots.push(path.dirname(real));
|
|
45
55
|
// Dedupe so a CLI invoked from the project root doesn't probe twice.
|
|
46
56
|
return [...new Set(roots)];
|
|
47
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* The real path of the script node was started with, its links followed; or
|
|
60
|
+
* `undefined` when there is no such file (a `node -e` program's), and so no
|
|
61
|
+
* root to add.
|
|
62
|
+
*/
|
|
63
|
+
function realScript(entry) {
|
|
64
|
+
try {
|
|
65
|
+
return realpathSync(entry);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
48
71
|
/**
|
|
49
72
|
* Resolve a platform package's `./<subpath>` export across the candidate
|
|
50
73
|
* require roots ({@link platformRequireRoots}). Returns the absolute resolved
|
|
@@ -80,9 +103,10 @@ export async function loadPlatform(packageName) {
|
|
|
80
103
|
try {
|
|
81
104
|
// Resolve the package's `./platform` export across the candidate require
|
|
82
105
|
// roots — the linked CLI bin location for installed stock platforms, the
|
|
83
|
-
// e3-provided project root(s) and cwd for a project's own package
|
|
106
|
+
// e3-provided project root(s) and cwd for a project's own package, and
|
|
107
|
+
// last the CLI script's real path for a global install. See
|
|
84
108
|
// {@link platformRequireRoots} / {@link resolvePlatformSubpath} for why
|
|
85
|
-
// each root is needed
|
|
109
|
+
// each root is needed, and why the real path comes last.
|
|
86
110
|
const resolvedPath = resolvePlatformSubpath(packageName, 'platform');
|
|
87
111
|
const platformModule = await import(pathToFileURL(resolvedPath).href);
|
|
88
112
|
const fns = platformModule.default;
|
|
@@ -176,24 +200,129 @@ function isValidPlatformFunction(value) {
|
|
|
176
200
|
return false;
|
|
177
201
|
return true;
|
|
178
202
|
}
|
|
203
|
+
/** The longest a runner waits between looks for a segment it asked for. */
|
|
204
|
+
const FETCH_WAIT_MAX_MS = 50;
|
|
179
205
|
/**
|
|
180
|
-
*
|
|
206
|
+
* A staged manifest's segment file, present: asked of the host when it is
|
|
207
|
+
* absent and the host places segments as they are read (`fetch`), by creating
|
|
208
|
+
* `<file>.want` and waiting for the host to place the file or to write
|
|
209
|
+
* `<file>.error`, why it cannot — each whole, renamed into place, since this
|
|
210
|
+
* reads either the moment it is there. Without `fetch`, an absent file is
|
|
211
|
+
* returned as it is, for its read to fail as ever.
|
|
212
|
+
*
|
|
213
|
+
* @param file - the segment's file, `<input>.segments/<hash>.beast2`
|
|
214
|
+
* @param fetch - whether the unit's host places segments as they are read
|
|
215
|
+
* @returns the file
|
|
216
|
+
* @throws {Error} When the host writes why it cannot place the segment.
|
|
181
217
|
*/
|
|
182
|
-
function
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
218
|
+
export function segmentFile(file, fetch) {
|
|
219
|
+
if (!fetch || existsSync(file))
|
|
220
|
+
return file;
|
|
221
|
+
const error = `${file}.error`;
|
|
222
|
+
closeSync(openSync(`${file}.want`, 'a'));
|
|
223
|
+
// The runner has nothing else to do while it waits: it sleeps between
|
|
224
|
+
// looks, a little longer each time.
|
|
225
|
+
const pause = new Int32Array(new SharedArrayBuffer(4));
|
|
226
|
+
for (let wait = 1; !existsSync(file); wait = Math.min(2 * wait, FETCH_WAIT_MAX_MS)) {
|
|
227
|
+
if (existsSync(error)) {
|
|
228
|
+
throw new Error(`beast2 v5: manifest segment ${file} cannot be placed: ${readFileSync(error, 'utf8')}`);
|
|
229
|
+
}
|
|
230
|
+
Atomics.wait(pause, 0, 0, wait);
|
|
195
231
|
}
|
|
232
|
+
return file;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Whether this process's units' hosts place segments as they are read:
|
|
236
|
+
* {@link FETCH_SEGMENTS_ENV} is `1`, which `exec` sets from its unit's
|
|
237
|
+
* `fetch`, and which a host never sets for a runner.
|
|
238
|
+
*
|
|
239
|
+
* @returns whether an absent segment of a staged manifest is asked for
|
|
240
|
+
*/
|
|
241
|
+
export function fetchingSegments() {
|
|
242
|
+
return process.env[FETCH_SEGMENTS_ENV] === '1';
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* The process's resident memory now, in bytes: the gauge a lazily opened
|
|
246
|
+
* input weighs a read of it whole by, and the verbose account weighs an input
|
|
247
|
+
* decoded whole by.
|
|
248
|
+
*
|
|
249
|
+
* @returns the resident set size
|
|
250
|
+
*/
|
|
251
|
+
export function residentBytes() {
|
|
252
|
+
return process.memoryUsage.rss();
|
|
253
|
+
}
|
|
254
|
+
/** The variable east-c's pager reads its cache's budget from as it opens an
|
|
255
|
+
* input, which this runner reads for its own. */
|
|
256
|
+
export const PAGED_CACHE_BYTES_ENV = 'EAST_PAGED_CACHE_BYTES';
|
|
257
|
+
/**
|
|
258
|
+
* The decoded weight, in bytes, a lazily opened input's pager keeps of the
|
|
259
|
+
* segments its keyed and index reads decode (`v5/SPEC.md`, "The pager's
|
|
260
|
+
* cache"): {@link PAGED_CACHE_BYTES_ENV}, read as east-c's pager reads it, so a
|
|
261
|
+
* test runs all three runners in one mode — `1` keeps one segment.
|
|
262
|
+
*
|
|
263
|
+
* @returns the budget, or `undefined` — the pager's default, 256 MiB — when
|
|
264
|
+
* the variable is unset or not a whole number in decimal digits, which
|
|
265
|
+
* east-c ignores too
|
|
266
|
+
*/
|
|
267
|
+
export function pagedCacheBytes() {
|
|
268
|
+
const text = process.env[PAGED_CACHE_BYTES_ENV];
|
|
269
|
+
return text !== undefined && /^\d+$/.test(text) ? Number(text) : undefined;
|
|
196
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* The {@link UnitIO} over this machine's files, by the paths it is given — a
|
|
273
|
+
* relative one taken against the working directory, as every `fs` call takes
|
|
274
|
+
* it. `exec` hands it a unit whose paths it resolved against the unit file's
|
|
275
|
+
* directory first.
|
|
276
|
+
*
|
|
277
|
+
* @remarks
|
|
278
|
+
* A file's size and each ranged read open the file and close it after, so a
|
|
279
|
+
* lazily opened input holds no descriptor for its life, and a body that
|
|
280
|
+
* iterates every segment of a large manifest runs out of none. A missing file
|
|
281
|
+
* fails as opening it fails, and a directory is no file. A segment asked for
|
|
282
|
+
* is asked of the host through `<file>.want` ({@link segmentFile}).
|
|
283
|
+
*/
|
|
284
|
+
export const nodeUnitIO = {
|
|
285
|
+
read: (file) => readFileSync(file),
|
|
286
|
+
size: (file) => {
|
|
287
|
+
const fd = openSync(file, 'r');
|
|
288
|
+
try {
|
|
289
|
+
const stat = fstatSync(fd);
|
|
290
|
+
if (!stat.isFile())
|
|
291
|
+
throw new Error(`${file} is not a file`);
|
|
292
|
+
return stat.size;
|
|
293
|
+
}
|
|
294
|
+
finally {
|
|
295
|
+
closeSync(fd);
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
readRange: (file, offset, length) => {
|
|
299
|
+
const fd = openSync(file, 'r');
|
|
300
|
+
try {
|
|
301
|
+
const out = new Uint8Array(length);
|
|
302
|
+
let done = 0;
|
|
303
|
+
while (done < length) {
|
|
304
|
+
const got = readSync(fd, out, done, length - done, offset + done);
|
|
305
|
+
if (got === 0)
|
|
306
|
+
break;
|
|
307
|
+
done += got;
|
|
308
|
+
}
|
|
309
|
+
return done === length ? out : out.subarray(0, done);
|
|
310
|
+
}
|
|
311
|
+
finally {
|
|
312
|
+
closeSync(fd);
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
segment: (file, fetch) => {
|
|
316
|
+
segmentFile(file, fetch);
|
|
317
|
+
},
|
|
318
|
+
list: (dir) => readdirSync(dir),
|
|
319
|
+
makeDirectory: (dir) => {
|
|
320
|
+
mkdirSync(dir, { recursive: true });
|
|
321
|
+
},
|
|
322
|
+
write: (file, bytes) => {
|
|
323
|
+
writeFileSync(file, bytes);
|
|
324
|
+
},
|
|
325
|
+
};
|
|
197
326
|
/**
|
|
198
327
|
* Loads an IR file and returns the parsed IR.
|
|
199
328
|
*
|
|
@@ -209,7 +338,7 @@ function getFileFormat(filePath) {
|
|
|
209
338
|
* @returns Parsed IR (FunctionIR or AsyncFunctionIR)
|
|
210
339
|
*/
|
|
211
340
|
export function loadIR(filePath) {
|
|
212
|
-
const format =
|
|
341
|
+
const format = unitFileFormat(filePath);
|
|
213
342
|
const data = readFileSync(filePath);
|
|
214
343
|
let ir;
|
|
215
344
|
switch (format) {
|
|
@@ -240,98 +369,29 @@ export function loadIR(filePath) {
|
|
|
240
369
|
* map). Prefer this over {@link loadIR} when the caller will compile + run
|
|
241
370
|
* the IR, so that error locations resolve end-to-end.
|
|
242
371
|
*
|
|
243
|
-
* Supports `.beast2` / `.beast` (source map read from the blob), `.json`
|
|
244
|
-
* (source map
|
|
245
|
-
*
|
|
372
|
+
* Supports `.beast2` / `.beast` (source map read from the blob), `.json` and
|
|
373
|
+
* `.east` (no source map available — field stays null): east's
|
|
374
|
+
* `loadUnitProgram` over this machine's files.
|
|
246
375
|
*/
|
|
247
376
|
export function loadEastIR(filePath) {
|
|
248
|
-
|
|
249
|
-
const data = readFileSync(filePath);
|
|
250
|
-
if (format === 'beast2') {
|
|
251
|
-
// Peek at the root variant to pick sync/async decoder.
|
|
252
|
-
const probe = decodeIRFromBeast2(data);
|
|
253
|
-
if (probe.type === 'Function') {
|
|
254
|
-
return decodeEastIR(data);
|
|
255
|
-
}
|
|
256
|
-
if (probe.type === 'AsyncFunction') {
|
|
257
|
-
return decodeAsyncEastIR(data);
|
|
258
|
-
}
|
|
259
|
-
throw new Error(`IR file must contain a function or async function, got "${probe.type}"`);
|
|
260
|
-
}
|
|
261
|
-
// For east / json formats we fall back to the IR-only path (no source map).
|
|
262
|
-
// JSON wrapper parsing for {ir, source_map} can be added here if needed.
|
|
263
|
-
const ir = loadIR(filePath);
|
|
264
|
-
if (ir.type === 'Function') {
|
|
265
|
-
return new EastIR(ir);
|
|
266
|
-
}
|
|
267
|
-
return new AsyncEastIR(ir);
|
|
377
|
+
return loadUnitProgram(nodeUnitIO, filePath);
|
|
268
378
|
}
|
|
269
379
|
/**
|
|
270
|
-
* Loads input data from a file.
|
|
271
|
-
*
|
|
272
|
-
* The type of the input must be provided to decode correctly.
|
|
380
|
+
* Loads input data from a file, decoded whole.
|
|
273
381
|
*
|
|
274
382
|
* Task inputs decode **frozen**: deeply immutable from construction, with
|
|
275
383
|
* mutating builtins throwing the uniform runtime error naming the copy-first
|
|
276
|
-
* remedy. Frozen collections compare by value under East `Is`.
|
|
384
|
+
* remedy. Frozen collections compare by value under East `Is`. A manifest is
|
|
385
|
+
* the collection it names, its segments spliced from the files beside it, each
|
|
386
|
+
* asked of the host when it places segments as they are read.
|
|
277
387
|
*
|
|
278
388
|
* @param filePath - Path to the input file
|
|
279
389
|
* @param type - The expected East type of the input
|
|
280
390
|
* @returns Decoded value
|
|
281
391
|
*/
|
|
282
392
|
export function loadInput(filePath, type) {
|
|
283
|
-
|
|
284
|
-
const data = readFileSync(filePath);
|
|
285
|
-
switch (format) {
|
|
286
|
-
case 'beast2': {
|
|
287
|
-
// A manifest-rooted file is the collection it describes: splice
|
|
288
|
-
// its segment files back under their shared header and decode
|
|
289
|
-
// that, which is the same value the lazy opener serves.
|
|
290
|
-
const manifest = readBeast2Manifest(data);
|
|
291
|
-
if (manifest !== null) {
|
|
292
|
-
return decodeBeast2(spliceManifestFiles(filePath, manifest), { frozen: true }).value;
|
|
293
|
-
}
|
|
294
|
-
// For inputs, we use decodeBeast2 which is self-describing
|
|
295
|
-
// This allows loading data without knowing the exact type
|
|
296
|
-
const result = decodeBeast2(data, { frozen: true });
|
|
297
|
-
return result.value;
|
|
298
|
-
}
|
|
299
|
-
case 'east': {
|
|
300
|
-
const decoder = decodeEastFor(type, true);
|
|
301
|
-
return decoder(data);
|
|
302
|
-
}
|
|
303
|
-
case 'json': {
|
|
304
|
-
const decoder = decodeJSONFor(type, true);
|
|
305
|
-
return decoder(data);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* One blob out of a manifest-rooted input's segment files — the whole-value
|
|
311
|
-
* form, for a decode that is not going to be lazy.
|
|
312
|
-
*
|
|
313
|
-
* @remarks
|
|
314
|
-
* The segments are standalone blobs sharing one header, so the splice is a
|
|
315
|
-
* concatenation of their frame bytes under it: nothing is decoded, and the
|
|
316
|
-
* result is byte-identical to the blob the value was cut from.
|
|
317
|
-
*
|
|
318
|
-
* @param filePath - the manifest file
|
|
319
|
-
* @param manifest - its decoded manifest
|
|
320
|
-
* @returns the spliced blob
|
|
321
|
-
* @throws {Error} When a segment the manifest names is missing.
|
|
322
|
-
*/
|
|
323
|
-
function spliceManifestFiles(filePath, manifest) {
|
|
324
|
-
const type = manifest.type;
|
|
325
|
-
// An empty collection names no segment, so there is nothing to splice:
|
|
326
|
-
// the writer's own empty blob is what it was cut from.
|
|
327
|
-
if (manifest.entries.length === 0)
|
|
328
|
-
return encodeBeast2SegmentsFor(type)([]);
|
|
329
|
-
const dir = segmentDirFor(filePath);
|
|
330
|
-
return spliceBeast2(manifest.entries.map((entry) => new Uint8Array(readFileSync(segmentFile(path.join(dir, `${entry.hash}.beast2`))))));
|
|
393
|
+
return loadUnitInput(nodeUnitIO, filePath, type, fetchingSegments());
|
|
331
394
|
}
|
|
332
|
-
/** Bytes each lazily opened input has read from its descriptor so far —
|
|
333
|
-
* what "paged from the file" came to, for the runner's verbose summary. */
|
|
334
|
-
const lazyInputReads = new WeakMap();
|
|
335
395
|
/**
|
|
336
396
|
* Bytes a value from {@link loadInputLazy} has read so far: the geometry
|
|
337
397
|
* (tail and head), every fence probe, and each segment frame decoded, across
|
|
@@ -342,40 +402,22 @@ const lazyInputReads = new WeakMap();
|
|
|
342
402
|
* @returns the byte count, or `undefined` when the value was not opened lazily
|
|
343
403
|
*/
|
|
344
404
|
export function lazyInputBytesRead(value) {
|
|
345
|
-
return
|
|
405
|
+
return lazyUnitInputBytesRead(value);
|
|
346
406
|
}
|
|
347
|
-
/** How an input opens lazily: frozen, like every task input, and weighing a
|
|
348
|
-
* read of it whole — which an operation the pager cannot serve makes — by
|
|
349
|
-
* the growth in the process's resident memory, for the runner's verbose
|
|
350
|
-
* account (`beast2LazyStats`). */
|
|
351
|
-
const LAZY_INPUT_OPTIONS = { frozen: true, resident: () => process.memoryUsage.rss() };
|
|
352
|
-
/** The descriptors behind lazily opened inputs, closed when their value is
|
|
353
|
-
* collected: the value reads segment frames from the descriptor for its
|
|
354
|
-
* whole life. A runner holds one per lazy input. */
|
|
355
|
-
const lazyInputFiles = new FinalizationRegistry((handles) => {
|
|
356
|
-
for (const fd of handles) {
|
|
357
|
-
try {
|
|
358
|
-
closeSync(fd);
|
|
359
|
-
}
|
|
360
|
-
catch {
|
|
361
|
-
// Already closed — nothing else to release.
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
});
|
|
365
407
|
/**
|
|
366
408
|
* Opens an input file as a lazy pager-backed collection value, when it can
|
|
367
|
-
* be: a beast2 v5 collection blob carrying a segment index
|
|
368
|
-
* and keyed reads are then served from the
|
|
369
|
-
* memory; any other operation hydrates
|
|
370
|
-
* exact semantics, and what that added to
|
|
371
|
-
* kept for the runner's verbose account.
|
|
409
|
+
* be: a beast2 v5 collection blob carrying a segment index, or a manifest over
|
|
410
|
+
* its segment files. Size, iteration and keyed reads are then served from the
|
|
411
|
+
* index with O(segment) decoded memory; any other operation hydrates
|
|
412
|
+
* transparently to the eager value's exact semantics, and what that added to
|
|
413
|
+
* the process's resident memory is kept for the runner's verbose account.
|
|
372
414
|
*
|
|
373
|
-
* The file is never buffered whole: the value pages segment frames from
|
|
374
|
-
*
|
|
375
|
-
*
|
|
376
|
-
*
|
|
377
|
-
*
|
|
378
|
-
*
|
|
415
|
+
* The file is never buffered whole: the value pages segment frames from it
|
|
416
|
+
* through positioned reads (a Set or Dict input's first keyed read probes
|
|
417
|
+
* every segment's fence once), so its residency is the page cache and the
|
|
418
|
+
* process heap holds one decoded segment at a time — the difference between an
|
|
419
|
+
* out-of-memory kill and graceful eviction for an input near the runner's
|
|
420
|
+
* memory limit.
|
|
379
421
|
*
|
|
380
422
|
* Returns `undefined` when the file cannot be served lazily (a non-beast2
|
|
381
423
|
* format, a v4 or index-less blob, a non-collection root, cross-segment
|
|
@@ -387,73 +429,20 @@ const lazyInputFiles = new FinalizationRegistry((handles) => {
|
|
|
387
429
|
* mutated (no write through a freshly decoded element to drop) and frozen
|
|
388
430
|
* collections compare by value. Only `Ref` (an identity cell even when
|
|
389
431
|
* frozen) and function shapes fall back to the eager (frozen) decode.
|
|
390
|
-
*
|
|
432
|
+
*
|
|
433
|
+
* Its pager keeps the segments keyed and index reads decode, up to
|
|
434
|
+
* {@link pagedCacheBytes} of decoded weight.
|
|
391
435
|
*
|
|
392
436
|
* @param filePath - Path to the input file
|
|
393
437
|
* @returns The lazy collection value, or `undefined` to fall back
|
|
394
438
|
*/
|
|
395
439
|
export function loadInputLazy(filePath) {
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
// its segments the sibling files it names — so the input was staged
|
|
403
|
-
// by linking rather than by splicing, and nothing here reads a
|
|
404
|
-
// segment the body does not touch.
|
|
405
|
-
const manifest = readBeast2Manifest(reader);
|
|
406
|
-
if (manifest !== null)
|
|
407
|
-
return openManifestLazy(filePath, manifest, open);
|
|
408
|
-
const extents = readBeast2Extents(reader);
|
|
409
|
-
if (!extents.selfContained || !isBeast2LazySafe(extents.typeValue, { frozen: true })) {
|
|
410
|
-
open.closeAll();
|
|
411
|
-
return undefined;
|
|
412
|
-
}
|
|
413
|
-
const value = openBeast2LazyFor(extents.typeValue, LAZY_INPUT_OPTIONS)(reader);
|
|
414
|
-
open.own(value);
|
|
415
|
-
return value;
|
|
416
|
-
}
|
|
417
|
-
catch {
|
|
418
|
-
open.closeAll();
|
|
419
|
-
return undefined;
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
/** The directory a manifest-rooted input's segment files sit in, beside the
|
|
423
|
-
* file itself: `<input>.segments/<hash>.beast2`. The convention is shared
|
|
424
|
-
* with e3-core's staging and with the other runtimes. */
|
|
425
|
-
export function segmentDirFor(filePath) {
|
|
426
|
-
return `${filePath}.segments`;
|
|
427
|
-
}
|
|
428
|
-
/** The longest a runner waits between looks for a segment it asked for. */
|
|
429
|
-
const FETCH_WAIT_MAX_MS = 50;
|
|
430
|
-
/**
|
|
431
|
-
* A staged manifest's segment file, present: asked of the host when it is
|
|
432
|
-
* absent and the host places segments as they are read ({@link
|
|
433
|
-
* FETCH_SEGMENTS_ENV} is `1`), by creating `<file>.want` and waiting for the
|
|
434
|
-
* host to place the file, whole, or to write `<file>.error`, why it cannot.
|
|
435
|
-
* Without the variable, an absent file is returned as it is, for its read to
|
|
436
|
-
* fail as ever.
|
|
437
|
-
*
|
|
438
|
-
* @param file - the segment's file, `<input>.segments/<hash>.beast2`
|
|
439
|
-
* @returns the file
|
|
440
|
-
* @throws {Error} When the host writes why it cannot place the segment.
|
|
441
|
-
*/
|
|
442
|
-
export function segmentFile(file) {
|
|
443
|
-
if (existsSync(file) || process.env[FETCH_SEGMENTS_ENV] !== '1')
|
|
444
|
-
return file;
|
|
445
|
-
const error = `${file}.error`;
|
|
446
|
-
closeSync(openSync(`${file}.want`, 'a'));
|
|
447
|
-
// The runner has nothing else to do while it waits: it sleeps between
|
|
448
|
-
// looks, a little longer each time.
|
|
449
|
-
const pause = new Int32Array(new SharedArrayBuffer(4));
|
|
450
|
-
for (let wait = 1; !existsSync(file); wait = Math.min(2 * wait, FETCH_WAIT_MAX_MS)) {
|
|
451
|
-
if (existsSync(error)) {
|
|
452
|
-
throw new Error(`beast2 v5: manifest segment ${file} cannot be placed: ${readFileSync(error, 'utf8')}`);
|
|
453
|
-
}
|
|
454
|
-
Atomics.wait(pause, 0, 0, wait);
|
|
455
|
-
}
|
|
456
|
-
return file;
|
|
440
|
+
const cacheBytes = pagedCacheBytes();
|
|
441
|
+
return openUnitInputLazy(nodeUnitIO, filePath, {
|
|
442
|
+
fetch: fetchingSegments(),
|
|
443
|
+
resident: residentBytes,
|
|
444
|
+
...(cacheBytes !== undefined && { cacheBytes }),
|
|
445
|
+
});
|
|
457
446
|
}
|
|
458
447
|
/**
|
|
459
448
|
* The bytes an input stands for: the collection a manifest-rooted file names
|
|
@@ -470,120 +459,6 @@ export function segmentFile(file) {
|
|
|
470
459
|
* @returns the byte count
|
|
471
460
|
*/
|
|
472
461
|
export function inputBytes(filePath) {
|
|
473
|
-
|
|
474
|
-
return statSync(filePath).size;
|
|
475
|
-
const open = openCounted();
|
|
476
|
-
try {
|
|
477
|
-
const reader = open.reader(filePath);
|
|
478
|
-
const manifest = readBeast2Manifest(reader);
|
|
479
|
-
if (manifest === null)
|
|
480
|
-
return reader.size;
|
|
481
|
-
return manifest.entries.reduce((sum, entry) => sum + Number(entry.bytes), reader.size);
|
|
482
|
-
}
|
|
483
|
-
catch {
|
|
484
|
-
return statSync(filePath).size;
|
|
485
|
-
}
|
|
486
|
-
finally {
|
|
487
|
-
open.closeAll();
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
/** Opens a manifest-rooted input as a lazy collection over its segment files.
|
|
491
|
-
* Returns `undefined` when the element shape is not lazy-safe or a segment
|
|
492
|
-
* the manifest names is missing — the caller falls back to the eager load,
|
|
493
|
-
* which splices the same files. A segment the host places as it is read is
|
|
494
|
-
* asked for when it is first read, and not missed. */
|
|
495
|
-
function openManifestLazy(filePath, manifest, open) {
|
|
496
|
-
const typeValue = manifest.type;
|
|
497
|
-
if (!isBeast2LazySafe(typeValue, { frozen: true })) {
|
|
498
|
-
open.closeAll();
|
|
499
|
-
return undefined;
|
|
500
|
-
}
|
|
501
|
-
const dir = segmentDirFor(filePath);
|
|
502
|
-
const entries = manifest.entries;
|
|
503
|
-
if (process.env[FETCH_SEGMENTS_ENV] !== '1') {
|
|
504
|
-
for (const entry of entries) {
|
|
505
|
-
if (!existsSync(path.join(dir, `${entry.hash}.beast2`))) {
|
|
506
|
-
open.closeAll();
|
|
507
|
-
return undefined;
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
const readers = new Array(entries.length);
|
|
512
|
-
const source = {
|
|
513
|
-
manifest,
|
|
514
|
-
segment(i) {
|
|
515
|
-
// A segment file is opened for each read and closed after it: a
|
|
516
|
-
// body that iterates every segment of a large record would
|
|
517
|
-
// otherwise hold a descriptor per segment for the value's life,
|
|
518
|
-
// and run out of them.
|
|
519
|
-
return readers[i] ??= open.segment(segmentFile(path.join(dir, `${entries[i].hash}.beast2`)));
|
|
520
|
-
},
|
|
521
|
-
};
|
|
522
|
-
const value = openBeast2LazyFor(typeValue, LAZY_INPUT_OPTIONS)(source);
|
|
523
|
-
open.own(value);
|
|
524
|
-
return value;
|
|
525
|
-
}
|
|
526
|
-
/** Exactly `length` bytes of `handle` from `offset`. */
|
|
527
|
-
function readRange(handle, offset, length) {
|
|
528
|
-
const out = new Uint8Array(length);
|
|
529
|
-
let done = 0;
|
|
530
|
-
while (done < length) {
|
|
531
|
-
const n = readSync(handle, out, done, length - done, offset + done);
|
|
532
|
-
if (n === 0)
|
|
533
|
-
throw new Error(`beast2: short read at offset ${offset + done}`);
|
|
534
|
-
done += n;
|
|
535
|
-
}
|
|
536
|
-
return out;
|
|
537
|
-
}
|
|
538
|
-
/** The descriptors and the byte counter a lazy input shares across its
|
|
539
|
-
* file and, for a manifest, every segment file it reads. */
|
|
540
|
-
function openCounted() {
|
|
541
|
-
const handles = [];
|
|
542
|
-
let bytesRead = 0;
|
|
543
|
-
return {
|
|
544
|
-
reader(file) {
|
|
545
|
-
const handle = openSync(file, 'r');
|
|
546
|
-
handles.push(handle);
|
|
547
|
-
return {
|
|
548
|
-
size: fstatSync(handle).size,
|
|
549
|
-
read(offset, length) {
|
|
550
|
-
const out = readRange(handle, offset, length);
|
|
551
|
-
bytesRead += length;
|
|
552
|
-
return out;
|
|
553
|
-
},
|
|
554
|
-
};
|
|
555
|
-
},
|
|
556
|
-
segment(file) {
|
|
557
|
-
return {
|
|
558
|
-
size: statSync(file).size,
|
|
559
|
-
read(offset, length) {
|
|
560
|
-
const handle = openSync(file, 'r');
|
|
561
|
-
try {
|
|
562
|
-
const out = readRange(handle, offset, length);
|
|
563
|
-
bytesRead += length;
|
|
564
|
-
return out;
|
|
565
|
-
}
|
|
566
|
-
finally {
|
|
567
|
-
closeSync(handle);
|
|
568
|
-
}
|
|
569
|
-
},
|
|
570
|
-
};
|
|
571
|
-
},
|
|
572
|
-
own(value) {
|
|
573
|
-
lazyInputFiles.register(value, handles);
|
|
574
|
-
lazyInputReads.set(value, () => bytesRead);
|
|
575
|
-
},
|
|
576
|
-
closeAll() {
|
|
577
|
-
for (const handle of handles) {
|
|
578
|
-
try {
|
|
579
|
-
closeSync(handle);
|
|
580
|
-
}
|
|
581
|
-
catch {
|
|
582
|
-
// Already closed — nothing else to release.
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
handles.length = 0;
|
|
586
|
-
},
|
|
587
|
-
};
|
|
462
|
+
return unitInputBytes(nodeUnitIO, filePath);
|
|
588
463
|
}
|
|
589
464
|
//# sourceMappingURL=loader.js.map
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|