dashb 1.0.2 → 1.0.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/README.md +66 -0
- package/dist/autocomplete.d.ts +1 -0
- package/dist/autocomplete.js +117 -0
- package/dist/autocomplete.js.map +1 -0
- package/dist/cli.js +149 -39
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +2 -0
- package/dist/commands.js +12 -1
- package/dist/commands.js.map +1 -1
- package/dist/display.js +21 -1
- package/dist/display.js.map +1 -1
- package/dist/run.d.ts +2 -1
- package/dist/run.js +62 -4
- package/dist/run.js.map +1 -1
- package/dist/stats.d.ts +2 -0
- package/dist/stats.js +117 -0
- package/dist/stats.js.map +1 -0
- package/package.json +2 -2
package/README.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
|
|
2
|
+
# dashb ⚡️
|
|
3
|
+
|
|
4
|
+
> Developer dashboard for your terminal.
|
|
5
|
+
|
|
6
|
+
**dashb** is a smart CLI tool that automatically detects your project stack and provides instant shortcuts for common tasks like running tests, starting servers, and building your app. It also tracks your usage stats and lets you create custom shortcuts.
|
|
7
|
+
|
|
8
|
+

|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install -g dashb
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
Simply run `db` in any project directory:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
db
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
It will detect if you're in a Node, Python, Rust, Go, or Docker project and show relevant commands.
|
|
25
|
+
|
|
26
|
+
### Stack Specific
|
|
27
|
+
To force a specific stack's commands:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
db py # Python commands
|
|
31
|
+
db js # Node.js commands
|
|
32
|
+
db rs # Rust commands
|
|
33
|
+
db go # Go commands
|
|
34
|
+
db dk # Docker commands
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Features
|
|
38
|
+
|
|
39
|
+
- **Auto-Detection**: Works with Node.js, Python, Rust, Go, Ruby, Java, C/C++, and Docker.
|
|
40
|
+
- **Performance**: Extremely fast startup.
|
|
41
|
+
- **Custom Shortcuts**: Add your own project-specific commands.
|
|
42
|
+
```bash
|
|
43
|
+
db add
|
|
44
|
+
```
|
|
45
|
+
- **Stats Tracking**: Visualize your most used commands.
|
|
46
|
+
```bash
|
|
47
|
+
db stats
|
|
48
|
+
```
|
|
49
|
+
- **Doctor**: Check project health.
|
|
50
|
+
```bash
|
|
51
|
+
db doc
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Development
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
git clone https://github.com/ratnamshah/dashb.git
|
|
58
|
+
cd dashb
|
|
59
|
+
npm install
|
|
60
|
+
npm run build
|
|
61
|
+
npm link
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## License
|
|
65
|
+
|
|
66
|
+
MIT © [Jpdz Labs](https://github.com/ratnamshah)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function setupAutocomplete(): void;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, appendFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
const TTY = process.stdout.isTTY !== false && !process.env['NO_COLOR'];
|
|
6
|
+
const GREEN = TTY ? '\x1b[38;2;110;210;130m' : '';
|
|
7
|
+
const ORANGE = TTY ? '\x1b[38;2;255;165;0m' : '';
|
|
8
|
+
const RED = TTY ? '\x1b[38;2;255;80;80m' : '';
|
|
9
|
+
const DIM = TTY ? '\x1b[90m' : '';
|
|
10
|
+
const RESET = TTY ? '\x1b[0m' : '';
|
|
11
|
+
function detectShell() {
|
|
12
|
+
const shellEnv = process.env.SHELL || '';
|
|
13
|
+
if (shellEnv.includes('zsh'))
|
|
14
|
+
return 'zsh';
|
|
15
|
+
if (shellEnv.includes('bash'))
|
|
16
|
+
return 'bash';
|
|
17
|
+
try {
|
|
18
|
+
const parentShell = execSync('ps -p $PPID -o comm=', { encoding: 'utf-8' }).trim();
|
|
19
|
+
if (parentShell.includes('zsh'))
|
|
20
|
+
return 'zsh';
|
|
21
|
+
if (parentShell.includes('bash'))
|
|
22
|
+
return 'bash';
|
|
23
|
+
}
|
|
24
|
+
catch { }
|
|
25
|
+
return 'unknown';
|
|
26
|
+
}
|
|
27
|
+
function getZshCompletion() {
|
|
28
|
+
const lines = [
|
|
29
|
+
'_dashb_completions() {',
|
|
30
|
+
' local output',
|
|
31
|
+
' output=$(dashb --completion 2>/dev/null)',
|
|
32
|
+
' ',
|
|
33
|
+
' if [[ -n "$output" ]]; then',
|
|
34
|
+
' local -a completions',
|
|
35
|
+
' completions=("${(@f)output}")',
|
|
36
|
+
' _describe \'dashb commands\' completions',
|
|
37
|
+
' fi',
|
|
38
|
+
'}',
|
|
39
|
+
'',
|
|
40
|
+
'compdef _dashb_completions dashb db',
|
|
41
|
+
];
|
|
42
|
+
return lines.join('\n');
|
|
43
|
+
}
|
|
44
|
+
function getBashCompletion() {
|
|
45
|
+
const lines = [
|
|
46
|
+
'_dashb_completions() {',
|
|
47
|
+
' local cur="${COMP_WORDS[COMP_CWORD]}"',
|
|
48
|
+
' local output',
|
|
49
|
+
' ',
|
|
50
|
+
' output=$(dashb --completion 2>/dev/null)',
|
|
51
|
+
' ',
|
|
52
|
+
' if [[ -n "$output" ]]; then',
|
|
53
|
+
' local keys=$(echo "$output" | cut -d\':\' -f1)',
|
|
54
|
+
' COMPREPLY=( $(compgen -W "$keys" -- "$cur") )',
|
|
55
|
+
' fi',
|
|
56
|
+
'}',
|
|
57
|
+
'',
|
|
58
|
+
'complete -F _dashb_completions dashb db',
|
|
59
|
+
];
|
|
60
|
+
return lines.join('\n');
|
|
61
|
+
}
|
|
62
|
+
export function setupAutocomplete() {
|
|
63
|
+
console.log('\n ' + ORANGE + '\u25b6' + RESET + ' Setting up dashb autocomplete...');
|
|
64
|
+
const shell = detectShell();
|
|
65
|
+
if (shell === 'unknown') {
|
|
66
|
+
console.log('\n ' + RED + '\u2716' + RESET + ' Could not automatically detect shell (zsh or bash supported).');
|
|
67
|
+
console.log(' Please set up autocomplete manually.\n');
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
const dashbDir = join(homedir(), '.dashb');
|
|
71
|
+
if (!existsSync(dashbDir)) {
|
|
72
|
+
mkdirSync(dashbDir, { recursive: true });
|
|
73
|
+
}
|
|
74
|
+
const scriptName = 'completion.' + shell;
|
|
75
|
+
const scriptPath = join(dashbDir, scriptName);
|
|
76
|
+
const rcName = shell === 'zsh' ? '.zshrc' : '.bashrc';
|
|
77
|
+
const rcPath = join(homedir(), rcName);
|
|
78
|
+
// 1. Write the completion script
|
|
79
|
+
try {
|
|
80
|
+
const scriptContent = shell === 'zsh' ? getZshCompletion() : getBashCompletion();
|
|
81
|
+
writeFileSync(scriptPath, scriptContent + '\n', 'utf-8');
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
console.error('\n ' + RED + '\u2716' + RESET + ' Failed to write completion script: ' + err.message + '\n');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
// 2. Check if already sourced in rc file
|
|
88
|
+
const sourceLine = 'source "' + scriptPath + '"';
|
|
89
|
+
let alreadySourced = false;
|
|
90
|
+
try {
|
|
91
|
+
if (existsSync(rcPath)) {
|
|
92
|
+
const rcContent = readFileSync(rcPath, 'utf-8');
|
|
93
|
+
alreadySourced = rcContent.includes(scriptPath);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch { }
|
|
97
|
+
// 3. Append to rc file if needed
|
|
98
|
+
if (!alreadySourced) {
|
|
99
|
+
try {
|
|
100
|
+
appendFileSync(rcPath, '\n# dashb autocomplete\n' + sourceLine + '\n', 'utf-8');
|
|
101
|
+
console.log(' ' + GREEN + '\u2714' + RESET + ' Appended source line to ~/' + rcName);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
console.log('\n ' + RED + '\u2716' + RESET + ' Could not append to ~/' + rcName + '.');
|
|
105
|
+
console.log(' ' + DIM + 'Please add this line manually:' + RESET);
|
|
106
|
+
console.log(' ' + sourceLine + '\n');
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
console.log(' ' + GREEN + '\u2714' + RESET + ' Autocomplete already configured in ~/' + rcName);
|
|
112
|
+
}
|
|
113
|
+
console.log('\n ' + GREEN + '\u2714' + RESET + ' Autocomplete installed for ' + shell + '!');
|
|
114
|
+
console.log(' ' + ORANGE + 'Please restart your terminal or run:' + RESET);
|
|
115
|
+
console.log(' source ~/' + rcName + '\n');
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=autocomplete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../source/autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC7F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACvE,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;AAClC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;AAEnC,SAAS,WAAW;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;IACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,QAAQ,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnF,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9C,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC,CAAC,CAAC;IAEX,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,KAAK,GAAG;QACZ,wBAAwB;QACxB,gBAAgB;QAChB,4CAA4C;QAC5C,IAAI;QACJ,+BAA+B;QAC/B,0BAA0B;QAC1B,mCAAmC;QACnC,8CAA8C;QAC9C,MAAM;QACN,GAAG;QACH,EAAE;QACF,qCAAqC;KACtC,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,KAAK,GAAG;QACZ,wBAAwB;QACxB,yCAAyC;QACzC,gBAAgB;QAChB,IAAI;QACJ,4CAA4C;QAC5C,IAAI;QACJ,+BAA+B;QAC/B,oDAAoD;QACpD,mDAAmD;QACnD,MAAM;QACN,GAAG;QACH,EAAE;QACF,yCAAyC;KAC1C,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,mCAAmC,CAAC,CAAC;IAEtF,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,KAAK,GAAG,gEAAgE,CAAC,CAAC;QAChH,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,GAAG,KAAK,CAAC;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IAEvC,iCAAiC;IACjC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;QACjF,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,KAAK,GAAG,sCAAsC,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAC7G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,yCAAyC;IACzC,MAAM,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,CAAC;IACjD,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChD,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,CAAC;IAEX,iCAAiC;IACjC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,cAAc,CAAC,MAAM,EAAE,0BAA0B,GAAG,UAAU,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,6BAA6B,GAAG,MAAM,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,KAAK,GAAG,yBAAyB,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC;YACxF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,gCAAgC,GAAG,KAAK,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,wCAAwC,GAAG,MAAM,CAAC,CAAC;IACnG,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,8BAA8B,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,GAAG,sCAAsC,GAAG,KAAK,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { basename } from 'node:path';
|
|
2
|
+
import { basename, dirname, join } from 'node:path';
|
|
3
3
|
import { execSync } from 'node:child_process';
|
|
4
|
+
import { readFileSync } from 'node:fs';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
4
6
|
import { detectStacks, detectProject, aliasToStack } from './detect.js';
|
|
5
7
|
import { getCommands } from './commands.js';
|
|
6
8
|
import { display } from './display.js';
|
|
@@ -8,10 +10,31 @@ import { runShortcut } from './run.js';
|
|
|
8
10
|
import { getDownloads } from './downloads.js';
|
|
9
11
|
import { runDoctor } from './doctor.js';
|
|
10
12
|
import { loadCustom, interactiveAdd, removeShortcut } from './custom.js';
|
|
13
|
+
import { showStats, trackCommand } from './stats.js';
|
|
14
|
+
import { setupAutocomplete } from './autocomplete.js';
|
|
15
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
16
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
11
17
|
const args = process.argv.slice(2);
|
|
12
18
|
const cwd = process.cwd();
|
|
13
19
|
const stacks = detectStacks(cwd);
|
|
14
20
|
const project = detectProject(cwd);
|
|
21
|
+
// --completion hidden flag for shell hook
|
|
22
|
+
if (args[0] === '--completion') {
|
|
23
|
+
const builtInCommands = [
|
|
24
|
+
{ key: 'doc', label: 'Doctor' },
|
|
25
|
+
{ key: 'stats', label: 'Stats' },
|
|
26
|
+
{ key: 'add', label: 'Add Shortcut' },
|
|
27
|
+
{ key: 'setup-autocomplete', label: 'Setup Autocomplete' },
|
|
28
|
+
];
|
|
29
|
+
const commands = getCommands(project.type, cwd);
|
|
30
|
+
const customCommands = loadCustom(cwd);
|
|
31
|
+
const allCmds = [...builtInCommands, ...commands, ...customCommands];
|
|
32
|
+
for (const cmd of allCmds) {
|
|
33
|
+
// Format: key:Label (spaces in label are okay for zsh, bash ignores label)
|
|
34
|
+
console.log(`${cmd.key}:${cmd.label.replace(/:/g, '-')}`);
|
|
35
|
+
}
|
|
36
|
+
process.exit(0);
|
|
37
|
+
}
|
|
15
38
|
// Detect which bin name was used (dashb or db)
|
|
16
39
|
const rawBin = basename(process.argv[1] ?? '');
|
|
17
40
|
const bin = rawBin.replace(/\.js$/, '');
|
|
@@ -29,23 +52,19 @@ catch {
|
|
|
29
52
|
}
|
|
30
53
|
// --version / -v
|
|
31
54
|
if (args[0] === '--version' || args[0] === '-v') {
|
|
32
|
-
console.log(
|
|
55
|
+
console.log(`dashb v${pkg.version}`);
|
|
33
56
|
process.exit(0);
|
|
34
57
|
}
|
|
35
58
|
async function main() {
|
|
36
59
|
// Fetch downloads in background (non-blocking)
|
|
37
60
|
const downloadsPromise = getDownloads();
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
await interactiveAdd(cwd);
|
|
46
|
-
process.exit(0);
|
|
47
|
-
}
|
|
48
|
-
// db rm <key> — remove a custom shortcut
|
|
61
|
+
const builtInCommands = [
|
|
62
|
+
{ key: 'doc', label: 'Doctor', command: 'doc', isBuiltIn: true },
|
|
63
|
+
{ key: 'stats', label: 'Stats', command: 'stats', isBuiltIn: true },
|
|
64
|
+
{ key: 'add', label: 'Add Shortcut', command: 'add', isBuiltIn: true },
|
|
65
|
+
{ key: 'setup-autocomplete', label: 'Setup Autocomplete', command: 'setup-autocomplete', isBuiltIn: true }
|
|
66
|
+
];
|
|
67
|
+
// db rm <key> — remove a custom shortcut (special case, not stackable)
|
|
49
68
|
if (args[0] === 'rm') {
|
|
50
69
|
const key = args[1];
|
|
51
70
|
if (!key) {
|
|
@@ -64,16 +83,32 @@ async function main() {
|
|
|
64
83
|
// Stack-specific mode: db py, db js, db rs, etc.
|
|
65
84
|
const selectedStack = stacks.find(s => s.id === stackFromAlias);
|
|
66
85
|
if (!selectedStack) {
|
|
86
|
+
// It's not detected as an active project type here.
|
|
87
|
+
// BUT they might be trying to run a specific file using the runner
|
|
88
|
+
// e.g. "db py hello.py"
|
|
89
|
+
const stackArgs = args.slice(1);
|
|
90
|
+
if (stackArgs.length > 0) {
|
|
91
|
+
const { findFileRunner } = await import('./run.js');
|
|
92
|
+
const fileRunnerCmd = await findFileRunner(stackArgs[0], cwd, stackFromAlias);
|
|
93
|
+
if (fileRunnerCmd) {
|
|
94
|
+
// Manually execute it here since it bypassed normal parsing
|
|
95
|
+
const code = runShortcut(fileRunnerCmd, shortName, stackArgs.slice(1));
|
|
96
|
+
process.exit(code);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// If we reach here, it's not an active project AND they aren't executing a valid file
|
|
67
100
|
const o = process.stdout.isTTY !== false && !process.env['NO_COLOR']
|
|
68
101
|
? '\x1b[38;2;255;80;80m' : '';
|
|
69
102
|
const r = o ? '\x1b[0m' : '';
|
|
70
103
|
console.error(`\n ${o}✖${r} Stack "${args[0]}" not detected in this directory`);
|
|
104
|
+
console.error(` Also could not match "${stackArgs[0] || ''}" to a runnable file.`);
|
|
71
105
|
const detected = stacks.map(s => s.alias).join(', ');
|
|
72
106
|
console.error(` Detected stacks: ${detected || 'none'}\n`);
|
|
73
107
|
process.exit(1);
|
|
74
108
|
}
|
|
75
109
|
const stackArgs = args.slice(1);
|
|
76
110
|
const commands = getCommands(selectedStack.id, cwd);
|
|
111
|
+
const customCommands = loadCustom(cwd);
|
|
77
112
|
if (stackArgs.length === 0 || stackArgs[0] === '--help' || stackArgs[0] === '-h') {
|
|
78
113
|
const downloads = await downloadsPromise;
|
|
79
114
|
display({
|
|
@@ -84,21 +119,47 @@ async function main() {
|
|
|
84
119
|
bin: shortName,
|
|
85
120
|
selectedStack,
|
|
86
121
|
downloads,
|
|
122
|
+
customCommands,
|
|
87
123
|
});
|
|
88
124
|
process.exit(0);
|
|
89
125
|
}
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
|
|
126
|
+
const execQueue = await parseCommands(stackArgs, builtInCommands, commands, customCommands, cwd, selectedStack.id);
|
|
127
|
+
if (execQueue.length === 0) {
|
|
128
|
+
// It couldn't find ANY valid command to start with
|
|
129
|
+
const key = stackArgs[0];
|
|
130
|
+
const o = process.stdout.isTTY !== false && !process.env['NO_COLOR'] ? '\x1b[38;2;255;80;80m' : '';
|
|
95
131
|
const r = o ? '\x1b[0m' : '';
|
|
96
132
|
console.error(`\n ${o}✖${r} Unknown shortcut: "${key}" for ${selectedStack.label}`);
|
|
97
133
|
console.error(` Run '${shortName} ${args[0]}' to see available shortcuts\n`);
|
|
98
134
|
process.exit(1);
|
|
99
135
|
}
|
|
100
|
-
|
|
101
|
-
|
|
136
|
+
for (const { cmd, cmdArgs } of execQueue) {
|
|
137
|
+
if (cmd.isBuiltIn) {
|
|
138
|
+
if (cmd.key === 'doc') {
|
|
139
|
+
trackCommand('doc');
|
|
140
|
+
await runDoctor(cwd, stacks);
|
|
141
|
+
}
|
|
142
|
+
else if (cmd.key === 'stats') {
|
|
143
|
+
trackCommand('stats');
|
|
144
|
+
showStats();
|
|
145
|
+
}
|
|
146
|
+
else if (cmd.key === 'add') {
|
|
147
|
+
trackCommand('add');
|
|
148
|
+
await interactiveAdd(cwd);
|
|
149
|
+
}
|
|
150
|
+
else if (cmd.key === 'setup-autocomplete') {
|
|
151
|
+
trackCommand('setup-autocomplete');
|
|
152
|
+
setupAutocomplete();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
const code = runShortcut(cmd, shortName, cmdArgs);
|
|
157
|
+
if (code !== 0) {
|
|
158
|
+
process.exit(code); // Stop on first failure
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
process.exit(0);
|
|
102
163
|
}
|
|
103
164
|
// Default mode (no stack selector)
|
|
104
165
|
const commands = getCommands(project.type, cwd);
|
|
@@ -117,27 +178,76 @@ async function main() {
|
|
|
117
178
|
});
|
|
118
179
|
process.exit(0);
|
|
119
180
|
}
|
|
120
|
-
//
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
181
|
+
// Default mode: parse stacked commands + args
|
|
182
|
+
const execQueue = await parseCommands(args, builtInCommands, commands, customCommands, cwd);
|
|
183
|
+
if (execQueue.length === 0) {
|
|
184
|
+
const key = args[0];
|
|
185
|
+
const o = process.stdout.isTTY !== false && !process.env['NO_COLOR'] ? '\x1b[38;2;255;80;80m' : '';
|
|
186
|
+
const r = o ? '\x1b[0m' : '';
|
|
187
|
+
console.error(`\n ${o}✖${r} Unknown shortcut: "${key}"`);
|
|
188
|
+
console.error(` Run '${shortName}' to see available shortcuts\n`);
|
|
189
|
+
process.exit(1);
|
|
190
|
+
}
|
|
191
|
+
for (const { cmd, cmdArgs } of execQueue) {
|
|
192
|
+
if (cmd.isBuiltIn) {
|
|
193
|
+
if (cmd.key === 'doc') {
|
|
194
|
+
trackCommand('doc');
|
|
195
|
+
await runDoctor(cwd, stacks);
|
|
196
|
+
}
|
|
197
|
+
else if (cmd.key === 'stats') {
|
|
198
|
+
trackCommand('stats');
|
|
199
|
+
showStats();
|
|
200
|
+
}
|
|
201
|
+
else if (cmd.key === 'add') {
|
|
202
|
+
trackCommand('add');
|
|
203
|
+
await interactiveAdd(cwd);
|
|
204
|
+
}
|
|
205
|
+
else if (cmd.key === 'setup-autocomplete') {
|
|
206
|
+
trackCommand('setup-autocomplete');
|
|
207
|
+
setupAutocomplete();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
const code = runShortcut(cmd, shortName, cmdArgs);
|
|
212
|
+
if (code !== 0) {
|
|
213
|
+
process.exit(code); // Stop on first failure
|
|
214
|
+
}
|
|
215
|
+
}
|
|
126
216
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
217
|
+
process.exit(0);
|
|
218
|
+
}
|
|
219
|
+
async function parseCommands(inputArgs, builtIn, builtInScripts, customScripts, cwd, stack) {
|
|
220
|
+
const allCmds = [...builtIn, ...builtInScripts, ...customScripts];
|
|
221
|
+
const queue = [];
|
|
222
|
+
for (const arg of inputArgs) {
|
|
223
|
+
const matchedCmd = allCmds.find(c => c.key === arg);
|
|
224
|
+
if (matchedCmd) {
|
|
225
|
+
// Start a new command execution block
|
|
226
|
+
queue.push({ cmd: matchedCmd, cmdArgs: [] });
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
// If we haven't matched anything yet (it's the first execution item)
|
|
230
|
+
if (queue.length === 0) {
|
|
231
|
+
// Try the smart file runner fallback
|
|
232
|
+
const { findFileRunner } = await import('./run.js');
|
|
233
|
+
const fileRunnerCmd = await findFileRunner(arg, cwd, stack);
|
|
234
|
+
if (fileRunnerCmd) {
|
|
235
|
+
queue.push({ cmd: fileRunnerCmd, cmdArgs: [] });
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// It's an argument. Append it to the LAST matched command
|
|
240
|
+
if (queue.length > 0) {
|
|
241
|
+
queue[queue.length - 1].cmdArgs.push(arg);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
// If the VERY FIRST argument doesn't match a command, it's invalid.
|
|
245
|
+
// Return empty queue to trigger the "Unknown shortcut" error.
|
|
246
|
+
return [];
|
|
247
|
+
}
|
|
248
|
+
}
|
|
132
249
|
}
|
|
133
|
-
|
|
134
|
-
const o = process.stdout.isTTY !== false && !process.env['NO_COLOR']
|
|
135
|
-
? '\x1b[38;2;255;80;80m'
|
|
136
|
-
: '';
|
|
137
|
-
const r = o ? '\x1b[0m' : '';
|
|
138
|
-
console.error(`\n ${o}✖${r} Unknown shortcut: "${key}"`);
|
|
139
|
-
console.error(` Run '${shortName}' to see available shortcuts\n`);
|
|
140
|
-
process.exit(1);
|
|
250
|
+
return queue;
|
|
141
251
|
}
|
|
142
252
|
main();
|
|
143
253
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../source/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../source/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAErF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;AACjC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AAEnC,0CAA0C;AAC1C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE,CAAC;IAC/B,MAAM,eAAe,GAAG;QACtB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC/B,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;QAChC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE;QACrC,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE;KAC3D,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,QAAQ,EAAE,GAAG,cAAc,CAAC,CAAC;IAErE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,2EAA2E;QAC3E,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,+CAA+C;AAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACxC,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AAEhD,6CAA6C;AAC7C,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,IAAI,CAAC;IACH,MAAM,GAAG,QAAQ,CAAC,iCAAiC,EAAE;QACnD,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC,IAAI,EAAE,CAAC;AACZ,CAAC;AAAC,MAAM,CAAC;IACP,yBAAyB;AAC3B,CAAC;AAED,iBAAiB;AACjB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,+CAA+C;IAC/C,MAAM,gBAAgB,GAAG,YAAY,EAAE,CAAC;IAExC,MAAM,eAAe,GAAG;QACtB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;QAChE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;QACnE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;QACtE,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE;KAC3G,CAAC;IAEF,uEAAuE;IACvE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;gBAClE,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,SAAS,aAAa,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qEAAqE;IACrE,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnE,IAAI,cAAc,EAAE,CAAC;QACnB,iDAAiD;QACjD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,oDAAoD;YACpD,mEAAmE;YACnE,wBAAwB;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;gBACpD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;gBAC9E,IAAI,aAAa,EAAE,CAAC;oBAClB,4DAA4D;oBAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YAED,sFAAsF;YACtF,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;gBAClE,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;YACjF,OAAO,CAAC,KAAK,CAAC,2BAA2B,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;YACpF,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,sBAAsB,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACjF,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC;YACzC,OAAO,CAAC;gBACN,MAAM;gBACN,QAAQ;gBACR,GAAG;gBACH,MAAM;gBACN,GAAG,EAAE,SAAS;gBACd,aAAa;gBACb,SAAS;gBACT,cAAc;aACf,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QAEnH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,mDAAmD;YACnD,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;YACnG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,GAAG,SAAS,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;YACrF,OAAO,CAAC,KAAK,CAAC,UAAU,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,SAAS,EAAE,CAAC;YACzC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAClB,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;oBACtB,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC/B,CAAC;qBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;oBAC/B,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,SAAS,EAAE,CAAC;gBACd,CAAC;qBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;oBAC7B,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC5B,CAAC;qBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,oBAAoB,EAAE,CAAC;oBAC5C,YAAY,CAAC,oBAAoB,CAAC,CAAC;oBACnC,iBAAiB,EAAE,CAAC;gBACtB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;gBAClD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mCAAmC;IACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAEvC,kDAAkD;IAClD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC;QACzC,OAAO,CAAC;YACN,MAAM;YACN,QAAQ;YACR,GAAG;YACH,MAAM;YACN,GAAG,EAAE,SAAS;YACd,SAAS;YACT,cAAc;SACf,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8CAA8C;IAC9C,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IAE5F,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;QACnG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,GAAG,GAAG,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,UAAU,SAAS,gCAAgC,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,SAAS,EAAE,CAAC;QACzC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;gBACtB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gBAC/B,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,SAAS,EAAE,CAAC;YACd,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;gBAC7B,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,oBAAoB,EAAE,CAAC;gBAC5C,YAAY,CAAC,oBAAoB,CAAC,CAAC;gBACnC,iBAAiB,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAClD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,SAAmB,EACnB,OAAc,EACd,cAAqB,EACrB,aAAoB,EACpB,GAAW,EACX,KAAc;IAEd,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,aAAa,CAAC,CAAC;IAClE,MAAM,KAAK,GAA2C,EAAE,CAAC;IAEzD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAEpD,IAAI,UAAU,EAAE,CAAC;YACf,sCAAsC;YACtC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,qEAAqE;YACrE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,qCAAqC;gBACrC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;gBACpD,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAE5D,IAAI,aAAa,EAAE,CAAC;oBAClB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;oBAChD,SAAS;gBACX,CAAC;YACH,CAAC;YAED,0DAA0D;YAC1D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,oEAAoE;gBACpE,8DAA8D;gBAC9D,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/dist/commands.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { StackID } from './detect.js';
|
|
2
|
+
export declare function getPythonExecutable(): string;
|
|
2
3
|
export type ProjectType = StackID;
|
|
3
4
|
export interface CommandInfo {
|
|
4
5
|
key: string;
|
|
5
6
|
label: string;
|
|
6
7
|
command: string;
|
|
8
|
+
isBuiltIn?: boolean;
|
|
7
9
|
}
|
|
8
10
|
export declare function getCommands(projectType: ProjectType, cwd?: string): CommandInfo[];
|
package/dist/commands.js
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import { existsSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
export function getPythonExecutable() {
|
|
5
|
+
try {
|
|
6
|
+
execSync('python3 --version', { stdio: 'ignore' });
|
|
7
|
+
return 'python3';
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return 'python';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
3
13
|
export function getCommands(projectType, cwd) {
|
|
4
14
|
const cmds = [
|
|
5
15
|
{ key: 'g', label: 'Git Status', command: 'git status' },
|
|
@@ -11,7 +21,8 @@ export function getCommands(projectType, cwd) {
|
|
|
11
21
|
cmds.push({ key: 't', label: 'Run Tests', command: 'npm test' }, { key: 'd', label: 'Dev Server', command: 'npm run dev' }, { key: 'b', label: 'Build', command: 'npm run build' }, { key: 'i', label: 'Install Deps', command: 'npm install' }, { key: 'l', label: 'Lint', command: 'npm run lint' }, { key: 'c', label: 'Clean', command: 'rm -rf node_modules dist .next out' });
|
|
12
22
|
break;
|
|
13
23
|
case 'python':
|
|
14
|
-
|
|
24
|
+
const py = getPythonExecutable();
|
|
25
|
+
cmds.push({ key: 't', label: 'Run Tests', command: `${py} -m pytest` }, { key: 'd', label: 'Run App', command: `${py} main.py` }, { key: 'i', label: 'Install Deps', command: `${py} -m pip install -r requirements.txt` }, { key: 'l', label: 'Lint', command: `${py} -m ruff check .` }, { key: 'c', label: 'Clean', command: 'rm -rf __pycache__ .pytest_cache dist build *.egg-info' });
|
|
15
26
|
break;
|
|
16
27
|
case 'rust':
|
|
17
28
|
cmds.push({ key: 't', label: 'Run Tests', command: 'cargo test' }, { key: 'd', label: 'Run', command: 'cargo run' }, { key: 'b', label: 'Build', command: 'cargo build' }, { key: 'com', label: 'Compile', command: 'cargo build --release' }, { key: 'l', label: 'Clippy', command: 'cargo clippy' }, { key: 'c', label: 'Clean', command: 'cargo clean' });
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../source/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../source/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/display.js
CHANGED
|
@@ -180,6 +180,26 @@ export function display(opts) {
|
|
|
180
180
|
}
|
|
181
181
|
push(blank(boxW));
|
|
182
182
|
}
|
|
183
|
+
// ── Built-in Tools ──
|
|
184
|
+
push(midBorder(boxW));
|
|
185
|
+
push(blank(boxW));
|
|
186
|
+
push(row(' ' + O.boldOrange('TOOLS'), boxW));
|
|
187
|
+
push(blank(boxW));
|
|
188
|
+
const builtInTools = [
|
|
189
|
+
{ key: 'doc', label: 'Health Check', desc: 'project diagnostics' },
|
|
190
|
+
{ key: 'stats', label: 'Usage Stats', desc: 'command usage chart' },
|
|
191
|
+
{ key: 'add', label: 'Add Shortcut', desc: 'create custom shortcut' },
|
|
192
|
+
{ key: 'rm <key>', label: 'Remove', desc: 'delete a shortcut' },
|
|
193
|
+
{ key: 'setup-autocomplete', label: 'Autocomplete', desc: 'shell tab-completion' },
|
|
194
|
+
];
|
|
195
|
+
const tMaxKeyLen = Math.max(...builtInTools.map(t => `${bin} ${t.key}`.length));
|
|
196
|
+
const tKeyColW = tMaxKeyLen + 2;
|
|
197
|
+
for (const tool of builtInTools) {
|
|
198
|
+
const shortcut = O.bright(padR(` ${bin} ${tool.key}`, tKeyColW + 2));
|
|
199
|
+
const label = O.white(tool.label);
|
|
200
|
+
push(row(`${shortcut} ${label}`, boxW));
|
|
201
|
+
}
|
|
202
|
+
push(blank(boxW));
|
|
183
203
|
// ── Tips ──
|
|
184
204
|
if (bin === 'dashb') {
|
|
185
205
|
push(row(' ' + O.gray(`tip: use "db" instead of "dashb" for shorter commands`), boxW));
|
|
@@ -189,7 +209,7 @@ export function display(opts) {
|
|
|
189
209
|
push(row(' ' + O.gray(`tip: use "db <stack>" for stack-specific commands (e.g. db py)`), boxW));
|
|
190
210
|
push(blank(boxW));
|
|
191
211
|
}
|
|
192
|
-
push(row(' ' + O.gray(`tip:
|
|
212
|
+
push(row(' ' + O.gray(`tip: stack commands: "db t b" runs tests then build`), boxW));
|
|
193
213
|
push(blank(boxW));
|
|
194
214
|
// ── Bottom ──
|
|
195
215
|
push(botBorder(boxW));
|
package/dist/display.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.js","sourceRoot":"","sources":["../source/display.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIrC,kEAAkE;AAClE,uBAAuB;AACvB,kEAAkE;AAElE,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAEvE,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhF,MAAM,CAAC,GAAG;IACR,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACnD,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACvD,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAChD,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACzD,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACtC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACrC,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACpD,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,EAAE,CAAC,CAAC;CACpD,CAAC;AAEF,kEAAkE;AAClE,kBAAkB;AAClB,kEAAkE;AAElE,SAAS,GAAG,CAAC,CAAS;IACpB,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC;AAED,SAAS,IAAI,CAAC,CAAS,EAAE,GAAW;IAClC,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,KAAa;IACxC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,GAAG,IAAI,KAAK;QAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,kEAAkE;AAClE,eAAe;AACf,kEAAkE;AAElE,SAAS,SAAS,CAAC,CAAS,EAAE,KAAc;IAC1C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,GAAG,CAAC,OAAe,EAAE,CAAS;IACrC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,kEAAkE;AAClE,QAAQ;AACR,kEAAkE;AAElE,MAAM,IAAI,GAAG;IACX,2CAA2C;IAC3C,2CAA2C;IAC3C,2CAA2C;IAC3C,2CAA2C;IAC3C,2CAA2C;IAC3C,0CAA0C;CAC3C,CAAC;AAEF,MAAM,YAAY,GAAG,eAAe,CAAC;AAErC,kEAAkE;AAClE,kBAAkB;AAClB,kEAAkE;AAElE,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAiBD,MAAM,UAAU,OAAO,CAAC,IAAoB;IAC1C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAE9F,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAE1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;IAEvB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEvD,YAAY;IACZ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAElB,aAAa;IACb,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QACf,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAElB,iBAAiB;IACjB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAElB,kBAAkB;IAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAElB,gEAAgE;IAChE,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAElB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,MAAM,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,yBAAyB;IACzB,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAElB,qBAAqB;IACrB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,EAAE,CAAC;IAEjD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAEnD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,MAAM,KAAK,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,MAAM,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAElB,yBAAyB;IACzB,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAElB,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,cAAc,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1F,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,EAAE,CAAC;QAEpD,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAEpD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,MAAM,KAAK,IAAI,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,MAAM,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,aAAa;IACb,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,uDAAuD,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,gEAAgE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,8CAA8C,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAElB,eAAe;IACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtB,QAAQ;IACR,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../source/display.ts"],"names":[],"mappings":"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"}
|
package/dist/run.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { CommandInfo } from './commands.js';
|
|
2
|
-
export declare function runShortcut(cmd: CommandInfo, bin: string):
|
|
2
|
+
export declare function runShortcut(cmd: CommandInfo, bin: string, args?: string[]): number;
|
|
3
|
+
export declare function findFileRunner(arg: string, cwd: string, stack?: string): Promise<CommandInfo | null>;
|
package/dist/run.js
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { trackCommand } from './stats.js';
|
|
2
3
|
const TTY = process.stdout.isTTY !== false && !process.env['NO_COLOR'];
|
|
3
4
|
const ORANGE = TTY ? '\x1b[38;2;255;165;0m' : '';
|
|
4
5
|
const DIM = TTY ? '\x1b[90m' : '';
|
|
5
6
|
const GREEN = TTY ? '\x1b[38;2;110;210;130m' : '';
|
|
6
7
|
const RED = TTY ? '\x1b[38;2;255;80;80m' : '';
|
|
7
8
|
const RESET = TTY ? '\x1b[0m' : '';
|
|
8
|
-
export function runShortcut(cmd, bin) {
|
|
9
|
+
export function runShortcut(cmd, bin, args = []) {
|
|
10
|
+
// Track usage
|
|
11
|
+
trackCommand(cmd.key);
|
|
12
|
+
const fullCmd = args.length > 0 ? `${cmd.command} ${args.join(' ')}` : cmd.command;
|
|
9
13
|
// Print what we're running
|
|
10
|
-
console.log(`\n ${ORANGE}▶${RESET} ${cmd.label} ${DIM}$ ${
|
|
14
|
+
console.log(`\n ${ORANGE}▶${RESET} ${cmd.label} ${DIM}$ ${fullCmd}${RESET}\n`);
|
|
11
15
|
const isWin = process.platform === 'win32';
|
|
12
|
-
const result = spawnSync(isWin ? 'cmd' : 'sh', isWin ? ['/c',
|
|
16
|
+
const result = spawnSync(isWin ? 'cmd' : 'sh', isWin ? ['/c', fullCmd] : ['-c', fullCmd], {
|
|
13
17
|
stdio: 'inherit',
|
|
14
18
|
cwd: process.cwd(),
|
|
15
19
|
env: process.env,
|
|
@@ -21,6 +25,60 @@ export function runShortcut(cmd, bin) {
|
|
|
21
25
|
else {
|
|
22
26
|
console.log(`\n ${RED}✖${RESET} Failed ${DIM}(exit ${code})${RESET}\n`);
|
|
23
27
|
}
|
|
24
|
-
|
|
28
|
+
return code;
|
|
29
|
+
}
|
|
30
|
+
export async function findFileRunner(arg, cwd, stack) {
|
|
31
|
+
const fs = await import('node:fs');
|
|
32
|
+
const path = await import('node:path');
|
|
33
|
+
// Try exact match first
|
|
34
|
+
const exactPath = path.join(cwd, arg);
|
|
35
|
+
if (fs.existsSync(exactPath) && fs.statSync(exactPath).isFile()) {
|
|
36
|
+
return await createRunnerCommand(arg, exactPath, stack);
|
|
37
|
+
}
|
|
38
|
+
// Try common extensions
|
|
39
|
+
const extensions = ['.py', '.js', '.ts', '.rs', '.go', '.rb'];
|
|
40
|
+
for (const ext of extensions) {
|
|
41
|
+
const extPath = path.join(cwd, arg + ext);
|
|
42
|
+
if (fs.existsSync(extPath) && fs.statSync(extPath).isFile()) {
|
|
43
|
+
return await createRunnerCommand(arg + ext, extPath, stack);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
async function createRunnerCommand(fileName, fullPath, stack) {
|
|
49
|
+
let runner = '';
|
|
50
|
+
if (fileName.endsWith('.py')) {
|
|
51
|
+
const { getPythonExecutable } = await import('./commands.js');
|
|
52
|
+
runner = getPythonExecutable();
|
|
53
|
+
}
|
|
54
|
+
else if (fileName.endsWith('.ts')) {
|
|
55
|
+
// Check if tsx or ts-node is available, fallback to node (which might fail but it's the best guess)
|
|
56
|
+
const fs = await import('node:fs');
|
|
57
|
+
const path = await import('node:path');
|
|
58
|
+
const hasTsx = fs.existsSync(path.join(path.dirname(fullPath), 'node_modules', '.bin', 'tsx'));
|
|
59
|
+
runner = hasTsx ? 'npx tsx' : 'npx ts-node';
|
|
60
|
+
}
|
|
61
|
+
else if (fileName.endsWith('.js')) {
|
|
62
|
+
runner = 'node';
|
|
63
|
+
}
|
|
64
|
+
else if (fileName.endsWith('.rs')) {
|
|
65
|
+
runner = 'rustc';
|
|
66
|
+
}
|
|
67
|
+
else if (fileName.endsWith('.go')) {
|
|
68
|
+
runner = 'go run';
|
|
69
|
+
}
|
|
70
|
+
else if (fileName.endsWith('.rb')) {
|
|
71
|
+
runner = 'ruby';
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Unknown, attempt to run directly (e.g., bash scripts)
|
|
75
|
+
runner = './';
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
key: fileName,
|
|
79
|
+
label: `Run ${fileName}`,
|
|
80
|
+
command: runner === './' ? `./${fileName}` : `${runner} ${fileName}`,
|
|
81
|
+
isBuiltIn: false
|
|
82
|
+
};
|
|
25
83
|
}
|
|
26
84
|
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../source/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../source/run.ts"],"names":[],"mappings":"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"}
|
package/dist/stats.d.ts
ADDED
package/dist/stats.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
// ═══════════════════════════════════════════════════════════════
|
|
5
|
+
// ANSI Theme (Shared)
|
|
6
|
+
// ═══════════════════════════════════════════════════════════════
|
|
7
|
+
const TTY = process.stdout.isTTY !== false && !process.env['NO_COLOR'];
|
|
8
|
+
const w = (code, t) => (TTY ? `${code}${t}\x1b[0m` : t);
|
|
9
|
+
const C = {
|
|
10
|
+
orange: (s) => w('\x1b[38;2;255;165;0m', s),
|
|
11
|
+
boldOrange: (s) => w('\x1b[1;38;2;255;165;0m', s),
|
|
12
|
+
bright: (s) => w('\x1b[1;38;2;255;200;100m', s),
|
|
13
|
+
white: (s) => w('\x1b[97m', s),
|
|
14
|
+
gray: (s) => w('\x1b[90m', s),
|
|
15
|
+
dim: (s) => w('\x1b[38;2;120;80;25m', s),
|
|
16
|
+
bar: (s) => w('\x1b[38;2;255;140;0m', s), // Slightly darker orange for bars
|
|
17
|
+
};
|
|
18
|
+
// ═══════════════════════════════════════════════════════════════
|
|
19
|
+
// Storage
|
|
20
|
+
// ═══════════════════════════════════════════════════════════════
|
|
21
|
+
const STATS_DIR = join(homedir(), '.dashb');
|
|
22
|
+
const STATS_FILE = join(STATS_DIR, 'stats.json');
|
|
23
|
+
function loadStats() {
|
|
24
|
+
if (!existsSync(STATS_FILE))
|
|
25
|
+
return { commands: {} };
|
|
26
|
+
try {
|
|
27
|
+
const raw = readFileSync(STATS_FILE, 'utf-8');
|
|
28
|
+
const data = JSON.parse(raw);
|
|
29
|
+
return { commands: data.commands || {} };
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return { commands: {} };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function saveStats(data) {
|
|
36
|
+
if (!existsSync(STATS_DIR)) {
|
|
37
|
+
mkdirSync(STATS_DIR, { recursive: true });
|
|
38
|
+
}
|
|
39
|
+
writeFileSync(STATS_FILE, JSON.stringify(data, null, 2));
|
|
40
|
+
}
|
|
41
|
+
export function trackCommand(key) {
|
|
42
|
+
const data = loadStats();
|
|
43
|
+
data.commands[key] = (data.commands[key] || 0) + 1;
|
|
44
|
+
saveStats(data);
|
|
45
|
+
}
|
|
46
|
+
// ═══════════════════════════════════════════════════════════════
|
|
47
|
+
// Visualization
|
|
48
|
+
// ═══════════════════════════════════════════════════════════════
|
|
49
|
+
function vis(s) {
|
|
50
|
+
return s.replace(/\x1b\[[0-9;]*m/g, '').length;
|
|
51
|
+
}
|
|
52
|
+
function topBorder(w, title) {
|
|
53
|
+
const tLen = vis(title);
|
|
54
|
+
const fill = Math.max(0, w - 5 - tLen);
|
|
55
|
+
return C.dim('╭─ ') + title + C.dim(' ' + '─'.repeat(fill) + '╮');
|
|
56
|
+
}
|
|
57
|
+
function botBorder(w) {
|
|
58
|
+
return C.dim('╰' + '─'.repeat(w - 2) + '╯');
|
|
59
|
+
}
|
|
60
|
+
function row(content, w, align = 'left') {
|
|
61
|
+
const inner = w - 4; // 2 for borders, 2 for padding
|
|
62
|
+
const cLen = vis(content);
|
|
63
|
+
if (align === 'center') {
|
|
64
|
+
const leftPad = Math.floor((inner - cLen) / 2);
|
|
65
|
+
const rightPad = inner - cLen - leftPad;
|
|
66
|
+
return C.dim('│ ') + ' '.repeat(leftPad) + content + ' '.repeat(rightPad) + C.dim(' │');
|
|
67
|
+
}
|
|
68
|
+
const rightPad = Math.max(0, inner - cLen);
|
|
69
|
+
return C.dim('│ ') + content + ' '.repeat(rightPad) + C.dim(' │');
|
|
70
|
+
}
|
|
71
|
+
function blank(w) {
|
|
72
|
+
return C.dim('│') + ' '.repeat(w - 2) + C.dim('│');
|
|
73
|
+
}
|
|
74
|
+
export function showStats() {
|
|
75
|
+
const data = loadStats();
|
|
76
|
+
const entries = Object.entries(data.commands)
|
|
77
|
+
.sort((a, b) => b[1] - a[1]) // Sort desc by usage
|
|
78
|
+
.slice(0, 5); // Top 5 only for cleaner look
|
|
79
|
+
const cols = process.stdout.columns || 80;
|
|
80
|
+
const boxW = Math.max(40, Math.min(cols - 4, 60));
|
|
81
|
+
const out = [];
|
|
82
|
+
const push = (line) => {
|
|
83
|
+
const margin = Math.floor((cols - vis(line)) / 2);
|
|
84
|
+
out.push(' '.repeat(Math.max(0, margin)) + line);
|
|
85
|
+
};
|
|
86
|
+
console.log('');
|
|
87
|
+
// Header
|
|
88
|
+
push(topBorder(boxW, C.boldOrange('COMMAND STATS')));
|
|
89
|
+
push(blank(boxW));
|
|
90
|
+
if (entries.length === 0) {
|
|
91
|
+
push(row(C.gray('No commands run yet'), boxW, 'center'));
|
|
92
|
+
push(row(C.gray('Start using dashb to see your stats!'), boxW, 'center'));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const maxVal = entries[0][1];
|
|
96
|
+
const maxKeyLen = Math.max(...entries.map(e => e[0].length));
|
|
97
|
+
const maxCountLen = Math.max(...entries.map(e => String(e[1]).length));
|
|
98
|
+
// Calculate bar width area: box width - borders/padding - key - count
|
|
99
|
+
const barAreaW = boxW - 4 - maxKeyLen - maxCountLen - 6;
|
|
100
|
+
for (const [key, count] of entries) {
|
|
101
|
+
const ratio = count / maxVal;
|
|
102
|
+
const barLen = Math.max(1, Math.round(ratio * barAreaW));
|
|
103
|
+
const bar = '█'.repeat(barLen);
|
|
104
|
+
const k = C.bright(key.padEnd(maxKeyLen));
|
|
105
|
+
const b = C.bar(bar);
|
|
106
|
+
const c = C.gray(String(count).padStart(maxCountLen));
|
|
107
|
+
// " g ██████ 12 "
|
|
108
|
+
push(row(`${k} ${b} ${c}`, boxW));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
push(blank(boxW));
|
|
112
|
+
push(botBorder(boxW));
|
|
113
|
+
console.log('');
|
|
114
|
+
out.forEach(l => console.log(l));
|
|
115
|
+
console.log('');
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../source/stats.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dashb",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Developer dashboard for your terminal — shows project-specific shortcuts you can run instantly",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -39,6 +39,6 @@
|
|
|
39
39
|
},
|
|
40
40
|
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e",
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"dashb": "^1.0.
|
|
42
|
+
"dashb": "^1.0.2"
|
|
43
43
|
}
|
|
44
44
|
}
|