@duyquangnvx/agent-cli 0.27.0 → 0.28.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.
Files changed (124) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/agent-cli.js +9 -2
  3. package/dist/agent-cli.js.map +1 -1
  4. package/dist/built-ins/agents-md.d.ts +3 -2
  5. package/dist/built-ins/agents-md.js +8 -9
  6. package/dist/built-ins/agents-md.js.map +1 -1
  7. package/dist/built-ins/commands.d.ts +2 -1
  8. package/dist/built-ins/commands.js.map +1 -1
  9. package/dist/built-ins/doctor-rows.js +1 -1
  10. package/dist/built-ins/doctor-rows.js.map +1 -1
  11. package/dist/built-ins/doctor.d.ts +0 -1
  12. package/dist/built-ins/doctor.js +21 -8
  13. package/dist/built-ins/doctor.js.map +1 -1
  14. package/dist/built-ins/install/dependency.js +23 -23
  15. package/dist/built-ins/install/dependency.js.map +1 -1
  16. package/dist/built-ins/install/global-npm.d.ts +6 -3
  17. package/dist/built-ins/install/global-npm.js +19 -14
  18. package/dist/built-ins/install/global-npm.js.map +1 -1
  19. package/dist/built-ins/install/global.js +6 -7
  20. package/dist/built-ins/install/global.js.map +1 -1
  21. package/dist/built-ins/install/install.d.ts +0 -3
  22. package/dist/built-ins/install/install.js +0 -1
  23. package/dist/built-ins/install/install.js.map +1 -1
  24. package/dist/built-ins/install/release-check.js +10 -17
  25. package/dist/built-ins/install/release-check.js.map +1 -1
  26. package/dist/built-ins/npm.d.ts +8 -7
  27. package/dist/built-ins/npm.js +20 -12
  28. package/dist/built-ins/npm.js.map +1 -1
  29. package/dist/built-ins/project-root.d.ts +4 -4
  30. package/dist/built-ins/project-root.js +12 -22
  31. package/dist/built-ins/project-root.js.map +1 -1
  32. package/dist/built-ins/read.d.ts +5 -0
  33. package/dist/built-ins/read.js +29 -0
  34. package/dist/built-ins/read.js.map +1 -0
  35. package/dist/built-ins/setup.d.ts +1 -2
  36. package/dist/built-ins/setup.js +32 -26
  37. package/dist/built-ins/setup.js.map +1 -1
  38. package/dist/built-ins/skill/home.d.ts +2 -1
  39. package/dist/built-ins/skill/home.js +19 -17
  40. package/dist/built-ins/skill/home.js.map +1 -1
  41. package/dist/built-ins/skill/install-command.d.ts +2 -1
  42. package/dist/built-ins/skill/install-command.js +13 -11
  43. package/dist/built-ins/skill/install-command.js.map +1 -1
  44. package/dist/built-ins/skill/project.js +6 -7
  45. package/dist/built-ins/skill/project.js.map +1 -1
  46. package/dist/built-ins/skill/sync.d.ts +4 -3
  47. package/dist/built-ins/skill/sync.js +24 -17
  48. package/dist/built-ins/skill/sync.js.map +1 -1
  49. package/dist/built-ins/update.d.ts +1 -1
  50. package/dist/built-ins/update.js +9 -7
  51. package/dist/built-ins/update.js.map +1 -1
  52. package/dist/built-ins/upgrades.d.ts +2 -1
  53. package/dist/built-ins/upgrades.js +5 -12
  54. package/dist/built-ins/upgrades.js.map +1 -1
  55. package/dist/check-examples.js +5 -23
  56. package/dist/check-examples.js.map +1 -1
  57. package/dist/check-next-steps.d.ts +3 -9
  58. package/dist/check-next-steps.js +20 -32
  59. package/dist/check-next-steps.js.map +1 -1
  60. package/dist/command-line/line-problem.d.ts +14 -0
  61. package/dist/command-line/line-problem.js +41 -0
  62. package/dist/command-line/line-problem.js.map +1 -0
  63. package/dist/context/files.d.ts +3 -0
  64. package/dist/context/files.js +17 -2
  65. package/dist/context/files.js.map +1 -1
  66. package/dist/context/outputs.d.ts +13 -24
  67. package/dist/context/outputs.js +37 -37
  68. package/dist/context/outputs.js.map +1 -1
  69. package/dist/context/spawn.js +3 -1
  70. package/dist/context/spawn.js.map +1 -1
  71. package/dist/context/tools.d.ts +9 -4
  72. package/dist/context/tools.js +12 -12
  73. package/dist/context/tools.js.map +1 -1
  74. package/dist/context.d.ts +3 -1
  75. package/dist/define-command.d.ts +19 -12
  76. package/dist/define-command.js +5 -3
  77. package/dist/define-command.js.map +1 -1
  78. package/dist/define.d.ts +10 -3
  79. package/dist/define.js.map +1 -1
  80. package/dist/errors.d.ts +3 -6
  81. package/dist/errors.js +17 -28
  82. package/dist/errors.js.map +1 -1
  83. package/dist/execute.d.ts +7 -16
  84. package/dist/execute.js +11 -14
  85. package/dist/execute.js.map +1 -1
  86. package/dist/exit-classes.d.ts +7 -10
  87. package/dist/exit-classes.js +20 -81
  88. package/dist/exit-classes.js.map +1 -1
  89. package/dist/failure.d.ts +36 -0
  90. package/dist/failure.js +65 -0
  91. package/dist/failure.js.map +1 -0
  92. package/dist/help-json.js +5 -3
  93. package/dist/help-json.js.map +1 -1
  94. package/dist/help.js +3 -3
  95. package/dist/help.js.map +1 -1
  96. package/dist/output.d.ts +3 -10
  97. package/dist/output.js +14 -24
  98. package/dist/output.js.map +1 -1
  99. package/dist/run-cli.js +7 -5
  100. package/dist/run-cli.js.map +1 -1
  101. package/dist/run-command.d.ts +6 -1
  102. package/dist/run-command.js +31 -158
  103. package/dist/run-command.js.map +1 -1
  104. package/dist/run-options.d.ts +5 -2
  105. package/dist/run-scope.d.ts +35 -0
  106. package/dist/run-scope.js +138 -0
  107. package/dist/run-scope.js.map +1 -0
  108. package/dist/runtime-codes.d.ts +140 -1
  109. package/dist/runtime-codes.js +60 -4
  110. package/dist/runtime-codes.js.map +1 -1
  111. package/docs/example/cli.test.ts +9 -2
  112. package/docs/example/cli.ts +1 -0
  113. package/docs/example/folder.ts +1 -0
  114. package/docs/guides/commands.md +1 -1
  115. package/docs/guides/doctor.md +2 -1
  116. package/docs/guides/errors.md +1 -1
  117. package/docs/guides/testing.md +2 -1
  118. package/package.json +1 -1
  119. package/dist/command-errors.d.ts +0 -8
  120. package/dist/command-errors.js +0 -25
  121. package/dist/command-errors.js.map +0 -1
  122. package/dist/command-line/route-line.d.ts +0 -15
  123. package/dist/command-line/route-line.js +0 -18
  124. package/dist/command-line/route-line.js.map +0 -1
package/dist/context.d.ts CHANGED
@@ -36,6 +36,8 @@ export type NoNeeds = Needs<never, NoErrors, never>;
36
36
  export interface Context<Ports = unknown, Settings = unknown, Declared extends Needs = NoNeeds> {
37
37
  readonly cwd: string;
38
38
  readonly env: Env;
39
+ /** The platform the run is on: `process.platform`, or the `platform` a test passed to `runCli`. */
40
+ readonly platform: NodeJS.Platform;
39
41
  /** The CLI's version, as `--version` prints it. */
40
42
  readonly version: string;
41
43
  /** The bundler's stamp, as `--version` prints it; absent when the CLI runs unbundled. */
@@ -179,7 +181,7 @@ export interface PortsBase extends PortsBaseOfContext {
179
181
  */
180
182
  secret(name: string): Secret | undefined;
181
183
  }
182
- type PortsBaseOfContext = Pick<Context, "env" | "cwd" | "packageRoot" | "envFile" | "spawn" | "spawnDetached" | "files" | "clock" | "signal" | "progress" | "version" | "build" | "self" | "fileError">;
184
+ type PortsBaseOfContext = Pick<Context, "env" | "platform" | "cwd" | "packageRoot" | "envFile" | "spawn" | "spawnDetached" | "files" | "clock" | "signal" | "progress" | "version" | "build" | "self" | "fileError">;
183
185
  export interface Project<Settings = unknown> {
184
186
  /** The folder holding the Project file. */
185
187
  readonly root: string;
@@ -4,6 +4,9 @@ import type { Needs } from "./context.js";
4
4
  import type { ActCommand, Command, DestructiveCommand, InputSchema, ListCommand, NoInput, ReadCommand, SecretDeclaration, ServeCommand, WriteCommand } from "./define.js";
5
5
  import type { ErrorTable, NoErrors } from "./error-table.js";
6
6
  import type { RowSchema } from "./list.js";
7
+ import { type DeclaredRuntimeErrors } from "./runtime-codes.js";
8
+ /** The codes a Command may declare in `errors`: the CLI's table and the Runtime's that only some Commands reach. */
9
+ type Declarable<Table extends ErrorTable> = Table & DeclaredRuntimeErrors;
7
10
  type Kebab<Key extends string> = Key extends `${infer Head}${infer Tail}` ? `${Head extends Lowercase<Head> ? Head : `-${Lowercase<Head>}`}${Kebab<Tail>}` : Key;
8
11
  type Taken<Schema extends InputSchema> = Extract<Kebab<Extract<keyof Schema["shape"], string>>, StandardFlagName>;
9
12
  type Unreserved<Schema extends InputSchema> = [Taken<Schema>] extends [never] ? unknown : {
@@ -27,7 +30,9 @@ type NeededName<Secrets extends readonly SecretDeclaration[]> = Exclude<Secrets[
27
30
  type OptionalName<Secrets extends readonly SecretDeclaration[]> = Extract<Secrets[number], {
28
31
  readonly optional: true;
29
32
  }>["name"];
30
- type NeedsOf<Secrets extends readonly SecretDeclaration[], Errors extends ErrorTable> = Needs<NeededName<Secrets>, Errors, OptionalName<Secrets>>;
33
+ type DeclarableCode<Table extends ErrorTable> = keyof Declarable<Table> & string;
34
+ /** The `ctx` needs of a Command declaring `Secrets` and, of the codes it may declare, `Code`. */
35
+ type Needed<Secrets extends readonly SecretDeclaration[], Table extends ErrorTable, Code extends DeclarableCode<Table>> = Needs<NeededName<Secrets>, Pick<Declarable<Table>, Code>, OptionalName<Secrets>>;
31
36
  type DeclaredSecrets<Secrets extends readonly SecretDeclaration[]> = {
32
37
  readonly secrets?: Secrets;
33
38
  } & NoInfer<string extends Secrets[number]["name"] ? {
@@ -37,20 +42,22 @@ type DeclaredSecrets<Secrets extends readonly SecretDeclaration[]> = {
37
42
  } : unknown>;
38
43
  /** Declares a Command whose `ctx.ports` is the CLI's `Ports`. */
39
44
  export interface DefineCommand<Ports, Settings = unknown, Table extends ErrorTable = NoErrors> {
40
- <Row extends RowSchema, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: ListCommand<Args, Options, Row, Ports, Settings, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ListCommand<Args, Options, Row, Ports, Settings, NeedsOf<Secrets, Pick<Table, Code>>>;
41
- <Schema extends z.ZodType, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: ReadCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, NeedsOf<Secrets, Pick<Table, Code>>> & WithOutput<Schema> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ReadCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, NeedsOf<Secrets, Pick<Table, Code>>> & WithOutput<Schema>;
42
- <Data, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: ReadCommand<Args, Options, Data, Ports, Settings, Data, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutOutput & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ReadCommand<Args, Options, Data, Ports, Settings, Data, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutOutput;
43
- <Schema extends z.ZodType, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: ActCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, NeedsOf<Secrets, Pick<Table, Code>>> & WithOutput<Schema> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ActCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, NeedsOf<Secrets, Pick<Table, Code>>> & WithOutput<Schema>;
44
- <Data, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: ActCommand<Args, Options, Data, Ports, Settings, Data, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutOutput & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ActCommand<Args, Options, Data, Ports, Settings, Data, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutOutput;
45
- <Schema extends z.ZodType, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: ServeCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, NeedsOf<Secrets, Pick<Table, Code>>> & WithOutput<Schema> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ServeCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, NeedsOf<Secrets, Pick<Table, Code>>> & WithOutput<Schema>;
46
- <Data, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: ServeCommand<Args, Options, Data, Ports, Settings, Data, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutOutput & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ServeCommand<Args, Options, Data, Ports, Settings, Data, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutOutput;
47
- <Plan, Schema extends z.ZodType, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: WriteCommand<Args, Options, Plan, Returns<Schema>, Ports, Settings, Prints<Schema>, NeedsOf<Secrets, Pick<Table, Code>>> & WithOutput<Schema> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): WriteCommand<Args, Options, Plan, Returns<Schema>, Ports, Settings, Prints<Schema>, NeedsOf<Secrets, Pick<Table, Code>>> & WithOutput<Schema>;
48
- <Plan, Data, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: WriteCommand<Args, Options, Plan, Data, Ports, Settings, Data, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutOutput & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): WriteCommand<Args, Options, Plan, Data, Ports, Settings, Data, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutOutput;
49
- <Plan, Schema extends z.ZodType, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: DestructiveCommand<Args, Options, Plan, Returns<Schema>, Ports, Settings, Prints<Schema>, NeedsOf<Secrets, Pick<Table, Code>>> & WithOutput<Schema> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): DestructiveCommand<Args, Options, Plan, Returns<Schema>, Ports, Settings, Prints<Schema>, NeedsOf<Secrets, Pick<Table, Code>>> & WithOutput<Schema>;
50
- <Plan, Data, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends keyof Table & string = never>(command: DestructiveCommand<Args, Options, Plan, Data, Ports, Settings, Data, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutOutput & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): DestructiveCommand<Args, Options, Plan, Data, Ports, Settings, Data, NeedsOf<Secrets, Pick<Table, Code>>> & WithoutOutput;
45
+ <Row extends RowSchema, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: ListCommand<Args, Options, Row, Ports, Settings, Needed<Secrets, Table, Code>> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ListCommand<Args, Options, Row, Ports, Settings, Needed<Secrets, Table, Code>>;
46
+ <Schema extends z.ZodType, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: ReadCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, Needed<Secrets, Table, Code>> & WithOutput<Schema> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ReadCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, Needed<Secrets, Table, Code>> & WithOutput<Schema>;
47
+ <Data, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: ReadCommand<Args, Options, Data, Ports, Settings, Data, Needed<Secrets, Table, Code>> & WithoutOutput & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ReadCommand<Args, Options, Data, Ports, Settings, Data, Needed<Secrets, Table, Code>> & WithoutOutput;
48
+ <Schema extends z.ZodType, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: ActCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, Needed<Secrets, Table, Code>> & WithOutput<Schema> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ActCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, Needed<Secrets, Table, Code>> & WithOutput<Schema>;
49
+ <Data, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: ActCommand<Args, Options, Data, Ports, Settings, Data, Needed<Secrets, Table, Code>> & WithoutOutput & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ActCommand<Args, Options, Data, Ports, Settings, Data, Needed<Secrets, Table, Code>> & WithoutOutput;
50
+ <Schema extends z.ZodType, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: ServeCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, Needed<Secrets, Table, Code>> & WithOutput<Schema> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ServeCommand<Args, Options, Returns<Schema>, Ports, Settings, Prints<Schema>, Needed<Secrets, Table, Code>> & WithOutput<Schema>;
51
+ <Data, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: ServeCommand<Args, Options, Data, Ports, Settings, Data, Needed<Secrets, Table, Code>> & WithoutOutput & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): ServeCommand<Args, Options, Data, Ports, Settings, Data, Needed<Secrets, Table, Code>> & WithoutOutput;
52
+ <Plan, Schema extends z.ZodType, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: WriteCommand<Args, Options, Plan, Returns<Schema>, Ports, Settings, Prints<Schema>, Needed<Secrets, Table, Code>> & WithOutput<Schema> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): WriteCommand<Args, Options, Plan, Returns<Schema>, Ports, Settings, Prints<Schema>, Needed<Secrets, Table, Code>> & WithOutput<Schema>;
53
+ <Plan, Data, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: WriteCommand<Args, Options, Plan, Data, Ports, Settings, Data, Needed<Secrets, Table, Code>> & WithoutOutput & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): WriteCommand<Args, Options, Plan, Data, Ports, Settings, Data, Needed<Secrets, Table, Code>> & WithoutOutput;
54
+ <Plan, Schema extends z.ZodType, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: DestructiveCommand<Args, Options, Plan, Returns<Schema>, Ports, Settings, Prints<Schema>, Needed<Secrets, Table, Code>> & WithOutput<Schema> & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): DestructiveCommand<Args, Options, Plan, Returns<Schema>, Ports, Settings, Prints<Schema>, Needed<Secrets, Table, Code>> & WithOutput<Schema>;
55
+ <Plan, Data, Args extends InputSchema = NoInput, Options extends InputSchema = NoInput, const Secrets extends readonly SecretDeclaration[] = readonly [], Code extends DeclarableCode<Table> = never>(command: DestructiveCommand<Args, Options, Plan, Data, Ports, Settings, Data, Needed<Secrets, Table, Code>> & WithoutOutput & WithoutStandardFlags<Args, Options> & DeclaredSecrets<Secrets>): DestructiveCommand<Args, Options, Plan, Data, Ports, Settings, Data, Needed<Secrets, Table, Code>> & WithoutOutput;
51
56
  }
52
57
  /** Throws when the Command's declaration breaks a rule its type cannot express; `label` names it. */
53
58
  export declare function checkCommand(command: Command, label: string, table: ErrorTable): void;
59
+ /** Throws on a code in `errors` that is neither in `table` nor a Runtime code some Commands declare. */
60
+ export declare function checkErrors(errors: readonly string[], label: string, table: ErrorTable): void;
54
61
  export declare function defineCommandFor<Ports, Settings, Table extends ErrorTable = NoErrors>(): DefineCommand<Ports, Settings, Table>;
55
62
  export declare const defineCommand: DefineCommand<unknown>;
56
63
  export {};
@@ -1,5 +1,6 @@
1
1
  import { checkForce, checkNoStandardFlags } from "./command-line/flags.js";
2
2
  import { checkArrayArgLast, checkNoBooleanArrayOption, checkStdinFields, } from "./command-line/input.js";
3
+ import { mustDeclare } from "./runtime-codes.js";
3
4
  /** Throws when the Command's declaration breaks a rule its type cannot express; `label` names it. */
4
5
  export function checkCommand(command, label, table) {
5
6
  checkNoStandardFlags(command, label);
@@ -7,10 +8,11 @@ export function checkCommand(command, label, table) {
7
8
  checkArrayArgLast(label, command.args);
8
9
  checkStdinFields(label, command.args, command.options);
9
10
  checkNoBooleanArrayOption(label, command.options);
10
- checkErrors(command, label, table);
11
+ checkErrors(command.errors ?? [], label, table);
11
12
  }
12
- function checkErrors(command, label, table) {
13
- const unknown = (command.errors ?? []).filter((code) => !Object.hasOwn(table, code));
13
+ /** Throws on a code in `errors` that is neither in `table` nor a Runtime code some Commands declare. */
14
+ export function checkErrors(errors, label, table) {
15
+ const unknown = errors.filter((code) => !mustDeclare(code, table));
14
16
  if (unknown.length > 0) {
15
17
  throw new Error(`${label} declares ${unknown.join(", ")} in errors, a code the Error table lacks`);
16
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"define-command.js","sourceRoot":"","sources":["../src/define-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAyB,MAAM,yBAAyB,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAmXjC,qGAAqG;AACrG,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,KAAa,EAAE,KAAiB;IAC7E,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACrC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3B,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB,EAAE,KAAa,EAAE,KAAiB;IACrE,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACrF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,0CAA0C,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAK9B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAA2B,OAAiB;IAC3D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAA2B,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"define-command.js","sourceRoot":"","sources":["../src/define-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAyB,MAAM,yBAAyB,CAAC;AAClG,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAgBjC,OAAO,EAA8B,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAiV7E,qGAAqG;AACrG,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,KAAa,EAAE,KAAiB;IAC7E,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACrC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3B,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,WAAW,CAAC,MAAyB,EAAE,KAAa,EAAE,KAAiB;IACrF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACnE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,0CAA0C,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAK9B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAA2B,OAAiB;IAC3D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAA2B,gBAAgB,EAAE,CAAC"}
package/dist/define.d.ts CHANGED
@@ -72,9 +72,10 @@ interface CommandBase<Args extends InputSchema, Options extends InputSchema, Dec
72
72
  */
73
73
  readonly secrets?: readonly SecretDeclaration<Declared["secretName"] | Declared["optionalSecretName"]>[];
74
74
  /**
75
- * The codes of the CLI's Error table the Command throws, listed with their class in help JSON;
76
- * `ctx.fail` throws only these. A run ending in a table code missing here, an `AggregateError`
77
- * leaf included, fails as a bug (exit 70). Runtime codes are never listed.
75
+ * The codes of the CLI's Error table, and the Runtime codes only some Commands reach, such as
76
+ * `NO_LATEST`, that the Command throws, listed with their class in help JSON; `ctx.fail` throws
77
+ * only these. A run ending in one missing here, an `AggregateError` leaf included, fails as a bug
78
+ * (exit 70). A Runtime code any Command can meet is never listed.
78
79
  */
79
80
  readonly errors?: readonly (keyof Declared["errors"] & string)[];
80
81
  /**
@@ -286,6 +287,12 @@ export interface DoctorCheck<Ports = unknown, Settings = unknown> {
286
287
  readonly deadlineMs?: number;
287
288
  /** A problem in an advisory row shows but never fails `doctor`. */
288
289
  readonly advisory?: boolean;
290
+ /**
291
+ * The codes of the Error table, and the Runtime codes only some Commands reach, that the row fails
292
+ * with, thrown or as its finding's `code`; `doctor` declares those of every row that is not
293
+ * advisory. A row that is not advisory failing with one missing here fails `doctor` as a bug (exit 70).
294
+ */
295
+ readonly errors?: readonly string[];
289
296
  /**
290
297
  * `ctx.signal` aborts at the row's deadline. A thrown error is reported as this row's problem,
291
298
  * with its first Next step other than `ctx.rerun()` as the fix; one from `ctx.spawn` finding a
@@ -1 +1 @@
1
- {"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AA2bA,0FAA0F;AAC1F,MAAM,UAAU,SAAS,CAAC,IAAwB;IAChD,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AAkcA,0FAA0F;AAC1F,MAAM,UAAU,SAAS,CAAC,IAAwB;IAChD,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;AACzC,CAAC"}
package/dist/errors.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { Env } from "./context.js";
2
2
  import type { ErrorTable } from "./error-table.js";
3
+ import type { ClassifiedLeaf } from "./failure.js";
3
4
  import { type NextStep, type Step } from "./next-step.js";
4
5
  import type { Style } from "./style.js";
5
6
  export interface CliErrorFields {
@@ -44,14 +45,9 @@ export interface ErrorFormat {
44
45
  readonly errors: ErrorTable;
45
46
  /** Where the CLI takes bug reports, read from package.json `bugs` only when a hint names it. */
46
47
  readonly bugs?: () => string | undefined;
47
- /** Whether `error` is a bug: not a `CliError`, or one whose code nobody declared. */
48
- readonly isBug: (error: unknown) => boolean;
49
- readonly isWait: (error: unknown) => boolean;
50
48
  }
51
49
  export declare function errnoOf(error: unknown): string | undefined;
52
50
  export declare function isMissingFile(error: unknown): boolean;
53
- /** What `pending` resolves with, or undefined when it fails because a file is missing. */
54
- export declare function orMissing<T>(pending: Promise<T>): Promise<T | undefined>;
55
51
  export declare function isNothingThere(error: unknown): boolean;
56
52
  /** The CLI's own environment variable, such as `TOOL_DEBUG` for `cliVariable("tool", "DEBUG")`. */
57
53
  export declare function cliVariable(cliName: string, suffix: string): string;
@@ -65,5 +61,6 @@ export declare function traceOf(error: unknown): string;
65
61
  * empty `AggregateError` is a leaf.
66
62
  */
67
63
  export declare function errorsOf(error: unknown): readonly unknown[];
68
- export declare function formatRuntimeError(error: unknown, format: ErrorFormat): string;
64
+ /** The classified errors a run failed with, as stderr carries them. */
65
+ export declare function formatRuntimeError(leaves: readonly ClassifiedLeaf[], format: ErrorFormat): string;
69
66
  export {};
package/dist/errors.js CHANGED
@@ -41,17 +41,6 @@ export function errnoOf(error) {
41
41
  export function isMissingFile(error) {
42
42
  return errnoOf(error) === "ENOENT";
43
43
  }
44
- /** What `pending` resolves with, or undefined when it fails because a file is missing. */
45
- export async function orMissing(pending) {
46
- try {
47
- return await pending;
48
- }
49
- catch (error) {
50
- if (isMissingFile(error))
51
- return undefined;
52
- throw error;
53
- }
54
- }
55
44
  // ENOTDIR: a part of the path is a file, so nothing can exist under it.
56
45
  export function isNothingThere(error) {
57
46
  return isMissingFile(error) || errnoOf(error) === "ENOTDIR";
@@ -79,12 +68,12 @@ function bugHint(format) {
79
68
  return bugs === undefined ? rerun : `${rerun}, then report it at ${bugs}`;
80
69
  }
81
70
  // A bug's own Next steps are the author's guess at a failure that was not meant to happen.
82
- function fieldsOf(error, format) {
71
+ function fieldsOf({ error, exitClass }, format) {
83
72
  if (!(error instanceof CliError)) {
84
73
  return { code: INTERNAL, message: messageOf(error), hint: bugHint(format) };
85
74
  }
86
75
  const { code, message, hint, details, retryAt, next } = error;
87
- if (format.isBug(error))
76
+ if (exitClass === "bug")
88
77
  return { code, message, hint: bugHint(format), details, retryAt };
89
78
  const lines = next.map((step) => lineOf(step, format.runAs));
90
79
  return { code, message, hint, details, retryAt, ...(lines.length === 0 ? {} : { next: lines }) };
@@ -98,11 +87,11 @@ export function traceOf(error) {
98
87
  return error instanceof Error ? (error.stack ?? error.message) : String(error);
99
88
  }
100
89
  /** Under debug: a bug's stack trace, then every error's cause chain. */
101
- function debugTrace(error, format) {
90
+ function debugTrace({ error, exitClass }, format) {
102
91
  if (!isDebug(format))
103
92
  return undefined;
104
93
  const lines = [
105
- ...(format.isBug(error) ? [traceOf(error)] : []),
94
+ ...(exitClass === "bug" ? [traceOf(error)] : []),
106
95
  ...causesOf(error).map((cause) => `caused by: ${traceOf(cause)}`),
107
96
  ];
108
97
  return lines.length === 0 ? undefined : lines.join("\n");
@@ -127,29 +116,29 @@ function printedDetail(error, format) {
127
116
  const value = Reflect.get(details, key);
128
117
  return typeof value === "string" ? value : undefined;
129
118
  }
130
- function labelOf(error, { isBug, isWait, style }) {
131
- if (isWait(error))
119
+ function labelOf({ exitClass }, style) {
120
+ if (exitClass === "wait")
132
121
  return style.yellow("wait:");
133
- return style.red(isBug(error) ? "internal error:" : "error:");
122
+ return style.red(exitClass === "bug" ? "internal error:" : "error:");
134
123
  }
135
- function errorLines(error, format) {
136
- const fields = fieldsOf(error, format);
137
- const blocks = [printedDetail(error, format), debugTrace(error, format)].filter((block) => block !== undefined);
124
+ function errorLines(leaf, format) {
125
+ const fields = fieldsOf(leaf, format);
126
+ const blocks = [printedDetail(leaf.error, format), debugTrace(leaf, format)].filter((block) => block !== undefined);
138
127
  const { style } = format;
139
- const label = labelOf(error, format);
128
+ const label = labelOf(leaf, style);
140
129
  const between = blocks.map((block) => `${block}\n`).join("");
141
130
  const runs = (fields.next ?? []).map((line) => `${style.cyan("run:")} ${line}\n`).join("");
142
131
  return `${label} ${fields.message}\n${between}${style.cyan("hint:")} ${fields.hint}\n${runs}`;
143
132
  }
144
- export function formatRuntimeError(error, format) {
145
- const errors = errorsOf(error);
133
+ /** The classified errors a run failed with, as stderr carries them. */
134
+ export function formatRuntimeError(leaves, format) {
146
135
  if (format.json) {
147
- const printed = errors.map((each) => ({
148
- ...fieldsOf(each, format),
149
- stack: debugTrace(each, format),
136
+ const printed = leaves.map((leaf) => ({
137
+ ...fieldsOf(leaf, format),
138
+ stack: debugTrace(leaf, format),
150
139
  }));
151
140
  return `${JSON.stringify({ errors: printed })}\n`;
152
141
  }
153
- return errors.map((each) => errorLines(each, format)).join("");
142
+ return leaves.map((leaf) => errorLines(leaf, format)).join("");
154
143
  }
155
144
  //# 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":"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"}
package/dist/execute.d.ts CHANGED
@@ -1,33 +1,24 @@
1
- import type { Files } from "./context/files.js";
2
- import { type OutputsGuard } from "./context/outputs.js";
1
+ import type { StandardValues } from "./command-line/parse-input.js";
2
+ import type { Outputs } from "./context/outputs.js";
3
3
  import type { Context } from "./context.js";
4
4
  import type { Command } from "./define.js";
5
- import type { PageInput } from "./list.js";
6
5
  import type { Style } from "./style.js";
7
6
  export interface Outcome {
8
7
  readonly value: unknown;
9
8
  render(style: Style): string;
10
9
  }
11
- export interface ExecuteFlags {
12
- readonly dryRun: boolean;
13
- /** The target the caller named with `--confirm`, if any. */
14
- readonly confirm: string | undefined;
15
- /** Whether the caller approved the cost with `--yes`. */
16
- readonly yes: boolean;
17
- /** The page a List Command's `run` receives with its input. */
18
- readonly page: PageInput;
10
+ export interface ExecuteRun {
11
+ readonly flags: StandardValues;
19
12
  /** The caller's command line and the Command's, for the hint of a confirmation error. */
20
13
  readonly commandLine: string;
21
14
  /** Prints a serve Command's data the moment `start` returns it. */
22
15
  readonly started: (outcome: Outcome) => Promise<void>;
23
- /** The file system under `ctx.files`, unresolved and unclassified, for the outputs probe. */
24
- readonly files: Files;
25
- /** Guards the declared outputs of `ctx.files` and the ports' files once every check passes. */
26
- readonly guardOutputs: OutputsGuard["guard"];
16
+ /** The run's Outputs, whose files are `ctx.files`. */
17
+ readonly outputs: Outputs;
27
18
  }
28
19
  /**
29
20
  * The data a Command returned or delivered as it prints it: parsed by its `output` schema when it
30
21
  * declares one, so data the schema rejects fails the run as a bug.
31
22
  */
32
23
  export declare function dataOutcome(command: Command, data: unknown, commandLine: string): Outcome;
33
- export declare function execute(command: Command, input: Record<string, unknown>, ctx: Context, { dryRun, confirm, yes, page, commandLine, started, files, guardOutputs }: ExecuteFlags): Promise<Outcome>;
24
+ export declare function execute(command: Command, input: Record<string, unknown>, ctx: Context, { flags, commandLine, started, outputs: runOutputs }: ExecuteRun): Promise<Outcome>;
package/dist/execute.js CHANGED
@@ -1,10 +1,8 @@
1
1
  import { encode } from "@toon-format/toon";
2
2
  import * as z from "zod";
3
3
  import { untilAborted } from "./abort.js";
4
- import { FORCE_FLAG } from "./command-line/flags.js";
5
4
  import { checkConfirmation } from "./context/confirm.js";
6
5
  import { checkCost } from "./context/cost.js";
7
- import { checkOutputs, probeOutputs } from "./context/outputs.js";
8
6
  import { checkSecrets } from "./context/secrets.js";
9
7
  import { checkTools } from "./context/tools.js";
10
8
  const PLAN_INDENT = " ";
@@ -66,13 +64,13 @@ function serveContextOf(ctx, end) {
66
64
  const serveCtx = Object.create(ctx);
67
65
  return Object.assign(serveCtx, { end });
68
66
  }
69
- export async function execute(command, input, ctx, { dryRun, confirm, yes, page, commandLine, started, files, guardOutputs }) {
70
- await checkTools(command.tools ?? [], ctx.env, ctx.rerun());
67
+ export async function execute(command, input, ctx, { flags, commandLine, started, outputs: runOutputs }) {
68
+ await checkTools(command.tools ?? [], ctx, ctx.rerun());
71
69
  const { env, envFile, fileError } = ctx;
72
70
  checkSecrets(command.secrets ?? [], { env, envFile, fileError }, ctx.rerun());
73
71
  if (command.rows !== undefined) {
74
72
  const { render } = command;
75
- return outcomeOf(await command.run({ ...input, ...page }, ctx), (data, style) => render === undefined ? encode(data.items) : render(data, style));
73
+ return outcomeOf(await command.run({ ...input, ...flags.page }, ctx), (data, style) => render === undefined ? encode(data.items) : render(data, style));
76
74
  }
77
75
  if (command.effect === "read" || command.effect === "act") {
78
76
  return dataOutcome(command, await command.run(input, ctx), commandLine);
@@ -88,20 +86,19 @@ export async function execute(command, input, ctx, { dryRun, confirm, yes, page,
88
86
  return outcome;
89
87
  }
90
88
  const plan = await command.plan(input, ctx);
91
- if (dryRun) {
89
+ if (ctx.dryRun) {
92
90
  return dryRunOutcome(command, plan, commandLine);
93
91
  }
94
92
  const outputs = command.outputs?.(plan);
95
- await checkOutputs({ rerun: ctx.rerun, commandLine, force: ctx.force, files: ctx.files }, outputs);
96
- checkCost({ rerun: ctx.rerun, commandLine, yes }, command.cost?.(plan));
93
+ const { rerun, force } = ctx;
94
+ if (outputs !== undefined)
95
+ await runOutputs.refuseOverwrite(outputs, { rerun, commandLine, force });
96
+ checkCost({ rerun, commandLine, yes: flags.yes }, command.cost?.(plan));
97
97
  if (command.effect === "destructive") {
98
- checkConfirmation({ rerun: ctx.rerun, commandLine, given: confirm }, command.confirm(plan));
99
- }
100
- if (outputs !== undefined) {
101
- await probeOutputs({ files, cwd: ctx.cwd, fileError: ctx.fileError }, outputs);
102
- if (!ctx.force)
103
- guardOutputs(outputs, ctx.rerun({ add: [FORCE_FLAG.flag] }));
98
+ checkConfirmation({ rerun, commandLine, given: flags.confirm }, command.confirm(plan));
104
99
  }
100
+ if (outputs !== undefined)
101
+ await runOutputs.claim(outputs, { rerun, force });
105
102
  return dataOutcome(command, await command.apply(plan, ctx), commandLine);
106
103
  }
107
104
  //# sourceMappingURL=execute.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { SpecNode } from "./command-spec.js";
1
2
  import type { Cli } from "./define.js";
2
3
  import { type DeclaredExitClass, type ErrorTable } from "./error-table.js";
3
4
  /** Who must act on a failure (ADR 0005), which sets the exit code. */
@@ -16,17 +17,13 @@ export declare const EXIT_CODES: {
16
17
  };
17
18
  /** The codes of `errors` that the Runtime already declares, which a CLI cannot redeclare. */
18
19
  export declare function runtimeCodesIn(errors: ErrorTable): string[];
19
- export declare function isBug(error: unknown, errors: ErrorTable): boolean;
20
- export declare function isWait(error: unknown, errors: ErrorTable): boolean;
20
+ /** The class of `code` in the Runtime's Error table or else in the CLI's `errors`. */
21
+ export declare function classOfCode(code: string, errors: ErrorTable): ExitClass | undefined;
21
22
  /**
22
- * The classes other than bug and interrupt that a run of `cli` can end in: those of the Runtime's
23
- * codes it can reach, and those of its own table.
23
+ * The classes other than bug and interrupt that a run of `cli` can end in: those of the Runtime
24
+ * codes any Command can meet, those of the codes its Commands under `root` declare, Built-ins
25
+ * included, and those of its own table.
24
26
  */
25
- export declare function reachableExitClasses(cli: Cli): Set<DeclaredExitClass>;
27
+ export declare function reachableExitClasses(cli: Cli, root: SpecNode): Set<DeclaredExitClass>;
26
28
  /** The signal named by an interrupt's abort reason; any other reason counts as Ctrl-C. */
27
29
  export declare function stopSignalOf(reason: unknown): StopSignal;
28
- /**
29
- * The exit code of a run that failed with `error`, given the CLI's error table; `stop` is the
30
- * signal that interrupted it, if any.
31
- */
32
- export declare function exitCodeOf(error: unknown, errors: ErrorTable, stop: AbortSignal | undefined): number;
@@ -1,6 +1,5 @@
1
- import { installOf } from "./built-ins/install/install.js";
2
1
  import { errorTableOf } from "./error-table.js";
3
- import { CliError, errorsOf, UsageError } from "./errors.js";
2
+ import { anyCommandClasses, isRuntimeCode, runtimeErrors } from "./runtime-codes.js";
4
3
  export const SIGNAL_EXIT_CODES = { SIGINT: 130, SIGTERM: 143 };
5
4
  export const EXIT_CODES = {
6
5
  caller: 1,
@@ -9,98 +8,38 @@ export const EXIT_CODES = {
9
8
  wait: 75,
10
9
  bug: 70,
11
10
  };
12
- // Typed by every Runtime code, so a code missing here or not on `runtimeCodes` fails to compile.
13
- const RUNTIME_EXIT_CLASSES = {
14
- INVALID_INPUT: "caller",
15
- UNKNOWN_OPTION: "caller",
16
- UNKNOWN_COMMAND: "caller",
17
- UNKNOWN_FIELD: "caller",
18
- CONFIRMATION_REQUIRED: "caller",
19
- CONFIRMATION_MISMATCH: "caller",
20
- NOT_CONFIRMED: "operator",
21
- NEEDS_OPERATOR: "operator",
22
- OUTPUT_EXISTS: "caller",
23
- STDIN_STALLED: "caller",
24
- INTERRUPTED: "interrupted",
25
- DEADLINE_EXCEEDED: "wait",
26
- INTERNAL: "bug",
27
- PERMISSION_DENIED: "operator",
28
- DISK_FULL: "operator",
29
- NOT_FOUND: "caller",
30
- ALREADY_EXISTS: "caller",
31
- NOT_A_FILE: "caller",
32
- TOOL_FAILED: "operator",
33
- TOOL_MISSING: "operator",
34
- SECRET_MISSING: "operator",
35
- PROJECT_INVALID: "operator",
36
- DOCTOR_PROBLEMS: "operator",
37
- NOT_GLOBAL_INSTALL: "operator",
38
- NOT_ON_PATH: "operator",
39
- REGISTRY_UNREACHABLE: "operator",
40
- REGISTRY_AUTH: "operator",
41
- INSTALL_FAILED: "operator",
42
- NPM_FAILED: "operator",
43
- NO_LATEST: "source",
44
- };
45
- function isRuntimeCode(code) {
46
- return Object.hasOwn(RUNTIME_EXIT_CLASSES, code);
47
- }
48
11
  /** The codes of `errors` that the Runtime already declares, which a CLI cannot redeclare. */
49
12
  export function runtimeCodesIn(errors) {
50
13
  return Object.keys(errors).filter(isRuntimeCode);
51
14
  }
52
- // A code that neither the Runtime nor the CLI declares was thrown by mistake: a bug.
53
- function exitClassOfOne(error, errors) {
54
- if (!(error instanceof CliError))
55
- return "bug";
56
- if (error instanceof UsageError)
57
- return "caller";
58
- if (isRuntimeCode(error.code))
59
- return RUNTIME_EXIT_CLASSES[error.code];
60
- return errors[error.code]?.class ?? "bug";
61
- }
62
- export function isBug(error, errors) {
63
- return exitClassOfOne(error, errors) === "bug";
15
+ /** The class of `code` in the Runtime's Error table or else in the CLI's `errors`. */
16
+ export function classOfCode(code, errors) {
17
+ return isRuntimeCode(code) ? runtimeErrors[code].class : errors[code]?.class;
64
18
  }
65
- export function isWait(error, errors) {
66
- return exitClassOfOne(error, errors) === "wait";
19
+ function declaredCodesOf(node) {
20
+ return node.kind === "command"
21
+ ? (node.command.errors ?? [])
22
+ : Object.values(node.commands).flatMap(declaredCodesOf);
67
23
  }
68
- // Of several errors, the class that must act first decides; any bug makes the whole run one.
69
- const ACT_FIRST = ["caller", "operator", "source", "wait", "interrupted"];
70
- function exitClassOf(error, errors) {
71
- const classes = errorsOf(error).map((each) => exitClassOfOne(each, errors));
72
- if (classes.includes("bug"))
73
- return "bug";
74
- return ACT_FIRST.find((exitClass) => classes.includes(exitClass)) ?? "bug";
24
+ function isDeclarable(exitClass) {
25
+ return exitClass !== undefined && exitClass !== "bug" && exitClass !== "interrupted";
75
26
  }
76
27
  /**
77
- * The classes other than bug and interrupt that a run of `cli` can end in: those of the Runtime's
78
- * codes it can reach, and those of its own table.
28
+ * The classes other than bug and interrupt that a run of `cli` can end in: those of the Runtime
29
+ * codes any Command can meet, those of the codes its Commands under `root` declare, Built-ins
30
+ * included, and those of its own table.
79
31
  */
80
- export function reachableExitClasses(cli) {
81
- // Any CLI can write files or refuse an unconfirmed cost (the operator's); the Built-ins its
82
- // install adds, which only a multi-Command CLI has, may reach more.
83
- const runtime = [
84
- "caller",
85
- "operator",
86
- "wait",
87
- ...(cli.commands === undefined ? [] : installOf(cli).exitClasses),
32
+ export function reachableExitClasses(cli, root) {
33
+ const table = errorTableOf(cli);
34
+ const classes = [
35
+ ...anyCommandClasses,
36
+ ...declaredCodesOf(root).map((code) => classOfCode(code, table)),
37
+ ...Object.values(table).map((declaration) => declaration.class),
88
38
  ];
89
- const own = Object.values(errorTableOf(cli)).map((declaration) => declaration.class);
90
- return new Set([...runtime, ...own]);
39
+ return new Set(classes.filter(isDeclarable));
91
40
  }
92
41
  /** The signal named by an interrupt's abort reason; any other reason counts as Ctrl-C. */
93
42
  export function stopSignalOf(reason) {
94
43
  return reason === "SIGTERM" ? "SIGTERM" : "SIGINT";
95
44
  }
96
- /**
97
- * The exit code of a run that failed with `error`, given the CLI's error table; `stop` is the
98
- * signal that interrupted it, if any.
99
- */
100
- export function exitCodeOf(error, errors, stop) {
101
- const exitClass = exitClassOf(error, errors);
102
- return exitClass === "interrupted"
103
- ? SIGNAL_EXIT_CODES[stopSignalOf(stop?.reason)]
104
- : EXIT_CODES[exitClass];
105
- }
106
45
  //# sourceMappingURL=exit-classes.js.map