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,232 @@
1
+ /**
2
+ * NEXO CLI - Batch Writer
3
+ *
4
+ * Optimizes file I/O by batching writes and executing them in parallel.
5
+ * This significantly improves performance when creating many files.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const writer = createBatchWriter();
10
+ *
11
+ * writer.add('src/file1.ts', content1);
12
+ * writer.add('src/file2.ts', content2);
13
+ * writer.addJson('package.json', packageJson);
14
+ *
15
+ * await writer.flush(); // Writes all files in parallel
16
+ * ```
17
+ */
18
+ import path from 'node:path';
19
+ import { ensureDir, writeFile, writeJson } from './fs.js';
20
+ // ============================================
21
+ // Implementation
22
+ // ============================================
23
+ /**
24
+ * Create a batch writer instance
25
+ */
26
+ export const createBatchWriter = (options = {}) => {
27
+ const { maxConcurrency = 10, baseDir = '', createDirs = true, onWrite, onError, } = options;
28
+ const operations = new Map();
29
+ /**
30
+ * Resolve path with base directory
31
+ */
32
+ const resolvePath = (filePath) => {
33
+ if (baseDir && !path.isAbsolute(filePath)) {
34
+ return path.join(baseDir, filePath);
35
+ }
36
+ return filePath;
37
+ };
38
+ /**
39
+ * Add a file to the batch
40
+ */
41
+ const add = (filePath, content) => {
42
+ const resolved = resolvePath(filePath);
43
+ operations.set(resolved, {
44
+ path: resolved,
45
+ content,
46
+ type: 'file',
47
+ });
48
+ return writer;
49
+ };
50
+ /**
51
+ * Add a JSON file to the batch
52
+ */
53
+ const addJson = (filePath, data) => {
54
+ const resolved = resolvePath(filePath);
55
+ operations.set(resolved, {
56
+ path: resolved,
57
+ content: data,
58
+ type: 'json',
59
+ });
60
+ return writer;
61
+ };
62
+ /**
63
+ * Add multiple files at once
64
+ */
65
+ const addMany = (files) => {
66
+ for (const [filePath, content] of Object.entries(files)) {
67
+ add(filePath, content);
68
+ }
69
+ return writer;
70
+ };
71
+ /**
72
+ * Get pending operations count
73
+ */
74
+ const pending = () => operations.size;
75
+ /**
76
+ * Clear all pending operations
77
+ */
78
+ const clear = () => {
79
+ operations.clear();
80
+ };
81
+ /**
82
+ * Check if a file is already queued
83
+ */
84
+ const has = (filePath) => {
85
+ const resolved = resolvePath(filePath);
86
+ return operations.has(resolved);
87
+ };
88
+ /**
89
+ * Execute a single write operation
90
+ */
91
+ const executeWrite = async (op) => {
92
+ try {
93
+ // Create directory if needed
94
+ if (createDirs) {
95
+ const dir = path.dirname(op.path);
96
+ await ensureDir(dir);
97
+ }
98
+ // Write file
99
+ if (op.type === 'json') {
100
+ await writeJson(op.path, op.content);
101
+ }
102
+ else {
103
+ await writeFile(op.path, op.content);
104
+ }
105
+ onWrite?.(op.path);
106
+ return { path: op.path, success: true };
107
+ }
108
+ catch (error) {
109
+ const errorMessage = error instanceof Error ? error.message : String(error);
110
+ onError?.(op.path, error instanceof Error ? error : new Error(errorMessage));
111
+ return { path: op.path, success: false, error: errorMessage };
112
+ }
113
+ };
114
+ /**
115
+ * Flush all pending writes with concurrency control
116
+ */
117
+ const flush = async () => {
118
+ const startTime = Date.now();
119
+ const written = [];
120
+ const failed = [];
121
+ const ops = Array.from(operations.values());
122
+ operations.clear();
123
+ // Process in batches with concurrency limit
124
+ for (let i = 0; i < ops.length; i += maxConcurrency) {
125
+ const batch = ops.slice(i, i + maxConcurrency);
126
+ const results = await Promise.all(batch.map(executeWrite));
127
+ for (const result of results) {
128
+ if (result.success) {
129
+ written.push(result.path);
130
+ }
131
+ else {
132
+ failed.push({ path: result.path, error: result.error || 'Unknown error' });
133
+ }
134
+ }
135
+ }
136
+ return {
137
+ success: failed.length === 0,
138
+ written,
139
+ failed,
140
+ duration: Date.now() - startTime,
141
+ };
142
+ };
143
+ const writer = {
144
+ add,
145
+ addJson,
146
+ addMany,
147
+ pending,
148
+ clear,
149
+ flush,
150
+ has,
151
+ };
152
+ return writer;
153
+ };
154
+ // ============================================
155
+ // Convenience Functions
156
+ // ============================================
157
+ /**
158
+ * Write multiple files in parallel (one-shot operation)
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * await writeFilesParallel({
163
+ * 'src/file1.ts': content1,
164
+ * 'src/file2.ts': content2,
165
+ * }, { baseDir: projectPath });
166
+ * ```
167
+ */
168
+ export const writeFilesParallel = async (files, options = {}) => {
169
+ const writer = createBatchWriter(options);
170
+ writer.addMany(files);
171
+ return writer.flush();
172
+ };
173
+ /**
174
+ * Write files and JSON in parallel
175
+ */
176
+ export const writeAllParallel = async (files, jsonFiles, options = {}) => {
177
+ const writer = createBatchWriter(options);
178
+ // Add regular files
179
+ for (const [filePath, content] of Object.entries(files)) {
180
+ writer.add(filePath, content);
181
+ }
182
+ // Add JSON files
183
+ for (const [filePath, data] of Object.entries(jsonFiles)) {
184
+ writer.addJson(filePath, data);
185
+ }
186
+ return writer.flush();
187
+ };
188
+ // ============================================
189
+ // Global Writer (for configurators)
190
+ // ============================================
191
+ let globalWriter = null;
192
+ /**
193
+ * Get or create the global batch writer
194
+ */
195
+ export const getGlobalWriter = (options) => {
196
+ if (!globalWriter) {
197
+ globalWriter = createBatchWriter(options);
198
+ }
199
+ return globalWriter;
200
+ };
201
+ /**
202
+ * Reset the global writer
203
+ */
204
+ export const resetGlobalWriter = () => {
205
+ globalWriter = null;
206
+ };
207
+ /**
208
+ * Queue a file for batch writing
209
+ */
210
+ export const queueFile = (filePath, content) => {
211
+ getGlobalWriter().add(filePath, content);
212
+ };
213
+ /**
214
+ * Queue a JSON file for batch writing
215
+ */
216
+ export const queueJson = (filePath, data) => {
217
+ getGlobalWriter().addJson(filePath, data);
218
+ };
219
+ /**
220
+ * Flush the global writer
221
+ */
222
+ export const flushGlobalWriter = async () => {
223
+ if (!globalWriter) {
224
+ return { success: true, written: [], failed: [], duration: 0 };
225
+ }
226
+ const result = await globalWriter.flush();
227
+ resetGlobalWriter();
228
+ return result;
229
+ };
230
+ // Default export
231
+ export default createBatchWriter;
232
+ //# sourceMappingURL=batch-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-writer.js","sourceRoot":"","sources":["../../src/utils/batch-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Simple in-memory cache for repeated operations
3
+ */
4
+ /**
5
+ * Configuration cache - caches expensive operations during project creation
6
+ */
7
+ declare class ConfigCache {
8
+ private cache;
9
+ private defaultTTL;
10
+ /**
11
+ * Get or create cached value
12
+ */
13
+ get<T>(key: string, factory: () => Promise<T>, ttl?: number): Promise<T>;
14
+ /**
15
+ * Get synchronous cached value
16
+ */
17
+ getSync<T>(key: string, factory: () => T, ttl?: number): T;
18
+ /**
19
+ * Check if key exists and is not expired
20
+ */
21
+ has(key: string, ttl?: number): boolean;
22
+ /**
23
+ * Set a value directly
24
+ */
25
+ set<T>(key: string, value: T): void;
26
+ /**
27
+ * Invalidate a specific key
28
+ */
29
+ invalidate(key: string): void;
30
+ /**
31
+ * Invalidate keys matching a pattern
32
+ */
33
+ invalidatePattern(pattern: string): void;
34
+ /**
35
+ * Clear all cached values
36
+ */
37
+ clear(): void;
38
+ /**
39
+ * Get cache stats
40
+ */
41
+ stats(): {
42
+ size: number;
43
+ keys: string[];
44
+ };
45
+ }
46
+ export declare const cache: ConfigCache;
47
+ export declare const getCached: <T>(key: string, factory: () => Promise<T>, ttl?: number) => Promise<T>;
48
+ export declare const getCachedSync: <T>(key: string, factory: () => T, ttl?: number) => T;
49
+ export declare const invalidateCache: (key: string) => void;
50
+ export declare const clearCache: () => void;
51
+ /**
52
+ * Memoize an async function
53
+ */
54
+ export declare const memoize: <T extends unknown[], R>(fn: (...args: T) => Promise<R>, keyGenerator?: (...args: T) => string) => ((...args: T) => Promise<R>);
55
+ /**
56
+ * Memoize a sync function
57
+ */
58
+ export declare const memoizeSync: <T extends unknown[], R>(fn: (...args: T) => R, keyGenerator?: (...args: T) => string) => ((...args: T) => R);
59
+ export {};
60
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,UAAU,CAAS;IAE3B;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAa9E;;OAEG;IACH,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC;IAa1D;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO;IAMvC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAInC;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASxC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,KAAK,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;CAM1C;AAGD,eAAO,MAAM,KAAK,aAAoB,CAAC;AAGvC,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,KAAK,MAAM,EAAE,SAAS,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,CAAC,CAE5F,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,KAAK,MAAM,EAAE,SAAS,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,CAE9E,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,IAE7C,CAAC;AAEF,eAAO,MAAM,UAAU,QAAO,IAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC5C,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9B,eAAe,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,MAAM,KACpC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAO7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAChD,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EACrB,eAAe,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,MAAM,KACpC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAOpB,CAAC"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Simple in-memory cache for repeated operations
3
+ */
4
+ /**
5
+ * Configuration cache - caches expensive operations during project creation
6
+ */
7
+ class ConfigCache {
8
+ cache = new Map();
9
+ defaultTTL = 30000; // 30 seconds
10
+ /**
11
+ * Get or create cached value
12
+ */
13
+ async get(key, factory, ttl) {
14
+ const entry = this.cache.get(key);
15
+ const now = Date.now();
16
+ if (entry && now - entry.timestamp < (ttl ?? this.defaultTTL)) {
17
+ return entry.value;
18
+ }
19
+ const value = await factory();
20
+ this.cache.set(key, { value, timestamp: now });
21
+ return value;
22
+ }
23
+ /**
24
+ * Get synchronous cached value
25
+ */
26
+ getSync(key, factory, ttl) {
27
+ const entry = this.cache.get(key);
28
+ const now = Date.now();
29
+ if (entry && now - entry.timestamp < (ttl ?? this.defaultTTL)) {
30
+ return entry.value;
31
+ }
32
+ const value = factory();
33
+ this.cache.set(key, { value, timestamp: now });
34
+ return value;
35
+ }
36
+ /**
37
+ * Check if key exists and is not expired
38
+ */
39
+ has(key, ttl) {
40
+ const entry = this.cache.get(key);
41
+ if (!entry)
42
+ return false;
43
+ return Date.now() - entry.timestamp < (ttl ?? this.defaultTTL);
44
+ }
45
+ /**
46
+ * Set a value directly
47
+ */
48
+ set(key, value) {
49
+ this.cache.set(key, { value, timestamp: Date.now() });
50
+ }
51
+ /**
52
+ * Invalidate a specific key
53
+ */
54
+ invalidate(key) {
55
+ this.cache.delete(key);
56
+ }
57
+ /**
58
+ * Invalidate keys matching a pattern
59
+ */
60
+ invalidatePattern(pattern) {
61
+ const regex = new RegExp(pattern);
62
+ for (const key of this.cache.keys()) {
63
+ if (regex.test(key)) {
64
+ this.cache.delete(key);
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Clear all cached values
70
+ */
71
+ clear() {
72
+ this.cache.clear();
73
+ }
74
+ /**
75
+ * Get cache stats
76
+ */
77
+ stats() {
78
+ return {
79
+ size: this.cache.size,
80
+ keys: [...this.cache.keys()],
81
+ };
82
+ }
83
+ }
84
+ // Singleton instance
85
+ export const cache = new ConfigCache();
86
+ // Helper functions
87
+ export const getCached = (key, factory, ttl) => {
88
+ return cache.get(key, factory, ttl);
89
+ };
90
+ export const getCachedSync = (key, factory, ttl) => {
91
+ return cache.getSync(key, factory, ttl);
92
+ };
93
+ export const invalidateCache = (key) => {
94
+ cache.invalidate(key);
95
+ };
96
+ export const clearCache = () => {
97
+ cache.clear();
98
+ };
99
+ /**
100
+ * Memoize an async function
101
+ */
102
+ export const memoize = (fn, keyGenerator) => {
103
+ const generateKey = keyGenerator ?? ((...args) => JSON.stringify(args));
104
+ return async (...args) => {
105
+ const key = `memoize:${fn.name}:${generateKey(...args)}`;
106
+ return cache.get(key, () => fn(...args));
107
+ };
108
+ };
109
+ /**
110
+ * Memoize a sync function
111
+ */
112
+ export const memoizeSync = (fn, keyGenerator) => {
113
+ const generateKey = keyGenerator ?? ((...args) => JSON.stringify(args));
114
+ return (...args) => {
115
+ const key = `memoize:${fn.name}:${generateKey(...args)}`;
116
+ return cache.getSync(key, () => fn(...args));
117
+ };
118
+ };
119
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { UserSelections } from '../types/index.js';
2
+ export declare const generateFileTree: (selections: UserSelections) => string;
3
+ //# sourceMappingURL=fileTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileTree.d.ts","sourceRoot":"","sources":["../../src/utils/fileTree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,eAAO,MAAM,gBAAgB,GAAI,YAAY,cAAc,KAAG,MAiF7D,CAAC"}
@@ -0,0 +1,71 @@
1
+ export const generateFileTree = (selections) => {
2
+ const tree = [];
3
+ const isTS = selections.variant.includes('ts');
4
+ const ext = isTS ? 'tsx' : 'jsx';
5
+ const configExt = isTS ? 'ts' : 'js';
6
+ // Root files
7
+ tree.push({ name: 'package.json' });
8
+ tree.push({ name: 'vite.config.' + configExt });
9
+ tree.push({ name: 'index.html' });
10
+ tree.push({ name: 'README.md' });
11
+ if (isTS) {
12
+ tree.push({ name: 'tsconfig.json' });
13
+ }
14
+ if (selections.styling === 'tailwind') {
15
+ tree.push({ name: 'tailwind.config.js' });
16
+ }
17
+ if (selections.ui === 'shadcn') {
18
+ tree.push({ name: 'components.json' });
19
+ }
20
+ // src folder
21
+ const srcChildren = [
22
+ { name: `main.${ext}` },
23
+ { name: `App.${ext}` },
24
+ { name: 'index.css' },
25
+ ];
26
+ // State management
27
+ if (selections.state === 'redux') {
28
+ srcChildren.push({
29
+ name: 'store/',
30
+ children: [
31
+ { name: 'store.' + configExt },
32
+ { name: 'hooks.' + configExt },
33
+ { name: 'counterSlice.' + configExt },
34
+ ],
35
+ });
36
+ }
37
+ // Shadcn utils
38
+ if (selections.ui === 'shadcn') {
39
+ srcChildren.push({
40
+ name: 'lib/',
41
+ children: [{ name: 'utils.' + configExt }],
42
+ });
43
+ }
44
+ // Structure-based folders
45
+ if (selections.structure === 'fsd') {
46
+ srcChildren.push({ name: 'app/', children: [] }, { name: 'pages/', children: [] }, { name: 'widgets/', children: [] }, { name: 'features/', children: [] }, { name: 'entities/', children: [] }, { name: 'shared/', children: [] });
47
+ }
48
+ else if (selections.structure === 'clean') {
49
+ srcChildren.push({ name: 'domain/', children: [] }, { name: 'application/', children: [] }, { name: 'infrastructure/', children: [] }, { name: 'presentation/', children: [] });
50
+ }
51
+ else {
52
+ srcChildren.push({ name: 'components/', children: [] }, { name: 'hooks/', children: [] }, { name: 'utils/', children: [] }, { name: 'assets/', children: [] });
53
+ }
54
+ tree.push({ name: 'src/', children: srcChildren });
55
+ // Render tree
56
+ return renderTree(tree);
57
+ };
58
+ const renderTree = (nodes, prefix = '') => {
59
+ let result = '';
60
+ nodes.forEach((node, index) => {
61
+ const isLast = index === nodes.length - 1;
62
+ const connector = isLast ? '└── ' : '├── ';
63
+ const childPrefix = isLast ? ' ' : '│ ';
64
+ result += `${prefix}${connector}${node.name}\n`;
65
+ if (node.children) {
66
+ result += renderTree(node.children, prefix + childPrefix);
67
+ }
68
+ });
69
+ return result;
70
+ };
71
+ //# sourceMappingURL=fileTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileTree.js","sourceRoot":"","sources":["../../src/utils/fileTree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ConfiguratorContext } from '../types/index.js';
2
+ export declare const pathExists: (filePath: string) => Promise<boolean>;
3
+ export declare const ensureDir: (dirPath: string) => Promise<void>;
4
+ export declare const readJson: <T = Record<string, unknown>>(filePath: string) => Promise<T>;
5
+ export declare const writeJson: (filePath: string, data: unknown, spaces?: number) => Promise<void>;
6
+ export declare const writeFile: (filePath: string, content: string) => Promise<void>;
7
+ export declare const remove: (filePath: string) => Promise<void>;
8
+ export declare const copy: (src: string, dest: string) => Promise<void>;
9
+ export declare const createProjectDir: (ctx: ConfiguratorContext) => Promise<void>;
10
+ export interface PackageJson {
11
+ name: string;
12
+ version: string;
13
+ dependencies?: Record<string, string>;
14
+ devDependencies?: Record<string, string>;
15
+ scripts?: Record<string, string>;
16
+ [key: string]: unknown;
17
+ }
18
+ export declare const getPackageJson: (ctx: ConfiguratorContext) => Promise<PackageJson>;
19
+ export declare const savePackageJson: (ctx: ConfiguratorContext, pkg: PackageJson) => Promise<void>;
20
+ export declare const addDependency: (pkg: PackageJson, name: string, version: string, isDev?: boolean) => void;
21
+ export declare const addScript: (pkg: PackageJson, name: string, command: string) => void;
22
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD,eAAO,MAAM,UAAU,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,OAAO,CAOlE,CAAC;AAGF,eAAO,MAAM,SAAS,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAE7D,CAAC;AAGF,eAAO,MAAM,QAAQ,GAAU,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,CAAC,CAGvF,CAAC;AAGF,eAAO,MAAM,SAAS,GAAU,UAAU,MAAM,EAAE,MAAM,OAAO,EAAE,eAAU,KAAG,OAAO,CAAC,IAAI,CAEzF,CAAC;AAGF,eAAO,MAAM,SAAS,GAAU,UAAU,MAAM,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAE/E,CAAC;AAGF,eAAO,MAAM,MAAM,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAE3D,CAAC;AAGF,eAAO,MAAM,IAAI,GAAU,KAAK,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAElE,CAAC;AAGF,eAAO,MAAM,gBAAgB,GAAU,KAAK,mBAAmB,KAAG,OAAO,CAAC,IAAI,CAG7E,CAAC;AAGF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,GAAU,KAAK,mBAAmB,KAAG,OAAO,CAAC,WAAW,CAclF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,KAAK,mBAAmB,EAAE,KAAK,WAAW,KAAG,OAAO,CAAC,IAAI,CAE9F,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,KAAK,WAAW,EAChB,MAAM,MAAM,EACZ,SAAS,MAAM,EACf,eAAa,KACZ,IAQF,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,KAAK,WAAW,EAAE,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,IAG3E,CAAC"}
@@ -0,0 +1,75 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ // Check if path exists
4
+ export const pathExists = async (filePath) => {
5
+ try {
6
+ await fs.access(filePath);
7
+ return true;
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ };
13
+ // Ensure directory exists
14
+ export const ensureDir = async (dirPath) => {
15
+ await fs.mkdir(dirPath, { recursive: true });
16
+ };
17
+ // Read JSON file
18
+ export const readJson = async (filePath) => {
19
+ const content = await fs.readFile(filePath, 'utf-8');
20
+ return JSON.parse(content);
21
+ };
22
+ // Write JSON file
23
+ export const writeJson = async (filePath, data, spaces = 2) => {
24
+ await fs.writeFile(filePath, JSON.stringify(data, null, spaces) + '\n');
25
+ };
26
+ // Write file
27
+ export const writeFile = async (filePath, content) => {
28
+ await fs.writeFile(filePath, content);
29
+ };
30
+ // Remove directory recursively
31
+ export const remove = async (filePath) => {
32
+ await fs.rm(filePath, { recursive: true, force: true });
33
+ };
34
+ // Copy file or directory
35
+ export const copy = async (src, dest) => {
36
+ await fs.cp(src, dest, { recursive: true });
37
+ };
38
+ // Create project directory
39
+ export const createProjectDir = async (ctx) => {
40
+ await ensureDir(ctx.projectPath);
41
+ await ensureDir(path.join(ctx.projectPath, 'src'));
42
+ };
43
+ export const getPackageJson = async (ctx) => {
44
+ const pkgPath = path.join(ctx.projectPath, 'package.json');
45
+ if (await pathExists(pkgPath)) {
46
+ return await readJson(pkgPath);
47
+ }
48
+ return {
49
+ name: ctx.selections.projectName,
50
+ version: '0.1.0',
51
+ private: true,
52
+ type: 'module',
53
+ dependencies: {},
54
+ devDependencies: {},
55
+ scripts: {},
56
+ };
57
+ };
58
+ export const savePackageJson = async (ctx, pkg) => {
59
+ await writeJson(path.join(ctx.projectPath, 'package.json'), pkg);
60
+ };
61
+ export const addDependency = (pkg, name, version, isDev = false) => {
62
+ if (isDev) {
63
+ pkg.devDependencies = pkg.devDependencies || {};
64
+ pkg.devDependencies[name] = version;
65
+ }
66
+ else {
67
+ pkg.dependencies = pkg.dependencies || {};
68
+ pkg.dependencies[name] = version;
69
+ }
70
+ };
71
+ export const addScript = (pkg, name, command) => {
72
+ pkg.scripts = pkg.scripts || {};
73
+ pkg.scripts[name] = command;
74
+ };
75
+ //# sourceMappingURL=fs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}