dashb 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +50 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +7 -0
- package/dist/commands.js +30 -0
- package/dist/commands.js.map +1 -0
- package/dist/detect.d.ts +8 -0
- package/dist/detect.js +38 -0
- package/dist/detect.js.map +1 -0
- package/dist/display.d.ts +3 -0
- package/dist/display.js +145 -0
- package/dist/display.js.map +1 -0
- package/dist/run.d.ts +2 -0
- package/dist/run.js +26 -0
- package/dist/run.js.map +1 -0
- package/package.json +40 -0
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { basename } from 'node:path';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import { detectProject } from './detect.js';
|
|
5
|
+
import { getCommands } from './commands.js';
|
|
6
|
+
import { display } from './display.js';
|
|
7
|
+
import { runShortcut } from './run.js';
|
|
8
|
+
const args = process.argv.slice(2);
|
|
9
|
+
const cwd = process.cwd();
|
|
10
|
+
const project = detectProject(cwd);
|
|
11
|
+
const commands = getCommands(project.type);
|
|
12
|
+
// Detect which bin name was used (dashb or db)
|
|
13
|
+
const rawBin = basename(process.argv[1] ?? '');
|
|
14
|
+
const bin = rawBin.replace(/\.js$/, '');
|
|
15
|
+
const shortName = bin === 'db' ? 'db' : 'dashb';
|
|
16
|
+
// Get git branch (silent fail if not a repo)
|
|
17
|
+
let branch = '';
|
|
18
|
+
try {
|
|
19
|
+
branch = execSync('git rev-parse --abbrev-ref HEAD', {
|
|
20
|
+
encoding: 'utf-8',
|
|
21
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
22
|
+
}).trim();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// not a git repo, ignore
|
|
26
|
+
}
|
|
27
|
+
// --version / -v
|
|
28
|
+
if (args[0] === '--version' || args[0] === '-v') {
|
|
29
|
+
console.log('dashb v1.0.0');
|
|
30
|
+
process.exit(0);
|
|
31
|
+
}
|
|
32
|
+
// No args / --help / -h → show the reference card
|
|
33
|
+
if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
|
|
34
|
+
display(project, commands, cwd, branch, shortName);
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
// Otherwise treat first arg as a shortcut key
|
|
38
|
+
const key = args[0];
|
|
39
|
+
const cmd = commands.find(c => c.key === key);
|
|
40
|
+
if (!cmd) {
|
|
41
|
+
const o = process.stdout.isTTY !== false && !process.env['NO_COLOR']
|
|
42
|
+
? '\x1b[38;2;255;80;80m'
|
|
43
|
+
: '';
|
|
44
|
+
const r = o ? '\x1b[0m' : '';
|
|
45
|
+
console.error(`\n ${o}✖${r} Unknown shortcut: "${key}"`);
|
|
46
|
+
console.error(` Run '${shortName}' to see available shortcuts\n`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
runShortcut(cmd, shortName);
|
|
50
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../source/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function getCommands(projectType) {
|
|
2
|
+
const cmds = [
|
|
3
|
+
{ key: 'g', label: 'Git Status', command: 'git status' },
|
|
4
|
+
{ key: 'p', label: 'Git Pull', command: 'git pull' },
|
|
5
|
+
];
|
|
6
|
+
switch (projectType) {
|
|
7
|
+
case 'node':
|
|
8
|
+
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' });
|
|
9
|
+
break;
|
|
10
|
+
case 'python':
|
|
11
|
+
cmds.push({ key: 't', label: 'Run Tests', command: 'pytest' }, { key: 'd', label: 'Run App', command: 'python main.py' }, { key: 'i', label: 'Install Deps', command: 'pip install -r requirements.txt' }, { key: 'l', label: 'Lint', command: 'ruff check .' }, { key: 'c', label: 'Clean', command: 'rm -rf __pycache__ .pytest_cache dist build *.egg-info' });
|
|
12
|
+
break;
|
|
13
|
+
case 'rust':
|
|
14
|
+
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: 'l', label: 'Clippy', command: 'cargo clippy' }, { key: 'c', label: 'Clean', command: 'cargo clean' });
|
|
15
|
+
break;
|
|
16
|
+
case 'go':
|
|
17
|
+
cmds.push({ key: 't', label: 'Run Tests', command: 'go test ./...' }, { key: 'd', label: 'Run', command: 'go run .' }, { key: 'b', label: 'Build', command: 'go build' }, { key: 'l', label: 'Vet', command: 'go vet ./...' }, { key: 'c', label: 'Clean', command: 'go clean' });
|
|
18
|
+
break;
|
|
19
|
+
case 'ruby':
|
|
20
|
+
cmds.push({ key: 't', label: 'Run Tests', command: 'bundle exec rspec' }, { key: 'd', label: 'Run Server', command: 'bundle exec rails s' }, { key: 'i', label: 'Install Deps', command: 'bundle install' }, { key: 'c', label: 'Clean', command: 'rm -rf tmp/cache' });
|
|
21
|
+
break;
|
|
22
|
+
case 'docker':
|
|
23
|
+
cmds.push({ key: 'd', label: 'Compose Up', command: 'docker compose up' }, { key: 'b', label: 'Build', command: 'docker compose build' }, { key: 's', label: 'Stop', command: 'docker compose stop' }, { key: 'c', label: 'Down', command: 'docker compose down' }, { key: 'l', label: 'Logs', command: 'docker compose logs --tail=50' });
|
|
24
|
+
break;
|
|
25
|
+
default:
|
|
26
|
+
cmds.push({ key: 'l', label: 'List Files', command: 'ls -la' }, { key: 'f', label: 'Disk Usage', command: 'du -sh *' });
|
|
27
|
+
}
|
|
28
|
+
return cmds;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../source/commands.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,WAAW,CAAC,WAAwB;IAClD,MAAM,IAAI,GAAkB;QAC1B,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAG,OAAO,EAAE,YAAY,EAAE;QACzD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAK,OAAO,EAAE,UAAU,EAAE;KACxD,CAAC;IAEF,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,IAAI,CAAC,IAAI,CACP,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAK,OAAO,EAAE,UAAU,EAAE,EACxD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAI,OAAO,EAAE,aAAa,EAAE,EAC3D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAS,OAAO,EAAE,eAAe,EAAE,EAC7D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,EAC3D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAU,OAAO,EAAE,cAAc,EAAE,EAC5D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAS,OAAO,EAAE,oCAAoC,EAAE,CACnF,CAAC;YACF,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,CAAC,IAAI,CACP,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAK,OAAO,EAAE,QAAQ,EAAE,EACtD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAO,OAAO,EAAE,gBAAgB,EAAE,EAC9D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,iCAAiC,EAAE,EAC/E,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAU,OAAO,EAAE,cAAc,EAAE,EAC5D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAS,OAAO,EAAE,wDAAwD,EAAE,CACvG,CAAC;YACF,MAAM;QACR,KAAK,MAAM;YACT,IAAI,CAAC,IAAI,CACP,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAG,OAAO,EAAE,YAAY,EAAE,EACxD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAS,OAAO,EAAE,WAAW,EAAE,EACvD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAO,OAAO,EAAE,aAAa,EAAE,EACzD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAM,OAAO,EAAE,cAAc,EAAE,EAC1D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAO,OAAO,EAAE,aAAa,EAAE,CAC1D,CAAC;YACF,MAAM;QACR,KAAK,IAAI;YACP,IAAI,CAAC,IAAI,CACP,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAG,OAAO,EAAE,eAAe,EAAE,EAC3D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAS,OAAO,EAAE,UAAU,EAAE,EACtD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAO,OAAO,EAAE,UAAU,EAAE,EACtD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAS,OAAO,EAAE,cAAc,EAAE,EAC1D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAO,OAAO,EAAE,UAAU,EAAE,CACvD,CAAC;YACF,MAAM;QACR,KAAK,MAAM;YACT,IAAI,CAAC,IAAI,CACP,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAK,OAAO,EAAE,mBAAmB,EAAE,EACjE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAI,OAAO,EAAE,qBAAqB,EAAE,EACnE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC9D,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAS,OAAO,EAAE,kBAAkB,EAAE,CACjE,CAAC;YACF,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,CAAC,IAAI,CACP,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAI,OAAO,EAAE,mBAAmB,EAAE,EACjE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAS,OAAO,EAAE,sBAAsB,EAAE,EACpE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAU,OAAO,EAAE,qBAAqB,EAAE,EACnE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAU,OAAO,EAAE,qBAAqB,EAAE,EACnE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAU,OAAO,EAAE,+BAA+B,EAAE,CAC9E,CAAC;YACF,MAAM;QACR;YACE,IAAI,CAAC,IAAI,CACP,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAI,OAAO,EAAE,QAAQ,EAAE,EACtD,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAI,OAAO,EAAE,UAAU,EAAE,CACzD,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/detect.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ProjectType = 'node' | 'python' | 'rust' | 'docker' | 'go' | 'ruby' | 'unknown';
|
|
2
|
+
export interface ProjectInfo {
|
|
3
|
+
type: ProjectType;
|
|
4
|
+
label: string;
|
|
5
|
+
icon: string;
|
|
6
|
+
color: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function detectProject(dir: string): ProjectInfo;
|
package/dist/detect.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const META = {
|
|
4
|
+
node: { label: 'Node.js', icon: '⬢', color: 'green' },
|
|
5
|
+
python: { label: 'Python', icon: '◆', color: 'yellow' },
|
|
6
|
+
rust: { label: 'Rust', icon: '◉', color: 'red' },
|
|
7
|
+
go: { label: 'Go', icon: '◈', color: 'cyan' },
|
|
8
|
+
ruby: { label: 'Ruby', icon: '◇', color: 'magenta' },
|
|
9
|
+
docker: { label: 'Docker', icon: '◎', color: 'blue' },
|
|
10
|
+
unknown: { label: 'Project', icon: '◻', color: 'gray' },
|
|
11
|
+
};
|
|
12
|
+
export function detectProject(dir) {
|
|
13
|
+
let type = 'unknown';
|
|
14
|
+
if (existsSync(join(dir, 'package.json'))) {
|
|
15
|
+
type = 'node';
|
|
16
|
+
}
|
|
17
|
+
else if (existsSync(join(dir, 'pyproject.toml')) ||
|
|
18
|
+
existsSync(join(dir, 'requirements.txt')) ||
|
|
19
|
+
existsSync(join(dir, 'setup.py'))) {
|
|
20
|
+
type = 'python';
|
|
21
|
+
}
|
|
22
|
+
else if (existsSync(join(dir, 'Cargo.toml'))) {
|
|
23
|
+
type = 'rust';
|
|
24
|
+
}
|
|
25
|
+
else if (existsSync(join(dir, 'go.mod'))) {
|
|
26
|
+
type = 'go';
|
|
27
|
+
}
|
|
28
|
+
else if (existsSync(join(dir, 'Gemfile'))) {
|
|
29
|
+
type = 'ruby';
|
|
30
|
+
}
|
|
31
|
+
else if (existsSync(join(dir, 'docker-compose.yml')) ||
|
|
32
|
+
existsSync(join(dir, 'docker-compose.yaml')) ||
|
|
33
|
+
existsSync(join(dir, 'Dockerfile'))) {
|
|
34
|
+
type = 'docker';
|
|
35
|
+
}
|
|
36
|
+
return { type, ...META[type] };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../source/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAkBjC,MAAM,IAAI,GAAwE;IAChF,IAAI,EAAK,EAAE,KAAK,EAAE,SAAS,EAAG,IAAI,EAAE,GAAG,EAAG,KAAK,EAAE,OAAO,EAAE;IAC1D,MAAM,EAAG,EAAE,KAAK,EAAE,QAAQ,EAAI,IAAI,EAAE,GAAG,EAAG,KAAK,EAAE,QAAQ,EAAE;IAC3D,IAAI,EAAK,EAAE,KAAK,EAAE,MAAM,EAAM,IAAI,EAAE,GAAG,EAAG,KAAK,EAAE,KAAK,EAAE;IACxD,EAAE,EAAO,EAAE,KAAK,EAAE,IAAI,EAAQ,IAAI,EAAE,GAAG,EAAG,KAAK,EAAE,MAAM,EAAE;IACzD,IAAI,EAAK,EAAE,KAAK,EAAE,MAAM,EAAM,IAAI,EAAE,GAAG,EAAG,KAAK,EAAE,SAAS,EAAE;IAC5D,MAAM,EAAG,EAAE,KAAK,EAAE,QAAQ,EAAI,IAAI,EAAE,GAAG,EAAG,KAAK,EAAE,MAAM,EAAE;IACzD,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAG,IAAI,EAAE,GAAG,EAAG,KAAK,EAAE,MAAM,EAAE;CAC1D,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,IAAI,GAAgB,SAAS,CAAC;IAElC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QAC1C,IAAI,GAAG,MAAM,CAAC;IAChB,CAAC;SAAM,IACL,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QACvC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACzC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EACjC,CAAC;QACD,IAAI,GAAG,QAAQ,CAAC;IAClB,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,MAAM,CAAC;IAChB,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC3C,IAAI,GAAG,IAAI,CAAC;IACd,CAAC;SAAM,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC5C,IAAI,GAAG,MAAM,CAAC;IAChB,CAAC;SAAM,IACL,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;QAC3C,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EACnC,CAAC;QACD,IAAI,GAAG,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACjC,CAAC"}
|
package/dist/display.js
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { basename } from 'node:path';
|
|
2
|
+
// ═══════════════════════════════════════════════════════════════
|
|
3
|
+
// ANSI — Orange Theme
|
|
4
|
+
// ═══════════════════════════════════════════════════════════════
|
|
5
|
+
const TTY = process.stdout.isTTY !== false && !process.env['NO_COLOR'];
|
|
6
|
+
const w = (code, t) => (TTY ? `${code}${t}\x1b[0m` : t);
|
|
7
|
+
const O = {
|
|
8
|
+
orange: (s) => w('\x1b[38;2;255;165;0m', s),
|
|
9
|
+
bright: (s) => w('\x1b[1;38;2;255;200;100m', s),
|
|
10
|
+
dim: (s) => w('\x1b[38;2;120;80;25m', s),
|
|
11
|
+
boldOrange: (s) => w('\x1b[1;38;2;255;165;0m', s),
|
|
12
|
+
white: (s) => w('\x1b[97m', s),
|
|
13
|
+
gray: (s) => w('\x1b[90m', s),
|
|
14
|
+
green: (s) => w('\x1b[38;2;110;210;130m', s),
|
|
15
|
+
};
|
|
16
|
+
// ═══════════════════════════════════════════════════════════════
|
|
17
|
+
// String Helpers
|
|
18
|
+
// ═══════════════════════════════════════════════════════════════
|
|
19
|
+
/** Visible length (strips ANSI escape codes) */
|
|
20
|
+
function vis(s) {
|
|
21
|
+
return s.replace(/\x1b\[[0-9;]*m/g, '').length;
|
|
22
|
+
}
|
|
23
|
+
/** Right-pad to target *visible* length */
|
|
24
|
+
function padR(s, len) {
|
|
25
|
+
const need = len - vis(s);
|
|
26
|
+
return need > 0 ? s + ' '.repeat(need) : s;
|
|
27
|
+
}
|
|
28
|
+
/** Center string within a given visible width */
|
|
29
|
+
function centerIn(s, width) {
|
|
30
|
+
const len = vis(s);
|
|
31
|
+
if (len >= width)
|
|
32
|
+
return s;
|
|
33
|
+
return ' '.repeat(Math.floor((width - len) / 2)) + s;
|
|
34
|
+
}
|
|
35
|
+
// ═══════════════════════════════════════════════════════════════
|
|
36
|
+
// Box Drawing
|
|
37
|
+
// ═══════════════════════════════════════════════════════════════
|
|
38
|
+
function topBorder(w, title) {
|
|
39
|
+
if (title) {
|
|
40
|
+
const tLen = vis(title);
|
|
41
|
+
const fill = Math.max(0, w - 5 - tLen);
|
|
42
|
+
return O.dim('╭─ ') + title + O.dim(' ' + '─'.repeat(fill) + '╮');
|
|
43
|
+
}
|
|
44
|
+
return O.dim('╭' + '─'.repeat(w - 2) + '╮');
|
|
45
|
+
}
|
|
46
|
+
function botBorder(w) {
|
|
47
|
+
return O.dim('╰' + '─'.repeat(w - 2) + '╯');
|
|
48
|
+
}
|
|
49
|
+
function midBorder(w) {
|
|
50
|
+
return O.dim('├' + '─'.repeat(w - 2) + '┤');
|
|
51
|
+
}
|
|
52
|
+
function row(content, w) {
|
|
53
|
+
const inner = w - 2;
|
|
54
|
+
const pad = Math.max(0, inner - vis(content));
|
|
55
|
+
return O.dim('│') + content + ' '.repeat(pad) + O.dim('│');
|
|
56
|
+
}
|
|
57
|
+
function blank(w) {
|
|
58
|
+
return row(' '.repeat(w - 2), w);
|
|
59
|
+
}
|
|
60
|
+
// ═══════════════════════════════════════════════════════════════
|
|
61
|
+
// Logo
|
|
62
|
+
// ═══════════════════════════════════════════════════════════════
|
|
63
|
+
const LOGO = [
|
|
64
|
+
' ██████╗ █████╗ ███████╗██╗ ██╗██████╗ ',
|
|
65
|
+
' ██╔══██╗██╔══██╗██╔════╝██║ ██║██╔══██╗',
|
|
66
|
+
' ██║ ██║███████║███████╗███████║██████╔╝',
|
|
67
|
+
' ██║ ██║██╔══██║╚════██║██╔══██║██╔══██╗',
|
|
68
|
+
' ██████╔╝██║ ██║███████║██║ ██║██████╔╝',
|
|
69
|
+
' ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═════╝',
|
|
70
|
+
];
|
|
71
|
+
const LOGO_COMPACT = '◆ D A S H B ◆';
|
|
72
|
+
// ═══════════════════════════════════════════════════════════════
|
|
73
|
+
// Main Display
|
|
74
|
+
// ═══════════════════════════════════════════════════════════════
|
|
75
|
+
export function display(project, commands, cwd, branch, bin) {
|
|
76
|
+
const cols = process.stdout.columns || 80;
|
|
77
|
+
const rows = process.stdout.rows || 24;
|
|
78
|
+
// Box width: adapt to terminal, cap at 70, min 30
|
|
79
|
+
const boxW = Math.max(30, Math.min(cols - 4, 70));
|
|
80
|
+
const inner = boxW - 2;
|
|
81
|
+
// Horizontal centering margin
|
|
82
|
+
const margin = ' '.repeat(Math.max(0, Math.floor((cols - boxW) / 2)));
|
|
83
|
+
const out = [];
|
|
84
|
+
const push = (line) => out.push(margin + line);
|
|
85
|
+
// ── Top ──
|
|
86
|
+
push(topBorder(boxW, O.boldOrange('DASHB')));
|
|
87
|
+
push(blank(boxW));
|
|
88
|
+
// ── Logo ──
|
|
89
|
+
if (boxW >= 50) {
|
|
90
|
+
for (const line of LOGO) {
|
|
91
|
+
push(row(centerIn(O.orange(line), inner), boxW));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
push(row(centerIn(O.boldOrange(LOGO_COMPACT), inner), boxW));
|
|
96
|
+
}
|
|
97
|
+
push(blank(boxW));
|
|
98
|
+
// ── Info Bar ──
|
|
99
|
+
const parts = [];
|
|
100
|
+
parts.push(O.orange(`${project.icon} ${project.label}`));
|
|
101
|
+
parts.push(O.dim('│'));
|
|
102
|
+
parts.push(O.white(basename(cwd)));
|
|
103
|
+
if (branch) {
|
|
104
|
+
parts.push(O.dim('│'));
|
|
105
|
+
parts.push(O.green(`⎇ ${branch}`));
|
|
106
|
+
}
|
|
107
|
+
push(row(centerIn(parts.join(' '), inner), boxW));
|
|
108
|
+
push(blank(boxW));
|
|
109
|
+
// ── Separator ──
|
|
110
|
+
push(midBorder(boxW));
|
|
111
|
+
push(blank(boxW));
|
|
112
|
+
// ── Shortcuts Header ──
|
|
113
|
+
push(row(' ' + O.boldOrange('SHORTCUTS'), boxW));
|
|
114
|
+
push(blank(boxW));
|
|
115
|
+
// ── Command List ──
|
|
116
|
+
const keyColW = bin.length + 4; // "db g" or "dashb g"
|
|
117
|
+
const labelColW = Math.min(20, Math.max(...commands.map(c => c.label.length)) + 2);
|
|
118
|
+
const showCmd = inner > keyColW + labelColW + 12;
|
|
119
|
+
for (const cmd of commands) {
|
|
120
|
+
const shortcut = O.bright(` ${bin} ${cmd.key}`);
|
|
121
|
+
const label = O.white(cmd.label.padEnd(labelColW));
|
|
122
|
+
if (showCmd) {
|
|
123
|
+
const command = O.gray(cmd.command);
|
|
124
|
+
push(row(`${shortcut} ${label} ${command}`, boxW));
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
push(row(`${shortcut} ${label}`, boxW));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
push(blank(boxW));
|
|
131
|
+
// ── Tip ──
|
|
132
|
+
if (bin === 'dashb') {
|
|
133
|
+
push(row(' ' + O.gray(`tip: use "db" instead of "dashb" for shorter commands`), boxW));
|
|
134
|
+
push(blank(boxW));
|
|
135
|
+
}
|
|
136
|
+
// ── Bottom ──
|
|
137
|
+
push(botBorder(boxW));
|
|
138
|
+
// Print
|
|
139
|
+
console.log('');
|
|
140
|
+
for (const line of out) {
|
|
141
|
+
console.log(line);
|
|
142
|
+
}
|
|
143
|
+
console.log('');
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../source/display.ts"],"names":[],"mappings":"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"}
|
package/dist/run.d.ts
ADDED
package/dist/run.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
const TTY = process.stdout.isTTY !== false && !process.env['NO_COLOR'];
|
|
3
|
+
const ORANGE = TTY ? '\x1b[38;2;255;165;0m' : '';
|
|
4
|
+
const DIM = TTY ? '\x1b[90m' : '';
|
|
5
|
+
const GREEN = TTY ? '\x1b[38;2;110;210;130m' : '';
|
|
6
|
+
const RED = TTY ? '\x1b[38;2;255;80;80m' : '';
|
|
7
|
+
const RESET = TTY ? '\x1b[0m' : '';
|
|
8
|
+
export function runShortcut(cmd, bin) {
|
|
9
|
+
// Print what we're running
|
|
10
|
+
console.log(`\n ${ORANGE}▶${RESET} ${cmd.label} ${DIM}$ ${cmd.command}${RESET}\n`);
|
|
11
|
+
const isWin = process.platform === 'win32';
|
|
12
|
+
const result = spawnSync(isWin ? 'cmd' : 'sh', isWin ? ['/c', cmd.command] : ['-c', cmd.command], {
|
|
13
|
+
stdio: 'inherit',
|
|
14
|
+
cwd: process.cwd(),
|
|
15
|
+
env: process.env,
|
|
16
|
+
});
|
|
17
|
+
const code = result.status ?? 1;
|
|
18
|
+
if (code === 0) {
|
|
19
|
+
console.log(`\n ${GREEN}✔${RESET} Done\n`);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(`\n ${RED}✖${RESET} Failed ${DIM}(exit ${code})${RESET}\n`);
|
|
23
|
+
}
|
|
24
|
+
process.exit(code);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../source/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAEvE,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,MAAM,GAAG,GAAM,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;AACrC,MAAM,KAAK,GAAI,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,MAAM,GAAG,GAAM,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,MAAM,KAAK,GAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;AAEpC,MAAM,UAAU,WAAW,CAAC,GAAgB,EAAE,GAAW;IACvD,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CACT,OAAO,MAAM,IAAI,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,KAAK,GAAG,CAAC,OAAO,GAAG,KAAK,IAAI,CACvE,CAAC;IAEF,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC3C,MAAM,MAAM,GAAG,SAAS,CACtB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EACpB,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,EACjD;QACE,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CACF,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAEhC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,KAAK,SAAS,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,KAAK,WAAW,GAAG,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dashb",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Developer dashboard for your terminal — shows project-specific shortcuts you can run instantly",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"dashb": "./dist/cli.js",
|
|
8
|
+
"db": "./dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/display.js",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "./node_modules/.bin/tsc",
|
|
16
|
+
"dev": "./node_modules/.bin/tsc --watch",
|
|
17
|
+
"start": "node dist/cli.js",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"cli",
|
|
22
|
+
"dashboard",
|
|
23
|
+
"terminal",
|
|
24
|
+
"tui",
|
|
25
|
+
"developer-tools",
|
|
26
|
+
"devtools",
|
|
27
|
+
"shortcuts",
|
|
28
|
+
"npm-scripts",
|
|
29
|
+
"project-runner"
|
|
30
|
+
],
|
|
31
|
+
"author": "",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^20.11.0",
|
|
35
|
+
"typescript": "^5.3.3"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=16"
|
|
39
|
+
}
|
|
40
|
+
}
|