Skip to content

Commit f1cc8dc

Browse files
committed
init
0 parents  commit f1cc8dc

21 files changed

Lines changed: 2991 additions & 0 deletions

.eslintrc.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"root": true,
3+
"env": {
4+
"node": true,
5+
"es2022": true
6+
},
7+
"extends": [],
8+
"parserOptions": {
9+
"ecmaVersion": "latest",
10+
"sourceType": "module"
11+
},
12+
"rules": {}
13+
}

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
node_modules
2+
dist
3+
.DS_Store
4+
.env

.prettierrc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"singleQuote": true,
3+
"semi": true,
4+
"trailingComma": "all",
5+
"printWidth": 100
6+
}

README.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# CLI & TUI Monorepo Skeleton
2+
3+
Monorepo for building CLI (Commander) and TUI (Ink) apps with shared core logic.
4+
5+
## Structure
6+
- `packages/cli`: CLI entry using `commander`.
7+
- `packages/tui`: TUI components using `ink` (React-based).
8+
- `packages/core`: Shared logic & utilities.
9+
10+
## Prerequisites
11+
- Node.js ≥ 18.18
12+
- pnpm ≥ 9
13+
14+
## Install
15+
```bash
16+
pnpm install
17+
```
18+
19+
## Build
20+
```bash
21+
pnpm run build
22+
```
23+
24+
## Run CLI
25+
```bash
26+
node packages/cli/dist/index.js hello YourName
27+
node packages/cli/dist/index.js ui YourName
28+
```
29+
30+
## Dev (watch mode)
31+
```bash
32+
pnpm run dev
33+
```
34+
35+
## Lint / Format
36+
```bash
37+
pnpm run lint
38+
pnpm run format
39+
```

package.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "cli-tui-monorepo",
3+
"private": true,
4+
"packageManager": "pnpm@9",
5+
"engines": {
6+
"node": ">=18.18"
7+
},
8+
"scripts": {
9+
"build": "pnpm -r build",
10+
"dev": "pnpm -r dev",
11+
"clean": "pnpm -r clean",
12+
"lint": "pnpm -r lint",
13+
"format": "pnpm -r format",
14+
"test": "pnpm -r test"
15+
},
16+
"devDependencies": {
17+
"@types/node": "^20.11.0",
18+
"eslint": "^9.0.0",
19+
"prettier": "^3.2.0",
20+
"tsup": "^8.0.0",
21+
"typescript": "^5.4.0",
22+
"vitest": "^1.2.0"
23+
}
24+
}

packages/cli/package.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"name": "@acme/cli",
3+
"version": "0.1.0",
4+
"type": "module",
5+
"bin": {
6+
"acme": "dist/index.js"
7+
},
8+
"main": "dist/index.js",
9+
"files": [
10+
"dist"
11+
],
12+
"scripts": {
13+
"build": "tsup",
14+
"dev": "tsup --watch",
15+
"clean": "rimraf dist || rm -rf dist",
16+
"lint": "echo \"(cli) no lint rules configured\"",
17+
"format": "prettier -w \"src/**/*.{ts,tsx}\"",
18+
"test": "vitest run"
19+
},
20+
"dependencies": {
21+
"@acme/core": "workspace:*",
22+
"@acme/tui": "workspace:*",
23+
"commander": "^12.0.0"
24+
},
25+
"devDependencies": {
26+
"tsup": "^8.0.0",
27+
"typescript": "^5.4.0",
28+
"vitest": "^1.2.0"
29+
}
30+
}

packages/cli/src/index.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Command } from 'commander';
2+
import { greet } from '@acme/core';
3+
import { runTUI } from '@acme/tui';
4+
5+
const VERSION = '0.1.0';
6+
7+
const program = new Command();
8+
9+
program
10+
.name('acme')
11+
.description('CLI for demoing core utilities and a TUI')
12+
.version(VERSION);
13+
14+
program
15+
.command('hello')
16+
.argument('[name]', 'Your name', 'World')
17+
.description('Print a greeting from @acme/core')
18+
.action((name: string) => {
19+
console.log(greet(name));
20+
});
21+
22+
program
23+
.command('ui')
24+
.argument('[name]', 'Your name', 'World')
25+
.description('Launch the Ink TUI')
26+
.action(async (name: string) => {
27+
await runTUI(name);
28+
});
29+
30+
program.parseAsync(process.argv);

packages/cli/tsconfig.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"extends": "../../tsconfig.base.json",
3+
"include": [
4+
"src"
5+
]
6+
}

packages/cli/tsup.config.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { defineConfig } from 'tsup';
2+
3+
export default defineConfig({
4+
entry: ['src/index.ts'],
5+
format: ['esm'],
6+
dts: false,
7+
clean: true,
8+
sourcemap: true,
9+
target: 'node18',
10+
banner: { js: '#!/usr/bin/env node' }
11+
});

packages/core/package.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"name": "@acme/core",
3+
"version": "0.1.0",
4+
"type": "module",
5+
"main": "dist/index.js",
6+
"types": "dist/index.d.ts",
7+
"files": [
8+
"dist"
9+
],
10+
"scripts": {
11+
"build": "tsup",
12+
"dev": "tsup --watch",
13+
"clean": "rimraf dist || rm -rf dist",
14+
"lint": "echo \"(core) no lint rules configured\"",
15+
"format": "prettier -w \"src/**/*.{ts,tsx}\"",
16+
"test": "vitest run"
17+
},
18+
"devDependencies": {
19+
"tsup": "^8.0.0",
20+
"typescript": "^5.4.0",
21+
"vitest": "^1.2.0"
22+
}
23+
}

0 commit comments

Comments
 (0)