@detergent-software/atk 8.8.1-dev.2 → 8.8.1-dev.4
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 +13 -0
- package/build/cli.js +1 -1
- package/build/cli.js.map +1 -1
- package/build/commands/_app.d.ts +1 -1
- package/build/commands/_app.d.ts.map +1 -1
- package/build/commands/_app.js.map +1 -1
- package/build/commands/audit.d.ts.map +1 -1
- package/build/commands/audit.js +1 -1
- package/build/commands/audit.js.map +1 -1
- package/build/commands/browse.d.ts.map +1 -1
- package/build/commands/browse.js +1 -1
- package/build/commands/browse.js.map +1 -1
- package/build/commands/cache.d.ts +1 -1
- package/build/commands/cache.d.ts.map +1 -1
- package/build/commands/cache.js +1 -1
- package/build/commands/cache.js.map +1 -1
- package/build/commands/checkout.d.ts.map +1 -1
- package/build/commands/checkout.js +1 -1
- package/build/commands/checkout.js.map +1 -1
- package/build/commands/config.d.ts.map +1 -1
- package/build/commands/config.js +1 -1
- package/build/commands/config.js.map +1 -1
- package/build/commands/deprecate.d.ts.map +1 -1
- package/build/commands/deprecate.js +1 -1
- package/build/commands/deprecate.js.map +1 -1
- package/build/commands/diff.d.ts.map +1 -1
- package/build/commands/diff.js +1 -1
- package/build/commands/diff.js.map +1 -1
- package/build/commands/doctor.d.ts.map +1 -1
- package/build/commands/doctor.js +1 -1
- package/build/commands/doctor.js.map +1 -1
- package/build/commands/drift.d.ts.map +1 -1
- package/build/commands/drift.js +1 -1
- package/build/commands/drift.js.map +1 -1
- package/build/commands/freeze.d.ts.map +1 -1
- package/build/commands/freeze.js +1 -1
- package/build/commands/freeze.js.map +1 -1
- package/build/commands/info.d.ts.map +1 -1
- package/build/commands/info.js +1 -1
- package/build/commands/info.js.map +1 -1
- package/build/commands/init.d.ts.map +1 -1
- package/build/commands/init.js +1 -1
- package/build/commands/init.js.map +1 -1
- package/build/commands/install.d.ts.map +1 -1
- package/build/commands/install.js +1 -1
- package/build/commands/install.js.map +1 -1
- package/build/commands/list.d.ts.map +1 -1
- package/build/commands/list.js +1 -1
- package/build/commands/list.js.map +1 -1
- package/build/commands/login.d.ts.map +1 -1
- package/build/commands/login.js +1 -1
- package/build/commands/login.js.map +1 -1
- package/build/commands/logout.d.ts.map +1 -1
- package/build/commands/logout.js +1 -1
- package/build/commands/logout.js.map +1 -1
- package/build/commands/move.d.ts.map +1 -1
- package/build/commands/move.js +1 -1
- package/build/commands/move.js.map +1 -1
- package/build/commands/outdated.d.ts.map +1 -1
- package/build/commands/outdated.js +1 -1
- package/build/commands/outdated.js.map +1 -1
- package/build/commands/pin.d.ts.map +1 -1
- package/build/commands/pin.js +1 -1
- package/build/commands/pin.js.map +1 -1
- package/build/commands/promote.d.ts.map +1 -1
- package/build/commands/promote.js +1 -1
- package/build/commands/promote.js.map +1 -1
- package/build/commands/prune.d.ts.map +1 -1
- package/build/commands/prune.js +1 -1
- package/build/commands/prune.js.map +1 -1
- package/build/commands/publish.d.ts.map +1 -1
- package/build/commands/publish.js +1 -1
- package/build/commands/publish.js.map +1 -1
- package/build/commands/register.d.ts.map +1 -1
- package/build/commands/register.js +1 -1
- package/build/commands/register.js.map +1 -1
- package/build/commands/release-notes.d.ts.map +1 -1
- package/build/commands/release-notes.js +1 -1
- package/build/commands/release-notes.js.map +1 -1
- package/build/commands/reviewer.d.ts.map +1 -1
- package/build/commands/reviewer.js +1 -1
- package/build/commands/reviewer.js.map +1 -1
- package/build/commands/schema.d.ts.map +1 -1
- package/build/commands/schema.js +1 -1
- package/build/commands/schema.js.map +1 -1
- package/build/commands/search.d.ts.map +1 -1
- package/build/commands/search.js +1 -1
- package/build/commands/search.js.map +1 -1
- package/build/commands/setup.d.ts.map +1 -1
- package/build/commands/setup.js +1 -1
- package/build/commands/setup.js.map +1 -1
- package/build/commands/sync.d.ts.map +1 -1
- package/build/commands/sync.js +1 -1
- package/build/commands/sync.js.map +1 -1
- package/build/commands/thaw.d.ts.map +1 -1
- package/build/commands/thaw.js +1 -1
- package/build/commands/thaw.js.map +1 -1
- package/build/commands/uninstall.d.ts.map +1 -1
- package/build/commands/uninstall.js +1 -1
- package/build/commands/uninstall.js.map +1 -1
- package/build/commands/unpin.d.ts.map +1 -1
- package/build/commands/unpin.js +1 -1
- package/build/commands/unpin.js.map +1 -1
- package/build/commands/unpublish.d.ts.map +1 -1
- package/build/commands/unpublish.js +1 -1
- package/build/commands/unpublish.js.map +1 -1
- package/build/commands/update.d.ts.map +1 -1
- package/build/commands/update.js +1 -1
- package/build/commands/update.js.map +1 -1
- package/build/commands/whoami.d.ts.map +1 -1
- package/build/commands/whoami.js +1 -1
- package/build/commands/whoami.js.map +1 -1
- package/build/commands/why.d.ts.map +1 -1
- package/build/commands/why.js +1 -1
- package/build/commands/why.js.map +1 -1
- package/build/hooks/usePublishState.d.ts.map +1 -1
- package/build/hooks/usePublishState.js +9 -1
- package/build/hooks/usePublishState.js.map +1 -1
- package/build/lib/atk-schemas/index.d.ts +1 -0
- package/build/lib/atk-schemas/index.d.ts.map +1 -1
- package/build/lib/atk-schemas/index.js +1 -0
- package/build/lib/atk-schemas/index.js.map +1 -1
- package/build/lib/atk-schemas/tools.d.ts +7 -0
- package/build/lib/atk-schemas/tools.d.ts.map +1 -0
- package/build/lib/atk-schemas/tools.js +8 -0
- package/build/lib/atk-schemas/tools.js.map +1 -0
- package/build/lib/pastel/_app.d.ts +3 -0
- package/build/lib/pastel/_app.d.ts.map +1 -0
- package/build/lib/pastel/_app.js +5 -0
- package/build/lib/pastel/_app.js.map +1 -0
- package/build/lib/pastel/generate-arguments.d.ts +4 -0
- package/build/lib/pastel/generate-arguments.d.ts.map +1 -0
- package/build/lib/pastel/generate-arguments.js +111 -0
- package/build/lib/pastel/generate-arguments.js.map +1 -0
- package/build/lib/pastel/generate-command.d.ts +9 -0
- package/build/lib/pastel/generate-command.d.ts.map +1 -0
- package/build/lib/pastel/generate-command.js +85 -0
- package/build/lib/pastel/generate-command.js.map +1 -0
- package/build/lib/pastel/generate-commands.d.ts +9 -0
- package/build/lib/pastel/generate-commands.d.ts.map +1 -0
- package/build/lib/pastel/generate-commands.js +23 -0
- package/build/lib/pastel/generate-commands.js.map +1 -0
- package/build/lib/pastel/generate-options.d.ts +4 -0
- package/build/lib/pastel/generate-options.d.ts.map +1 -0
- package/build/lib/pastel/generate-options.js +100 -0
- package/build/lib/pastel/generate-options.js.map +1 -0
- package/build/lib/pastel/index.d.ts +41 -0
- package/build/lib/pastel/index.d.ts.map +1 -0
- package/build/lib/pastel/index.js +59 -0
- package/build/lib/pastel/index.js.map +1 -0
- package/build/lib/pastel/internal-types.d.ts +34 -0
- package/build/lib/pastel/internal-types.d.ts.map +1 -0
- package/build/lib/pastel/internal-types.js +2 -0
- package/build/lib/pastel/internal-types.js.map +1 -0
- package/build/lib/pastel/read-commands.d.ts +4 -0
- package/build/lib/pastel/read-commands.d.ts.map +1 -0
- package/build/lib/pastel/read-commands.js +59 -0
- package/build/lib/pastel/read-commands.js.map +1 -0
- package/build/lib/pastel/read-custom-app.d.ts +4 -0
- package/build/lib/pastel/read-custom-app.d.ts.map +1 -0
- package/build/lib/pastel/read-custom-app.js +29 -0
- package/build/lib/pastel/read-custom-app.js.map +1 -0
- package/build/lib/pastel/types.d.ts +70 -0
- package/build/lib/pastel/types.d.ts.map +1 -0
- package/build/lib/pastel/types.js +2 -0
- package/build/lib/pastel/types.js.map +1 -0
- package/build/lib/publisher.d.ts +5 -0
- package/build/lib/publisher.d.ts.map +1 -1
- package/build/lib/publisher.js +19 -0
- package/build/lib/publisher.js.map +1 -1
- package/build/lib/schemas/index.d.ts +1 -1
- package/build/lib/schemas/index.d.ts.map +1 -1
- package/build/lib/schemas/index.js +1 -1
- package/build/lib/schemas/index.js.map +1 -1
- package/package.json +10 -3
- package/src/lib/pastel/LICENSE +9 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { Argument } from 'commander';
|
|
2
|
+
import decamelize from 'decamelize';
|
|
3
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
4
|
+
import { ZodArray, ZodDefault, ZodEnum, ZodNumber, ZodOptional, ZodTuple } from 'zod';
|
|
5
|
+
import {} from './internal-types.js';
|
|
6
|
+
import {} from './types.js';
|
|
7
|
+
const getConfig = (value) => {
|
|
8
|
+
return value?.startsWith('__pastel_argument_config__')
|
|
9
|
+
? JSON.parse(value.replace('__pastel_argument_config__', ''))
|
|
10
|
+
: undefined;
|
|
11
|
+
};
|
|
12
|
+
const getName = (value) => {
|
|
13
|
+
return getConfig(value)?.name ?? value;
|
|
14
|
+
};
|
|
15
|
+
const getDescription = (value) => {
|
|
16
|
+
return getConfig(value)?.description;
|
|
17
|
+
};
|
|
18
|
+
const getDefaultValueDescription = (value) => {
|
|
19
|
+
return getConfig(value)?.defaultValueDescription;
|
|
20
|
+
};
|
|
21
|
+
export default function generateArguments(argumentsSchema) {
|
|
22
|
+
let isOptionalByDefault = false;
|
|
23
|
+
let arrayDefaultValue;
|
|
24
|
+
let arrayName = getName(argumentsSchema.description);
|
|
25
|
+
const arrayDescription = getDescription(argumentsSchema.description);
|
|
26
|
+
const arrayDefaultValueDescription = getDefaultValueDescription(argumentsSchema.description);
|
|
27
|
+
if (argumentsSchema instanceof ZodOptional) {
|
|
28
|
+
isOptionalByDefault = true;
|
|
29
|
+
argumentsSchema = argumentsSchema._zod.def.innerType;
|
|
30
|
+
arrayName = argumentsSchema.description ?? arrayName;
|
|
31
|
+
}
|
|
32
|
+
if (argumentsSchema instanceof ZodDefault) {
|
|
33
|
+
isOptionalByDefault = true;
|
|
34
|
+
arrayDefaultValue = argumentsSchema._zod.def.defaultValue;
|
|
35
|
+
argumentsSchema = argumentsSchema._zod.def.innerType;
|
|
36
|
+
arrayName = argumentsSchema.description ?? arrayName;
|
|
37
|
+
}
|
|
38
|
+
if (argumentsSchema instanceof ZodOptional) {
|
|
39
|
+
isOptionalByDefault = true;
|
|
40
|
+
argumentsSchema = argumentsSchema._zod.def.innerType;
|
|
41
|
+
arrayName = argumentsSchema.description ?? arrayName;
|
|
42
|
+
}
|
|
43
|
+
const arguments_ = [];
|
|
44
|
+
if (argumentsSchema instanceof ZodTuple) {
|
|
45
|
+
for (let argumentSchema of argumentsSchema._zod.def.items) {
|
|
46
|
+
let isOptional = isOptionalByDefault;
|
|
47
|
+
let defaultValue;
|
|
48
|
+
const defaultValueDescription = getDefaultValueDescription(argumentSchema.description);
|
|
49
|
+
let name = getName(argumentSchema.description);
|
|
50
|
+
const description = getDescription(argumentSchema.description);
|
|
51
|
+
if (argumentSchema instanceof ZodOptional) {
|
|
52
|
+
isOptional = true;
|
|
53
|
+
argumentSchema = argumentSchema._zod.def.innerType;
|
|
54
|
+
name = getName(argumentSchema.description) ?? name;
|
|
55
|
+
}
|
|
56
|
+
if (argumentSchema instanceof ZodDefault) {
|
|
57
|
+
isOptional = true;
|
|
58
|
+
defaultValue = argumentSchema._zod.def.defaultValue;
|
|
59
|
+
argumentSchema = argumentSchema._zod.def.innerType;
|
|
60
|
+
name = getName(argumentSchema.description) ?? name;
|
|
61
|
+
}
|
|
62
|
+
if (argumentSchema instanceof ZodOptional) {
|
|
63
|
+
isOptional = true;
|
|
64
|
+
argumentSchema = argumentSchema._zod.def.innerType;
|
|
65
|
+
name = getName(argumentSchema.description) ?? name;
|
|
66
|
+
}
|
|
67
|
+
name = decamelize(name ?? 'arg', { separator: '-' });
|
|
68
|
+
const argument = new Argument(isOptional ? `[${name}]` : `<${name}>`, description);
|
|
69
|
+
if (argumentSchema instanceof ZodNumber) {
|
|
70
|
+
argument.argParser((value) => Number.parseFloat(value));
|
|
71
|
+
}
|
|
72
|
+
if (argumentSchema instanceof ZodEnum) {
|
|
73
|
+
argument.choices(Object.values(argumentSchema._zod.def.entries).map(String));
|
|
74
|
+
}
|
|
75
|
+
if (defaultValue !== undefined) {
|
|
76
|
+
argument.default(defaultValue, defaultValueDescription);
|
|
77
|
+
}
|
|
78
|
+
arguments_.push(argument);
|
|
79
|
+
}
|
|
80
|
+
const restSchema = argumentsSchema._zod.def.rest;
|
|
81
|
+
if (restSchema) {
|
|
82
|
+
const name = getName(restSchema.description) ?? 'arg';
|
|
83
|
+
const argument = new Argument(`[${name}...]`, getDescription(restSchema.description));
|
|
84
|
+
if (restSchema instanceof ZodNumber) {
|
|
85
|
+
argument.argParser((value, previousValue) => {
|
|
86
|
+
return [...(previousValue ?? []), Number.parseFloat(value)];
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
if (restSchema instanceof ZodEnum) {
|
|
90
|
+
argument.choices(Object.values(restSchema._zod.def.entries).map(String));
|
|
91
|
+
}
|
|
92
|
+
arguments_.push(argument);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (argumentsSchema instanceof ZodArray) {
|
|
96
|
+
const name = arrayName ?? 'arg';
|
|
97
|
+
const argument = new Argument(isOptionalByDefault ? `[${name}...]` : `<${name}...>`, arrayDescription);
|
|
98
|
+
if (arrayDefaultValue !== undefined) {
|
|
99
|
+
argument.default(arrayDefaultValue, arrayDefaultValueDescription);
|
|
100
|
+
}
|
|
101
|
+
if (argumentsSchema.element instanceof ZodNumber) {
|
|
102
|
+
argument.argParser((value, previousValue) => {
|
|
103
|
+
const joinPreviousValue = !isDeepStrictEqual(previousValue, arrayDefaultValue);
|
|
104
|
+
return joinPreviousValue ? [...(previousValue ?? []), Number.parseFloat(value)] : [Number.parseFloat(value)];
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
arguments_.push(argument);
|
|
108
|
+
}
|
|
109
|
+
return arguments_;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=generate-arguments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-arguments.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-arguments.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type 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 generateCommand: (commanderCommand: CommanderCommand, pastelCommand: Command, { appComponent }: {
|
|
6
|
+
appComponent: ComponentType<AppProps>;
|
|
7
|
+
}) => void;
|
|
8
|
+
export default generateCommand;
|
|
9
|
+
//# sourceMappingURL=generate-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-command.d.ts","sourceRoot":"","sources":["../../../src/lib/pastel/generate-command.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,IAAI,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAc,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAKlD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,QAAA,MAAM,eAAe,GACnB,kBAAkB,gBAAgB,EAClC,eAAe,OAAO,EACtB,kBAAkB;IAAE,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CAAE,SAyG5D,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { StatusMessage } from '@inkjs/ui';
|
|
3
|
+
import {} from 'commander';
|
|
4
|
+
import { render } from 'ink';
|
|
5
|
+
import process from 'node:process';
|
|
6
|
+
import React, {} from 'react';
|
|
7
|
+
import { fromZodError } from 'zod-validation-error';
|
|
8
|
+
import generateArguments from './generate-arguments.js';
|
|
9
|
+
import generateOptions from './generate-options.js';
|
|
10
|
+
import {} from './internal-types.js';
|
|
11
|
+
import {} from './types.js';
|
|
12
|
+
const generateCommand = (commanderCommand, pastelCommand, { appComponent }) => {
|
|
13
|
+
commanderCommand.helpOption('-h, --help', 'Show help');
|
|
14
|
+
if (pastelCommand.description) {
|
|
15
|
+
commanderCommand.description(pastelCommand.description);
|
|
16
|
+
}
|
|
17
|
+
if (pastelCommand.alias) {
|
|
18
|
+
commanderCommand.alias(pastelCommand.alias);
|
|
19
|
+
}
|
|
20
|
+
const optionsSchema = pastelCommand.options;
|
|
21
|
+
if (optionsSchema) {
|
|
22
|
+
const options = generateOptions(optionsSchema);
|
|
23
|
+
for (const option of options) {
|
|
24
|
+
commanderCommand.addOption(option);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
let hasVariadicArgument = false;
|
|
28
|
+
const argumentsSchema = pastelCommand.args;
|
|
29
|
+
if (argumentsSchema) {
|
|
30
|
+
const arguments_ = generateArguments(argumentsSchema);
|
|
31
|
+
for (const argument of arguments_) {
|
|
32
|
+
if (argument.variadic) {
|
|
33
|
+
hasVariadicArgument = true;
|
|
34
|
+
}
|
|
35
|
+
commanderCommand.addArgument(argument);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const { component } = pastelCommand;
|
|
39
|
+
if (component) {
|
|
40
|
+
commanderCommand.action((...input) => {
|
|
41
|
+
// Remove the last argument, which is an instance of Commander command
|
|
42
|
+
input.pop();
|
|
43
|
+
const options = input.pop();
|
|
44
|
+
let parsedOptions = {};
|
|
45
|
+
if (pastelCommand.options) {
|
|
46
|
+
const result = pastelCommand.options.safeParse(options);
|
|
47
|
+
if (result.success) {
|
|
48
|
+
parsedOptions = result.data ?? {};
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
render(_jsx(StatusMessage, { variant: 'error', children: fromZodError(result.error, {
|
|
52
|
+
maxIssuesInMessage: 1,
|
|
53
|
+
prefix: '',
|
|
54
|
+
prefixSeparator: '',
|
|
55
|
+
}).message }));
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
let arguments_ = [];
|
|
60
|
+
if (pastelCommand.args) {
|
|
61
|
+
const result = pastelCommand.args.safeParse(hasVariadicArgument ? input.flat() : input);
|
|
62
|
+
if (result.success) {
|
|
63
|
+
arguments_ = result.data ?? [];
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
render(_jsx(StatusMessage, { variant: 'error', children: fromZodError(result.error, {
|
|
67
|
+
maxIssuesInMessage: 1,
|
|
68
|
+
prefix: '',
|
|
69
|
+
prefixSeparator: '',
|
|
70
|
+
}).message }));
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
render(React.createElement(appComponent, {
|
|
75
|
+
commandProps: {
|
|
76
|
+
args: arguments_,
|
|
77
|
+
options: parsedOptions,
|
|
78
|
+
},
|
|
79
|
+
Component: component,
|
|
80
|
+
}));
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
export default generateCommand;
|
|
85
|
+
//# sourceMappingURL=generate-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-command.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-command.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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>;
|
|
7
|
+
}) => void;
|
|
8
|
+
export default generateCommands;
|
|
9
|
+
//# sourceMappingURL=generate-commands.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Command as CommanderCommand } from 'commander';
|
|
2
|
+
import {} from 'react';
|
|
3
|
+
import generateCommand from './generate-command.js';
|
|
4
|
+
import {} from './types.js';
|
|
5
|
+
const generateCommands = (parentCommanderCommand, pastelCommands, { appComponent }) => {
|
|
6
|
+
if (pastelCommands.size > 0) {
|
|
7
|
+
parentCommanderCommand.addHelpCommand('help [command]', 'Show help for command');
|
|
8
|
+
}
|
|
9
|
+
for (const [name, pastelCommand] of pastelCommands) {
|
|
10
|
+
const commanderCommand = new CommanderCommand(name);
|
|
11
|
+
generateCommand(commanderCommand, pastelCommand, { appComponent });
|
|
12
|
+
if (pastelCommand.commands) {
|
|
13
|
+
generateCommands(commanderCommand, pastelCommand.commands, {
|
|
14
|
+
appComponent,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
parentCommanderCommand.addCommand(commanderCommand, {
|
|
18
|
+
isDefault: pastelCommand.isDefault,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
export default generateCommands;
|
|
23
|
+
//# sourceMappingURL=generate-commands.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { Option } from 'commander';
|
|
2
|
+
import decamelize from 'decamelize';
|
|
3
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
4
|
+
import plur from 'plur';
|
|
5
|
+
import { ZodArray, ZodBoolean, ZodDefault, ZodEnum, ZodNumber, ZodOptional, ZodSet } from 'zod';
|
|
6
|
+
import {} from './internal-types.js';
|
|
7
|
+
import {} from './types.js';
|
|
8
|
+
const getConfig = (value) => {
|
|
9
|
+
return value?.startsWith('__pastel_option_config__')
|
|
10
|
+
? JSON.parse(value.replace('__pastel_option_config__', ''))
|
|
11
|
+
: undefined;
|
|
12
|
+
};
|
|
13
|
+
const getDescription = (value) => {
|
|
14
|
+
return getConfig(value)?.description ?? value;
|
|
15
|
+
};
|
|
16
|
+
const getDefaultValueDescription = (value) => {
|
|
17
|
+
return getConfig(value)?.defaultValueDescription;
|
|
18
|
+
};
|
|
19
|
+
const getValueDescription = (value) => {
|
|
20
|
+
return getConfig(value)?.valueDescription;
|
|
21
|
+
};
|
|
22
|
+
const getAlias = (value) => {
|
|
23
|
+
return getConfig(value)?.alias;
|
|
24
|
+
};
|
|
25
|
+
export default function generateOptions(optionsSchema) {
|
|
26
|
+
let isOptionalByDefault = false;
|
|
27
|
+
if (optionsSchema instanceof ZodOptional) {
|
|
28
|
+
isOptionalByDefault = true;
|
|
29
|
+
optionsSchema = optionsSchema._zod.def.innerType;
|
|
30
|
+
}
|
|
31
|
+
const options = [];
|
|
32
|
+
for (let [name, optionSchema] of Object.entries(optionsSchema._zod.def.shape)) {
|
|
33
|
+
name = decamelize(name, { separator: '-' });
|
|
34
|
+
let defaultValue;
|
|
35
|
+
let isOptional = isOptionalByDefault;
|
|
36
|
+
// Collect description before unwrapping (for .default().describe() pattern)
|
|
37
|
+
let schemaDescription = optionSchema.description;
|
|
38
|
+
// Unwrap zod.string().optional()
|
|
39
|
+
if (optionSchema instanceof ZodOptional) {
|
|
40
|
+
isOptional = true;
|
|
41
|
+
optionSchema = optionSchema._zod.def.innerType;
|
|
42
|
+
}
|
|
43
|
+
// Unwrap zod.string().optional().default()
|
|
44
|
+
if (optionSchema instanceof ZodDefault) {
|
|
45
|
+
isOptional = true;
|
|
46
|
+
defaultValue = optionSchema._zod.def.defaultValue;
|
|
47
|
+
optionSchema = optionSchema._zod.def.innerType;
|
|
48
|
+
}
|
|
49
|
+
// Unwrap zod.string().default().optional()
|
|
50
|
+
if (optionSchema instanceof ZodOptional) {
|
|
51
|
+
isOptional = true;
|
|
52
|
+
optionSchema = optionSchema._zod.def.innerType;
|
|
53
|
+
}
|
|
54
|
+
// Use description from inner schema if not found on outer (for .describe().default() pattern)
|
|
55
|
+
schemaDescription ||= optionSchema.description;
|
|
56
|
+
let defaultValueDescription = getDefaultValueDescription(schemaDescription);
|
|
57
|
+
const description = getDescription(schemaDescription);
|
|
58
|
+
let valueDescription = getValueDescription(schemaDescription);
|
|
59
|
+
const alias = getAlias(schemaDescription);
|
|
60
|
+
let flag = `--${name}`;
|
|
61
|
+
if (optionSchema instanceof ZodBoolean && defaultValue === true) {
|
|
62
|
+
flag = `--no-${name}`;
|
|
63
|
+
}
|
|
64
|
+
else if (alias) {
|
|
65
|
+
flag = `-${alias}, --${name}`;
|
|
66
|
+
}
|
|
67
|
+
const expectsValue = !(optionSchema instanceof ZodBoolean);
|
|
68
|
+
if (expectsValue) {
|
|
69
|
+
const isVariadic = optionSchema instanceof ZodArray || optionSchema instanceof ZodSet;
|
|
70
|
+
valueDescription ||= isVariadic ? plur(name) : name;
|
|
71
|
+
const rest = isVariadic ? '...' : '';
|
|
72
|
+
flag += isOptional || defaultValue ? ` [${valueDescription}${rest}]` : ` <${valueDescription}${rest}>`;
|
|
73
|
+
}
|
|
74
|
+
const option = new Option(flag, description);
|
|
75
|
+
if (optionSchema instanceof ZodNumber) {
|
|
76
|
+
option.argParser((value) => Number.parseFloat(value));
|
|
77
|
+
}
|
|
78
|
+
if (optionSchema instanceof ZodEnum) {
|
|
79
|
+
option.choices(Object.values(optionSchema._zod.def.entries).map(String));
|
|
80
|
+
}
|
|
81
|
+
if (optionSchema instanceof ZodBoolean && defaultValue === undefined) {
|
|
82
|
+
defaultValue = false;
|
|
83
|
+
}
|
|
84
|
+
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
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (defaultValue !== undefined) {
|
|
91
|
+
if (!defaultValueDescription && defaultValue instanceof Set) {
|
|
92
|
+
defaultValueDescription = JSON.stringify([...defaultValue]);
|
|
93
|
+
}
|
|
94
|
+
option.default(defaultValue, defaultValueDescription);
|
|
95
|
+
}
|
|
96
|
+
options.push(option);
|
|
97
|
+
}
|
|
98
|
+
return options;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=generate-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-options.js","sourceRoot":"","sources":["../../../src/lib/pastel/generate-options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { CommandArgumentConfig, CommandOptionConfig } from './types.js';
|
|
2
|
+
export type Options = {
|
|
3
|
+
/**
|
|
4
|
+
* Description. Defaults to `description` in the nearest package.json.
|
|
5
|
+
*/
|
|
6
|
+
description?: string;
|
|
7
|
+
/**
|
|
8
|
+
* Text to display before all help output.
|
|
9
|
+
*/
|
|
10
|
+
helpHeader?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Pass in [`import.meta`](https://nodejs.org/dist/latest/docs/api/esm.html#esm_import_meta). This is used to find the `commands` directory.
|
|
13
|
+
*/
|
|
14
|
+
importMeta: ImportMeta;
|
|
15
|
+
/**
|
|
16
|
+
* Program name. Defaults to `name` in the nearest package.json or the name of the executable.
|
|
17
|
+
*/
|
|
18
|
+
name?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Version. Defaults to `version` in the nearest package.json.
|
|
21
|
+
*/
|
|
22
|
+
version?: string;
|
|
23
|
+
};
|
|
24
|
+
export default class Pastel {
|
|
25
|
+
private readonly options;
|
|
26
|
+
constructor(options: Options);
|
|
27
|
+
/**
|
|
28
|
+
* Run the app.
|
|
29
|
+
*/
|
|
30
|
+
run(argv?: string[]): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Set additional metadata for an argument. Must be used as an argument to `describe` function from Zod.
|
|
34
|
+
*/
|
|
35
|
+
export declare function argument(config: CommandArgumentConfig): string;
|
|
36
|
+
/**
|
|
37
|
+
* Set additional metadata for an option. Must be used as an argument to `describe` function from Zod.
|
|
38
|
+
*/
|
|
39
|
+
export declare function option(config: CommandOptionConfig): string;
|
|
40
|
+
export * from './types.js';
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,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;CAwCxC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,qBAAqB,UAErD;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,mBAAmB,UAEjD;AAED,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { readPackageUp } from 'read-package-up';
|
|
5
|
+
import App from './_app.js';
|
|
6
|
+
import generateCommand from './generate-command.js';
|
|
7
|
+
import generateCommands from './generate-commands.js';
|
|
8
|
+
import readCommands from './read-commands.js';
|
|
9
|
+
import readCustomApp from './read-custom-app.js';
|
|
10
|
+
export default class Pastel {
|
|
11
|
+
options;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.options = options;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Run the app.
|
|
17
|
+
*/
|
|
18
|
+
async run(argv = process.argv) {
|
|
19
|
+
const commandsDirectory = fileURLToPath(new URL('commands', this.options.importMeta.url));
|
|
20
|
+
const appComponent = (await readCustomApp(commandsDirectory)) ?? App;
|
|
21
|
+
const program = new Command();
|
|
22
|
+
const commands = await readCommands(commandsDirectory);
|
|
23
|
+
const indexCommand = commands.get('index');
|
|
24
|
+
if (indexCommand) {
|
|
25
|
+
generateCommand(program, indexCommand, { appComponent });
|
|
26
|
+
commands.delete('index');
|
|
27
|
+
}
|
|
28
|
+
generateCommands(program, commands, { appComponent });
|
|
29
|
+
if (this.options.name) {
|
|
30
|
+
program.name(this.options.name);
|
|
31
|
+
}
|
|
32
|
+
const package_ = await readPackageUp();
|
|
33
|
+
const version = this.options.version ?? package_?.packageJson.version;
|
|
34
|
+
if (version) {
|
|
35
|
+
program.version(version, '-v, --version', 'Show version number');
|
|
36
|
+
}
|
|
37
|
+
const description = indexCommand?.description ?? this.options.description ?? package_?.packageJson.description ?? '';
|
|
38
|
+
program.description(description);
|
|
39
|
+
program.helpOption('-h, --help', 'Show help');
|
|
40
|
+
if (this.options.helpHeader) {
|
|
41
|
+
program.addHelpText('beforeAll', this.options.helpHeader);
|
|
42
|
+
}
|
|
43
|
+
program.parse(argv);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Set additional metadata for an argument. Must be used as an argument to `describe` function from Zod.
|
|
48
|
+
*/
|
|
49
|
+
export function argument(config) {
|
|
50
|
+
return `__pastel_argument_config__${JSON.stringify(config)}`;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Set additional metadata for an option. Must be used as an argument to `describe` function from Zod.
|
|
54
|
+
*/
|
|
55
|
+
export function option(config) {
|
|
56
|
+
return `__pastel_option_config__${JSON.stringify(config)}`;
|
|
57
|
+
}
|
|
58
|
+
export * from './types.js';
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/pastel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,GAAG,MAAM,WAAW,CAAC;AAC5B,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,gBAAgB,MAAM,wBAAwB,CAAC;AACtD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AA6BjD,MAAM,CAAC,OAAO,OAAO,MAAM;IACR,OAAO,CAAU;IAElC,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,OAAiB,OAAO,CAAC,IAAI;QACrC,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1F,MAAM,YAAY,GAAG,CAAC,MAAM,aAAa,CAAC,iBAAiB,CAAC,CAAC,IAAI,GAAG,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAE9B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE3C,IAAI,YAAY,EAAE,CAAC;YACjB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;YACzD,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAED,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;QAEtD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;QAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC;QAEtE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,WAAW,GACf,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,QAAQ,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC;QAEnG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACjC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAE9C,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,MAA6B;IACpD,OAAO,6BAA6B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,MAA2B;IAChD,OAAO,2BAA2B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ComponentType } from 'react';
|
|
2
|
+
import type { ZodArray, ZodBoolean, ZodDefault, ZodEnum, ZodNumber, ZodObject, ZodOptional, ZodSet, ZodString, ZodTuple, ZodTypeAny } from 'zod';
|
|
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']>;
|
|
9
|
+
description?: string;
|
|
10
|
+
isDefault: boolean;
|
|
11
|
+
name: string;
|
|
12
|
+
options?: CommandOptions;
|
|
13
|
+
parentCommand?: Command;
|
|
14
|
+
};
|
|
15
|
+
export type CommandArgument = ZodEnum<Record<string, number | string>> | ZodNumber | ZodString;
|
|
16
|
+
export type CommandArguments = ZodMaybeOptionalOrDefault<CommandArgumentsArray | CommandArgumentsTuple>;
|
|
17
|
+
export type CommandArgumentsArray = ZodArray<ZodEnum<Record<string, number | string>>> | ZodArray<ZodNumber> | ZodArray<ZodString>;
|
|
18
|
+
export type CommandArgumentsTuple = ZodTuple<[
|
|
19
|
+
ZodMaybeOptionalOrDefault<CommandArgument>,
|
|
20
|
+
...Array<ZodMaybeOptionalOrDefault<CommandArgument>>
|
|
21
|
+
], CommandArgument | null>;
|
|
22
|
+
export type CommandExports = {
|
|
23
|
+
alias?: string;
|
|
24
|
+
args?: CommandArguments;
|
|
25
|
+
default?: ComponentType<AppProps['commandProps']>;
|
|
26
|
+
description?: string;
|
|
27
|
+
isDefault?: boolean;
|
|
28
|
+
options?: CommandOptions;
|
|
29
|
+
};
|
|
30
|
+
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
|
+
export type CommandOptions = ZodMaybeOptional<ZodObject<Record<string, CommandOption>>>;
|
|
32
|
+
export type ZodMaybeOptional<T extends ZodTypeAny> = T | ZodOptional<T>;
|
|
33
|
+
export type ZodMaybeOptionalOrDefault<T extends ZodTypeAny> = T | ZodDefault<T> | ZodDefault<ZodOptional<T>> | ZodOptional<T> | ZodOptional<ZodDefault<T>>;
|
|
34
|
+
//# sourceMappingURL=internal-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"internal-types.js","sourceRoot":"","sources":["../../../src/lib/pastel/internal-types.ts"],"names":[],"mappings":"AAeA,OAAO,EAAiB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
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
|
+
};
|
|
9
|
+
import decamelize from 'decamelize';
|
|
10
|
+
import fs from 'node:fs/promises';
|
|
11
|
+
import path from 'node:path';
|
|
12
|
+
import { pathToFileURL } from 'node:url';
|
|
13
|
+
const readCommands = async (directory) => {
|
|
14
|
+
const commands = new Map();
|
|
15
|
+
const files = await fs.readdir(directory);
|
|
16
|
+
for (const file of files) {
|
|
17
|
+
if (file.startsWith('_app')) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
const filePath = path.join(directory, file);
|
|
21
|
+
const stat = await fs.stat(filePath);
|
|
22
|
+
if (stat.isDirectory()) {
|
|
23
|
+
const subCommands = await readCommands(filePath);
|
|
24
|
+
const indexCommand = subCommands.get('index');
|
|
25
|
+
if (indexCommand) {
|
|
26
|
+
indexCommand.name = file;
|
|
27
|
+
indexCommand.commands = subCommands;
|
|
28
|
+
subCommands.delete('index');
|
|
29
|
+
commands.set(file, indexCommand);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
const command = indexCommand ?? {
|
|
33
|
+
commands: subCommands,
|
|
34
|
+
isDefault: false,
|
|
35
|
+
name: file,
|
|
36
|
+
};
|
|
37
|
+
commands.set(file, command);
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (!/\.(js|ts)x?$/.test(file) || file.endsWith('.d.ts')) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const fileUrl = pathToFileURL(filePath);
|
|
44
|
+
const m = (await import(__rewriteRelativeImportExtension(fileUrl.href)));
|
|
45
|
+
const name = decamelize(file.replace(/\.(js|ts)x?$/, ''), { separator: '-' });
|
|
46
|
+
commands.set(name, {
|
|
47
|
+
alias: m.alias,
|
|
48
|
+
args: m.args,
|
|
49
|
+
component: m.default,
|
|
50
|
+
description: m.description,
|
|
51
|
+
isDefault: m.isDefault ?? false,
|
|
52
|
+
name,
|
|
53
|
+
options: m.options,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return commands;
|
|
57
|
+
};
|
|
58
|
+
export default readCommands;
|
|
59
|
+
//# sourceMappingURL=read-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-commands.js","sourceRoot":"","sources":["../../../src/lib/pastel/read-commands.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,MAAM,YAAY,GAAG,KAAK,EAAE,SAAiB,EAAiC,EAAE;IAC9E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE9C,IAAI,YAAY,EAAE,CAAC;gBACjB,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;gBACzB,YAAY,CAAC,QAAQ,GAAG,WAAW,CAAC;gBACpC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5B,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBACjC,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAY,YAAY,IAAI;gBACvC,QAAQ,EAAE,WAAW;gBACrB,SAAS,EAAE,KAAK;gBAChB,IAAI,EAAE,IAAI;aACX,CAAC;YAEF,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,kCAAC,OAAO,CAAC,IAAI,EAAC,CAAmB,CAAC;QACzD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAE9E,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;YACjB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,SAAS,EAAE,CAAC,CAAC,OAAO;YACpB,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,KAAK;YAC/B,IAAI;YACJ,OAAO,EAAE,CAAC,CAAC,OAAO;SACnB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
|