@runa-cmd/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +351 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +413 -0
- package/dist/cli.js.map +1 -0
- package/dist/command.d.ts +20 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/command.js +46 -0
- package/dist/command.js.map +1 -0
- package/dist/config/loader.d.ts +9 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +34 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/merge.d.ts +18 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +31 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/search.d.ts +18 -0
- package/dist/config/search.d.ts.map +1 -0
- package/dist/config/search.js +40 -0
- package/dist/config/search.js.map +1 -0
- package/dist/errors.d.ts +32 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +65 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/introspect.d.ts +16 -0
- package/dist/introspect.d.ts.map +1 -0
- package/dist/introspect.js +128 -0
- package/dist/introspect.js.map +1 -0
- package/dist/lifecycle.d.ts +27 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +62 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/middleware.d.ts +16 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +15 -0
- package/dist/middleware.js.map +1 -0
- package/dist/parse/parseargs-bridge.d.ts +22 -0
- package/dist/parse/parseargs-bridge.d.ts.map +1 -0
- package/dist/parse/parseargs-bridge.js +54 -0
- package/dist/parse/parseargs-bridge.js.map +1 -0
- package/dist/parse/resolve.d.ts +48 -0
- package/dist/parse/resolve.d.ts.map +1 -0
- package/dist/parse/resolve.js +240 -0
- package/dist/parse/resolve.js.map +1 -0
- package/dist/parse/schema-walker.d.ts +21 -0
- package/dist/parse/schema-walker.d.ts.map +1 -0
- package/dist/parse/schema-walker.js +121 -0
- package/dist/parse/schema-walker.js.map +1 -0
- package/dist/parse/variadic.d.ts +22 -0
- package/dist/parse/variadic.d.ts.map +1 -0
- package/dist/parse/variadic.js +71 -0
- package/dist/parse/variadic.js.map +1 -0
- package/dist/plugin.d.ts +53 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +194 -0
- package/dist/plugin.js.map +1 -0
- package/dist/types.d.ts +225 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +19 -0
- package/dist/types.js.map +1 -0
- package/dist/zod.d.ts +8 -0
- package/dist/zod.d.ts.map +1 -0
- package/dist/zod.js +8 -0
- package/dist/zod.js.map +1 -0
- package/package.json +66 -0
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { RunaError } from './errors.js';
|
|
2
|
+
// ─── Public builder ─────────────────────────────────────────
|
|
3
|
+
/**
|
|
4
|
+
* Validate and return a PluginConfig.
|
|
5
|
+
* Passthrough with shape validation — ensures required fields exist.
|
|
6
|
+
*/
|
|
7
|
+
export function definePlugin(config) {
|
|
8
|
+
if (!config.meta?.name) {
|
|
9
|
+
throw new RunaError('Plugin must have meta.name defined.', {
|
|
10
|
+
code: 'INVALID_PLUGIN',
|
|
11
|
+
exitCode: 1,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
if (typeof config.setup !== 'function') {
|
|
15
|
+
throw new RunaError(`Plugin '${config.meta.name}' must have a setup() function.`, {
|
|
16
|
+
code: 'INVALID_PLUGIN',
|
|
17
|
+
exitCode: 1,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return config;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolve a list of plugin inputs (direct configs or lazy imports)
|
|
24
|
+
* into resolved PluginConfig objects.
|
|
25
|
+
*/
|
|
26
|
+
export async function resolvePlugins(plugins) {
|
|
27
|
+
const resolved = [];
|
|
28
|
+
for (const plugin of plugins) {
|
|
29
|
+
if (typeof plugin === 'function') {
|
|
30
|
+
try {
|
|
31
|
+
const mod = await plugin();
|
|
32
|
+
if (!mod.default) {
|
|
33
|
+
throw new RunaError('Lazy-loaded plugin module does not have a default export.', {
|
|
34
|
+
code: 'PLUGIN_LOAD_ERROR',
|
|
35
|
+
exitCode: 1,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
resolved.push(mod.default);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (err instanceof RunaError)
|
|
42
|
+
throw err;
|
|
43
|
+
throw new RunaError(`Failed to load lazy plugin: ${err instanceof Error ? err.message : String(err)}`, { code: 'PLUGIN_LOAD_ERROR', exitCode: 1 });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
resolved.push(plugin);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return resolved;
|
|
51
|
+
}
|
|
52
|
+
// ─── Topological sort (Kahn's algorithm) ────────────────────
|
|
53
|
+
/**
|
|
54
|
+
* Sort plugins in dependency order using Kahn's algorithm.
|
|
55
|
+
* Detects circular dependencies and missing dependencies.
|
|
56
|
+
*/
|
|
57
|
+
export function topologicalSort(plugins) {
|
|
58
|
+
// Build name → plugin map
|
|
59
|
+
const byName = new Map();
|
|
60
|
+
for (const plugin of plugins) {
|
|
61
|
+
byName.set(plugin.meta.name, plugin);
|
|
62
|
+
}
|
|
63
|
+
// Build adjacency list and in-degree count
|
|
64
|
+
// edge: dependency → dependent (dependency must come first)
|
|
65
|
+
const inDegree = new Map();
|
|
66
|
+
const dependents = new Map(); // dep → [things that depend on it]
|
|
67
|
+
for (const plugin of plugins) {
|
|
68
|
+
const name = plugin.meta.name;
|
|
69
|
+
if (!inDegree.has(name))
|
|
70
|
+
inDegree.set(name, 0);
|
|
71
|
+
if (!dependents.has(name))
|
|
72
|
+
dependents.set(name, []);
|
|
73
|
+
for (const dep of plugin.meta.dependencies ?? []) {
|
|
74
|
+
if (!byName.has(dep)) {
|
|
75
|
+
throw new RunaError(`Plugin '${name}' depends on '${dep}', which is not registered.`, {
|
|
76
|
+
code: 'PLUGIN_MISSING_DEPENDENCY',
|
|
77
|
+
exitCode: 1,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (!dependents.has(dep))
|
|
81
|
+
dependents.set(dep, []);
|
|
82
|
+
const depList = dependents.get(dep);
|
|
83
|
+
if (depList)
|
|
84
|
+
depList.push(name);
|
|
85
|
+
inDegree.set(name, (inDegree.get(name) ?? 0) + 1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Kahn's: start with nodes that have no dependencies
|
|
89
|
+
const queue = [];
|
|
90
|
+
for (const [name, degree] of inDegree) {
|
|
91
|
+
if (degree === 0)
|
|
92
|
+
queue.push(name);
|
|
93
|
+
}
|
|
94
|
+
const sorted = [];
|
|
95
|
+
while (queue.length > 0) {
|
|
96
|
+
const current = queue.shift();
|
|
97
|
+
if (!current)
|
|
98
|
+
break;
|
|
99
|
+
const plugin = byName.get(current);
|
|
100
|
+
if (plugin)
|
|
101
|
+
sorted.push(plugin);
|
|
102
|
+
for (const dependent of dependents.get(current) ?? []) {
|
|
103
|
+
const newDegree = (inDegree.get(dependent) ?? 1) - 1;
|
|
104
|
+
inDegree.set(dependent, newDegree);
|
|
105
|
+
if (newDegree === 0) {
|
|
106
|
+
queue.push(dependent);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// If sorted doesn't include all plugins, there's a cycle
|
|
111
|
+
if (sorted.length !== plugins.length) {
|
|
112
|
+
const remaining = plugins
|
|
113
|
+
.filter((p) => !sorted.includes(p))
|
|
114
|
+
.map((p) => `'${p.meta.name}'`)
|
|
115
|
+
.join(', ');
|
|
116
|
+
throw new RunaError(`Circular dependency detected among plugins: ${remaining}.`, {
|
|
117
|
+
code: 'PLUGIN_CIRCULAR_DEPENDENCY',
|
|
118
|
+
exitCode: 1,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return sorted;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create a PluginAPI for a specific plugin, enforcing capability checks.
|
|
125
|
+
*/
|
|
126
|
+
export function createPluginAPI(pluginName, capabilities, refs) {
|
|
127
|
+
const caps = capabilities ?? {};
|
|
128
|
+
return {
|
|
129
|
+
addCommand(name, command) {
|
|
130
|
+
if (!caps.addCommands) {
|
|
131
|
+
throw new RunaError(`Plugin '${pluginName}' called addCommand() but did not declare addCommands capability.`, { code: 'PLUGIN_CAPABILITY_VIOLATION', exitCode: 1 });
|
|
132
|
+
}
|
|
133
|
+
refs.commands[name] = command;
|
|
134
|
+
},
|
|
135
|
+
addGlobalOption(name, schema, meta) {
|
|
136
|
+
if (!caps.addGlobalOptions) {
|
|
137
|
+
throw new RunaError(`Plugin '${pluginName}' called addGlobalOption() but did not declare addGlobalOptions capability.`, { code: 'PLUGIN_CAPABILITY_VIOLATION', exitCode: 1 });
|
|
138
|
+
}
|
|
139
|
+
refs.globalOptions[name] = schema;
|
|
140
|
+
if (meta) {
|
|
141
|
+
refs.globalMeta.options[name] = meta;
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
addMiddleware(middleware) {
|
|
145
|
+
if (!caps.addMiddleware) {
|
|
146
|
+
throw new RunaError(`Plugin '${pluginName}' called addMiddleware() but did not declare addMiddleware capability.`, { code: 'PLUGIN_CAPABILITY_VIOLATION', exitCode: 1 });
|
|
147
|
+
}
|
|
148
|
+
refs.middleware.push(middleware);
|
|
149
|
+
},
|
|
150
|
+
hook(name, handler) {
|
|
151
|
+
// No capability check for hooks — all plugins can hook
|
|
152
|
+
refs.hookRegister(name, handler);
|
|
153
|
+
},
|
|
154
|
+
getSchema() {
|
|
155
|
+
return refs.getSchema();
|
|
156
|
+
},
|
|
157
|
+
getCommands() {
|
|
158
|
+
return refs.commands;
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// ─── Setup orchestration ────────────────────────────────────
|
|
163
|
+
/**
|
|
164
|
+
* Call setup(api) for each plugin in topological order.
|
|
165
|
+
*/
|
|
166
|
+
export async function runPluginSetup(plugins, refs) {
|
|
167
|
+
for (const plugin of plugins) {
|
|
168
|
+
const api = createPluginAPI(plugin.meta.name, plugin.capabilities, refs);
|
|
169
|
+
await plugin.setup(api);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// ─── Cleanup orchestration ──────────────────────────────────
|
|
173
|
+
/**
|
|
174
|
+
* Call cleanup() for each plugin in REVERSE topological order.
|
|
175
|
+
* Each cleanup is wrapped in try/catch — failures don't prevent others from running.
|
|
176
|
+
* Returns collected errors.
|
|
177
|
+
*/
|
|
178
|
+
export async function runPluginCleanup(plugins) {
|
|
179
|
+
const errors = [];
|
|
180
|
+
// Reverse order: dependents clean up before dependencies
|
|
181
|
+
const reversed = [...plugins].reverse();
|
|
182
|
+
for (const plugin of reversed) {
|
|
183
|
+
if (typeof plugin.cleanup === 'function') {
|
|
184
|
+
try {
|
|
185
|
+
await plugin.cleanup();
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
errors.push(err instanceof Error ? err : new Error(String(err)));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return errors;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @runa-cmd/core — Core type definitions
|
|
3
|
+
*
|
|
4
|
+
* All TypeScript types, interfaces, and type utilities for the Runa CLI framework.
|
|
5
|
+
* This is a type-only module — no runtime code.
|
|
6
|
+
*/
|
|
7
|
+
import type { ZodType, z } from 'zod';
|
|
8
|
+
export interface OptionMeta {
|
|
9
|
+
/** CLI aliases, e.g. ['-e', '--environment'] */
|
|
10
|
+
alias?: string[];
|
|
11
|
+
/** Environment variable name, e.g. 'DEPLOY_ENV' */
|
|
12
|
+
env?: string;
|
|
13
|
+
/** Help group name, e.g. 'Deploy' */
|
|
14
|
+
group?: string;
|
|
15
|
+
/** Deprecation message, e.g. 'Use --confirm instead' */
|
|
16
|
+
deprecated?: string;
|
|
17
|
+
/** Value hint for help, e.g. 'staging|prod' */
|
|
18
|
+
hint?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CommandMeta<TOptions extends Record<string, ZodType> = Record<string, ZodType>> {
|
|
21
|
+
name: string;
|
|
22
|
+
description: string;
|
|
23
|
+
version?: string;
|
|
24
|
+
/** Option metadata — keys MUST be a subset of TOptions keys */
|
|
25
|
+
options?: {
|
|
26
|
+
[K in keyof TOptions]?: OptionMeta;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface CLIMeta {
|
|
30
|
+
name: string;
|
|
31
|
+
version?: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
}
|
|
34
|
+
/** Infer args types from a record of Zod schemas */
|
|
35
|
+
export type InferArgs<T extends Record<string, ZodType>> = {
|
|
36
|
+
[K in keyof T]: z.infer<T[K]>;
|
|
37
|
+
};
|
|
38
|
+
/** Infer options types from a record of Zod schemas */
|
|
39
|
+
export type InferOptions<T extends Record<string, ZodType>> = {
|
|
40
|
+
[K in keyof T]: z.infer<T[K]>;
|
|
41
|
+
};
|
|
42
|
+
/** What the run() handler receives */
|
|
43
|
+
export interface RunContext<TArgs extends Record<string, ZodType> = Record<string, ZodType>, TOptions extends Record<string, ZodType> = Record<string, ZodType>> {
|
|
44
|
+
args: InferArgs<TArgs>;
|
|
45
|
+
options: InferOptions<TOptions>;
|
|
46
|
+
globalOptions: Record<string, unknown>;
|
|
47
|
+
command: CommandMeta<TOptions>;
|
|
48
|
+
rawArgs: string[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* If TOutput extends ZodType, run() must return data matching the schema.
|
|
52
|
+
* If TOutput is undefined, run() returns void.
|
|
53
|
+
*/
|
|
54
|
+
export type RunReturn<TOutput> = TOutput extends ZodType ? z.infer<TOutput> | Promise<z.infer<TOutput>> : void | Promise<void>;
|
|
55
|
+
export interface CommandConfig<TArgs extends Record<string, ZodType> = Record<string, ZodType>, TOptions extends Record<string, ZodType> = Record<string, ZodType>, TOutput extends ZodType | undefined = undefined> {
|
|
56
|
+
meta: CommandMeta<TOptions>;
|
|
57
|
+
args?: TArgs;
|
|
58
|
+
options?: TOptions;
|
|
59
|
+
output?: TOutput;
|
|
60
|
+
run: (ctx: RunContext<TArgs, TOptions>) => RunReturn<TOutput>;
|
|
61
|
+
}
|
|
62
|
+
export interface Command {
|
|
63
|
+
readonly _type: 'runa:command';
|
|
64
|
+
readonly meta: CommandMeta;
|
|
65
|
+
readonly args?: Record<string, ZodType>;
|
|
66
|
+
readonly options?: Record<string, ZodType>;
|
|
67
|
+
readonly output?: ZodType;
|
|
68
|
+
readonly run: (ctx: RunContext) => unknown;
|
|
69
|
+
}
|
|
70
|
+
export interface CommandTree {
|
|
71
|
+
[key: string]: Command | CommandTree;
|
|
72
|
+
}
|
|
73
|
+
export interface CLIConfigOptions {
|
|
74
|
+
/** Config file base name, e.g. 'mycli' → looks for mycli.config.* */
|
|
75
|
+
name: string;
|
|
76
|
+
/** Additional config file loaders beyond built-in JSON */
|
|
77
|
+
loaders?: ConfigLoader[];
|
|
78
|
+
/** Directories to search for config files. Default: ['.', '~'] */
|
|
79
|
+
searchPaths?: string[];
|
|
80
|
+
}
|
|
81
|
+
export interface CLIConfig {
|
|
82
|
+
meta: CLIMeta;
|
|
83
|
+
commands: CommandTree;
|
|
84
|
+
plugins?: Array<PluginConfig | (() => Promise<{
|
|
85
|
+
default: PluginConfig;
|
|
86
|
+
}>)>;
|
|
87
|
+
middleware?: Middleware[];
|
|
88
|
+
config?: CLIConfigOptions;
|
|
89
|
+
globalOptions?: Record<string, ZodType>;
|
|
90
|
+
globalMeta?: {
|
|
91
|
+
options?: Record<string, OptionMeta>;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export interface CLI {
|
|
95
|
+
readonly _type: 'runa:cli';
|
|
96
|
+
readonly config: CLIConfig;
|
|
97
|
+
run(argv?: string[]): Promise<void>;
|
|
98
|
+
}
|
|
99
|
+
export interface PluginMeta {
|
|
100
|
+
name: string;
|
|
101
|
+
version: string;
|
|
102
|
+
description?: string;
|
|
103
|
+
/** Names of other plugins this depends on */
|
|
104
|
+
dependencies?: string[];
|
|
105
|
+
}
|
|
106
|
+
export interface PluginCapabilities {
|
|
107
|
+
addCommands?: boolean;
|
|
108
|
+
addGlobalOptions?: boolean;
|
|
109
|
+
addMiddleware?: boolean;
|
|
110
|
+
}
|
|
111
|
+
export interface PluginConfig {
|
|
112
|
+
meta: PluginMeta;
|
|
113
|
+
capabilities?: PluginCapabilities;
|
|
114
|
+
setup: (api: PluginAPI) => void | Promise<void>;
|
|
115
|
+
cleanup?: () => void | Promise<void>;
|
|
116
|
+
}
|
|
117
|
+
export interface PluginAPI {
|
|
118
|
+
addCommand(name: string, command: Command): void;
|
|
119
|
+
addGlobalOption(name: string, schema: ZodType, meta?: OptionMeta): void;
|
|
120
|
+
addMiddleware(middleware: Middleware): void;
|
|
121
|
+
hook(name: HookName, handler: HookHandler): void;
|
|
122
|
+
getSchema(): CLISchema;
|
|
123
|
+
getCommands(): CommandTree;
|
|
124
|
+
}
|
|
125
|
+
export declare const HOOK_NAMES: {
|
|
126
|
+
readonly BEFORE_PARSE: "beforeParse";
|
|
127
|
+
readonly ON_GLOBAL_FLAGS: "onGlobalFlags";
|
|
128
|
+
readonly AFTER_PARSE: "afterParse";
|
|
129
|
+
readonly BEFORE_RUN: "beforeRun";
|
|
130
|
+
readonly AFTER_RUN: "afterRun";
|
|
131
|
+
readonly ON_ERROR: "onError";
|
|
132
|
+
readonly CLEANUP: "cleanup";
|
|
133
|
+
};
|
|
134
|
+
export type HookName = (typeof HOOK_NAMES)[keyof typeof HOOK_NAMES];
|
|
135
|
+
export interface HookContext {
|
|
136
|
+
cli: CLIMeta;
|
|
137
|
+
rawArgs: string[];
|
|
138
|
+
globalOptions?: Record<string, unknown>;
|
|
139
|
+
command?: CommandMeta;
|
|
140
|
+
args?: Record<string, unknown>;
|
|
141
|
+
options?: Record<string, unknown>;
|
|
142
|
+
error?: Error;
|
|
143
|
+
/** Call this in onGlobalFlags to short-circuit the lifecycle */
|
|
144
|
+
shortCircuit?: () => void;
|
|
145
|
+
/** Set this in onError to prevent default error output */
|
|
146
|
+
handled?: boolean;
|
|
147
|
+
}
|
|
148
|
+
export type HookHandler = (ctx: HookContext) => void | Promise<void>;
|
|
149
|
+
export interface MiddlewareContext {
|
|
150
|
+
next: () => Promise<void>;
|
|
151
|
+
globalOptions: Record<string, unknown>;
|
|
152
|
+
}
|
|
153
|
+
export type MiddlewareFn = (ctx: MiddlewareContext) => Promise<void>;
|
|
154
|
+
export interface Middleware {
|
|
155
|
+
readonly _type: 'runa:middleware';
|
|
156
|
+
readonly handler: MiddlewareFn;
|
|
157
|
+
}
|
|
158
|
+
export interface ConfigLoader {
|
|
159
|
+
/** File extensions this loader handles, e.g. ['.json'] */
|
|
160
|
+
extensions: string[];
|
|
161
|
+
/** Read and parse the config file at the given path */
|
|
162
|
+
load(filePath: string): Promise<unknown>;
|
|
163
|
+
}
|
|
164
|
+
export interface CLISchema {
|
|
165
|
+
meta: CLIMeta;
|
|
166
|
+
commands: CommandSchema[];
|
|
167
|
+
globalOptions: OptionSchema[];
|
|
168
|
+
}
|
|
169
|
+
export interface CommandSchema {
|
|
170
|
+
name: string;
|
|
171
|
+
description: string;
|
|
172
|
+
/** Full command path, e.g. ['config', 'set'] for nested commands */
|
|
173
|
+
fullPath: string[];
|
|
174
|
+
args: ArgSchema[];
|
|
175
|
+
options: OptionSchema[];
|
|
176
|
+
hasOutput: boolean;
|
|
177
|
+
subcommands?: CommandSchema[];
|
|
178
|
+
}
|
|
179
|
+
export interface ArgSchema {
|
|
180
|
+
name: string;
|
|
181
|
+
description?: string;
|
|
182
|
+
type: ParamType;
|
|
183
|
+
required: boolean;
|
|
184
|
+
defaultValue?: unknown;
|
|
185
|
+
isVariadic: boolean;
|
|
186
|
+
enumValues?: string[];
|
|
187
|
+
}
|
|
188
|
+
export interface OptionSchema {
|
|
189
|
+
name: string;
|
|
190
|
+
description?: string;
|
|
191
|
+
type: ParamType;
|
|
192
|
+
required: boolean;
|
|
193
|
+
defaultValue?: unknown;
|
|
194
|
+
alias?: string[];
|
|
195
|
+
env?: string;
|
|
196
|
+
group?: string;
|
|
197
|
+
deprecated?: string;
|
|
198
|
+
hint?: string;
|
|
199
|
+
enumValues?: string[];
|
|
200
|
+
}
|
|
201
|
+
export declare const PARAM_TYPES: {
|
|
202
|
+
readonly STRING: "string";
|
|
203
|
+
readonly NUMBER: "number";
|
|
204
|
+
readonly BOOLEAN: "boolean";
|
|
205
|
+
readonly ENUM: "enum";
|
|
206
|
+
readonly ARRAY: "array";
|
|
207
|
+
};
|
|
208
|
+
export type ParamType = (typeof PARAM_TYPES)[keyof typeof PARAM_TYPES];
|
|
209
|
+
export interface ParamMetadata {
|
|
210
|
+
/** Key name from the schema record */
|
|
211
|
+
name: string;
|
|
212
|
+
/** Detected base type */
|
|
213
|
+
zodType: ParamType;
|
|
214
|
+
/** Whether the field is optional (has .optional() or .default()) */
|
|
215
|
+
isOptional: boolean;
|
|
216
|
+
/** Default value extracted from .default(), or undefined */
|
|
217
|
+
defaultValue: unknown;
|
|
218
|
+
/** Whether this is a z.array() (variadic arg) */
|
|
219
|
+
isArray: boolean;
|
|
220
|
+
/** Enum values extracted from z.enum() */
|
|
221
|
+
enumValues?: string[];
|
|
222
|
+
/** Description extracted from .describe() */
|
|
223
|
+
description?: string;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// ─── Lifecycle Hooks ────────────────────────────────────────
|
|
2
|
+
export const HOOK_NAMES = {
|
|
3
|
+
BEFORE_PARSE: 'beforeParse',
|
|
4
|
+
ON_GLOBAL_FLAGS: 'onGlobalFlags',
|
|
5
|
+
AFTER_PARSE: 'afterParse',
|
|
6
|
+
BEFORE_RUN: 'beforeRun',
|
|
7
|
+
AFTER_RUN: 'afterRun',
|
|
8
|
+
ON_ERROR: 'onError',
|
|
9
|
+
CLEANUP: 'cleanup',
|
|
10
|
+
};
|
|
11
|
+
// ─── Schema Walker Output ───────────────────────────────────
|
|
12
|
+
export const PARAM_TYPES = {
|
|
13
|
+
STRING: 'string',
|
|
14
|
+
NUMBER: 'number',
|
|
15
|
+
BOOLEAN: 'boolean',
|
|
16
|
+
ENUM: 'enum',
|
|
17
|
+
ARRAY: 'array',
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAyKA,+DAA+D;AAE/D,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,YAAY,EAAE,aAAa;IAC3B,eAAe,EAAE,eAAe;IAChC,WAAW,EAAE,YAAY;IACzB,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,UAAU;IACrB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;CACT,CAAC;AAsFX,+DAA+D;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACL,CAAC"}
|
package/dist/zod.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../src/zod.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC"}
|
package/dist/zod.js
ADDED
package/dist/zod.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod.js","sourceRoot":"","sources":["../src/zod.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@runa-cmd/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Schema-driven, TypeScript-first CLI engine — commands, parsing, plugins, middleware. Zero runtime deps.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"cli",
|
|
9
|
+
"command-line",
|
|
10
|
+
"zod",
|
|
11
|
+
"typescript",
|
|
12
|
+
"schema-driven",
|
|
13
|
+
"parseargs",
|
|
14
|
+
"plugin",
|
|
15
|
+
"middleware"
|
|
16
|
+
],
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./zod": {
|
|
25
|
+
"types": "./dist/zod.d.ts",
|
|
26
|
+
"import": "./dist/zod.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"zod": "^4.0.0"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=18.3.0"
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "https://github.com/jrodrigopuca/runa-cmd.git",
|
|
41
|
+
"directory": "packages/core"
|
|
42
|
+
},
|
|
43
|
+
"homepage": "https://github.com/jrodrigopuca/runa-cmd/tree/main/packages/core#readme",
|
|
44
|
+
"bugs": {
|
|
45
|
+
"url": "https://github.com/jrodrigopuca/runa-cmd/issues"
|
|
46
|
+
},
|
|
47
|
+
"files": [
|
|
48
|
+
"dist",
|
|
49
|
+
"README.md"
|
|
50
|
+
],
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/node": "^25.6.0",
|
|
53
|
+
"typescript": "^6.0.2",
|
|
54
|
+
"zod": "^4.3.6"
|
|
55
|
+
},
|
|
56
|
+
"scripts": {
|
|
57
|
+
"build": "tsc",
|
|
58
|
+
"dev": "tsc --watch --preserveWatchOutput",
|
|
59
|
+
"typecheck": "tsc --noEmit",
|
|
60
|
+
"test": "vitest run",
|
|
61
|
+
"test:watch": "vitest",
|
|
62
|
+
"lint": "biome check .",
|
|
63
|
+
"lint:fix": "biome check --write .",
|
|
64
|
+
"clean": "rm -rf dist"
|
|
65
|
+
}
|
|
66
|
+
}
|