@detergent-software/atk 8.9.0-dev.17 → 8.9.0-dev.18
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/CHANGELOG.md +10 -0
- package/build/cli.js +7 -3
- package/build/cli.js.map +1 -1
- package/build/command-manifest.json +1507 -0
- package/build/commands/cache.d.ts +1 -1
- package/build/commands/publish.d.ts +1 -1
- package/build/commands/schema.d.ts +3 -3
- package/build/components/Header.d.ts +2 -3
- package/build/components/Header.d.ts.map +1 -1
- package/build/components/Header.js +2 -9
- package/build/components/Header.js.map +1 -1
- package/build/components/header-art.d.ts +7 -0
- package/build/components/header-art.d.ts.map +1 -0
- package/build/components/header-art.js +14 -0
- package/build/components/header-art.js.map +1 -0
- package/build/lib/pastel/commander-specs.d.ts +7 -0
- package/build/lib/pastel/commander-specs.d.ts.map +1 -0
- package/build/lib/pastel/commander-specs.js +50 -0
- package/build/lib/pastel/commander-specs.js.map +1 -0
- package/build/lib/pastel/generate-arguments.d.ts +3 -3
- package/build/lib/pastel/generate-arguments.d.ts.map +1 -1
- package/build/lib/pastel/generate-arguments.js +25 -22
- package/build/lib/pastel/generate-arguments.js.map +1 -1
- package/build/lib/pastel/generate-command.d.ts +7 -5
- package/build/lib/pastel/generate-command.d.ts.map +1 -1
- package/build/lib/pastel/generate-command.js +32 -62
- package/build/lib/pastel/generate-command.js.map +1 -1
- package/build/lib/pastel/generate-commands.d.ts +3 -5
- package/build/lib/pastel/generate-commands.d.ts.map +1 -1
- package/build/lib/pastel/generate-commands.js +6 -10
- package/build/lib/pastel/generate-commands.js.map +1 -1
- package/build/lib/pastel/generate-options.d.ts +3 -3
- package/build/lib/pastel/generate-options.d.ts.map +1 -1
- package/build/lib/pastel/generate-options.js +16 -13
- package/build/lib/pastel/generate-options.js.map +1 -1
- package/build/lib/pastel/index.d.ts +7 -0
- package/build/lib/pastel/index.d.ts.map +1 -1
- package/build/lib/pastel/index.js +16 -15
- package/build/lib/pastel/index.js.map +1 -1
- package/build/lib/pastel/internal-types.d.ts +39 -8
- package/build/lib/pastel/internal-types.d.ts.map +1 -1
- package/build/lib/pastel/manifest.d.ts +8 -0
- package/build/lib/pastel/manifest.d.ts.map +1 -0
- package/build/lib/pastel/manifest.js +7 -0
- package/build/lib/pastel/manifest.js.map +1 -0
- package/build/lib/pastel/read-commands.d.ts +7 -2
- package/build/lib/pastel/read-commands.d.ts.map +1 -1
- package/build/lib/pastel/read-commands.js +51 -30
- package/build/lib/pastel/read-commands.js.map +1 -1
- package/build/lib/pastel/render-command.d.ts +13 -0
- package/build/lib/pastel/render-command.d.ts.map +1 -0
- package/build/lib/pastel/render-command.js +56 -0
- package/build/lib/pastel/render-command.js.map +1 -0
- package/package.json +5 -4
|
@@ -5,8 +5,8 @@ export declare const options: z.ZodObject<{
|
|
|
5
5
|
}, z.core.$strip>;
|
|
6
6
|
export declare const args: z.ZodTuple<[z.ZodOptional<z.ZodEnum<{
|
|
7
7
|
clear: "clear";
|
|
8
|
-
status: "status";
|
|
9
8
|
clean: "clean";
|
|
9
|
+
status: "status";
|
|
10
10
|
}>>], null>;
|
|
11
11
|
type Props = {
|
|
12
12
|
args: z.infer<typeof args>;
|
|
@@ -3,8 +3,8 @@ export declare const description = "Publish one or more assets, or a bundle, to
|
|
|
3
3
|
export declare const options: z.ZodObject<{
|
|
4
4
|
bump: z.ZodOptional<z.ZodEnum<{
|
|
5
5
|
patch: "patch";
|
|
6
|
-
major: "major";
|
|
7
6
|
minor: "minor";
|
|
7
|
+
major: "major";
|
|
8
8
|
}>>;
|
|
9
9
|
description: z.ZodOptional<z.ZodString>;
|
|
10
10
|
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -10,11 +10,11 @@ export declare const args: z.ZodTuple<[z.ZodEnum<{
|
|
|
10
10
|
hook: "hook";
|
|
11
11
|
"memory-template": "memory-template";
|
|
12
12
|
"mcp-config": "mcp-config";
|
|
13
|
+
config: "config";
|
|
13
14
|
bundle: "bundle";
|
|
14
|
-
registry: "registry";
|
|
15
|
-
lockfile: "lockfile";
|
|
16
15
|
adapter: "adapter";
|
|
17
|
-
|
|
16
|
+
lockfile: "lockfile";
|
|
17
|
+
registry: "registry";
|
|
18
18
|
}>], null>;
|
|
19
19
|
type Props = {
|
|
20
20
|
args: z.infer<typeof args>;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
+
import { ASCII_ART, GRADIENT } from './header-art.js';
|
|
1
2
|
interface HeaderProps {
|
|
2
3
|
/** Version string to display (e.g., "0.1.0") */
|
|
3
4
|
version?: string;
|
|
4
5
|
}
|
|
5
|
-
export
|
|
6
|
-
export declare const GRADIENT: string[];
|
|
6
|
+
export { ASCII_ART, GRADIENT };
|
|
7
7
|
/**
|
|
8
8
|
* Styled app banner with ASCII art and optional version number.
|
|
9
9
|
* Used by the _app.tsx wrapper for consistent branding.
|
|
10
10
|
*/
|
|
11
11
|
export default function Header({ version }: HeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
-
export {};
|
|
13
12
|
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEtD,UAAU,WAAW;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAE/B;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,2CA4BtD"}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Text } from 'ink';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
'\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255a\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255d\u2588\u2588\u2551 \u2588\u2588\u2554\u255d',
|
|
6
|
-
'\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2554\u255d',
|
|
7
|
-
'\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2588\u2588\u2557',
|
|
8
|
-
'\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2557',
|
|
9
|
-
'\u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d',
|
|
10
|
-
];
|
|
11
|
-
export const GRADIENT = ['#FFCC00', '#FFAA00', '#FF8800', '#FF6600', '#FF4400', '#EE3300'];
|
|
3
|
+
import { ASCII_ART, GRADIENT } from './header-art.js';
|
|
4
|
+
export { ASCII_ART, GRADIENT };
|
|
12
5
|
/**
|
|
13
6
|
* Styled app banner with ASCII art and optional version number.
|
|
14
7
|
* Used by the _app.tsx wrapper for consistent branding.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/components/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAOtD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAE/B;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,OAAO,EAAe;IACrD,MAAM,KAAK,GAAG,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;IAEjD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,aAC7B,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1B,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,YAC1B,IAAI,IAD6B,CAAC,CAE9B,CACR,CAAC,GACE,EACN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,cAAc,EAAC,QAAQ,aACjD,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,SAAS,gCAEnB,EACP,MAAC,GAAG,eACD,OAAO,IAAI,MAAC,IAAI,IAAC,QAAQ,wBAAG,OAAO,IAAQ,EAC3C,KAAK,IAAI,CACR,MAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,QAAQ,aACtB,GAAG,aAEC,CACR,IACG,IACF,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The banner's art and colours, with no Ink import, so `cli.tsx` can draw the help header without loading Ink
|
|
3
|
+
* (ATK-605). `Header.tsx` renders the same art.
|
|
4
|
+
*/
|
|
5
|
+
export declare const ASCII_ART: string[];
|
|
6
|
+
export declare const GRADIENT: string[];
|
|
7
|
+
//# sourceMappingURL=header-art.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-art.d.ts","sourceRoot":"","sources":["../../src/components/header-art.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,SAAS,UAOrB,CAAC;AAEF,eAAO,MAAM,QAAQ,UAAqE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The banner's art and colours, with no Ink import, so `cli.tsx` can draw the help header without loading Ink
|
|
3
|
+
* (ATK-605). `Header.tsx` renders the same art.
|
|
4
|
+
*/
|
|
5
|
+
export const ASCII_ART = [
|
|
6
|
+
' █████╗ ████████╗██╗ ██╗',
|
|
7
|
+
'██╔══██╗╚══██╔══╝██║ ██╔╝',
|
|
8
|
+
'███████║ ██║ █████╔╝',
|
|
9
|
+
'██╔══██║ ██║ ██╔═██╗',
|
|
10
|
+
'██║ ██║ ██║ ██║ ██╗',
|
|
11
|
+
'╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝',
|
|
12
|
+
];
|
|
13
|
+
export const GRADIENT = ['#FFCC00', '#FFAA00', '#FF8800', '#FF6600', '#FF4400', '#EE3300'];
|
|
14
|
+
//# sourceMappingURL=header-art.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-art.js","sourceRoot":"","sources":["../../src/components/header-art.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,2BAA2B;IAC3B,2BAA2B;IAC3B,0BAA0B;IAC1B,0BAA0B;IAC1B,2BAA2B;IAC3B,2BAA2B;CAC5B,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Argument, Option } from 'commander';
|
|
2
|
+
import type { ArgumentSpec, OptionSpec } from './internal-types.js';
|
|
3
|
+
/** commander's arguments from their specs, with no Zod (ATK-605). */
|
|
4
|
+
export declare function toArguments(specs: readonly ArgumentSpec[]): Argument[];
|
|
5
|
+
/** commander's options from their specs, with no Zod (ATK-605). */
|
|
6
|
+
export declare function toOptions(specs: readonly OptionSpec[]): Option[];
|
|
7
|
+
//# sourceMappingURL=commander-specs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commander-specs.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/commander-specs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEpE,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,GAAG,QAAQ,EAAE,CA2BtE;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,EAAE,CA8BhE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Argument, Option } from 'commander';
|
|
2
|
+
/** commander's arguments from their specs, with no Zod (ATK-605). */
|
|
3
|
+
export function toArguments(specs) {
|
|
4
|
+
return specs.map((spec) => {
|
|
5
|
+
const argument = new Argument(spec.name, spec.description);
|
|
6
|
+
if (spec.parse === 'number') {
|
|
7
|
+
argument.argParser((value) => Number.parseFloat(value));
|
|
8
|
+
}
|
|
9
|
+
if (spec.parse === 'number-list') {
|
|
10
|
+
// The default itself (not a list equal to it) is what commander passes before the first value.
|
|
11
|
+
argument.argParser((value, previousValue) => {
|
|
12
|
+
const joinPreviousValue = previousValue !== spec.defaultValue;
|
|
13
|
+
return joinPreviousValue ? [...(previousValue ?? []), Number.parseFloat(value)] : [Number.parseFloat(value)];
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
if (spec.choices) {
|
|
17
|
+
argument.choices(spec.choices);
|
|
18
|
+
}
|
|
19
|
+
if (spec.defaultValue !== undefined) {
|
|
20
|
+
argument.default(spec.defaultValue, spec.defaultValueDescription);
|
|
21
|
+
}
|
|
22
|
+
return argument;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/** commander's options from their specs, with no Zod (ATK-605). */
|
|
26
|
+
export function toOptions(specs) {
|
|
27
|
+
return specs.map((spec) => {
|
|
28
|
+
const option = new Option(spec.flags, spec.description);
|
|
29
|
+
// A set's default is carried as its members.
|
|
30
|
+
const defaultValue = spec.parse === 'set' && Array.isArray(spec.defaultValue) ? new Set(spec.defaultValue) : spec.defaultValue;
|
|
31
|
+
if (spec.parse === 'number') {
|
|
32
|
+
option.argParser((value) => Number.parseFloat(value));
|
|
33
|
+
}
|
|
34
|
+
if (spec.choices) {
|
|
35
|
+
option.choices(spec.choices);
|
|
36
|
+
}
|
|
37
|
+
if (spec.parse === 'set') {
|
|
38
|
+
// By identity, unlike upstream: values that add up to the default (`--tag a --tag b`) are still values.
|
|
39
|
+
option.argParser((value, previousValue) => {
|
|
40
|
+
const joinPreviousValue = previousValue instanceof Set && previousValue !== defaultValue;
|
|
41
|
+
return joinPreviousValue ? new Set([...previousValue, value]) : new Set([value]);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (defaultValue !== undefined) {
|
|
45
|
+
option.default(defaultValue, spec.defaultValueDescription);
|
|
46
|
+
}
|
|
47
|
+
return option;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=commander-specs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commander-specs.js","sourceRoot":"","sources":["../../../src/lib/pastel/commander-specs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export default function
|
|
1
|
+
import { type ArgumentSpec, type CommandArguments } from './internal-types.js';
|
|
2
|
+
/** Describe a command's Zod `args` as commander argument specs (`toArguments` in `commander-specs.ts` builds them). */
|
|
3
|
+
export default function describeArguments(argumentsSchema: CommandArguments): ArgumentSpec[];
|
|
4
4
|
//# sourceMappingURL=generate-arguments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-arguments.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/generate-arguments.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate-arguments.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/generate-arguments.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAqB/E,uHAAuH;AACvH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,eAAe,EAAE,gBAAgB,GAAG,YAAY,EAAE,CA0G3F"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { Argument } from 'commander';
|
|
2
1
|
import decamelize from 'decamelize';
|
|
3
|
-
import { isDeepStrictEqual } from 'node:util';
|
|
4
2
|
import { ZodArray, ZodDefault, ZodEnum, ZodNumber, ZodOptional, ZodTuple } from 'zod';
|
|
5
3
|
import {} from './internal-types.js';
|
|
6
4
|
import {} from './types.js';
|
|
@@ -18,7 +16,8 @@ const getDescription = (value) => {
|
|
|
18
16
|
const getDefaultValueDescription = (value) => {
|
|
19
17
|
return getConfig(value)?.defaultValueDescription;
|
|
20
18
|
};
|
|
21
|
-
|
|
19
|
+
/** Describe a command's Zod `args` as commander argument specs (`toArguments` in `commander-specs.ts` builds them). */
|
|
20
|
+
export default function describeArguments(argumentsSchema) {
|
|
22
21
|
let isOptionalByDefault = false;
|
|
23
22
|
let arrayDefaultValue;
|
|
24
23
|
let arrayName = getName(argumentsSchema.description);
|
|
@@ -65,47 +64,51 @@ export default function generateArguments(argumentsSchema) {
|
|
|
65
64
|
name = getName(argumentSchema.description) ?? name;
|
|
66
65
|
}
|
|
67
66
|
name = decamelize(name ?? 'arg', { separator: '-' });
|
|
68
|
-
const argument =
|
|
67
|
+
const argument = spec(isOptional ? `[${name}]` : `<${name}>`, description);
|
|
69
68
|
if (argumentSchema instanceof ZodNumber) {
|
|
70
|
-
argument.
|
|
69
|
+
argument.parse = 'number';
|
|
71
70
|
}
|
|
72
71
|
if (argumentSchema instanceof ZodEnum) {
|
|
73
|
-
argument.choices
|
|
74
|
-
}
|
|
75
|
-
if (defaultValue !== undefined) {
|
|
76
|
-
argument.default(defaultValue, defaultValueDescription);
|
|
72
|
+
argument.choices = Object.values(argumentSchema._zod.def.entries).map(String);
|
|
77
73
|
}
|
|
74
|
+
setDefault(argument, defaultValue, defaultValueDescription);
|
|
78
75
|
arguments_.push(argument);
|
|
79
76
|
}
|
|
80
77
|
const restSchema = argumentsSchema._zod.def.rest;
|
|
81
78
|
if (restSchema) {
|
|
82
79
|
const name = getName(restSchema.description) ?? 'arg';
|
|
83
|
-
const argument =
|
|
80
|
+
const argument = spec(`[${name}...]`, getDescription(restSchema.description));
|
|
81
|
+
// No default, so every value joins the list.
|
|
84
82
|
if (restSchema instanceof ZodNumber) {
|
|
85
|
-
argument.
|
|
86
|
-
return [...(previousValue ?? []), Number.parseFloat(value)];
|
|
87
|
-
});
|
|
83
|
+
argument.parse = 'number-list';
|
|
88
84
|
}
|
|
89
85
|
if (restSchema instanceof ZodEnum) {
|
|
90
|
-
argument.choices
|
|
86
|
+
argument.choices = Object.values(restSchema._zod.def.entries).map(String);
|
|
91
87
|
}
|
|
92
88
|
arguments_.push(argument);
|
|
93
89
|
}
|
|
94
90
|
}
|
|
95
91
|
if (argumentsSchema instanceof ZodArray) {
|
|
96
92
|
const name = arrayName ?? 'arg';
|
|
97
|
-
const argument =
|
|
98
|
-
|
|
99
|
-
argument.default(arrayDefaultValue, arrayDefaultValueDescription);
|
|
100
|
-
}
|
|
93
|
+
const argument = spec(isOptionalByDefault ? `[${name}...]` : `<${name}...>`, arrayDescription);
|
|
94
|
+
setDefault(argument, arrayDefaultValue, arrayDefaultValueDescription);
|
|
101
95
|
if (argumentsSchema.element instanceof ZodNumber) {
|
|
102
|
-
argument.
|
|
103
|
-
const joinPreviousValue = !isDeepStrictEqual(previousValue, arrayDefaultValue);
|
|
104
|
-
return joinPreviousValue ? [...(previousValue ?? []), Number.parseFloat(value)] : [Number.parseFloat(value)];
|
|
105
|
-
});
|
|
96
|
+
argument.parse = 'number-list';
|
|
106
97
|
}
|
|
107
98
|
arguments_.push(argument);
|
|
108
99
|
}
|
|
109
100
|
return arguments_;
|
|
110
101
|
}
|
|
102
|
+
function setDefault(argument, defaultValue, defaultValueDescription) {
|
|
103
|
+
if (defaultValue === undefined) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
argument.defaultValue = defaultValue;
|
|
107
|
+
if (defaultValueDescription) {
|
|
108
|
+
argument.defaultValueDescription = defaultValueDescription;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function spec(name, description) {
|
|
112
|
+
return description ? { description, name } : { name };
|
|
113
|
+
}
|
|
111
114
|
//# sourceMappingURL=generate-arguments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-arguments.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-arguments.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"generate-arguments.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-arguments.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { type Command as CommanderCommand } from 'commander';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import type { CommandSpec } from './internal-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Set up a commander command from its spec. Its module is imported only when the command runs, and Ink with it
|
|
5
|
+
* (`render-command.tsx`), so `--help` and `--version` load neither (ATK-605).
|
|
6
|
+
*/
|
|
7
|
+
declare const generateCommand: (commanderCommand: CommanderCommand, pastelCommand: CommandSpec, { commandsDirectory }: {
|
|
8
|
+
commandsDirectory: string;
|
|
7
9
|
}) => void;
|
|
8
10
|
export default generateCommand;
|
|
9
11
|
//# sourceMappingURL=generate-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-command.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/generate-command.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-command.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/generate-command.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAI7D,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvE;;;GAGG;AACH,QAAA,MAAM,eAAe,GACnB,kBAAkB,gBAAgB,EAClC,eAAe,WAAW,EAC1B,uBAAuB;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,SA0CrD,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -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
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const generateCommand = (commanderCommand, pastelCommand, {
|
|
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
|
|
18
|
-
|
|
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
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
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 {
|
|
36
|
-
if (
|
|
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
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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":"AAAA,OAAO,EAAoC,MAAM,WAAW,CAAC;AAC7D,OAAO,
|
|
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 {
|
|
3
|
-
|
|
4
|
-
|
|
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;
|
|
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
|
-
|
|
5
|
-
|
|
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
|
|
10
|
-
const commanderCommand = new CommanderCommand(name);
|
|
11
|
-
generateCommand(commanderCommand, pastelCommand, {
|
|
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;
|
|
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 {
|
|
2
|
-
|
|
3
|
-
export default function
|
|
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":"
|
|
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
|
-
|
|
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 =
|
|
73
|
+
const option = { flags: flag };
|
|
74
|
+
if (description) {
|
|
75
|
+
option.description = description;
|
|
76
|
+
}
|
|
75
77
|
if (optionSchema instanceof ZodNumber) {
|
|
76
|
-
option.
|
|
78
|
+
option.parse = 'number';
|
|
77
79
|
}
|
|
78
80
|
if (optionSchema instanceof ZodEnum) {
|
|
79
|
-
option.choices
|
|
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.
|
|
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 (
|
|
92
|
-
defaultValueDescription
|
|
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
|
}
|