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,91 @@
1
+ import { ConfiguratorContext } from '../types/index.js';
2
+ import { PackageJson } from './fs.js';
3
+ export interface DependencyConfig {
4
+ dependencies?: Record<string, string>;
5
+ devDependencies?: Record<string, string>;
6
+ }
7
+ /**
8
+ * Add multiple dependencies at once
9
+ */
10
+ export declare const addDependencies: (ctx: ConfiguratorContext, config: DependencyConfig) => Promise<PackageJson>;
11
+ /**
12
+ * Add dependencies only if a condition is met
13
+ */
14
+ export declare const addDependenciesIf: (ctx: ConfiguratorContext, condition: boolean, config: DependencyConfig) => Promise<PackageJson | null>;
15
+ export interface FileConfig {
16
+ path: string;
17
+ content: string;
18
+ }
19
+ /**
20
+ * Create multiple files at once
21
+ */
22
+ export declare const createFiles: (ctx: ConfiguratorContext, files: FileConfig[]) => Promise<void>;
23
+ /**
24
+ * Create files from a record (path -> content)
25
+ */
26
+ export declare const createFilesFromRecord: (ctx: ConfiguratorContext, files: Record<string, string>) => Promise<void>;
27
+ /**
28
+ * Create a file only if it doesn't exist
29
+ */
30
+ export declare const createFileIfNotExists: (ctx: ConfiguratorContext, filePath: string, content: string) => Promise<boolean>;
31
+ /**
32
+ * Create multiple directories at once
33
+ */
34
+ export declare const createDirectories: (ctx: ConfiguratorContext, dirs: string[]) => Promise<void>;
35
+ /**
36
+ * Simple template replacement
37
+ */
38
+ export declare const template: (str: string, vars: Record<string, string>) => string;
39
+ /**
40
+ * Generate imports string from array
41
+ */
42
+ export declare const generateImports: (imports: Array<{
43
+ from: string;
44
+ imports: string[] | string;
45
+ default?: string;
46
+ }>) => string;
47
+ /**
48
+ * Skip configurator if selection is 'none'
49
+ */
50
+ export declare const skipIfNone: (ctx: ConfiguratorContext, key: keyof typeof ctx.selections) => boolean;
51
+ /**
52
+ * Get file extension based on variant
53
+ */
54
+ export declare const getExtension: (ctx: ConfiguratorContext) => {
55
+ ts: boolean;
56
+ ext: string;
57
+ configExt: string;
58
+ };
59
+ /**
60
+ * Create a standard configurator with common patterns
61
+ */
62
+ export interface StandardConfiguratorOptions {
63
+ /** Selection key to check */
64
+ selectionKey: string;
65
+ /** Config map: selection value -> config */
66
+ configs: Record<string, {
67
+ dependencies?: Record<string, string>;
68
+ devDependencies?: Record<string, string>;
69
+ files?: (ctx: ConfiguratorContext) => Record<string, string>;
70
+ directories?: string[];
71
+ setup?: (ctx: ConfiguratorContext) => Promise<void>;
72
+ }>;
73
+ }
74
+ export declare const createStandardConfigurator: (options: StandardConfiguratorOptions) => (ctx: ConfiguratorContext) => Promise<void>;
75
+ /**
76
+ * Execute function only if condition is true
77
+ */
78
+ export declare const doIf: <T>(condition: boolean, fn: () => Promise<T>) => Promise<T | null>;
79
+ /**
80
+ * Select value based on condition
81
+ */
82
+ export declare const selectIf: <T>(condition: boolean, trueValue: T, falseValue: T) => T;
83
+ /**
84
+ * Build array conditionally
85
+ */
86
+ export declare const buildArray: <T>(...items: Array<T | false | null | undefined>) => T[];
87
+ /**
88
+ * Build object conditionally
89
+ */
90
+ export declare const buildObject: <T extends Record<string, unknown>>(...entries: Array<[string, unknown] | false | null | undefined>) => T;
91
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,192 @@
1
+ import path from 'node:path';
2
+ import { addDependency, ensureDir, getPackageJson, savePackageJson, writeFile, } from './fs.js';
3
+ /**
4
+ * Add multiple dependencies at once
5
+ */
6
+ export const addDependencies = async (ctx, config) => {
7
+ const pkg = await getPackageJson(ctx);
8
+ if (config.dependencies) {
9
+ for (const [name, version] of Object.entries(config.dependencies)) {
10
+ addDependency(pkg, name, version, false);
11
+ }
12
+ }
13
+ if (config.devDependencies) {
14
+ for (const [name, version] of Object.entries(config.devDependencies)) {
15
+ addDependency(pkg, name, version, true);
16
+ }
17
+ }
18
+ await savePackageJson(ctx, pkg);
19
+ return pkg;
20
+ };
21
+ /**
22
+ * Add dependencies only if a condition is met
23
+ */
24
+ export const addDependenciesIf = async (ctx, condition, config) => {
25
+ if (!condition)
26
+ return null;
27
+ return addDependencies(ctx, config);
28
+ };
29
+ /**
30
+ * Create multiple files at once
31
+ */
32
+ export const createFiles = async (ctx, files) => {
33
+ await Promise.all(files.map(async (file) => {
34
+ const fullPath = path.join(ctx.projectPath, file.path);
35
+ await ensureDir(path.dirname(fullPath));
36
+ await writeFile(fullPath, file.content);
37
+ }));
38
+ };
39
+ /**
40
+ * Create files from a record (path -> content)
41
+ */
42
+ export const createFilesFromRecord = async (ctx, files) => {
43
+ const fileConfigs = Object.entries(files).map(([filePath, content]) => ({
44
+ path: filePath,
45
+ content,
46
+ }));
47
+ await createFiles(ctx, fileConfigs);
48
+ };
49
+ /**
50
+ * Create a file only if it doesn't exist
51
+ */
52
+ export const createFileIfNotExists = async (ctx, filePath, content) => {
53
+ const fullPath = path.join(ctx.projectPath, filePath);
54
+ const { pathExists } = await import('./fs.js');
55
+ if (await pathExists(fullPath)) {
56
+ return false;
57
+ }
58
+ await ensureDir(path.dirname(fullPath));
59
+ await writeFile(fullPath, content);
60
+ return true;
61
+ };
62
+ // ============================================
63
+ // Directory Helpers
64
+ // ============================================
65
+ /**
66
+ * Create multiple directories at once
67
+ */
68
+ export const createDirectories = async (ctx, dirs) => {
69
+ await Promise.all(dirs.map((dir) => ensureDir(path.join(ctx.projectPath, dir))));
70
+ };
71
+ // ============================================
72
+ // Template Helpers
73
+ // ============================================
74
+ /**
75
+ * Simple template replacement
76
+ */
77
+ export const template = (str, vars) => {
78
+ let result = str;
79
+ for (const [key, value] of Object.entries(vars)) {
80
+ result = result.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), value);
81
+ }
82
+ return result;
83
+ };
84
+ /**
85
+ * Generate imports string from array
86
+ */
87
+ export const generateImports = (imports) => {
88
+ return imports
89
+ .map(({ from, imports: imp, default: defaultImport }) => {
90
+ const parts = [];
91
+ if (defaultImport) {
92
+ parts.push(defaultImport);
93
+ }
94
+ if (Array.isArray(imp) && imp.length > 0) {
95
+ parts.push(`{ ${imp.join(', ')} }`);
96
+ }
97
+ else if (typeof imp === 'string' && imp) {
98
+ parts.push(`{ ${imp} }`);
99
+ }
100
+ return `import ${parts.join(', ')} from '${from}'`;
101
+ })
102
+ .join('\n');
103
+ };
104
+ // ============================================
105
+ // Configurator Utilities
106
+ // ============================================
107
+ /**
108
+ * Skip configurator if selection is 'none'
109
+ */
110
+ export const skipIfNone = (ctx, key) => {
111
+ return ctx.selections[key] === 'none';
112
+ };
113
+ /**
114
+ * Get file extension based on variant
115
+ */
116
+ export const getExtension = (ctx) => {
117
+ const isTypeScript = ctx.selections.variant.startsWith('ts');
118
+ return {
119
+ ts: isTypeScript,
120
+ ext: isTypeScript ? 'tsx' : 'jsx',
121
+ configExt: isTypeScript ? 'ts' : 'js',
122
+ };
123
+ };
124
+ export const createStandardConfigurator = (options) => {
125
+ return async (ctx) => {
126
+ const selectionValue = ctx.selections[options.selectionKey];
127
+ if (selectionValue === 'none')
128
+ return;
129
+ const config = options.configs[selectionValue];
130
+ if (!config)
131
+ return;
132
+ // Add dependencies
133
+ if (config.dependencies || config.devDependencies) {
134
+ await addDependencies(ctx, {
135
+ dependencies: config.dependencies,
136
+ devDependencies: config.devDependencies,
137
+ });
138
+ }
139
+ // Create directories
140
+ if (config.directories) {
141
+ await createDirectories(ctx, config.directories);
142
+ }
143
+ // Create files
144
+ if (config.files) {
145
+ const files = config.files(ctx);
146
+ await createFilesFromRecord(ctx, files);
147
+ }
148
+ // Run custom setup
149
+ if (config.setup) {
150
+ await config.setup(ctx);
151
+ }
152
+ };
153
+ };
154
+ // ============================================
155
+ // Conditional Helpers
156
+ // ============================================
157
+ /**
158
+ * Execute function only if condition is true
159
+ */
160
+ export const doIf = async (condition, fn) => {
161
+ if (!condition)
162
+ return null;
163
+ return fn();
164
+ };
165
+ /**
166
+ * Select value based on condition
167
+ */
168
+ export const selectIf = (condition, trueValue, falseValue) => {
169
+ return condition ? trueValue : falseValue;
170
+ };
171
+ /**
172
+ * Build array conditionally
173
+ */
174
+ export const buildArray = (...items) => {
175
+ return items.filter((item) => item !== false && item !== null && item !== undefined);
176
+ };
177
+ /**
178
+ * Build object conditionally
179
+ */
180
+ export const buildObject = (...entries) => {
181
+ const result = {};
182
+ for (const entry of entries) {
183
+ if (entry && Array.isArray(entry)) {
184
+ const [key, value] = entry;
185
+ if (value !== undefined && value !== null) {
186
+ result[key] = value;
187
+ }
188
+ }
189
+ }
190
+ return result;
191
+ };
192
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from './batch-writer.js';
2
+ export * from './cache.js';
3
+ export { generateFileTree } from './fileTree.js';
4
+ export * from './fs.js';
5
+ export * from './helpers.js';
6
+ export * from './progress.js';
7
+ export { createSpinner, spinner } from './spinner.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from './batch-writer.js';
2
+ export * from './cache.js';
3
+ export { generateFileTree } from './fileTree.js';
4
+ export * from './fs.js';
5
+ export * from './helpers.js';
6
+ export * from './progress.js';
7
+ export { createSpinner, spinner } from './spinner.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,85 @@
1
+ export interface ProgressBar {
2
+ /** Update progress by incrementing current step */
3
+ increment: (stepName?: string) => void;
4
+ /** Update progress to a specific value */
5
+ update: (current: number, stepName?: string) => void;
6
+ /** Mark progress as complete */
7
+ complete: (message?: string) => void;
8
+ /** Mark progress as failed */
9
+ fail: (message?: string) => void;
10
+ /** Get current progress percentage */
11
+ getPercentage: () => number;
12
+ }
13
+ export interface ProgressBarOptions {
14
+ /** Total number of steps */
15
+ total: number;
16
+ /** Width of the progress bar in characters */
17
+ width?: number;
18
+ /** Show percentage */
19
+ showPercentage?: boolean;
20
+ /** Show step count (e.g., "5/10") */
21
+ showStepCount?: boolean;
22
+ /** Custom complete character */
23
+ completeChar?: string;
24
+ /** Custom incomplete character */
25
+ incompleteChar?: string;
26
+ /** Color for the filled portion */
27
+ filledColor?: (str: string) => string;
28
+ /** Color for the empty portion */
29
+ emptyColor?: (str: string) => string;
30
+ }
31
+ /**
32
+ * Create a customizable progress bar
33
+ */
34
+ export declare const createProgressBar: (options: ProgressBarOptions) => ProgressBar;
35
+ export interface StepProgress {
36
+ /** Start a step */
37
+ start: (stepName: string) => void;
38
+ /** Complete current step successfully */
39
+ succeed: (message?: string) => void;
40
+ /** Fail current step */
41
+ fail: (message?: string) => void;
42
+ /** Skip current step */
43
+ skip: (reason?: string) => void;
44
+ /** Complete all steps */
45
+ complete: () => void;
46
+ }
47
+ export interface StepProgressOptions {
48
+ /** Total number of steps */
49
+ total: number;
50
+ /** Show step numbers */
51
+ showStepNumbers?: boolean;
52
+ }
53
+ /**
54
+ * Create a step-based progress indicator
55
+ */
56
+ export declare const createStepProgress: (options: StepProgressOptions) => StepProgress;
57
+ export interface SimpleProgress {
58
+ /** Show progress message */
59
+ log: (message: string) => void;
60
+ /** Show success message */
61
+ success: (message: string) => void;
62
+ /** Show error message */
63
+ error: (message: string) => void;
64
+ /** Show warning message */
65
+ warn: (message: string) => void;
66
+ /** Show info message */
67
+ info: (message: string) => void;
68
+ }
69
+ /**
70
+ * Create a simple progress logger
71
+ */
72
+ export declare const createSimpleProgress: () => SimpleProgress;
73
+ export interface Timer {
74
+ /** Get elapsed time in milliseconds */
75
+ elapsed: () => number;
76
+ /** Get formatted elapsed time string */
77
+ format: () => string;
78
+ /** Stop timer and return formatted time */
79
+ stop: () => string;
80
+ }
81
+ /**
82
+ * Create a simple timer
83
+ */
84
+ export declare const createTimer: () => Timer;
85
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,0CAA0C;IAC1C,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,gCAAgC;IAChC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,8BAA8B;IAC9B,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,sCAAsC;IACtC,aAAa,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACtC,kCAAkC;IAClC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACtC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,SAAS,kBAAkB,KAAG,WA2E/D,CAAC;AAMF,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,yCAAyC;IACzC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,wBAAwB;IACxB,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,wBAAwB;IACxB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,yBAAyB;IACzB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,mBAAmB,KAAG,YAsCjE,CAAC;AAMF,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,2BAA2B;IAC3B,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,yBAAyB;IACzB,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,2BAA2B;IAC3B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,wBAAwB;IACxB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAAO,cAsBvC,CAAC;AAMF,MAAM,WAAW,KAAK;IACpB,uCAAuC;IACvC,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,wCAAwC;IACxC,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,QAAO,KA0B9B,CAAC"}
@@ -0,0 +1,142 @@
1
+ import pc from 'picocolors';
2
+ /**
3
+ * Create a customizable progress bar
4
+ */
5
+ export const createProgressBar = (options) => {
6
+ const { total, width = 30, showPercentage = true, showStepCount = true, completeChar = '█', incompleteChar = '░', filledColor = pc.cyan, emptyColor = pc.dim, } = options;
7
+ let current = 0;
8
+ let currentStepName = '';
9
+ const render = () => {
10
+ const percentage = Math.round((current / total) * 100);
11
+ const filled = Math.round((current / total) * width);
12
+ const empty = width - filled;
13
+ const bar = filledColor(completeChar.repeat(filled)) + emptyColor(incompleteChar.repeat(empty));
14
+ let output = `\r${bar}`;
15
+ if (showPercentage) {
16
+ output += ` ${percentage.toString().padStart(3)}%`;
17
+ }
18
+ if (showStepCount) {
19
+ output += ` (${current}/${total})`;
20
+ }
21
+ if (currentStepName) {
22
+ output += ` ${pc.dim(currentStepName)}`;
23
+ }
24
+ // Clear the rest of the line
25
+ output += '\x1b[K';
26
+ process.stdout.write(output);
27
+ };
28
+ return {
29
+ increment: (stepName) => {
30
+ current = Math.min(current + 1, total);
31
+ currentStepName = stepName || '';
32
+ render();
33
+ },
34
+ update: (value, stepName) => {
35
+ current = Math.min(Math.max(0, value), total);
36
+ currentStepName = stepName || '';
37
+ render();
38
+ },
39
+ complete: (message) => {
40
+ current = total;
41
+ currentStepName = '';
42
+ render();
43
+ console.log();
44
+ if (message) {
45
+ console.log(pc.green(`✓ ${message}`));
46
+ }
47
+ },
48
+ fail: (message) => {
49
+ currentStepName = '';
50
+ console.log();
51
+ if (message) {
52
+ console.log(pc.red(`✗ ${message}`));
53
+ }
54
+ },
55
+ getPercentage: () => Math.round((current / total) * 100),
56
+ };
57
+ };
58
+ /**
59
+ * Create a step-based progress indicator
60
+ */
61
+ export const createStepProgress = (options) => {
62
+ const { total, showStepNumbers = true } = options;
63
+ let current = 0;
64
+ let currentStep = '';
65
+ const formatStep = () => {
66
+ if (showStepNumbers) {
67
+ return `[${current}/${total}]`;
68
+ }
69
+ return '';
70
+ };
71
+ return {
72
+ start: (stepName) => {
73
+ current++;
74
+ currentStep = stepName;
75
+ process.stdout.write(`${pc.cyan('●')} ${formatStep()} ${stepName}...`);
76
+ },
77
+ succeed: (message) => {
78
+ process.stdout.write(`\r${pc.green('✓')} ${formatStep()} ${message || currentStep}\x1b[K\n`);
79
+ },
80
+ fail: (message) => {
81
+ process.stdout.write(`\r${pc.red('✗')} ${formatStep()} ${message || currentStep}\x1b[K\n`);
82
+ },
83
+ skip: (reason) => {
84
+ const skipMsg = reason ? ` (${reason})` : '';
85
+ process.stdout.write(`\r${pc.yellow('○')} ${formatStep()} ${currentStep}${pc.dim(skipMsg)}\x1b[K\n`);
86
+ },
87
+ complete: () => {
88
+ console.log();
89
+ console.log(pc.green(`✓ All ${total} steps completed successfully!`));
90
+ },
91
+ };
92
+ };
93
+ /**
94
+ * Create a simple progress logger
95
+ */
96
+ export const createSimpleProgress = () => {
97
+ return {
98
+ log: (message) => {
99
+ console.log(` ${message}`);
100
+ },
101
+ success: (message) => {
102
+ console.log(`${pc.green('✓')} ${message}`);
103
+ },
104
+ error: (message) => {
105
+ console.log(`${pc.red('✗')} ${message}`);
106
+ },
107
+ warn: (message) => {
108
+ console.log(`${pc.yellow('⚠')} ${message}`);
109
+ },
110
+ info: (message) => {
111
+ console.log(`${pc.blue('ℹ')} ${message}`);
112
+ },
113
+ };
114
+ };
115
+ /**
116
+ * Create a simple timer
117
+ */
118
+ export const createTimer = () => {
119
+ const startTime = Date.now();
120
+ let endTime = null;
121
+ return {
122
+ elapsed: () => {
123
+ return (endTime || Date.now()) - startTime;
124
+ },
125
+ format: () => {
126
+ const ms = (endTime || Date.now()) - startTime;
127
+ if (ms < 1000) {
128
+ return `${ms}ms`;
129
+ }
130
+ return `${(ms / 1000).toFixed(2)}s`;
131
+ },
132
+ stop: () => {
133
+ endTime = Date.now();
134
+ const ms = endTime - startTime;
135
+ if (ms < 1000) {
136
+ return `${ms}ms`;
137
+ }
138
+ return `${(ms / 1000).toFixed(2)}s`;
139
+ },
140
+ };
141
+ };
142
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface Spinner {
2
+ start: (text: string) => void;
3
+ succeed: (text?: string) => void;
4
+ fail: (text?: string) => void;
5
+ stop: () => void;
6
+ }
7
+ export declare const createSpinner: () => Spinner;
8
+ export declare const spinner: (text: string) => Spinner;
9
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,eAAO,MAAM,aAAa,QAAO,OAkDhC,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,OAItC,CAAC"}
@@ -0,0 +1,56 @@
1
+ import pc from 'picocolors';
2
+ const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
3
+ const successMark = pc.green('✔');
4
+ const failMark = pc.red('✖');
5
+ export const createSpinner = () => {
6
+ let intervalId = null;
7
+ let frameIndex = 0;
8
+ let currentText = '';
9
+ const clearLine = () => {
10
+ process.stdout.write('\r\x1b[K');
11
+ };
12
+ const render = () => {
13
+ clearLine();
14
+ process.stdout.write(`${pc.cyan(frames[frameIndex])} ${currentText}`);
15
+ frameIndex = (frameIndex + 1) % frames.length;
16
+ };
17
+ return {
18
+ start: (text) => {
19
+ currentText = text;
20
+ frameIndex = 0;
21
+ if (intervalId)
22
+ clearInterval(intervalId);
23
+ intervalId = setInterval(render, 80);
24
+ render();
25
+ },
26
+ succeed: (text) => {
27
+ if (intervalId) {
28
+ clearInterval(intervalId);
29
+ intervalId = null;
30
+ }
31
+ clearLine();
32
+ console.log(`${successMark} ${text || currentText}`);
33
+ },
34
+ fail: (text) => {
35
+ if (intervalId) {
36
+ clearInterval(intervalId);
37
+ intervalId = null;
38
+ }
39
+ clearLine();
40
+ console.log(`${failMark} ${text || currentText}`);
41
+ },
42
+ stop: () => {
43
+ if (intervalId) {
44
+ clearInterval(intervalId);
45
+ intervalId = null;
46
+ }
47
+ clearLine();
48
+ },
49
+ };
50
+ };
51
+ export const spinner = (text) => {
52
+ const s = createSpinner();
53
+ s.start(text);
54
+ return s;
55
+ };
56
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAClE,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClC,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAS7B,MAAM,CAAC,MAAM,aAAa,GAAG,GAAY,EAAE;IACzC,IAAI,UAAU,GAA0C,IAAI,CAAC;IAC7D,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QACtE,UAAU,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE;YACtB,WAAW,GAAG,IAAI,CAAC;YACnB,UAAU,GAAG,CAAC,CAAC;YACf,IAAI,UAAU;gBAAE,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1C,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM,EAAE,CAAC;QACX,CAAC;QAED,OAAO,EAAE,CAAC,IAAa,EAAE,EAAE;YACzB,IAAI,UAAU,EAAE,CAAC;gBACf,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC1B,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,EAAE,CAAC,IAAa,EAAE,EAAE;YACtB,IAAI,UAAU,EAAE,CAAC;gBACf,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC1B,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,EAAE,GAAG,EAAE;YACT,IAAI,UAAU,EAAE,CAAC;gBACf,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC1B,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,SAAS,EAAE,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAW,EAAE;IAC/C,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;IAC1B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,CAAC,CAAC;AACX,CAAC,CAAC"}