@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,187 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createHash } from "node:crypto";
3
+ import { existsSync } from "node:fs";
4
+ import { mkdir } from "node:fs/promises";
5
+ import { dirname, join, resolve } from "node:path";
6
+ import { composePipelines, parseTaskRef, tasksForJob } from "../core/index.js";
7
+ import { loadPipeline } from "./loader.js";
8
+ import { computeCandidateContext } from "./store.js";
9
+ export async function createRunPlan(rootPipeline, cwd, store) {
10
+ const candidate = await computeCandidateContext(rootPipeline, cwd);
11
+ const sources = await resolveSources(rootPipeline, cwd, store, {
12
+ sync: true,
13
+ loadPipelines: true,
14
+ requirePrepareWritable: true
15
+ });
16
+ const composedSources = {};
17
+ for (const [sourceId, resolved] of Object.entries(sources)) {
18
+ if (!resolved.pipeline)
19
+ continue;
20
+ composedSources[sourceId] = {
21
+ pipeline: resolved.pipeline,
22
+ context: sourceContext(resolved)
23
+ };
24
+ }
25
+ return {
26
+ rootPipeline,
27
+ pipeline: composePipelines(rootPipeline, composedSources),
28
+ candidate,
29
+ sources
30
+ };
31
+ }
32
+ export async function resolveSources(pipeline, cwd, store, options = {}) {
33
+ const resolved = {};
34
+ for (const sourceDefinition of Object.values(pipeline.sources)) {
35
+ if (sourceDefinition.type === "path" && sourceDefinition.prepare.length > 0 && options.requirePrepareWritable && !sourceDefinition.writable) {
36
+ throw new Error(`Path source "${sourceDefinition.id}" has prepare steps. Set writable: true or use source.git for a scratch checkout.`);
37
+ }
38
+ const dir = sourceDefinition.type === "git"
39
+ ? await resolveGitSource(sourceDefinition, store, options.sync ?? false)
40
+ : resolve(cwd, sourceDefinition.path);
41
+ const pipelinePath = join(dir, sourceDefinition.pipeline);
42
+ const commit = existsSync(dir) ? await gitOutput(["rev-parse", "HEAD"], dir).catch(() => undefined) : undefined;
43
+ const dirty = existsSync(dir) ? (await gitOutput(["status", "--porcelain"], dir).catch(() => "")).trim().length > 0 : undefined;
44
+ const record = {
45
+ id: sourceDefinition.id,
46
+ type: sourceDefinition.type,
47
+ dir,
48
+ pipeline: sourceDefinition.pipeline,
49
+ url: sourceDefinition.type === "git" ? sourceDefinition.url : undefined,
50
+ path: sourceDefinition.type === "path" ? sourceDefinition.path : undefined,
51
+ ref: sourceDefinition.type === "git" ? sourceDefinition.ref : undefined,
52
+ commit,
53
+ dirty,
54
+ prepare: sourceDefinition.prepare.map((step) => typeof step === "function" ? "[function]" : step.kind === "deferred-shell" ? "[deferred-shell]" : step.command)
55
+ };
56
+ resolved[sourceDefinition.id] = {
57
+ id: sourceDefinition.id,
58
+ definition: sourceDefinition,
59
+ dir,
60
+ pipelinePath,
61
+ record,
62
+ pipeline: options.loadPipelines && existsSync(pipelinePath) ? await loadPipeline(pipelinePath) : undefined
63
+ };
64
+ }
65
+ return resolved;
66
+ }
67
+ export async function readPipelineMetadata(configPath, options = {}) {
68
+ const rootPipeline = await loadPipeline(configPath);
69
+ if (!options.includeSources)
70
+ return rootPipeline;
71
+ const cwd = options.cwd ?? dirname(configPath);
72
+ const store = options.store ?? {
73
+ root: cwd,
74
+ asyncDir: join(cwd, ".async"),
75
+ runsDir: join(cwd, ".async", "runs"),
76
+ cacheDir: join(cwd, ".async", "cache", "tasks"),
77
+ sourcesDir: join(cwd, ".async", "sources")
78
+ };
79
+ const sources = await resolveSources(rootPipeline, cwd, store, { sync: false, loadPipelines: true });
80
+ const sourceMetadata = {};
81
+ for (const [sourceId, resolved] of Object.entries(sources)) {
82
+ sourceMetadata[sourceId] = {
83
+ record: resolved.record,
84
+ pipeline: resolved.pipeline
85
+ };
86
+ }
87
+ return {
88
+ ...rootPipeline,
89
+ sourceMetadata
90
+ };
91
+ }
92
+ export function matrixForJob(pipeline, jobId) {
93
+ const graph = tasksForJob(pipeline, jobId);
94
+ const include = [];
95
+ for (const taskRef of graph.executionOrder) {
96
+ const parsed = parseTaskRef(taskRef);
97
+ if (!parsed.source)
98
+ continue;
99
+ const sourceDefinition = pipeline.sources[parsed.source];
100
+ if (!sourceDefinition)
101
+ continue;
102
+ include.push({
103
+ task: taskRef,
104
+ source: parsed.source,
105
+ taskId: parsed.taskId,
106
+ type: sourceDefinition.type,
107
+ url: sourceDefinition.type === "git" ? sourceDefinition.url : undefined,
108
+ path: sourceDefinition.type === "path" ? sourceDefinition.path : undefined,
109
+ ref: sourceDefinition.type === "git" ? sourceDefinition.ref : undefined
110
+ });
111
+ }
112
+ return { include };
113
+ }
114
+ export function sourceContext(source) {
115
+ return {
116
+ name: source.id,
117
+ dir: source.dir,
118
+ type: source.definition.type,
119
+ ref: source.definition.type === "git" ? source.definition.ref : undefined,
120
+ commit: source.record.commit
121
+ };
122
+ }
123
+ export function sourceCheckoutDir(store, sourceDefinition) {
124
+ const hash = createHash("sha256")
125
+ .update(JSON.stringify(sourceDefinition.type === "git"
126
+ ? { url: sourceDefinition.url, ref: sourceDefinition.ref }
127
+ : { path: sourceDefinition.path }))
128
+ .digest("hex")
129
+ .slice(0, 16);
130
+ return join(store.sourcesDir, sourceDefinition.id, hash);
131
+ }
132
+ export function shellCommandsFromSteps(steps) {
133
+ return steps.map((step) => step.command);
134
+ }
135
+ async function resolveGitSource(sourceDefinition, store, sync) {
136
+ const dir = sourceCheckoutDir(store, sourceDefinition);
137
+ if (!sync)
138
+ return dir;
139
+ await mkdir(dirname(dir), { recursive: true });
140
+ if (!existsSync(join(dir, ".git"))) {
141
+ await runGit(["clone", "--no-checkout", sourceDefinition.url, dir], store.root);
142
+ }
143
+ if (!isFullCommit(sourceDefinition.ref)) {
144
+ await runGit(["fetch", "--tags", "origin"], dir);
145
+ }
146
+ await runGit(["checkout", "--force", sourceDefinition.ref], dir);
147
+ return dir;
148
+ }
149
+ function isFullCommit(ref) {
150
+ return /^[a-f0-9]{40}$/i.test(ref);
151
+ }
152
+ async function runGit(args, cwd) {
153
+ const result = await runProcess("git", args, cwd);
154
+ if (result.code !== 0) {
155
+ throw new Error(`git ${args.join(" ")} failed: ${result.stderr || result.stdout}`);
156
+ }
157
+ }
158
+ async function gitOutput(args, cwd) {
159
+ const result = await runProcess("git", args, cwd);
160
+ if (result.code !== 0) {
161
+ throw new Error(`git ${args.join(" ")} failed: ${result.stderr || result.stdout}`);
162
+ }
163
+ return result.stdout.trim();
164
+ }
165
+ function runProcess(command, args, cwd) {
166
+ return new Promise((resolveResult) => {
167
+ const child = spawn(command, args, {
168
+ cwd,
169
+ env: process.env,
170
+ stdio: ["ignore", "pipe", "pipe"]
171
+ });
172
+ let stdout = "";
173
+ let stderr = "";
174
+ child.stdout.setEncoding("utf8");
175
+ child.stderr.setEncoding("utf8");
176
+ child.stdout.on("data", (chunk) => {
177
+ stdout += chunk;
178
+ });
179
+ child.stderr.on("data", (chunk) => {
180
+ stderr += chunk;
181
+ });
182
+ child.on("close", (code) => {
183
+ resolveResult({ code: code ?? 1, stdout, stderr });
184
+ });
185
+ });
186
+ }
187
+ //# sourceMappingURL=sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.js","sourceRoot":"","sources":["../src/sources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { CandidateContext, ExecutionRecord, NormalizedPipeline, NormalizedTask, TaskResult, TaskSourceContext, TaskStep } from "../core/index.js";
2
+ export interface PipelineStore {
3
+ root: string;
4
+ asyncDir: string;
5
+ runsDir: string;
6
+ cacheDir: string;
7
+ sourcesDir: string;
8
+ }
9
+ export declare function createStore(root: string): Promise<PipelineStore>;
10
+ export declare function writeExecution(store: PipelineStore, record: ExecutionRecord): Promise<void>;
11
+ export declare function writeTaskLog(store: PipelineStore, runId: string, taskId: string, log: string): Promise<void>;
12
+ export declare function readCacheEntry(store: PipelineStore, cacheKey: string): Promise<TaskResult | null>;
13
+ export declare function writeCacheEntry(store: PipelineStore, cacheKey: string, result: TaskResult): Promise<void>;
14
+ export interface TaskCacheKeyOptions {
15
+ steps?: TaskStep[];
16
+ candidate?: CandidateContext;
17
+ source?: TaskSourceContext;
18
+ prepareCommands?: string[];
19
+ }
20
+ export declare function computeTaskCacheKey(pipeline: NormalizedPipeline, taskDefinition: NormalizedTask, cwd: string, options?: TaskCacheKeyOptions): Promise<string>;
21
+ export declare function computeCandidateContext(pipeline: NormalizedPipeline, cwd: string): Promise<CandidateContext>;
22
+ export declare function resolveInputFiles(cwd: string, inputs: readonly string[]): Promise<string[]>;
23
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAoB,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAG7K,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAStE;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAKjG;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlH;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAOvG;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/G;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,kBAAkB,EAC5B,cAAc,EAAE,cAAc,EAC9B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0BlH;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA6BjG"}
@@ -0,0 +1,224 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, readdir, readFile, stat, writeFile } from "node:fs/promises";
3
+ import { join, relative } from "node:path";
4
+ import { expandInputs } from "../core/index.js";
5
+ export async function createStore(root) {
6
+ const asyncDir = join(root, ".async");
7
+ const runsDir = join(asyncDir, "runs");
8
+ const cacheDir = join(asyncDir, "cache", "tasks");
9
+ const sourcesDir = join(asyncDir, "sources");
10
+ await mkdir(runsDir, { recursive: true });
11
+ await mkdir(cacheDir, { recursive: true });
12
+ await mkdir(sourcesDir, { recursive: true });
13
+ return { root, asyncDir, runsDir, cacheDir, sourcesDir };
14
+ }
15
+ export async function writeExecution(store, record) {
16
+ const runDir = join(store.runsDir, record.id);
17
+ await mkdir(runDir, { recursive: true });
18
+ await writeFile(join(runDir, "execution.json"), `${JSON.stringify(record, null, 2)}\n`, "utf8");
19
+ await writeFile(join(runDir, "summary.md"), renderSummary(record), "utf8");
20
+ }
21
+ export async function writeTaskLog(store, runId, taskId, log) {
22
+ const logDir = join(store.runsDir, runId, "logs");
23
+ await mkdir(logDir, { recursive: true });
24
+ await writeFile(join(logDir, `${safeFileName(taskId)}.log`), log, "utf8");
25
+ }
26
+ export async function readCacheEntry(store, cacheKey) {
27
+ try {
28
+ const cacheFile = join(store.cacheDir, cacheKey, "result.json");
29
+ return JSON.parse(await readFile(cacheFile, "utf8"));
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ export async function writeCacheEntry(store, cacheKey, result) {
36
+ const cacheEntryDir = join(store.cacheDir, cacheKey);
37
+ await mkdir(cacheEntryDir, { recursive: true });
38
+ await writeFile(join(cacheEntryDir, "result.json"), `${JSON.stringify(result, null, 2)}\n`, "utf8");
39
+ }
40
+ export async function computeTaskCacheKey(pipeline, taskDefinition, cwd, options = {}) {
41
+ const hash = createHash("sha256");
42
+ hash.update(JSON.stringify({
43
+ pipeline: pipeline.name,
44
+ task: taskDefinition.id,
45
+ source: options.source ?? taskDefinition.source,
46
+ candidate: options.candidate,
47
+ prepareCommands: options.prepareCommands ?? [],
48
+ dependsOn: taskDefinition.dependsOn,
49
+ inputs: taskDefinition.inputs,
50
+ outputs: taskDefinition.outputs,
51
+ cache: serializeCacheOptions(taskDefinition.cache),
52
+ retry: taskDefinition.retry,
53
+ timeout: taskDefinition.timeout,
54
+ timeoutMs: taskDefinition.timeoutMs,
55
+ requires: taskDefinition.requires,
56
+ environment: taskDefinition.environment,
57
+ steps: serializeSteps(options.steps ?? taskDefinition.steps)
58
+ }));
59
+ const expandedInputs = expandInputs(pipeline, taskDefinition.inputs);
60
+ const inputFiles = await resolveInputFiles(cwd, expandedInputs);
61
+ for (const input of expandedInputs) {
62
+ hash.update(input);
63
+ }
64
+ for (const input of inputFiles) {
65
+ hash.update(input);
66
+ try {
67
+ hash.update(await readFile(join(cwd, input)));
68
+ }
69
+ catch {
70
+ hash.update("[missing]");
71
+ }
72
+ }
73
+ return hash.digest("hex");
74
+ }
75
+ export async function computeCandidateContext(pipeline, cwd) {
76
+ const hash = createHash("sha256");
77
+ const inputs = new Set(["pipeline.ts", "pipeline.mjs", "pipeline.js"]);
78
+ for (const taskDefinition of Object.values(pipeline.tasks)) {
79
+ for (const input of expandInputs(pipeline, taskDefinition.inputs)) {
80
+ inputs.add(input);
81
+ }
82
+ }
83
+ const inputFiles = await resolveInputFiles(cwd, [...inputs]);
84
+ for (const input of [...inputs].sort()) {
85
+ hash.update(input);
86
+ }
87
+ for (const input of inputFiles) {
88
+ hash.update(input);
89
+ try {
90
+ hash.update(await readFile(join(cwd, input)));
91
+ }
92
+ catch {
93
+ hash.update("[missing]");
94
+ }
95
+ }
96
+ return {
97
+ dir: cwd,
98
+ fingerprint: hash.digest("hex")
99
+ };
100
+ }
101
+ export async function resolveInputFiles(cwd, inputs) {
102
+ const includePatterns = inputs.filter((input) => !input.startsWith("!"));
103
+ const excludeMatchers = inputs
104
+ .filter((input) => input.startsWith("!"))
105
+ .map((input) => globToRegExp(input.slice(1)));
106
+ const files = new Set();
107
+ for (const pattern of includePatterns) {
108
+ if (!pattern.includes("*")) {
109
+ const normalized = normalizePath(pattern);
110
+ try {
111
+ const fileStat = await stat(join(cwd, normalized));
112
+ if (fileStat.isFile())
113
+ files.add(normalized);
114
+ }
115
+ catch {
116
+ files.add(normalized);
117
+ }
118
+ continue;
119
+ }
120
+ const baseDir = baseDirectoryForGlob(pattern);
121
+ const matcher = globToRegExp(pattern);
122
+ for (const file of await walkFiles(join(cwd, baseDir), cwd)) {
123
+ if (matcher.test(file))
124
+ files.add(file);
125
+ }
126
+ }
127
+ return [...files]
128
+ .filter((file) => !excludeMatchers.some((matcher) => matcher.test(file)))
129
+ .sort((left, right) => left.localeCompare(right));
130
+ }
131
+ async function walkFiles(dir, cwd) {
132
+ let entries;
133
+ try {
134
+ entries = await readdir(dir, { withFileTypes: true });
135
+ }
136
+ catch {
137
+ return [];
138
+ }
139
+ const files = [];
140
+ for (const entry of entries) {
141
+ const absolutePath = join(dir, entry.name);
142
+ if (entry.isDirectory()) {
143
+ files.push(...await walkFiles(absolutePath, cwd));
144
+ }
145
+ else if (entry.isFile()) {
146
+ files.push(normalizePath(relative(cwd, absolutePath)));
147
+ }
148
+ }
149
+ return files;
150
+ }
151
+ function baseDirectoryForGlob(pattern) {
152
+ const parts = pattern.split("/");
153
+ const baseParts = [];
154
+ for (const part of parts) {
155
+ if (part.includes("*"))
156
+ break;
157
+ baseParts.push(part);
158
+ }
159
+ return baseParts.length === 0 ? "." : baseParts.join("/");
160
+ }
161
+ function globToRegExp(pattern) {
162
+ let source = "";
163
+ for (let index = 0; index < pattern.length; index += 1) {
164
+ const char = pattern[index] ?? "";
165
+ const next = pattern[index + 1];
166
+ if (char === "*" && next === "*" && pattern[index + 2] === "/") {
167
+ source += "(?:.*/)?";
168
+ index += 2;
169
+ continue;
170
+ }
171
+ if (char === "*" && next === "*") {
172
+ source += ".*";
173
+ index += 1;
174
+ continue;
175
+ }
176
+ if (char === "*") {
177
+ source += "[^/]*";
178
+ continue;
179
+ }
180
+ source += escapeRegExp(char);
181
+ }
182
+ return new RegExp(`^${source}$`);
183
+ }
184
+ function escapeRegExp(value) {
185
+ return value.replaceAll(/[\\^$.*+?()[\]{}|]/g, "\\$&");
186
+ }
187
+ function normalizePath(path) {
188
+ return path.replaceAll("\\", "/");
189
+ }
190
+ function serializeSteps(steps) {
191
+ return steps.map((step) => {
192
+ if (typeof step === "function")
193
+ return "[function]";
194
+ if (step.kind === "deferred-shell")
195
+ return { kind: "deferred-shell" };
196
+ return step;
197
+ });
198
+ }
199
+ function serializeCacheOptions(cache) {
200
+ return {
201
+ ...cache,
202
+ key: typeof cache.key === "function" ? "[function]" : cache.key
203
+ };
204
+ }
205
+ function renderSummary(record) {
206
+ const lines = [
207
+ `# Pipeline: ${record.pipelineName}`,
208
+ "",
209
+ `Job: ${record.jobId}`,
210
+ `Status: ${record.status}`,
211
+ "",
212
+ "| Task | Status | Attempts | Cache | Duration |",
213
+ "| --- | --- | ---: | --- | ---: |"
214
+ ];
215
+ for (const task of record.tasks) {
216
+ lines.push(`| ${task.id} | ${task.status} | ${task.attempts} | ${task.cacheHit ? "hit" : "miss"} | ${task.durationMs ?? 0}ms |`);
217
+ }
218
+ lines.push("");
219
+ return lines.join("\n");
220
+ }
221
+ function safeFileName(value) {
222
+ return value.replaceAll(/[^a-zA-Z0-9._-]/g, "_");
223
+ }
224
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { NormalizedPipeline, SyncRunner, SyncTargetSelector } from "../core/index.js";
2
+ export declare const TASK_SYNC_LOCK_PATH = ".async-pipeline/tasks.lock.json";
3
+ export interface TaskSyncOptions {
4
+ cwd: string;
5
+ configPath: string;
6
+ }
7
+ export interface TaskSyncCommand {
8
+ name: string;
9
+ value: string;
10
+ }
11
+ export interface TaskSyncManifest {
12
+ path: string;
13
+ runner: SyncRunner;
14
+ field: "scripts" | "tasks";
15
+ commands: TaskSyncCommand[];
16
+ }
17
+ export interface TaskSyncLock {
18
+ version: number;
19
+ generator: string;
20
+ config: string;
21
+ prefix: string;
22
+ runners: "all" | SyncRunner[];
23
+ targets: "root" | SyncTargetSelector[];
24
+ manifests: TaskSyncManifest[];
25
+ commands: TaskSyncCommand[];
26
+ hash: string;
27
+ generatedAt: string;
28
+ }
29
+ export interface TaskSyncRenderResult {
30
+ enabled: boolean;
31
+ lockPath: string;
32
+ lock: TaskSyncLock;
33
+ manifests: TaskSyncManifest[];
34
+ }
35
+ export declare function renderTaskSync(pipeline: NormalizedPipeline, options: TaskSyncOptions): Promise<TaskSyncRenderResult>;
36
+ export declare function writeTaskSync(result: TaskSyncRenderResult, cwd: string): Promise<void>;
37
+ export declare function checkTaskSync(result: TaskSyncRenderResult, cwd: string, options?: {
38
+ requireConfigured?: boolean;
39
+ }): Promise<string[]>;
40
+ export declare function describeTaskSync(result: TaskSyncRenderResult): string[];
41
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAA4B,UAAU,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGzH,eAAO,MAAM,mBAAmB,oCAAoC,CAAC;AAGrE,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,GAAG,UAAU,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACvC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAwC1H;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5F;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiC/I;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAOvE"}