@michaelrwalker/stagehand 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +30 -2
- package/dist/context.js.map +1 -1
- package/dist/errors.d.ts +29 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +43 -0
- package/dist/errors.js.map +1 -1
- package/dist/flags.d.ts +30 -0
- package/dist/flags.d.ts.map +1 -0
- package/dist/flags.js +79 -0
- package/dist/flags.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/script.d.ts +71 -24
- package/dist/script.d.ts.map +1 -1
- package/dist/script.js +54 -6
- package/dist/script.js.map +1 -1
- package/dist/types.d.ts +98 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/prompt.d.ts +6 -0
- package/dist/ui/prompt.d.ts.map +1 -0
- package/dist/ui/prompt.js +346 -0
- package/dist/ui/prompt.js.map +1 -0
- package/dist/ui/renderer.d.ts +12 -0
- package/dist/ui/renderer.d.ts.map +1 -1
- package/dist/ui/renderer.js +30 -0
- package/dist/ui/renderer.js.map +1 -1
- package/package.json +1 -1
package/dist/context.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export interface ContextDeps {
|
|
|
8
8
|
phaseName: string;
|
|
9
9
|
/** Backs `context.cache`; slots declared before the current step. */
|
|
10
10
|
cache: CacheHandle<Record<string, unknown>>;
|
|
11
|
+
/** Backs `context.flags`; parsed once from argv before any phase runs. */
|
|
12
|
+
flags: Record<string, unknown>;
|
|
11
13
|
}
|
|
12
14
|
export declare function createStepContext<In, Ctx>(deps: ContextDeps, input: In, ctx: Ctx, signal: AbortSignal, attempt: number): StepContext<In, Ctx>;
|
|
13
15
|
export declare function createRollbackContext<In, Ctx, Out>(deps: ContextDeps, input: In, ctx: Ctx, output: Out, error: unknown, signal: AbortSignal): RollbackContext<In, Ctx, Out>;
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAA2B,SAAS,EAAa,MAAM,YAAY,CAAC;AAEhF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAGV,eAAe,EACf,WAAW,EAGZ,MAAM,YAAY,CAAC;AA6FpB,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAgCD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,GAAG,EACvC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,EAAE,EACT,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,GACd,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,CA8BtB;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAChD,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,EAAE,EACT,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,WAAW,GAClB,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAoB/B"}
|
package/dist/context.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ScriptAbortedError } from "./errors.js";
|
|
2
|
+
import { promptConfirm, promptMultiselect, promptSelect, promptText } from "./ui/prompt.js";
|
|
1
3
|
function clamp(value, min, max) {
|
|
2
4
|
return Math.max(min, Math.min(max, value));
|
|
3
5
|
}
|
|
@@ -86,8 +88,31 @@ function annotate(step, renderer, message) {
|
|
|
86
88
|
step.note = message;
|
|
87
89
|
renderer.refresh();
|
|
88
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Suspends the live frame around each call so a prompt owns the terminal,
|
|
93
|
+
* then hands it back — resolve or reject, cancelled or not.
|
|
94
|
+
*/
|
|
95
|
+
function createPrompt(renderer, signal) {
|
|
96
|
+
const wrap = async (run) => {
|
|
97
|
+
if (signal.aborted)
|
|
98
|
+
throw signal.reason ?? new ScriptAbortedError("cancelled");
|
|
99
|
+
renderer.suspend();
|
|
100
|
+
try {
|
|
101
|
+
return await run(signal);
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
renderer.resume();
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
text: (options) => wrap((s) => promptText(options, s)),
|
|
109
|
+
confirm: (options) => wrap((s) => promptConfirm(options, s)),
|
|
110
|
+
select: (options) => wrap((s) => promptSelect(options, s)),
|
|
111
|
+
multiselect: (options) => wrap((s) => promptMultiselect(options, s)),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
89
114
|
export function createStepContext(deps, input, ctx, signal, attempt) {
|
|
90
|
-
const { renderer, step, phaseName, cache } = deps;
|
|
115
|
+
const { renderer, step, phaseName, cache, flags } = deps;
|
|
91
116
|
// `step` is a routing hint: renderers that place logs on the step itself
|
|
92
117
|
// (rather than the scrollback) need to know which one.
|
|
93
118
|
const emit = (level) => (message) => renderer.log({ level, message }, step);
|
|
@@ -97,6 +122,7 @@ export function createStepContext(deps, input, ctx, signal, attempt) {
|
|
|
97
122
|
signal,
|
|
98
123
|
attempt,
|
|
99
124
|
cache,
|
|
125
|
+
flags,
|
|
100
126
|
phase: phaseName,
|
|
101
127
|
step: step.name,
|
|
102
128
|
log: emit("log"),
|
|
@@ -112,10 +138,11 @@ export function createStepContext(deps, input, ctx, signal, attempt) {
|
|
|
112
138
|
progress: (options) => createProgress(step, renderer, options),
|
|
113
139
|
task: (label) => createTask(step, renderer, label),
|
|
114
140
|
tasks: (labels) => createTaskList(step, renderer, labels),
|
|
141
|
+
prompt: createPrompt(renderer, signal),
|
|
115
142
|
};
|
|
116
143
|
}
|
|
117
144
|
export function createRollbackContext(deps, input, ctx, output, error, signal) {
|
|
118
|
-
const { renderer, step, phaseName, cache } = deps;
|
|
145
|
+
const { renderer, step, phaseName, cache, flags } = deps;
|
|
119
146
|
return {
|
|
120
147
|
input,
|
|
121
148
|
ctx,
|
|
@@ -123,6 +150,7 @@ export function createRollbackContext(deps, input, ctx, output, error, signal) {
|
|
|
123
150
|
error,
|
|
124
151
|
signal,
|
|
125
152
|
cache,
|
|
153
|
+
flags,
|
|
126
154
|
phase: phaseName,
|
|
127
155
|
step: step.name,
|
|
128
156
|
log: (message) => renderer.log({ level: "warn", message }, step),
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -23,9 +23,9 @@ export declare class StepDefinitionError extends Error {
|
|
|
23
23
|
* failure — so it is refused up front.
|
|
24
24
|
*/
|
|
25
25
|
export declare class DuplicateNameError extends Error {
|
|
26
|
-
readonly kind: "phase" | "step";
|
|
26
|
+
readonly kind: "phase" | "step" | "flag";
|
|
27
27
|
readonly duplicate: string;
|
|
28
|
-
constructor(kind: "phase" | "step", duplicate: string, message: string);
|
|
28
|
+
constructor(kind: "phase" | "step" | "flag", duplicate: string, message: string);
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
31
|
* A cached value was read for a field it does not have.
|
|
@@ -65,5 +65,32 @@ export declare class RollbackFailedError extends Error {
|
|
|
65
65
|
readonly rollbackError: unknown;
|
|
66
66
|
constructor(phase: string, step: string, rollbackError: unknown, cause: unknown);
|
|
67
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* `run()` saw `--foo` or `-f` on the command line, but no `defineFlag` call
|
|
70
|
+
* named it. Thrown before any phase executes, the same as a bad `defineInput`
|
|
71
|
+
* schema — parsing happens once, up front.
|
|
72
|
+
*/
|
|
73
|
+
export declare class UnknownFlagError extends Error {
|
|
74
|
+
readonly flag: string;
|
|
75
|
+
constructor(flag: string, known: readonly string[]);
|
|
76
|
+
}
|
|
77
|
+
/** A non-boolean flag was given with nothing after it — `--env` with no value. */
|
|
78
|
+
export declare class MissingFlagValueError extends Error {
|
|
79
|
+
readonly flag: string;
|
|
80
|
+
constructor(flag: string);
|
|
81
|
+
}
|
|
82
|
+
/** A `context.prompt` call was cancelled — Ctrl-C while waiting on input. */
|
|
83
|
+
export declare class PromptCancelledError extends Error {
|
|
84
|
+
constructor();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* A step called `context.prompt` but stdin isn't an interactive terminal —
|
|
88
|
+
* CI, a pipe, a non-TTY subprocess — and the prompt declared no `default` to
|
|
89
|
+
* fall back to. Thrown instead of hanging on a stream nothing will ever
|
|
90
|
+
* write to.
|
|
91
|
+
*/
|
|
92
|
+
export declare class PromptUnavailableError extends Error {
|
|
93
|
+
constructor(message: string);
|
|
94
|
+
}
|
|
68
95
|
export declare function isAbort(error: unknown): boolean;
|
|
69
96
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,oFAAoF;AACpF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAE3C,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC;CAgB1D;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,oFAAoF;AACpF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAE3C,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC;CAgB1D;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAMhF;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAWvC;AAED,wEAAwE;AACxE,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAO1E;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAM5C;AAED,4EAA4E;AAC5E,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM;CAK3B;AAED,+EAA+E;AAC/E,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;gBAEpB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;CAOhF;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE;CAQnD;AAED,kFAAkF;AAClF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM;CAKzB;AAED,6EAA6E;AAC7E,qBAAa,oBAAqB,SAAQ,KAAK;;CAK9C;AAED;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM/C"}
|
package/dist/errors.js
CHANGED
|
@@ -113,8 +113,51 @@ export class RollbackFailedError extends Error {
|
|
|
113
113
|
this.rollbackError = rollbackError;
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* `run()` saw `--foo` or `-f` on the command line, but no `defineFlag` call
|
|
118
|
+
* named it. Thrown before any phase executes, the same as a bad `defineInput`
|
|
119
|
+
* schema — parsing happens once, up front.
|
|
120
|
+
*/
|
|
121
|
+
export class UnknownFlagError extends Error {
|
|
122
|
+
flag;
|
|
123
|
+
constructor(flag, known) {
|
|
124
|
+
super(`Unknown flag "${flag}". ` +
|
|
125
|
+
(known.length > 0 ? `Declared flags: ${known.join(", ")}.` : "This script declares no flags."));
|
|
126
|
+
this.name = "UnknownFlagError";
|
|
127
|
+
this.flag = flag;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/** A non-boolean flag was given with nothing after it — `--env` with no value. */
|
|
131
|
+
export class MissingFlagValueError extends Error {
|
|
132
|
+
flag;
|
|
133
|
+
constructor(flag) {
|
|
134
|
+
super(`Flag "${flag}" expects a value ("${flag} <value>" or "${flag}=<value>"), but none was given.`);
|
|
135
|
+
this.name = "MissingFlagValueError";
|
|
136
|
+
this.flag = flag;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/** A `context.prompt` call was cancelled — Ctrl-C while waiting on input. */
|
|
140
|
+
export class PromptCancelledError extends Error {
|
|
141
|
+
constructor() {
|
|
142
|
+
super("Prompt cancelled");
|
|
143
|
+
this.name = "PromptCancelledError";
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* A step called `context.prompt` but stdin isn't an interactive terminal —
|
|
148
|
+
* CI, a pipe, a non-TTY subprocess — and the prompt declared no `default` to
|
|
149
|
+
* fall back to. Thrown instead of hanging on a stream nothing will ever
|
|
150
|
+
* write to.
|
|
151
|
+
*/
|
|
152
|
+
export class PromptUnavailableError extends Error {
|
|
153
|
+
constructor(message) {
|
|
154
|
+
super(message);
|
|
155
|
+
this.name = "PromptUnavailableError";
|
|
156
|
+
}
|
|
157
|
+
}
|
|
116
158
|
export function isAbort(error) {
|
|
117
159
|
return (error instanceof ScriptAbortedError ||
|
|
160
|
+
error instanceof PromptCancelledError ||
|
|
118
161
|
(error instanceof Error && error.name === "AbortError"));
|
|
119
162
|
}
|
|
120
163
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,MAAM,CAAwC;IAEvD,YAAY,MAA6C;QACvD,KAAK,CACH,MAAM;aACH,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;gBACrB,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAChB,MAAM,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAChF;iBACA,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5D,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAAS;IAEtB,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/flags.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** Recorded by `defineFlag`; type-erased, the same way step/phase defs are. */
|
|
2
|
+
export interface FlagDef {
|
|
3
|
+
name: string;
|
|
4
|
+
long: string;
|
|
5
|
+
short?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
boolean: boolean;
|
|
8
|
+
hasDefault: boolean;
|
|
9
|
+
default: unknown;
|
|
10
|
+
}
|
|
11
|
+
/** `"dryRun"` -> `"dry-run"`. Already-kebab input passes through unchanged. */
|
|
12
|
+
export declare function kebabCase(name: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Parses `argv` (already stripped of the node binary and script path — i.e.
|
|
15
|
+
* `process.argv.slice(2)`) against the flags a script declared.
|
|
16
|
+
*
|
|
17
|
+
* `--flag value`, `--flag=value`, and `-f value` are all understood. A
|
|
18
|
+
* boolean flag never consumes the next token: its bare presence is `true`
|
|
19
|
+
* (`--flag=false` is honoured too, for the rare case of overriding a
|
|
20
|
+
* `default: true`).
|
|
21
|
+
*
|
|
22
|
+
* Every other token — anything not starting with `-`, or a bare `-` — is a
|
|
23
|
+
* positional argument and is silently ignored; this parser only cares about
|
|
24
|
+
* the flags it was told to look for.
|
|
25
|
+
*
|
|
26
|
+
* @throws {UnknownFlagError} for a `--foo`/`-f` this script never declared.
|
|
27
|
+
* @throws {MissingFlagValueError} for a non-boolean flag with nothing after it.
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseFlags(argv: readonly string[], defs: readonly FlagDef[]): Record<string, unknown>;
|
|
30
|
+
//# sourceMappingURL=flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"AAMA,+EAA+E;AAC/E,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuDrG"}
|
package/dist/flags.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command-line flag parsing for `Script.defineFlag` / `context.flags`.
|
|
3
|
+
* No dependency — a whitelist-driven pass over argv, nothing more.
|
|
4
|
+
*/
|
|
5
|
+
import { MissingFlagValueError, UnknownFlagError } from "./errors.js";
|
|
6
|
+
/** `"dryRun"` -> `"dry-run"`. Already-kebab input passes through unchanged. */
|
|
7
|
+
export function kebabCase(name) {
|
|
8
|
+
return name.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Parses `argv` (already stripped of the node binary and script path — i.e.
|
|
12
|
+
* `process.argv.slice(2)`) against the flags a script declared.
|
|
13
|
+
*
|
|
14
|
+
* `--flag value`, `--flag=value`, and `-f value` are all understood. A
|
|
15
|
+
* boolean flag never consumes the next token: its bare presence is `true`
|
|
16
|
+
* (`--flag=false` is honoured too, for the rare case of overriding a
|
|
17
|
+
* `default: true`).
|
|
18
|
+
*
|
|
19
|
+
* Every other token — anything not starting with `-`, or a bare `-` — is a
|
|
20
|
+
* positional argument and is silently ignored; this parser only cares about
|
|
21
|
+
* the flags it was told to look for.
|
|
22
|
+
*
|
|
23
|
+
* @throws {UnknownFlagError} for a `--foo`/`-f` this script never declared.
|
|
24
|
+
* @throws {MissingFlagValueError} for a non-boolean flag with nothing after it.
|
|
25
|
+
*/
|
|
26
|
+
export function parseFlags(argv, defs) {
|
|
27
|
+
const byLong = new Map(defs.map((def) => [def.long, def]));
|
|
28
|
+
const byShort = new Map(defs.filter((def) => def.short !== undefined).map((def) => [def.short, def]));
|
|
29
|
+
const result = {};
|
|
30
|
+
for (const def of defs) {
|
|
31
|
+
if (def.hasDefault)
|
|
32
|
+
result[def.name] = def.default;
|
|
33
|
+
else if (def.boolean)
|
|
34
|
+
result[def.name] = false;
|
|
35
|
+
}
|
|
36
|
+
let i = 0;
|
|
37
|
+
while (i < argv.length) {
|
|
38
|
+
const token = argv[i];
|
|
39
|
+
i += 1;
|
|
40
|
+
let def;
|
|
41
|
+
let inlineValue;
|
|
42
|
+
let label;
|
|
43
|
+
if (token.startsWith("--")) {
|
|
44
|
+
const body = token.slice(2);
|
|
45
|
+
const eq = body.indexOf("=");
|
|
46
|
+
const key = eq === -1 ? body : body.slice(0, eq);
|
|
47
|
+
inlineValue = eq === -1 ? undefined : body.slice(eq + 1);
|
|
48
|
+
label = `--${key}`;
|
|
49
|
+
def = byLong.get(key);
|
|
50
|
+
if (!def)
|
|
51
|
+
throw new UnknownFlagError(label, [...byLong.keys()].map((long) => `--${long}`));
|
|
52
|
+
}
|
|
53
|
+
else if (token.startsWith("-") && token.length > 1) {
|
|
54
|
+
const key = token.slice(1);
|
|
55
|
+
label = `-${key}`;
|
|
56
|
+
def = byShort.get(key);
|
|
57
|
+
if (!def)
|
|
58
|
+
throw new UnknownFlagError(label, [...byShort.keys()].map((short) => `-${short}`));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (def.boolean) {
|
|
64
|
+
result[def.name] = inlineValue === undefined ? true : inlineValue !== "false";
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (inlineValue !== undefined) {
|
|
68
|
+
result[def.name] = inlineValue;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const next = argv[i];
|
|
72
|
+
if (next === undefined)
|
|
73
|
+
throw new MissingFlagValueError(label);
|
|
74
|
+
result[def.name] = next;
|
|
75
|
+
i += 1;
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../src/flags.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { Script, script, stepFor, routineFor, type CachedPhaseOptions, type ClosedPhase, type Commit, type MountInput, type MountOptions, type Mounted, type OpenPhase, type Routine, type RunOptions, } from "./script.js";
|
|
2
2
|
export { fileStore, memoryStore } from "./cache.js";
|
|
3
|
-
export { CacheShapeError, DuplicateNameError, RollbackFailedError, SchemaValidationError, ScriptAbortedError, StepDefinitionError, StepFailedError, StepTimeoutError, isAbort, } from "./errors.js";
|
|
4
|
-
export type { Awaitable, CacheHandle, CacheMode, CacheOptions, CacheSource, CacheStore, CachedEntry, CleanField, Cleaned, LogPlacement, Merge, PhaseOptions, PhaseStatus, Prettify, ProgressHandle, RetryPolicy, RollbackContext, RollbackData, RollbackReport, RunResult, RunStatus, ScriptOptions, SlotValue, StaleContext, StepContext, StepDef, InheritedKeyStepDef, StepReport, StepStatus, TaskHandle, TaskListHandle, UnknownSlots, WithStepFor, } from "./types.js";
|
|
3
|
+
export { CacheShapeError, DuplicateNameError, MissingFlagValueError, PromptCancelledError, PromptUnavailableError, RollbackFailedError, SchemaValidationError, ScriptAbortedError, StepDefinitionError, StepFailedError, StepTimeoutError, UnknownFlagError, isAbort, } from "./errors.js";
|
|
4
|
+
export type { Awaitable, BaseFlagOptions, BooleanFlagOptions, CacheHandle, CacheMode, CacheOptions, CacheSource, CacheStore, CachedEntry, CleanField, Cleaned, ConfirmPromptOptions, LogPlacement, Merge, MultiSelectPromptOptions, PhaseOptions, PhaseStatus, Prettify, ProgressHandle, PromptChoice, PromptHandle, RetryPolicy, RollbackContext, RollbackData, RollbackReport, RunResult, RunStatus, ScriptOptions, SelectPromptOptions, SlotValue, StaleContext, StepContext, StepDef, InheritedKeyStepDef, StepReport, StepStatus, StringFlagOptions, TaskHandle, TaskListHandle, TextPromptOptions, UnknownFlags, UnknownSlots, WithStepFor, } from "./types.js";
|
|
5
5
|
export { formatDuration } from "./state.js";
|
|
6
6
|
export { setColorEnabled, isColorEnabled } from "./ui/ansi.js";
|
|
7
7
|
export { palette, symbols } from "./ui/theme.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,OAAO,GACR,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,OAAO,EACP,YAAY,EACZ,KAAK,EACL,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,EACZ,cAAc,EACd,SAAS,EACT,SAAS,EACT,aAAa,EACb,SAAS,EACT,YAAY,EACZ,WAAW,EACX,OAAO,EACP,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,GACR,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,OAAO,EACP,oBAAoB,EACpB,YAAY,EACZ,KAAK,EACL,wBAAwB,EACxB,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EACf,YAAY,EACZ,cAAc,EACd,SAAS,EACT,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,YAAY,EACZ,WAAW,EACX,OAAO,EACP,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { Script, script, stepFor, routineFor, } from "./script.js";
|
|
2
2
|
export { fileStore, memoryStore } from "./cache.js";
|
|
3
|
-
export { CacheShapeError, DuplicateNameError, RollbackFailedError, SchemaValidationError, ScriptAbortedError, StepDefinitionError, StepFailedError, StepTimeoutError, isAbort, } from "./errors.js";
|
|
3
|
+
export { CacheShapeError, DuplicateNameError, MissingFlagValueError, PromptCancelledError, PromptUnavailableError, RollbackFailedError, SchemaValidationError, ScriptAbortedError, StepDefinitionError, StepFailedError, StepTimeoutError, UnknownFlagError, isAbort, } from "./errors.js";
|
|
4
4
|
export { formatDuration } from "./state.js";
|
|
5
5
|
export { setColorEnabled, isColorEnabled } from "./ui/ansi.js";
|
|
6
6
|
export { palette, symbols } from "./ui/theme.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,GAUX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,OAAO,GACR,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,GAUX,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,GACR,MAAM,aAAa,CAAC;AAgDrB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/script.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
-
import type { Awaitable, CacheMode, CacheSource, CleanField, Cleaned, Merge, PhaseOptions, RunResult, ScriptOptions, SlotValue, StepDef, UnknownSlots, InheritedKeyStepDef } from "./types.js";
|
|
2
|
+
import type { Awaitable, BooleanFlagOptions, CacheMode, CacheSource, CleanField, Cleaned, Merge, PhaseOptions, RunResult, ScriptOptions, SlotValue, StepDef, StringFlagOptions, UnknownFlags, UnknownSlots, InheritedKeyStepDef } from "./types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Keys for the phantom markers on {@link Script} and {@link Routine}. Exported
|
|
5
5
|
* only because declaration emit has to name them; there is no runtime value
|
|
@@ -98,6 +98,12 @@ export interface RunOptions {
|
|
|
98
98
|
* to control caching without touching the script.
|
|
99
99
|
*/
|
|
100
100
|
cache?: CacheMode;
|
|
101
|
+
/**
|
|
102
|
+
* Argv to parse `defineFlag`'s flags out of. Default `process.argv.slice(2)`
|
|
103
|
+
* — override it in a test, or when this script is one subcommand of a
|
|
104
|
+
* larger CLI that has already sliced its own argv apart.
|
|
105
|
+
*/
|
|
106
|
+
argv?: readonly string[];
|
|
101
107
|
}
|
|
102
108
|
/**
|
|
103
109
|
* A saga-style script: phases of steps, each step optionally compensating when
|
|
@@ -126,7 +132,7 @@ export interface RunOptions {
|
|
|
126
132
|
* The third parameter is inferred too: it collects the keys steps reserved
|
|
127
133
|
* through `rollbackKeys`, which is how `clean` knows what it may not remove.
|
|
128
134
|
*/
|
|
129
|
-
export declare class Script<In = void, Ctx extends object = {}, Reserved extends PropertyKey = never, Slots = {}, Open extends OpenPhase = ClosedPhase> {
|
|
135
|
+
export declare class Script<In = void, Ctx extends object = {}, Reserved extends PropertyKey = never, Slots = {}, Open extends OpenPhase = ClosedPhase, Flags extends object = {}> {
|
|
130
136
|
/**
|
|
131
137
|
* Phantom, erased at compile time. `run` is a *method*, so its parameter
|
|
132
138
|
* compares bivariantly and `In` would otherwise carry no safety across two
|
|
@@ -142,6 +148,10 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
|
|
|
142
148
|
/** False right after `use()`, so a bare `addStep` cannot land in a fragment. */
|
|
143
149
|
private openPhase;
|
|
144
150
|
private _schema;
|
|
151
|
+
private readonly flagDefs;
|
|
152
|
+
private readonly flagNames;
|
|
153
|
+
private readonly flagLongs;
|
|
154
|
+
private readonly flagShorts;
|
|
145
155
|
constructor(options?: ScriptOptions | string);
|
|
146
156
|
/**
|
|
147
157
|
* Provide a [Standard Schema](https://standardschema.dev) describing the run
|
|
@@ -163,9 +173,46 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
|
|
|
163
173
|
* });
|
|
164
174
|
* ```
|
|
165
175
|
*/
|
|
166
|
-
defineInput<TSchema>(schema: StandardSchemaV1<unknown, TSchema>): Script<TSchema, Ctx, Reserved>;
|
|
176
|
+
defineInput<TSchema>(schema: StandardSchemaV1<unknown, TSchema>): Script<TSchema, Ctx, Reserved, {}, ClosedPhase, Flags>;
|
|
167
177
|
/** Validate `input` against the schema from `defineInput`, if any. */
|
|
168
178
|
private validateInput;
|
|
179
|
+
/**
|
|
180
|
+
* Declare a flag this script reads off the command line. `name` is both the
|
|
181
|
+
* property `context.flags` exposes it under and — kebab-cased — the default
|
|
182
|
+
* long `--` form; `short` adds a single-letter `-` alias, and `long`
|
|
183
|
+
* overrides the derived one when it should read differently from `name`.
|
|
184
|
+
*
|
|
185
|
+
* A `boolean: true` flag is present or absent (`myScript --force`) and
|
|
186
|
+
* always resolves to a `boolean`, defaulting to `false` unless
|
|
187
|
+
* `default: true`. Anything else is a string: `myScript --env prod` or
|
|
188
|
+
* `myScript -e prod`, resolving to `string` when a `default` is given, or
|
|
189
|
+
* `string | undefined` otherwise. Values are parsed from `process.argv`
|
|
190
|
+
* (or `run(input, { argv })`) once, before any phase executes.
|
|
191
|
+
*
|
|
192
|
+
* ```ts
|
|
193
|
+
* new Script({ name: "deploy" })
|
|
194
|
+
* .defineFlag({ name: "environment", long: "env", short: "e", default: "staging" })
|
|
195
|
+
* .defineFlag({ name: "force", short: "f", boolean: true })
|
|
196
|
+
* .addStep({
|
|
197
|
+
* name: "deploy",
|
|
198
|
+
* // flags.environment: string, flags.force: boolean
|
|
199
|
+
* handler: async ({ flags }) => { ... },
|
|
200
|
+
* });
|
|
201
|
+
* ```
|
|
202
|
+
*
|
|
203
|
+
* @throws {DuplicateNameError} if `name`, the resolved long flag, or `short`
|
|
204
|
+
* is already used by another flag on this script.
|
|
205
|
+
*/
|
|
206
|
+
defineFlag<const Name extends string>(options: BooleanFlagOptions<Name>): Script<In, Ctx, Reserved, Slots, Open, Flags & Record<Name, boolean>>;
|
|
207
|
+
defineFlag<const Name extends string, const Default extends string | undefined = undefined>(options: StringFlagOptions<Name, Default>): Script<In, Ctx, Reserved, Slots, Open, Flags & Record<Name, Default extends string ? string : string | undefined>>;
|
|
208
|
+
/**
|
|
209
|
+
* Flag identities have to be unique the same way phase and step names do —
|
|
210
|
+
* `name` is the property key on `context.flags`, and the long/short forms
|
|
211
|
+
* are what argv is matched against.
|
|
212
|
+
*/
|
|
213
|
+
private claimFlagIdentity;
|
|
214
|
+
/** Parse `argv` against this script's declared flags — `{}` when none are. */
|
|
215
|
+
private resolveFlags;
|
|
169
216
|
/**
|
|
170
217
|
* Open a cached phase. Its name becomes a slot addressable through
|
|
171
218
|
* `context.cache` in every step declared after it — typed as the phase's own
|
|
@@ -176,17 +223,17 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
|
|
|
176
223
|
phase: Name;
|
|
177
224
|
schema: Value;
|
|
178
225
|
delta: {};
|
|
179
|
-
}>;
|
|
226
|
+
}, Flags>;
|
|
180
227
|
/** Open a new phase. Subsequent `addStep` calls land in it. */
|
|
181
228
|
addPhase<const Name extends string>(name: Name, options?: PhaseOptions<In, Ctx>): Script<In, Ctx, Reserved, Commit<Slots, Open>, {
|
|
182
229
|
name: never;
|
|
183
230
|
phase: Name;
|
|
184
231
|
schema: unknown;
|
|
185
232
|
delta: {};
|
|
186
|
-
}>;
|
|
233
|
+
}, Flags>;
|
|
187
234
|
/** Open a phase and populate it inside a callback, keeping the type flow. */
|
|
188
|
-
addPhase<Next extends object, NextReserved extends PropertyKey, NextSlots, NextOpen extends OpenPhase>(name: string, build: (script: Script<In, Ctx, Reserved, Commit<Slots, Open>, ClosedPhase>) => Script<In, Next, NextReserved, NextSlots, NextOpen>): Script<In, Next, NextReserved, NextSlots, NextOpen>;
|
|
189
|
-
addPhase<Next extends object, NextReserved extends PropertyKey, NextSlots, NextOpen extends OpenPhase>(name: string, options: PhaseOptions<In, Ctx>, build: (script: Script<In, Ctx, Reserved, Commit<Slots, Open>, ClosedPhase>) => Script<In, Next, NextReserved, NextSlots, NextOpen>): Script<In, Next, NextReserved, NextSlots, NextOpen>;
|
|
235
|
+
addPhase<Next extends object, NextReserved extends PropertyKey, NextSlots, NextOpen extends OpenPhase, NextFlags extends object>(name: string, build: (script: Script<In, Ctx, Reserved, Commit<Slots, Open>, ClosedPhase, Flags>) => Script<In, Next, NextReserved, NextSlots, NextOpen, NextFlags>): Script<In, Next, NextReserved, NextSlots, NextOpen, NextFlags>;
|
|
236
|
+
addPhase<Next extends object, NextReserved extends PropertyKey, NextSlots, NextOpen extends OpenPhase, NextFlags extends object>(name: string, options: PhaseOptions<In, Ctx>, build: (script: Script<In, Ctx, Reserved, Commit<Slots, Open>, ClosedPhase, Flags>) => Script<In, Next, NextReserved, NextSlots, NextOpen, NextFlags>): Script<In, Next, NextReserved, NextSlots, NextOpen, NextFlags>;
|
|
190
237
|
/**
|
|
191
238
|
* Append a step to the current phase. Whatever the handler resolves to is
|
|
192
239
|
* merged into the context and becomes visible to every later step; whatever
|
|
@@ -212,7 +259,7 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
|
|
|
212
259
|
* step's `rollbackKeys`.
|
|
213
260
|
*/
|
|
214
261
|
/** Cached, `rollbackKeys` inherited. See {@link InheritedKeyStepDef}. */
|
|
215
|
-
addStep<Out extends object | void = void, const Name extends string = string, const RollbackKeys extends readonly (keyof Ctx)[] = readonly [], const CleanKeys extends readonly PropertyKey[] = readonly []>(def: Omit<InheritedKeyStepDef<In, Ctx, Out, RollbackKeys, Slots>, "name"> & CleanField<Ctx, Reserved, CleanKeys> & {
|
|
262
|
+
addStep<Out extends object | void = void, const Name extends string = string, const RollbackKeys extends readonly (keyof Ctx)[] = readonly [], const CleanKeys extends readonly PropertyKey[] = readonly []>(def: Omit<InheritedKeyStepDef<In, Ctx, Out, RollbackKeys, Slots, Flags>, "name"> & CleanField<Ctx, Reserved, CleanKeys> & {
|
|
216
263
|
name: Name;
|
|
217
264
|
cache: CacheSource<In, Ctx>;
|
|
218
265
|
}): Script<In, Cleaned<Merge<Ctx, Out>, CleanKeys[number]>, Reserved | RollbackKeys[number], Slots & Record<`${Open["phase"]}::${Name}`, Out>, {
|
|
@@ -220,16 +267,16 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
|
|
|
220
267
|
phase: Open["phase"];
|
|
221
268
|
schema: Open["schema"];
|
|
222
269
|
delta: Cleaned<Merge<Open["delta"], Out>, CleanKeys[number]>;
|
|
223
|
-
}>;
|
|
270
|
+
}, Flags>;
|
|
224
271
|
/** Plain, `rollbackKeys` inherited. See {@link InheritedKeyStepDef}. */
|
|
225
|
-
addStep<Out extends object | void = void, const RollbackKeys extends readonly (keyof Ctx)[] = readonly [], const CleanKeys extends readonly PropertyKey[] = readonly []>(def: InheritedKeyStepDef<In, Ctx, Out, RollbackKeys, Slots> & CleanField<Ctx, Reserved, CleanKeys>): Script<In, Cleaned<Merge<Ctx, Out>, CleanKeys[number]>, Reserved | RollbackKeys[number], Slots, {
|
|
272
|
+
addStep<Out extends object | void = void, const RollbackKeys extends readonly (keyof Ctx)[] = readonly [], const CleanKeys extends readonly PropertyKey[] = readonly []>(def: InheritedKeyStepDef<In, Ctx, Out, RollbackKeys, Slots, Flags> & CleanField<Ctx, Reserved, CleanKeys>): Script<In, Cleaned<Merge<Ctx, Out>, CleanKeys[number]>, Reserved | RollbackKeys[number], Slots, {
|
|
226
273
|
name: Open["name"];
|
|
227
274
|
phase: Open["phase"];
|
|
228
275
|
schema: Open["schema"];
|
|
229
276
|
delta: Cleaned<Merge<Open["delta"], Out>, CleanKeys[number]>;
|
|
230
|
-
}>;
|
|
277
|
+
}, Flags>;
|
|
231
278
|
/** Cached, general form. See {@link StepDef}. */
|
|
232
|
-
addStep<Out extends object | void, const Name extends string, const RollbackKeys extends readonly PropertyKey[] = readonly [], const CleanKeys extends readonly PropertyKey[] = readonly []>(def: Omit<StepDef<In, Ctx, Out, RollbackKeys, Slots>, "name"> & CleanField<Ctx, Reserved, CleanKeys> & {
|
|
279
|
+
addStep<Out extends object | void, const Name extends string, const RollbackKeys extends readonly PropertyKey[] = readonly [], const CleanKeys extends readonly PropertyKey[] = readonly []>(def: Omit<StepDef<In, Ctx, Out, RollbackKeys, Slots, Flags>, "name"> & CleanField<Ctx, Reserved, CleanKeys> & {
|
|
233
280
|
name: Name;
|
|
234
281
|
cache: CacheSource<In, Ctx>;
|
|
235
282
|
}): Script<In, Cleaned<Merge<Ctx, Out>, CleanKeys[number]>, Reserved | RollbackKeys[number], Slots & Record<`${Open["phase"]}::${Name}`, Out>, {
|
|
@@ -237,14 +284,14 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
|
|
|
237
284
|
phase: Open["phase"];
|
|
238
285
|
schema: Open["schema"];
|
|
239
286
|
delta: Cleaned<Merge<Open["delta"], Out>, CleanKeys[number]>;
|
|
240
|
-
}>;
|
|
287
|
+
}, Flags>;
|
|
241
288
|
/** Plain, general form. See {@link StepDef}. */
|
|
242
|
-
addStep<Out extends object | void, const RollbackKeys extends readonly PropertyKey[] = readonly [], const CleanKeys extends readonly PropertyKey[] = readonly []>(def: StepDef<In, Ctx, Out, RollbackKeys, Slots> & CleanField<Ctx, Reserved, CleanKeys>): Script<In, Cleaned<Merge<Ctx, Out>, CleanKeys[number]>, Reserved | RollbackKeys[number], Slots, {
|
|
289
|
+
addStep<Out extends object | void, const RollbackKeys extends readonly PropertyKey[] = readonly [], const CleanKeys extends readonly PropertyKey[] = readonly []>(def: StepDef<In, Ctx, Out, RollbackKeys, Slots, Flags> & CleanField<Ctx, Reserved, CleanKeys>): Script<In, Cleaned<Merge<Ctx, Out>, CleanKeys[number]>, Reserved | RollbackKeys[number], Slots, {
|
|
243
290
|
name: Open["name"];
|
|
244
291
|
phase: Open["phase"];
|
|
245
292
|
schema: Open["schema"];
|
|
246
293
|
delta: Cleaned<Merge<Open["delta"], Out>, CleanKeys[number]>;
|
|
247
|
-
}>;
|
|
294
|
+
}, Flags>;
|
|
248
295
|
/**
|
|
249
296
|
* Splice a reusable fragment into this script. Its phases land here in
|
|
250
297
|
* order, and everything it produced is merged into the context — so the
|
|
@@ -274,17 +321,17 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
|
|
|
274
321
|
use<SubIn, Out extends object, R extends PropertyKey, RS, const As extends string | undefined = undefined>(routine: Routine<SubIn, Ctx, Out, R, RS>, options: {
|
|
275
322
|
as?: As;
|
|
276
323
|
input: MountInput<In, Ctx, SubIn>;
|
|
277
|
-
}): Script<In, Merge<Ctx, Out>, Reserved | R, Commit<Slots, Open> & Mounted<As, RS>, ClosedPhase>;
|
|
278
|
-
use<SubIn, Out extends object, R extends PropertyKey, SS, SO extends OpenPhase, const As extends string | undefined = undefined>(script: Script<SubIn, Out, R, SS, SO>, options: {
|
|
324
|
+
}): Script<In, Merge<Ctx, Out>, Reserved | R, Commit<Slots, Open> & Mounted<As, RS>, ClosedPhase, Flags>;
|
|
325
|
+
use<SubIn, Out extends object, R extends PropertyKey, SS, SO extends OpenPhase, MF extends object, const As extends string | undefined = undefined>(script: Script<SubIn, Out, R, SS, SO, MF>, options: {
|
|
279
326
|
as?: As;
|
|
280
327
|
input: MountInput<In, Ctx, SubIn>;
|
|
281
|
-
}): Script<In, Merge<Ctx, Out>, Reserved | R, Commit<Slots, Open> & Mounted<As, Commit<SS, SO>>, ClosedPhase>;
|
|
282
|
-
use<Out extends object, R extends PropertyKey, SS, SO extends OpenPhase, const As extends string | undefined = undefined>(script: Script<In, Out, R, SS, SO>, options?: {
|
|
328
|
+
}): Script<In, Merge<Ctx, Out>, Reserved | R, Commit<Slots, Open> & Mounted<As, Commit<SS, SO>>, ClosedPhase, Flags>;
|
|
329
|
+
use<Out extends object, R extends PropertyKey, SS, SO extends OpenPhase, MF extends object, const As extends string | undefined = undefined>(script: Script<In, Out, R, SS, SO, MF>, options?: {
|
|
283
330
|
as?: As;
|
|
284
|
-
}): Script<In, Merge<Ctx, Out>, Reserved | R, Commit<Slots, Open> & Mounted<As, Commit<SS, SO>>, ClosedPhase>;
|
|
331
|
+
}): Script<In, Merge<Ctx, Out>, Reserved | R, Commit<Slots, Open> & Mounted<As, Commit<SS, SO>>, ClosedPhase, Flags>;
|
|
285
332
|
use<Out extends object, R extends PropertyKey, RS, const As extends string | undefined = undefined>(routine: Routine<In, Ctx, Out, R, RS>, options?: {
|
|
286
333
|
as?: As;
|
|
287
|
-
}): Script<In, Merge<Ctx, Out>, Reserved | R, Commit<Slots, Open> & Mounted<As, RS>, ClosedPhase>;
|
|
334
|
+
}): Script<In, Merge<Ctx, Out>, Reserved | R, Commit<Slots, Open> & Mounted<As, RS>, ClosedPhase, Flags>;
|
|
288
335
|
/** Every step name, in execution order — handy for tests and docs. */
|
|
289
336
|
outline(): Array<{
|
|
290
337
|
phase: string;
|
|
@@ -323,9 +370,9 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
|
|
|
323
370
|
* `rollbackKeys` works the same here, and the keys it names stay reserved once
|
|
324
371
|
* the step is handed to `addStep`.
|
|
325
372
|
*/
|
|
326
|
-
export declare function stepFor<In, Ctx extends object = {}, Slots = UnknownSlots>(): {
|
|
327
|
-
<Out extends object | void = void, const RollbackKeys extends readonly (keyof Ctx)[] = readonly []>(def: InheritedKeyStepDef<In, Ctx, Out, RollbackKeys, Slots>): StepDef<In, Ctx, Out, RollbackKeys, Slots>;
|
|
328
|
-
<Out extends object | void, const RollbackKeys extends readonly PropertyKey[] = readonly []>(def: StepDef<In, Ctx, Out, RollbackKeys, Slots>): StepDef<In, Ctx, Out, RollbackKeys, Slots>;
|
|
373
|
+
export declare function stepFor<In, Ctx extends object = {}, Slots = UnknownSlots, Flags = UnknownFlags>(): {
|
|
374
|
+
<Out extends object | void = void, const RollbackKeys extends readonly (keyof Ctx)[] = readonly []>(def: InheritedKeyStepDef<In, Ctx, Out, RollbackKeys, Slots, Flags>): StepDef<In, Ctx, Out, RollbackKeys, Slots, Flags>;
|
|
375
|
+
<Out extends object | void, const RollbackKeys extends readonly PropertyKey[] = readonly []>(def: StepDef<In, Ctx, Out, RollbackKeys, Slots, Flags>): StepDef<In, Ctx, Out, RollbackKeys, Slots, Flags>;
|
|
329
376
|
};
|
|
330
377
|
/**
|
|
331
378
|
* Declare phases and steps away from any particular script, then mount them
|