@mudah-cli/create-mudah 0.1.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,11 @@
1
+ #!/usr/bin/env node
2
+ export interface ScaffoldResult {
3
+ dir: string;
4
+ name: string;
5
+ files: string[];
6
+ }
7
+ /**
8
+ * Scaffold a fresh Mudah app into `targetDir` (created if missing).
9
+ * The app name is derived from the directory's basename.
10
+ */
11
+ export declare function scaffold(targetDir: string): Promise<ScaffoldResult>;
package/dist/cli.js ADDED
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env node
2
+ import { chmod, mkdir, readdir, writeFile } from 'node:fs/promises';
3
+ import { existsSync } from 'node:fs';
4
+ import { basename, isAbsolute, join, resolve } from 'node:path';
5
+ import { pathToFileURL } from 'node:url';
6
+ import { detectCapabilities } from '@mudah-cli/terminal';
7
+ import { Output, resolveTheme } from '@mudah-cli/ui';
8
+ import { appTemplates, slugify } from './templates.js';
9
+ /**
10
+ * Scaffold a fresh Mudah app into `targetDir` (created if missing).
11
+ * The app name is derived from the directory's basename.
12
+ */
13
+ export async function scaffold(targetDir) {
14
+ const dir = resolve(targetDir);
15
+ const name = slugify(basename(dir));
16
+ const files = [];
17
+ await mkdir(dir, { recursive: true });
18
+ for (const [rel, content] of appTemplates(name)) {
19
+ const path = join(dir, rel);
20
+ await mkdir(join(path, '..'), { recursive: true });
21
+ await writeFile(path, content, 'utf8');
22
+ files.push(rel);
23
+ }
24
+ // Bin stubs must be executable for direct `./bin/<name>` invocation.
25
+ await chmod(join(dir, 'bin', `${name}.js`), 0o755).catch(() => { });
26
+ return { dir, name, files };
27
+ }
28
+ const USAGE = `create-mudah — scaffold a new Mudah CLI app
29
+
30
+ Usage:
31
+ npm create @mudah-cli/mudah <directory>
32
+ npx create-mudah <directory> [options]
33
+
34
+ Options:
35
+ -h, --help Show this help
36
+ --force Scaffold into a non-empty directory (files are not
37
+ overwritten unless missing)
38
+
39
+ The app name is the directory's basename (kebab-cased). After scaffolding:
40
+ cd <directory>
41
+ npm install
42
+ npm run start
43
+ `;
44
+ async function main() {
45
+ const args = process.argv.slice(2);
46
+ const caps = detectCapabilities();
47
+ const output = new Output({
48
+ theme: resolveTheme('auto'),
49
+ colorLevel: caps.colorLevel,
50
+ unicode: caps.unicode,
51
+ });
52
+ if (args.includes('-h') || args.includes('--help')) {
53
+ output.raw(USAGE);
54
+ return 0;
55
+ }
56
+ const force = args.includes('--force');
57
+ const target = args.find((a) => !a.startsWith('-'));
58
+ if (!target) {
59
+ output.error('Missing directory argument.');
60
+ output.hint('Run "npm create @mudah-cli/mudah my-app" to scaffold "my-app".');
61
+ return 2;
62
+ }
63
+ const dir = isAbsolute(target) ? target : resolve(process.cwd(), target);
64
+ if (existsSync(dir)) {
65
+ const entries = await readdir(dir);
66
+ if (entries.length > 0 && !force) {
67
+ output.error(`Directory "${target}" is not empty.`);
68
+ output.hint('Use --force to scaffold into it anyway.');
69
+ return 1;
70
+ }
71
+ }
72
+ output.info(`Scaffolding Mudah app into ${dir}`);
73
+ try {
74
+ const result = await scaffold(dir);
75
+ output.success(`Created ${result.files.length} files for "${result.name}".`);
76
+ output.raw('');
77
+ output.section('Next steps');
78
+ output.bullet(`cd ${isAbsolute(dir) ? dir : basename(dir)}`);
79
+ output.bullet('npm install');
80
+ output.bullet('npm run start');
81
+ return 0;
82
+ }
83
+ catch (error) {
84
+ output.error(error instanceof Error ? error.message : String(error));
85
+ return 1;
86
+ }
87
+ }
88
+ // Run the CLI only when executed directly (not when imported as a module).
89
+ if (process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href) {
90
+ main().then((code) => {
91
+ process.exitCode = code;
92
+ });
93
+ }
94
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { scaffold, type ScaffoldResult } from './cli.js';
2
+ export { appTemplates, slugify } from './templates.js';
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { scaffold } from './cli.js';
2
+ export { appTemplates, slugify } from './templates.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAuB,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function slugify(name: string): string;
2
+ /**
3
+ * All files of a fresh Mudah app, as `[relativePath, content]` pairs.
4
+ * The app name is kebab-case (e.g. `hello-cli`).
5
+ */
6
+ export declare function appTemplates(name: string): [string, string][];
@@ -0,0 +1,200 @@
1
+ export function slugify(name) {
2
+ return name
3
+ .trim()
4
+ .toLowerCase()
5
+ .replace(/[^a-z0-9]+/g, '-')
6
+ .replace(/^-+|-+$/g, '') || 'mudah-app';
7
+ }
8
+ /**
9
+ * All files of a fresh Mudah app, as `[relativePath, content]` pairs.
10
+ * The app name is kebab-case (e.g. `hello-cli`).
11
+ */
12
+ export function appTemplates(name) {
13
+ const pascal = name
14
+ .split('-')
15
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
16
+ .join('');
17
+ return [
18
+ [
19
+ 'package.json',
20
+ JSON.stringify({
21
+ name,
22
+ version: '0.1.0',
23
+ description: `${name} — built with Mudah`,
24
+ type: 'module',
25
+ private: true,
26
+ bin: { [name]: `./bin/${name}.js` },
27
+ engines: { node: '>=26' },
28
+ scripts: {
29
+ start: `node bin/${name}.js`,
30
+ dev: `node bin/${name}.js dev welcome`,
31
+ doctor: `node bin/${name}.js doctor`,
32
+ test: 'vitest run',
33
+ typecheck: 'tsc --noEmit',
34
+ },
35
+ dependencies: { '@mudah-cli/mudah': '^0.1.0' },
36
+ devDependencies: {
37
+ '@types/node': '^26.0.0',
38
+ typescript: '^7.0.0',
39
+ vitest: '^4.0.0',
40
+ },
41
+ }, null, 2) + '\n',
42
+ ],
43
+ [
44
+ 'mudah.json',
45
+ JSON.stringify({
46
+ name,
47
+ version: '0.1.0',
48
+ bin: name,
49
+ description: `${name} — built with Mudah`,
50
+ ui: { theme: 'auto' },
51
+ }, null, 2) + '\n',
52
+ ],
53
+ [
54
+ `bin/${name}.js`,
55
+ `#!/usr/bin/env node
56
+ import { run } from '@mudah-cli/mudah';
57
+
58
+ process.exitCode = await run();
59
+ `,
60
+ ],
61
+ [
62
+ 'tsconfig.json',
63
+ JSON.stringify({
64
+ compilerOptions: {
65
+ target: 'es2024',
66
+ lib: ['es2024'],
67
+ types: ['node'],
68
+ module: 'nodenext',
69
+ moduleResolution: 'nodenext',
70
+ strict: true,
71
+ noUncheckedIndexedAccess: true,
72
+ verbatimModuleSyntax: true,
73
+ isolatedModules: true,
74
+ skipLibCheck: true,
75
+ noEmit: true,
76
+ },
77
+ include: ['src', 'config', 'test'],
78
+ }, null, 2) + '\n',
79
+ ],
80
+ [
81
+ 'src/commands/welcome.command.ts',
82
+ `import { Command } from '@mudah-cli/mudah';
83
+
84
+ export default class WelcomeCommand extends Command {
85
+ signature = 'welcome {name?}';
86
+ description = 'Say hello from ${name}';
87
+
88
+ async handle() {
89
+ this.output.section('Mudah');
90
+ this.output.success(\`Hello, \${this.arg('name') ?? 'world'}!\`);
91
+ this.output.muted('Run "${name} --help" to see all commands.');
92
+ }
93
+ }
94
+ `,
95
+ ],
96
+ [
97
+ 'src/providers/AppProvider.ts',
98
+ `import { ServiceProvider } from '@mudah-cli/mudah';
99
+
100
+ export default class ${pascal}Provider extends ServiceProvider {
101
+ register(): void {
102
+ this.app.config().merge('app', {
103
+ name: '${name}',
104
+ env: 'local',
105
+ });
106
+ }
107
+ }
108
+ `,
109
+ ],
110
+ [
111
+ 'config/app.ts',
112
+ `import { defineConfig } from '@mudah-cli/mudah';
113
+
114
+ export default defineConfig({
115
+ name: '${name}',
116
+ env: 'local',
117
+ });
118
+ `,
119
+ ],
120
+ [
121
+ '.env.example',
122
+ `# Copy to .env and adjust.
123
+ # APP_ENV=local
124
+ `,
125
+ ],
126
+ [
127
+ '.gitignore',
128
+ `node_modules/
129
+ dist/
130
+ .env
131
+ .DS_Store
132
+ `,
133
+ ],
134
+ [
135
+ 'test/welcome.test.ts',
136
+ `import { fileURLToPath } from 'node:url';
137
+ import { describe, expect, it } from 'vitest';
138
+ import { TestApp } from '@mudah-cli/mudah/testing';
139
+
140
+ const appDir = fileURLToPath(new URL('..', import.meta.url));
141
+
142
+ describe('welcome', () => {
143
+ it('greets a named person', async () => {
144
+ const app = await TestApp.create({ cwd: appDir });
145
+ const result = await app.dispatch(['welcome', 'Mudah']);
146
+ result.exit(0).outContains('Hello, Mudah!');
147
+ });
148
+
149
+ it('greets the world by default', async () => {
150
+ const app = await TestApp.create({ cwd: appDir });
151
+ const result = await app.dispatch(['welcome']);
152
+ result.exit(0).outContains('Hello, world!');
153
+ });
154
+ });
155
+ `,
156
+ ],
157
+ [
158
+ 'vitest.config.ts',
159
+ `import { defineConfig } from 'vitest/config';
160
+
161
+ export default defineConfig({
162
+ test: {
163
+ environment: 'node',
164
+ },
165
+ });
166
+ `,
167
+ ],
168
+ [
169
+ 'README.md',
170
+ `# ${name}
171
+
172
+ Built with [Mudah](https://github.com/thesimonharms/mudah) — speed, sleek design, and developer ergonomics for the terminal.
173
+
174
+ ## Quick start
175
+
176
+ \`\`\`sh
177
+ npm install
178
+ npm run start # run the CLI (no args shows help)
179
+ npm run dev # watch mode: re-runs \`welcome\` on changes
180
+ npm test # in-process command tests via mudah/testing
181
+ \`\`\`
182
+
183
+ ## Structure
184
+
185
+ - \`bin/${name}.js\` — the executable entrypoint (calls \`run()\`)
186
+ - \`mudah.json\` — app manifest (name, version, theme, update nudge)
187
+ - \`src/commands/\` — one file per command (\`*.command.ts\`, default export)
188
+ - \`src/providers/\` — service providers (\`register()\` → \`boot()\`)
189
+ - \`config/\` — configuration files merged into \`app.config()\`
190
+
191
+ Create a new command:
192
+
193
+ \`\`\`sh
194
+ node bin/${name}.js make command deploy-site
195
+ \`\`\`
196
+ `,
197
+ ],
198
+ ];
199
+ }
200
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@mudah-cli/create-mudah",
3
+ "version": "0.1.0",
4
+ "description": "Interactive scaffolder for Mudah CLI apps — create-and-breathe.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "bin": {
8
+ "create-mudah": "./dist/cli.js"
9
+ },
10
+ "engines": {
11
+ "node": ">=26"
12
+ },
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "default": "./dist/index.js"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "sideEffects": false,
23
+ "dependencies": {
24
+ "@mudah-cli/animation": "^0.1.0",
25
+ "@mudah-cli/terminal": "^0.1.0",
26
+ "@mudah-cli/ui": "^0.1.0"
27
+ },
28
+ "publishConfig": {
29
+ "access": "public"
30
+ }
31
+ }