@async/pipeline 0.1.3

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.
Files changed (82) hide show
  1. package/README.md +68 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +3 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/core.d.ts +2 -0
  7. package/dist/core.d.ts.map +1 -0
  8. package/dist/core.js +2 -0
  9. package/dist/core.js.map +1 -0
  10. package/dist/index.d.ts +4 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +4 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/internal/core/cache.d.ts +47 -0
  15. package/dist/internal/core/cache.d.ts.map +1 -0
  16. package/dist/internal/core/cache.js +81 -0
  17. package/dist/internal/core/cache.js.map +1 -0
  18. package/dist/internal/core/errors.d.ts +7 -0
  19. package/dist/internal/core/errors.d.ts.map +1 -0
  20. package/dist/internal/core/errors.js +14 -0
  21. package/dist/internal/core/errors.js.map +1 -0
  22. package/dist/internal/core/index.d.ts +347 -0
  23. package/dist/internal/core/index.d.ts.map +1 -0
  24. package/dist/internal/core/index.js +584 -0
  25. package/dist/internal/core/index.js.map +1 -0
  26. package/dist/internal/core/runtime.d.ts +111 -0
  27. package/dist/internal/core/runtime.d.ts.map +1 -0
  28. package/dist/internal/core/runtime.js +495 -0
  29. package/dist/internal/core/runtime.js.map +1 -0
  30. package/dist/internal/lima/index.d.ts +15 -0
  31. package/dist/internal/lima/index.d.ts.map +1 -0
  32. package/dist/internal/lima/index.js +65 -0
  33. package/dist/internal/lima/index.js.map +1 -0
  34. package/dist/internal/node/cli.d.ts +3 -0
  35. package/dist/internal/node/cli.d.ts.map +1 -0
  36. package/dist/internal/node/cli.js +410 -0
  37. package/dist/internal/node/cli.js.map +1 -0
  38. package/dist/internal/node/doctor.d.ts +7 -0
  39. package/dist/internal/node/doctor.d.ts.map +1 -0
  40. package/dist/internal/node/doctor.js +21 -0
  41. package/dist/internal/node/doctor.js.map +1 -0
  42. package/dist/internal/node/github.d.ts +48 -0
  43. package/dist/internal/node/github.d.ts.map +1 -0
  44. package/dist/internal/node/github.js +351 -0
  45. package/dist/internal/node/github.js.map +1 -0
  46. package/dist/internal/node/index.d.ts +8 -0
  47. package/dist/internal/node/index.d.ts.map +1 -0
  48. package/dist/internal/node/index.js +8 -0
  49. package/dist/internal/node/index.js.map +1 -0
  50. package/dist/internal/node/loader.d.ts +3 -0
  51. package/dist/internal/node/loader.d.ts.map +1 -0
  52. package/dist/internal/node/loader.js +10 -0
  53. package/dist/internal/node/loader.js.map +1 -0
  54. package/dist/internal/node/runner.d.ts +35 -0
  55. package/dist/internal/node/runner.d.ts.map +1 -0
  56. package/dist/internal/node/runner.js +527 -0
  57. package/dist/internal/node/runner.js.map +1 -0
  58. package/dist/internal/node/sources.d.ts +44 -0
  59. package/dist/internal/node/sources.d.ts.map +1 -0
  60. package/dist/internal/node/sources.js +187 -0
  61. package/dist/internal/node/sources.js.map +1 -0
  62. package/dist/internal/node/store.d.ts +23 -0
  63. package/dist/internal/node/store.d.ts.map +1 -0
  64. package/dist/internal/node/store.js +224 -0
  65. package/dist/internal/node/store.js.map +1 -0
  66. package/dist/internal/node/sync.d.ts +41 -0
  67. package/dist/internal/node/sync.d.ts.map +1 -0
  68. package/dist/internal/node/sync.js +332 -0
  69. package/dist/internal/node/sync.js.map +1 -0
  70. package/dist/lima.d.ts +2 -0
  71. package/dist/lima.d.ts.map +1 -0
  72. package/dist/lima.js +2 -0
  73. package/dist/lima.js.map +1 -0
  74. package/dist/node.d.ts +2 -0
  75. package/dist/node.d.ts.map +1 -0
  76. package/dist/node.js +2 -0
  77. package/dist/node.js.map +1 -0
  78. package/dist/runtime.d.ts +2 -0
  79. package/dist/runtime.d.ts.map +1 -0
  80. package/dist/runtime.js +2 -0
  81. package/dist/runtime.js.map +1 -0
  82. package/package.json +51 -0
@@ -0,0 +1,584 @@
1
+ import { assertCacheStore, defaultPipelineCache, defineCache, isCacheDirective, mergeWithDefaultCacheStores, parseCacheRef } from "./cache.js";
2
+ import { pipelineError } from "./errors.js";
3
+ export * from "./cache.js";
4
+ export * from "./errors.js";
5
+ export function sh(first, ...values) {
6
+ if (typeof first === "function") {
7
+ return { kind: "deferred-shell", command: first };
8
+ }
9
+ let command = "";
10
+ for (let index = 0; index < first.length; index += 1) {
11
+ command += first[index] ?? "";
12
+ if (index < values.length) {
13
+ command += String(values[index]);
14
+ }
15
+ }
16
+ return { kind: "shell", command };
17
+ }
18
+ export function task(definition, run) {
19
+ if (definition.run !== undefined && run !== undefined) {
20
+ throw pipelineError("ASYNC_PIPELINE_TASK_ARGUMENT_CONFLICT", "Do not pass a second task argument when config.run is defined.");
21
+ }
22
+ return run === undefined ? definition : { ...definition, run };
23
+ }
24
+ export function job(definition) {
25
+ return definition;
26
+ }
27
+ function envVar(name, valuesOrOptions, options = {}) {
28
+ if (!valuesOrOptions)
29
+ return { kind: "async-pipeline.env.var", name };
30
+ if (isDefaultOnlyEnvOptions(valuesOrOptions) && Object.keys(valuesOrOptions).length === 1) {
31
+ return { kind: "async-pipeline.env.var", name, default: valuesOrOptions.default };
32
+ }
33
+ return {
34
+ kind: "async-pipeline.env.var",
35
+ name,
36
+ values: { ...valuesOrOptions },
37
+ default: options.default
38
+ };
39
+ }
40
+ export const env = {
41
+ secret(name) {
42
+ return { kind: "async-pipeline.env.secret", name };
43
+ },
44
+ var: envVar
45
+ };
46
+ export const trigger = {
47
+ manual() {
48
+ return { type: "manual" };
49
+ },
50
+ github(options) {
51
+ return {
52
+ type: "github",
53
+ events: [...options.events],
54
+ branches: options.branches ? [...options.branches] : undefined,
55
+ paths: options.paths ? [...options.paths] : undefined,
56
+ tags: options.tags ? [...options.tags] : undefined
57
+ };
58
+ },
59
+ cron(cron, options = {}) {
60
+ return { type: "schedule", cron, timezone: options.timezone };
61
+ },
62
+ schedule(cron) {
63
+ return { type: "schedule", cron };
64
+ }
65
+ };
66
+ export function dependsOn(...taskIds) {
67
+ return { kind: "async-pipeline.directive.dependsOn", taskIds };
68
+ }
69
+ export const source = {
70
+ git(definition) {
71
+ return { ...definition, type: "git" };
72
+ },
73
+ path(definition) {
74
+ return { ...definition, type: "path" };
75
+ }
76
+ };
77
+ export function linux(environment = {}) {
78
+ return { backend: environment.backend ?? "host", vm: environment.vm, image: environment.image };
79
+ }
80
+ export function definePipeline(definition) {
81
+ return normalizePipeline(definition);
82
+ }
83
+ export function normalizePipeline(definition) {
84
+ const namedInputs = definition.namedInputs ?? {};
85
+ const cacheRegistry = normalizeCacheRegistry(definition.cache);
86
+ const sources = {};
87
+ for (const [id, sourceDefinition] of Object.entries(definition.sources ?? {})) {
88
+ validateSourceId(id);
89
+ sources[id] = normalizeSource(id, sourceDefinition);
90
+ }
91
+ const tasks = {};
92
+ for (const [id, taskDefinition] of Object.entries(definition.tasks)) {
93
+ validateLocalTaskId(id);
94
+ const defaults = definition.taskDefaults?.[id] ?? definition.taskDefaults?.[taskName(id)] ?? {};
95
+ const merged = { ...defaults, ...taskDefinition };
96
+ const runItems = merged.steps ? [...merged.steps] : runItemsFromDefinition(merged.run);
97
+ const { steps, cacheDirectives, dependsOnDirectives } = partitionRunItems(runItems);
98
+ const liftedDependsOn = uniqueTaskIds([
99
+ ...(merged.dependsOn ?? []),
100
+ ...dependsOnDirectives.flatMap((directive) => directive.taskIds)
101
+ ]);
102
+ const cache = normalizeCache(merged.cache ?? cacheDirectives[0], cacheRegistry);
103
+ const retry = normalizeRetry(merged.retry);
104
+ const timeoutMs = normalizeTimeout(merged.timeout);
105
+ tasks[id] = {
106
+ ...merged,
107
+ id,
108
+ dependsOn: liftedDependsOn,
109
+ inputs: [...(merged.inputs ?? [])],
110
+ outputs: [...(merged.outputs ?? [])],
111
+ steps,
112
+ cache,
113
+ retry,
114
+ timeoutMs
115
+ };
116
+ }
117
+ const jobs = {};
118
+ for (const [id, jobDefinition] of Object.entries(definition.jobs)) {
119
+ jobs[id] = {
120
+ ...jobDefinition,
121
+ id,
122
+ target: Array.isArray(jobDefinition.target) ? [...jobDefinition.target] : [jobDefinition.target],
123
+ trigger: [...(jobDefinition.trigger ?? [])]
124
+ };
125
+ }
126
+ const pipeline = {
127
+ name: definition.name,
128
+ env: { ...(definition.env ?? {}) },
129
+ cache: cacheRegistry,
130
+ namedInputs,
131
+ triggers: definition.triggers ?? {},
132
+ sync: normalizeSync(definition.sync),
133
+ sources,
134
+ tasks,
135
+ jobs
136
+ };
137
+ validatePipeline(pipeline);
138
+ return pipeline;
139
+ }
140
+ function isDefaultOnlyEnvOptions(value) {
141
+ return typeof value.default === "string";
142
+ }
143
+ export function validatePipeline(pipeline) {
144
+ for (const taskDefinition of Object.values(pipeline.tasks)) {
145
+ for (const dependency of taskDefinition.dependsOn) {
146
+ if (!pipeline.tasks[dependency] && !isKnownExternalTaskRef(pipeline, dependency)) {
147
+ throw new Error(`Task "${taskDefinition.id}" depends on missing task "${dependency}".`);
148
+ }
149
+ }
150
+ for (const companion of taskDefinition.with ?? []) {
151
+ if (!pipeline.tasks[companion] && !isKnownExternalTaskRef(pipeline, companion)) {
152
+ throw new Error(`Task "${taskDefinition.id}" references missing companion task "${companion}".`);
153
+ }
154
+ }
155
+ if (taskDefinition.cache.enabled && taskDefinition.cache.store) {
156
+ assertCacheStore(pipeline.cache, {
157
+ ref: taskDefinition.cache.ref ?? `${taskDefinition.cache.store}:${taskDefinition.cache.strategy ?? "cache-first"}`,
158
+ store: taskDefinition.cache.store,
159
+ strategy: taskDefinition.cache.strategy ?? "cache-first"
160
+ });
161
+ }
162
+ }
163
+ for (const jobDefinition of Object.values(pipeline.jobs)) {
164
+ for (const target of jobDefinition.target) {
165
+ if (!pipeline.tasks[target] && !isKnownExternalTaskRef(pipeline, target)) {
166
+ throw new Error(`Job "${jobDefinition.id}" targets missing task "${target}".`);
167
+ }
168
+ }
169
+ for (const triggerId of jobDefinition.trigger) {
170
+ if (!pipeline.triggers[triggerId]) {
171
+ throw new Error(`Job "${jobDefinition.id}" references missing trigger "${triggerId}".`);
172
+ }
173
+ }
174
+ }
175
+ validateSyncConfig(pipeline);
176
+ buildGraph(pipeline);
177
+ }
178
+ export function composePipelines(root, sourcePipelines) {
179
+ const tasks = { ...root.tasks };
180
+ for (const [sourceId, input] of Object.entries(sourcePipelines)) {
181
+ const sourceDefinition = root.sources[sourceId];
182
+ if (!sourceDefinition) {
183
+ throw new Error(`Cannot compose undeclared source "${sourceId}".`);
184
+ }
185
+ for (const taskDefinition of Object.values(input.pipeline.tasks)) {
186
+ validateLocalTaskId(taskDefinition.id);
187
+ const namespacedId = namespaceTaskRef(sourceId, taskDefinition.id);
188
+ if (tasks[namespacedId]) {
189
+ throw new Error(`Composed task "${namespacedId}" already exists.`);
190
+ }
191
+ tasks[namespacedId] = {
192
+ ...taskDefinition,
193
+ id: namespacedId,
194
+ dependsOn: taskDefinition.dependsOn.map((dependency) => namespaceTaskRef(sourceId, dependency)),
195
+ with: taskDefinition.with?.map((companion) => namespaceTaskRef(sourceId, companion)),
196
+ steps: [...taskDefinition.steps],
197
+ inputs: [...taskDefinition.inputs],
198
+ outputs: [...taskDefinition.outputs],
199
+ source: input.context ?? {
200
+ name: sourceId,
201
+ dir: "",
202
+ type: sourceDefinition.type,
203
+ ref: sourceDefinition.type === "git" ? sourceDefinition.ref : undefined
204
+ }
205
+ };
206
+ }
207
+ }
208
+ const composed = {
209
+ ...root,
210
+ tasks,
211
+ jobs: { ...root.jobs },
212
+ sources: { ...root.sources }
213
+ };
214
+ validateComposedPipeline(composed, new Set(Object.keys(sourcePipelines)));
215
+ return composed;
216
+ }
217
+ export function parseTaskRef(taskRef) {
218
+ const delimiterIndex = taskRef.indexOf(":");
219
+ if (delimiterIndex < 0)
220
+ return { taskId: taskRef };
221
+ return {
222
+ source: taskRef.slice(0, delimiterIndex),
223
+ taskId: taskRef.slice(delimiterIndex + 1)
224
+ };
225
+ }
226
+ export function isNamespacedTaskRef(taskRef) {
227
+ return parseTaskRef(taskRef).source !== undefined;
228
+ }
229
+ export function namespaceTaskRef(sourceId, taskId) {
230
+ validateSourceId(sourceId);
231
+ validateLocalTaskId(taskId);
232
+ return `${sourceId}:${taskId}`;
233
+ }
234
+ export function buildGraph(pipeline, targets) {
235
+ const selected = collectRequiredTasks(pipeline, targets ?? Object.keys(pipeline.tasks));
236
+ const nodes = new Map();
237
+ for (const id of selected) {
238
+ const definition = pipeline.tasks[id];
239
+ if (!definition && !isKnownExternalTaskRef(pipeline, id)) {
240
+ throw new Error(`Cannot build graph for missing task "${id}".`);
241
+ }
242
+ nodes.set(id, { id, dependsOn: (definition?.dependsOn ?? []).filter((dependency) => selected.has(dependency)), dependents: [] });
243
+ }
244
+ for (const node of nodes.values()) {
245
+ for (const dependency of node.dependsOn) {
246
+ nodes.get(dependency)?.dependents.push(node.id);
247
+ }
248
+ }
249
+ const visiting = new Set();
250
+ const visited = new Set();
251
+ const order = [];
252
+ const visit = (id, path) => {
253
+ if (visited.has(id))
254
+ return;
255
+ if (visiting.has(id)) {
256
+ const start = path.indexOf(id);
257
+ const cycle = [...path.slice(start), id].join(" -> ");
258
+ throw new Error(`Task dependency cycle detected: ${cycle}.`);
259
+ }
260
+ visiting.add(id);
261
+ const node = nodes.get(id);
262
+ if (!node)
263
+ return;
264
+ for (const dependency of [...node.dependsOn].sort()) {
265
+ visit(dependency, [...path, id]);
266
+ }
267
+ visiting.delete(id);
268
+ visited.add(id);
269
+ order.push(id);
270
+ };
271
+ for (const id of [...nodes.keys()].sort()) {
272
+ visit(id, []);
273
+ }
274
+ return {
275
+ tasks: [...nodes.values()].map((node) => ({
276
+ id: node.id,
277
+ dependsOn: [...node.dependsOn].sort(),
278
+ dependents: [...node.dependents].sort()
279
+ })).sort((left, right) => left.id.localeCompare(right.id)),
280
+ executionOrder: order
281
+ };
282
+ }
283
+ export function tasksForJob(pipeline, jobId) {
284
+ const selectedJob = pipeline.jobs[jobId];
285
+ if (!selectedJob) {
286
+ throw new Error(`Unknown job "${jobId}".`);
287
+ }
288
+ return buildGraph(pipeline, selectedJob.target);
289
+ }
290
+ export function expandInputs(pipeline, inputs) {
291
+ const expanded = [];
292
+ for (const input of inputs) {
293
+ if (pipeline.namedInputs[input]) {
294
+ expanded.push(...expandInputs(pipeline, pipeline.namedInputs[input]));
295
+ }
296
+ else {
297
+ expanded.push(input);
298
+ }
299
+ }
300
+ return expanded;
301
+ }
302
+ function collectRequiredTasks(pipeline, targets) {
303
+ const selected = new Set();
304
+ const visit = (id) => {
305
+ if (selected.has(id))
306
+ return;
307
+ const definition = pipeline.tasks[id];
308
+ if (!definition) {
309
+ if (isKnownExternalTaskRef(pipeline, id)) {
310
+ selected.add(id);
311
+ return;
312
+ }
313
+ throw new Error(`Missing task "${id}".`);
314
+ }
315
+ selected.add(id);
316
+ for (const dependency of definition.dependsOn) {
317
+ visit(dependency);
318
+ }
319
+ };
320
+ for (const target of targets) {
321
+ visit(target);
322
+ }
323
+ return selected;
324
+ }
325
+ function normalizeSource(id, sourceDefinition) {
326
+ const prepare = [...(sourceDefinition.prepare ?? [])];
327
+ const pipeline = sourceDefinition.pipeline ?? "pipeline.ts";
328
+ if (sourceDefinition.type === "git") {
329
+ return {
330
+ ...sourceDefinition,
331
+ id,
332
+ pipeline,
333
+ prepare
334
+ };
335
+ }
336
+ return {
337
+ ...sourceDefinition,
338
+ id,
339
+ pipeline,
340
+ prepare
341
+ };
342
+ }
343
+ function validateComposedPipeline(pipeline, loadedSources) {
344
+ for (const taskDefinition of Object.values(pipeline.tasks)) {
345
+ for (const dependency of taskDefinition.dependsOn) {
346
+ if (!pipeline.tasks[dependency] && !isAllowedUnloadedTaskRef(pipeline, dependency, loadedSources)) {
347
+ throw new Error(`Task "${taskDefinition.id}" depends on missing task "${dependency}".`);
348
+ }
349
+ }
350
+ }
351
+ for (const jobDefinition of Object.values(pipeline.jobs)) {
352
+ for (const target of jobDefinition.target) {
353
+ if (!pipeline.tasks[target] && !isAllowedUnloadedTaskRef(pipeline, target, loadedSources)) {
354
+ throw new Error(`Job "${jobDefinition.id}" targets missing task "${target}".`);
355
+ }
356
+ }
357
+ }
358
+ buildGraph(pipeline);
359
+ }
360
+ function isAllowedUnloadedTaskRef(pipeline, taskRef, loadedSources) {
361
+ const parsed = parseTaskRef(taskRef);
362
+ return parsed.source !== undefined && Boolean(pipeline.sources[parsed.source]) && !loadedSources.has(parsed.source);
363
+ }
364
+ function isKnownExternalTaskRef(pipeline, taskRef) {
365
+ const parsed = parseTaskRef(taskRef);
366
+ return parsed.source !== undefined && Boolean(pipeline.sources[parsed.source]);
367
+ }
368
+ function validateLocalTaskId(id) {
369
+ if (id.includes(":")) {
370
+ throw new Error(`Local task id "${id}" cannot contain ":". Use source namespaces through dependsOn instead.`);
371
+ }
372
+ if (!id.trim()) {
373
+ throw new Error("Task id cannot be empty.");
374
+ }
375
+ }
376
+ function validateSourceId(id) {
377
+ if (id.includes(":")) {
378
+ throw new Error(`Source id "${id}" cannot contain ":".`);
379
+ }
380
+ if (!id.trim()) {
381
+ throw new Error("Source id cannot be empty.");
382
+ }
383
+ }
384
+ function normalizeCacheRegistry(cache) {
385
+ if (cache === undefined || cache === false)
386
+ return defaultPipelineCache();
387
+ if (typeof cache === "string") {
388
+ return mergeWithDefaultCacheStores(defineCache({ default: cache }));
389
+ }
390
+ if ("kind" in cache && cache.kind === "cache-registry") {
391
+ return mergeWithDefaultCacheStores(cache);
392
+ }
393
+ return mergeWithDefaultCacheStores(defineCache(cache));
394
+ }
395
+ function normalizeSync(sync) {
396
+ return {
397
+ github: normalizeGitHubSync(sync?.github),
398
+ tasks: normalizeTaskSync(sync?.tasks)
399
+ };
400
+ }
401
+ function normalizeGitHubSync(github) {
402
+ if (github === undefined || github === false) {
403
+ return {
404
+ enabled: false,
405
+ workflow: ".github/workflows/async-pipeline.yml",
406
+ lock: ".github/async-pipeline.lock.json"
407
+ };
408
+ }
409
+ if (github === true) {
410
+ return {
411
+ enabled: true,
412
+ workflow: ".github/workflows/async-pipeline.yml",
413
+ lock: ".github/async-pipeline.lock.json"
414
+ };
415
+ }
416
+ return {
417
+ enabled: true,
418
+ workflow: github.workflow ?? ".github/workflows/async-pipeline.yml",
419
+ lock: github.lock ?? ".github/async-pipeline.lock.json"
420
+ };
421
+ }
422
+ function normalizeTaskSync(tasks) {
423
+ if (tasks === undefined || tasks === false) {
424
+ return {
425
+ enabled: false,
426
+ prefix: "pipeline",
427
+ runners: "all",
428
+ targets: "root",
429
+ jobs: "all",
430
+ scripts: {}
431
+ };
432
+ }
433
+ if (tasks === true) {
434
+ return {
435
+ enabled: true,
436
+ prefix: "pipeline",
437
+ runners: "all",
438
+ targets: "root",
439
+ jobs: "all",
440
+ scripts: {}
441
+ };
442
+ }
443
+ return {
444
+ enabled: true,
445
+ prefix: tasks.prefix ?? "pipeline",
446
+ runners: tasks.runners ? normalizeRunners(tasks.runners) : "all",
447
+ targets: tasks.targets ?? "root",
448
+ jobs: tasks.jobs ?? "all",
449
+ tasks: tasks.tasks,
450
+ scripts: { ...(tasks.scripts ?? {}) }
451
+ };
452
+ }
453
+ function normalizeRunners(runners) {
454
+ if (runners === "all")
455
+ return runners;
456
+ return [...new Set(runners)];
457
+ }
458
+ function validateSyncConfig(pipeline) {
459
+ const taskSync = pipeline.sync.tasks;
460
+ if (!taskSync.enabled)
461
+ return;
462
+ if (!taskSync.prefix.trim()) {
463
+ throw pipelineError("ASYNC_PIPELINE_SYNC_INVALID_PREFIX", "Task sync prefix cannot be empty.");
464
+ }
465
+ if (Array.isArray(taskSync.runners) && taskSync.runners.length === 0) {
466
+ throw pipelineError("ASYNC_PIPELINE_SYNC_INVALID_RUNNERS", "Task sync runners cannot be empty.");
467
+ }
468
+ if (Array.isArray(taskSync.jobs)) {
469
+ for (const jobId of taskSync.jobs) {
470
+ if (!pipeline.jobs[jobId])
471
+ throw pipelineError("ASYNC_PIPELINE_SYNC_UNKNOWN_JOB", `Task sync references missing job "${jobId}".`);
472
+ }
473
+ }
474
+ if (Array.isArray(taskSync.tasks)) {
475
+ for (const taskId of taskSync.tasks) {
476
+ if (!pipeline.tasks[taskId])
477
+ throw pipelineError("ASYNC_PIPELINE_SYNC_UNKNOWN_TASK", `Task sync references missing task "${taskId}".`);
478
+ }
479
+ }
480
+ }
481
+ function normalizeCache(cache, registry) {
482
+ if (isCacheDirective(cache)) {
483
+ const parsed = parseCacheRef(cache.ref);
484
+ assertCacheStore(registry, parsed);
485
+ return {
486
+ enabled: true,
487
+ directories: [],
488
+ ref: parsed.ref,
489
+ store: parsed.store,
490
+ strategy: parsed.strategy,
491
+ ttlMs: cache.options?.ttlMs,
492
+ key: cache.options?.key
493
+ };
494
+ }
495
+ if (cache === true) {
496
+ const parsed = parseCacheRef(registry.default);
497
+ assertCacheStore(registry, parsed);
498
+ return { enabled: true, directories: [], ref: parsed.ref, store: parsed.store, strategy: parsed.strategy };
499
+ }
500
+ if (cache === false || cache === undefined)
501
+ return { enabled: false, directories: [] };
502
+ if (typeof cache === "string") {
503
+ const parsed = parseCacheRef(cache);
504
+ assertCacheStore(registry, parsed);
505
+ return { enabled: true, directories: [], ref: parsed.ref, store: parsed.store, strategy: parsed.strategy };
506
+ }
507
+ const ref = cache.ref ?? (cache.store ? `${cache.store}:${cache.strategy ?? "cache-first"}` : registry.default);
508
+ const parsed = parseCacheRef(ref);
509
+ assertCacheStore(registry, parsed);
510
+ return {
511
+ ...cache,
512
+ enabled: cache.enabled ?? true,
513
+ directories: [...(cache.directories ?? [])],
514
+ ref: parsed.ref,
515
+ store: parsed.store,
516
+ strategy: parsed.strategy
517
+ };
518
+ }
519
+ function normalizeRetry(retry) {
520
+ if (retry === undefined)
521
+ return { attempts: 1 };
522
+ if (typeof retry === "number")
523
+ return { attempts: retry };
524
+ return { attempts: retry.attempts, delayMs: retry.delayMs };
525
+ }
526
+ function normalizeTimeout(timeout) {
527
+ if (timeout === undefined)
528
+ return undefined;
529
+ if (typeof timeout === "number")
530
+ return timeout;
531
+ const trimmed = timeout.trim();
532
+ const match = /^(\d+(?:\.\d+)?)(ms|s|m|h)?$/.exec(trimmed);
533
+ if (!match) {
534
+ throw new Error(`Invalid timeout "${timeout}". Use milliseconds or a duration like 500ms, 30s, 5m, or 1h.`);
535
+ }
536
+ const value = Number(match[1]);
537
+ const unit = match[2] ?? "ms";
538
+ if (!Number.isFinite(value) || value < 0) {
539
+ throw new Error(`Invalid timeout "${timeout}". Timeout must be a positive duration.`);
540
+ }
541
+ const multiplier = unit === "ms" ? 1 : unit === "s" ? 1_000 : unit === "m" ? 60_000 : 3_600_000;
542
+ return Math.round(value * multiplier);
543
+ }
544
+ function taskName(id) {
545
+ const delimiterIndex = id.lastIndexOf(":");
546
+ return delimiterIndex >= 0 ? id.slice(delimiterIndex + 1) : id;
547
+ }
548
+ function runItemsFromDefinition(run) {
549
+ if (run === undefined)
550
+ return [];
551
+ return isTaskRunArray(run) ? [...run] : [run];
552
+ }
553
+ function partitionRunItems(items) {
554
+ const steps = [];
555
+ const cacheDirectives = [];
556
+ const dependsOnDirectives = [];
557
+ for (const item of items) {
558
+ if (isCacheDirective(item)) {
559
+ cacheDirectives.push(item);
560
+ continue;
561
+ }
562
+ if (isDependsOnDirective(item)) {
563
+ dependsOnDirectives.push(item);
564
+ continue;
565
+ }
566
+ steps.push(item);
567
+ }
568
+ if (cacheDirectives.length > 1) {
569
+ throw pipelineError("ASYNC_PIPELINE_TASK_CACHE_CONFLICT", "A task can only use one cache directive.");
570
+ }
571
+ return { steps, cacheDirectives, dependsOnDirectives };
572
+ }
573
+ function isDependsOnDirective(value) {
574
+ return Boolean(value)
575
+ && typeof value === "object"
576
+ && value.kind === "async-pipeline.directive.dependsOn";
577
+ }
578
+ function uniqueTaskIds(taskIds) {
579
+ return [...new Set(taskIds)];
580
+ }
581
+ function isTaskRunArray(value) {
582
+ return Array.isArray(value);
583
+ }
584
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}