@nexus-framework/cli 0.1.1 → 0.1.2
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 +69 -417
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/generators/ai-config.d.ts +15 -8
- package/dist/generators/ai-config.d.ts.map +1 -1
- package/dist/generators/ai-config.js +165 -106
- package/dist/generators/ai-config.js.map +1 -1
- package/dist/generators/config.d.ts.map +1 -1
- package/dist/generators/config.js +127 -19
- package/dist/generators/config.js.map +1 -1
- package/dist/generators/docs.js +9 -9
- package/dist/generators/index.js +5 -3
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/landing-page.d.ts.map +1 -1
- package/dist/generators/landing-page.js +310 -76
- package/dist/generators/landing-page.js.map +1 -1
- package/dist/generators/structure.d.ts.map +1 -1
- package/dist/generators/structure.js +161 -17
- package/dist/generators/structure.js.map +1 -1
- package/dist/generators/tests.js +1 -1
- package/dist/prompts/index.d.ts +3 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +12 -8
- package/dist/prompts/index.js.map +1 -1
- package/dist/types/config.d.ts +3 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts +2 -2
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +6 -3
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/validator.d.ts +20 -3
- package/dist/utils/validator.d.ts.map +1 -1
- package/dist/utils/validator.js +48 -15
- package/dist/utils/validator.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../../src/generators/structure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE/E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,kBAAkB,EAAE,CAmE7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../../src/generators/structure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE/E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,kBAAkB,EAAE,CAmE7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CA+BtE;AAqKD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,CAqCjD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CA0CjE"}
|
|
@@ -47,28 +47,18 @@ export function generateDirectories(config) {
|
|
|
47
47
|
* Generate the project's package.json content.
|
|
48
48
|
*/
|
|
49
49
|
export function generatePackageJson(config) {
|
|
50
|
+
const scripts = getFrameworkScripts(config);
|
|
51
|
+
const { dependencies, devDependencies } = getFrameworkDependencies(config);
|
|
50
52
|
const pkg = {
|
|
51
53
|
name: config.projectName,
|
|
52
54
|
version: '0.1.0',
|
|
53
55
|
private: true,
|
|
54
56
|
type: 'module',
|
|
55
|
-
scripts
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
start: 'echo "TODO: configure start script"',
|
|
59
|
-
lint: 'eslint . --ext .ts,.tsx',
|
|
60
|
-
format: 'prettier --write .',
|
|
61
|
-
'type-check': 'tsc --noEmit',
|
|
62
|
-
},
|
|
63
|
-
dependencies: {},
|
|
64
|
-
devDependencies: {
|
|
65
|
-
typescript: '^5.7.0',
|
|
66
|
-
'@types/node': '^22.0.0',
|
|
67
|
-
eslint: '^8.57.0',
|
|
68
|
-
prettier: '^3.4.0',
|
|
69
|
-
},
|
|
57
|
+
scripts,
|
|
58
|
+
dependencies,
|
|
59
|
+
devDependencies,
|
|
70
60
|
};
|
|
71
|
-
// Add test scripts
|
|
61
|
+
// Add test scripts & dependencies
|
|
72
62
|
if (config.testFramework === 'vitest') {
|
|
73
63
|
pkg.scripts.test = 'vitest run';
|
|
74
64
|
pkg.scripts['test:watch'] = 'vitest';
|
|
@@ -86,6 +76,160 @@ export function generatePackageJson(config) {
|
|
|
86
76
|
content: JSON.stringify(pkg, null, 2) + '\n',
|
|
87
77
|
};
|
|
88
78
|
}
|
|
79
|
+
/* ──────────────────────────────────────────────────────────────
|
|
80
|
+
* Framework-specific scripts
|
|
81
|
+
* ────────────────────────────────────────────────────────────── */
|
|
82
|
+
function getFrameworkScripts(config) {
|
|
83
|
+
const base = {
|
|
84
|
+
lint: 'eslint . --ext .ts,.tsx',
|
|
85
|
+
format: 'prettier --write .',
|
|
86
|
+
'type-check': 'tsc --noEmit',
|
|
87
|
+
};
|
|
88
|
+
switch (config.frontendFramework) {
|
|
89
|
+
case 'nextjs':
|
|
90
|
+
return {
|
|
91
|
+
dev: 'next dev',
|
|
92
|
+
build: 'next build',
|
|
93
|
+
start: 'next start',
|
|
94
|
+
...base,
|
|
95
|
+
};
|
|
96
|
+
case 'react-vite':
|
|
97
|
+
return {
|
|
98
|
+
dev: 'vite',
|
|
99
|
+
build: 'tsc -b && vite build',
|
|
100
|
+
preview: 'vite preview',
|
|
101
|
+
...base,
|
|
102
|
+
};
|
|
103
|
+
case 'sveltekit':
|
|
104
|
+
return {
|
|
105
|
+
dev: 'vite dev',
|
|
106
|
+
build: 'vite build',
|
|
107
|
+
preview: 'vite preview',
|
|
108
|
+
...base,
|
|
109
|
+
};
|
|
110
|
+
case 'nuxt':
|
|
111
|
+
return {
|
|
112
|
+
dev: 'nuxt dev',
|
|
113
|
+
build: 'nuxt build',
|
|
114
|
+
preview: 'nuxt preview',
|
|
115
|
+
generate: 'nuxt generate',
|
|
116
|
+
...base,
|
|
117
|
+
};
|
|
118
|
+
case 'remix':
|
|
119
|
+
return {
|
|
120
|
+
dev: 'remix vite:dev',
|
|
121
|
+
build: 'remix vite:build',
|
|
122
|
+
start: 'remix-serve ./build/server/index.js',
|
|
123
|
+
...base,
|
|
124
|
+
};
|
|
125
|
+
case 'astro':
|
|
126
|
+
return {
|
|
127
|
+
dev: 'astro dev',
|
|
128
|
+
build: 'astro build',
|
|
129
|
+
preview: 'astro preview',
|
|
130
|
+
...base,
|
|
131
|
+
};
|
|
132
|
+
default:
|
|
133
|
+
return {
|
|
134
|
+
dev: 'echo "TODO: configure dev script"',
|
|
135
|
+
build: 'tsc',
|
|
136
|
+
start: 'node dist/index.js',
|
|
137
|
+
...base,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/* ──────────────────────────────────────────────────────────────
|
|
142
|
+
* Framework-specific dependencies
|
|
143
|
+
* ────────────────────────────────────────────────────────────── */
|
|
144
|
+
function getFrameworkDependencies(config) {
|
|
145
|
+
const baseDev = {
|
|
146
|
+
typescript: '^5.7.0',
|
|
147
|
+
'@types/node': '^22.0.0',
|
|
148
|
+
eslint: '^8.57.0',
|
|
149
|
+
prettier: '^3.4.0',
|
|
150
|
+
};
|
|
151
|
+
switch (config.frontendFramework) {
|
|
152
|
+
case 'nextjs':
|
|
153
|
+
return {
|
|
154
|
+
dependencies: {
|
|
155
|
+
next: '^15.0.0',
|
|
156
|
+
react: '^19.0.0',
|
|
157
|
+
'react-dom': '^19.0.0',
|
|
158
|
+
},
|
|
159
|
+
devDependencies: {
|
|
160
|
+
...baseDev,
|
|
161
|
+
'@types/react': '^19.0.0',
|
|
162
|
+
'@types/react-dom': '^19.0.0',
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
case 'react-vite':
|
|
166
|
+
return {
|
|
167
|
+
dependencies: {
|
|
168
|
+
react: '^19.0.0',
|
|
169
|
+
'react-dom': '^19.0.0',
|
|
170
|
+
},
|
|
171
|
+
devDependencies: {
|
|
172
|
+
...baseDev,
|
|
173
|
+
vite: '^6.0.0',
|
|
174
|
+
'@vitejs/plugin-react': '^4.3.0',
|
|
175
|
+
'@types/react': '^19.0.0',
|
|
176
|
+
'@types/react-dom': '^19.0.0',
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
case 'sveltekit':
|
|
180
|
+
return {
|
|
181
|
+
dependencies: {},
|
|
182
|
+
devDependencies: {
|
|
183
|
+
...baseDev,
|
|
184
|
+
'@sveltejs/kit': '^2.0.0',
|
|
185
|
+
'@sveltejs/adapter-auto': '^3.0.0',
|
|
186
|
+
'@sveltejs/vite-plugin-svelte': '^4.0.0',
|
|
187
|
+
svelte: '^5.0.0',
|
|
188
|
+
vite: '^6.0.0',
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
case 'nuxt':
|
|
192
|
+
return {
|
|
193
|
+
dependencies: {},
|
|
194
|
+
devDependencies: {
|
|
195
|
+
...baseDev,
|
|
196
|
+
nuxt: '^3.14.0',
|
|
197
|
+
vue: '^3.5.0',
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
case 'remix':
|
|
201
|
+
return {
|
|
202
|
+
dependencies: {
|
|
203
|
+
'@remix-run/node': '^2.0.0',
|
|
204
|
+
'@remix-run/react': '^2.0.0',
|
|
205
|
+
'@remix-run/serve': '^2.0.0',
|
|
206
|
+
react: '^19.0.0',
|
|
207
|
+
'react-dom': '^19.0.0',
|
|
208
|
+
},
|
|
209
|
+
devDependencies: {
|
|
210
|
+
...baseDev,
|
|
211
|
+
'@remix-run/dev': '^2.0.0',
|
|
212
|
+
vite: '^6.0.0',
|
|
213
|
+
'@types/react': '^19.0.0',
|
|
214
|
+
'@types/react-dom': '^19.0.0',
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
case 'astro':
|
|
218
|
+
return {
|
|
219
|
+
dependencies: {
|
|
220
|
+
astro: '^4.0.0',
|
|
221
|
+
},
|
|
222
|
+
devDependencies: {
|
|
223
|
+
...baseDev,
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
default:
|
|
227
|
+
return {
|
|
228
|
+
dependencies: {},
|
|
229
|
+
devDependencies: baseDev,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
}
|
|
89
233
|
/**
|
|
90
234
|
* Generate .gitignore file.
|
|
91
235
|
*/
|
|
@@ -130,7 +274,7 @@ yarn-error.log*
|
|
|
130
274
|
* Generate a basic README for the created project.
|
|
131
275
|
*/
|
|
132
276
|
export function generateReadme(config) {
|
|
133
|
-
const content = `# ${config.
|
|
277
|
+
const content = `# ${config.displayName}
|
|
134
278
|
|
|
135
279
|
> Generated with [NEXUS CLI](https://github.com/GDA-Africa/nexus-cli) 🔮
|
|
136
280
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/generators/structure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,MAAM,IAAI,GAAyB;QACjC,EAAE,IAAI,EAAE,KAAK,EAAE;QACf,EAAE,IAAI,EAAE,QAAQ,EAAE;QAClB,EAAE,IAAI,EAAE,QAAQ,EAAE;QAClB,EAAE,IAAI,EAAE,aAAa,EAAE;QACvB,EAAE,IAAI,EAAE,WAAW,EAAE;KACtB,CAAC;IAEF,mBAAmB;IACnB,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CACP,EAAE,IAAI,EAAE,OAAO,EAAE,EACjB,EAAE,IAAI,EAAE,YAAY,EAAE,EACtB,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAC7B,EAAE,IAAI,EAAE,WAAW,EAAE,EACrB,EAAE,IAAI,EAAE,aAAa,EAAE,CACxB,CAAC;IACJ,CAAC;IAED,QAAQ;IACR,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE9D,qBAAqB;IACrB,QAAQ,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACjC,KAAK,QAAQ;YACX,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAChF,MAAM;QACR,KAAK,YAAY;YACf,IAAI,CAAC,IAAI,CACP,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,EACrB,EAAE,IAAI,EAAE,WAAW,EAAE,EACrB,EAAE,IAAI,EAAE,SAAS,EAAE,CACpB,CAAC;YACF,MAAM;QACR,KAAK,WAAW;YACd,IAAI,CAAC,IAAI,CACP,EAAE,IAAI,EAAE,YAAY,EAAE,EACtB,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAC9B,EAAE,IAAI,EAAE,YAAY,EAAE,CACvB,CAAC;YACF,MAAM;QACR,KAAK,MAAM;YACT,IAAI,CAAC,IAAI,CACP,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAC1B,EAAE,IAAI,EAAE,OAAO,EAAE,EACjB,EAAE,IAAI,EAAE,QAAQ,EAAE,EAClB,EAAE,IAAI,EAAE,YAAY,EAAE,CACvB,CAAC;YACF,MAAM;QACR,KAAK,OAAO;YACV,IAAI,CAAC,IAAI,CACP,EAAE,IAAI,EAAE,WAAW,EAAE,EACrB,EAAE,IAAI,EAAE,aAAa,EAAE,EACvB,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAC1B,EAAE,IAAI,EAAE,YAAY,EAAE,CACvB,CAAC;YACF,MAAM;QACR;YACE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC3D,MAAM;IACV,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../src/generators/structure.ts"],"names":[],"mappings":"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"}
|
package/dist/generators/tests.js
CHANGED
|
@@ -43,7 +43,7 @@ function generateExampleVitestTest(config) {
|
|
|
43
43
|
path: 'tests/unit/example.test.ts',
|
|
44
44
|
content: `import { describe, it, expect } from 'vitest';
|
|
45
45
|
|
|
46
|
-
describe('${config.
|
|
46
|
+
describe('${config.displayName}', () => {
|
|
47
47
|
it('should pass a basic sanity check', () => {
|
|
48
48
|
expect(true).toBe(true);
|
|
49
49
|
});
|
package/dist/prompts/index.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ import type { NexusConfig } from '../types/config.js';
|
|
|
7
7
|
/**
|
|
8
8
|
* Run the full interactive prompt flow and return a complete NexusConfig.
|
|
9
9
|
*
|
|
10
|
+
* Users can enter free-text names like "Todo List App" — we derive the
|
|
11
|
+
* slug ("todo-list-app") automatically for the folder & package.json name.
|
|
12
|
+
*
|
|
10
13
|
* @param initialName - Optional project name passed via CLI argument
|
|
11
14
|
*/
|
|
12
15
|
export declare function runPrompts(initialName?: string): Promise<NexusConfig>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUtD
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAUtD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAuD3E"}
|
package/dist/prompts/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { input } from '@inquirer/prompts';
|
|
7
7
|
import { detectPackageManager } from '../utils/package-manager.js';
|
|
8
|
-
import { validateProjectName,
|
|
8
|
+
import { validateProjectName, toSlug, toDisplayName } from '../utils/validator.js';
|
|
9
9
|
import { promptDataStrategy } from './data-strategy.js';
|
|
10
10
|
import { promptFeatures } from './features.js';
|
|
11
11
|
import { promptFramework } from './frameworks.js';
|
|
@@ -14,15 +14,18 @@ import { promptProjectType } from './project-type.js';
|
|
|
14
14
|
/**
|
|
15
15
|
* Run the full interactive prompt flow and return a complete NexusConfig.
|
|
16
16
|
*
|
|
17
|
+
* Users can enter free-text names like "Todo List App" — we derive the
|
|
18
|
+
* slug ("todo-list-app") automatically for the folder & package.json name.
|
|
19
|
+
*
|
|
17
20
|
* @param initialName - Optional project name passed via CLI argument
|
|
18
21
|
*/
|
|
19
22
|
export async function runPrompts(initialName) {
|
|
20
|
-
// 1. Project name
|
|
21
|
-
let
|
|
23
|
+
// 1. Project name (free-text)
|
|
24
|
+
let rawName;
|
|
22
25
|
if (!initialName) {
|
|
23
|
-
|
|
26
|
+
rawName = await input({
|
|
24
27
|
message: 'Project name:',
|
|
25
|
-
default: '
|
|
28
|
+
default: 'My Nexus App',
|
|
26
29
|
validate: (val) => {
|
|
27
30
|
const result = validateProjectName(val);
|
|
28
31
|
return result.valid ? true : (result.message ?? 'Invalid name');
|
|
@@ -30,14 +33,14 @@ export async function runPrompts(initialName) {
|
|
|
30
33
|
});
|
|
31
34
|
}
|
|
32
35
|
else {
|
|
33
|
-
// Validate the provided name
|
|
34
36
|
const validation = validateProjectName(initialName);
|
|
35
37
|
if (!validation.valid) {
|
|
36
38
|
throw new Error(validation.message ?? 'Invalid project name.');
|
|
37
39
|
}
|
|
38
|
-
|
|
40
|
+
rawName = initialName;
|
|
39
41
|
}
|
|
40
|
-
projectName =
|
|
42
|
+
const projectName = toSlug(rawName);
|
|
43
|
+
const displayName = toDisplayName(rawName);
|
|
41
44
|
// 2. Project type
|
|
42
45
|
const projectType = await promptProjectType();
|
|
43
46
|
// 3. Data strategy
|
|
@@ -51,6 +54,7 @@ export async function runPrompts(initialName) {
|
|
|
51
54
|
// Assemble config
|
|
52
55
|
const config = {
|
|
53
56
|
projectName,
|
|
57
|
+
displayName,
|
|
54
58
|
projectType,
|
|
55
59
|
dataStrategy,
|
|
56
60
|
appPatterns,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAoB;IACnD,8BAA8B;IAC9B,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,GAAG,MAAM,KAAK,CAAC;YACpB,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE;gBACxB,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;gBACxC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC;YAClE,CAAC;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,uBAAuB,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,GAAG,WAAW,CAAC;IACxB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAE3C,kBAAkB;IAClB,MAAM,WAAW,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAE9C,mBAAmB;IACnB,MAAM,YAAY,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAEhD,0BAA0B;IAC1B,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;IAE3C,eAAe;IACf,MAAM,iBAAiB,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IAE7D,uBAAuB;IACvB,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;IAEnF,kBAAkB;IAClB,MAAM,MAAM,GAAgB;QAC1B,WAAW;QACX,WAAW;QACX,WAAW;QACX,YAAY;QACZ,WAAW;QACX,iBAAiB;QACjB,eAAe,EAAE,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY;QAClE,gBAAgB,EAAE,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;QAC5D,aAAa;QACb,cAAc,EAAE,cAAc,IAAI,oBAAoB,EAAE;QACxD,GAAG;QACH,WAAW;KACZ,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -21,7 +21,10 @@ export type TestFramework = 'vitest' | 'jest' | 'none';
|
|
|
21
21
|
export type PackageManager = 'npm' | 'yarn' | 'pnpm';
|
|
22
22
|
/** Full project configuration resolved from user prompts */
|
|
23
23
|
export interface NexusConfig {
|
|
24
|
+
/** Slug used for folder name & package.json name (e.g. "todo-list-app") */
|
|
24
25
|
projectName: string;
|
|
26
|
+
/** Human-readable project name for titles & headings (e.g. "Todo List App") */
|
|
27
|
+
displayName: string;
|
|
25
28
|
projectType: ProjectType;
|
|
26
29
|
dataStrategy: DataStrategy;
|
|
27
30
|
appPatterns: AppPattern[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5E,4BAA4B;AAC5B,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEnF,gCAAgC;AAChC,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAEpG,oCAAoC;AACpC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnG,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzE,+BAA+B;AAC/B,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAEhF,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,4DAA4D;AAC5D,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,eAAe,EAAE,eAAe,CAAC;IACjC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAC9B,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5E,4BAA4B;AAC5B,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEnF,gCAAgC;AAChC,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAEpG,oCAAoC;AACpC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnG,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzE,+BAA+B;AAC/B,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAEhF,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,4DAA4D;AAC5D,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,eAAe,EAAE,eAAe,CAAC;IACjC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,GAAG,EAAE,OAAO,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { logger } from './logger.js';
|
|
2
|
-
export { validateProjectName, sanitizeProjectName } from './validator.js';
|
|
2
|
+
export { validateProjectName, sanitizeProjectName, toSlug, toDisplayName } from './validator.js';
|
|
3
3
|
export { detectPackageManager, getInstallCommand, getRunCommand } from './package-manager.js';
|
|
4
4
|
export { gitInit, isGitInstalled } from './git.js';
|
|
5
5
|
export { ensureDirectory, writeFile, writeGeneratorResult, renderTemplate } from './file-system.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { logger } from './logger.js';
|
|
2
|
-
export { validateProjectName, sanitizeProjectName } from './validator.js';
|
|
2
|
+
export { validateProjectName, sanitizeProjectName, toSlug, toDisplayName } from './validator.js';
|
|
3
3
|
export { detectPackageManager, getInstallCommand, getRunCommand } from './package-manager.js';
|
|
4
4
|
export { gitInit, isGitInstalled } from './git.js';
|
|
5
5
|
export { ensureDirectory, writeFile, writeGeneratorResult, renderTemplate } from './file-system.js';
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -20,9 +20,9 @@ export declare function divider(): void;
|
|
|
20
20
|
/** Print the NEXUS banner */
|
|
21
21
|
export declare function banner(version: string): void;
|
|
22
22
|
/** Print final success with next steps */
|
|
23
|
-
export declare function complete(projectName: string): void;
|
|
23
|
+
export declare function complete(projectName: string, displayName?: string): void;
|
|
24
24
|
/** Print adopt-mode completion with next steps */
|
|
25
|
-
export declare function adoptComplete(
|
|
25
|
+
export declare function adoptComplete(displayName: string): void;
|
|
26
26
|
export declare const logger: {
|
|
27
27
|
info: typeof info;
|
|
28
28
|
success: typeof success;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,mCAAmC;AACnC,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,4BAA4B;AAC5B,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,4BAA4B;AAC5B,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,2BAA2B;AAC3B,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,kCAAkC;AAClC,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,yBAAyB;AACzB,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,8BAA8B;AAC9B,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,6BAA6B;AAC7B,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM5C;AAED,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,mCAAmC;AACnC,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,4BAA4B;AAC5B,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,4BAA4B;AAC5B,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,2BAA2B;AAC3B,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,kCAAkC;AAClC,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,yBAAyB;AACzB,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,8BAA8B;AAC9B,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,6BAA6B;AAC7B,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM5C;AAED,0CAA0C;AAC1C,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAkBxE;AAED,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAsBvD;AAED,eAAO,MAAM,MAAM;;;;;;;;;;;CAWlB,CAAC"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -51,12 +51,15 @@ export function banner(version) {
|
|
|
51
51
|
newline();
|
|
52
52
|
}
|
|
53
53
|
/** Print final success with next steps */
|
|
54
|
-
export function complete(projectName) {
|
|
54
|
+
export function complete(projectName, displayName) {
|
|
55
|
+
const prettyName = displayName ?? projectName;
|
|
55
56
|
newline();
|
|
56
57
|
divider();
|
|
57
58
|
newline();
|
|
58
59
|
console.log(COLORS.success.bold(' ✅ Project created successfully!'));
|
|
59
60
|
newline();
|
|
61
|
+
console.log(COLORS.bold(` ${prettyName}`));
|
|
62
|
+
newline();
|
|
60
63
|
console.log(COLORS.bold(' Next steps:'));
|
|
61
64
|
console.log(COLORS.primary(` cd ${projectName}`));
|
|
62
65
|
console.log(COLORS.primary(' npm run dev'));
|
|
@@ -68,13 +71,13 @@ export function complete(projectName) {
|
|
|
68
71
|
newline();
|
|
69
72
|
}
|
|
70
73
|
/** Print adopt-mode completion with next steps */
|
|
71
|
-
export function adoptComplete(
|
|
74
|
+
export function adoptComplete(displayName) {
|
|
72
75
|
newline();
|
|
73
76
|
divider();
|
|
74
77
|
newline();
|
|
75
78
|
console.log(COLORS.success.bold(' ✅ NEXUS adopted successfully!'));
|
|
76
79
|
newline();
|
|
77
|
-
console.log(COLORS.bold(` "${
|
|
80
|
+
console.log(COLORS.bold(` "${displayName}" now has NEXUS documentation & AI config.`));
|
|
78
81
|
newline();
|
|
79
82
|
console.log(COLORS.bold(' What happens next:'));
|
|
80
83
|
console.log(COLORS.primary(' 1. Open your AI coding tool (Copilot, Cursor, Windsurf, etc.)'));
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,mBAAmB;AACnB,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,KAAK,CAAC,IAAI;IACnB,OAAO,EAAE,KAAK,CAAC,KAAK;IACpB,OAAO,EAAE,KAAK,CAAC,MAAM;IACrB,KAAK,EAAE,KAAK,CAAC,GAAG;IAChB,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,GAAG,EAAE,KAAK,CAAC,GAAG;IACd,IAAI,EAAE,KAAK,CAAC,IAAI;CACjB,CAAC;AAEF,mCAAmC;AACnC,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,MAAM,CAAC,OAAe;IACpC,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC3D,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,QAAQ,CAAC,WAAmB;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,17 +9,34 @@ export interface ValidationResult {
|
|
|
9
9
|
message?: string;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* Validate a project name.
|
|
13
|
-
*
|
|
12
|
+
* Validate a project name (accepts free-text like "Todo List App").
|
|
13
|
+
* Validates that the derived slug is a valid npm name and the directory doesn't exist.
|
|
14
14
|
*/
|
|
15
15
|
export declare function validateProjectName(name: string, targetDir?: string): ValidationResult;
|
|
16
16
|
/**
|
|
17
17
|
* Validate that a value is non-empty.
|
|
18
18
|
*/
|
|
19
19
|
export declare function validateNotEmpty(value: string, fieldName?: string): ValidationResult;
|
|
20
|
+
/**
|
|
21
|
+
* Convert any project name into a kebab-case slug for folder & package.json name.
|
|
22
|
+
*
|
|
23
|
+
* Examples:
|
|
24
|
+
* "Todo List App" → "todo-list-app"
|
|
25
|
+
* "My Cool Project" → "my-cool-project"
|
|
26
|
+
* "todo-list-app" → "todo-list-app"
|
|
27
|
+
* " Some App " → "some-app"
|
|
28
|
+
*/
|
|
29
|
+
export declare function toSlug(name: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Convert a project name into a human-readable display name.
|
|
32
|
+
*
|
|
33
|
+
* If the input is already "free text" (contains spaces/uppercase), keep it.
|
|
34
|
+
* If it's a slug like "todo-list-app", convert to "Todo List App".
|
|
35
|
+
*/
|
|
36
|
+
export declare function toDisplayName(name: string): string;
|
|
20
37
|
/**
|
|
21
38
|
* Sanitize a project name for use as a directory name.
|
|
22
|
-
*
|
|
39
|
+
* @deprecated Use `toSlug()` instead — this is kept for backwards compatibility.
|
|
23
40
|
*/
|
|
24
41
|
export declare function sanitizeProjectName(name: string): string;
|
|
25
42
|
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA+BtF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAU,GAAG,gBAAgB,CAKrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS3C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD"}
|
package/dist/utils/validator.js
CHANGED
|
@@ -7,29 +7,32 @@ import fs from 'node:fs';
|
|
|
7
7
|
import path from 'node:path';
|
|
8
8
|
import validateNpmPackageName from 'validate-npm-package-name';
|
|
9
9
|
/**
|
|
10
|
-
* Validate a project name.
|
|
11
|
-
*
|
|
10
|
+
* Validate a project name (accepts free-text like "Todo List App").
|
|
11
|
+
* Validates that the derived slug is a valid npm name and the directory doesn't exist.
|
|
12
12
|
*/
|
|
13
13
|
export function validateProjectName(name, targetDir) {
|
|
14
14
|
if (!name || name.trim().length === 0) {
|
|
15
15
|
return { valid: false, message: 'Project name cannot be empty.' };
|
|
16
16
|
}
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
const slug = toSlug(name);
|
|
18
|
+
if (!slug) {
|
|
19
|
+
return { valid: false, message: 'Project name must contain at least one letter or number.' };
|
|
20
|
+
}
|
|
21
|
+
// Check npm naming rules against the derived slug
|
|
22
|
+
const npmResult = validateNpmPackageName(slug);
|
|
20
23
|
if (!npmResult.validForNewPackages) {
|
|
21
24
|
const errors = [...(npmResult.errors ?? []), ...(npmResult.warnings ?? [])];
|
|
22
25
|
return {
|
|
23
26
|
valid: false,
|
|
24
|
-
message: `Invalid package name: ${errors.join(', ')}`,
|
|
27
|
+
message: `Invalid package name "${slug}": ${errors.join(', ')}`,
|
|
25
28
|
};
|
|
26
29
|
}
|
|
27
30
|
// Check if directory already exists
|
|
28
|
-
const dir = targetDir ?? path.resolve(process.cwd(),
|
|
31
|
+
const dir = targetDir ?? path.resolve(process.cwd(), slug);
|
|
29
32
|
if (fs.existsSync(dir)) {
|
|
30
33
|
return {
|
|
31
34
|
valid: false,
|
|
32
|
-
message: `Directory "${
|
|
35
|
+
message: `Directory "${slug}" already exists. Choose a different name or delete the existing directory.`,
|
|
33
36
|
};
|
|
34
37
|
}
|
|
35
38
|
return { valid: true };
|
|
@@ -44,16 +47,46 @@ export function validateNotEmpty(value, fieldName = 'Value') {
|
|
|
44
47
|
return { valid: true };
|
|
45
48
|
}
|
|
46
49
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
50
|
+
* Convert any project name into a kebab-case slug for folder & package.json name.
|
|
51
|
+
*
|
|
52
|
+
* Examples:
|
|
53
|
+
* "Todo List App" → "todo-list-app"
|
|
54
|
+
* "My Cool Project" → "my-cool-project"
|
|
55
|
+
* "todo-list-app" → "todo-list-app"
|
|
56
|
+
* " Some App " → "some-app"
|
|
49
57
|
*/
|
|
50
|
-
export function
|
|
58
|
+
export function toSlug(name) {
|
|
51
59
|
return name
|
|
52
60
|
.trim()
|
|
53
61
|
.toLowerCase()
|
|
54
|
-
.replace(
|
|
55
|
-
.replace(
|
|
56
|
-
.replace(
|
|
57
|
-
.replace(
|
|
62
|
+
.replace(/[^a-z0-9\s\-_.]/g, '') // strip invalid chars (keep spaces for now)
|
|
63
|
+
.replace(/\s+/g, '-') // spaces → hyphens
|
|
64
|
+
.replace(/-+/g, '-') // collapse multiple hyphens
|
|
65
|
+
.replace(/^[-_.]+/, '') // strip leading separators
|
|
66
|
+
.replace(/[-_.]+$/, ''); // strip trailing separators
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Convert a project name into a human-readable display name.
|
|
70
|
+
*
|
|
71
|
+
* If the input is already "free text" (contains spaces/uppercase), keep it.
|
|
72
|
+
* If it's a slug like "todo-list-app", convert to "Todo List App".
|
|
73
|
+
*/
|
|
74
|
+
export function toDisplayName(name) {
|
|
75
|
+
const trimmed = name.trim();
|
|
76
|
+
// If already has spaces or mixed case, it's a free-text name — just clean it up
|
|
77
|
+
if (/\s/.test(trimmed) || /[A-Z]/.test(trimmed)) {
|
|
78
|
+
return trimmed.replace(/\s+/g, ' ');
|
|
79
|
+
}
|
|
80
|
+
// Otherwise convert slug → title case: "todo-list-app" → "Todo List App"
|
|
81
|
+
return trimmed
|
|
82
|
+
.replace(/[-_]+/g, ' ')
|
|
83
|
+
.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Sanitize a project name for use as a directory name.
|
|
87
|
+
* @deprecated Use `toSlug()` instead — this is kept for backwards compatibility.
|
|
88
|
+
*/
|
|
89
|
+
export function sanitizeProjectName(name) {
|
|
90
|
+
return toSlug(name);
|
|
58
91
|
}
|
|
59
92
|
//# sourceMappingURL=validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,sBAAsB,MAAM,2BAA2B,CAAC;AAQ/D;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,SAAkB;IAClE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/utils/validator.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/package.json
CHANGED