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,96 @@
1
+ import path from 'node:path';
2
+ import { authConfigurator, cicdConfigurator, dataFetchingConfigurator, formsConfigurator, frameworkConfigurator, i18nConfigurator, iconsConfigurator, languageConfigurator, mandatoryConfigurator, routingConfigurator, stateConfigurator, structureConfigurator, stylingConfigurator, uiConfigurator, variantConfigurator, } from '../configurators/index.js';
3
+ import { createEntryFiles, createReadme, createStyles } from '../templates/index.js';
4
+ import { createProjectDir, spinner } from '../utils/index.js';
5
+ import { executeParallel } from './parallel.js';
6
+ /**
7
+ * Create steps with dependency information for parallel execution
8
+ */
9
+ const createSteps = ({ ctx, cicd = false }) => [
10
+ // Phase 1: Project setup (sequential)
11
+ { name: 'Creating project directory', fn: () => createProjectDir(ctx) },
12
+ { name: 'Setting up framework', fn: () => frameworkConfigurator(ctx), dependencies: ['Creating project directory'] },
13
+ { name: 'Configuring build variant', fn: () => variantConfigurator(ctx), dependencies: ['Setting up framework'] },
14
+ { name: 'Setting up language', fn: () => languageConfigurator(ctx), dependencies: ['Configuring build variant'] },
15
+ // Phase 2: Independent configurators (can run in parallel)
16
+ { name: 'Configuring styling', fn: () => stylingConfigurator(ctx), dependencies: ['Setting up language'] },
17
+ { name: 'Setting up forms', fn: () => formsConfigurator(ctx), dependencies: ['Setting up language'] },
18
+ { name: 'Configuring state management', fn: () => stateConfigurator(ctx), dependencies: ['Setting up language'] },
19
+ { name: 'Setting up routing', fn: () => routingConfigurator(ctx), dependencies: ['Setting up language'] },
20
+ { name: 'Configuring data fetching', fn: () => dataFetchingConfigurator(ctx), dependencies: ['Setting up language'] },
21
+ { name: 'Adding icon library', fn: () => iconsConfigurator(ctx), dependencies: ['Setting up language'] },
22
+ { name: 'Creating project structure', fn: () => structureConfigurator(ctx), dependencies: ['Setting up language'] },
23
+ { name: 'Setting up internationalization', fn: () => i18nConfigurator(ctx), dependencies: ['Setting up language'] },
24
+ { name: 'Configuring authentication', fn: () => authConfigurator(ctx), dependencies: ['Setting up language'] },
25
+ // Phase 3: UI (depends on styling for Tailwind check)
26
+ { name: 'Adding UI library', fn: () => uiConfigurator(ctx), dependencies: ['Configuring styling'] },
27
+ // Phase 4: Finalization
28
+ {
29
+ name: 'Adding mandatory features',
30
+ fn: () => mandatoryConfigurator(ctx),
31
+ dependencies: [
32
+ 'Configuring styling', 'Setting up forms', 'Configuring state management',
33
+ 'Setting up routing', 'Configuring data fetching', 'Adding icon library',
34
+ 'Creating project structure', 'Setting up internationalization', 'Configuring authentication'
35
+ ]
36
+ },
37
+ {
38
+ name: 'Creating entry files',
39
+ fn: () => createEntryFiles(ctx),
40
+ dependencies: ['Adding mandatory features', 'Adding UI library']
41
+ },
42
+ {
43
+ name: 'Creating styles',
44
+ fn: () => createStyles(ctx),
45
+ dependencies: ['Adding mandatory features']
46
+ },
47
+ {
48
+ name: 'Generating documentation',
49
+ fn: () => createReadme(ctx),
50
+ dependencies: ['Creating entry files', 'Creating styles']
51
+ },
52
+ // Optional: CI/CD configuration
53
+ ...(cicd ? [{
54
+ name: 'Setting up CI/CD',
55
+ fn: () => cicdConfigurator(ctx),
56
+ dependencies: ['Generating documentation']
57
+ }] : []),
58
+ ];
59
+ /**
60
+ * Execute setup with sequential spinner display
61
+ */
62
+ const executeSequential = async (steps) => {
63
+ for (const step of steps) {
64
+ const s = spinner(step.name);
65
+ try {
66
+ await step.fn();
67
+ s.succeed();
68
+ }
69
+ catch (error) {
70
+ s.fail();
71
+ throw error;
72
+ }
73
+ }
74
+ };
75
+ /**
76
+ * Main setup function
77
+ */
78
+ export const setup = async ({ selections, targetDir, parallel = false, cicd = false }) => {
79
+ const projectPath = path.resolve(targetDir, selections.projectName);
80
+ const ctx = {
81
+ projectPath,
82
+ selections,
83
+ };
84
+ const steps = createSteps({ ctx, cicd });
85
+ if (parallel) {
86
+ // Use parallel execution for better performance
87
+ await executeParallel(steps, { verbose: true, maxConcurrency: 4 });
88
+ }
89
+ else {
90
+ // Use sequential execution with spinner (default for better UX)
91
+ await executeSequential(steps);
92
+ }
93
+ };
94
+ // Export for testing
95
+ export { createSteps, executeSequential };
96
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/core/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * NEXO CLI - Wizard Mode
3
+ *
4
+ * A simplified, guided mode for beginners that automatically
5
+ * recommends configurations based on project type.
6
+ */
7
+ import type { UserSelections } from '../types/index.js';
8
+ export type ProjectType = 'webapp' | 'dashboard' | 'landing' | 'api-client' | 'portfolio' | 'ecommerce';
9
+ export interface WizardResult {
10
+ projectName: string;
11
+ projectType: ProjectType;
12
+ selections: UserSelections;
13
+ useRecommended: boolean;
14
+ }
15
+ export interface ProjectTypeConfig {
16
+ name: string;
17
+ description: string;
18
+ icon: string;
19
+ recommendations: Partial<UserSelections>;
20
+ features: string[];
21
+ }
22
+ export declare const projectTypes: Record<ProjectType, ProjectTypeConfig>;
23
+ /**
24
+ * Run the wizard mode
25
+ */
26
+ export declare const runWizard: () => Promise<WizardResult | null>;
27
+ /**
28
+ * Get recommendations for a project type
29
+ */
30
+ export declare const getRecommendationsFor: (type: ProjectType) => ProjectTypeConfig;
31
+ /**
32
+ * Get all project types
33
+ */
34
+ export declare const getProjectTypes: () => Array<{
35
+ value: ProjectType;
36
+ config: ProjectTypeConfig;
37
+ }>;
38
+ export default runWizard;
39
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/core/wizard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,WAAW,GACX,SAAS,GACT,YAAY,GACZ,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,cAAc,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAmJ/D,CAAC;AAaF;;GAEG;AACH,eAAO,MAAM,SAAS,QAAa,OAAO,CAAC,YAAY,GAAG,IAAI,CAmF7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,WAAW,KAAG,iBAEzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,QAAO,KAAK,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,CAKzF,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * NEXO CLI - Wizard Mode
3
+ *
4
+ * A simplified, guided mode for beginners that automatically
5
+ * recommends configurations based on project type.
6
+ */
7
+ import * as p from '@clack/prompts';
8
+ import pc from 'picocolors';
9
+ // ============================================
10
+ // Project Type Configurations
11
+ // ============================================
12
+ export const projectTypes = {
13
+ webapp: {
14
+ name: 'Web Application',
15
+ description: 'Interactive web application with forms and state',
16
+ icon: '🌐',
17
+ recommendations: {
18
+ variant: 'ts',
19
+ styling: 'tailwind',
20
+ ui: 'shadcn',
21
+ forms: 'rhf-zod',
22
+ state: 'zustand',
23
+ routing: 'react-router',
24
+ dataFetching: 'tanstack-query',
25
+ icons: 'lucide',
26
+ structure: 'feature-based',
27
+ },
28
+ features: [
29
+ 'TypeScript for type safety',
30
+ 'Tailwind CSS + shadcn/ui',
31
+ 'Form handling with validation',
32
+ 'State management',
33
+ 'Client-side routing',
34
+ 'Data fetching with caching',
35
+ ],
36
+ },
37
+ dashboard: {
38
+ name: 'Admin Dashboard',
39
+ description: 'Data-rich admin panel with charts and tables',
40
+ icon: '📊',
41
+ recommendations: {
42
+ variant: 'ts',
43
+ styling: 'tailwind',
44
+ ui: 'shadcn',
45
+ forms: 'rhf-zod',
46
+ state: 'redux',
47
+ routing: 'react-router',
48
+ dataFetching: 'tanstack-query',
49
+ icons: 'lucide',
50
+ structure: 'fsd',
51
+ },
52
+ features: [
53
+ 'TypeScript for type safety',
54
+ 'Tailwind CSS + shadcn/ui',
55
+ 'Redux for complex state',
56
+ 'FSD architecture',
57
+ 'Data fetching with caching',
58
+ 'Ready for charts integration',
59
+ ],
60
+ },
61
+ landing: {
62
+ name: 'Landing Page',
63
+ description: 'Fast, SEO-optimized marketing page',
64
+ icon: '🚀',
65
+ recommendations: {
66
+ variant: 'ts',
67
+ styling: 'tailwind',
68
+ ui: 'none',
69
+ forms: 'none',
70
+ state: 'none',
71
+ routing: 'none',
72
+ dataFetching: 'none',
73
+ icons: 'lucide',
74
+ structure: 'simple',
75
+ },
76
+ features: [
77
+ 'TypeScript for type safety',
78
+ 'Tailwind CSS for styling',
79
+ 'Minimal dependencies',
80
+ 'Fast load times',
81
+ 'Simple structure',
82
+ 'Easy to customize',
83
+ ],
84
+ },
85
+ 'api-client': {
86
+ name: 'API Client',
87
+ description: 'Application consuming external APIs',
88
+ icon: '🔌',
89
+ recommendations: {
90
+ variant: 'ts',
91
+ styling: 'tailwind',
92
+ ui: 'mantine',
93
+ forms: 'rhf-zod',
94
+ state: 'zustand',
95
+ routing: 'react-router',
96
+ dataFetching: 'tanstack-query',
97
+ icons: 'lucide',
98
+ structure: 'feature-based',
99
+ },
100
+ features: [
101
+ 'TypeScript for type safety',
102
+ 'TanStack Query for API calls',
103
+ 'Zustand for client state',
104
+ 'Mantine UI components',
105
+ 'Form handling',
106
+ 'Feature-based structure',
107
+ ],
108
+ },
109
+ portfolio: {
110
+ name: 'Portfolio Website',
111
+ description: 'Personal portfolio or showcase site',
112
+ icon: '👤',
113
+ recommendations: {
114
+ variant: 'ts',
115
+ styling: 'tailwind',
116
+ ui: 'none',
117
+ forms: 'none',
118
+ state: 'none',
119
+ routing: 'react-router',
120
+ dataFetching: 'none',
121
+ icons: 'lucide',
122
+ structure: 'simple',
123
+ },
124
+ features: [
125
+ 'TypeScript for type safety',
126
+ 'Tailwind CSS for styling',
127
+ 'Client-side routing',
128
+ 'Lucide icons',
129
+ 'Simple structure',
130
+ 'Easy to personalize',
131
+ ],
132
+ },
133
+ ecommerce: {
134
+ name: 'E-Commerce',
135
+ description: 'Online store with cart and checkout',
136
+ icon: '🛒',
137
+ recommendations: {
138
+ variant: 'ts',
139
+ styling: 'tailwind',
140
+ ui: 'shadcn',
141
+ forms: 'rhf-zod',
142
+ state: 'zustand',
143
+ routing: 'tanstack-router',
144
+ dataFetching: 'tanstack-query',
145
+ icons: 'lucide',
146
+ structure: 'fsd',
147
+ auth: 'jwt',
148
+ },
149
+ features: [
150
+ 'TypeScript for type safety',
151
+ 'Tailwind CSS + shadcn/ui',
152
+ 'Zustand for cart state',
153
+ 'TanStack Router (type-safe)',
154
+ 'TanStack Query for products',
155
+ 'JWT authentication ready',
156
+ 'FSD architecture',
157
+ ],
158
+ },
159
+ };
160
+ // ============================================
161
+ // Wizard Functions
162
+ // ============================================
163
+ /**
164
+ * Format features list for display
165
+ */
166
+ const formatFeatures = (features) => {
167
+ return features.map(f => ` ${pc.green('✓')} ${f}`).join('\n');
168
+ };
169
+ /**
170
+ * Run the wizard mode
171
+ */
172
+ export const runWizard = async () => {
173
+ console.log(pc.cyan('\n🧙 Welcome to NEXO Wizard!\n'));
174
+ console.log(pc.dim('Let me help you set up your project.\n'));
175
+ // Step 1: Project name
176
+ const projectName = await p.text({
177
+ message: 'What is your project name?',
178
+ placeholder: 'my-awesome-app',
179
+ defaultValue: 'my-app',
180
+ validate: (value) => {
181
+ const v = value || 'my-app';
182
+ if (!/^[a-z0-9-_]+$/i.test(v)) {
183
+ return 'Project name can only contain letters, numbers, hyphens, and underscores';
184
+ }
185
+ return undefined;
186
+ },
187
+ });
188
+ if (p.isCancel(projectName)) {
189
+ p.cancel('Wizard cancelled.');
190
+ return null;
191
+ }
192
+ // Step 2: Project type
193
+ const projectType = await p.select({
194
+ message: 'What are you building?',
195
+ options: Object.entries(projectTypes).map(([value, config]) => ({
196
+ value: value,
197
+ label: `${config.icon} ${config.name}`,
198
+ hint: config.description,
199
+ })),
200
+ });
201
+ if (p.isCancel(projectType)) {
202
+ p.cancel('Wizard cancelled.');
203
+ return null;
204
+ }
205
+ const selectedType = projectTypes[projectType];
206
+ // Step 3: Show recommendations
207
+ console.log();
208
+ p.note(`${pc.bold('Recommended stack for ' + selectedType.name + ':')}\n\n${formatFeatures(selectedType.features)}`, '📦 Configuration');
209
+ // Step 4: Confirm or customize
210
+ const useRecommended = await p.confirm({
211
+ message: 'Use these recommended settings?',
212
+ initialValue: true,
213
+ });
214
+ if (p.isCancel(useRecommended)) {
215
+ p.cancel('Wizard cancelled.');
216
+ return null;
217
+ }
218
+ // Build selections
219
+ const recommendations = selectedType.recommendations;
220
+ const selections = {
221
+ projectName: projectName,
222
+ framework: 'react',
223
+ variant: recommendations.variant || 'ts',
224
+ language: (recommendations.variant || 'ts').startsWith('ts') ? 'typescript' : 'javascript',
225
+ styling: recommendations.styling || 'tailwind',
226
+ ui: recommendations.ui || 'none',
227
+ forms: recommendations.forms || 'none',
228
+ state: recommendations.state || 'none',
229
+ routing: recommendations.routing || 'none',
230
+ dataFetching: recommendations.dataFetching || 'none',
231
+ icons: recommendations.icons || 'none',
232
+ structure: recommendations.structure || 'simple',
233
+ i18n: recommendations.i18n || 'none',
234
+ auth: recommendations.auth || 'none',
235
+ };
236
+ return {
237
+ projectName: projectName,
238
+ projectType: projectType,
239
+ selections,
240
+ useRecommended: useRecommended,
241
+ };
242
+ };
243
+ /**
244
+ * Get recommendations for a project type
245
+ */
246
+ export const getRecommendationsFor = (type) => {
247
+ return projectTypes[type];
248
+ };
249
+ /**
250
+ * Get all project types
251
+ */
252
+ export const getProjectTypes = () => {
253
+ return Object.entries(projectTypes).map(([value, config]) => ({
254
+ value: value,
255
+ config,
256
+ }));
257
+ };
258
+ export default runWizard;
259
+ //# sourceMappingURL=wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/core/wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Base error class for all NEXO errors
3
+ */
4
+ export declare class NexoError extends Error {
5
+ code: string;
6
+ context?: Record<string, unknown> | undefined;
7
+ constructor(message: string, code: string, context?: Record<string, unknown> | undefined);
8
+ }
9
+ /**
10
+ * Validation errors - invalid user input or selections
11
+ */
12
+ export declare class ValidationError extends NexoError {
13
+ constructor(message: string, context?: Record<string, unknown>);
14
+ }
15
+ /**
16
+ * File system errors - file operations failed
17
+ */
18
+ export declare class FileSystemError extends NexoError {
19
+ constructor(message: string, filePath: string, originalError?: Error);
20
+ }
21
+ /**
22
+ * Configurator errors - configuration step failed
23
+ */
24
+ export declare class ConfiguratorError extends NexoError {
25
+ constructor(configuratorName: string, message: string, originalError?: Error);
26
+ }
27
+ /**
28
+ * Dependency errors - package installation/resolution failed
29
+ */
30
+ export declare class DependencyError extends NexoError {
31
+ constructor(dependency: string, message: string);
32
+ }
33
+ /**
34
+ * Compatibility errors - incompatible selections
35
+ */
36
+ export declare class CompatibilityError extends NexoError {
37
+ constructor(message: string, selections: Record<string, string>);
38
+ }
39
+ /**
40
+ * Security errors - security violation detected
41
+ */
42
+ export declare class SecurityError extends NexoError {
43
+ constructor(message: string, context?: Record<string, unknown>);
44
+ }
45
+ /**
46
+ * Format and display an error with helpful information
47
+ */
48
+ export declare const formatError: (error: unknown, context?: Record<string, unknown>) => void;
49
+ /**
50
+ * Global error handler - use at CLI entry point
51
+ */
52
+ export declare const handleError: (error: unknown, context?: Record<string, unknown>) => never;
53
+ /**
54
+ * Wrap an async function with error handling
55
+ */
56
+ export declare const withErrorHandling: <T extends unknown[], R>(fn: (...args: T) => Promise<R>, errorContext?: Record<string, unknown>) => (...args: T) => Promise<R>;
57
+ /**
58
+ * Try to execute a function and return a result object
59
+ */
60
+ export interface Result<T> {
61
+ success: boolean;
62
+ data?: T;
63
+ error?: NexoError;
64
+ }
65
+ export declare const tryExecute: <T>(fn: () => Promise<T>, errorClass?: new (message: string, ...args: unknown[]) => NexoError, ...errorArgs: unknown[]) => Promise<Result<T>>;
66
+ export * from './messages.js';
67
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAGzB,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFxC,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAM3C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK;CAOrE;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,SAAS;gBAClC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK;CAO7E;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;gBAChC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIhD;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;gBACnC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAIhE;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,SAAS;gBAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAoFD;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAyE/E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,KAG/E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EACtD,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9B,eAAe,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAExB,GAAG,MAAM,CAAC,KAAG,OAAO,CAAC,CAAC,CAQrC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,eAAO,MAAM,UAAU,GAAU,CAAC,EAChC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,aAAY,KAAK,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,SAA+E,EACxI,GAAG,WAAW,OAAO,EAAE,KACtB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAWnB,CAAC;AAGF,cAAc,eAAe,CAAC"}