create-react-starter-kit 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.
Files changed (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/bin/create-react-starter-kit.js +7 -0
  4. package/dist/cli-args.d.ts +15 -0
  5. package/dist/cli-args.d.ts.map +1 -0
  6. package/dist/cli-args.js +78 -0
  7. package/dist/cli-args.js.map +1 -0
  8. package/dist/generator/dependencies.d.ts +8 -0
  9. package/dist/generator/dependencies.d.ts.map +1 -0
  10. package/dist/generator/dependencies.js +356 -0
  11. package/dist/generator/dependencies.js.map +1 -0
  12. package/dist/generator/index.d.ts +5 -0
  13. package/dist/generator/index.d.ts.map +1 -0
  14. package/dist/generator/index.js +358 -0
  15. package/dist/generator/index.js.map +1 -0
  16. package/dist/index.d.ts +3 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +38 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/prompts/index.d.ts +3 -0
  21. package/dist/prompts/index.d.ts.map +1 -0
  22. package/dist/prompts/index.js +267 -0
  23. package/dist/prompts/index.js.map +1 -0
  24. package/dist/templates/.env.example.ejs +21 -0
  25. package/dist/templates/.husky/commit-msg +2 -0
  26. package/dist/templates/.husky/pre-commit +2 -0
  27. package/dist/templates/README.md.ejs +169 -0
  28. package/dist/templates/__js__/jsconfig.json +9 -0
  29. package/dist/templates/__ts__/src/vite-env.d.ts +16 -0
  30. package/dist/templates/__ts__/tsconfig.json +24 -0
  31. package/dist/templates/__when_buildTool_esbuild__/scripts/esbuild.build.mjs.ejs +23 -0
  32. package/dist/templates/__when_buildTool_esbuild__/scripts/esbuild.dev.mjs.ejs +48 -0
  33. package/dist/templates/__when_buildTool_parcel__/.parcelrc +9 -0
  34. package/dist/templates/__when_buildTool_rollup__/rollup.config.js.ejs +33 -0
  35. package/dist/templates/__when_buildTool_rspack__/rspack.config.js.ejs +36 -0
  36. package/dist/templates/__when_buildTool_vite__/vite.config.ts.ejs +37 -0
  37. package/dist/templates/__when_buildTool_webpack__/webpack.config.js.ejs +68 -0
  38. package/dist/templates/__when_e2eTesting_cypress__/cypress/e2e/home.cy.ts.ejs +6 -0
  39. package/dist/templates/__when_e2eTesting_cypress__/cypress.config.ts.ejs +8 -0
  40. package/dist/templates/__when_e2eTesting_playwright__/playwright.config.ts.ejs +16 -0
  41. package/dist/templates/__when_e2eTesting_playwright__/tests/e2e/home.spec.ts.ejs +6 -0
  42. package/dist/templates/__when_formatting_prettier__/.prettierrc +7 -0
  43. package/dist/templates/__when_formatting_stylelint__/.stylelintrc.json +3 -0
  44. package/dist/templates/__when_linting_biome__/biome.json +19 -0
  45. package/dist/templates/__when_linting_eslint__/eslint.config.js.ejs +42 -0
  46. package/dist/templates/__when_serverState_rtk-query__/src/store/postsApi.ts.ejs +19 -0
  47. package/dist/templates/__when_stateManagement_context__/src/store/context.tsx.ejs +57 -0
  48. package/dist/templates/__when_styling_tailwind__/postcss.config.js +6 -0
  49. package/dist/templates/__when_styling_tailwind__/tailwind.config.js.ejs +23 -0
  50. package/dist/templates/__when_unitTesting_jest__/jest.config.json.ejs +11 -0
  51. package/dist/templates/__when_unitTesting_jest__/tests/App.test.tsx.ejs +13 -0
  52. package/dist/templates/__when_unitTesting_jest__/tests/setup.ts.ejs +1 -0
  53. package/dist/templates/__when_unitTesting_jest__/tests/styleMock.ts.ejs +1 -0
  54. package/dist/templates/__when_unitTesting_rtl__/tests/App.test.tsx.ejs +13 -0
  55. package/dist/templates/__when_unitTesting_vitest__/tests/App.test.tsx.ejs +16 -0
  56. package/dist/templates/__when_unitTesting_vitest__/tests/setup.ts.ejs +1 -0
  57. package/dist/templates/__when_visualTesting_storybook__/.storybook/main.js.ejs +11 -0
  58. package/dist/templates/__when_visualTesting_storybook__/.storybook/preview.js +8 -0
  59. package/dist/templates/__when_visualTesting_storybook__/src/components/ui/UiButton.stories.tsx.ejs +15 -0
  60. package/dist/templates/commitlint.config.js +3 -0
  61. package/dist/templates/docs/architecture.md.ejs +74 -0
  62. package/dist/templates/docs/best-practices.md.ejs +56 -0
  63. package/dist/templates/docs/examples/README.md.ejs +14 -0
  64. package/dist/templates/docs/examples/api.md.ejs +17 -0
  65. package/dist/templates/docs/examples/data-fetching.md.ejs +18 -0
  66. package/dist/templates/docs/examples/forms.md.ejs +18 -0
  67. package/dist/templates/docs/examples/state.md.ejs +17 -0
  68. package/dist/templates/docs/examples/styling.md.ejs +23 -0
  69. package/dist/templates/docs/examples/testing.md.ejs +27 -0
  70. package/dist/templates/docs/getting-started.md.ejs +55 -0
  71. package/dist/templates/docs/selected-stack.md.ejs +55 -0
  72. package/dist/templates/index.html.ejs +19 -0
  73. package/dist/templates/public/vite.svg +4 -0
  74. package/dist/templates/src/app/App.tsx.ejs +71 -0
  75. package/dist/templates/src/app/providers.tsx.ejs +93 -0
  76. package/dist/templates/src/assets/.gitkeep +0 -0
  77. package/dist/templates/src/components/StackBadge.tsx.ejs +15 -0
  78. package/dist/templates/src/components/layout/AppLayout.tsx.ejs +64 -0
  79. package/dist/templates/src/components/ui/Toast.tsx.ejs +61 -0
  80. package/dist/templates/src/components/ui/UiButton.tsx.ejs +168 -0
  81. package/dist/templates/src/config/env.ts.ejs +18 -0
  82. package/dist/templates/src/features/counter/CounterPanel.tsx.ejs +66 -0
  83. package/dist/templates/src/features/feedback/FeedbackForm.tsx.ejs +373 -0
  84. package/dist/templates/src/features/posts/PostsPanel.tsx.ejs +91 -0
  85. package/dist/templates/src/hooks/useMounted.ts.ejs +15 -0
  86. package/dist/templates/src/lib/cn.ts.ejs +12 -0
  87. package/dist/templates/src/lib/monitoring.ts.ejs +66 -0
  88. package/dist/templates/src/lib/validation.ts.ejs +81 -0
  89. package/dist/templates/src/main.tsx.ejs +22 -0
  90. package/dist/templates/src/routes/AboutPage.tsx.ejs +30 -0
  91. package/dist/templates/src/routes/HomePage.tsx.ejs +47 -0
  92. package/dist/templates/src/services/api.ts.ejs +84 -0
  93. package/dist/templates/src/store/index.ts.ejs +80 -0
  94. package/dist/templates/src/styles/global.css.ejs +457 -0
  95. package/dist/templates/src/types/index.ts.ejs +7 -0
  96. package/dist/templates/src/utils/format.ts.ejs +3 -0
  97. package/dist/types.d.ts +46 -0
  98. package/dist/types.d.ts.map +1 -0
  99. package/dist/types.js +2 -0
  100. package/dist/types.js.map +1 -0
  101. package/dist/utils/logger.d.ts +12 -0
  102. package/dist/utils/logger.d.ts.map +1 -0
  103. package/dist/utils/logger.js +31 -0
  104. package/dist/utils/logger.js.map +1 -0
  105. package/dist/utils/validate.d.ts +3 -0
  106. package/dist/utils/validate.d.ts.map +1 -0
  107. package/dist/utils/validate.js +24 -0
  108. package/dist/utils/validate.js.map +1 -0
  109. package/package.json +62 -0
  110. package/templates/.env.example.ejs +21 -0
  111. package/templates/.husky/commit-msg +2 -0
  112. package/templates/.husky/pre-commit +2 -0
  113. package/templates/README.md.ejs +169 -0
  114. package/templates/__js__/jsconfig.json +9 -0
  115. package/templates/__ts__/src/vite-env.d.ts +16 -0
  116. package/templates/__ts__/tsconfig.json +24 -0
  117. package/templates/__when_buildTool_esbuild__/scripts/esbuild.build.mjs.ejs +23 -0
  118. package/templates/__when_buildTool_esbuild__/scripts/esbuild.dev.mjs.ejs +48 -0
  119. package/templates/__when_buildTool_parcel__/.parcelrc +9 -0
  120. package/templates/__when_buildTool_rollup__/rollup.config.js.ejs +33 -0
  121. package/templates/__when_buildTool_rspack__/rspack.config.js.ejs +36 -0
  122. package/templates/__when_buildTool_vite__/vite.config.ts.ejs +37 -0
  123. package/templates/__when_buildTool_webpack__/webpack.config.js.ejs +68 -0
  124. package/templates/__when_e2eTesting_cypress__/cypress/e2e/home.cy.ts.ejs +6 -0
  125. package/templates/__when_e2eTesting_cypress__/cypress.config.ts.ejs +8 -0
  126. package/templates/__when_e2eTesting_playwright__/playwright.config.ts.ejs +16 -0
  127. package/templates/__when_e2eTesting_playwright__/tests/e2e/home.spec.ts.ejs +6 -0
  128. package/templates/__when_formatting_prettier__/.prettierrc +7 -0
  129. package/templates/__when_formatting_stylelint__/.stylelintrc.json +3 -0
  130. package/templates/__when_linting_biome__/biome.json +19 -0
  131. package/templates/__when_linting_eslint__/eslint.config.js.ejs +42 -0
  132. package/templates/__when_serverState_rtk-query__/src/store/postsApi.ts.ejs +19 -0
  133. package/templates/__when_stateManagement_context__/src/store/context.tsx.ejs +57 -0
  134. package/templates/__when_styling_tailwind__/postcss.config.js +6 -0
  135. package/templates/__when_styling_tailwind__/tailwind.config.js.ejs +23 -0
  136. package/templates/__when_unitTesting_jest__/jest.config.json.ejs +11 -0
  137. package/templates/__when_unitTesting_jest__/tests/App.test.tsx.ejs +13 -0
  138. package/templates/__when_unitTesting_jest__/tests/setup.ts.ejs +1 -0
  139. package/templates/__when_unitTesting_jest__/tests/styleMock.ts.ejs +1 -0
  140. package/templates/__when_unitTesting_rtl__/tests/App.test.tsx.ejs +13 -0
  141. package/templates/__when_unitTesting_vitest__/tests/App.test.tsx.ejs +16 -0
  142. package/templates/__when_unitTesting_vitest__/tests/setup.ts.ejs +1 -0
  143. package/templates/__when_visualTesting_storybook__/.storybook/main.js.ejs +11 -0
  144. package/templates/__when_visualTesting_storybook__/.storybook/preview.js +8 -0
  145. package/templates/__when_visualTesting_storybook__/src/components/ui/UiButton.stories.tsx.ejs +15 -0
  146. package/templates/commitlint.config.js +3 -0
  147. package/templates/docs/architecture.md.ejs +74 -0
  148. package/templates/docs/best-practices.md.ejs +56 -0
  149. package/templates/docs/examples/README.md.ejs +14 -0
  150. package/templates/docs/examples/api.md.ejs +17 -0
  151. package/templates/docs/examples/data-fetching.md.ejs +18 -0
  152. package/templates/docs/examples/forms.md.ejs +18 -0
  153. package/templates/docs/examples/state.md.ejs +17 -0
  154. package/templates/docs/examples/styling.md.ejs +23 -0
  155. package/templates/docs/examples/testing.md.ejs +27 -0
  156. package/templates/docs/getting-started.md.ejs +55 -0
  157. package/templates/docs/selected-stack.md.ejs +55 -0
  158. package/templates/index.html.ejs +19 -0
  159. package/templates/public/vite.svg +4 -0
  160. package/templates/src/app/App.tsx.ejs +71 -0
  161. package/templates/src/app/providers.tsx.ejs +93 -0
  162. package/templates/src/assets/.gitkeep +0 -0
  163. package/templates/src/components/StackBadge.tsx.ejs +15 -0
  164. package/templates/src/components/layout/AppLayout.tsx.ejs +64 -0
  165. package/templates/src/components/ui/Toast.tsx.ejs +61 -0
  166. package/templates/src/components/ui/UiButton.tsx.ejs +168 -0
  167. package/templates/src/config/env.ts.ejs +18 -0
  168. package/templates/src/features/counter/CounterPanel.tsx.ejs +66 -0
  169. package/templates/src/features/feedback/FeedbackForm.tsx.ejs +373 -0
  170. package/templates/src/features/posts/PostsPanel.tsx.ejs +91 -0
  171. package/templates/src/hooks/useMounted.ts.ejs +15 -0
  172. package/templates/src/lib/cn.ts.ejs +12 -0
  173. package/templates/src/lib/monitoring.ts.ejs +66 -0
  174. package/templates/src/lib/validation.ts.ejs +81 -0
  175. package/templates/src/main.tsx.ejs +22 -0
  176. package/templates/src/routes/AboutPage.tsx.ejs +30 -0
  177. package/templates/src/routes/HomePage.tsx.ejs +47 -0
  178. package/templates/src/services/api.ts.ejs +84 -0
  179. package/templates/src/store/index.ts.ejs +80 -0
  180. package/templates/src/styles/global.css.ejs +457 -0
  181. package/templates/src/types/index.ts.ejs +7 -0
  182. package/templates/src/utils/format.ts.ejs +3 -0
@@ -0,0 +1,358 @@
1
+ import path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import fs from 'fs-extra';
4
+ import ejs from 'ejs';
5
+ import { execa } from 'execa';
6
+ import { resolveDependencies, buildScripts } from './dependencies.js';
7
+ import { createSpinner, logger } from '../utils/logger.js';
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+ function getTemplatesRoot() {
10
+ // dist/generator -> ../../templates or ../templates depending on layout
11
+ const candidates = [
12
+ path.resolve(__dirname, '../../templates'),
13
+ path.resolve(__dirname, '../templates'),
14
+ ];
15
+ for (const candidate of candidates) {
16
+ if (fs.existsSync(candidate)) {
17
+ return candidate;
18
+ }
19
+ }
20
+ return candidates[0];
21
+ }
22
+ function createContext(answers) {
23
+ const isTypeScript = answers.language === 'typescript';
24
+ return {
25
+ ...answers,
26
+ isTypeScript,
27
+ ext: isTypeScript ? 'ts' : 'js',
28
+ jsxExt: isTypeScript ? 'tsx' : 'jsx',
29
+ year: new Date().getFullYear(),
30
+ };
31
+ }
32
+ function labelMap() {
33
+ return {
34
+ buildTool: {
35
+ vite: 'Vite',
36
+ webpack: 'Webpack',
37
+ rspack: 'Rspack',
38
+ parcel: 'Parcel',
39
+ esbuild: 'esbuild',
40
+ rollup: 'Rollup',
41
+ },
42
+ language: {
43
+ javascript: 'JavaScript',
44
+ typescript: 'TypeScript',
45
+ },
46
+ router: {
47
+ 'react-router': 'React Router',
48
+ 'tanstack-router': 'TanStack Router',
49
+ },
50
+ stateManagement: {
51
+ redux: 'Redux Toolkit',
52
+ zustand: 'Zustand',
53
+ jotai: 'Jotai',
54
+ context: 'Context API + useReducer',
55
+ none: 'None',
56
+ },
57
+ serverState: {
58
+ 'tanstack-query': 'TanStack Query',
59
+ swr: 'SWR',
60
+ 'rtk-query': 'RTK Query',
61
+ none: 'None',
62
+ },
63
+ forms: {
64
+ 'react-hook-form': 'React Hook Form',
65
+ formik: 'Formik',
66
+ 'tanstack-form': 'TanStack Form',
67
+ none: 'None',
68
+ },
69
+ validation: {
70
+ zod: 'Zod',
71
+ yup: 'Yup',
72
+ valibot: 'Valibot',
73
+ joi: 'Joi',
74
+ none: 'None',
75
+ },
76
+ styling: {
77
+ tailwind: 'Tailwind CSS',
78
+ 'css-modules': 'CSS Modules',
79
+ 'styled-components': 'Styled Components',
80
+ sass: 'Sass/SCSS',
81
+ },
82
+ uiLibrary: {
83
+ mui: 'MUI',
84
+ antd: 'Ant Design',
85
+ chakra: 'Chakra UI',
86
+ shadcn: 'shadcn/ui',
87
+ 'headless-ui': 'Headless UI',
88
+ none: 'None',
89
+ },
90
+ unitTesting: {
91
+ vitest: 'Vitest',
92
+ jest: 'Jest',
93
+ rtl: 'React Testing Library',
94
+ none: 'None',
95
+ },
96
+ e2eTesting: {
97
+ playwright: 'Playwright',
98
+ cypress: 'Cypress',
99
+ none: 'None',
100
+ },
101
+ visualTesting: {
102
+ storybook: 'Storybook',
103
+ chromatic: 'Chromatic',
104
+ none: 'None',
105
+ },
106
+ linting: {
107
+ eslint: 'ESLint',
108
+ biome: 'Biome',
109
+ },
110
+ formatting: {
111
+ prettier: 'Prettier',
112
+ stylelint: 'Stylelint',
113
+ },
114
+ apiLayer: {
115
+ axios: 'REST via Axios',
116
+ fetch: 'REST via Fetch',
117
+ },
118
+ packageManager: {
119
+ pnpm: 'pnpm',
120
+ yarn: 'yarn',
121
+ npm: 'npm',
122
+ },
123
+ errorTracking: {
124
+ sentry: 'Sentry',
125
+ bugsnag: 'Bugsnag',
126
+ logrocket: 'LogRocket',
127
+ datadog: 'Datadog RUM',
128
+ none: 'None',
129
+ },
130
+ };
131
+ }
132
+ export function getStackLabels(answers) {
133
+ const map = labelMap();
134
+ return {
135
+ buildTool: map.buildTool[answers.buildTool],
136
+ language: map.language[answers.language],
137
+ router: map.router[answers.router],
138
+ stateManagement: map.stateManagement[answers.stateManagement],
139
+ serverState: map.serverState[answers.serverState],
140
+ forms: map.forms[answers.forms],
141
+ validation: map.validation[answers.validation],
142
+ styling: map.styling[answers.styling],
143
+ uiLibrary: map.uiLibrary[answers.uiLibrary],
144
+ unitTesting: map.unitTesting[answers.unitTesting],
145
+ e2eTesting: map.e2eTesting[answers.e2eTesting],
146
+ visualTesting: map.visualTesting[answers.visualTesting],
147
+ linting: map.linting[answers.linting],
148
+ formatting: map.formatting[answers.formatting],
149
+ apiLayer: map.apiLayer[answers.apiLayer],
150
+ packageManager: map.packageManager[answers.packageManager],
151
+ errorTracking: map.errorTracking[answers.errorTracking],
152
+ gitHooks: 'Husky + lint-staged + commitlint',
153
+ folderPattern: 'Feature-based (domain-driven)',
154
+ };
155
+ }
156
+ async function renderTemplate(templatePath, context) {
157
+ const content = await fs.readFile(templatePath, 'utf8');
158
+ return ejs.render(content, context, { async: false });
159
+ }
160
+ async function walkTemplates(dir, baseDir) {
161
+ const results = [];
162
+ if (!(await fs.pathExists(dir))) {
163
+ return results;
164
+ }
165
+ const entries = await fs.readdir(dir, { withFileTypes: true });
166
+ for (const entry of entries) {
167
+ const absolute = path.join(dir, entry.name);
168
+ if (entry.isDirectory()) {
169
+ results.push(...(await walkTemplates(absolute, baseDir)));
170
+ }
171
+ else {
172
+ results.push({
173
+ absolute,
174
+ relative: path.relative(baseDir, absolute),
175
+ });
176
+ }
177
+ }
178
+ return results;
179
+ }
180
+ function shouldIncludeTemplate(relativePath, answers) {
181
+ const normalized = relativePath.replace(/\\/g, '/');
182
+ // Conditional template folders by convention: __when_<key>_<value>__
183
+ const whenMatch = normalized.match(/__when_([a-zA-Z0-9]+)_([a-zA-Z0-9-]+)__/);
184
+ if (whenMatch) {
185
+ const [, key, value] = whenMatch;
186
+ const answerValue = answers[key];
187
+ // shadcn/ui depends on Tailwind utilities even if another styling option was picked
188
+ if (key === 'styling' &&
189
+ value === 'tailwind' &&
190
+ answers.uiLibrary === 'shadcn' &&
191
+ answerValue !== 'tailwind') {
192
+ return true;
193
+ }
194
+ if (answerValue !== value) {
195
+ return false;
196
+ }
197
+ }
198
+ // Language-specific templates
199
+ if (normalized.includes('__ts__/') && answers.language !== 'typescript') {
200
+ return false;
201
+ }
202
+ if (normalized.includes('__js__/') && answers.language !== 'javascript') {
203
+ return false;
204
+ }
205
+ return true;
206
+ }
207
+ function resolveOutputPath(relativePath, answers) {
208
+ let out = relativePath.replace(/\\/g, '/');
209
+ // Strip conditional markers from path
210
+ out = out.replace(/__when_[a-zA-Z0-9]+_[a-zA-Z0-9-]+__\//g, '');
211
+ out = out.replace(/__ts__\//g, '');
212
+ out = out.replace(/__js__\//g, '');
213
+ // Extension placeholders
214
+ out = out.replace(/\.tsx\.ejs$/, answers.language === 'typescript' ? '.tsx' : '.jsx');
215
+ out = out.replace(/\.ts\.ejs$/, answers.language === 'typescript' ? '.ts' : '.js');
216
+ out = out.replace(/\.jsx\.ejs$/, '.jsx');
217
+ out = out.replace(/\.js\.ejs$/, '.js');
218
+ out = out.replace(/\.ejs$/, '');
219
+ // Rename config files based on selections
220
+ if (out === 'vite.config.ts' && answers.buildTool !== 'vite') {
221
+ return '';
222
+ }
223
+ if (out === 'src/styles/global.css' &&
224
+ answers.styling === 'sass' &&
225
+ answers.uiLibrary !== 'shadcn') {
226
+ out = 'src/styles/global.scss';
227
+ }
228
+ return out;
229
+ }
230
+ export async function generateProject(answers) {
231
+ const spinner = createSpinner('Preparing project...');
232
+ spinner.start();
233
+ const context = createContext(answers);
234
+ const stackLabels = getStackLabels(answers);
235
+ const fullContext = { ...context, stackLabels };
236
+ await fs.emptyDir(answers.targetDir);
237
+ const templatesRoot = getTemplatesRoot();
238
+ const files = await walkTemplates(templatesRoot, templatesRoot);
239
+ spinner.text = 'Rendering templates...';
240
+ for (const file of files) {
241
+ if (!shouldIncludeTemplate(file.relative, answers)) {
242
+ continue;
243
+ }
244
+ const outputRelative = resolveOutputPath(file.relative, answers);
245
+ if (!outputRelative) {
246
+ continue;
247
+ }
248
+ // Skip build-tool specific configs that don't match
249
+ if (outputRelative.startsWith('configs/') ||
250
+ file.relative.includes(`__when_buildTool_`) === false) {
251
+ // handled by when markers
252
+ }
253
+ const isEjs = file.relative.endsWith('.ejs');
254
+ const dest = path.join(answers.targetDir, outputRelative);
255
+ await fs.ensureDir(path.dirname(dest));
256
+ if (isEjs) {
257
+ const rendered = await renderTemplate(file.absolute, fullContext);
258
+ await fs.writeFile(dest, rendered, 'utf8');
259
+ }
260
+ else {
261
+ await fs.copy(file.absolute, dest);
262
+ }
263
+ }
264
+ // Generate package.json programmatically
265
+ spinner.text = 'Writing package.json...';
266
+ const { dependencies, devDependencies } = resolveDependencies(answers);
267
+ const scripts = buildScripts(answers);
268
+ const pkg = {
269
+ name: answers.projectName,
270
+ private: true,
271
+ version: '0.1.0',
272
+ type: 'module',
273
+ scripts,
274
+ dependencies,
275
+ devDependencies,
276
+ };
277
+ if (answers.packageManager === 'npm') {
278
+ pkg.workspaces = ['packages/*'];
279
+ }
280
+ if (answers.buildTool === 'parcel') {
281
+ pkg.alias = {
282
+ '@': './src',
283
+ };
284
+ }
285
+ pkg['lint-staged'] = {
286
+ [`*.{${answers.language === 'typescript' ? 'ts,tsx' : 'js,jsx'},css,md,json}`]: answers.formatting === 'prettier'
287
+ ? ['prettier --write']
288
+ : answers.linting === 'biome'
289
+ ? ['biome check --write']
290
+ : ['eslint --fix'],
291
+ };
292
+ await fs.writeJson(path.join(answers.targetDir, 'package.json'), pkg, {
293
+ spaces: 2,
294
+ });
295
+ // Scalable feature-based layout used across large production React apps
296
+ const dirs = [
297
+ 'src/app',
298
+ 'src/assets',
299
+ 'src/components/layout',
300
+ 'src/components/ui',
301
+ 'src/config',
302
+ 'src/features',
303
+ 'src/hooks',
304
+ 'src/lib',
305
+ 'src/routes',
306
+ 'src/services',
307
+ 'src/store',
308
+ 'src/styles',
309
+ 'src/types',
310
+ 'src/utils',
311
+ 'docs/examples',
312
+ 'tests',
313
+ 'public',
314
+ ];
315
+ for (const dir of dirs) {
316
+ await fs.ensureDir(path.join(answers.targetDir, dir));
317
+ }
318
+ spinner.succeed('Project files generated');
319
+ if (answers.installDependencies) {
320
+ const installSpinner = createSpinner(`Installing dependencies with ${answers.packageManager}...`);
321
+ installSpinner.start();
322
+ try {
323
+ const command = answers.packageManager === 'npm'
324
+ ? 'npm'
325
+ : answers.packageManager === 'yarn'
326
+ ? 'yarn'
327
+ : 'pnpm';
328
+ const args = answers.packageManager === 'yarn' ? [] : ['install'];
329
+ await execa(command, args.length ? args : ['install'], {
330
+ cwd: answers.targetDir,
331
+ stdio: 'pipe',
332
+ });
333
+ installSpinner.succeed('Dependencies installed');
334
+ }
335
+ catch {
336
+ installSpinner.warn(`Could not install with ${answers.packageManager}. Run install manually.`);
337
+ }
338
+ }
339
+ }
340
+ export function printSuccess(answers) {
341
+ const relative = path.relative(process.cwd(), answers.targetDir) || '.';
342
+ const pm = answers.packageManager;
343
+ const devCmd = pm === 'npm' ? 'npm run dev' : pm === 'yarn' ? 'yarn dev' : 'pnpm dev';
344
+ const installCmd = pm === 'npm' ? 'npm install' : pm === 'yarn' ? 'yarn' : 'pnpm install';
345
+ logger.blank();
346
+ logger.success(`Created ${answers.projectName} at ${relative}`);
347
+ logger.blank();
348
+ logger.info('Next steps:');
349
+ console.log(` cd ${relative}`);
350
+ if (!answers.installDependencies) {
351
+ console.log(` ${installCmd}`);
352
+ }
353
+ console.log(` ${devCmd}`);
354
+ logger.blank();
355
+ logger.dim('Documentation: docs/getting-started.md');
356
+ logger.blank();
357
+ }
358
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,gBAAgB;IACvB,wEAAwE;IACxE,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC;KACxC,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,aAAa,CAAC,OAAuB;IAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC;IACvD,OAAO;QACL,GAAG,OAAO;QACV,YAAY;QACZ,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAC/B,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;QACpC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ;IACf,OAAO;QACL,SAAS,EAAE;YACT,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,QAAQ;SACjB;QACD,QAAQ,EAAE;YACR,UAAU,EAAE,YAAY;YACxB,UAAU,EAAE,YAAY;SACzB;QACD,MAAM,EAAE;YACN,cAAc,EAAE,cAAc;YAC9B,iBAAiB,EAAE,iBAAiB;SACrC;QACD,eAAe,EAAE;YACf,KAAK,EAAE,eAAe;YACtB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,0BAA0B;YACnC,IAAI,EAAE,MAAM;SACb;QACD,WAAW,EAAE;YACX,gBAAgB,EAAE,gBAAgB;YAClC,GAAG,EAAE,KAAK;YACV,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,MAAM;SACb;QACD,KAAK,EAAE;YACL,iBAAiB,EAAE,iBAAiB;YACpC,MAAM,EAAE,QAAQ;YAChB,eAAe,EAAE,eAAe;YAChC,IAAI,EAAE,MAAM;SACb;QACD,UAAU,EAAE;YACV,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,KAAK;YACV,OAAO,EAAE,SAAS;YAClB,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,MAAM;SACb;QACD,OAAO,EAAE;YACP,QAAQ,EAAE,cAAc;YACxB,aAAa,EAAE,aAAa;YAC5B,mBAAmB,EAAE,mBAAmB;YACxC,IAAI,EAAE,WAAW;SAClB;QACD,SAAS,EAAE;YACT,GAAG,EAAE,KAAK;YACV,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,WAAW;YACnB,aAAa,EAAE,aAAa;YAC5B,IAAI,EAAE,MAAM;SACb;QACD,WAAW,EAAE;YACX,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,uBAAuB;YAC5B,IAAI,EAAE,MAAM;SACb;QACD,UAAU,EAAE;YACV,UAAU,EAAE,YAAY;YACxB,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,MAAM;SACb;QACD,aAAa,EAAE;YACb,SAAS,EAAE,WAAW;YACtB,SAAS,EAAE,WAAW;YACtB,IAAI,EAAE,MAAM;SACb;QACD,OAAO,EAAE;YACP,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,OAAO;SACf;QACD,UAAU,EAAE;YACV,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,WAAW;SACvB;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,gBAAgB;YACvB,KAAK,EAAE,gBAAgB;SACxB;QACD,cAAc,EAAE;YACd,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,KAAK;SACX;QACD,aAAa,EAAE;YACb,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,WAAW;YACtB,OAAO,EAAE,aAAa;YACtB,IAAI,EAAE,MAAM;SACb;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAuB;IACpD,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;IACvB,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC;QAC3C,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;QACxC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAClC,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,CAAC;QAC7D,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC;QACjD,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/B,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9C,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QACrC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC;QAC3C,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC;QACjD,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9C,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC;QACvD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QACrC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9C,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;QACxC,cAAc,EAAE,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC;QAC1D,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC;QACvD,QAAQ,EAAE,kCAAkC;QAC5C,aAAa,EAAE,+BAA+B;KAC/C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,YAAoB,EACpB,OAAkE;IAElE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,GAAW,EACX,OAAe;IAEf,MAAM,OAAO,GAA6C,EAAE,CAAC;IAC7D,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,QAAQ;gBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;aAC3C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,qBAAqB,CAC5B,YAAoB,EACpB,OAAuB;IAEvB,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEpD,qEAAqE;IACrE,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC9E,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC;QACjC,MAAM,WAAW,GAAG,OAAO,CAAC,GAA2B,CAAC,CAAC;QACzD,oFAAoF;QACpF,IACE,GAAG,KAAK,SAAS;YACjB,KAAK,KAAK,UAAU;YACpB,OAAO,CAAC,SAAS,KAAK,QAAQ;YAC9B,WAAW,KAAK,UAAU,EAC1B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CACxB,YAAoB,EACpB,OAAuB;IAEvB,IAAI,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE3C,sCAAsC;IACtC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;IAChE,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACnC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAEnC,yBAAyB;IACzB,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACzC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACvC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEhC,0CAA0C;IAC1C,IAAI,GAAG,KAAK,gBAAgB,IAAI,OAAO,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAC7D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IACE,GAAG,KAAK,uBAAuB;QAC/B,OAAO,CAAC,OAAO,KAAK,MAAM;QAC1B,OAAO,CAAC,SAAS,KAAK,QAAQ,EAC9B,CAAC;QACD,GAAG,GAAG,wBAAwB,CAAC;IACjC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAuB;IAC3D,MAAM,OAAO,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,CAAC;IAEhD,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAEhE,OAAO,CAAC,IAAI,GAAG,wBAAwB,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YACnD,SAAS;QACX,CAAC;QAED,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QAED,oDAAoD;QACpD,IACE,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,KAAK,KAAK,EACrD,CAAC;YACD,0BAA0B;QAC5B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAE1D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAClE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,OAAO,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACzC,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtC,MAAM,GAAG,GAA4B;QACnC,IAAI,EAAE,OAAO,CAAC,WAAW;QACzB,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO;QACP,YAAY;QACZ,eAAe;KAChB,CAAC;IAEF,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;QACrC,GAAG,CAAC,UAAU,GAAG,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACnC,GAAG,CAAC,KAAK,GAAG;YACV,GAAG,EAAE,OAAO;SACb,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,aAAa,CAAC,GAAG;QACnB,CAAC,MAAM,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,eAAe,CAAC,EAC5E,OAAO,CAAC,UAAU,KAAK,UAAU;YAC/B,CAAC,CAAC,CAAC,kBAAkB,CAAC;YACtB,CAAC,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO;gBAC3B,CAAC,CAAC,CAAC,qBAAqB,CAAC;gBACzB,CAAC,CAAC,CAAC,cAAc,CAAC;KACzB,CAAC;IAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,GAAG,EAAE;QACpE,MAAM,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,IAAI,GAAG;QACX,SAAS;QACT,YAAY;QACZ,uBAAuB;QACvB,mBAAmB;QACnB,YAAY;QACZ,cAAc;QACd,WAAW;QACX,SAAS;QACT,YAAY;QACZ,cAAc;QACd,WAAW;QACX,YAAY;QACZ,WAAW;QACX,WAAW;QACX,eAAe;QACf,OAAO;QACP,QAAQ;KACT,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,aAAa,CAClC,gCAAgC,OAAO,CAAC,cAAc,KAAK,CAC5D,CAAC;QACF,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,OAAO,GACX,OAAO,CAAC,cAAc,KAAK,KAAK;gBAC9B,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,OAAO,CAAC,cAAc,KAAK,MAAM;oBACjC,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,MAAM,CAAC;YACf,MAAM,IAAI,GACR,OAAO,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACvD,MAAM,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;gBACrD,GAAG,EAAE,OAAO,CAAC,SAAS;gBACtB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YACH,cAAc,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,cAAc,CAAC,IAAI,CACjB,0BAA0B,OAAO,CAAC,cAAc,yBAAyB,CAC1E,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAuB;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;IACxE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAClC,MAAM,MAAM,GACV,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IACzE,MAAM,UAAU,GACd,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;IAEzE,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,WAAW,OAAO,CAAC,WAAW,OAAO,QAAQ,EAAE,CAAC,CAAC;IAChE,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function run(argv?: string[]): Promise<void>;
2
+ export type { ProjectAnswers } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,wBAAsB,GAAG,CAAC,IAAI,WAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC5D;AAED,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,38 @@
1
+ import { collectAnswers } from './prompts/index.js';
2
+ import { generateProject, printSuccess } from './generator/index.js';
3
+ import { logger } from './utils/logger.js';
4
+ import { buildDefaultAnswers, parseArgs, printHelp } from './cli-args.js';
5
+ export async function run(argv = process.argv) {
6
+ const options = parseArgs(argv);
7
+ if (options.help) {
8
+ printHelp();
9
+ return;
10
+ }
11
+ try {
12
+ const answers = options.defaults
13
+ ? buildDefaultAnswers({
14
+ name: options.name,
15
+ dir: options.dir,
16
+ skipInstall: options.skipInstall,
17
+ })
18
+ : await collectAnswers();
19
+ if (options.defaults && options.skipInstall) {
20
+ answers.installDependencies = false;
21
+ }
22
+ if (options.defaults) {
23
+ logger.title('🚀 create-react-starter-kit');
24
+ logger.dim(`Using defaults for "${answers.projectName}" → ${answers.targetDir}\n`);
25
+ }
26
+ await generateProject(answers);
27
+ printSuccess(answers);
28
+ }
29
+ catch (error) {
30
+ if (error instanceof Error && error.message.startsWith('Aborted:')) {
31
+ logger.warn(error.message);
32
+ process.exitCode = 1;
33
+ return;
34
+ }
35
+ throw error;
36
+ }
37
+ }
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IAC3C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ;YAC9B,CAAC,CAAC,mBAAmB,CAAC;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC;YACJ,CAAC,CAAC,MAAM,cAAc,EAAE,CAAC;QAE3B,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,CACR,uBAAuB,OAAO,CAAC,WAAW,OAAO,OAAO,CAAC,SAAS,IAAI,CACvE,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/B,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACnE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ProjectAnswers } from '../types.js';
2
+ export declare function collectAnswers(): Promise<ProjectAnswers>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,wBAAsB,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,CAkR9D"}