@elaraai/e3 1.0.58 → 1.0.59
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/browser.d.ts +2 -1
- package/dist/src/browser.d.ts.map +1 -1
- package/dist/src/browser.js +1 -1
- package/dist/src/browser.js.map +1 -1
- package/dist/src/index.d.ts +5 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/task.d.ts +211 -2
- package/dist/src/task.d.ts.map +1 -1
- package/dist/src/task.js +418 -1
- package/dist/src/task.js.map +1 -1
- package/dist/src/task.spec.js +325 -2
- package/dist/src/task.spec.js.map +1 -1
- package/package.json +3 -3
package/dist/src/task.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
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 { Expr, variant, ArrayType, StringType, East, IRType } from '@elaraai/east';
|
|
5
|
+
import { Expr, variant, some, none, ArrayType, StringType, NullType, FunctionType, StructType, East, IRType, encodeEastIR, toEastTypeValue, isTypeValueEqual } from '@elaraai/east';
|
|
6
|
+
import { TASK_KIND_PARTITION, TASK_KIND_STREAM, encodePartitionTaskMetadata, encodeStreamTaskMetadata } from '@elaraai/e3-types';
|
|
6
7
|
import { DEFAULT_RUNNER, runnerToCommand } from './runner.js';
|
|
7
8
|
import { validateEnvironmentDecl } from './environment.js';
|
|
8
9
|
/**
|
|
@@ -176,4 +177,420 @@ export function customTask(name, inputs, outputType, command, config) {
|
|
|
176
177
|
output.deps.add(taskDef);
|
|
177
178
|
return taskDef;
|
|
178
179
|
}
|
|
180
|
+
/** Default carved-slice byte target for {@link partitionTask}. */
|
|
181
|
+
const DEFAULT_TARGET_PARTITION_BYTES = 256 * 1024 * 1024;
|
|
182
|
+
/** The East key type a collection dataset is carved by. */
|
|
183
|
+
function collectionKeyType(name, dataset) {
|
|
184
|
+
const type = dataset.type;
|
|
185
|
+
switch (type.type) {
|
|
186
|
+
case 'Dict': return type.key;
|
|
187
|
+
case 'Set': return type.key;
|
|
188
|
+
case 'Array': return type.value;
|
|
189
|
+
default:
|
|
190
|
+
throw new Error(`partitionTask '${name}': partitioned dataset '${dataset.name}' must be a collection (Array, Set or Dict), got ${type.type}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/** Extracts the shape a `by` projection reads — see {@link ProjectionShape}
|
|
194
|
+
* — or `null` for any other (unaccepted) shape. */
|
|
195
|
+
function projectionFieldPrefix(ir) {
|
|
196
|
+
const param = ir.value.parameters[0]?.value.name;
|
|
197
|
+
if (param === undefined)
|
|
198
|
+
return null;
|
|
199
|
+
// Chase wrappers to the expression the body evaluates to.
|
|
200
|
+
const unwrap = (node) => {
|
|
201
|
+
for (;;) {
|
|
202
|
+
if (node.type === 'Block') {
|
|
203
|
+
const statements = node.value.statements;
|
|
204
|
+
if (statements.length === 0)
|
|
205
|
+
return node;
|
|
206
|
+
node = statements[statements.length - 1];
|
|
207
|
+
}
|
|
208
|
+
else if (node.type === 'Return') {
|
|
209
|
+
node = node.value.value;
|
|
210
|
+
}
|
|
211
|
+
else if (node.type === 'As' || node.type === 'WrapRecursive' || node.type === 'UnwrapRecursive') {
|
|
212
|
+
node = node.value.value;
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
return node;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
const isParam = (node) => node.type === 'Variable' && node.value.name === param;
|
|
220
|
+
const fieldOf = (node) => node.type === 'GetField' && isParam(unwrap(node.value.struct)) ? node.value.field : null;
|
|
221
|
+
// Walks a GetField chain down to the parameter: `key.a.b` → ['a', 'b'].
|
|
222
|
+
const pathOf = (node) => {
|
|
223
|
+
const path = [];
|
|
224
|
+
let cur = node;
|
|
225
|
+
while (cur.type === 'GetField') {
|
|
226
|
+
path.unshift(cur.value.field);
|
|
227
|
+
cur = unwrap(cur.value.struct);
|
|
228
|
+
}
|
|
229
|
+
return isParam(cur) && path.length > 0 ? path : null;
|
|
230
|
+
};
|
|
231
|
+
const body = unwrap(ir.value.body);
|
|
232
|
+
if (isParam(body))
|
|
233
|
+
return { kind: 'fields', names: [] };
|
|
234
|
+
const chain = pathOf(body);
|
|
235
|
+
if (chain !== null) {
|
|
236
|
+
// A one-step chain is a top-level field read — the `fields` family.
|
|
237
|
+
return chain.length === 1 ? { kind: 'fields', names: chain } : { kind: 'path', names: chain };
|
|
238
|
+
}
|
|
239
|
+
if (body.type === 'Struct') {
|
|
240
|
+
const fields = [];
|
|
241
|
+
for (const { value } of body.value.fields) {
|
|
242
|
+
const f = fieldOf(unwrap(value));
|
|
243
|
+
if (f === null)
|
|
244
|
+
return null;
|
|
245
|
+
fields.push(f);
|
|
246
|
+
}
|
|
247
|
+
return { kind: 'fields', names: fields };
|
|
248
|
+
}
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Defines a partitioned task: e3 carves the huge partitioned input(s) into
|
|
253
|
+
* key-range slices, runs `fn` once per partition as an ordinary
|
|
254
|
+
* content-addressed execution (parallel, memoized per partition), and
|
|
255
|
+
* assembles the output — by splicing shards in partition order, or by
|
|
256
|
+
* folding partials pairwise when `combine` is given.
|
|
257
|
+
*
|
|
258
|
+
* `fn` always returns the output type: without `combine` each execution
|
|
259
|
+
* returns its *shard* of the output (Array shards concatenate freely;
|
|
260
|
+
* Dict/Set shard key ranges must ascend disjointly in partition order — any
|
|
261
|
+
* key-preserving or monotone re-keying transform qualifies). The shard
|
|
262
|
+
* contract is deliberately enforced at SPLICE TIME, not build time: whether
|
|
263
|
+
* an arbitrary body preserves key order is not decidable from types, and a
|
|
264
|
+
* static rule would false-reject permitted monotone re-keys — a violation
|
|
265
|
+
* fails the task deterministically at splice, naming the offending
|
|
266
|
+
* partitions and the remedies (`combine` / `customTask`). With `combine`
|
|
267
|
+
* each execution returns a *partial* and the partials fold.
|
|
268
|
+
*
|
|
269
|
+
* Parameter order is fixed and fully typed: the partition slices first (in
|
|
270
|
+
* declared order, each typed as its dataset's own collection type), then the
|
|
271
|
+
* ordinary `inputs` in order.
|
|
272
|
+
*
|
|
273
|
+
* @typeParam Name - Task name (literal type)
|
|
274
|
+
* @typeParam Partitions - Partitioned input dataset defs
|
|
275
|
+
* @typeParam Inputs - Ordinary input dataset defs
|
|
276
|
+
* @typeParam Output - Output type
|
|
277
|
+
* @param name - Task name
|
|
278
|
+
* @param spec - The declaration: partitioned inputs, alignment, output type,
|
|
279
|
+
* combine mode, sizing, runner and environment
|
|
280
|
+
* @param fn - Implementation body, run once per partition
|
|
281
|
+
* @returns A TaskDef with `.output` for chaining
|
|
282
|
+
* @throws {Error} When a partitioned dataset is not a collection, partitions
|
|
283
|
+
* mix collection kinds (or include Arrays) under co-partitioning, key
|
|
284
|
+
* types cannot align, `by` (explicit or the implicit alignment under
|
|
285
|
+
* co-partitioning) does not read a leading prefix of every partitioned
|
|
286
|
+
* dataset's key, or the output is not a collection in splice mode (no
|
|
287
|
+
* `combine`).
|
|
288
|
+
*
|
|
289
|
+
* @example
|
|
290
|
+
* ```ts
|
|
291
|
+
* const sales = e3.input('sales', DictType(StringType, SaleType));
|
|
292
|
+
*
|
|
293
|
+
* const cleaned = e3.partitionTask('cleaned', {
|
|
294
|
+
* partitions: [sales],
|
|
295
|
+
* output: DictType(StringType, SaleType),
|
|
296
|
+
* }, ($, slice) => slice.filter(($, sale) => East.greater(sale.qty, 0n)));
|
|
297
|
+
* ```
|
|
298
|
+
*/
|
|
299
|
+
export function partitionTask(name, spec, fn) {
|
|
300
|
+
const partitions = spec.partitions;
|
|
301
|
+
const inputs = (spec.inputs ?? []);
|
|
302
|
+
const output = spec.output;
|
|
303
|
+
// Partitioned inputs must be collections; co-partitioning is restricted to
|
|
304
|
+
// Dict/Set roots (a shared key space must exist for boundary alignment —
|
|
305
|
+
// an Array has none).
|
|
306
|
+
const keyTypes = partitions.map((p) => collectionKeyType(name, p));
|
|
307
|
+
const kinds = partitions.map((p) => p.type.type);
|
|
308
|
+
if (partitions.length > 1) {
|
|
309
|
+
const first = kinds[0];
|
|
310
|
+
if (first === 'Array' || kinds.some((k) => k !== first)) {
|
|
311
|
+
throw new Error(`partitionTask '${name}': co-partitioning is restricted to Dict/Set roots sharing a key space — ` +
|
|
312
|
+
`got [${kinds.join(', ')}]. Partition one dataset and access the others as ordinary inputs, or re-key upstream.`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
// The `by` parameter type: a single partition's own key, or the strict
|
|
316
|
+
// field-wise intersection of every key struct under co-partitioning.
|
|
317
|
+
let byParamType;
|
|
318
|
+
if (partitions.length === 1) {
|
|
319
|
+
byParamType = keyTypes[0];
|
|
320
|
+
}
|
|
321
|
+
else if (keyTypes.every((k) => k.type === 'Struct')) {
|
|
322
|
+
const first = keyTypes[0];
|
|
323
|
+
const shared = {};
|
|
324
|
+
for (const [field, fieldType] of Object.entries(first.fields)) {
|
|
325
|
+
const everywhere = keyTypes.every((k) => {
|
|
326
|
+
const other = k.fields[field];
|
|
327
|
+
return other !== undefined && isTypeValueEqual(toEastTypeValue(other), toEastTypeValue(fieldType));
|
|
328
|
+
});
|
|
329
|
+
if (everywhere)
|
|
330
|
+
shared[field] = fieldType;
|
|
331
|
+
}
|
|
332
|
+
if (Object.keys(shared).length === 0) {
|
|
333
|
+
throw new Error(`partitionTask '${name}': co-partitioned key types share no identically-typed fields — the datasets have no common key space`);
|
|
334
|
+
}
|
|
335
|
+
byParamType = StructType(shared);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
const first = toEastTypeValue(keyTypes[0]);
|
|
339
|
+
if (!keyTypes.every((k) => isTypeValueEqual(toEastTypeValue(k), first))) {
|
|
340
|
+
throw new Error(`partitionTask '${name}': co-partitioned key types must be identical (or share struct fields) for boundary alignment`);
|
|
341
|
+
}
|
|
342
|
+
byParamType = keyTypes[0];
|
|
343
|
+
}
|
|
344
|
+
// Reify `by` and validate the leading-prefix soundness condition per
|
|
345
|
+
// dataset: struct keys sort lexicographically by declared field order, so
|
|
346
|
+
// the projection must read a leading prefix of each dataset's OWN order.
|
|
347
|
+
let byIr;
|
|
348
|
+
let byShape = null;
|
|
349
|
+
if (spec.by !== undefined) {
|
|
350
|
+
const byFn = East.function([byParamType], undefined, spec.by);
|
|
351
|
+
const bundle = byFn.toIR();
|
|
352
|
+
const shape = projectionFieldPrefix(bundle.ir);
|
|
353
|
+
if (shape === null) {
|
|
354
|
+
throw new Error(`partitionTask '${name}': \`by\` must project a leading prefix of the partition key — ` +
|
|
355
|
+
`accepted shapes: the key itself, a leading field (\`key.f\`), a nested leading-field ` +
|
|
356
|
+
`path (\`key.a.b\`, each step the first field of its level), or a struct literal of ` +
|
|
357
|
+
`leading fields in declared order (\`{ f1: key.f1, f2: key.f2 }\`)`);
|
|
358
|
+
}
|
|
359
|
+
if (shape.names.length > 0) {
|
|
360
|
+
for (let i = 0; i < partitions.length; i++) {
|
|
361
|
+
const keyType = keyTypes[i];
|
|
362
|
+
if (keyType.type !== 'Struct') {
|
|
363
|
+
throw new Error(`partitionTask '${name}': \`by\` reads key fields, but partitioned dataset '${partitions[i].name}' has a non-struct key (${keyType.type}) — use the identity projection`);
|
|
364
|
+
}
|
|
365
|
+
if (shape.kind === 'fields') {
|
|
366
|
+
const order = Object.keys(keyType.fields);
|
|
367
|
+
const misaligned = shape.names.length > order.length || shape.names.some((f, j) => order[j] !== f);
|
|
368
|
+
if (misaligned) {
|
|
369
|
+
throw new Error(`partitionTask '${name}': \`by\` projects (${shape.names.join(', ')}), which is not a leading prefix of ` +
|
|
370
|
+
`partitioned dataset '${partitions[i].name}' key field order (${order.join(', ')})`);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
// Nested path: every step must read the FIRST field of its
|
|
375
|
+
// level's struct — struct keys sort lexicographically by declared
|
|
376
|
+
// field order, so only first-field descent preserves it.
|
|
377
|
+
let level = keyType;
|
|
378
|
+
for (let j = 0; j < shape.names.length; j++) {
|
|
379
|
+
const step = shape.names[j];
|
|
380
|
+
if (level.type !== 'Struct') {
|
|
381
|
+
throw new Error(`partitionTask '${name}': \`by\` path (key.${shape.names.join('.')}) descends into a ${level.type} at '${step}' — ` +
|
|
382
|
+
`every step must read the first field of a struct level of partitioned dataset '${partitions[i].name}'`);
|
|
383
|
+
}
|
|
384
|
+
const levelFields = level.fields;
|
|
385
|
+
const order = Object.keys(levelFields);
|
|
386
|
+
if (order[0] !== step) {
|
|
387
|
+
throw new Error(`partitionTask '${name}': \`by\` path (key.${shape.names.slice(0, j + 1).join('.')}) reads '${step}', which is not ` +
|
|
388
|
+
`the first field of partitioned dataset '${partitions[i].name}' key level (${order.join(', ')})`);
|
|
389
|
+
}
|
|
390
|
+
level = levelFields[step];
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
byShape = shape;
|
|
396
|
+
byIr = encodeEastIR(bundle);
|
|
397
|
+
}
|
|
398
|
+
// Under co-partitioning with non-identical key types, the EFFECTIVE
|
|
399
|
+
// boundary projection must ALSO be a leading prefix of every dataset's
|
|
400
|
+
// key order when it is implicit:
|
|
401
|
+
// - with no `by`, the runtime aligns secondaries under the PRIMARY's key
|
|
402
|
+
// comparator — the projection is the primary's full field sequence;
|
|
403
|
+
// - with an identity `by`, it is the shared-intersection struct in its
|
|
404
|
+
// declared field order.
|
|
405
|
+
// A key set like {sku,period} × {period,sku} passes the field-wise
|
|
406
|
+
// intersection yet sorts differently per dataset — accepted, it would
|
|
407
|
+
// silently mis-assign rows at run time with a success status.
|
|
408
|
+
if (partitions.length > 1) {
|
|
409
|
+
const firstKey = toEastTypeValue(keyTypes[0]);
|
|
410
|
+
const keysIdentical = keyTypes.every((k) => isTypeValueEqual(toEastTypeValue(k), firstKey));
|
|
411
|
+
const validatedByFields = byShape !== null && byShape.names.length > 0;
|
|
412
|
+
if (!keysIdentical && !validatedByFields) {
|
|
413
|
+
// Non-identical keys reach here only via the struct-intersection path.
|
|
414
|
+
const sourceFields = (t) => t.fields;
|
|
415
|
+
const effective = spec.by !== undefined
|
|
416
|
+
? { label: 'the identity `by` projection reads the shared key fields', fields: sourceFields(byParamType) }
|
|
417
|
+
: { label: `with no \`by\`, co-partition boundaries align on partitioned dataset '${partitions[0].name}' key order`, fields: sourceFields(keyTypes[0]) };
|
|
418
|
+
const eff = Object.keys(effective.fields);
|
|
419
|
+
for (let i = 0; i < partitions.length; i++) {
|
|
420
|
+
const fields = sourceFields(keyTypes[i]);
|
|
421
|
+
const order = Object.keys(fields);
|
|
422
|
+
const misaligned = eff.length > order.length || eff.some((f, j) => order[j] !== f || !isTypeValueEqual(toEastTypeValue(effective.fields[f]), toEastTypeValue(fields[f])));
|
|
423
|
+
if (misaligned) {
|
|
424
|
+
throw new Error(`partitionTask '${name}': ${effective.label} (${eff.join(', ')}), which is not a leading prefix of ` +
|
|
425
|
+
`partitioned dataset '${partitions[i].name}' key field order (${order.join(', ')}) — ` +
|
|
426
|
+
`declare \`by\` as a shared leading-prefix projection, or re-key upstream`);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// Splice mode (no `combine`) assembles the output from per-partition
|
|
432
|
+
// SHARDS in partition order — only a collection can splice. A
|
|
433
|
+
// non-collection output would pass definition time and fail only when the
|
|
434
|
+
// input first carves into two or more partitions.
|
|
435
|
+
if (spec.combine === undefined && output.type !== 'Array' && output.type !== 'Set' && output.type !== 'Dict') {
|
|
436
|
+
throw new Error(`partitionTask '${name}': without \`combine\`, each partition returns a shard of the output and the shards ` +
|
|
437
|
+
`splice in partition order — the output must be a collection (Array, Set or Dict), got ${output.type}. ` +
|
|
438
|
+
`Provide \`combine\` to fold non-collection partials.`);
|
|
439
|
+
}
|
|
440
|
+
// Reify `combine` as a free East function (Out, Out) -> Out.
|
|
441
|
+
let combineIr;
|
|
442
|
+
if (spec.combine !== undefined) {
|
|
443
|
+
const combineFn = East.function([output, output], output, spec.combine);
|
|
444
|
+
combineIr = encodeEastIR(combineFn.toIR());
|
|
445
|
+
}
|
|
446
|
+
const targetPartitionBytes = spec.targetPartitionBytes ?? DEFAULT_TARGET_PARTITION_BYTES;
|
|
447
|
+
if (!Number.isInteger(targetPartitionBytes) || targetPartitionBytes <= 0) {
|
|
448
|
+
throw new Error(`partitionTask '${name}': targetPartitionBytes must be a positive integer, got ${spec.targetPartitionBytes}`);
|
|
449
|
+
}
|
|
450
|
+
const bodyFn = East.function([...partitions.map((p) => p.type), ...inputs.map((i) => i.type)], output, fn);
|
|
451
|
+
const metadata = encodePartitionTaskMetadata({
|
|
452
|
+
partitions: BigInt(partitions.length),
|
|
453
|
+
by: byIr !== undefined ? some(byIr) : none,
|
|
454
|
+
combine: combineIr !== undefined ? some(combineIr) : none,
|
|
455
|
+
targetPartitionBytes: BigInt(targetPartitionBytes),
|
|
456
|
+
});
|
|
457
|
+
return task(name, [...partitions, ...inputs], bodyFn, {
|
|
458
|
+
kind: TASK_KIND_PARTITION,
|
|
459
|
+
metadata,
|
|
460
|
+
...(spec.runner !== undefined && { runner: spec.runner }),
|
|
461
|
+
...(spec.environment !== undefined && { environment: spec.environment }),
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Defines a streaming task: one execution whose runner feeds the `stream`
|
|
466
|
+
* input segment-by-segment in canonical order (state is ordinary `$.let`
|
|
467
|
+
* locals) and writes the output incrementally through the `emit` capability
|
|
468
|
+
* — bounded memory at both ends, exact left-fold semantics, no parallelism
|
|
469
|
+
* and no partial recompute.
|
|
470
|
+
*
|
|
471
|
+
* `emit` is a runner-implemented function value: `emit(key, value)` for Dict
|
|
472
|
+
* outputs, `emit(element)` for Array/Set outputs. The streaming writer
|
|
473
|
+
* re-batches emissions byte-adaptively; Dict/Set outputs must be emitted in
|
|
474
|
+
* strictly ascending (key) order (the canonical-segment contract, enforced
|
|
475
|
+
* at runtime), Array outputs emit freely. The body's return value is unused
|
|
476
|
+
* — the output dataset is what `emit` wrote.
|
|
477
|
+
*
|
|
478
|
+
* With no `stream`, the task is a producer: its body loops over
|
|
479
|
+
* platform-function sources (paginated APIs, database cursors) and emits.
|
|
480
|
+
* A producer's real input is the outside world, so it follows the existing
|
|
481
|
+
* integration-task conventions for re-run semantics — `emit` changes nothing
|
|
482
|
+
* about that.
|
|
483
|
+
*
|
|
484
|
+
* @typeParam Name - Task name (literal type)
|
|
485
|
+
* @typeParam Output - Output collection type
|
|
486
|
+
* @typeParam Stream - Streamed input dataset def, when present
|
|
487
|
+
* @typeParam Inputs - Ordinary input dataset defs
|
|
488
|
+
* @param name - Task name
|
|
489
|
+
* @param spec - The declaration: stream input, ordinary inputs, output
|
|
490
|
+
* collection type, runner and environment
|
|
491
|
+
* @param fn - Implementation body; receives the stream value (when
|
|
492
|
+
* declared), the inputs, then `emit`, and returns nothing
|
|
493
|
+
* @returns A TaskDef with `.output` for chaining
|
|
494
|
+
* @throws {Error} When the output is not a collection type or the runner is
|
|
495
|
+
* the `custom` runtime.
|
|
496
|
+
*
|
|
497
|
+
* @example
|
|
498
|
+
* ```ts
|
|
499
|
+
* const events = e3.input('events', ArrayType(EventType));
|
|
500
|
+
*
|
|
501
|
+
* const balances = e3.streamTask('balances', {
|
|
502
|
+
* stream: events,
|
|
503
|
+
* output: ArrayType(BalanceType),
|
|
504
|
+
* }, ($, events, emit) => {
|
|
505
|
+
* const balance = $.let(0.0);
|
|
506
|
+
* $.for(events, ($, event) => {
|
|
507
|
+
* $.assign(balance, balance.add(event.amount));
|
|
508
|
+
* $(emit({ at: event.at, balance }));
|
|
509
|
+
* });
|
|
510
|
+
* });
|
|
511
|
+
* ```
|
|
512
|
+
*/
|
|
513
|
+
export function streamTask(name, spec, fn) {
|
|
514
|
+
if (spec.environment)
|
|
515
|
+
validateEnvironmentDecl(spec.environment, name);
|
|
516
|
+
const output = spec.output;
|
|
517
|
+
const inputs = (spec.inputs ?? []);
|
|
518
|
+
let emitKind;
|
|
519
|
+
let emitType;
|
|
520
|
+
switch (output.type) {
|
|
521
|
+
case 'Dict':
|
|
522
|
+
emitKind = 'dict';
|
|
523
|
+
emitType = FunctionType([output.key, output.value], NullType);
|
|
524
|
+
break;
|
|
525
|
+
case 'Set':
|
|
526
|
+
emitKind = 'set';
|
|
527
|
+
emitType = FunctionType([output.key], NullType);
|
|
528
|
+
break;
|
|
529
|
+
case 'Array':
|
|
530
|
+
emitKind = 'array';
|
|
531
|
+
emitType = FunctionType([output.value], NullType);
|
|
532
|
+
break;
|
|
533
|
+
default:
|
|
534
|
+
throw new Error(`streamTask '${name}': output must be a collection type (Array, Set or Dict), got ${output.type} — for small results use e3.task`);
|
|
535
|
+
}
|
|
536
|
+
const runner = spec.runner ?? DEFAULT_RUNNER;
|
|
537
|
+
if (runner.runtime === 'custom') {
|
|
538
|
+
throw new Error(`streamTask '${name}': the custom runtime cannot carry the streaming flags — use a stock runtime (east-node, east-py, east-c)`);
|
|
539
|
+
}
|
|
540
|
+
const paramTypes = [
|
|
541
|
+
...(spec.stream !== undefined ? [spec.stream.type] : []),
|
|
542
|
+
...inputs.map((i) => i.type),
|
|
543
|
+
emitType,
|
|
544
|
+
];
|
|
545
|
+
const bodyFn = East.function(paramTypes, NullType, fn);
|
|
546
|
+
const eastIR = bodyFn.toIR();
|
|
547
|
+
const taskTree = createTaskTree(name);
|
|
548
|
+
const functionIRDataset = createFunctionIRDataset(name, taskTree, eastIR);
|
|
549
|
+
const input_datasets = [
|
|
550
|
+
functionIRDataset,
|
|
551
|
+
...(spec.stream !== undefined ? [spec.stream] : []),
|
|
552
|
+
...inputs,
|
|
553
|
+
];
|
|
554
|
+
const outputDataset = createOutputDataset(name, taskTree, output);
|
|
555
|
+
// The command mirrors task()'s, with the streaming flags ahead of the
|
|
556
|
+
// input list: the runner constructs the emit sink for the output kind and
|
|
557
|
+
// feeds the flagged `-i` input (0-based; the stream is always the first
|
|
558
|
+
// one) lazily instead of whole-decoding it.
|
|
559
|
+
const argvPrefix = [
|
|
560
|
+
...runnerToCommand(runner),
|
|
561
|
+
'--emit', emitKind,
|
|
562
|
+
...(spec.stream !== undefined ? ['--stream', '0'] : []),
|
|
563
|
+
];
|
|
564
|
+
const commandFn = East.function([ArrayType(StringType), StringType], ArrayType(StringType), ($, input_paths, output_path) => {
|
|
565
|
+
const command = $.let(argvPrefix, ArrayType(StringType));
|
|
566
|
+
const i = $.let(1n);
|
|
567
|
+
$.while(East.less(i, input_paths.size()), $ => {
|
|
568
|
+
$(command.pushLast('-i'));
|
|
569
|
+
$(command.pushLast(input_paths.get(i)));
|
|
570
|
+
$.assign(i, i.add(1n));
|
|
571
|
+
});
|
|
572
|
+
$(command.pushLast('-o'));
|
|
573
|
+
$(command.pushLast(output_path));
|
|
574
|
+
$(command.pushLast(input_paths.get(0n)));
|
|
575
|
+
$.return(command);
|
|
576
|
+
});
|
|
577
|
+
const metadata = encodeStreamTaskMetadata({
|
|
578
|
+
stream: spec.stream !== undefined,
|
|
579
|
+
emit: emitKind,
|
|
580
|
+
});
|
|
581
|
+
const taskDef = {
|
|
582
|
+
kind: 'task',
|
|
583
|
+
name,
|
|
584
|
+
command: commandFn.toIR(),
|
|
585
|
+
inputs: input_datasets,
|
|
586
|
+
output: outputDataset,
|
|
587
|
+
deps: collectDeps(taskTree, outputDataset, input_datasets),
|
|
588
|
+
taskKind: TASK_KIND_STREAM,
|
|
589
|
+
metadata,
|
|
590
|
+
runner,
|
|
591
|
+
...(spec.environment !== undefined && { environment: spec.environment }),
|
|
592
|
+
};
|
|
593
|
+
outputDataset.deps.add(taskDef);
|
|
594
|
+
return taskDef;
|
|
595
|
+
}
|
|
179
596
|
//# sourceMappingURL=task.js.map
|
package/dist/src/task.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/task.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/task.ts"],"names":[],"mappings":"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"}
|