@michaelrwalker/stagehand 0.6.0 → 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 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>;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAA2B,SAAS,EAAa,MAAM,YAAY,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAEV,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;CAC7C;AASD,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,CA4BtB;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,CAmB/B"}
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),
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
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
@@ -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;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAMvE;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,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK/C"}
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
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
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,CAA4B;IAChC,SAAS,CAAS;IAE3B,YAAY,IAA+B,EAAE,SAAiB,EAAE,OAAe;QAC7E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAS;IACb,IAAI,CAAS;IAEtB,YAAY,IAAY,EAAE,IAAY;QACpC,KAAK,CACH,SAAS,IAAI,sBAAsB,IAAI,gDAAgD;YACrF,sEAAsE;YACtE,6BAA6B,IAAI,8CAA8C;YAC/E,8BAA8B,CACjC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,wEAAwE;AACxE,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,KAAK,CAAS;IACd,IAAI,CAAS;IACb,QAAQ,CAAS;IAE1B,YAAY,KAAa,EAAE,IAAY,EAAE,QAAgB,EAAE,KAAc;QACvE,KAAK,CAAC,SAAS,IAAI,eAAe,KAAK,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,CAAS;IACb,SAAS,CAAS;IAE3B,YAAY,IAAY,EAAE,SAAiB;QACzC,KAAK,CAAC,SAAS,IAAI,qBAAqB,SAAS,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,4EAA4E;AAC5E,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,MAAM,CAAS;IAExB,YAAY,MAAc;QACxB,KAAK,CAAC,mBAAmB,MAAM,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,+EAA+E;AAC/E,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,KAAK,CAAS;IACd,IAAI,CAAS;IACb,aAAa,CAAU;IAEhC,YAAY,KAAa,EAAE,IAAY,EAAE,aAAsB,EAAE,KAAc;QAC7E,KAAK,CAAC,iBAAiB,IAAI,eAAe,KAAK,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,CAAS;IAEtB,YAAY,IAAY,EAAE,KAAwB;QAChD,KAAK,CACH,iBAAiB,IAAI,KAAK;YACxB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,gCAAgC,CAAC,CACjG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,kFAAkF;AAClF,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,CAAS;IAEtB,YAAY,IAAY;QACtB,KAAK,CAAC,SAAS,IAAI,uBAAuB,IAAI,iBAAiB,IAAI,iCAAiC,CAAC,CAAC;QACtG,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,6EAA6E;AAC7E,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C;QACE,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,CACL,KAAK,YAAY,kBAAkB;QACnC,KAAK,YAAY,oBAAoB;QACrC,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CACxD,CAAC;AACJ,CAAC"}
@@ -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, 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";
@@ -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,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;AAqCrB,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.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 } 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,36 +223,43 @@ 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
193
240
  * it lists in `clean` is dropped from both.
194
241
  *
195
- * @throws {StepDefinitionError} if `clean` names a key reserved by some
196
- * step's `rollbackKeys`.
197
- */
198
- /**
199
- * A step that caches. It contributes its own slot, `phase::step`, holding
242
+ * There are four signatures, along two independent splits.
243
+ *
244
+ * A step that caches contributes its own slot, `phase::step`, holding
200
245
  * exactly what the handler returns — addressable through `context.cache` in
201
- * every step declared after it.
246
+ * every step declared after it. That is split from the plain form rather
247
+ * than inferred from the presence of `cache`: an optional property cannot be
248
+ * told apart from its own default, so a single signature always resolved to
249
+ * "no cache" and quietly dropped the slot.
250
+ *
251
+ * Crossed with that, each form is tried first as an
252
+ * {@link InheritedKeyStepDef} — `rollbackKeys` naming only keys the context
253
+ * already has — which is what keeps the handler as the sole inference site
254
+ * for `Out`. A step naming one of its own output keys fails that signature's
255
+ * `RollbackKeys` constraint in inference's first pass and falls through to
256
+ * the general {@link StepDef} form below.
202
257
  *
203
- * Split from the plain form rather than inferring the presence of `cache`:
204
- * an optional property cannot be told apart from its own default, so a
205
- * single signature always resolved to "no cache" and quietly dropped the
206
- * slot.
258
+ * @throws {StepDefinitionError} if `clean` names a key reserved by some
259
+ * step's `rollbackKeys`.
207
260
  */
208
- 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> & {
261
+ /** Cached, `rollbackKeys` inherited. See {@link InheritedKeyStepDef}. */
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> & {
209
263
  name: Name;
210
264
  cache: CacheSource<In, Ctx>;
211
265
  }): Script<In, Cleaned<Merge<Ctx, Out>, CleanKeys[number]>, Reserved | RollbackKeys[number], Slots & Record<`${Open["phase"]}::${Name}`, Out>, {
@@ -213,21 +267,31 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
213
267
  phase: Open["phase"];
214
268
  schema: Open["schema"];
215
269
  delta: Cleaned<Merge<Open["delta"], Out>, CleanKeys[number]>;
216
- }>;
217
- /**
218
- * Append a step to the current phase. Whatever the handler resolves to is
219
- * merged into the context and becomes visible to every later step; whatever
220
- * it lists in `clean` is dropped from both.
221
- *
222
- * @throws {StepDefinitionError} if `clean` names a key reserved by some
223
- * step's `rollbackKeys`.
224
- */
225
- 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, {
270
+ }, Flags>;
271
+ /** Plain, `rollbackKeys` inherited. See {@link InheritedKeyStepDef}. */
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>;
278
+ /** Cached, general form. See {@link StepDef}. */
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> & {
280
+ name: Name;
281
+ cache: CacheSource<In, Ctx>;
282
+ }): Script<In, Cleaned<Merge<Ctx, Out>, CleanKeys[number]>, Reserved | RollbackKeys[number], Slots & Record<`${Open["phase"]}::${Name}`, Out>, {
283
+ name: Open["name"];
284
+ phase: Open["phase"];
285
+ schema: Open["schema"];
286
+ delta: Cleaned<Merge<Open["delta"], Out>, CleanKeys[number]>;
287
+ }, Flags>;
288
+ /** Plain, general form. See {@link StepDef}. */
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, {
290
+ name: Open["name"];
291
+ phase: Open["phase"];
292
+ schema: Open["schema"];
293
+ delta: Cleaned<Merge<Open["delta"], Out>, CleanKeys[number]>;
294
+ }, Flags>;
231
295
  /**
232
296
  * Splice a reusable fragment into this script. Its phases land here in
233
297
  * order, and everything it produced is merged into the context — so the
@@ -257,17 +321,17 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
257
321
  use<SubIn, Out extends object, R extends PropertyKey, RS, const As extends string | undefined = undefined>(routine: Routine<SubIn, Ctx, Out, R, RS>, options: {
258
322
  as?: As;
259
323
  input: MountInput<In, Ctx, SubIn>;
260
- }): Script<In, Merge<Ctx, Out>, Reserved | R, Commit<Slots, Open> & Mounted<As, RS>, ClosedPhase>;
261
- 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: {
262
326
  as?: As;
263
327
  input: MountInput<In, Ctx, SubIn>;
264
- }): Script<In, Merge<Ctx, Out>, Reserved | R, Commit<Slots, Open> & Mounted<As, Commit<SS, SO>>, ClosedPhase>;
265
- 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?: {
266
330
  as?: As;
267
- }): 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>;
268
332
  use<Out extends object, R extends PropertyKey, RS, const As extends string | undefined = undefined>(routine: Routine<In, Ctx, Out, R, RS>, options?: {
269
333
  as?: As;
270
- }): 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>;
271
335
  /** Every step name, in execution order — handy for tests and docs. */
272
336
  outline(): Array<{
273
337
  phase: string;
@@ -306,7 +370,10 @@ export declare class Script<In = void, Ctx extends object = {}, Reserved extends
306
370
  * `rollbackKeys` works the same here, and the keys it names stay reserved once
307
371
  * the step is handed to `addStep`.
308
372
  */
309
- export declare function stepFor<In, Ctx extends object = {}, Slots = UnknownSlots>(): <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>;
376
+ };
310
377
  /**
311
378
  * Declare phases and steps away from any particular script, then mount them
312
379
  * with {@link Script.use}.