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,441 @@
1
+ /**
2
+ * NEXO CLI - Component Generators
3
+ *
4
+ * Generate components, hooks, pages, and features with consistent patterns.
5
+ *
6
+ * @example
7
+ * ```bash
8
+ * nexo generate component Button
9
+ * nexo generate hook useAuth
10
+ * nexo generate page Dashboard
11
+ * nexo generate feature auth
12
+ * ```
13
+ */
14
+ import path from 'node:path';
15
+ import pc from 'picocolors';
16
+ import { ensureDir, writeFile } from '../utils/fs.js';
17
+ // ============================================
18
+ // Templates
19
+ // ============================================
20
+ const componentTemplate = (name, ts, styling) => {
21
+ const ext = ts ? 'tsx' : 'jsx';
22
+ const propsType = ts ? `\n\ninterface ${name}Props {\n // Add props here\n}\n` : '';
23
+ const propsParam = ts ? `{ }: ${name}Props` : '{ }';
24
+ const styleImport = styling === 'css-modules'
25
+ ? `import styles from './${name}.module.css';\n`
26
+ : styling === 'scss'
27
+ ? `import './${name}.scss';\n`
28
+ : styling === 'css'
29
+ ? `import './${name}.css';\n`
30
+ : '';
31
+ return `${styleImport}${propsType}
32
+ export const ${name} = (${propsParam}) => {
33
+ return (
34
+ <div${styling === 'css-modules' ? ' className={styles.container}' : styling === 'tailwind' ? ' className=""' : ''}>
35
+ <h1>${name}</h1>
36
+ </div>
37
+ );
38
+ };
39
+
40
+ export default ${name};
41
+ `;
42
+ };
43
+ const hookTemplate = (name, ts) => {
44
+ const returnType = ts ? ': { value: string; setValue: (v: string) => void }' : '';
45
+ return `import { useState } from 'react';
46
+ ${ts ? '\ninterface Use' + name.replace(/^use/, '') + 'Options {\n initialValue?: string;\n}\n' : ''}
47
+ export const ${name} = (${ts ? 'options: Use' + name.replace(/^use/, '') + 'Options = {}' : 'options = {}'})${returnType} => {
48
+ const { initialValue = '' } = options;
49
+ const [value, setValue] = useState${ts ? '<string>' : ''}(initialValue);
50
+
51
+ // Add your hook logic here
52
+
53
+ return {
54
+ value,
55
+ setValue,
56
+ };
57
+ };
58
+
59
+ export default ${name};
60
+ `;
61
+ };
62
+ const pageTemplate = (name, ts, styling) => {
63
+ const propsType = ts ? `\n\ninterface ${name}PageProps {\n // Add props here\n}\n` : '';
64
+ const propsParam = ts ? `{ }: ${name}PageProps` : '{ }';
65
+ const styleClass = styling === 'tailwind'
66
+ ? ' className="container mx-auto px-4 py-8"'
67
+ : styling === 'css-modules'
68
+ ? ' className={styles.page}'
69
+ : '';
70
+ const styleImport = styling === 'css-modules'
71
+ ? `import styles from './${name}Page.module.css';\n`
72
+ : '';
73
+ return `${styleImport}${propsType}
74
+ export const ${name}Page = (${propsParam}) => {
75
+ return (
76
+ <main${styleClass}>
77
+ <h1>${name}</h1>
78
+ <p>Welcome to the ${name} page.</p>
79
+ </main>
80
+ );
81
+ };
82
+
83
+ export default ${name}Page;
84
+ `;
85
+ };
86
+ const featureIndexTemplate = (name, ts) => {
87
+ return `// ${name} Feature
88
+ // Export components, hooks, and utilities from this feature
89
+
90
+ export * from './components';
91
+ export * from './hooks';
92
+ ${ts ? "export * from './types';\n" : ''}`;
93
+ };
94
+ const featureTypesTemplate = (name) => {
95
+ return `// ${name} Feature Types
96
+
97
+ export interface ${name}State {
98
+ // Add state properties
99
+ }
100
+
101
+ export interface ${name}Actions {
102
+ // Add action types
103
+ }
104
+ `;
105
+ };
106
+ const testTemplate = (name, type, ts) => {
107
+ const importPath = type === 'hook' ? `./${name}` : `./${name}`;
108
+ const testSubject = type === 'hook' ? name : type === 'page' ? `${name}Page` : name;
109
+ if (type === 'hook') {
110
+ return `import { renderHook, act } from '@testing-library/react';
111
+ import { ${name} } from '${importPath}';
112
+
113
+ describe('${name}', () => {
114
+ it('should initialize with default value', () => {
115
+ const { result } = renderHook(() => ${name}());
116
+ expect(result.current.value).toBe('');
117
+ });
118
+
119
+ it('should update value', () => {
120
+ const { result } = renderHook(() => ${name}());
121
+
122
+ act(() => {
123
+ result.current.setValue('test');
124
+ });
125
+
126
+ expect(result.current.value).toBe('test');
127
+ });
128
+ });
129
+ `;
130
+ }
131
+ return `import { render, screen } from '@testing-library/react';
132
+ import { ${testSubject} } from '${importPath}';
133
+
134
+ describe('${testSubject}', () => {
135
+ it('should render correctly', () => {
136
+ render(<${testSubject} />);
137
+ expect(screen.getByText('${name}')).toBeInTheDocument();
138
+ });
139
+ });
140
+ `;
141
+ };
142
+ const styleTemplate = (name, type) => {
143
+ const className = type === 'css-modules' ? '.container' : `.${name.toLowerCase()}`;
144
+ return `${className} {
145
+ /* Add styles here */
146
+ }
147
+ `;
148
+ };
149
+ const indexTemplate = (name, type) => {
150
+ const exportName = type === 'page' ? `${name}Page` : name;
151
+ return `export { ${exportName}, default } from './${exportName}';
152
+ `;
153
+ };
154
+ // ============================================
155
+ // Utilities
156
+ // ============================================
157
+ /**
158
+ * Convert name to PascalCase
159
+ */
160
+ const toPascalCase = (str) => {
161
+ return str
162
+ .replace(/[-_](.)/g, (_, c) => c.toUpperCase())
163
+ .replace(/^(.)/, (_, c) => c.toUpperCase());
164
+ };
165
+ /**
166
+ * Convert name to camelCase
167
+ */
168
+ const toCamelCase = (str) => {
169
+ const pascal = toPascalCase(str);
170
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
171
+ };
172
+ /**
173
+ * Ensure hook name starts with 'use'
174
+ */
175
+ const ensureHookName = (name) => {
176
+ const camel = toCamelCase(name);
177
+ return camel.startsWith('use') ? camel : `use${toPascalCase(name)}`;
178
+ };
179
+ /**
180
+ * Get default target directory for type
181
+ */
182
+ const getDefaultDir = (type) => {
183
+ switch (type) {
184
+ case 'component':
185
+ return 'src/components';
186
+ case 'hook':
187
+ return 'src/hooks';
188
+ case 'page':
189
+ return 'src/pages';
190
+ case 'feature':
191
+ return 'src/features';
192
+ default:
193
+ return 'src';
194
+ }
195
+ };
196
+ /**
197
+ * Get file extension based on options
198
+ */
199
+ const getExtension = (ts, isComponent) => {
200
+ if (isComponent) {
201
+ return ts ? 'tsx' : 'jsx';
202
+ }
203
+ return ts ? 'ts' : 'js';
204
+ };
205
+ /**
206
+ * Get style extension
207
+ */
208
+ const getStyleExtension = (styling) => {
209
+ switch (styling) {
210
+ case 'scss':
211
+ return 'scss';
212
+ case 'css-modules':
213
+ return 'module.css';
214
+ default:
215
+ return 'css';
216
+ }
217
+ };
218
+ // ============================================
219
+ // Generators
220
+ // ============================================
221
+ /**
222
+ * Generate a component
223
+ */
224
+ const generateComponent = async (options) => {
225
+ const files = [];
226
+ const errors = [];
227
+ const name = toPascalCase(options.name);
228
+ const ts = options.typescript ?? true;
229
+ const dir = path.join(options.targetDir || getDefaultDir('component'), name);
230
+ try {
231
+ await ensureDir(dir);
232
+ // Main component file
233
+ const ext = getExtension(ts, true);
234
+ const componentPath = path.join(dir, `${name}.${ext}`);
235
+ await writeFile(componentPath, componentTemplate(name, ts, options.styling));
236
+ files.push(componentPath);
237
+ // Styles file
238
+ if (options.withStyles && options.styling && options.styling !== 'tailwind') {
239
+ const styleExt = getStyleExtension(options.styling);
240
+ const stylePath = path.join(dir, `${name}.${styleExt}`);
241
+ await writeFile(stylePath, styleTemplate(name, options.styling));
242
+ files.push(stylePath);
243
+ }
244
+ // Test file
245
+ if (options.withTests) {
246
+ const testPath = path.join(dir, `${name}.test.${ext}`);
247
+ await writeFile(testPath, testTemplate(name, 'component', ts));
248
+ files.push(testPath);
249
+ }
250
+ // Index file
251
+ if (options.withIndex) {
252
+ const indexPath = path.join(dir, `index.${ts ? 'ts' : 'js'}`);
253
+ await writeFile(indexPath, indexTemplate(name, 'component'));
254
+ files.push(indexPath);
255
+ }
256
+ return { success: true, files, errors };
257
+ }
258
+ catch (error) {
259
+ errors.push(error instanceof Error ? error.message : String(error));
260
+ return { success: false, files, errors };
261
+ }
262
+ };
263
+ /**
264
+ * Generate a hook
265
+ */
266
+ const generateHook = async (options) => {
267
+ const files = [];
268
+ const errors = [];
269
+ const name = ensureHookName(options.name);
270
+ const ts = options.typescript ?? true;
271
+ const dir = options.targetDir || getDefaultDir('hook');
272
+ try {
273
+ await ensureDir(dir);
274
+ // Main hook file
275
+ const ext = getExtension(ts, false);
276
+ const hookPath = path.join(dir, `${name}.${ext}`);
277
+ await writeFile(hookPath, hookTemplate(name, ts));
278
+ files.push(hookPath);
279
+ // Test file
280
+ if (options.withTests) {
281
+ const testPath = path.join(dir, `${name}.test.${ext}`);
282
+ await writeFile(testPath, testTemplate(name, 'hook', ts));
283
+ files.push(testPath);
284
+ }
285
+ return { success: true, files, errors };
286
+ }
287
+ catch (error) {
288
+ errors.push(error instanceof Error ? error.message : String(error));
289
+ return { success: false, files, errors };
290
+ }
291
+ };
292
+ /**
293
+ * Generate a page
294
+ */
295
+ const generatePage = async (options) => {
296
+ const files = [];
297
+ const errors = [];
298
+ const name = toPascalCase(options.name);
299
+ const ts = options.typescript ?? true;
300
+ const dir = path.join(options.targetDir || getDefaultDir('page'), name);
301
+ try {
302
+ await ensureDir(dir);
303
+ // Main page file
304
+ const ext = getExtension(ts, true);
305
+ const pagePath = path.join(dir, `${name}Page.${ext}`);
306
+ await writeFile(pagePath, pageTemplate(name, ts, options.styling));
307
+ files.push(pagePath);
308
+ // Styles file
309
+ if (options.withStyles && options.styling === 'css-modules') {
310
+ const stylePath = path.join(dir, `${name}Page.module.css`);
311
+ await writeFile(stylePath, styleTemplate(`${name}Page`, 'css-modules'));
312
+ files.push(stylePath);
313
+ }
314
+ // Test file
315
+ if (options.withTests) {
316
+ const testPath = path.join(dir, `${name}Page.test.${ext}`);
317
+ await writeFile(testPath, testTemplate(name, 'page', ts));
318
+ files.push(testPath);
319
+ }
320
+ // Index file
321
+ if (options.withIndex) {
322
+ const indexPath = path.join(dir, `index.${ts ? 'ts' : 'js'}`);
323
+ await writeFile(indexPath, indexTemplate(name, 'page'));
324
+ files.push(indexPath);
325
+ }
326
+ return { success: true, files, errors };
327
+ }
328
+ catch (error) {
329
+ errors.push(error instanceof Error ? error.message : String(error));
330
+ return { success: false, files, errors };
331
+ }
332
+ };
333
+ /**
334
+ * Generate a feature (FSD-style)
335
+ */
336
+ const generateFeature = async (options) => {
337
+ const files = [];
338
+ const errors = [];
339
+ const name = toPascalCase(options.name);
340
+ const ts = options.typescript ?? true;
341
+ const dir = path.join(options.targetDir || getDefaultDir('feature'), name.toLowerCase());
342
+ const ext = ts ? 'ts' : 'js';
343
+ try {
344
+ // Create directory structure
345
+ await ensureDir(path.join(dir, 'components'));
346
+ await ensureDir(path.join(dir, 'hooks'));
347
+ if (ts) {
348
+ await ensureDir(path.join(dir, 'types'));
349
+ }
350
+ // Feature index
351
+ const indexPath = path.join(dir, `index.${ext}`);
352
+ await writeFile(indexPath, featureIndexTemplate(name, ts));
353
+ files.push(indexPath);
354
+ // Types file (TypeScript only)
355
+ if (ts) {
356
+ const typesPath = path.join(dir, 'types', `index.${ext}`);
357
+ await writeFile(typesPath, featureTypesTemplate(name));
358
+ files.push(typesPath);
359
+ }
360
+ // Components index
361
+ const componentsIndexPath = path.join(dir, 'components', `index.${ext}`);
362
+ await writeFile(componentsIndexPath, `// ${name} Components\n// Export components here\n`);
363
+ files.push(componentsIndexPath);
364
+ // Hooks index
365
+ const hooksIndexPath = path.join(dir, 'hooks', `index.${ext}`);
366
+ await writeFile(hooksIndexPath, `// ${name} Hooks\n// Export hooks here\n`);
367
+ files.push(hooksIndexPath);
368
+ return { success: true, files, errors };
369
+ }
370
+ catch (error) {
371
+ errors.push(error instanceof Error ? error.message : String(error));
372
+ return { success: false, files, errors };
373
+ }
374
+ };
375
+ // ============================================
376
+ // Main Generator Function
377
+ // ============================================
378
+ /**
379
+ * Generate code based on type and options
380
+ *
381
+ * @example
382
+ * ```typescript
383
+ * import { generate } from 'nexo-cli';
384
+ *
385
+ * await generate({
386
+ * type: 'component',
387
+ * name: 'Button',
388
+ * typescript: true,
389
+ * withTests: true
390
+ * });
391
+ * ```
392
+ */
393
+ export const generate = async (options) => {
394
+ const { type, silent } = options;
395
+ let result;
396
+ switch (type) {
397
+ case 'component':
398
+ result = await generateComponent(options);
399
+ break;
400
+ case 'hook':
401
+ result = await generateHook(options);
402
+ break;
403
+ case 'page':
404
+ result = await generatePage(options);
405
+ break;
406
+ case 'feature':
407
+ result = await generateFeature(options);
408
+ break;
409
+ default:
410
+ return {
411
+ success: false,
412
+ files: [],
413
+ errors: [`Unknown generator type: ${type}`],
414
+ };
415
+ }
416
+ // Output results
417
+ if (!silent) {
418
+ if (result.success) {
419
+ console.log(pc.green(`\n✓ Generated ${type}: ${options.name}\n`));
420
+ console.log(pc.dim('Created files:'));
421
+ result.files.forEach(file => {
422
+ console.log(pc.cyan(` ${file}`));
423
+ });
424
+ console.log();
425
+ }
426
+ else {
427
+ console.log(pc.red(`\n✗ Failed to generate ${type}: ${options.name}\n`));
428
+ result.errors.forEach(error => {
429
+ console.log(pc.red(` ${error}`));
430
+ });
431
+ console.log();
432
+ }
433
+ }
434
+ return result;
435
+ };
436
+ // ============================================
437
+ // Exports
438
+ // ============================================
439
+ export { ensureHookName, generateComponent, generateFeature, generateHook, generatePage, toCamelCase, toPascalCase };
440
+ export default generate;
441
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export * from './configurators/index.js';
2
+ export * from './core/index.js';
3
+ export * from './errors/index.js';
4
+ export * from './templates/index.js';
5
+ export * from './types/index.js';
6
+ export * from './utils/index.js';
7
+ export { create, nexo, preview, validate } from './api/index.js';
8
+ export type { CreateOptions, CreateResult, DependencyInfo, PreviewOptions, PreviewResult } from './api/index.js';
9
+ export { generate, generateComponent, generateFeature, generateHook, generatePage } from './generators/index.js';
10
+ export type { GeneratorOptions, GeneratorResult, GeneratorType } from './generators/index.js';
11
+ export { createSafeContext, isPathSafe, safeJoin, sanitizeForCode, sanitizePath, scanContent, SecurityError, validateDependency, validateEnvironment, validateFileContent, validatePackageName, validateTargetPath } from './security/index.js';
12
+ export { checkCompatibilityOrThrow, compatibilityRules, getCompatibilityWarnings, sanitizeProjectName, VALID_OPTIONS, validateOption, validateOrThrow, validateProjectName, validateSelections } from './validation/index.js';
13
+ export type { CompatibilityRule, ValidationResult } from './validation/index.js';
14
+ export { autoDiscoverPlugins, createPluginManager, definePlugin, discoverPlugins, findConfig, initializePlugins, loadPlugins, loadPluginsFromConfig, pluginManager } from './plugins/index.js';
15
+ export type { NexoConfig, NexoPlugin, PluginConfigurator, PluginContext, PluginLoadResult, PluginManager, PluginPrompt } from './plugins/index.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EACL,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAChC,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,aAAa,EACb,YAAY,EAAE,cAAc,EAAE,cAAc,EAC5C,aAAa,EACd,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,QAAQ,EACR,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAChD,YAAY,EACb,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,gBAAgB,EAChB,eAAe,EAAE,aAAa,EAC/B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAC1M,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,yBAAyB,EAAE,kBAAkB,EAAE,wBAAwB,EACvE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAClD,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EACzD,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGjF,OAAO,EACL,mBAAmB,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAC1J,MAAM,oBAAoB,CAAC;AAE1B,YAAY,EACZ,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EACzG,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ // NEXO CLI - Main entry point
2
+ export * from './configurators/index.js';
3
+ export * from './core/index.js';
4
+ export * from './errors/index.js';
5
+ export * from './templates/index.js';
6
+ export * from './types/index.js';
7
+ export * from './utils/index.js';
8
+ // Programmatic API
9
+ export { create, nexo, preview, validate } from './api/index.js';
10
+ // Generators
11
+ export { generate, generateComponent, generateFeature, generateHook, generatePage } from './generators/index.js';
12
+ // Security and Validation (with explicit exports to avoid conflicts)
13
+ export { createSafeContext, isPathSafe, safeJoin, sanitizeForCode, sanitizePath, scanContent, SecurityError, validateDependency, validateEnvironment, validateFileContent, validatePackageName, validateTargetPath } from './security/index.js';
14
+ export { checkCompatibilityOrThrow, compatibilityRules, getCompatibilityWarnings, sanitizeProjectName, VALID_OPTIONS, validateOption, validateOrThrow, validateProjectName, validateSelections } from './validation/index.js';
15
+ // Plugin System
16
+ export { autoDiscoverPlugins, createPluginManager, definePlugin, discoverPlugins, findConfig, initializePlugins, loadPlugins, loadPluginsFromConfig, pluginManager } from './plugins/index.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AAEjC,mBAAmB;AACnB,OAAO,EACL,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAChC,MAAM,gBAAgB,CAAC;AAQxB,aAAa;AACb,OAAO,EACL,QAAQ,EACR,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAChD,YAAY,EACb,MAAM,uBAAuB,CAAC;AAO/B,qEAAqE;AACrE,OAAO,EACL,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAC1M,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,yBAAyB,EAAE,kBAAkB,EAAE,wBAAwB,EACvE,mBAAmB,EAAE,aAAa,EAAE,cAAc,EAClD,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EACzD,MAAM,uBAAuB,CAAC;AAI/B,gBAAgB;AAChB,OAAO,EACL,mBAAmB,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAC1J,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * NEXO Plugin System
3
+ *
4
+ * Extensible plugin architecture for NEXO CLI.
5
+ *
6
+ * @example Creating a plugin
7
+ * ```typescript
8
+ * import { definePlugin } from 'nexo-cli';
9
+ *
10
+ * export default definePlugin({
11
+ * name: 'nexo-plugin-example',
12
+ * version: '1.0.0',
13
+ * description: 'Example NEXO plugin',
14
+ *
15
+ * beforeSetup: async (ctx) => {
16
+ * console.log('Setting up:', ctx.selections.projectName);
17
+ * },
18
+ *
19
+ * afterSetup: async (ctx) => {
20
+ * console.log('Setup complete!');
21
+ * },
22
+ *
23
+ * configurators: {
24
+ * 'custom-config': async (ctx) => {
25
+ * // Custom configuration logic
26
+ * }
27
+ * }
28
+ * });
29
+ * ```
30
+ *
31
+ * @example Using plugins in .nexorc.json
32
+ * ```json
33
+ * {
34
+ * "plugins": [
35
+ * "nexo-plugin-example",
36
+ * "./my-local-plugin.js"
37
+ * ],
38
+ * "defaults": {
39
+ * "styling": "tailwind",
40
+ * "ui": "shadcn"
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ export type { AfterConfiguratorHook, AfterSetupHook, BeforeConfiguratorHook, BeforeSetupHook, ModifySelectionsHook, NexoConfig, NexoPlugin, PluginConfigurator, PluginContext, PluginLoadResult, PluginManager, PluginOptionExtension, PluginPrompt, PluginRegistry } from './types.js';
46
+ export { createPluginManager, definePlugin, loadPlugins, pluginManager } from './manager.js';
47
+ export { autoDiscoverPlugins, discoverPlugins, findConfig, initializePlugins, loadPluginsFromConfig } from './loader.js';
48
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH,YAAY,EACV,qBAAqB,EAAE,cAAc,EACrC,sBAAsB,EAAE,eAAe,EAAE,oBAAoB,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,cAAc,EAC/M,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EAAE,YAAY,EACjC,WAAW,EAAE,aAAa,EAC3B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,qBAAqB,EAC3F,MAAM,aAAa,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * NEXO Plugin System
3
+ *
4
+ * Extensible plugin architecture for NEXO CLI.
5
+ *
6
+ * @example Creating a plugin
7
+ * ```typescript
8
+ * import { definePlugin } from 'nexo-cli';
9
+ *
10
+ * export default definePlugin({
11
+ * name: 'nexo-plugin-example',
12
+ * version: '1.0.0',
13
+ * description: 'Example NEXO plugin',
14
+ *
15
+ * beforeSetup: async (ctx) => {
16
+ * console.log('Setting up:', ctx.selections.projectName);
17
+ * },
18
+ *
19
+ * afterSetup: async (ctx) => {
20
+ * console.log('Setup complete!');
21
+ * },
22
+ *
23
+ * configurators: {
24
+ * 'custom-config': async (ctx) => {
25
+ * // Custom configuration logic
26
+ * }
27
+ * }
28
+ * });
29
+ * ```
30
+ *
31
+ * @example Using plugins in .nexorc.json
32
+ * ```json
33
+ * {
34
+ * "plugins": [
35
+ * "nexo-plugin-example",
36
+ * "./my-local-plugin.js"
37
+ * ],
38
+ * "defaults": {
39
+ * "styling": "tailwind",
40
+ * "ui": "shadcn"
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ // Manager
46
+ export { createPluginManager, definePlugin, loadPlugins, pluginManager } from './manager.js';
47
+ // Loader
48
+ export { autoDiscoverPlugins, discoverPlugins, findConfig, initializePlugins, loadPluginsFromConfig } from './loader.js';
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAQH,UAAU;AACV,OAAO,EACL,mBAAmB,EAAE,YAAY,EACjC,WAAW,EAAE,aAAa,EAC3B,MAAM,cAAc,CAAC;AAEtB,SAAS;AACT,OAAO,EACL,mBAAmB,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,qBAAqB,EAC3F,MAAM,aAAa,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * NEXO Plugin System - Plugin Loader
3
+ *
4
+ * Loads plugins from various sources:
5
+ * - .nexorc.json configuration file
6
+ * - package.json nexo config
7
+ * - Direct npm packages
8
+ * - Local file paths
9
+ */
10
+ import type { NexoConfig, PluginLoadResult } from './types.js';
11
+ /**
12
+ * Find and read the nexo configuration file
13
+ */
14
+ export declare const findConfig: (cwd?: string) => Promise<NexoConfig | null>;
15
+ /**
16
+ * Load all plugins from configuration
17
+ */
18
+ export declare const loadPluginsFromConfig: (cwd?: string) => Promise<{
19
+ config: NexoConfig | null;
20
+ results: PluginLoadResult[];
21
+ }>;
22
+ /**
23
+ * Initialize plugins from configuration and return defaults
24
+ */
25
+ export declare const initializePlugins: (cwd?: string) => Promise<{
26
+ defaults: NexoConfig["defaults"];
27
+ loadedCount: number;
28
+ errors: string[];
29
+ }>;
30
+ /**
31
+ * Discover plugins in node_modules that match naming convention
32
+ */
33
+ export declare const discoverPlugins: (cwd?: string) => Promise<string[]>;
34
+ /**
35
+ * Auto-discover and load plugins
36
+ */
37
+ export declare const autoDiscoverPlugins: (cwd?: string) => Promise<PluginLoadResult[]>;
38
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAc,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAiB3E;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,MAAK,MAAsB,KAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAyBvF,CAAC;AAwDF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAK,MAAsB,KAC1B,OAAO,CAAC;IACT,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B,CAuDA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAK,MAAsB,KAC1B,OAAO,CAAC;IACT,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAmBA,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAK,MAAsB,KAC1B,OAAO,CAAC,MAAM,EAAE,CA8ClB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,MAAK,MAAsB,KAC1B,OAAO,CAAC,gBAAgB,EAAE,CAG5B,CAAC"}