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 ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../source/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ProjectType } from './detect.js';
2
+ export interface CommandInfo {
3
+ key: string;
4
+ label: string;
5
+ command: string;
6
+ }
7
+ export declare function getCommands(projectType: ProjectType): CommandInfo[];
@@ -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":"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"}
@@ -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"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectInfo } from './detect.js';
2
+ import type { CommandInfo } from './commands.js';
3
+ export declare function display(project: ProjectInfo, commands: CommandInfo[], cwd: string, branch: string, bin: string): void;
@@ -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
@@ -0,0 +1,2 @@
1
+ import type { CommandInfo } from './commands.js';
2
+ export declare function runShortcut(cmd: CommandInfo, bin: string): void;
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
@@ -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
+ }