@rudderjs/cli 4.14.0 → 4.16.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.
@@ -0,0 +1,64 @@
1
+ import type { Command } from 'commander';
2
+ export declare const SUPPORTED_SHELLS: readonly ["bash", "zsh", "fish"];
3
+ export type Shell = (typeof SUPPORTED_SHELLS)[number];
4
+ /**
5
+ * The static set of command names completed in v1. Built-in CLI commands plus
6
+ * the commands every framework package contributes. Keep roughly in sync with
7
+ * the ownership table in packages/cli/CLAUDE.md; drift here only costs a missing
8
+ * suggestion, never a broken command. Every name has at most one ':' — the bash
9
+ * script's colon handling relies on that.
10
+ */
11
+ export declare const COMMAND_NAMES: readonly string[];
12
+ /**
13
+ * Commands whose first argument is conventionally an existing model name. When
14
+ * completing their argument, the shell calls back into `rudder completion args`
15
+ * to list the project's models. Routes/migrations have no arg-taking command to
16
+ * complete against yet, so models are the whole v1 surface.
17
+ */
18
+ export declare const MODEL_ARG_COMMANDS: readonly string[];
19
+ /**
20
+ * Resolve dynamic argument candidates for `command`, rooted at `cwd`. v1 returns
21
+ * model names (the `app/Models` basenames) for the model-oriented make commands.
22
+ * Filesystem-only, no app boot. Returns [] when there is nothing to suggest
23
+ * (unknown command, not inside a project, empty dir).
24
+ */
25
+ export declare function resolveArgCandidates(command: string, cwd?: string): string[];
26
+ /**
27
+ * Resolve flag candidates from a command's live commander definition: its long
28
+ * options plus `--help` (every command has it). For an unknown command (or the
29
+ * top-level `rudder`) we return the global flags. Reading the real definitions
30
+ * means the list never drifts from the actual options.
31
+ */
32
+ export declare function resolveFlagCandidates(cmd: Command | undefined): string[];
33
+ /** Emit a self-contained completion script for the given shell. */
34
+ export declare function completionScript(shell: Shell): string;
35
+ interface InstallPlan {
36
+ /** Where the sourced completion script is written. */
37
+ scriptPath: string;
38
+ /** The rc file to add a source line to, or null when the shell autoloads (fish). */
39
+ rcFile: string | null;
40
+ /** The exact line that sources the script (bash/zsh). */
41
+ sourceLine: string;
42
+ }
43
+ /** Resolve the file locations for a shell, rooted at `home`. Pure — no I/O. */
44
+ export declare function installPlan(shell: Shell, home: string): InstallPlan;
45
+ /** Detect the user's shell from $SHELL. Returns null if it isn't one we support. */
46
+ export declare function detectShell(env?: NodeJS.ProcessEnv): Shell | null;
47
+ /** Idempotently add the source block to an rc file. Returns true if it changed. */
48
+ declare function addSourceBlock(rcFile: string, sourceLine: string): boolean;
49
+ /** Remove the source block from an rc file. Returns true if it changed. */
50
+ declare function removeSourceBlock(rcFile: string): boolean;
51
+ declare function runInstall(shell: Shell, home: string): void;
52
+ declare function runUninstall(shell: Shell, home: string): void;
53
+ /** Test surface — not part of the public API. */
54
+ export declare const _internal: {
55
+ addSourceBlock: typeof addSourceBlock;
56
+ removeSourceBlock: typeof removeSourceBlock;
57
+ runInstall: typeof runInstall;
58
+ runUninstall: typeof runUninstall;
59
+ BLOCK_START: string;
60
+ BLOCK_END: string;
61
+ };
62
+ export declare function completionCommand(program: Command): void;
63
+ export {};
64
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmCxC,eAAO,MAAM,gBAAgB,kCAAmC,CAAA;AAChE,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EA4B1C,CAAA;AAID;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAE/C,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAsB,GAAG,MAAM,EAAE,CAG3F;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,EAAE,CAMxE;AAqBD,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAQrD;AA8HD,UAAU,WAAW;IACnB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAA;IAClB,oFAAoF;IACpF,MAAM,EAAM,MAAM,GAAG,IAAI,CAAA;IACzB,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAA;CACnB;AAKD,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAgBnE;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,KAAK,GAAG,IAAI,CAG9E;AA2BD,mFAAmF;AACnF,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAOnE;AAED,2EAA2E;AAC3E,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAOlD;AAMD,iBAAS,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAmBpD;AAED,iBAAS,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAStD;AAID,iDAAiD;AACjD,eAAO,MAAM,SAAS;;;;;;;CAA0F,CAAA;AAEhH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwDxD"}
@@ -0,0 +1,411 @@
1
+ import { mkdirSync, readFileSync, writeFileSync, rmSync, readdirSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import os from 'node:os';
4
+ import { CliError } from '../errors.js';
5
+ // Shell tab-completion for the `rudder` CLI. `rudder completion <shell>` prints a
6
+ // self-contained completion script to stdout; `rudder completion install` writes
7
+ // it to a stable location and wires it into the user's shell; `uninstall` undoes
8
+ // that cleanly.
9
+ //
10
+ // Command-name completion is STATIC: the script embeds the known framework
11
+ // command names below, so completing a command is instant (no CLI boot per
12
+ // <TAB>) and works even outside a project directory.
13
+ //
14
+ // Argument completion is DYNAMIC where it pays off: for the model-oriented make
15
+ // commands, the script calls back into `rudder completion args <command>`, which
16
+ // lists the project's models from app/Models (filesystem only, no app boot).
17
+ //
18
+ // Flag completion is also DYNAMIC: when the current word starts with '-', the
19
+ // script calls `rudder completion flags <command>`, which reads the command's
20
+ // live commander option definitions (so the flag list never drifts). Commands
21
+ // that parse flags by hand (allowUnknownOption) expose only --help; the make:*
22
+ // family registers real options, which is where flag completion matters most.
23
+ // Both resolvers live in TS (testable) and are structured so more sources can be
24
+ // added later. Unknown/top-level falls back to the global flags.
25
+ //
26
+ // No third-party dependency: hand-rolled scripts for bash / zsh / fish. tabtab
27
+ // was considered but its model is dynamic (a CLI round-trip per keystroke), which
28
+ // is the opposite of what static completion wants.
29
+ const C = {
30
+ green: (s) => `\x1b[32m${s}\x1b[0m`,
31
+ yellow: (s) => `\x1b[33m${s}\x1b[0m`,
32
+ dim: (s) => `\x1b[2m${s}\x1b[0m`,
33
+ bold: (s) => `\x1b[1m${s}\x1b[0m`,
34
+ };
35
+ export const SUPPORTED_SHELLS = ['bash', 'zsh', 'fish'];
36
+ /**
37
+ * The static set of command names completed in v1. Built-in CLI commands plus
38
+ * the commands every framework package contributes. Keep roughly in sync with
39
+ * the ownership table in packages/cli/CLAUDE.md; drift here only costs a missing
40
+ * suggestion, never a broken command. Every name has at most one ':' — the bash
41
+ * script's colon handling relies on that.
42
+ */
43
+ export const COMMAND_NAMES = [
44
+ // CLI built-ins
45
+ 'about', 'add', 'completion', 'doctor', 'down', 'fresh', 'optimize:clear',
46
+ 'remove', 'test', 'tinker', 'up', 'upgrade', 'key:generate',
47
+ 'command:list', 'module:make', 'module:publish', 'vendor:publish',
48
+ 'providers:discover',
49
+ // make:* generators (CLI + packages)
50
+ 'make:agent', 'make:cast', 'make:command', 'make:controller', 'make:event',
51
+ 'make:exception', 'make:factory', 'make:job', 'make:listener', 'make:mail',
52
+ 'make:mcp-prompt', 'make:mcp-resource', 'make:mcp-server', 'make:mcp-tool',
53
+ 'make:middleware', 'make:migration', 'make:model', 'make:notification',
54
+ 'make:observer', 'make:passport-client', 'make:policy', 'make:provider',
55
+ 'make:request', 'make:resource', 'make:seeder', 'make:terminal', 'make:test',
56
+ // @rudderjs/orm
57
+ 'migrate', 'migrate:fresh', 'migrate:refresh', 'migrate:rollback',
58
+ 'migrate:status', 'schema:types', 'db:generate', 'db:push', 'db:seed',
59
+ 'db:show', 'db:table', 'db:query', 'model:prune',
60
+ // @rudderjs/router + openapi + core
61
+ 'route:list', 'openapi:generate', 'event:list', 'config:show',
62
+ // @rudderjs/queue + cache + schedule
63
+ 'queue:work', 'queue:status', 'queue:clear', 'queue:failed', 'queue:retry',
64
+ 'cache:clear', 'schedule:run', 'schedule:work', 'schedule:list',
65
+ // @rudderjs/storage + sync + broadcast + boost + passport + ai + mcp
66
+ 'storage:link', 'sync:docs', 'sync:clear', 'sync:inspect',
67
+ 'broadcast:connections', 'boost:install', 'boost:update', 'boost:mcp',
68
+ 'passport:keys', 'passport:client', 'ai:eval', 'mcp:start', 'mcp:list',
69
+ // @rudderjs/vite sync commands
70
+ 'view:sync', 'routes:sync', 'env:sync', 'config:sync',
71
+ ];
72
+ // ─── Dynamic argument resolution ─────────────────────────────
73
+ /**
74
+ * Commands whose first argument is conventionally an existing model name. When
75
+ * completing their argument, the shell calls back into `rudder completion args`
76
+ * to list the project's models. Routes/migrations have no arg-taking command to
77
+ * complete against yet, so models are the whole v1 surface.
78
+ */
79
+ export const MODEL_ARG_COMMANDS = [
80
+ 'make:factory', 'make:seeder', 'make:policy', 'make:observer',
81
+ ];
82
+ /**
83
+ * Resolve dynamic argument candidates for `command`, rooted at `cwd`. v1 returns
84
+ * model names (the `app/Models` basenames) for the model-oriented make commands.
85
+ * Filesystem-only, no app boot. Returns [] when there is nothing to suggest
86
+ * (unknown command, not inside a project, empty dir).
87
+ */
88
+ export function resolveArgCandidates(command, cwd = process.cwd()) {
89
+ if (MODEL_ARG_COMMANDS.includes(command))
90
+ return listModels(cwd);
91
+ return [];
92
+ }
93
+ /**
94
+ * Resolve flag candidates from a command's live commander definition: its long
95
+ * options plus `--help` (every command has it). For an unknown command (or the
96
+ * top-level `rudder`) we return the global flags. Reading the real definitions
97
+ * means the list never drifts from the actual options.
98
+ */
99
+ export function resolveFlagCandidates(cmd) {
100
+ if (!cmd)
101
+ return ['--help', '--version'];
102
+ const longs = cmd.options
103
+ .map(o => o.long)
104
+ .filter((l) => Boolean(l));
105
+ return [...new Set([...longs, '--help'])].sort();
106
+ }
107
+ /** List model names from `app/Models` by filename, mirroring tinker's discovery. */
108
+ function listModels(cwd) {
109
+ const dir = path.join(cwd, 'app', 'Models');
110
+ let entries;
111
+ try {
112
+ entries = readdirSync(dir);
113
+ }
114
+ catch {
115
+ return []; // not a rudder project, or no models yet
116
+ }
117
+ const exts = new Set(['.ts', '.js', '.mts', '.mjs']);
118
+ const names = entries
119
+ .filter(f => exts.has(path.extname(f)))
120
+ .map(f => path.basename(f, path.extname(f)))
121
+ .filter(n => n !== 'index');
122
+ return [...new Set(names)].sort();
123
+ }
124
+ // ─── Script generation ───────────────────────────────────────
125
+ /** Emit a self-contained completion script for the given shell. */
126
+ export function completionScript(shell) {
127
+ const words = [...COMMAND_NAMES].sort().join(' ');
128
+ const argCmds = [...MODEL_ARG_COMMANDS].join(' ');
129
+ switch (shell) {
130
+ case 'bash': return bashScript(words, argCmds);
131
+ case 'zsh': return zshScript(words, argCmds);
132
+ case 'fish': return fishScript(words, argCmds);
133
+ }
134
+ }
135
+ function bashScript(words, argCmds) {
136
+ // Commands contain a ':' which is in bash's default COMP_WORDBREAKS, so the
137
+ // word under the cursor is split. We reconstruct the colon-joined word and
138
+ // strip the already-typed "ns:" prefix from each match so bash appends only
139
+ // the suffix. Self-contained — no dependency on the bash-completion package.
140
+ return `# rudder bash completion. Source this file or use \`rudder completion install\`.
141
+ _rudder_complete() {
142
+ local cur cword cmd k
143
+ cword="\${COMP_CWORD}"
144
+ cur="\${COMP_WORDS[cword]}"
145
+
146
+ # Flag completion: the word starts with '-'. Extract the command as the
147
+ # colon-run beginning at index 1 (robust to intervening arguments), then list
148
+ # its flags. Unknown/top-level falls back to the global flags.
149
+ if [[ "\${cur}" == -* ]]; then
150
+ local fcmd="\${COMP_WORDS[1]}" j=2
151
+ while [ "\${COMP_WORDS[j]}" = ":" ] && [ -n "\${COMP_WORDS[j+1]}" ]; do
152
+ fcmd="\${fcmd}:\${COMP_WORDS[j+1]}"; j=$((j+2))
153
+ done
154
+ local fl="--help --version"
155
+ if [[ " ${words} " == *" \${fcmd} "* ]]; then
156
+ fl=$(rudder completion flags "\${fcmd}" 2>/dev/null)
157
+ fi
158
+ COMPREPLY=( $(compgen -W "\${fl}" -- "\${cur}") )
159
+ return 0
160
+ fi
161
+
162
+ # Reconstruct the command from the words between "rudder" and the current one.
163
+ # Colon-split elements ("make" ":" "factory") concatenate back to "make:factory".
164
+ # This equals a complete command name only once the command is fully typed and
165
+ # the cursor sits on its argument (a partial like "make:" never matches).
166
+ cmd=""
167
+ for ((k=1; k<cword; k++)); do cmd="\${cmd}\${COMP_WORDS[k]}"; done
168
+ if [[ " ${words} " == *" \${cmd} "* ]]; then
169
+ # The cursor is on the command's argument, not the command itself. Only the
170
+ # model-arg commands have dynamic candidates; others complete to nothing.
171
+ local cand=""
172
+ if [[ " ${argCmds} " == *" \${cmd} "* ]]; then
173
+ cand=$(rudder completion args "\${cmd}" 2>/dev/null)
174
+ fi
175
+ COMPREPLY=( $(compgen -W "\${cand}" -- "\${cur}") )
176
+ return 0
177
+ fi
178
+
179
+ # Glue a single-colon-split word back together under bash's default
180
+ # COMP_WORDBREAKS (which contains ':'). Two shapes occur:
181
+ # "make" ":" (cursor right after the colon) -> cur = "make:"
182
+ # "make" ":" "mo" (a suffix typed) -> cur = "make:mo"
183
+ if [ "\${cur}" = ":" ] && [ "\${cword}" -ge 1 ]; then
184
+ cur="\${COMP_WORDS[cword-1]}:"
185
+ elif [ "\${cword}" -ge 2 ] && [ "\${COMP_WORDS[cword-1]}" = ":" ]; then
186
+ cur="\${COMP_WORDS[cword-2]}:\${cur}"
187
+ fi
188
+ local matches
189
+ matches=$(compgen -W "${words}" -- "\${cur}")
190
+ COMPREPLY=()
191
+ if [[ "\${cur}" == *:* ]]; then
192
+ local prefix="\${cur%:*}:" m
193
+ for m in \${matches}; do COMPREPLY+=( "\${m#\${prefix}}" ); done
194
+ else
195
+ local m
196
+ for m in \${matches}; do COMPREPLY+=( "\${m}" ); done
197
+ fi
198
+ }
199
+ complete -F _rudder_complete rudder
200
+ `;
201
+ }
202
+ function zshScript(words, argCmds) {
203
+ // zsh treats ':' as an ordinary word character, so no colon gymnastics needed.
204
+ // Sourcing this file (rather than autoloading via fpath) means the #compdef tag
205
+ // is inert, so we register explicitly via compdef once compinit has defined it.
206
+ return `#compdef rudder
207
+ # rudder zsh completion. Source this file or use \`rudder completion install\`.
208
+ _rudder() {
209
+ # Flag completion: the word being completed starts with '-'. $words[2] is the
210
+ # command (zsh does not split on ':'); unknown/top-level uses the global flags.
211
+ if [[ "\${words[CURRENT]}" == -* ]]; then
212
+ local cmd="\${words[2]}"
213
+ local -a fl
214
+ if [[ " ${words} " == *" \${cmd} "* ]]; then
215
+ fl=(\${(f)"$(rudder completion flags \${cmd} 2>/dev/null)"})
216
+ else
217
+ fl=(--help --version)
218
+ fi
219
+ compadd -a fl
220
+ return
221
+ fi
222
+ # Past the command word: complete its argument dynamically for the model-arg
223
+ # commands ($words[2] is the command).
224
+ if (( CURRENT >= 3 )); then
225
+ local cmd="\${words[2]}"
226
+ if [[ " ${argCmds} " == *" \${cmd} "* ]]; then
227
+ local -a cand
228
+ cand=(\${(f)"$(rudder completion args \${cmd} 2>/dev/null)"})
229
+ compadd -a cand
230
+ fi
231
+ return
232
+ fi
233
+ local -a cmds
234
+ cmds=(${words})
235
+ compadd -a cmds
236
+ }
237
+ if (( $+functions[compdef] )); then
238
+ compdef _rudder rudder
239
+ fi
240
+ `;
241
+ }
242
+ function fishScript(words, argCmds) {
243
+ // fish autoloads files in its completions dir, so install drops this there and
244
+ // no rc edit is needed. __fish_use_subcommand limits the command list to the
245
+ // first position; the model-arg rule fires once such a subcommand is present.
246
+ return `# rudder fish completion. Autoloaded from the fish completions dir, or use \`rudder completion install\`.
247
+ complete -c rudder -f -n '__fish_use_subcommand' -a '${words}'
248
+ complete -c rudder -f -n '__fish_seen_subcommand_from ${argCmds}' -a '(rudder completion args (commandline -opc)[2] 2>/dev/null)'
249
+ # Flag completion once a known command is present (fish offers these when the
250
+ # token starts with '-'). Empty command list = every known command.
251
+ complete -c rudder -f -n '__fish_seen_subcommand_from ${words}' -a '(rudder completion flags (commandline -opc)[2] 2>/dev/null)'
252
+ `;
253
+ }
254
+ const BLOCK_START = '# >>> rudder completions >>>';
255
+ const BLOCK_END = '# <<< rudder completions <<<';
256
+ /** Resolve the file locations for a shell, rooted at `home`. Pure — no I/O. */
257
+ export function installPlan(shell, home) {
258
+ switch (shell) {
259
+ case 'bash': {
260
+ const scriptPath = path.join(home, '.rudder', 'completion.bash');
261
+ return { scriptPath, rcFile: path.join(home, '.bashrc'), sourceLine: `[ -f "${scriptPath}" ] && source "${scriptPath}"` };
262
+ }
263
+ case 'zsh': {
264
+ const scriptPath = path.join(home, '.rudder', 'completion.zsh');
265
+ return { scriptPath, rcFile: path.join(home, '.zshrc'), sourceLine: `[ -f "${scriptPath}" ] && source "${scriptPath}"` };
266
+ }
267
+ case 'fish': {
268
+ // fish autoloads any rudder.fish in its completions dir — no rc edit.
269
+ const scriptPath = path.join(home, '.config', 'fish', 'completions', 'rudder.fish');
270
+ return { scriptPath, rcFile: null, sourceLine: '' };
271
+ }
272
+ }
273
+ }
274
+ /** Detect the user's shell from $SHELL. Returns null if it isn't one we support. */
275
+ export function detectShell(env = process.env) {
276
+ const sh = path.basename(env['SHELL'] ?? '');
277
+ return SUPPORTED_SHELLS.includes(sh) ? sh : null;
278
+ }
279
+ function ensureDir(file) {
280
+ mkdirSync(path.dirname(file), { recursive: true });
281
+ }
282
+ /** Read a file, treating a missing one as empty. Avoids a check-then-read race. */
283
+ function readOrEmpty(file) {
284
+ try {
285
+ return readFileSync(file, 'utf8');
286
+ }
287
+ catch (err) {
288
+ if (err.code === 'ENOENT')
289
+ return '';
290
+ throw err;
291
+ }
292
+ }
293
+ /** Remove a file if present, returning whether it existed. No check-then-use race. */
294
+ function rmIfExists(file) {
295
+ try {
296
+ rmSync(file);
297
+ return true;
298
+ }
299
+ catch (err) {
300
+ if (err.code === 'ENOENT')
301
+ return false;
302
+ throw err;
303
+ }
304
+ }
305
+ /** Idempotently add the source block to an rc file. Returns true if it changed. */
306
+ function addSourceBlock(rcFile, sourceLine) {
307
+ const existing = readOrEmpty(rcFile);
308
+ if (existing.includes(BLOCK_START))
309
+ return false;
310
+ const block = `${BLOCK_START}\n${sourceLine}\n${BLOCK_END}\n`;
311
+ const sep = existing.length > 0 && !existing.endsWith('\n') ? '\n' : '';
312
+ writeFileSync(rcFile, existing + sep + block);
313
+ return true;
314
+ }
315
+ /** Remove the source block from an rc file. Returns true if it changed. */
316
+ function removeSourceBlock(rcFile) {
317
+ const existing = readOrEmpty(rcFile);
318
+ if (!existing.includes(BLOCK_START))
319
+ return false;
320
+ // Strip the marked block (and a single trailing newline left behind).
321
+ const pattern = new RegExp(`\\n?${escapeRe(BLOCK_START)}[\\s\\S]*?${escapeRe(BLOCK_END)}\\n?`, 'g');
322
+ writeFileSync(rcFile, existing.replace(pattern, '\n').replace(/\n{3,}/g, '\n\n'));
323
+ return true;
324
+ }
325
+ function escapeRe(s) {
326
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
327
+ }
328
+ function runInstall(shell, home) {
329
+ const plan = installPlan(shell, home);
330
+ ensureDir(plan.scriptPath);
331
+ writeFileSync(plan.scriptPath, completionScript(shell));
332
+ if (plan.rcFile) {
333
+ const changed = addSourceBlock(plan.rcFile, plan.sourceLine);
334
+ console.log(C.green('✓') + ` Installed ${shell} completions`);
335
+ console.log(` script: ${C.dim(plan.scriptPath)}`);
336
+ console.log(changed
337
+ ? ` added a source line to ${C.dim(plan.rcFile)}`
338
+ : ` ${C.dim(plan.rcFile)} already sources it ${C.dim('(no change)')}`);
339
+ console.log(`\nOpen a new shell or run ${C.bold(`source ${plan.rcFile}`)} to start completing.`);
340
+ }
341
+ else {
342
+ // fish autoloads — nothing to source.
343
+ console.log(C.green('✓') + ` Installed fish completions`);
344
+ console.log(` script: ${C.dim(plan.scriptPath)}`);
345
+ console.log(`\nOpen a new shell to start completing.`);
346
+ }
347
+ }
348
+ function runUninstall(shell, home) {
349
+ const plan = installPlan(shell, home);
350
+ // rmIfExists attempts the remove and reports existence from the result, so
351
+ // there is no check-then-remove race.
352
+ let removed = rmIfExists(plan.scriptPath);
353
+ if (plan.rcFile && removeSourceBlock(plan.rcFile))
354
+ removed = true;
355
+ console.log(removed
356
+ ? C.green('✓') + ` Removed ${shell} completions`
357
+ : C.yellow('•') + ` No ${shell} completions were installed`);
358
+ }
359
+ // ─── Command registration ────────────────────────────────────
360
+ /** Test surface — not part of the public API. */
361
+ export const _internal = { addSourceBlock, removeSourceBlock, runInstall, runUninstall, BLOCK_START, BLOCK_END };
362
+ export function completionCommand(program) {
363
+ program
364
+ .command('completion')
365
+ .description('Shell tab-completion: print a script, or install/uninstall it')
366
+ .argument('[action]', 'bash | zsh | fish | install | uninstall')
367
+ .argument('[target]', 'internal: command name when action is "args"')
368
+ .action((action, target) => {
369
+ const home = os.homedir();
370
+ // Internal: the installed scripts call `rudder completion args <command>`
371
+ // to resolve dynamic argument candidates (e.g. model names). One per line.
372
+ if (action === 'args') {
373
+ if (target)
374
+ process.stdout.write(resolveArgCandidates(target).join('\n') + '\n');
375
+ return;
376
+ }
377
+ // Internal: `rudder completion flags <command>` lists a command's option
378
+ // flags, read from its live commander definition. One per line.
379
+ if (action === 'flags') {
380
+ const cmd = target ? program.commands.find(c => c.name() === target) : undefined;
381
+ process.stdout.write(resolveFlagCandidates(cmd).join('\n') + '\n');
382
+ return;
383
+ }
384
+ // No arg, or an explicit shell name → print the script to stdout.
385
+ if (action === undefined || SUPPORTED_SHELLS.includes(action)) {
386
+ const shell = (action ?? detectShell());
387
+ if (!shell) {
388
+ throw new CliError('Could not detect your shell. Pass one explicitly:\n' +
389
+ ' rudder completion bash | zsh | fish');
390
+ }
391
+ process.stdout.write(completionScript(shell));
392
+ return;
393
+ }
394
+ if (action === 'install' || action === 'uninstall') {
395
+ const shell = detectShell();
396
+ if (!shell) {
397
+ throw new CliError(`Could not detect a supported shell from $SHELL.\n` +
398
+ `Generate the script manually instead, e.g.:\n` +
399
+ ` rudder completion zsh > ~/.zsh/completions/_rudder`);
400
+ }
401
+ if (action === 'install')
402
+ runInstall(shell, home);
403
+ else
404
+ runUninstall(shell, home);
405
+ return;
406
+ }
407
+ throw new CliError(`Unknown completion action "${action}".\n` +
408
+ `Usage: rudder completion [bash|zsh|fish|install|uninstall]`);
409
+ });
410
+ }
411
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACrF,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEvC,kFAAkF;AAClF,iFAAiF;AACjF,iFAAiF;AACjF,gBAAgB;AAChB,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,qDAAqD;AACrD,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,6EAA6E;AAC7E,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAC9E,iFAAiF;AACjF,iEAAiE;AACjE,EAAE;AACF,+EAA+E;AAC/E,kFAAkF;AAClF,mDAAmD;AAEnD,MAAM,CAAC,GAAG;IACR,KAAK,EAAG,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;IAC5C,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;IAC5C,GAAG,EAAK,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS;IAC3C,IAAI,EAAI,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS;CAC5C,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAU,CAAA;AAGhE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC9C,gBAAgB;IAChB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;IACzE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc;IAC3D,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB;IACjE,oBAAoB;IACpB,qCAAqC;IACrC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAE,YAAY;IAC1E,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW;IAC1E,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,eAAe;IAC1E,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB;IACtE,eAAe,EAAE,sBAAsB,EAAE,aAAa,EAAE,eAAe;IACvE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,WAAW;IAC5E,gBAAgB;IAChB,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB;IACjE,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS;IACrE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa;IAChD,oCAAoC;IACpC,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa;IAC7D,qCAAqC;IACrC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa;IAC1E,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe;IAC/D,qEAAqE;IACrE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc;IACzD,uBAAuB,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW;IACrE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU;IACtE,+BAA+B;IAC/B,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa;CACtD,CAAA;AAED,gEAAgE;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe;CAC9D,CAAA;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE;IAC/E,IAAI,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;IAChE,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAwB;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAChB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAClD,CAAC;AAED,oFAAoF;AACpF,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC3C,IAAI,OAAiB,CAAA;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA,CAAC,yCAAyC;IACrD,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,OAAO;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAA;IAC7B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AACnC,CAAC;AAED,gEAAgE;AAEhE,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,MAAM,KAAK,GAAK,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC9C,KAAK,KAAK,CAAC,CAAE,OAAO,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC7C,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAChD,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,OAAe;IAChD,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,OAAO;;;;;;;;;;;;;;;cAeK,KAAK;;;;;;;;;;;;;YAaP,KAAK;;;;cAIH,OAAO;;;;;;;;;;;;;;;;;0BAiBK,KAAK;;;;;;;;;;;CAW9B,CAAA;AACD,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,OAAe;IAC/C,+EAA+E;IAC/E,gFAAgF;IAChF,gFAAgF;IAChF,OAAO;;;;;;;;cAQK,KAAK;;;;;;;;;;;;cAYL,OAAO;;;;;;;;UAQX,KAAK;;;;;;CAMd,CAAA;AACD,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,OAAe;IAChD,+EAA+E;IAC/E,6EAA6E;IAC7E,8EAA8E;IAC9E,OAAO;uDAC8C,KAAK;wDACJ,OAAO;;;wDAGP,KAAK;CAC5D,CAAA;AACD,CAAC;AAaD,MAAM,WAAW,GAAG,8BAA8B,CAAA;AAClD,MAAM,SAAS,GAAK,8BAA8B,CAAA;AAElD,+EAA+E;AAC/E,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,IAAY;IACpD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAA;YAChE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,UAAU,EAAE,SAAS,UAAU,kBAAkB,UAAU,GAAG,EAAE,CAAA;QAC3H,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAA;YAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,SAAS,UAAU,kBAAkB,UAAU,GAAG,EAAE,CAAA;QAC1H,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,sEAAsE;YACtE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAA;YACnF,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAA;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,WAAW,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC9D,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5C,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAY,CAAC,CAAC,CAAC,IAAI,CAAA;AACpF,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AACpD,CAAC;AAED,mFAAmF;AACnF,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAA;QAC/D,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,CAAA;QACZ,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QAClE,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,SAAS,cAAc,CAAC,MAAc,EAAE,UAAkB;IACxD,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACpC,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAA;IAChD,MAAM,KAAK,GAAG,GAAG,WAAW,KAAK,UAAU,KAAK,SAAS,IAAI,CAAA;IAC7D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IACvE,aAAa,CAAC,MAAM,EAAE,QAAQ,GAAG,GAAG,GAAG,KAAK,CAAC,CAAA;IAC7C,OAAO,IAAI,CAAA;AACb,CAAC;AAED,2EAA2E;AAC3E,SAAS,iBAAiB,CAAC,MAAc;IACvC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IACpC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAA;IACjD,sEAAsE;IACtE,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,OAAO,QAAQ,CAAC,WAAW,CAAC,aAAa,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACnG,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;IACjF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,UAAU,CAAC,KAAY,EAAE,IAAY;IAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACrC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC1B,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;IAEvD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAC5D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,cAAc,KAAK,cAAc,CAAC,CAAA;QAC7D,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,OAAO;YACjB,CAAC,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAClD,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;QACzE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,uBAAuB,CAAC,CAAA;IAClG,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,6BAA6B,CAAC,CAAA;QACzD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAA;IACxD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAY,EAAE,IAAY;IAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACrC,2EAA2E;IAC3E,sCAAsC;IACtC,IAAI,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACzC,IAAI,IAAI,CAAC,MAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,IAAI,CAAA;IACjE,OAAO,CAAC,GAAG,CAAC,OAAO;QACjB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,cAAc;QAChD,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,6BAA6B,CAAC,CAAA;AAChE,CAAC;AAED,gEAAgE;AAEhE,iDAAiD;AACjD,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,cAAc,EAAE,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAA;AAEhH,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,+DAA+D,CAAC;SAC5E,QAAQ,CAAC,UAAU,EAAE,yCAAyC,CAAC;SAC/D,QAAQ,CAAC,UAAU,EAAE,8CAA8C,CAAC;SACpE,MAAM,CAAC,CAAC,MAA0B,EAAE,MAA0B,EAAE,EAAE;QACjE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;QAEzB,0EAA0E;QAC1E,2EAA2E;QAC3E,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,MAAM;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;YAChF,OAAM;QACR,CAAC;QAED,yEAAyE;QACzE,gEAAgE;QAChE,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAChF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;YAClE,OAAM;QACR,CAAC;QAED,kEAAkE;QAClE,IAAI,MAAM,KAAK,SAAS,IAAK,gBAAsC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrF,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,WAAW,EAAE,CAAiB,CAAA;YACvD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,QAAQ,CAChB,qDAAqD;oBACrD,uCAAuC,CACxC,CAAA;YACH,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;YAC7C,OAAM;QACR,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,WAAW,EAAE,CAAA;YAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,QAAQ,CAChB,mDAAmD;oBACnD,+CAA+C;oBAC/C,sDAAsD,CACvD,CAAA;YACH,CAAC;YACD,IAAI,MAAM,KAAK,SAAS;gBAAE,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;;gBAC5C,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAC9B,OAAM;QACR,CAAC;QAED,MAAM,IAAI,QAAQ,CAChB,8BAA8B,MAAM,MAAM;YAC1C,4DAA4D,CAC7D,CAAA;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -8,6 +8,7 @@ import './package-manager.js';
8
8
  import './env-vars.js';
9
9
  import './structure.js';
10
10
  import './deps.js';
11
+ import './version-skew.js';
11
12
  import './runtime.js';
12
13
  import './production.js';
13
14
  export declare function loadBuiltInChecks(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/built-in/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,mBAAmB,CAAA;AAC1B,OAAO,sBAAsB,CAAA;AAC7B,OAAO,eAAe,CAAA;AACtB,OAAO,gBAAgB,CAAA;AACvB,OAAO,WAAW,CAAA;AAClB,OAAO,cAAc,CAAA;AACrB,OAAO,iBAAiB,CAAA;AAExB,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/doctor/built-in/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,mBAAmB,CAAA;AAC1B,OAAO,sBAAsB,CAAA;AAC7B,OAAO,eAAe,CAAA;AACtB,OAAO,gBAAgB,CAAA;AACvB,OAAO,WAAW,CAAA;AAClB,OAAO,mBAAmB,CAAA;AAC1B,OAAO,cAAc,CAAA;AACrB,OAAO,iBAAiB,CAAA;AAExB,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC"}
@@ -8,6 +8,7 @@ import './package-manager.js';
8
8
  import './env-vars.js';
9
9
  import './structure.js';
10
10
  import './deps.js';
11
+ import './version-skew.js';
11
12
  import './runtime.js';
12
13
  import './production.js';
13
14
  export function loadBuiltInChecks() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/built-in/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,mBAAmB,CAAA;AAC1B,OAAO,sBAAsB,CAAA;AAC7B,OAAO,eAAe,CAAA;AACtB,OAAO,gBAAgB,CAAA;AACvB,OAAO,WAAW,CAAA;AAClB,OAAO,cAAc,CAAA;AACrB,OAAO,iBAAiB,CAAA;AAExB,MAAM,UAAU,iBAAiB;IAC/B,gEAAgE;IAChE,yEAAyE;IACzE,qEAAqE;IACrE,cAAc;AAChB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/doctor/built-in/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,mBAAmB,CAAA;AAC1B,OAAO,sBAAsB,CAAA;AAC7B,OAAO,eAAe,CAAA;AACtB,OAAO,gBAAgB,CAAA;AACvB,OAAO,WAAW,CAAA;AAClB,OAAO,mBAAmB,CAAA;AAC1B,OAAO,cAAc,CAAA;AACrB,OAAO,iBAAiB,CAAA;AAExB,MAAM,UAAU,iBAAiB;IAC/B,gEAAgE;IAChE,yEAAyE;IACzE,qEAAqE;IACrE,cAAc;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=version-skew.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-skew.d.ts","sourceRoot":"","sources":["../../../src/doctor/built-in/version-skew.ts"],"names":[],"mappings":""}
@@ -0,0 +1,153 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { registerDoctorCheck } from '@rudderjs/console';
4
+ // ── Minimal semver (just enough for @rudderjs/* sibling ranges) ──
5
+ //
6
+ // Real-world shapes in our manifests: `^1.16.0`, `>=2.0.0`, exact pins, and
7
+ // `||` alternatives. Anything unparseable fails OPEN — doctor must never
8
+ // false-fire on a range it can't read.
9
+ function parseTriple(v) {
10
+ const m = /^[v\s]*(\d+)\.(\d+)\.(\d+)/.exec(v.trim().replace(/^[\^~>=<]+/, ''));
11
+ if (!m)
12
+ return null;
13
+ return { major: Number(m[1]), minor: Number(m[2]), patch: Number(m[3]) };
14
+ }
15
+ function compareTriples(a, b) {
16
+ if (a.major !== b.major)
17
+ return a.major - b.major;
18
+ if (a.minor !== b.minor)
19
+ return a.minor - b.minor;
20
+ return a.patch - b.patch;
21
+ }
22
+ /** One comparator (`^1.2.3`, `>=2.0.0`, `1.2.3`, …) against a version. */
23
+ function satisfiesComparator(v, comparator) {
24
+ const floor = parseTriple(comparator);
25
+ if (!floor)
26
+ return true; // unreadable — fail open
27
+ const cmp = compareTriples(v, floor);
28
+ if (comparator.startsWith('^')) {
29
+ // Caret: same left-most non-zero component, at or above the floor.
30
+ if (floor.major > 0)
31
+ return v.major === floor.major && cmp >= 0;
32
+ if (floor.minor > 0)
33
+ return v.major === 0 && v.minor === floor.minor && cmp >= 0;
34
+ return cmp === 0;
35
+ }
36
+ if (comparator.startsWith('~'))
37
+ return v.major === floor.major && v.minor === floor.minor && cmp >= 0;
38
+ if (comparator.startsWith('>='))
39
+ return cmp >= 0;
40
+ if (comparator.startsWith('>'))
41
+ return cmp > 0;
42
+ if (comparator.startsWith('<='))
43
+ return cmp <= 0;
44
+ if (comparator.startsWith('<'))
45
+ return cmp < 0;
46
+ return cmp === 0; // exact pin
47
+ }
48
+ /** `||` alternatives of space-joined comparators (`>=1.2.0 <2 || ^3.0.0`). */
49
+ function satisfiesRange(version, range) {
50
+ const v = parseTriple(version);
51
+ if (!v)
52
+ return true;
53
+ const r = range.trim();
54
+ if (r === '' || r === '*' || r === 'latest' || r === 'next' || r.startsWith('workspace:'))
55
+ return true;
56
+ return r.split('||').some((alt) => {
57
+ const comparators = alt.trim().split(/\s+/).filter(Boolean);
58
+ if (comparators.length === 0)
59
+ return true;
60
+ return comparators.every((c) => satisfiesComparator(v, c));
61
+ });
62
+ }
63
+ function readManifest(file) {
64
+ try {
65
+ return JSON.parse(fs.readFileSync(file, 'utf-8'));
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ /**
72
+ * The version of `sibling` that `fromRealDir`'s package actually loads,
73
+ * following Node's resolution shape across layouts:
74
+ *
75
+ * 1. its own nested `node_modules/<sibling>` (npm conflict-nesting),
76
+ * 2. the adjacent scope dir (pnpm virtual store puts a package's deps as
77
+ * siblings: `.pnpm/<pkg>@<v>/node_modules/@rudderjs/<sibling>`; for a
78
+ * hoisted top-level package this same step IS the top level),
79
+ * 3. the app's top-level `node_modules` (hoisted npm/yarn).
80
+ */
81
+ function resolveSiblingVersion(fromRealDir, sibling) {
82
+ const candidates = [
83
+ path.join(fromRealDir, 'node_modules', sibling, 'package.json'),
84
+ path.resolve(fromRealDir, '..', '..', sibling, 'package.json'),
85
+ path.join(process.cwd(), 'node_modules', sibling, 'package.json'),
86
+ ];
87
+ for (const candidate of candidates) {
88
+ const manifest = readManifest(candidate);
89
+ if (manifest?.version)
90
+ return manifest.version;
91
+ }
92
+ return null;
93
+ }
94
+ registerDoctorCheck({
95
+ id: 'deps:version-skew',
96
+ category: 'deps',
97
+ title: '@rudderjs/* sibling versions in range',
98
+ run() {
99
+ const scopeDir = path.join(process.cwd(), 'node_modules', '@rudderjs');
100
+ let entries;
101
+ try {
102
+ entries = fs.readdirSync(scopeDir);
103
+ }
104
+ catch {
105
+ return { status: 'ok', message: 'no @rudderjs packages installed' };
106
+ }
107
+ const violations = [];
108
+ let rangesChecked = 0;
109
+ for (const entry of entries) {
110
+ let realDir;
111
+ try {
112
+ realDir = fs.realpathSync(path.join(scopeDir, entry));
113
+ }
114
+ catch {
115
+ continue;
116
+ }
117
+ const manifest = readManifest(path.join(realDir, 'package.json'));
118
+ if (!manifest?.name || !manifest.version)
119
+ continue;
120
+ const optional = manifest.peerDependenciesMeta ?? {};
121
+ const requirements = { ...manifest.dependencies, ...manifest.peerDependencies };
122
+ for (const [sibling, range] of Object.entries(requirements)) {
123
+ if (!sibling.startsWith('@rudderjs/'))
124
+ continue;
125
+ if (range.startsWith('workspace:'))
126
+ continue; // monorepo dev link — not an installed range
127
+ const installed = resolveSiblingVersion(realDir, sibling);
128
+ if (installed === null) {
129
+ // Missing entirely: optional peers are legitimately absent; hard
130
+ // deps are deps:declared-installed's finding, not a skew.
131
+ void optional;
132
+ continue;
133
+ }
134
+ rangesChecked++;
135
+ if (!satisfiesRange(installed, range)) {
136
+ violations.push(`${manifest.name}@${manifest.version} requires ${sibling} ${range} — found ${installed}`);
137
+ }
138
+ }
139
+ }
140
+ if (violations.length > 0) {
141
+ return {
142
+ status: 'error',
143
+ message: violations.length === 1
144
+ ? violations[0]
145
+ : `${violations.length} sibling ranges violated (first: ${violations[0]})`,
146
+ fix: 'Bump the pinned version (pnpm.overrides?) so siblings satisfy their declared ranges, then reinstall',
147
+ detail: violations.join('\n'),
148
+ };
149
+ }
150
+ return { status: 'ok', message: `${rangesChecked} sibling range${rangesChecked === 1 ? '' : 's'} satisfied` };
151
+ },
152
+ });
153
+ //# sourceMappingURL=version-skew.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-skew.js","sourceRoot":"","sources":["../../../src/doctor/built-in/version-skew.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -20,6 +20,8 @@ import { tinkerCommand } from './commands/tinker.js';
20
20
  import { optimizeClearCommand } from './commands/optimize-clear.js';
21
21
  import { freshCommand } from './commands/fresh.js';
22
22
  import { downCommand, upCommand } from './commands/maintenance.js';
23
+ import { completionCommand } from './commands/completion.js';
24
+ import { suggestCommands } from './suggest.js';
23
25
  import { rudder, parseSignature, CancelledError, commandObservers } from '@rudderjs/console';
24
26
  import { CliError } from './errors.js';
25
27
  // The `rudder` CLI's own version, read from its package.json at runtime — works
@@ -368,6 +370,7 @@ async function main() {
368
370
  out += ` ${C.green(c.name().padEnd(nameWidth))} ${c.description()}\n`;
369
371
  }
370
372
  }
373
+ out += `\n ${C.dim('Tip: enable tab-completion with')} ${C.green('rudder completion install')}\n`;
371
374
  return out + '\n';
372
375
  },
373
376
  });
@@ -386,6 +389,7 @@ async function main() {
386
389
  freshCommand(program);
387
390
  downCommand(program);
388
391
  upCommand(program);
392
+ completionCommand(program);
389
393
  // Commands that scan files / manage tooling state must work even when the
390
394
  // app cannot boot (e.g. fresh clone, missing manifest, broken provider config).
391
395
  // List them here to skip the bootApp() phase entirely.
@@ -421,6 +425,10 @@ async function main() {
421
425
  'migrate', 'migrate:fresh', 'migrate:status', 'migrate:rollback', 'migrate:refresh',
422
426
  'add', 'remove', 'upgrade', 'key:generate', 'about', 'test',
423
427
  'optimize:clear', 'fresh',
428
+ // `completion` only prints/writes static shell scripts — it never touches
429
+ // app state and must work outside a project (e.g. `rudder completion install`
430
+ // run once from anywhere).
431
+ 'completion',
424
432
  // `down`/`up` just write/remove the storage/framework/down flag file — no
425
433
  // app context needed (and the app may be down because it can't boot).
426
434
  'down', 'up',
@@ -524,7 +532,15 @@ async function main() {
524
532
  // default message and set a non-zero exit code. `parseAsync()` resolves normally
525
533
  // (no `exitOverride`), so the process exits with this code once the loop drains.
526
534
  program.on('command:*', (operands) => {
527
- console.error(`\x1b[31mUnknown command: ${operands[0]}\x1b[0m`);
535
+ const unknown = operands[0] ?? '';
536
+ console.error(`\x1b[31mUnknown command: ${unknown}\x1b[0m`);
537
+ // Suggest the closest real command(s) — candidates come from the live
538
+ // program, so package-contributed and app commands are included too.
539
+ const names = program.commands.map(c => c.name()).filter(n => n && n !== '*');
540
+ const guesses = suggestCommands(unknown, names);
541
+ if (guesses.length > 0) {
542
+ console.error(`Did you mean ${guesses.map(g => `\x1b[1m${g}\x1b[0m`).join(' or ')}?`);
543
+ }
528
544
  console.error(`Run \x1b[1mrudder --help\x1b[0m for a list of available commands.`);
529
545
  process.exitCode = 1;
530
546
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /** Levenshtein edit distance between two strings (insert/delete/substitute = 1). */
2
+ export declare function levenshtein(a: string, b: string): number;
3
+ export interface SuggestOptions {
4
+ /** Max suggestions to return. Default 3. */
5
+ limit?: number;
6
+ }
7
+ /**
8
+ * Suggest the command names closest to `input`, ranked by edit distance. Returns
9
+ * [] when nothing is close enough to be a likely typo. A candidate sharing the
10
+ * input's namespace (the part before ':') is preferred on ties, so `migrate:froesh`
11
+ * suggests `migrate:fresh` over an equidistant command in another namespace.
12
+ */
13
+ export declare function suggestCommands(input: string, candidates: readonly string[], opts?: SuggestOptions): string[];
14
+ //# sourceMappingURL=suggest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../src/suggest.ts"],"names":[],"mappings":"AAGA,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBxD;AAED,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,GAAE,cAAmB,GAAG,MAAM,EAAE,CAmBjH"}
@@ -0,0 +1,51 @@
1
+ // "Did you mean ...?" support for unknown commands. Pure string distance, no
2
+ // dependencies — kept separate from index.ts so it is unit-testable.
3
+ /** Levenshtein edit distance between two strings (insert/delete/substitute = 1). */
4
+ export function levenshtein(a, b) {
5
+ if (a === b)
6
+ return 0;
7
+ if (a.length === 0)
8
+ return b.length;
9
+ if (b.length === 0)
10
+ return a.length;
11
+ // Single-row DP: prev[j] is the distance for b[0..j] against the previous a-prefix.
12
+ let prev = Array.from({ length: b.length + 1 }, (_, j) => j);
13
+ for (let i = 1; i <= a.length; i++) {
14
+ const curr = [i];
15
+ for (let j = 1; j <= b.length; j++) {
16
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
17
+ curr[j] = Math.min(prev[j] + 1, // deletion
18
+ curr[j - 1] + 1, // insertion
19
+ prev[j - 1] + cost);
20
+ }
21
+ prev = curr;
22
+ }
23
+ return prev[b.length];
24
+ }
25
+ /**
26
+ * Suggest the command names closest to `input`, ranked by edit distance. Returns
27
+ * [] when nothing is close enough to be a likely typo. A candidate sharing the
28
+ * input's namespace (the part before ':') is preferred on ties, so `migrate:froesh`
29
+ * suggests `migrate:fresh` over an equidistant command in another namespace.
30
+ */
31
+ export function suggestCommands(input, candidates, opts = {}) {
32
+ const limit = opts.limit ?? 3;
33
+ // Allow more slack for longer inputs; a 2-char typo budget on short names.
34
+ const maxDistance = Math.max(2, Math.floor(input.length / 3));
35
+ const inputNs = input.includes(':') ? input.slice(0, input.indexOf(':')) : '';
36
+ const scored = candidates
37
+ .map(name => ({ name, dist: levenshtein(input, name) }))
38
+ .filter(c => c.dist <= maxDistance)
39
+ .sort((a, b) => {
40
+ if (a.dist !== b.dist)
41
+ return a.dist - b.dist;
42
+ // Tie-break: same-namespace first, then alphabetical for stability.
43
+ const aNs = inputNs && a.name.startsWith(`${inputNs}:`) ? 0 : 1;
44
+ const bNs = inputNs && b.name.startsWith(`${inputNs}:`) ? 0 : 1;
45
+ if (aNs !== bNs)
46
+ return aNs - bNs;
47
+ return a.name < b.name ? -1 : 1;
48
+ });
49
+ return scored.slice(0, limit).map(c => c.name);
50
+ }
51
+ //# sourceMappingURL=suggest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../src/suggest.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudderjs/cli",
3
- "version": "4.14.0",
3
+ "version": "4.16.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,7 +24,7 @@
24
24
  "chalk": "^5.0.0",
25
25
  "dotenv": "^16.4.0",
26
26
  "@clack/prompts": "^1.0.0",
27
- "@rudderjs/core": "^1.11.0",
27
+ "@rudderjs/core": "^1.12.3",
28
28
  "@rudderjs/console": "^1.4.0"
29
29
  },
30
30
  "peerDependencies": {
@@ -47,7 +47,7 @@
47
47
  "dev": "tsc -p tsconfig.build.json --watch",
48
48
  "typecheck": "tsc --noEmit",
49
49
  "lint": "eslint src",
50
- "test": "tsc -p tsconfig.test.json && node --test dist-test/index.test.js dist-test/load-package-commands.test.js dist-test/native-driver-cache.test.js dist-test/commands/add.test.js dist-test/commands/upgrade.test.js dist-test/commands/key-generate.test.js dist-test/commands/about.test.js dist-test/commands/test.test.js dist-test/commands/make/test.test.js dist-test/commands/optimize-clear.test.js dist-test/commands/make/exception.test.js dist-test/commands/make/policy.test.js dist-test/commands/make/observer.test.js dist-test/commands/make/cast.test.js dist-test/commands/make/notification.test.js dist-test/commands/make/with-test.test.js dist-test/commands/remove.test.js dist-test/commands/tinker.test.js dist-test/commands/module/publish.test.js dist-test/doctor/load-package-checks.test.js dist-test/doctor/orchestrator.test.js dist-test/doctor/reporter.test.js dist-test/doctor/fixer.test.js dist-test/doctor/load-dotenv.test.js dist-test/doctor/built-in/built-in.test.js dist-test/doctor/built-in/production.test.js",
50
+ "test": "tsc -p tsconfig.test.json && node --test dist-test/index.test.js dist-test/load-package-commands.test.js dist-test/native-driver-cache.test.js dist-test/commands/add.test.js dist-test/commands/upgrade.test.js dist-test/commands/key-generate.test.js dist-test/commands/about.test.js dist-test/commands/test.test.js dist-test/commands/make/test.test.js dist-test/commands/optimize-clear.test.js dist-test/commands/completion.test.js dist-test/suggest.test.js dist-test/commands/make/exception.test.js dist-test/commands/make/policy.test.js dist-test/commands/make/observer.test.js dist-test/commands/make/cast.test.js dist-test/commands/make/notification.test.js dist-test/commands/make/with-test.test.js dist-test/commands/remove.test.js dist-test/commands/tinker.test.js dist-test/commands/module/publish.test.js dist-test/doctor/load-package-checks.test.js dist-test/doctor/orchestrator.test.js dist-test/doctor/reporter.test.js dist-test/doctor/fixer.test.js dist-test/doctor/load-dotenv.test.js dist-test/doctor/built-in/built-in.test.js dist-test/doctor/built-in/production.test.js",
51
51
  "clean": "rm -rf dist"
52
52
  }
53
53
  }