create-nexo 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 (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/api/index.d.ts +196 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +390 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/bin/nexo.d.ts +3 -0
  8. package/dist/bin/nexo.d.ts.map +1 -0
  9. package/dist/bin/nexo.js +427 -0
  10. package/dist/bin/nexo.js.map +1 -0
  11. package/dist/configurators/core/framework.d.ts +3 -0
  12. package/dist/configurators/core/framework.d.ts.map +1 -0
  13. package/dist/configurators/core/framework.js +56 -0
  14. package/dist/configurators/core/framework.js.map +1 -0
  15. package/dist/configurators/core/index.d.ts +4 -0
  16. package/dist/configurators/core/index.d.ts.map +1 -0
  17. package/dist/configurators/core/index.js +4 -0
  18. package/dist/configurators/core/index.js.map +1 -0
  19. package/dist/configurators/core/language.d.ts +3 -0
  20. package/dist/configurators/core/language.d.ts.map +1 -0
  21. package/dist/configurators/core/language.js +59 -0
  22. package/dist/configurators/core/language.js.map +1 -0
  23. package/dist/configurators/core/variant.d.ts +3 -0
  24. package/dist/configurators/core/variant.d.ts.map +1 -0
  25. package/dist/configurators/core/variant.js +22 -0
  26. package/dist/configurators/core/variant.js.map +1 -0
  27. package/dist/configurators/index.d.ts +5 -0
  28. package/dist/configurators/index.d.ts.map +1 -0
  29. package/dist/configurators/index.js +6 -0
  30. package/dist/configurators/index.js.map +1 -0
  31. package/dist/configurators/project/auth.d.ts +3 -0
  32. package/dist/configurators/project/auth.d.ts.map +1 -0
  33. package/dist/configurators/project/auth.js +82 -0
  34. package/dist/configurators/project/auth.js.map +1 -0
  35. package/dist/configurators/project/cicd.d.ts +30 -0
  36. package/dist/configurators/project/cicd.d.ts.map +1 -0
  37. package/dist/configurators/project/cicd.js +289 -0
  38. package/dist/configurators/project/cicd.js.map +1 -0
  39. package/dist/configurators/project/i18n.d.ts +3 -0
  40. package/dist/configurators/project/i18n.d.ts.map +1 -0
  41. package/dist/configurators/project/i18n.js +67 -0
  42. package/dist/configurators/project/i18n.js.map +1 -0
  43. package/dist/configurators/project/index.d.ts +6 -0
  44. package/dist/configurators/project/index.d.ts.map +1 -0
  45. package/dist/configurators/project/index.js +6 -0
  46. package/dist/configurators/project/index.js.map +1 -0
  47. package/dist/configurators/project/mandatory.d.ts +3 -0
  48. package/dist/configurators/project/mandatory.d.ts.map +1 -0
  49. package/dist/configurators/project/mandatory.js +167 -0
  50. package/dist/configurators/project/mandatory.js.map +1 -0
  51. package/dist/configurators/project/structure.d.ts +3 -0
  52. package/dist/configurators/project/structure.d.ts.map +1 -0
  53. package/dist/configurators/project/structure.js +34 -0
  54. package/dist/configurators/project/structure.js.map +1 -0
  55. package/dist/configurators/state/dataFetching.d.ts +3 -0
  56. package/dist/configurators/state/dataFetching.d.ts.map +1 -0
  57. package/dist/configurators/state/dataFetching.js +23 -0
  58. package/dist/configurators/state/dataFetching.js.map +1 -0
  59. package/dist/configurators/state/forms.d.ts +3 -0
  60. package/dist/configurators/state/forms.d.ts.map +1 -0
  61. package/dist/configurators/state/forms.js +35 -0
  62. package/dist/configurators/state/forms.js.map +1 -0
  63. package/dist/configurators/state/index.d.ts +5 -0
  64. package/dist/configurators/state/index.d.ts.map +1 -0
  65. package/dist/configurators/state/index.js +5 -0
  66. package/dist/configurators/state/index.js.map +1 -0
  67. package/dist/configurators/state/routing.d.ts +3 -0
  68. package/dist/configurators/state/routing.d.ts.map +1 -0
  69. package/dist/configurators/state/routing.js +23 -0
  70. package/dist/configurators/state/routing.js.map +1 -0
  71. package/dist/configurators/state/state.d.ts +3 -0
  72. package/dist/configurators/state/state.d.ts.map +1 -0
  73. package/dist/configurators/state/state.js +91 -0
  74. package/dist/configurators/state/state.js.map +1 -0
  75. package/dist/configurators/styling/icons.d.ts +3 -0
  76. package/dist/configurators/styling/icons.d.ts.map +1 -0
  77. package/dist/configurators/styling/icons.js +27 -0
  78. package/dist/configurators/styling/icons.js.map +1 -0
  79. package/dist/configurators/styling/index.d.ts +4 -0
  80. package/dist/configurators/styling/index.d.ts.map +1 -0
  81. package/dist/configurators/styling/index.js +4 -0
  82. package/dist/configurators/styling/index.js.map +1 -0
  83. package/dist/configurators/styling/styling.d.ts +3 -0
  84. package/dist/configurators/styling/styling.d.ts.map +1 -0
  85. package/dist/configurators/styling/styling.js +62 -0
  86. package/dist/configurators/styling/styling.js.map +1 -0
  87. package/dist/configurators/styling/ui.d.ts +3 -0
  88. package/dist/configurators/styling/ui.d.ts.map +1 -0
  89. package/dist/configurators/styling/ui.js +188 -0
  90. package/dist/configurators/styling/ui.js.map +1 -0
  91. package/dist/core/index.d.ts +7 -0
  92. package/dist/core/index.d.ts.map +1 -0
  93. package/dist/core/index.js +7 -0
  94. package/dist/core/index.js.map +1 -0
  95. package/dist/core/lazy-loader.d.ts +57 -0
  96. package/dist/core/lazy-loader.d.ts.map +1 -0
  97. package/dist/core/lazy-loader.js +231 -0
  98. package/dist/core/lazy-loader.js.map +1 -0
  99. package/dist/core/parallel.d.ts +29 -0
  100. package/dist/core/parallel.d.ts.map +1 -0
  101. package/dist/core/parallel.js +127 -0
  102. package/dist/core/parallel.js.map +1 -0
  103. package/dist/core/presets.d.ts +10 -0
  104. package/dist/core/presets.d.ts.map +1 -0
  105. package/dist/core/presets.js +73 -0
  106. package/dist/core/presets.js.map +1 -0
  107. package/dist/core/prompts/core.d.ts +18 -0
  108. package/dist/core/prompts/core.d.ts.map +1 -0
  109. package/dist/core/prompts/core.js +420 -0
  110. package/dist/core/prompts/core.js.map +1 -0
  111. package/dist/core/prompts/filter.d.ts +34 -0
  112. package/dist/core/prompts/filter.d.ts.map +1 -0
  113. package/dist/core/prompts/filter.js +48 -0
  114. package/dist/core/prompts/filter.js.map +1 -0
  115. package/dist/core/prompts/index.d.ts +10 -0
  116. package/dist/core/prompts/index.d.ts.map +1 -0
  117. package/dist/core/prompts/index.js +16 -0
  118. package/dist/core/prompts/index.js.map +1 -0
  119. package/dist/core/prompts/optional.d.ts +15 -0
  120. package/dist/core/prompts/optional.d.ts.map +1 -0
  121. package/dist/core/prompts/optional.js +228 -0
  122. package/dist/core/prompts/optional.js.map +1 -0
  123. package/dist/core/prompts/utils.d.ts +37 -0
  124. package/dist/core/prompts/utils.d.ts.map +1 -0
  125. package/dist/core/prompts/utils.js +72 -0
  126. package/dist/core/prompts/utils.js.map +1 -0
  127. package/dist/core/prompts.d.ts +6 -0
  128. package/dist/core/prompts.d.ts.map +1 -0
  129. package/dist/core/prompts.js +6 -0
  130. package/dist/core/prompts.js.map +1 -0
  131. package/dist/core/setup.d.ts +28 -0
  132. package/dist/core/setup.d.ts.map +1 -0
  133. package/dist/core/setup.js +96 -0
  134. package/dist/core/setup.js.map +1 -0
  135. package/dist/core/wizard.d.ts +39 -0
  136. package/dist/core/wizard.d.ts.map +1 -0
  137. package/dist/core/wizard.js +259 -0
  138. package/dist/core/wizard.js.map +1 -0
  139. package/dist/errors/index.d.ts +67 -0
  140. package/dist/errors/index.d.ts.map +1 -0
  141. package/dist/errors/index.js +253 -0
  142. package/dist/errors/index.js.map +1 -0
  143. package/dist/errors/messages.d.ts +56 -0
  144. package/dist/errors/messages.d.ts.map +1 -0
  145. package/dist/errors/messages.js +234 -0
  146. package/dist/errors/messages.js.map +1 -0
  147. package/dist/generators/index.d.ts +86 -0
  148. package/dist/generators/index.d.ts.map +1 -0
  149. package/dist/generators/index.js +441 -0
  150. package/dist/generators/index.js.map +1 -0
  151. package/dist/index.d.ts +16 -0
  152. package/dist/index.d.ts.map +1 -0
  153. package/dist/index.js +17 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/plugins/index.d.ts +48 -0
  156. package/dist/plugins/index.d.ts.map +1 -0
  157. package/dist/plugins/index.js +49 -0
  158. package/dist/plugins/index.js.map +1 -0
  159. package/dist/plugins/loader.d.ts +38 -0
  160. package/dist/plugins/loader.d.ts.map +1 -0
  161. package/dist/plugins/loader.js +229 -0
  162. package/dist/plugins/loader.js.map +1 -0
  163. package/dist/plugins/manager.d.ts +32 -0
  164. package/dist/plugins/manager.d.ts.map +1 -0
  165. package/dist/plugins/manager.js +220 -0
  166. package/dist/plugins/manager.js.map +1 -0
  167. package/dist/plugins/types.d.ts +186 -0
  168. package/dist/plugins/types.d.ts.map +1 -0
  169. package/dist/plugins/types.js +5 -0
  170. package/dist/plugins/types.js.map +1 -0
  171. package/dist/security/index.d.ts +59 -0
  172. package/dist/security/index.d.ts.map +1 -0
  173. package/dist/security/index.js +230 -0
  174. package/dist/security/index.js.map +1 -0
  175. package/dist/templates/entry.d.ts +9 -0
  176. package/dist/templates/entry.d.ts.map +1 -0
  177. package/dist/templates/entry.js +24 -0
  178. package/dist/templates/entry.js.map +1 -0
  179. package/dist/templates/index.d.ts +7 -0
  180. package/dist/templates/index.d.ts.map +1 -0
  181. package/dist/templates/index.js +10 -0
  182. package/dist/templates/index.js.map +1 -0
  183. package/dist/templates/main.d.ts +6 -0
  184. package/dist/templates/main.d.ts.map +1 -0
  185. package/dist/templates/main.js +72 -0
  186. package/dist/templates/main.js.map +1 -0
  187. package/dist/templates/readme.d.ts +3 -0
  188. package/dist/templates/readme.d.ts.map +1 -0
  189. package/dist/templates/readme.js +127 -0
  190. package/dist/templates/readme.js.map +1 -0
  191. package/dist/templates/styles.d.ts +6 -0
  192. package/dist/templates/styles.d.ts.map +1 -0
  193. package/dist/templates/styles.js +212 -0
  194. package/dist/templates/styles.js.map +1 -0
  195. package/dist/templates/welcome.d.ts +10 -0
  196. package/dist/templates/welcome.d.ts.map +1 -0
  197. package/dist/templates/welcome.js +322 -0
  198. package/dist/templates/welcome.js.map +1 -0
  199. package/dist/types/index.d.ts +46 -0
  200. package/dist/types/index.d.ts.map +1 -0
  201. package/dist/types/index.js +2 -0
  202. package/dist/types/index.js.map +1 -0
  203. package/dist/utils/batch-writer.d.ts +101 -0
  204. package/dist/utils/batch-writer.d.ts.map +1 -0
  205. package/dist/utils/batch-writer.js +232 -0
  206. package/dist/utils/batch-writer.js.map +1 -0
  207. package/dist/utils/cache.d.ts +60 -0
  208. package/dist/utils/cache.d.ts.map +1 -0
  209. package/dist/utils/cache.js +119 -0
  210. package/dist/utils/cache.js.map +1 -0
  211. package/dist/utils/fileTree.d.ts +3 -0
  212. package/dist/utils/fileTree.d.ts.map +1 -0
  213. package/dist/utils/fileTree.js +71 -0
  214. package/dist/utils/fileTree.js.map +1 -0
  215. package/dist/utils/fs.d.ts +22 -0
  216. package/dist/utils/fs.d.ts.map +1 -0
  217. package/dist/utils/fs.js +75 -0
  218. package/dist/utils/fs.js.map +1 -0
  219. package/dist/utils/helpers.d.ts +91 -0
  220. package/dist/utils/helpers.d.ts.map +1 -0
  221. package/dist/utils/helpers.js +192 -0
  222. package/dist/utils/helpers.js.map +1 -0
  223. package/dist/utils/index.d.ts +8 -0
  224. package/dist/utils/index.d.ts.map +1 -0
  225. package/dist/utils/index.js +8 -0
  226. package/dist/utils/index.js.map +1 -0
  227. package/dist/utils/progress.d.ts +85 -0
  228. package/dist/utils/progress.d.ts.map +1 -0
  229. package/dist/utils/progress.js +142 -0
  230. package/dist/utils/progress.js.map +1 -0
  231. package/dist/utils/spinner.d.ts +9 -0
  232. package/dist/utils/spinner.d.ts.map +1 -0
  233. package/dist/utils/spinner.js +56 -0
  234. package/dist/utils/spinner.js.map +1 -0
  235. package/dist/validation/index.d.ts +63 -0
  236. package/dist/validation/index.d.ts.map +1 -0
  237. package/dist/validation/index.js +262 -0
  238. package/dist/validation/index.js.map +1 -0
  239. package/package.json +71 -0
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Parallel execution engine for Configurators
3
+ */
4
+ import pc from 'picocolors';
5
+ /**
6
+ * Execute steps with dependency resolution and parallelism
7
+ */
8
+ export const executeParallel = async (steps, options = {}) => {
9
+ const { verbose = false, maxConcurrency = 4 } = options;
10
+ // Initialize state
11
+ const states = new Map();
12
+ for (const step of steps) {
13
+ states.set(step.name, { step, status: 'pending' });
14
+ }
15
+ const completed = new Set();
16
+ const running = new Set();
17
+ /**
18
+ * Check if a step's dependencies are satisfied
19
+ */
20
+ const canRun = (step) => {
21
+ if (!step.dependencies || step.dependencies.length === 0) {
22
+ return true;
23
+ }
24
+ return step.dependencies.every((dep) => completed.has(dep));
25
+ };
26
+ /**
27
+ * Get next steps that can be executed
28
+ */
29
+ const getReadySteps = () => {
30
+ const ready = [];
31
+ for (const [name, state] of states) {
32
+ if (state.status === 'pending' &&
33
+ canRun(state.step) &&
34
+ running.size < maxConcurrency) {
35
+ ready.push(state.step);
36
+ if (ready.length + running.size >= maxConcurrency)
37
+ break;
38
+ }
39
+ }
40
+ return ready;
41
+ };
42
+ /**
43
+ * Execute a single step
44
+ */
45
+ const runStep = async (step) => {
46
+ const state = states.get(step.name);
47
+ state.status = 'running';
48
+ running.add(step.name);
49
+ if (verbose) {
50
+ process.stdout.write(`${pc.cyan('●')} ${step.name}...\r`);
51
+ }
52
+ try {
53
+ await step.fn();
54
+ state.status = 'completed';
55
+ completed.add(step.name);
56
+ if (verbose) {
57
+ console.log(`${pc.green('✓')} ${step.name}`);
58
+ }
59
+ }
60
+ catch (error) {
61
+ state.status = 'failed';
62
+ state.error = error instanceof Error ? error : new Error(String(error));
63
+ if (verbose) {
64
+ console.log(`${pc.red('✗')} ${step.name}`);
65
+ }
66
+ throw state.error;
67
+ }
68
+ finally {
69
+ running.delete(step.name);
70
+ }
71
+ };
72
+ // Main execution loop
73
+ while (completed.size < steps.length) {
74
+ const ready = getReadySteps();
75
+ if (ready.length === 0 && running.size === 0) {
76
+ // Check for circular dependencies or failed steps
77
+ const pending = [...states.values()].filter((s) => s.status === 'pending');
78
+ if (pending.length > 0) {
79
+ const names = pending.map((s) => s.step.name).join(', ');
80
+ throw new Error(`Circular dependency or unmet dependencies detected: ${names}`);
81
+ }
82
+ break;
83
+ }
84
+ if (ready.length === 0) {
85
+ // Wait for running steps to complete
86
+ await new Promise((resolve) => setTimeout(resolve, 10));
87
+ continue;
88
+ }
89
+ // Execute ready steps in parallel
90
+ await Promise.all(ready.map(runStep));
91
+ }
92
+ };
93
+ /**
94
+ * Group steps by their dependency level for visualization
95
+ */
96
+ export const groupByLevel = (steps) => {
97
+ const levels = [];
98
+ const placed = new Set();
99
+ while (placed.size < steps.length) {
100
+ const level = [];
101
+ for (const step of steps) {
102
+ if (placed.has(step.name))
103
+ continue;
104
+ const deps = step.dependencies || [];
105
+ if (deps.every((d) => placed.has(d))) {
106
+ level.push(step);
107
+ }
108
+ }
109
+ if (level.length === 0) {
110
+ throw new Error('Circular dependency detected');
111
+ }
112
+ level.forEach((s) => placed.add(s.name));
113
+ levels.push(level);
114
+ }
115
+ return levels;
116
+ };
117
+ /**
118
+ * Estimate time savings from parallel execution
119
+ */
120
+ export const estimateTimeSavings = (steps, avgStepTime = 100) => {
121
+ const levels = groupByLevel(steps);
122
+ const sequential = steps.length * avgStepTime;
123
+ const parallel = levels.length * avgStepTime;
124
+ const savings = Math.round(((sequential - parallel) / sequential) * 100);
125
+ return { sequential, parallel, savings };
126
+ };
127
+ //# sourceMappingURL=parallel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel.js","sourceRoot":"","sources":["../../src/core/parallel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { UserSelections } from '../types/index.js';
2
+ export interface Preset {
3
+ name: string;
4
+ description: string;
5
+ selections: Partial<UserSelections>;
6
+ }
7
+ export declare const presets: Record<string, Preset>;
8
+ export declare const getPreset: (name: string) => Preset | undefined;
9
+ export declare const listPresets: () => string;
10
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/core/presets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACrC;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+D1C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,SAEjD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,MAI9B,CAAC"}
@@ -0,0 +1,73 @@
1
+ export const presets = {
2
+ saas: {
3
+ name: 'SaaS Application',
4
+ description: 'Full-stack SaaS with auth, dashboard, and API integration',
5
+ selections: {
6
+ variant: 'ts',
7
+ styling: 'tailwind',
8
+ ui: 'shadcn',
9
+ forms: 'rhf-zod',
10
+ state: 'zustand',
11
+ routing: 'react-router',
12
+ dataFetching: 'tanstack-query',
13
+ icons: 'lucide',
14
+ structure: 'feature-based',
15
+ i18n: 'i18next',
16
+ auth: 'jwt',
17
+ },
18
+ },
19
+ dashboard: {
20
+ name: 'Admin Dashboard',
21
+ description: 'Data-driven dashboard with charts and tables',
22
+ selections: {
23
+ variant: 'ts',
24
+ styling: 'tailwind',
25
+ ui: 'shadcn',
26
+ forms: 'rhf-zod',
27
+ state: 'redux',
28
+ routing: 'react-router',
29
+ dataFetching: 'tanstack-query',
30
+ icons: 'lucide',
31
+ structure: 'fsd',
32
+ },
33
+ },
34
+ landing: {
35
+ name: 'Landing Page',
36
+ description: 'Fast, SEO-optimized marketing page',
37
+ selections: {
38
+ variant: 'ts',
39
+ styling: 'tailwind',
40
+ ui: 'none',
41
+ forms: 'none',
42
+ state: 'none',
43
+ routing: 'none',
44
+ dataFetching: 'none',
45
+ icons: 'lucide',
46
+ structure: 'simple',
47
+ },
48
+ },
49
+ minimal: {
50
+ name: 'Minimal',
51
+ description: 'Bare-bones React + TypeScript setup',
52
+ selections: {
53
+ variant: 'ts',
54
+ styling: 'plain-css',
55
+ ui: 'none',
56
+ forms: 'none',
57
+ state: 'none',
58
+ routing: 'none',
59
+ dataFetching: 'none',
60
+ icons: 'none',
61
+ structure: 'simple',
62
+ },
63
+ },
64
+ };
65
+ export const getPreset = (name) => {
66
+ return presets[name.toLowerCase()];
67
+ };
68
+ export const listPresets = () => {
69
+ return Object.entries(presets)
70
+ .map(([key, preset]) => ` ${key.padEnd(12)} - ${preset.description}`)
71
+ .join('\n');
72
+ };
73
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/core/presets.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,OAAO,GAA2B;IAC7C,IAAI,EAAE;QACJ,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,2DAA2D;QACxE,UAAU,EAAE;YACV,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,UAAU;YACnB,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,cAAc;YACvB,YAAY,EAAE,gBAAgB;YAC9B,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,eAAe;YAC1B,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,KAAK;SACZ;KACF;IACD,SAAS,EAAE;QACT,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,8CAA8C;QAC3D,UAAU,EAAE;YACV,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,UAAU;YACnB,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,cAAc;YACvB,YAAY,EAAE,gBAAgB;YAC9B,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,KAAK;SACjB;KACF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,oCAAoC;QACjD,UAAU,EAAE;YACV,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,UAAU;YACnB,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,MAAM;YACf,YAAY,EAAE,MAAM;YACpB,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,QAAQ;SACpB;KACF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,qCAAqC;QAClD,UAAU,EAAE;YACV,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,WAAW;YACpB,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,MAAM;YACf,YAAY,EAAE,MAAM;YACpB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,QAAQ;SACpB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAsB,EAAE;IAC5D,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAW,EAAE;IACtC,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;SACrE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Core prompts - Main selections for project setup
3
+ */
4
+ import type { PromptConfig } from '../../types/index.js';
5
+ /** Framework selection - first prompt */
6
+ export declare const frameworkPrompt: PromptConfig;
7
+ export declare const variantPrompt: PromptConfig;
8
+ export declare const stylingPrompt: PromptConfig;
9
+ export declare const uiPrompt: PromptConfig;
10
+ export declare const formsPrompt: PromptConfig;
11
+ export declare const statePrompt: PromptConfig;
12
+ export declare const routingPrompt: PromptConfig;
13
+ export declare const dataFetchingPrompt: PromptConfig;
14
+ export declare const iconsPrompt: PromptConfig;
15
+ export declare const structurePrompt: PromptConfig;
16
+ /** All core prompts */
17
+ export declare const corePrompts: PromptConfig[];
18
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/core/prompts/core.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,yCAAyC;AACzC,eAAO,MAAM,eAAe,EAAE,YAoB7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YAgD3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YAkC3B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,YA6DtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,YA6CzB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,YAqCzB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YA6B3B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,YAkChC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,YAkCzB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAsD7B,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,WAAW,EAAE,YAAY,EAUrC,CAAC"}
@@ -0,0 +1,420 @@
1
+ /** Framework selection - first prompt */
2
+ export const frameworkPrompt = {
3
+ name: 'framework',
4
+ message: 'Select a framework:',
5
+ type: 'list',
6
+ options: [
7
+ {
8
+ value: 'react',
9
+ name: 'React',
10
+ rank: 'recommended',
11
+ comment: 'A JavaScript library for building user interfaces',
12
+ hover_note: 'React 19 with Vite - fast development and optimized builds',
13
+ },
14
+ {
15
+ value: 'nextjs',
16
+ name: 'Next.js',
17
+ rank: 'solid',
18
+ comment: '⏳ Coming Soon',
19
+ hover_note: 'Server-side rendering, API routes, and more - Coming Soon!',
20
+ },
21
+ ],
22
+ };
23
+ export const variantPrompt = {
24
+ name: 'variant',
25
+ message: 'Select a variant:',
26
+ type: 'list',
27
+ options: [
28
+ {
29
+ value: 'ts',
30
+ name: 'TypeScript',
31
+ rank: 'recommended',
32
+ comment: 'Type-safe JavaScript',
33
+ hover_note: 'Standard TypeScript setup with full type checking',
34
+ },
35
+ {
36
+ value: 'ts-compiler',
37
+ name: 'TypeScript + React Compiler',
38
+ rank: 'recommended',
39
+ comment: 'Auto-optimization with React 19',
40
+ hover_note: 'Uses React Compiler for automatic memoization - best for React 19+',
41
+ },
42
+ {
43
+ value: 'ts-swc',
44
+ name: 'TypeScript + SWC',
45
+ rank: 'solid',
46
+ comment: 'Faster builds with SWC',
47
+ hover_note: 'Rust-based compiler for 20x faster builds than Babel',
48
+ },
49
+ {
50
+ value: 'js',
51
+ name: 'JavaScript',
52
+ rank: 'solid',
53
+ comment: 'Standard JavaScript',
54
+ hover_note: 'No type system, simpler setup',
55
+ },
56
+ {
57
+ value: 'js-compiler',
58
+ name: 'JavaScript + React Compiler',
59
+ rank: 'solid',
60
+ comment: 'Auto-optimization without types',
61
+ hover_note: 'React Compiler benefits without TypeScript overhead',
62
+ },
63
+ {
64
+ value: 'js-swc',
65
+ name: 'JavaScript + SWC',
66
+ rank: 'solid',
67
+ comment: 'Faster builds without types',
68
+ hover_note: 'Fast SWC compilation for JavaScript projects',
69
+ },
70
+ ],
71
+ };
72
+ export const stylingPrompt = {
73
+ name: 'styling',
74
+ message: 'Select a styling solution:',
75
+ type: 'list',
76
+ options: [
77
+ {
78
+ value: 'tailwind',
79
+ name: 'Tailwind CSS',
80
+ rank: 'recommended',
81
+ comment: 'Utility-first CSS framework',
82
+ hover_note: 'Rapidly build modern websites without leaving your HTML - includes dark mode',
83
+ },
84
+ {
85
+ value: 'css-modules',
86
+ name: 'CSS Modules',
87
+ rank: 'solid',
88
+ comment: 'Scoped CSS by default',
89
+ hover_note: 'CSS files where class names are scoped locally to avoid conflicts',
90
+ },
91
+ {
92
+ value: 'plain-css',
93
+ name: 'Plain CSS',
94
+ rank: 'solid',
95
+ comment: 'Standard CSS files',
96
+ hover_note: 'Classic CSS with no preprocessing - simple and straightforward',
97
+ },
98
+ {
99
+ value: 'sass',
100
+ name: 'Sass/SCSS',
101
+ rank: 'solid',
102
+ comment: 'CSS with superpowers',
103
+ hover_note: 'Variables, nesting, mixins, and more - industry standard preprocessor',
104
+ },
105
+ ],
106
+ };
107
+ export const uiPrompt = {
108
+ name: 'ui',
109
+ message: 'Select a UI library:',
110
+ type: 'list',
111
+ options: [
112
+ {
113
+ value: 'shadcn',
114
+ name: 'shadcn/ui',
115
+ rank: 'recommended',
116
+ comment: 'Beautifully designed components (~0KB base)',
117
+ hover_note: 'Copy-paste components built with Radix and Tailwind - only import what you use',
118
+ supportedFrameworks: ['react'],
119
+ },
120
+ {
121
+ value: 'radix',
122
+ name: 'Radix UI',
123
+ rank: 'solid',
124
+ comment: 'Unstyled, accessible (~5KB per component)',
125
+ hover_note: 'Low-level primitives for building custom design systems',
126
+ supportedFrameworks: ['react'],
127
+ },
128
+ {
129
+ value: 'mantine',
130
+ name: 'Mantine',
131
+ rank: 'solid',
132
+ comment: 'Full-featured library (~50KB gzipped)',
133
+ hover_note: 'Over 100 customizable components and 50+ hooks included',
134
+ supportedFrameworks: ['react'],
135
+ },
136
+ {
137
+ value: 'heroui',
138
+ name: 'HeroUI',
139
+ rank: 'solid',
140
+ comment: 'Beautiful, fast UI (~30KB gzipped)',
141
+ hover_note: 'Modern components built on Tailwind CSS and Radix primitives',
142
+ supportedFrameworks: ['react'],
143
+ },
144
+ {
145
+ value: 'antd',
146
+ name: 'Ant Design',
147
+ rank: 'legacy',
148
+ comment: 'Enterprise-class UI (~120KB gzipped)',
149
+ hover_note: 'Feature-rich but heavy bundle size - best for enterprise apps',
150
+ supportedFrameworks: ['react'],
151
+ },
152
+ {
153
+ value: 'chakra',
154
+ name: 'Chakra UI',
155
+ rank: 'legacy',
156
+ comment: 'Simple, modular (~80KB gzipped)',
157
+ hover_note: 'Good developer experience but larger bundle than newer alternatives',
158
+ supportedFrameworks: ['react'],
159
+ },
160
+ {
161
+ value: 'none',
162
+ name: 'None',
163
+ rank: 'solid',
164
+ comment: 'No UI library (0KB)',
165
+ hover_note: 'Build your own components from scratch',
166
+ },
167
+ ],
168
+ };
169
+ export const formsPrompt = {
170
+ name: 'forms',
171
+ message: 'Select a forms solution:',
172
+ type: 'list',
173
+ options: [
174
+ {
175
+ value: 'rhf-zod',
176
+ name: 'React Hook Form + Zod',
177
+ rank: 'recommended',
178
+ comment: 'Best performance + type safety',
179
+ hover_note: 'Minimal re-renders with TypeScript-first validation schema',
180
+ supportedFrameworks: ['react'],
181
+ },
182
+ {
183
+ value: 'rhf-yup',
184
+ name: 'React Hook Form + Yup',
185
+ rank: 'solid',
186
+ comment: 'Performant with Yup validation',
187
+ hover_note: 'Well-established validation library with good ecosystem',
188
+ supportedFrameworks: ['react'],
189
+ },
190
+ {
191
+ value: 'formik-zod',
192
+ name: 'Formik + Zod',
193
+ rank: 'solid',
194
+ comment: 'Popular form library + Zod',
195
+ hover_note: 'Formik\'s simplicity with Zod\'s type inference',
196
+ supportedFrameworks: ['react'],
197
+ },
198
+ {
199
+ value: 'formik-yup',
200
+ name: 'Formik + Yup',
201
+ rank: 'legacy',
202
+ comment: 'Traditional Formik setup',
203
+ hover_note: 'Classic combination but less performant than React Hook Form',
204
+ supportedFrameworks: ['react'],
205
+ },
206
+ {
207
+ value: 'none',
208
+ name: 'None',
209
+ rank: 'solid',
210
+ comment: 'No forms library',
211
+ hover_note: 'Use native form handling or add later',
212
+ },
213
+ ],
214
+ };
215
+ export const statePrompt = {
216
+ name: 'state',
217
+ message: 'Select a state management solution:',
218
+ type: 'list',
219
+ options: [
220
+ {
221
+ value: 'zustand',
222
+ name: 'Zustand',
223
+ rank: 'recommended',
224
+ comment: 'Small, fast, scalable',
225
+ hover_note: 'Minimal API with excellent TypeScript support - no boilerplate',
226
+ supportedFrameworks: ['react'],
227
+ },
228
+ {
229
+ value: 'redux',
230
+ name: 'Redux Toolkit',
231
+ rank: 'solid',
232
+ comment: 'Industry standard',
233
+ hover_note: 'Best for complex state with devtools, middleware, and persistence',
234
+ supportedFrameworks: ['react'],
235
+ },
236
+ {
237
+ value: 'jotai',
238
+ name: 'Jotai',
239
+ rank: 'solid',
240
+ comment: 'Primitive atoms approach',
241
+ hover_note: 'Atomic state management - great for derived state',
242
+ supportedFrameworks: ['react'],
243
+ },
244
+ {
245
+ value: 'none',
246
+ name: 'None',
247
+ rank: 'solid',
248
+ comment: 'React built-in state',
249
+ hover_note: 'Use useState, useReducer, and Context API',
250
+ },
251
+ ],
252
+ };
253
+ export const routingPrompt = {
254
+ name: 'routing',
255
+ message: 'Select a routing solution:',
256
+ type: 'list',
257
+ options: [
258
+ {
259
+ value: 'react-router',
260
+ name: 'React Router',
261
+ rank: 'recommended',
262
+ comment: 'Most popular routing',
263
+ hover_note: 'Declarative routing with data loading and actions support',
264
+ supportedFrameworks: ['react'],
265
+ },
266
+ {
267
+ value: 'tanstack-router',
268
+ name: 'TanStack Router',
269
+ rank: 'solid',
270
+ comment: 'Fully type-safe routing',
271
+ hover_note: 'Type-safe from route definition to component - great DX',
272
+ supportedFrameworks: ['react'],
273
+ },
274
+ {
275
+ value: 'none',
276
+ name: 'None',
277
+ rank: 'solid',
278
+ comment: 'No routing',
279
+ hover_note: 'Single page app without navigation',
280
+ },
281
+ ],
282
+ };
283
+ export const dataFetchingPrompt = {
284
+ name: 'dataFetching',
285
+ message: 'Select a data fetching solution:',
286
+ type: 'list',
287
+ options: [
288
+ {
289
+ value: 'tanstack-query',
290
+ name: 'TanStack Query',
291
+ rank: 'recommended',
292
+ comment: 'Powerful async state',
293
+ hover_note: 'Caching, background updates, optimistic UI, infinite scroll built-in',
294
+ },
295
+ {
296
+ value: 'axios',
297
+ name: 'Axios',
298
+ rank: 'solid',
299
+ comment: 'Promise-based HTTP client',
300
+ hover_note: 'Simple API with interceptors, transforms, and automatic JSON parsing',
301
+ },
302
+ {
303
+ value: 'fetch',
304
+ name: 'Native Fetch',
305
+ rank: 'solid',
306
+ comment: 'Built-in browser API',
307
+ hover_note: 'No dependencies - use browser\'s native fetch API',
308
+ },
309
+ {
310
+ value: 'none',
311
+ name: 'None',
312
+ rank: 'solid',
313
+ comment: 'No data fetching setup',
314
+ hover_note: 'Add data fetching solution later',
315
+ },
316
+ ],
317
+ };
318
+ export const iconsPrompt = {
319
+ name: 'icons',
320
+ message: 'Select an icon library:',
321
+ type: 'list',
322
+ options: [
323
+ {
324
+ value: 'lucide',
325
+ name: 'Lucide',
326
+ rank: 'recommended',
327
+ comment: 'Beautiful & consistent',
328
+ hover_note: 'Community-driven fork of Feather Icons - tree-shakeable',
329
+ },
330
+ {
331
+ value: 'heroicons',
332
+ name: 'Heroicons',
333
+ rank: 'solid',
334
+ comment: 'By Tailwind Labs',
335
+ hover_note: 'Hand-crafted SVG icons designed to pair with Tailwind CSS',
336
+ },
337
+ {
338
+ value: 'fontawesome',
339
+ name: 'Font Awesome',
340
+ rank: 'solid',
341
+ comment: 'Extensive icon library',
342
+ hover_note: 'Thousands of icons in multiple styles (solid, regular, brands)',
343
+ },
344
+ {
345
+ value: 'none',
346
+ name: 'None',
347
+ rank: 'solid',
348
+ comment: 'No icon library',
349
+ hover_note: 'Use your own SVGs or add icons later',
350
+ },
351
+ ],
352
+ };
353
+ export const structurePrompt = {
354
+ name: 'structure',
355
+ message: 'Select a project structure:',
356
+ type: 'list',
357
+ options: [
358
+ {
359
+ value: 'feature-based',
360
+ name: 'Feature-based',
361
+ rank: 'recommended',
362
+ comment: 'Organize by features',
363
+ hover_note: 'Group files by feature/domain - scales well for large apps',
364
+ folder_info: ['src/features/*', 'src/shared/*', 'src/app/*'],
365
+ },
366
+ {
367
+ value: 'fsd',
368
+ name: 'FSD (Feature-Sliced Design)',
369
+ rank: 'recommended',
370
+ comment: 'Architectural methodology',
371
+ hover_note: 'Layers → Slices → Segments - highly scalable architecture',
372
+ folder_info: ['src/app', 'src/pages', 'src/widgets', 'src/features', 'src/entities', 'src/shared'],
373
+ },
374
+ {
375
+ value: 'atomic',
376
+ name: 'Atomic Design',
377
+ rank: 'solid',
378
+ comment: 'Atoms → Molecules → Organisms',
379
+ hover_note: 'Design system methodology by Brad Frost - great for component libraries',
380
+ folder_info: ['src/components/atoms', 'src/components/molecules', 'src/components/organisms'],
381
+ },
382
+ {
383
+ value: 'clean',
384
+ name: 'Clean Architecture',
385
+ rank: 'solid',
386
+ comment: 'Domain-driven layers',
387
+ hover_note: 'Separation of concerns with domain, application, and infrastructure layers',
388
+ folder_info: ['src/domain', 'src/application', 'src/infrastructure', 'src/presentation'],
389
+ },
390
+ {
391
+ value: 'mvc',
392
+ name: 'MVC Pattern',
393
+ rank: 'solid',
394
+ comment: 'Model-View-Controller',
395
+ hover_note: 'Classic pattern separating data, UI, and business logic',
396
+ folder_info: ['src/models', 'src/views', 'src/controllers'],
397
+ },
398
+ {
399
+ value: 'simple',
400
+ name: 'Simple',
401
+ rank: 'solid',
402
+ comment: 'Minimal structure',
403
+ hover_note: 'Basic folders for small projects - easy to reorganize later',
404
+ folder_info: ['src/components', 'src/hooks', 'src/utils', 'src/assets'],
405
+ },
406
+ ],
407
+ };
408
+ /** All core prompts */
409
+ export const corePrompts = [
410
+ variantPrompt,
411
+ stylingPrompt,
412
+ uiPrompt,
413
+ formsPrompt,
414
+ statePrompt,
415
+ routingPrompt,
416
+ dataFetchingPrompt,
417
+ iconsPrompt,
418
+ structurePrompt,
419
+ ];
420
+ //# sourceMappingURL=core.js.map