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.
- package/LICENSE +21 -0
- package/README.md +185 -0
- package/dist/api/index.d.ts +196 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +390 -0
- package/dist/api/index.js.map +1 -0
- package/dist/bin/nexo.d.ts +3 -0
- package/dist/bin/nexo.d.ts.map +1 -0
- package/dist/bin/nexo.js +427 -0
- package/dist/bin/nexo.js.map +1 -0
- package/dist/configurators/core/framework.d.ts +3 -0
- package/dist/configurators/core/framework.d.ts.map +1 -0
- package/dist/configurators/core/framework.js +56 -0
- package/dist/configurators/core/framework.js.map +1 -0
- package/dist/configurators/core/index.d.ts +4 -0
- package/dist/configurators/core/index.d.ts.map +1 -0
- package/dist/configurators/core/index.js +4 -0
- package/dist/configurators/core/index.js.map +1 -0
- package/dist/configurators/core/language.d.ts +3 -0
- package/dist/configurators/core/language.d.ts.map +1 -0
- package/dist/configurators/core/language.js +59 -0
- package/dist/configurators/core/language.js.map +1 -0
- package/dist/configurators/core/variant.d.ts +3 -0
- package/dist/configurators/core/variant.d.ts.map +1 -0
- package/dist/configurators/core/variant.js +22 -0
- package/dist/configurators/core/variant.js.map +1 -0
- package/dist/configurators/index.d.ts +5 -0
- package/dist/configurators/index.d.ts.map +1 -0
- package/dist/configurators/index.js +6 -0
- package/dist/configurators/index.js.map +1 -0
- package/dist/configurators/project/auth.d.ts +3 -0
- package/dist/configurators/project/auth.d.ts.map +1 -0
- package/dist/configurators/project/auth.js +82 -0
- package/dist/configurators/project/auth.js.map +1 -0
- package/dist/configurators/project/cicd.d.ts +30 -0
- package/dist/configurators/project/cicd.d.ts.map +1 -0
- package/dist/configurators/project/cicd.js +289 -0
- package/dist/configurators/project/cicd.js.map +1 -0
- package/dist/configurators/project/i18n.d.ts +3 -0
- package/dist/configurators/project/i18n.d.ts.map +1 -0
- package/dist/configurators/project/i18n.js +67 -0
- package/dist/configurators/project/i18n.js.map +1 -0
- package/dist/configurators/project/index.d.ts +6 -0
- package/dist/configurators/project/index.d.ts.map +1 -0
- package/dist/configurators/project/index.js +6 -0
- package/dist/configurators/project/index.js.map +1 -0
- package/dist/configurators/project/mandatory.d.ts +3 -0
- package/dist/configurators/project/mandatory.d.ts.map +1 -0
- package/dist/configurators/project/mandatory.js +167 -0
- package/dist/configurators/project/mandatory.js.map +1 -0
- package/dist/configurators/project/structure.d.ts +3 -0
- package/dist/configurators/project/structure.d.ts.map +1 -0
- package/dist/configurators/project/structure.js +34 -0
- package/dist/configurators/project/structure.js.map +1 -0
- package/dist/configurators/state/dataFetching.d.ts +3 -0
- package/dist/configurators/state/dataFetching.d.ts.map +1 -0
- package/dist/configurators/state/dataFetching.js +23 -0
- package/dist/configurators/state/dataFetching.js.map +1 -0
- package/dist/configurators/state/forms.d.ts +3 -0
- package/dist/configurators/state/forms.d.ts.map +1 -0
- package/dist/configurators/state/forms.js +35 -0
- package/dist/configurators/state/forms.js.map +1 -0
- package/dist/configurators/state/index.d.ts +5 -0
- package/dist/configurators/state/index.d.ts.map +1 -0
- package/dist/configurators/state/index.js +5 -0
- package/dist/configurators/state/index.js.map +1 -0
- package/dist/configurators/state/routing.d.ts +3 -0
- package/dist/configurators/state/routing.d.ts.map +1 -0
- package/dist/configurators/state/routing.js +23 -0
- package/dist/configurators/state/routing.js.map +1 -0
- package/dist/configurators/state/state.d.ts +3 -0
- package/dist/configurators/state/state.d.ts.map +1 -0
- package/dist/configurators/state/state.js +91 -0
- package/dist/configurators/state/state.js.map +1 -0
- package/dist/configurators/styling/icons.d.ts +3 -0
- package/dist/configurators/styling/icons.d.ts.map +1 -0
- package/dist/configurators/styling/icons.js +27 -0
- package/dist/configurators/styling/icons.js.map +1 -0
- package/dist/configurators/styling/index.d.ts +4 -0
- package/dist/configurators/styling/index.d.ts.map +1 -0
- package/dist/configurators/styling/index.js +4 -0
- package/dist/configurators/styling/index.js.map +1 -0
- package/dist/configurators/styling/styling.d.ts +3 -0
- package/dist/configurators/styling/styling.d.ts.map +1 -0
- package/dist/configurators/styling/styling.js +62 -0
- package/dist/configurators/styling/styling.js.map +1 -0
- package/dist/configurators/styling/ui.d.ts +3 -0
- package/dist/configurators/styling/ui.d.ts.map +1 -0
- package/dist/configurators/styling/ui.js +188 -0
- package/dist/configurators/styling/ui.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lazy-loader.d.ts +57 -0
- package/dist/core/lazy-loader.d.ts.map +1 -0
- package/dist/core/lazy-loader.js +231 -0
- package/dist/core/lazy-loader.js.map +1 -0
- package/dist/core/parallel.d.ts +29 -0
- package/dist/core/parallel.d.ts.map +1 -0
- package/dist/core/parallel.js +127 -0
- package/dist/core/parallel.js.map +1 -0
- package/dist/core/presets.d.ts +10 -0
- package/dist/core/presets.d.ts.map +1 -0
- package/dist/core/presets.js +73 -0
- package/dist/core/presets.js.map +1 -0
- package/dist/core/prompts/core.d.ts +18 -0
- package/dist/core/prompts/core.d.ts.map +1 -0
- package/dist/core/prompts/core.js +420 -0
- package/dist/core/prompts/core.js.map +1 -0
- package/dist/core/prompts/filter.d.ts +34 -0
- package/dist/core/prompts/filter.d.ts.map +1 -0
- package/dist/core/prompts/filter.js +48 -0
- package/dist/core/prompts/filter.js.map +1 -0
- package/dist/core/prompts/index.d.ts +10 -0
- package/dist/core/prompts/index.d.ts.map +1 -0
- package/dist/core/prompts/index.js +16 -0
- package/dist/core/prompts/index.js.map +1 -0
- package/dist/core/prompts/optional.d.ts +15 -0
- package/dist/core/prompts/optional.d.ts.map +1 -0
- package/dist/core/prompts/optional.js +228 -0
- package/dist/core/prompts/optional.js.map +1 -0
- package/dist/core/prompts/utils.d.ts +37 -0
- package/dist/core/prompts/utils.d.ts.map +1 -0
- package/dist/core/prompts/utils.js +72 -0
- package/dist/core/prompts/utils.js.map +1 -0
- package/dist/core/prompts.d.ts +6 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +6 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/setup.d.ts +28 -0
- package/dist/core/setup.d.ts.map +1 -0
- package/dist/core/setup.js +96 -0
- package/dist/core/setup.js.map +1 -0
- package/dist/core/wizard.d.ts +39 -0
- package/dist/core/wizard.d.ts.map +1 -0
- package/dist/core/wizard.js +259 -0
- package/dist/core/wizard.js.map +1 -0
- package/dist/errors/index.d.ts +67 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +253 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/messages.d.ts +56 -0
- package/dist/errors/messages.d.ts.map +1 -0
- package/dist/errors/messages.js +234 -0
- package/dist/errors/messages.js.map +1 -0
- package/dist/generators/index.d.ts +86 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +441 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/index.d.ts +48 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +49 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +38 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +229 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +32 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +220 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/types.d.ts +186 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +5 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/security/index.d.ts +59 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +230 -0
- package/dist/security/index.js.map +1 -0
- package/dist/templates/entry.d.ts +9 -0
- package/dist/templates/entry.d.ts.map +1 -0
- package/dist/templates/entry.js +24 -0
- package/dist/templates/entry.js.map +1 -0
- package/dist/templates/index.d.ts +7 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +10 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/main.d.ts +6 -0
- package/dist/templates/main.d.ts.map +1 -0
- package/dist/templates/main.js +72 -0
- package/dist/templates/main.js.map +1 -0
- package/dist/templates/readme.d.ts +3 -0
- package/dist/templates/readme.d.ts.map +1 -0
- package/dist/templates/readme.js +127 -0
- package/dist/templates/readme.js.map +1 -0
- package/dist/templates/styles.d.ts +6 -0
- package/dist/templates/styles.d.ts.map +1 -0
- package/dist/templates/styles.js +212 -0
- package/dist/templates/styles.js.map +1 -0
- package/dist/templates/welcome.d.ts +10 -0
- package/dist/templates/welcome.d.ts.map +1 -0
- package/dist/templates/welcome.js +322 -0
- package/dist/templates/welcome.js.map +1 -0
- package/dist/types/index.d.ts +46 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/batch-writer.d.ts +101 -0
- package/dist/utils/batch-writer.d.ts.map +1 -0
- package/dist/utils/batch-writer.js +232 -0
- package/dist/utils/batch-writer.js.map +1 -0
- package/dist/utils/cache.d.ts +60 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +119 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/fileTree.d.ts +3 -0
- package/dist/utils/fileTree.d.ts.map +1 -0
- package/dist/utils/fileTree.js +71 -0
- package/dist/utils/fileTree.js.map +1 -0
- package/dist/utils/fs.d.ts +22 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +75 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/helpers.d.ts +91 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +192 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/progress.d.ts +85 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +142 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/spinner.d.ts +9 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +56 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/validation/index.d.ts +63 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +262 -0
- package/dist/validation/index.js.map +1 -0
- 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 @@
|
|
|
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"}
|
package/dist/utils/fs.js
ADDED
|
@@ -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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"}
|