@sparkwing/sdk 0.0.0-stage → 0.68.2
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 +183 -2
- package/dist/command.js +272 -0
- package/dist/command.js.map +1 -0
- package/dist/context.js +69 -0
- package/dist/context.js.map +1 -0
- package/dist/describe.js +70 -0
- package/dist/describe.js.map +1 -0
- package/dist/errors.js +88 -0
- package/dist/errors.js.map +1 -0
- package/dist/helpers/docker.js +267 -0
- package/dist/helpers/docker.js.map +1 -0
- package/dist/helpers/files.js +141 -0
- package/dist/helpers/files.js.map +1 -0
- package/dist/helpers/git.js +263 -0
- package/dist/helpers/git.js.map +1 -0
- package/dist/helpers/memo.js +29 -0
- package/dist/helpers/memo.js.map +1 -0
- package/dist/helpers/services.js +160 -0
- package/dist/helpers/services.js.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/json.js +27 -0
- package/dist/json.js.map +1 -0
- package/dist/log.js +42 -0
- package/dist/log.js.map +1 -0
- package/dist/main.js +68 -0
- package/dist/main.js.map +1 -0
- package/dist/plan-wire.js +2 -0
- package/dist/plan-wire.js.map +1 -0
- package/dist/plan.js +811 -0
- package/dist/plan.js.map +1 -0
- package/dist/protocol.js +209 -0
- package/dist/protocol.js.map +1 -0
- package/dist/routes.js +185 -0
- package/dist/routes.js.map +1 -0
- package/dist/runner.js +380 -0
- package/dist/runner.js.map +1 -0
- package/dist/scope.js +27 -0
- package/dist/scope.js.map +1 -0
- package/dist/step-state.js +53 -0
- package/dist/step-state.js.map +1 -0
- package/dist/transport.js +50 -0
- package/dist/transport.js.map +1 -0
- package/index.d.ts +390 -0
- package/native/win32-arm64/protocol.node +0 -0
- package/native/win32-arm64/verification.json +1 -0
- package/native/win32-x64/protocol.node +0 -0
- package/native/win32-x64/verification.json +1 -0
- package/package.json +47 -4
package/dist/errors.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export class SDKError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
hint;
|
|
4
|
+
details;
|
|
5
|
+
constructor(message, options = { code: "sdk_error" }) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "SDKError";
|
|
8
|
+
this.code = options.code;
|
|
9
|
+
if (options.hint !== undefined)
|
|
10
|
+
this.hint = options.hint;
|
|
11
|
+
if (options.details !== undefined)
|
|
12
|
+
this.details = options.details;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class InputError extends Error {
|
|
16
|
+
cause;
|
|
17
|
+
constructor(cause) {
|
|
18
|
+
super(messageOf(cause), { cause });
|
|
19
|
+
this.name = "InputError";
|
|
20
|
+
this.cause = cause;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class VerifyError extends Error {
|
|
24
|
+
cause;
|
|
25
|
+
constructor(cause) {
|
|
26
|
+
super(messageOf(cause), { cause });
|
|
27
|
+
this.name = "VerifyError";
|
|
28
|
+
this.cause = cause;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class StepError extends Error {
|
|
32
|
+
stepId;
|
|
33
|
+
cause;
|
|
34
|
+
constructor(stepId, cause) {
|
|
35
|
+
super(messageOf(cause), { cause });
|
|
36
|
+
this.name = "StepError";
|
|
37
|
+
this.stepId = stepId;
|
|
38
|
+
this.cause = cause;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class NoProjectError extends Error {
|
|
42
|
+
}
|
|
43
|
+
export function messageOf(error) {
|
|
44
|
+
return error instanceof Error ? error.message : String(error);
|
|
45
|
+
}
|
|
46
|
+
export function failure(code, message, details) {
|
|
47
|
+
return new SDKError(message, { code, ...(details ? { details } : {}) });
|
|
48
|
+
}
|
|
49
|
+
export function errorFields(error) {
|
|
50
|
+
if (error instanceof SDKError)
|
|
51
|
+
return {
|
|
52
|
+
code: error.code,
|
|
53
|
+
message: error.message,
|
|
54
|
+
...(error.hint === undefined ? {} : { hint: error.hint }),
|
|
55
|
+
...(error.details === undefined ? {} : { details: error.details }),
|
|
56
|
+
};
|
|
57
|
+
return { code: "sdk_error", message: messageOf(error) };
|
|
58
|
+
}
|
|
59
|
+
export function decodeError(value) {
|
|
60
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
61
|
+
throw failure("protocol_error", "invalid error object");
|
|
62
|
+
const v = value;
|
|
63
|
+
if (typeof v.code !== "string" ||
|
|
64
|
+
v.code === "" ||
|
|
65
|
+
typeof v.message !== "string" ||
|
|
66
|
+
"error" in v ||
|
|
67
|
+
(v.hint !== undefined && typeof v.hint !== "string"))
|
|
68
|
+
throw failure("protocol_error", "invalid error object");
|
|
69
|
+
if (v.details !== undefined && (v.details === null || typeof v.details !== "object" || Array.isArray(v.details)))
|
|
70
|
+
throw failure("protocol_error", "invalid error details");
|
|
71
|
+
const details = v.details;
|
|
72
|
+
return new SDKError(v.message, {
|
|
73
|
+
code: v.code,
|
|
74
|
+
...(v.hint === undefined ? {} : { hint: v.hint }),
|
|
75
|
+
...(details === undefined ? {} : { details }),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
export function object(value, label) {
|
|
79
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
80
|
+
throw failure("bad_request", `${label} must be an object`);
|
|
81
|
+
return value;
|
|
82
|
+
}
|
|
83
|
+
export function string(value, label) {
|
|
84
|
+
if (typeof value !== "string" || value === "")
|
|
85
|
+
throw failure("bad_request", `${label} must be a nonempty string`);
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
import * as fs from "node:fs/promises";
|
|
3
|
+
import * as paths from "node:path";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import { assertExecution } from "../scope.js";
|
|
6
|
+
import { cleanupContext, runCommand, runInput } from "../command.js";
|
|
7
|
+
import { isMissing, path } from "./files.js";
|
|
8
|
+
import { git } from "./git.js";
|
|
9
|
+
export class DockerUnavailableError extends Error {
|
|
10
|
+
}
|
|
11
|
+
export class BuildxRequiredError extends Error {
|
|
12
|
+
}
|
|
13
|
+
export class PlatformUnsupportedError extends Error {
|
|
14
|
+
}
|
|
15
|
+
function unavailable(error) {
|
|
16
|
+
if (isMissing(error))
|
|
17
|
+
return true;
|
|
18
|
+
return error instanceof Error && error.cause !== undefined && unavailable(error.cause);
|
|
19
|
+
}
|
|
20
|
+
export async function dockerCommand(ctx, ...args) {
|
|
21
|
+
assertExecution();
|
|
22
|
+
try {
|
|
23
|
+
return await ctx.exec(["docker", ...args]).capture();
|
|
24
|
+
}
|
|
25
|
+
catch (cause) {
|
|
26
|
+
if (unavailable(cause))
|
|
27
|
+
throw new DockerUnavailableError("Docker binary is not available on PATH", { cause });
|
|
28
|
+
throw cause;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function buildxPlatforms(ctx) {
|
|
32
|
+
try {
|
|
33
|
+
await dockerCommand(ctx, "buildx", "version");
|
|
34
|
+
}
|
|
35
|
+
catch (cause) {
|
|
36
|
+
ctx.signal.throwIfAborted();
|
|
37
|
+
if (cause instanceof DockerUnavailableError)
|
|
38
|
+
throw cause;
|
|
39
|
+
throw new BuildxRequiredError("Docker buildx is required", { cause });
|
|
40
|
+
}
|
|
41
|
+
const result = await dockerCommand(ctx, "buildx", "inspect");
|
|
42
|
+
const found = result.stdout
|
|
43
|
+
.split("\n")
|
|
44
|
+
.filter((line) => line.trim().startsWith("Platforms:"))
|
|
45
|
+
.flatMap((line) => line.slice(line.indexOf(":") + 1).split(","))
|
|
46
|
+
.map((value) => value.trim().replace(/\*$/, ""))
|
|
47
|
+
.filter(Boolean);
|
|
48
|
+
return [...new Set(found)];
|
|
49
|
+
}
|
|
50
|
+
function advertised(wish, targets) {
|
|
51
|
+
return targets.some((target) => target === wish || target.startsWith(wish + "/"));
|
|
52
|
+
}
|
|
53
|
+
function entries(values) {
|
|
54
|
+
return Object.entries(values ?? {}).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
55
|
+
}
|
|
56
|
+
function digest(output, tag) {
|
|
57
|
+
const found = output
|
|
58
|
+
.split("\n")
|
|
59
|
+
.filter((line) => line.startsWith(`${tag}: digest: `))
|
|
60
|
+
.map((line) => /^.+: digest: (sha256:[a-f0-9]{64}) size: \d+\s*$/.exec(line)?.[1])
|
|
61
|
+
.filter(Boolean);
|
|
62
|
+
const unique = new Set(found);
|
|
63
|
+
return unique.size === 1 ? found[0] : undefined;
|
|
64
|
+
}
|
|
65
|
+
async function pushRefs(ctx, local, image, tags, registries) {
|
|
66
|
+
const digests = {};
|
|
67
|
+
const completed = [], errors = [];
|
|
68
|
+
let first = local;
|
|
69
|
+
let pushed = false;
|
|
70
|
+
for (const registry of registries) {
|
|
71
|
+
let success = true;
|
|
72
|
+
for (const tag of tags) {
|
|
73
|
+
ctx.signal.throwIfAborted();
|
|
74
|
+
const remote = `${registry}/${image}:${tag}`;
|
|
75
|
+
try {
|
|
76
|
+
await dockerCommand(ctx, "tag", local, remote);
|
|
77
|
+
const output = await dockerCommand(ctx, "push", remote);
|
|
78
|
+
const value = digest(output.stdout + "\n" + output.stderr, tag);
|
|
79
|
+
if (value)
|
|
80
|
+
digests[remote] = value;
|
|
81
|
+
if (!pushed) {
|
|
82
|
+
first = remote;
|
|
83
|
+
pushed = true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
success = false;
|
|
88
|
+
errors.push(error);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (success)
|
|
92
|
+
completed.push(registry);
|
|
93
|
+
}
|
|
94
|
+
if (errors.length)
|
|
95
|
+
throw new AggregateError(errors, "Docker image push failed");
|
|
96
|
+
return { image: first, digests, registries: completed };
|
|
97
|
+
}
|
|
98
|
+
async function build(ctx, config, push) {
|
|
99
|
+
assertExecution();
|
|
100
|
+
if (!config.image || !config.tags.length || config.tags.some((tag) => !tag))
|
|
101
|
+
throw new Error("Docker build requires an image and nonempty tags");
|
|
102
|
+
const platforms = config.platforms ?? [], registries = config.registries ?? [];
|
|
103
|
+
const multi = platforms.length > 0;
|
|
104
|
+
if (multi) {
|
|
105
|
+
const targets = await buildxPlatforms(ctx);
|
|
106
|
+
const missing = platforms.filter((target) => !advertised(target, targets));
|
|
107
|
+
if (targets.length && missing.length)
|
|
108
|
+
throw new PlatformUnsupportedError(`Unsupported platforms: ${missing.join(", ")}; builder advertises ${targets.join(", ")}`);
|
|
109
|
+
}
|
|
110
|
+
const local = config.tags.map((tag) => `${config.image}:${tag}`);
|
|
111
|
+
const remote = registries.flatMap((registry) => config.tags.map((tag) => `${registry}/${config.image}:${tag}`));
|
|
112
|
+
const args = multi ? ["buildx", "build", "--platform", platforms.join(",")] : ["build"];
|
|
113
|
+
if (multi && push && remote.length)
|
|
114
|
+
args.push("--push");
|
|
115
|
+
else if (platforms.length === 1)
|
|
116
|
+
args.push("--load");
|
|
117
|
+
args.push("-f", config.dockerfile || "Dockerfile");
|
|
118
|
+
if (!(multi && push && remote.length))
|
|
119
|
+
for (const ref of local)
|
|
120
|
+
args.push("-t", ref);
|
|
121
|
+
if (multi)
|
|
122
|
+
for (const ref of remote)
|
|
123
|
+
args.push("-t", ref);
|
|
124
|
+
for (const [key, value] of entries(config.buildArgs))
|
|
125
|
+
args.push("--build-arg", `${key}=${value}`);
|
|
126
|
+
for (const [key, value] of entries(config.labels))
|
|
127
|
+
args.push("--label", `${key}=${value}`);
|
|
128
|
+
let metadata;
|
|
129
|
+
try {
|
|
130
|
+
if (multi && push && remote.length) {
|
|
131
|
+
metadata = await fs.mkdtemp(paths.join(tmpdir(), "sparkwing-push-"));
|
|
132
|
+
args.push("--metadata-file", paths.join(metadata, "metadata.json"));
|
|
133
|
+
}
|
|
134
|
+
args.push(config.context || ".");
|
|
135
|
+
await dockerCommand(ctx, ...args);
|
|
136
|
+
if (!push || !registries.length)
|
|
137
|
+
return { image: local[0], digests: {}, registries: [] };
|
|
138
|
+
if (!multi)
|
|
139
|
+
return await pushRefs(ctx, local[0], config.image, config.tags, registries);
|
|
140
|
+
const data = JSON.parse(await fs.readFile(paths.join(metadata, "metadata.json"), "utf8"));
|
|
141
|
+
const value = typeof data === "object" && data !== null && "containerimage.digest" in data ? data["containerimage.digest"] : undefined;
|
|
142
|
+
const digests = {};
|
|
143
|
+
if (typeof value === "string" && /^sha256:[a-f0-9]{64}$/.test(value))
|
|
144
|
+
for (const ref of remote)
|
|
145
|
+
digests[ref] = value;
|
|
146
|
+
return { image: remote[0], digests, registries: [...registries] };
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
if (metadata)
|
|
150
|
+
await fs.rm(metadata, { recursive: true, force: true });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export async function removeContainer(ctx, name, registration) {
|
|
154
|
+
await dockerCommand(cleanupContext(ctx), "rm", "-f", name);
|
|
155
|
+
await registration.unregister();
|
|
156
|
+
}
|
|
157
|
+
async function run(ctx, options) {
|
|
158
|
+
assertExecution();
|
|
159
|
+
if (!options.image)
|
|
160
|
+
throw new Error("Docker run requires an image");
|
|
161
|
+
if (options.outputDir && !options.outputTo)
|
|
162
|
+
throw new Error("Docker run outputTo is required for outputDir");
|
|
163
|
+
const name = "sparkwing-run-" + randomBytes(6).toString("hex");
|
|
164
|
+
const working = options.workDir || "/work";
|
|
165
|
+
const args = ["create", "--name", name, "-w", working];
|
|
166
|
+
if (options.user)
|
|
167
|
+
args.push("--user", options.user);
|
|
168
|
+
for (const [key, value] of entries(options.env))
|
|
169
|
+
args.push("-e", `${key}=${value}`);
|
|
170
|
+
for (const [volume, mount] of entries(options.volumes)) {
|
|
171
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/.test(volume))
|
|
172
|
+
throw new Error(`Docker volumes require a named volume: ${volume}`);
|
|
173
|
+
args.push("-v", `${volume}:${mount}`);
|
|
174
|
+
}
|
|
175
|
+
args.push(options.image, ...(options.cmd ?? []));
|
|
176
|
+
await dockerCommand(ctx, "pull", options.image);
|
|
177
|
+
const registration = await ctx.cleanup({ argv: ["docker", "rm", "-f", name], description: `Docker run ${options.image}` });
|
|
178
|
+
let failed = false;
|
|
179
|
+
try {
|
|
180
|
+
await dockerCommand(ctx, ...args);
|
|
181
|
+
if (options.inputDir)
|
|
182
|
+
await dockerCommand(ctx, "cp", path(options.inputDir) + "/.", `${name}:${working}`);
|
|
183
|
+
if (options.stdout || options.stderr) {
|
|
184
|
+
await runCommand(ctx, ["docker", "start", "-a", name], {
|
|
185
|
+
...(options.stdout ? { stdout: options.stdout } : {}),
|
|
186
|
+
...(options.stderr ? { stderr: options.stderr } : {}),
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
else
|
|
190
|
+
await ctx.exec(["docker", "start", "-a", name]).run();
|
|
191
|
+
if (options.outputDir) {
|
|
192
|
+
const destination = path(options.outputTo);
|
|
193
|
+
await fs.mkdir(destination, { recursive: true });
|
|
194
|
+
await dockerCommand(ctx, "cp", `${name}:${options.outputDir}/.`, destination);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
failed = true;
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
finally {
|
|
202
|
+
try {
|
|
203
|
+
await removeContainer(ctx, name, registration);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
if (!failed)
|
|
207
|
+
throw error;
|
|
208
|
+
ctx.log.warn("Docker container cleanup failed; host cleanup remains registered", { name, error: String(error) });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
async function computeTagsIn(ctx, directory) {
|
|
213
|
+
const commit = await git.shortCommit(ctx, directory);
|
|
214
|
+
const branch = await git.currentBranch(ctx, directory);
|
|
215
|
+
const dirty = await git.isDirty(ctx, directory);
|
|
216
|
+
const content = await git.filesetHash(ctx, directory);
|
|
217
|
+
const deploy = `commit-${commit}-files-${content}${dirty ? "-dirty" : ""}`;
|
|
218
|
+
return Object.freeze({
|
|
219
|
+
commit,
|
|
220
|
+
branch,
|
|
221
|
+
dirty,
|
|
222
|
+
content,
|
|
223
|
+
deployTag: () => deploy,
|
|
224
|
+
prodTag: () => deploy + "-prod",
|
|
225
|
+
all: () => [deploy, deploy + "-prod"],
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
export const docker = {
|
|
229
|
+
DockerUnavailableError,
|
|
230
|
+
BuildxRequiredError,
|
|
231
|
+
PlatformUnsupportedError,
|
|
232
|
+
build: (ctx, config) => build(ctx, config, false),
|
|
233
|
+
buildAndPush: (ctx, config) => build(ctx, config, true),
|
|
234
|
+
async push(ctx, image, tags, registries) {
|
|
235
|
+
assertExecution();
|
|
236
|
+
if (!image || !tags.length || !registries.length)
|
|
237
|
+
throw new Error("Docker push requires an image, tags and registries");
|
|
238
|
+
const colon = image.lastIndexOf(":");
|
|
239
|
+
const base = colon > image.lastIndexOf("/") ? image.slice(0, colon) : image;
|
|
240
|
+
await pushRefs(ctx, image, base, tags, registries);
|
|
241
|
+
},
|
|
242
|
+
async login(ctx, registry, username, secret) {
|
|
243
|
+
assertExecution();
|
|
244
|
+
if (!registry || !username || !secret)
|
|
245
|
+
throw new Error("Docker login requires registry, username and secret");
|
|
246
|
+
try {
|
|
247
|
+
await runInput(ctx, ["docker", "login", "--username", username, "--password-stdin", registry], secret);
|
|
248
|
+
}
|
|
249
|
+
catch (cause) {
|
|
250
|
+
if (unavailable(cause))
|
|
251
|
+
throw new DockerUnavailableError("Docker binary is not available on PATH", { cause });
|
|
252
|
+
throw cause;
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
buildxPlatforms,
|
|
256
|
+
async filterBuildxPlatforms(ctx, wish) {
|
|
257
|
+
assertExecution();
|
|
258
|
+
if (!wish.length)
|
|
259
|
+
return [];
|
|
260
|
+
const targets = await buildxPlatforms(ctx);
|
|
261
|
+
return wish.filter((platform) => advertised(platform, targets));
|
|
262
|
+
},
|
|
263
|
+
run,
|
|
264
|
+
computeTags: (ctx) => computeTagsIn(ctx, ctx.run.git.workDir()),
|
|
265
|
+
computeTagsIn,
|
|
266
|
+
};
|
|
267
|
+
//# sourceMappingURL=docker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/helpers/docker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import * as paths from "node:path";
|
|
3
|
+
import { assertExecution, projectRoot } from "../scope.js";
|
|
4
|
+
import { NoProjectError } from "../errors.js";
|
|
5
|
+
export function workDir() {
|
|
6
|
+
return projectRoot();
|
|
7
|
+
}
|
|
8
|
+
export function path(...parts) {
|
|
9
|
+
if (parts.length && paths.isAbsolute(parts[0]))
|
|
10
|
+
return paths.join(...parts);
|
|
11
|
+
const root = workDir();
|
|
12
|
+
if (!root)
|
|
13
|
+
throw new NoProjectError("No pipeline project root is available");
|
|
14
|
+
return paths.join(root, ...parts);
|
|
15
|
+
}
|
|
16
|
+
export async function readFile(file) {
|
|
17
|
+
assertExecution();
|
|
18
|
+
return fs.readFile(path(file));
|
|
19
|
+
}
|
|
20
|
+
export async function writeFile(file, data) {
|
|
21
|
+
assertExecution();
|
|
22
|
+
await fs.writeFile(path(file), data, { mode: 0o644 });
|
|
23
|
+
}
|
|
24
|
+
export function globRegex(pattern, recursive = false) {
|
|
25
|
+
let result = "^";
|
|
26
|
+
for (let i = 0; i < pattern.length; i++) {
|
|
27
|
+
const char = pattern[i];
|
|
28
|
+
if (char === "*") {
|
|
29
|
+
if (recursive && pattern[i + 1] === "*") {
|
|
30
|
+
i++;
|
|
31
|
+
if (pattern[i + 1] === "/") {
|
|
32
|
+
result += "(?:.*/)?";
|
|
33
|
+
i++;
|
|
34
|
+
}
|
|
35
|
+
else
|
|
36
|
+
result += ".*";
|
|
37
|
+
}
|
|
38
|
+
else
|
|
39
|
+
result += "[^/]*";
|
|
40
|
+
}
|
|
41
|
+
else if (char === "?")
|
|
42
|
+
result += "[^/]";
|
|
43
|
+
else if (char === "[") {
|
|
44
|
+
let end = i + 1;
|
|
45
|
+
if (pattern[end] === "!" || pattern[end] === "^")
|
|
46
|
+
end++;
|
|
47
|
+
while (end < pattern.length && pattern[end] !== "]")
|
|
48
|
+
end++;
|
|
49
|
+
if (end >= pattern.length || end === i + 1)
|
|
50
|
+
throw new Error(`Invalid glob pattern: ${pattern}`);
|
|
51
|
+
let content = pattern.slice(i + 1, end);
|
|
52
|
+
if (content.startsWith("!"))
|
|
53
|
+
content = "^" + content.slice(1);
|
|
54
|
+
result += "[" + content.replaceAll("\\", "\\\\") + "]";
|
|
55
|
+
i = end;
|
|
56
|
+
}
|
|
57
|
+
else if (char === "\\") {
|
|
58
|
+
if (++i === pattern.length)
|
|
59
|
+
throw new Error(`Invalid glob pattern: ${pattern}`);
|
|
60
|
+
result += escapeRegex(pattern[i]);
|
|
61
|
+
}
|
|
62
|
+
else
|
|
63
|
+
result += escapeRegex(char);
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
return new RegExp(result + "$");
|
|
67
|
+
}
|
|
68
|
+
catch (cause) {
|
|
69
|
+
throw new Error(`Invalid glob pattern: ${pattern}`, { cause });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function escapeRegex(value) {
|
|
73
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
74
|
+
}
|
|
75
|
+
export async function glob(pattern) {
|
|
76
|
+
assertExecution();
|
|
77
|
+
const absolute = path(pattern);
|
|
78
|
+
const root = paths.parse(absolute).root;
|
|
79
|
+
const parts = absolute.slice(root.length).split(paths.sep).filter(Boolean);
|
|
80
|
+
const matchers = parts.map((part) => globRegex(part));
|
|
81
|
+
let candidates = [root];
|
|
82
|
+
for (let i = 0; i < parts.length; i++) {
|
|
83
|
+
const next = [];
|
|
84
|
+
for (const directory of candidates) {
|
|
85
|
+
let entries;
|
|
86
|
+
try {
|
|
87
|
+
entries = await fs.readdir(directory);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
if (isMissing(error) || error.code === "ENOTDIR")
|
|
91
|
+
continue;
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
for (const name of entries)
|
|
95
|
+
if (matchers[i].test(name))
|
|
96
|
+
next.push(paths.join(directory, name));
|
|
97
|
+
}
|
|
98
|
+
candidates = next;
|
|
99
|
+
}
|
|
100
|
+
return candidates.sort();
|
|
101
|
+
}
|
|
102
|
+
export function isMissing(error) {
|
|
103
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
104
|
+
}
|
|
105
|
+
export async function regularFiles(root, signal, skip = new Set()) {
|
|
106
|
+
if (!(await fs.stat(root)).isDirectory())
|
|
107
|
+
throw new Error(`Not a directory: ${root}`);
|
|
108
|
+
const files = [];
|
|
109
|
+
async function visit(relative) {
|
|
110
|
+
signal?.throwIfAborted();
|
|
111
|
+
const entries = await fs.readdir(paths.join(root, relative), { withFileTypes: true });
|
|
112
|
+
for (const entry of entries) {
|
|
113
|
+
const name = paths.join(relative, entry.name);
|
|
114
|
+
if (entry.isDirectory() && !skip.has(entry.name))
|
|
115
|
+
await visit(name);
|
|
116
|
+
else if (entry.isFile())
|
|
117
|
+
files.push(name.split(paths.sep).join("/"));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
await visit("");
|
|
121
|
+
return files.sort();
|
|
122
|
+
}
|
|
123
|
+
export function inputMatcher(pattern) {
|
|
124
|
+
const directory = pattern.endsWith("/");
|
|
125
|
+
const normalized = directory ? pattern.slice(0, -1) : pattern;
|
|
126
|
+
const expression = globRegex(normalized, true);
|
|
127
|
+
if (directory && !normalized.includes("/"))
|
|
128
|
+
return (file) => file
|
|
129
|
+
.split("/")
|
|
130
|
+
.slice(0, -1)
|
|
131
|
+
.some((part) => expression.test(part));
|
|
132
|
+
if (directory)
|
|
133
|
+
return (file) => file
|
|
134
|
+
.split("/")
|
|
135
|
+
.slice(0, -1)
|
|
136
|
+
.some((_, i, parts) => expression.test(parts.slice(0, i + 1).join("/")));
|
|
137
|
+
if (!pattern.includes("/"))
|
|
138
|
+
return (file) => expression.test(paths.posix.basename(file));
|
|
139
|
+
return (file) => expression.test(file);
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/helpers/files.ts"],"names":[],"mappings":"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"}
|