@sparkwing/sdk 0.0.0-stage → 0.68.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 (49) hide show
  1. package/README.md +187 -2
  2. package/dist/command.js +272 -0
  3. package/dist/command.js.map +1 -0
  4. package/dist/context.js +69 -0
  5. package/dist/context.js.map +1 -0
  6. package/dist/describe.js +70 -0
  7. package/dist/describe.js.map +1 -0
  8. package/dist/errors.js +88 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/helpers/docker.js +267 -0
  11. package/dist/helpers/docker.js.map +1 -0
  12. package/dist/helpers/files.js +141 -0
  13. package/dist/helpers/files.js.map +1 -0
  14. package/dist/helpers/git.js +263 -0
  15. package/dist/helpers/git.js.map +1 -0
  16. package/dist/helpers/memo.js +29 -0
  17. package/dist/helpers/memo.js.map +1 -0
  18. package/dist/helpers/services.js +160 -0
  19. package/dist/helpers/services.js.map +1 -0
  20. package/dist/index.js +10 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/json.js +27 -0
  23. package/dist/json.js.map +1 -0
  24. package/dist/log.js +42 -0
  25. package/dist/log.js.map +1 -0
  26. package/dist/main.js +69 -0
  27. package/dist/main.js.map +1 -0
  28. package/dist/plan-wire.js +2 -0
  29. package/dist/plan-wire.js.map +1 -0
  30. package/dist/plan.js +812 -0
  31. package/dist/plan.js.map +1 -0
  32. package/dist/protocol.js +209 -0
  33. package/dist/protocol.js.map +1 -0
  34. package/dist/routes.js +187 -0
  35. package/dist/routes.js.map +1 -0
  36. package/dist/runner.js +380 -0
  37. package/dist/runner.js.map +1 -0
  38. package/dist/scope.js +27 -0
  39. package/dist/scope.js.map +1 -0
  40. package/dist/step-state.js +53 -0
  41. package/dist/step-state.js.map +1 -0
  42. package/dist/transport.js +50 -0
  43. package/dist/transport.js.map +1 -0
  44. package/index.d.ts +390 -0
  45. package/native/win32-arm64/protocol.node +0 -0
  46. package/native/win32-arm64/verification.json +1 -0
  47. package/native/win32-x64/protocol.node +0 -0
  48. package/native/win32-x64/verification.json +1 -0
  49. package/package.json +47 -4
package/dist/runner.js ADDED
@@ -0,0 +1,380 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { argument, describe } from "./describe.js";
3
+ import { Generated, lookupPipeline, Plan } from "./plan.js";
4
+ import { Git } from "./helpers/git.js";
5
+ import { noMemo } from "./helpers/memo.js";
6
+ import { makeContext } from "./context.js";
7
+ import { decodeError, errorFields, failure, messageOf, object, string } from "./errors.js";
8
+ import { jsonOutput, jsonValue, readRequests, stringMap, validateRequest, writeReply } from "./protocol.js";
9
+ import { NodeRoutes } from "./routes.js";
10
+ import { runScope } from "./scope.js";
11
+ import { StepState } from "./step-state.js";
12
+ export async function serve(options) {
13
+ const session = new Session(options);
14
+ try {
15
+ for await (const request of readRequests(options.input))
16
+ session.answer(request);
17
+ }
18
+ finally {
19
+ await session.close();
20
+ }
21
+ }
22
+ class Session {
23
+ #options;
24
+ #frames;
25
+ #done = false;
26
+ #helloSeen = false;
27
+ #runner;
28
+ #binding;
29
+ #services;
30
+ #planSeen = false;
31
+ #planned;
32
+ #ids = new Set();
33
+ #active = new Map();
34
+ #steps = new Map();
35
+ #generated = new Map();
36
+ #generatedArguments = new Map();
37
+ #evalReady = Promise.resolve();
38
+ #originalEnv = new Map();
39
+ constructor(options) {
40
+ this.#options = options;
41
+ this.#frames = {
42
+ write: (line) => {
43
+ if (!this.#done)
44
+ options.output.write(line);
45
+ },
46
+ };
47
+ }
48
+ async close() {
49
+ this.#done = true;
50
+ for (const { controller } of this.#active.values())
51
+ controller.abort(new Error("host closed request pipe"));
52
+ await Promise.all([...this.#active.values()].map((active) => active.done));
53
+ for (const [key, value] of this.#originalEnv) {
54
+ if (value === undefined)
55
+ delete process.env[key];
56
+ else
57
+ process.env[key] = value;
58
+ }
59
+ }
60
+ answer(req) {
61
+ if (this.#ids.has(req.id))
62
+ throw failure("protocol_error", "duplicate request id");
63
+ this.#ids.add(req.id);
64
+ void this.#handle(req)
65
+ .then((result) => writeReply(this.#frames, { reply: req.id, ok: true, result }), (error) => writeReply(this.#frames, { reply: req.id, ok: false, error: errorFields(error) }))
66
+ .finally(() => {
67
+ const active = this.#active.get(req.id);
68
+ this.#active.delete(req.id);
69
+ active?.finish();
70
+ });
71
+ }
72
+ async #handle(req) {
73
+ validateRequest(req);
74
+ if (req.op === "hello")
75
+ return this.#hello(req);
76
+ if (!this.#runner)
77
+ throw failure("protocol_error", "hello must precede operations");
78
+ switch (req.op) {
79
+ case "describe":
80
+ return runScope({ phase: "plan", root: this.#root() }, () => describe(this.#run({ run_id: "describe", pipeline: "describe" }, {})));
81
+ case "plan":
82
+ return this.#plan(req);
83
+ case "run_step":
84
+ return this.#step(req);
85
+ case "eval":
86
+ return this.#eval(req);
87
+ case "cancel":
88
+ return this.#cancel(req);
89
+ }
90
+ throw failure("unknown_op", "unknown operation");
91
+ }
92
+ async #cancel(req) {
93
+ if (req.job !== undefined && req.job !== this.#binding?.job)
94
+ throw failure("protocol_error", "cancel does not match the process job binding");
95
+ const selected = [...this.#active.entries()].filter(([id, active]) => req.target === id || (req.target === undefined && active.job === req.job && (req.step === undefined || active.step === req.step)));
96
+ for (const [, active] of selected)
97
+ active.controller.abort(new Error("cancelled by host"));
98
+ await Promise.all(selected.map(([, active]) => active.done));
99
+ return {};
100
+ }
101
+ #state(job) {
102
+ let state = this.#steps.get(job);
103
+ if (!state) {
104
+ state = new StepState();
105
+ this.#steps.set(job, state);
106
+ }
107
+ return state;
108
+ }
109
+ #hello(req) {
110
+ if (this.#helloSeen)
111
+ throw failure("protocol_error", "hello occurs exactly once");
112
+ this.#helloSeen = true;
113
+ if (req.protocol !== 2)
114
+ throw failure("protocol_mismatch", "rebuild .sparkwing with the matching SDK", { supported_majors: [2] });
115
+ const runner = Object.freeze({ ...req.runner, labels: Object.freeze([...req.runner.labels]) });
116
+ if (req.binding !== undefined) {
117
+ const binding = object(req.binding, "binding");
118
+ this.#binding = { run: String(binding.run_id), job: String(binding.job_id) };
119
+ const routes = binding.routes;
120
+ this.#services = this.#options.services ? this.#options.services(routes) : new NodeRoutes(routes);
121
+ }
122
+ this.#runner = runner;
123
+ const { version } = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
124
+ return { protocol: 2, sdk: { language: "typescript", version: `v${version}` }, features: [] };
125
+ }
126
+ #root() {
127
+ return this.#options.root ?? process.cwd();
128
+ }
129
+ #run(raw, args) {
130
+ const git = raw.git === undefined ? {} : object(raw.git, "run.git");
131
+ const trigger = raw.trigger === undefined ? { source: "manual" } : object(raw.trigger, "run.trigger");
132
+ const pr = trigger.pull_request === undefined ? undefined : object(trigger.pull_request, "pull_request");
133
+ const triggerInfo = {
134
+ source: String(trigger.source),
135
+ ...(trigger.user === undefined ? {} : { user: String(trigger.user) }),
136
+ ...(pr
137
+ ? {
138
+ pullRequest: Object.freeze({
139
+ number: Number(pr.number),
140
+ ...(pr.action === undefined ? {} : { action: String(pr.action) }),
141
+ ...(pr.base_ref === undefined ? {} : { baseRef: String(pr.base_ref) }),
142
+ ...(pr.base_sha === undefined ? {} : { baseSHA: String(pr.base_sha) }),
143
+ ...(pr.head_ref === undefined ? {} : { headRef: String(pr.head_ref) }),
144
+ ...(pr.head_sha === undefined ? {} : { headSHA: String(pr.head_sha) }),
145
+ }),
146
+ }
147
+ : {}),
148
+ };
149
+ return Object.freeze({
150
+ id: String(raw.run_id),
151
+ pipeline: String(raw.pipeline),
152
+ args: Object.freeze({ ...args }),
153
+ dryRun: raw.dry_run === true,
154
+ noMemo: raw.no_memo === true,
155
+ ...(raw.started_at === undefined ? {} : { startedAt: String(raw.started_at) }),
156
+ runner: this.#runner,
157
+ trigger: Object.freeze(triggerInfo),
158
+ git: new Git(this.#root(), {
159
+ repo: String(git.repo ?? ""),
160
+ branch: String(git.branch ?? ""),
161
+ commit: String(git.sha ?? ""),
162
+ ...(git.default_branch === undefined ? {} : { defaultBranch: String(git.default_branch) }),
163
+ ...(git.repo_url === undefined ? {} : { repoURL: String(git.repo_url) }),
164
+ }),
165
+ });
166
+ }
167
+ async #plan(req) {
168
+ if (this.#planSeen)
169
+ throw failure("protocol_error", "plan occurs at most once per process");
170
+ this.#planSeen = true;
171
+ const definition = lookupPipeline(String(req.pipeline));
172
+ if (!definition)
173
+ throw failure("unknown_pipeline", "pipeline is not registered");
174
+ const rawArgs = stringMap(req.args, "args");
175
+ const plan = new Plan();
176
+ const args = { ...rawArgs };
177
+ const run = this.#run(object(req.run, "run"), args);
178
+ if (this.#binding && run.id !== this.#binding.run)
179
+ throw failure("bad_request", "plan run does not match hello binding");
180
+ await runScope({ phase: "plan", root: this.#root() }, () => definition.plan(plan, run));
181
+ const doc = plan.toDoc();
182
+ plan.seal();
183
+ this.#planned = { plan, run, definition };
184
+ return doc;
185
+ }
186
+ #current() {
187
+ if (!this.#planned)
188
+ throw failure("no_plan", "operation requires a successful plan");
189
+ return this.#planned;
190
+ }
191
+ #authorize(job, replay) {
192
+ if (!this.#binding)
193
+ throw failure("protocol_error", "execution requires a hello binding");
194
+ if (!replay && this.#binding.job !== job)
195
+ throw failure("protocol_error", "job does not match hello binding");
196
+ }
197
+ #context(req, spec, signal, step, replay = false) {
198
+ const { run, definition } = this.#current();
199
+ for (const [key, value] of this.#originalEnv) {
200
+ if (value === undefined)
201
+ delete process.env[key];
202
+ else
203
+ process.env[key] = value;
204
+ }
205
+ const env = Object.create(null);
206
+ for (const [name, value] of Object.entries(replay ? {} : (spec.env ?? {})))
207
+ if (!value.startup && !["NODE_OPTIONS", "GODEBUG", "GOMAXPROCS"].includes(name)) {
208
+ if (!this.#originalEnv.has(name))
209
+ this.#originalEnv.set(name, Object.hasOwn(process.env, name) ? process.env[name] : undefined);
210
+ process.env[name] = value.value;
211
+ env[name] = value.value;
212
+ }
213
+ let failureInfo;
214
+ if (req.failure !== undefined) {
215
+ const f = object(req.failure, "failure");
216
+ failureInfo = { job: String(f.job), stage: String(f.stage), message: decodeError(f.error).message };
217
+ }
218
+ const args = req.args === undefined ? { ...run.args } : stringMap(req.args, "args");
219
+ const outputs = this.#state(spec.id).outputs;
220
+ return makeContext({
221
+ run,
222
+ jobId: spec.id,
223
+ ...(step === undefined ? {} : { stepId: step }),
224
+ args,
225
+ signal,
226
+ frames: this.#frames,
227
+ definition,
228
+ outputs,
229
+ bodyEnv: env,
230
+ ...(failureInfo === undefined ? {} : { failure: failureInfo }),
231
+ ...(this.#services === undefined ? {} : { services: this.#services }),
232
+ });
233
+ }
234
+ #activate(id, step) {
235
+ const controller = new AbortController();
236
+ let finish;
237
+ const done = new Promise((resolve) => {
238
+ finish = resolve;
239
+ });
240
+ this.#active.set(id, { job: this.#binding.job, ...(step === undefined ? {} : { step }), controller, done, finish });
241
+ return controller.signal;
242
+ }
243
+ async #step(req) {
244
+ const { plan, run } = this.#current();
245
+ const job = plan.findJob(String(req.job));
246
+ if (!job)
247
+ throw failure("unknown_job", "job is not in this process's plan");
248
+ const step = job.findStep(String(req.step));
249
+ if (!step)
250
+ throw failure("unknown_step", "step is not in this job");
251
+ const spec = plan.toDoc().jobs.find((value) => value.id === job.id);
252
+ this.#authorize(job.id, false);
253
+ const state = this.#state(job.id);
254
+ state.begin(spec, step.id, Number(req.attempt), req.settled);
255
+ try {
256
+ const ctx = this.#context(req, spec, this.#activate(req.id, step.id), step.id);
257
+ if (run.dryRun && !step.dryRunBody && !step.toSpec().safe_without_dry_run)
258
+ throw failure("sdk_error", "step has no dry-run body");
259
+ const body = run.dryRun && step.dryRunBody ? step.dryRunBody : step.body;
260
+ ctx.signal.throwIfAborted();
261
+ const output = jsonOutput(await runScope({ phase: "execute", root: this.#root() }, () => body(ctx)));
262
+ ctx.signal.throwIfAborted();
263
+ state.outputs.set(step.id, output);
264
+ return { outcome: "success", ...(output === undefined ? {} : { output }) };
265
+ }
266
+ catch (error) {
267
+ return { outcome: "failed", error: errorFields(error) };
268
+ }
269
+ finally {
270
+ state.finish(step.id, true);
271
+ }
272
+ }
273
+ async #eval(req) {
274
+ const { plan } = this.#current();
275
+ const closure = plan.findClosure(String(req.closure));
276
+ if (!closure)
277
+ throw failure("unknown_closure", "closure is not in this process's plan");
278
+ const spec = plan.toDoc().jobs.find((value) => value.id === closure.job.id);
279
+ this.#authorize(spec.id, closure.kind === "generate");
280
+ const signal = this.#activate(req.id, closure.step?.id);
281
+ const previous = this.#evalReady;
282
+ let release;
283
+ const released = new Promise((resolve) => {
284
+ release = resolve;
285
+ });
286
+ this.#evalReady = previous.then(() => released);
287
+ let stepStarted = false;
288
+ try {
289
+ await evalTurn(previous, signal);
290
+ if (closure.step) {
291
+ this.#state(spec.id).begin(spec, closure.step.id, Number(req.attempt), req.settled);
292
+ stepStarted = true;
293
+ }
294
+ else if (req.attempt !== undefined || req.settled !== undefined)
295
+ throw failure("protocol_error", "job closure cannot carry step state");
296
+ const ctx = this.#context(req, spec, signal, closure.step?.id, closure.kind === "generate");
297
+ try {
298
+ const value = await runScope({ phase: "execute", root: this.#root() }, () => this.#call(closure, ctx, req));
299
+ return { value: jsonValue(value) ?? null, ...(closure.kind === "generate" ? { declarations_known: true, arguments: this.#generatedArguments.get(closure.id) ?? [] } : {}) };
300
+ }
301
+ catch (error) {
302
+ return {
303
+ value: null,
304
+ error: errorFields(error),
305
+ };
306
+ }
307
+ }
308
+ finally {
309
+ if (stepStarted)
310
+ this.#state(spec.id).finish(closure.step.id, false);
311
+ release();
312
+ }
313
+ }
314
+ async #call(closure, ctx, req) {
315
+ ctx.signal.throwIfAborted();
316
+ if (closure.kind === "generate") {
317
+ if (this.#generated.has(closure.id))
318
+ return structuredClone(this.#generated.get(closure.id));
319
+ const { plan } = this.#current();
320
+ const generated = new Generated(closure.generator.source, closure.id, plan);
321
+ await closure.fn(generated, req.input ?? null, ctx);
322
+ ctx.signal.throwIfAborted();
323
+ const jobs = generated.toDoc().jobs;
324
+ plan.insert(generated);
325
+ this.#generatedArguments.set(closure.id, generated.jobs().flatMap((job) => job.argSpecs().map((spec) => argument(spec, job.id))));
326
+ this.#generated.set(closure.id, jobs);
327
+ return jobs;
328
+ }
329
+ if (closure.kind === "after_run") {
330
+ const result = object(req.input, "after_run input");
331
+ if (typeof result.outcome !== "string" || !["success", "failed"].includes(result.outcome))
332
+ throw failure("bad_request", "after_run requires a valid outcome");
333
+ if ((result.outcome === "failed") !== (result.error !== undefined))
334
+ throw failure("protocol_error", "after_run outcome requires a matching error");
335
+ const finalResult = { ...result };
336
+ if (result.error !== undefined) {
337
+ const error = decodeError(result.error);
338
+ Object.assign(finalResult, {
339
+ failure: { job: ctx.jobId, stage: result.stage === "verify" ? "verify" : "action", message: error.message },
340
+ });
341
+ }
342
+ await closure.fn(ctx, finalResult);
343
+ ctx.signal.throwIfAborted();
344
+ return null;
345
+ }
346
+ const result = await closure.fn(ctx);
347
+ ctx.signal.throwIfAborted();
348
+ if (closure.kind === "skip_if") {
349
+ if (typeof result !== "boolean")
350
+ throw failure("sdk_error", "skip predicate must return a boolean");
351
+ return result;
352
+ }
353
+ if (closure.kind === "memo_key") {
354
+ if (result === noMemo)
355
+ return null;
356
+ if (result === undefined || result === "")
357
+ throw failure("sdk_error", "memo callback must return a JSON value or noMemo");
358
+ return result;
359
+ }
360
+ return null;
361
+ }
362
+ }
363
+ async function evalTurn(previous, signal) {
364
+ signal.throwIfAborted();
365
+ let abort;
366
+ try {
367
+ await Promise.race([
368
+ previous,
369
+ new Promise((_, reject) => {
370
+ abort = () => reject(signal.reason);
371
+ signal.addEventListener("abort", abort, { once: true });
372
+ }),
373
+ ]);
374
+ signal.throwIfAborted();
375
+ }
376
+ finally {
377
+ signal.removeEventListener("abort", abort);
378
+ }
379
+ }
380
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
package/dist/scope.js ADDED
@@ -0,0 +1,27 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { existsSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { NoProjectError, failure } from "./errors.js";
5
+ const current = new AsyncLocalStorage();
6
+ export function runScope(scope, fn) {
7
+ return current.run(scope, fn);
8
+ }
9
+ export function assertExecution() {
10
+ if (current.getStore()?.phase === "plan")
11
+ throw failure("plan_failed", "side effects are unavailable during planning");
12
+ }
13
+ export function projectRoot() {
14
+ const root = current.getStore()?.root;
15
+ if (root !== undefined)
16
+ return root;
17
+ let dir = process.cwd();
18
+ for (;;) {
19
+ if (existsSync(join(dir, ".sparkwing")))
20
+ return dir;
21
+ const parent = dirname(dir);
22
+ if (parent === dir)
23
+ throw new NoProjectError("no .sparkwing project found");
24
+ dir = parent;
25
+ }
26
+ }
27
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAMtD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAS,CAAC;AAC/C,MAAM,UAAU,QAAQ,CAAI,KAAY,EAAE,EAAW;IACnD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AACD,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,KAAK,MAAM;QAAE,MAAM,OAAO,CAAC,aAAa,EAAE,8CAA8C,CAAC,CAAC;AACzH,CAAC;AACD,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC;IACtC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,SAAS,CAAC;QACR,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,cAAc,CAAC,6BAA6B,CAAC,CAAC;QAC5E,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { failure } from "./errors.js";
2
+ export class StepState {
3
+ outputs = new Map();
4
+ #terminal = new Set();
5
+ #active = new Set();
6
+ #attempt = 0;
7
+ begin(job, current, attempt, settled) {
8
+ const invalid = (message) => {
9
+ throw failure("protocol_error", message);
10
+ };
11
+ if (!Number.isSafeInteger(attempt) ||
12
+ attempt < 1 ||
13
+ attempt < this.#attempt ||
14
+ !Array.isArray(settled) ||
15
+ (attempt !== this.#attempt && this.#active.size > 0) ||
16
+ this.#active.has(current))
17
+ invalid("step state is absent, stale or overlaps another attempt");
18
+ if (attempt === this.#attempt && this.#terminal.has(current))
19
+ invalid("step is already terminal in this attempt");
20
+ const steps = new Map((job.steps ?? []).map((step) => [step.id, step]));
21
+ const terminal = new Set();
22
+ for (const id of settled) {
23
+ if (!steps.has(id) || id === current || terminal.has(id) || this.#active.has(id))
24
+ invalid("settled steps contain an invalid or duplicate step");
25
+ terminal.add(id);
26
+ }
27
+ const pending = [...(steps.get(current)?.needs ?? [])];
28
+ const checked = new Set([current]);
29
+ while (pending.length > 0) {
30
+ const id = pending.pop();
31
+ if (!terminal.has(id))
32
+ invalid("step prerequisite is not settled");
33
+ if (!checked.has(id)) {
34
+ checked.add(id);
35
+ pending.push(...(steps.get(id)?.needs ?? []));
36
+ }
37
+ }
38
+ if (attempt !== this.#attempt) {
39
+ this.outputs.clear();
40
+ this.#terminal.clear();
41
+ this.#attempt = attempt;
42
+ }
43
+ for (const id of settled)
44
+ this.#terminal.add(id);
45
+ this.#active.add(current);
46
+ }
47
+ finish(step, terminal) {
48
+ if (terminal)
49
+ this.#terminal.add(step);
50
+ this.#active.delete(step);
51
+ }
52
+ }
53
+ //# sourceMappingURL=step-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-state.js","sourceRoot":"","sources":["../src/step-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { createRequire } from "node:module";
2
+ const protocolArg = "--sw-node-protocol";
3
+ const handlesArg = "--sw-protocol-handles";
4
+ export function protocolDescriptors(argv, platform = process.platform, bridge = windowsDescriptors) {
5
+ let protocol = false;
6
+ let handles;
7
+ for (let index = 0; index < argv.length; index++) {
8
+ const arg = argv[index];
9
+ if (arg === protocolArg && !protocol)
10
+ protocol = true;
11
+ else if (arg === handlesArg && handles === undefined && platform === "win32") {
12
+ handles = argv[++index];
13
+ if (handles === undefined)
14
+ throw new Error(`${handlesArg} requires request,frame handles`);
15
+ }
16
+ else
17
+ throw new Error(`unexpected protocol argument: ${arg}`);
18
+ }
19
+ if (!protocol)
20
+ throw new Error(`pipeline entry requires ${protocolArg}`);
21
+ if (platform !== "win32")
22
+ return { requestFd: 3, frameFd: 4 };
23
+ if (handles === undefined || !/^\d+,\d+$/.test(handles))
24
+ throw new Error(`${handlesArg} requires two decimal handles`);
25
+ const [request, frame] = handles.split(",").map((value) => BigInt(value));
26
+ const maximum = (1n << 64n) - 1n;
27
+ if (request === undefined ||
28
+ frame === undefined ||
29
+ request === frame ||
30
+ request <= 0n ||
31
+ frame <= 0n ||
32
+ request >= maximum ||
33
+ frame >= maximum) {
34
+ throw new Error(`${handlesArg} requires distinct valid handles`);
35
+ }
36
+ const [requestFd, frameFd] = bridge(request, frame);
37
+ return { requestFd, frameFd };
38
+ }
39
+ function windowsDescriptors(request, frame) {
40
+ const require = createRequire(import.meta.url);
41
+ let bridge;
42
+ try {
43
+ bridge = require(`../native/win32-${process.arch}/protocol.node`);
44
+ }
45
+ catch (cause) {
46
+ throw new Error(`cannot load the SDK's Windows ${process.arch} protocol bridge`, { cause });
47
+ }
48
+ return bridge.open(request, frame);
49
+ }
50
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAO5C,MAAM,WAAW,GAAG,oBAAoB,CAAC;AACzC,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAE3C,MAAM,UAAU,mBAAmB,CACjC,IAAuB,EACvB,WAA4B,OAAO,CAAC,QAAQ,EAC5C,SAAwB,kBAAkB;IAE1C,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,OAA2B,CAAC;IAChC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,WAAW,IAAI,CAAC,QAAQ;YAAE,QAAQ,GAAG,IAAI,CAAC;aACjD,IAAI,GAAG,KAAK,UAAU,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC7E,OAAO,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YACxB,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,iCAAiC,CAAC,CAAC;QAC7F,CAAC;;YAAM,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;IACzE,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC9D,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,+BAA+B,CAAC,CAAC;IACvH,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;IACjC,IACE,OAAO,KAAK,SAAS;QACrB,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,KAAK;QACjB,OAAO,IAAI,EAAE;QACb,KAAK,IAAI,EAAE;QACX,OAAO,IAAI,OAAO;QAClB,KAAK,IAAI,OAAO,EAChB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,kCAAkC,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe,EAAE,KAAa;IACxD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,OAAO,CAAC,mBAAmB,OAAO,CAAC,IAAI,gBAAgB,CAA4B,CAAC;IAC/F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,iCAAiC,OAAO,CAAC,IAAI,kBAAkB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC"}