@detergent-software/atk 8.9.0-dev.17 → 8.9.0-dev.19

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 (63) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/build/cli.js +7 -3
  3. package/build/cli.js.map +1 -1
  4. package/build/command-manifest.json +1507 -0
  5. package/build/commands/cache.d.ts +1 -1
  6. package/build/commands/publish.d.ts +1 -1
  7. package/build/commands/publish.d.ts.map +1 -1
  8. package/build/commands/publish.js +2 -6
  9. package/build/commands/publish.js.map +1 -1
  10. package/build/commands/schema.d.ts +3 -3
  11. package/build/components/Header.d.ts +2 -3
  12. package/build/components/Header.d.ts.map +1 -1
  13. package/build/components/Header.js +2 -9
  14. package/build/components/Header.js.map +1 -1
  15. package/build/components/header-art.d.ts +7 -0
  16. package/build/components/header-art.d.ts.map +1 -0
  17. package/build/components/header-art.js +14 -0
  18. package/build/components/header-art.js.map +1 -0
  19. package/build/lib/pastel/commander-specs.d.ts +7 -0
  20. package/build/lib/pastel/commander-specs.d.ts.map +1 -0
  21. package/build/lib/pastel/commander-specs.js +50 -0
  22. package/build/lib/pastel/commander-specs.js.map +1 -0
  23. package/build/lib/pastel/generate-arguments.d.ts +3 -3
  24. package/build/lib/pastel/generate-arguments.d.ts.map +1 -1
  25. package/build/lib/pastel/generate-arguments.js +25 -22
  26. package/build/lib/pastel/generate-arguments.js.map +1 -1
  27. package/build/lib/pastel/generate-command.d.ts +7 -5
  28. package/build/lib/pastel/generate-command.d.ts.map +1 -1
  29. package/build/lib/pastel/generate-command.js +32 -62
  30. package/build/lib/pastel/generate-command.js.map +1 -1
  31. package/build/lib/pastel/generate-commands.d.ts +3 -5
  32. package/build/lib/pastel/generate-commands.d.ts.map +1 -1
  33. package/build/lib/pastel/generate-commands.js +6 -10
  34. package/build/lib/pastel/generate-commands.js.map +1 -1
  35. package/build/lib/pastel/generate-options.d.ts +3 -3
  36. package/build/lib/pastel/generate-options.d.ts.map +1 -1
  37. package/build/lib/pastel/generate-options.js +16 -13
  38. package/build/lib/pastel/generate-options.js.map +1 -1
  39. package/build/lib/pastel/index.d.ts +7 -0
  40. package/build/lib/pastel/index.d.ts.map +1 -1
  41. package/build/lib/pastel/index.js +16 -15
  42. package/build/lib/pastel/index.js.map +1 -1
  43. package/build/lib/pastel/internal-types.d.ts +39 -8
  44. package/build/lib/pastel/internal-types.d.ts.map +1 -1
  45. package/build/lib/pastel/manifest.d.ts +8 -0
  46. package/build/lib/pastel/manifest.d.ts.map +1 -0
  47. package/build/lib/pastel/manifest.js +7 -0
  48. package/build/lib/pastel/manifest.js.map +1 -0
  49. package/build/lib/pastel/read-commands.d.ts +7 -2
  50. package/build/lib/pastel/read-commands.d.ts.map +1 -1
  51. package/build/lib/pastel/read-commands.js +51 -30
  52. package/build/lib/pastel/read-commands.js.map +1 -1
  53. package/build/lib/pastel/render-command.d.ts +13 -0
  54. package/build/lib/pastel/render-command.d.ts.map +1 -0
  55. package/build/lib/pastel/render-command.js +56 -0
  56. package/build/lib/pastel/render-command.js.map +1 -0
  57. package/build/lib/publish-flow.d.ts +1 -3
  58. package/build/lib/publish-flow.d.ts.map +1 -1
  59. package/build/lib/publish-flow.js +7 -81
  60. package/build/lib/publish-flow.js.map +1 -1
  61. package/build/lib/publish-run.d.ts +2 -2
  62. package/build/lib/publish-run.js +2 -2
  63. package/package.json +3 -2
@@ -1,12 +1,20 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
1
9
  import {} from 'commander';
2
- import { render } from 'ink';
3
- import React, {} from 'react';
4
- import { fromZodError } from 'zod-validation-error';
5
- import generateArguments from './generate-arguments.js';
6
- import generateOptions from './generate-options.js';
7
- import {} from './internal-types.js';
8
- import {} from './types.js';
9
- const generateCommand = (commanderCommand, pastelCommand, { appComponent }) => {
10
+ import path from 'node:path';
11
+ import { pathToFileURL } from 'node:url';
12
+ import { toArguments, toOptions } from './commander-specs.js';
13
+ /**
14
+ * Set up a commander command from its spec. Its module is imported only when the command runs, and Ink with it
15
+ * (`render-command.tsx`), so `--help` and `--version` load neither (ATK-605).
16
+ */
17
+ const generateCommand = (commanderCommand, pastelCommand, { commandsDirectory }) => {
10
18
  commanderCommand.helpOption('-h, --help', 'Show help');
11
19
  if (pastelCommand.description) {
12
20
  commanderCommand.description(pastelCommand.description);
@@ -14,67 +22,29 @@ const generateCommand = (commanderCommand, pastelCommand, { appComponent }) => {
14
22
  if (pastelCommand.alias) {
15
23
  commanderCommand.alias(pastelCommand.alias);
16
24
  }
17
- const optionsSchema = pastelCommand.options;
18
- if (optionsSchema) {
19
- const options = generateOptions(optionsSchema);
20
- for (const option of options) {
21
- commanderCommand.addOption(option);
22
- }
25
+ for (const option of toOptions(pastelCommand.options ?? [])) {
26
+ commanderCommand.addOption(option);
23
27
  }
24
- let hasVariadicArgument = false;
25
- const argumentsSchema = pastelCommand.args;
26
- if (argumentsSchema) {
27
- const arguments_ = generateArguments(argumentsSchema);
28
- for (const argument of arguments_) {
29
- if (argument.variadic) {
30
- hasVariadicArgument = true;
31
- }
32
- commanderCommand.addArgument(argument);
28
+ let variadic = false;
29
+ for (const argument of toArguments(pastelCommand.args ?? [])) {
30
+ if (argument.variadic) {
31
+ variadic = true;
33
32
  }
33
+ commanderCommand.addArgument(argument);
34
34
  }
35
- const { component } = pastelCommand;
36
- if (component) {
37
- commanderCommand.action((...input) => {
35
+ const { file } = pastelCommand;
36
+ if (file) {
37
+ commanderCommand.action(async (...input) => {
38
38
  // Remove the last argument, which is an instance of Commander command
39
39
  input.pop();
40
- const options = input.pop();
41
- let parsedOptions = {};
42
- if (pastelCommand.options) {
43
- const result = pastelCommand.options.safeParse(options);
44
- if (result.success) {
45
- parsedOptions = result.data ?? {};
46
- }
47
- else {
48
- rejectInput(commanderCommand, result.error);
49
- }
50
- }
51
- let arguments_ = [];
52
- if (pastelCommand.args) {
53
- const result = pastelCommand.args.safeParse(hasVariadicArgument ? input.flat() : input);
54
- if (result.success) {
55
- arguments_ = result.data ?? [];
56
- }
57
- else {
58
- rejectInput(commanderCommand, result.error);
59
- }
60
- }
61
- render(React.createElement(appComponent, {
62
- commandProps: {
63
- args: arguments_,
64
- options: parsedOptions,
65
- },
66
- Component: component,
67
- }));
40
+ const moduleUrl = pathToFileURL(path.join(commandsDirectory, file)).href;
41
+ const [module, { default: renderCommand }] = await Promise.all([
42
+ import(__rewriteRelativeImportExtension(moduleUrl)),
43
+ import('./render-command.js'),
44
+ ]);
45
+ await renderCommand(commanderCommand, module, { commandsDirectory, input, variadic });
68
46
  });
69
47
  }
70
48
  };
71
- /**
72
- * Options or arguments the command's schema rejects are a usage error, reported through commander like its own
73
- * (exit 2), so `Pastel`'s `onUsageError` sees them too.
74
- */
75
- function rejectInput(commanderCommand, error) {
76
- const { message } = fromZodError(error, { maxIssuesInMessage: 1, prefix: '', prefixSeparator: '' });
77
- commanderCommand.error(`error: ${message}`, { code: 'pastel.invalidInput', exitCode: 2 });
78
- }
79
49
  export default generateCommand;
80
50
  //# sourceMappingURL=generate-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-command.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-command.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-command.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-command.tsx"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAoC,MAAM,WAAW,CAAC;AAC7D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;GAGG;AACH,MAAM,eAAe,GAAG,CACtB,gBAAkC,EAClC,aAA0B,EAC1B,EAAE,iBAAiB,EAAiC,EACpD,EAAE;IACF,gBAAgB,CAAC,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAEvD,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;QAC9B,gBAAgB,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;QACxB,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAC5D,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7D,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QAED,gBAAgB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;IAE/B,IAAI,IAAI,EAAE,CAAC;QACT,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,KAAgB,EAAE,EAAE;YACpD,sEAAsE;YACtE,KAAK,CAAC,GAAG,EAAE,CAAC;YAEZ,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACzE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC7D,MAAM,kCAAC,SAAS,EAA4B;gBAC5C,MAAM,CAAC,qBAAqB,CAAC;aAC9B,CAAC,CAAC;YAEH,MAAM,aAAa,CAAC,gBAAgB,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1,9 +1,7 @@
1
1
  import { Command as CommanderCommand } from 'commander';
2
- import { type ComponentType } from 'react';
3
- import type { Command } from './internal-types.js';
4
- import { type AppProps } from './types.js';
5
- declare const generateCommands: (parentCommanderCommand: CommanderCommand, pastelCommands: Map<string, Command>, { appComponent }: {
6
- appComponent: ComponentType<AppProps>;
2
+ import type { CommandSpec } from './internal-types.js';
3
+ declare const generateCommands: (parentCommanderCommand: CommanderCommand, pastelCommands: readonly CommandSpec[], { commandsDirectory }: {
4
+ commandsDirectory: string;
7
5
  }) => void;
8
6
  export default generateCommands;
9
7
  //# sourceMappingURL=generate-commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-commands.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/generate-commands.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,QAAA,MAAM,gBAAgB,GACpB,wBAAwB,gBAAgB,EACxC,gBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,kBAAkB;IAAE,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CAAE,SAoB5D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"generate-commands.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/generate-commands.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,QAAA,MAAM,gBAAgB,GACpB,wBAAwB,gBAAgB,EACxC,gBAAgB,SAAS,WAAW,EAAE,EACtC,uBAAuB;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,SAkBrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1,18 +1,14 @@
1
1
  import { Command as CommanderCommand } from 'commander';
2
- import {} from 'react';
3
2
  import generateCommand from './generate-command.js';
4
- import {} from './types.js';
5
- const generateCommands = (parentCommanderCommand, pastelCommands, { appComponent }) => {
6
- if (pastelCommands.size > 0) {
3
+ const generateCommands = (parentCommanderCommand, pastelCommands, { commandsDirectory }) => {
4
+ if (pastelCommands.length > 0) {
7
5
  parentCommanderCommand.addHelpCommand('help [command]', 'Show help for command');
8
6
  }
9
- for (const [name, pastelCommand] of pastelCommands) {
10
- const commanderCommand = new CommanderCommand(name);
11
- generateCommand(commanderCommand, pastelCommand, { appComponent });
7
+ for (const pastelCommand of pastelCommands) {
8
+ const commanderCommand = new CommanderCommand(pastelCommand.name);
9
+ generateCommand(commanderCommand, pastelCommand, { commandsDirectory });
12
10
  if (pastelCommand.commands) {
13
- generateCommands(commanderCommand, pastelCommand.commands, {
14
- appComponent,
15
- });
11
+ generateCommands(commanderCommand, pastelCommand.commands, { commandsDirectory });
16
12
  }
17
13
  parentCommanderCommand.addCommand(commanderCommand, {
18
14
  isDefault: pastelCommand.isDefault,
@@ -1 +1 @@
1
- {"version":3,"file":"generate-commands.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-commands.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAsB,MAAM,OAAO,CAAC;AAI3C,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAiB,MAAM,YAAY,CAAC;AAE3C,MAAM,gBAAgB,GAAG,CACvB,sBAAwC,EACxC,cAAoC,EACpC,EAAE,YAAY,EAA6C,EAC3D,EAAE;IACF,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC5B,sBAAsB,CAAC,cAAc,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,cAAc,EAAE,CAAC;QACnD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACpD,eAAe,CAAC,gBAAgB,EAAE,aAAa,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;QAEnE,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC3B,gBAAgB,CAAC,gBAAgB,EAAE,aAAa,CAAC,QAAQ,EAAE;gBACzD,YAAY;aACb,CAAC,CAAC;QACL,CAAC;QAED,sBAAsB,CAAC,UAAU,CAAC,gBAAgB,EAAE;YAClD,SAAS,EAAE,aAAa,CAAC,SAAS;SACnC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"generate-commands.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-commands.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAIxD,OAAO,eAAe,MAAM,uBAAuB,CAAC;AAEpD,MAAM,gBAAgB,GAAG,CACvB,sBAAwC,EACxC,cAAsC,EACtC,EAAE,iBAAiB,EAAiC,EACpD,EAAE;IACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,sBAAsB,CAAC,cAAc,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC3C,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAClE,eAAe,CAAC,gBAAgB,EAAE,aAAa,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAExE,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC3B,gBAAgB,CAAC,gBAAgB,EAAE,aAAa,CAAC,QAAQ,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,sBAAsB,CAAC,UAAU,CAAC,gBAAgB,EAAE;YAClD,SAAS,EAAE,aAAa,CAAC,SAAS;SACnC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Option } from 'commander';
2
- import { type CommandOptions } from './internal-types.js';
3
- export default function generateOptions(optionsSchema: CommandOptions): Option[];
1
+ import { type CommandOptions, type OptionSpec } from './internal-types.js';
2
+ /** Describe a command's Zod `options` as commander option specs (`toOptions` in `commander-specs.ts` builds them). */
3
+ export default function describeOptions(optionsSchema: CommandOptions): OptionSpec[];
4
4
  //# sourceMappingURL=generate-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-options.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/generate-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAMnC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAyB1D,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,aAAa,EAAE,cAAc,GAAG,MAAM,EAAE,CAqG/E"}
1
+ {"version":3,"file":"generate-options.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/generate-options.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAyB3E,sHAAsH;AACtH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,aAAa,EAAE,cAAc,GAAG,UAAU,EAAE,CA0GnF"}
@@ -1,6 +1,4 @@
1
- import { Option } from 'commander';
2
1
  import decamelize from 'decamelize';
3
- import { isDeepStrictEqual } from 'node:util';
4
2
  import plur from 'plur';
5
3
  import { ZodArray, ZodBoolean, ZodDefault, ZodEnum, ZodNumber, ZodOptional, ZodSet } from 'zod';
6
4
  import {} from './internal-types.js';
@@ -22,7 +20,8 @@ const getValueDescription = (value) => {
22
20
  const getAlias = (value) => {
23
21
  return getConfig(value)?.alias;
24
22
  };
25
- export default function generateOptions(optionsSchema) {
23
+ /** Describe a command's Zod `options` as commander option specs (`toOptions` in `commander-specs.ts` builds them). */
24
+ export default function describeOptions(optionsSchema) {
26
25
  let isOptionalByDefault = false;
27
26
  if (optionsSchema instanceof ZodOptional) {
28
27
  isOptionalByDefault = true;
@@ -71,27 +70,31 @@ export default function generateOptions(optionsSchema) {
71
70
  const rest = isVariadic ? '...' : '';
72
71
  flag += isOptional || defaultValue ? ` [${valueDescription}${rest}]` : ` <${valueDescription}${rest}>`;
73
72
  }
74
- const option = new Option(flag, description);
73
+ const option = { flags: flag };
74
+ if (description) {
75
+ option.description = description;
76
+ }
75
77
  if (optionSchema instanceof ZodNumber) {
76
- option.argParser((value) => Number.parseFloat(value));
78
+ option.parse = 'number';
77
79
  }
78
80
  if (optionSchema instanceof ZodEnum) {
79
- option.choices(Object.values(optionSchema._zod.def.entries).map(String));
81
+ option.choices = Object.values(optionSchema._zod.def.entries).map(String);
80
82
  }
81
83
  if (optionSchema instanceof ZodBoolean && defaultValue === undefined) {
82
84
  defaultValue = false;
83
85
  }
84
86
  if (optionSchema instanceof ZodSet) {
85
- option.argParser((value, previousValue) => {
86
- const joinPreviousValue = previousValue instanceof Set && !isDeepStrictEqual(previousValue, defaultValue);
87
- return joinPreviousValue ? new Set([...previousValue, value]) : new Set([value]);
88
- });
87
+ option.parse = 'set';
89
88
  }
90
89
  if (defaultValue !== undefined) {
91
- if (!defaultValueDescription && defaultValue instanceof Set) {
92
- defaultValueDescription = JSON.stringify([...defaultValue]);
90
+ if (defaultValue instanceof Set) {
91
+ defaultValueDescription ||= JSON.stringify([...defaultValue]);
92
+ defaultValue = [...defaultValue];
93
+ }
94
+ option.defaultValue = defaultValue;
95
+ if (defaultValueDescription) {
96
+ option.defaultValueDescription = defaultValueDescription;
93
97
  }
94
- option.default(defaultValue, defaultValueDescription);
95
98
  }
96
99
  options.push(option);
97
100
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate-options.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-options.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-options.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
+ import type { CommandManifest } from './internal-types.js';
1
2
  import type { CommandArgumentConfig, CommandOptionConfig } from './types.js';
2
3
  export type Options = {
4
+ /**
5
+ * The commands, described ahead of time by `describeCommands` (`lib/pastel/manifest.js`), so a run imports only
6
+ * the command it runs. Without it, Pastel imports every command in the `commands` folder to describe them.
7
+ */
8
+ commands?: CommandManifest;
3
9
  /**
4
10
  * Description. Defaults to `description` in the nearest package.json.
5
11
  */
@@ -52,5 +58,6 @@ export default class Pastel {
52
58
  * Set additional metadata for an argument. Must be used as an argument to `describe` function from Zod.
53
59
  */
54
60
  export declare function argument(config: CommandArgumentConfig): string;
61
+ export type { CommandManifest } from './internal-types.js';
55
62
  export * from './types.js';
56
63
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAQ7E,MAAM,MAAM,OAAO,GAAG;IACpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEtE;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC;IAE1C;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAKF;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,mBAAmB,UAEjD;AAED,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,OAAO,EAAE,OAAO;IAI5B;;OAEG;IACG,GAAG,CAAC,IAAI,GAAE,MAAM,EAAiB;CAmDxC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,qBAAqB,UAErD;AA6BD,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAK7E,MAAM,MAAM,OAAO,GAAG;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEtE;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC;IAE1C;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAKF;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,mBAAmB,UAEjD;AAED,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAEtB,OAAO,EAAE,OAAO;IAI5B;;OAEG;IACG,GAAG,CAAC,IAAI,GAAE,MAAM,EAAiB;CA0DxC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,qBAAqB,UAErD;AA6BD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,cAAc,YAAY,CAAC"}
@@ -1,12 +1,8 @@
1
1
  import { Command } from 'commander';
2
2
  import process from 'node:process';
3
3
  import { fileURLToPath } from 'node:url';
4
- import { readPackageUp } from 'read-package-up';
5
- import App from './_app.js';
6
4
  import generateCommand from './generate-command.js';
7
5
  import generateCommands from './generate-commands.js';
8
- import readCommands from './read-commands.js';
9
- import readCustomApp from './read-custom-app.js';
10
6
  /** Commander's exits that are output, not errors: `--help`, `help`, a bare command group, `--version`. */
11
7
  const NOT_USAGE_ERRORS = new Set(['commander.help', 'commander.helpDisplayed', 'commander.version']);
12
8
  /**
@@ -25,25 +21,29 @@ export default class Pastel {
25
21
  */
26
22
  async run(argv = process.argv) {
27
23
  const commandsDirectory = fileURLToPath(new URL('commands', this.options.importMeta.url));
28
- const appComponent = (await readCustomApp(commandsDirectory)) ?? App;
29
24
  const program = new Command();
30
- const commands = await readCommands(commandsDirectory);
31
- const indexCommand = commands.get('index');
25
+ const commands = this.options.commands ?? (await (await import('./manifest.js')).describeCommands(commandsDirectory));
26
+ const indexCommand = commands.find((command) => command.name === 'index');
32
27
  if (indexCommand) {
33
- generateCommand(program, indexCommand, { appComponent });
34
- commands.delete('index');
28
+ generateCommand(program, indexCommand, { commandsDirectory });
35
29
  }
36
- generateCommands(program, commands, { appComponent });
30
+ generateCommands(program, commands.filter((command) => command !== indexCommand), { commandsDirectory });
37
31
  if (this.options.name) {
38
32
  program.name(this.options.name);
39
33
  }
40
- const package_ = await readPackageUp();
41
- const version = this.options.version ?? package_?.packageJson.version;
34
+ let version = this.options.version;
35
+ let description = indexCommand?.description ?? this.options.description;
36
+ // Only for what the app didn't pass: read-package-up loads about 50 ms of modules (ATK-605).
37
+ if (version === undefined || description === undefined) {
38
+ const { readPackageUp } = await import('read-package-up');
39
+ const package_ = await readPackageUp();
40
+ version ??= package_?.packageJson.version;
41
+ description ??= package_?.packageJson.description;
42
+ }
42
43
  if (version) {
43
44
  program.version(version, '-v, --version', 'Show version number');
44
45
  }
45
- const description = indexCommand?.description ?? this.options.description ?? package_?.packageJson.description ?? '';
46
- program.description(description);
46
+ program.description(description ?? '');
47
47
  program.helpOption('-h, --help', 'Show help');
48
48
  if (this.options.helpHeader) {
49
49
  program.addHelpText('beforeAll', this.options.helpHeader);
@@ -57,7 +57,8 @@ export default class Pastel {
57
57
  if (this.options.onUsageError) {
58
58
  routeUsageErrors(program, this.options.onUsageError);
59
59
  }
60
- program.parse(argv);
60
+ // Async, because a command's action imports its module.
61
+ await program.parseAsync(argv);
61
62
  }
62
63
  }
63
64
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/pastel/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/pastel/index.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,19 @@
1
1
  import type { ComponentType } from 'react';
2
2
  import type { ZodArray, ZodBoolean, ZodDefault, ZodEnum, ZodNumber, ZodObject, ZodOptional, ZodSet, ZodString, ZodTuple, ZodTypeAny } from 'zod';
3
3
  import { type AppProps } from './types.js';
4
- export type Command = {
5
- alias?: string;
6
- args?: CommandArguments;
7
- commands?: Map<string, Command>;
8
- component?: ComponentType<AppProps['commandProps']>;
4
+ /**
5
+ * A commander argument as plain data, described from a command's Zod `args` (`generate-arguments.tsx`) and turned
6
+ * back into an `Argument` without Zod (`commander-specs.ts`), so a manifest can carry it (ATK-605).
7
+ */
8
+ export type ArgumentSpec = {
9
+ choices?: string[];
10
+ defaultValue?: unknown;
11
+ defaultValueDescription?: string;
9
12
  description?: string;
10
- isDefault: boolean;
13
+ /** commander's name with its brackets: `<name>`, `[name]`, `[name...]`. */
11
14
  name: string;
12
- options?: CommandOptions;
13
- parentCommand?: Command;
15
+ /** `number`: one number; `number-list`: numbers collected into an array, restarting from the default. */
16
+ parse?: 'number' | 'number-list';
14
17
  };
15
18
  export type CommandArgument = ZodEnum<Record<string, number | string>> | ZodNumber | ZodString;
16
19
  export type CommandArguments = ZodMaybeOptionalOrDefault<CommandArgumentsArray | CommandArgumentsTuple>;
@@ -27,8 +30,36 @@ export type CommandExports = {
27
30
  isDefault?: boolean;
28
31
  options?: CommandOptions;
29
32
  };
33
+ /** Every command in the commands folder, the root's `index` among them, in file-name order. */
34
+ export type CommandManifest = CommandSpec[];
30
35
  export type CommandOption = ZodMaybeOptionalOrDefault<ZodArray<ZodEnum<Record<string, number | string>>>> | ZodMaybeOptionalOrDefault<ZodArray<ZodNumber>> | ZodMaybeOptionalOrDefault<ZodArray<ZodString>> | ZodMaybeOptionalOrDefault<ZodBoolean> | ZodMaybeOptionalOrDefault<ZodEnum<Record<string, number | string>>> | ZodMaybeOptionalOrDefault<ZodNumber> | ZodMaybeOptionalOrDefault<ZodSet<ZodEnum<Record<string, number | string>>>> | ZodMaybeOptionalOrDefault<ZodSet<ZodNumber>> | ZodMaybeOptionalOrDefault<ZodSet<ZodString>> | ZodMaybeOptionalOrDefault<ZodString>;
31
36
  export type CommandOptions = ZodMaybeOptional<ZodObject<Record<string, CommandOption>>>;
37
+ /**
38
+ * A command as plain data: what commander needs to parse it and print its help, without importing its module. `file`
39
+ * is the module (with its component) relative to the commands folder, with a `.js` extension; a folder without an
40
+ * `index` has none.
41
+ */
42
+ export type CommandSpec = {
43
+ alias?: string;
44
+ args?: ArgumentSpec[];
45
+ commands?: CommandSpec[];
46
+ description?: string;
47
+ file?: string;
48
+ isDefault: boolean;
49
+ name: string;
50
+ options?: OptionSpec[];
51
+ };
52
+ /** A commander option as plain data, described from a command's Zod `options` (`generate-options.ts`). */
53
+ export type OptionSpec = {
54
+ choices?: string[];
55
+ /** For `parse: 'set'`, the set's members. */
56
+ defaultValue?: unknown;
57
+ defaultValueDescription?: string;
58
+ description?: string;
59
+ flags: string;
60
+ /** `number`: parsed as a number; `set`: repeated values collected into a `Set`. */
61
+ parse?: 'number' | 'set';
62
+ };
32
63
  export type ZodMaybeOptional<T extends ZodTypeAny> = T | ZodOptional<T>;
33
64
  export type ZodMaybeOptionalOrDefault<T extends ZodTypeAny> = T | ZodDefault<T> | ZodDefault<ZodOptional<T>> | ZodOptional<T> | ZodOptional<ZodDefault<T>>;
34
65
  //# sourceMappingURL=internal-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal-types.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/internal-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"internal-types.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/internal-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Pastel's build-time entry: describe a commands folder as the manifest `Pastel`'s `commands` option takes. It imports
3
+ * every command and Zod, which is why `index.ts` doesn't re-export it (ATK-605).
4
+ */
5
+ import readCommands from './read-commands.js';
6
+ export type { ArgumentSpec, CommandManifest, CommandSpec, OptionSpec } from './internal-types.js';
7
+ export { readCommands as describeCommands };
8
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAElG,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Pastel's build-time entry: describe a commands folder as the manifest `Pastel`'s `commands` option takes. It imports
3
+ * every command and Zod, which is why `index.ts` doesn't re-export it (ATK-605).
4
+ */
5
+ import readCommands from './read-commands.js';
6
+ export { readCommands as describeCommands };
7
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/lib/pastel/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAI9C,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,CAAC"}
@@ -1,4 +1,9 @@
1
- import type { Command } from './internal-types.js';
2
- declare const readCommands: (directory: string) => Promise<Map<string, Command>>;
1
+ import type { CommandManifest } from './internal-types.js';
2
+ /**
3
+ * Import every command in `directory` and describe it as plain data. Files are read in name order, so the manifest
4
+ * and the help list commands the same way on every file system. `prefix` is the folder's path from the commands
5
+ * folder, for `file`.
6
+ */
7
+ declare const readCommands: (directory: string, prefix?: string) => Promise<CommandManifest>;
3
8
  export default readCommands;
4
9
  //# sourceMappingURL=read-commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-commands.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/read-commands.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,qBAAqB,CAAC;AAEnE,QAAA,MAAM,YAAY,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAsD3E,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"read-commands.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/read-commands.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkB,eAAe,EAAe,MAAM,qBAAqB,CAAC;AAKxF;;;;GAIG;AACH,QAAA,MAAM,YAAY,GAAU,WAAW,MAAM,EAAE,eAAW,KAAG,OAAO,CAAC,eAAe,CA8DnF,CAAC;AAiBF,eAAe,YAAY,CAAC"}