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,186 @@
1
+ /**
2
+ * NEXO Plugin System - Type Definitions
3
+ */
4
+ import type { ConfiguratorContext, PromptConfig, PromptOption, UserSelections } from '../types/index.js';
5
+ /**
6
+ * Hook called before project setup begins
7
+ */
8
+ export type BeforeSetupHook = (ctx: ConfiguratorContext) => Promise<void> | void;
9
+ /**
10
+ * Hook called after project setup completes
11
+ */
12
+ export type AfterSetupHook = (ctx: ConfiguratorContext) => Promise<void> | void;
13
+ /**
14
+ * Hook called before each configurator runs
15
+ */
16
+ export type BeforeConfiguratorHook = (ctx: ConfiguratorContext, configuratorName: string) => Promise<void> | void;
17
+ /**
18
+ * Hook called after each configurator completes
19
+ */
20
+ export type AfterConfiguratorHook = (ctx: ConfiguratorContext, configuratorName: string) => Promise<void> | void;
21
+ /**
22
+ * Hook to modify selections before they are used
23
+ */
24
+ export type ModifySelectionsHook = (selections: UserSelections) => UserSelections | Promise<UserSelections>;
25
+ /**
26
+ * Custom configurator function
27
+ */
28
+ export type PluginConfigurator = (ctx: ConfiguratorContext) => Promise<void>;
29
+ /**
30
+ * Plugin prompt configuration
31
+ */
32
+ export interface PluginPrompt {
33
+ /** Prompt configuration */
34
+ config: PromptConfig;
35
+ /** When to show this prompt (after which prompt) */
36
+ after?: string;
37
+ /** Condition to show the prompt */
38
+ condition?: (selections: Partial<UserSelections>) => boolean;
39
+ }
40
+ /**
41
+ * Plugin option extension
42
+ */
43
+ export interface PluginOptionExtension {
44
+ /** Prompt name to extend */
45
+ promptName: string;
46
+ /** Options to add */
47
+ options: PromptOption[];
48
+ /** Whether to replace existing options */
49
+ replace?: boolean;
50
+ }
51
+ /**
52
+ * NEXO Plugin interface
53
+ */
54
+ export interface NexoPlugin {
55
+ /** Plugin name (should be unique) */
56
+ name: string;
57
+ /** Plugin version (semver) */
58
+ version: string;
59
+ /** Plugin description */
60
+ description?: string;
61
+ /** Plugin author */
62
+ author?: string;
63
+ /** Plugin homepage/repository */
64
+ homepage?: string;
65
+ /**
66
+ * Called before project setup begins
67
+ */
68
+ beforeSetup?: BeforeSetupHook;
69
+ /**
70
+ * Called after project setup completes
71
+ */
72
+ afterSetup?: AfterSetupHook;
73
+ /**
74
+ * Called before each configurator runs
75
+ */
76
+ beforeConfigurator?: BeforeConfiguratorHook;
77
+ /**
78
+ * Called after each configurator completes
79
+ */
80
+ afterConfigurator?: AfterConfiguratorHook;
81
+ /**
82
+ * Modify selections before they are used
83
+ */
84
+ modifySelections?: ModifySelectionsHook;
85
+ /**
86
+ * Custom prompts to add
87
+ */
88
+ prompts?: PluginPrompt[];
89
+ /**
90
+ * Custom configurators to run
91
+ */
92
+ configurators?: Record<string, PluginConfigurator>;
93
+ /**
94
+ * Extend existing prompt options
95
+ */
96
+ extendOptions?: PluginOptionExtension[];
97
+ /**
98
+ * Dependencies required by this plugin
99
+ */
100
+ dependencies?: Record<string, string>;
101
+ /**
102
+ * Dev dependencies required by this plugin
103
+ */
104
+ devDependencies?: Record<string, string>;
105
+ }
106
+ /**
107
+ * Plugin load result
108
+ */
109
+ export interface PluginLoadResult {
110
+ success: boolean;
111
+ plugin?: NexoPlugin;
112
+ error?: string;
113
+ }
114
+ /**
115
+ * Plugin registry
116
+ */
117
+ export interface PluginRegistry {
118
+ plugins: Map<string, NexoPlugin>;
119
+ hooks: {
120
+ beforeSetup: BeforeSetupHook[];
121
+ afterSetup: AfterSetupHook[];
122
+ beforeConfigurator: BeforeConfiguratorHook[];
123
+ afterConfigurator: AfterConfiguratorHook[];
124
+ modifySelections: ModifySelectionsHook[];
125
+ };
126
+ }
127
+ /**
128
+ * Plugin configuration file (.nexorc.json)
129
+ */
130
+ export interface NexoConfig {
131
+ /** Plugins to load */
132
+ plugins?: string[];
133
+ /** Default selections */
134
+ defaults?: Partial<UserSelections>;
135
+ /** Custom configurator paths */
136
+ customConfigurators?: Array<{
137
+ name: string;
138
+ path: string;
139
+ after?: string;
140
+ }>;
141
+ /** Extends another config */
142
+ extends?: string;
143
+ }
144
+ /**
145
+ * Extended context available to plugins
146
+ */
147
+ export interface PluginContext extends ConfiguratorContext {
148
+ /** Plugin manager instance */
149
+ pluginManager: PluginManager;
150
+ /** Add a dependency */
151
+ addDependency: (name: string, version: string) => void;
152
+ /** Add a dev dependency */
153
+ addDevDependency: (name: string, version: string) => void;
154
+ /** Register a file to be created */
155
+ addFile: (path: string, content: string) => void;
156
+ /** Log a message */
157
+ log: (message: string) => void;
158
+ /** Log a warning */
159
+ warn: (message: string) => void;
160
+ }
161
+ /**
162
+ * Plugin manager interface
163
+ */
164
+ export interface PluginManager {
165
+ /** Load a plugin */
166
+ load: (source: string) => Promise<PluginLoadResult>;
167
+ /** Register a plugin */
168
+ register: (plugin: NexoPlugin) => void;
169
+ /** Unregister a plugin */
170
+ unregister: (name: string) => void;
171
+ /** Get all registered plugins */
172
+ getPlugins: () => NexoPlugin[];
173
+ /** Get a plugin by name */
174
+ getPlugin: (name: string) => NexoPlugin | undefined;
175
+ /** Execute beforeSetup hooks */
176
+ executeBeforeSetup: (ctx: ConfiguratorContext) => Promise<void>;
177
+ /** Execute afterSetup hooks */
178
+ executeAfterSetup: (ctx: ConfiguratorContext) => Promise<void>;
179
+ /** Execute beforeConfigurator hooks */
180
+ executeBeforeConfigurator: (ctx: ConfiguratorContext, name: string) => Promise<void>;
181
+ /** Execute afterConfigurator hooks */
182
+ executeAfterConfigurator: (ctx: ConfiguratorContext, name: string) => Promise<void>;
183
+ /** Apply selection modifiers */
184
+ applyModifySelections: (selections: UserSelections) => Promise<UserSelections>;
185
+ }
186
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * NEXO Plugin System - Type Definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,59 @@
1
+ export { SecurityError } from '../errors/index.js';
2
+ /**
3
+ * Sanitize file path to prevent directory traversal
4
+ */
5
+ export declare const sanitizePath: (inputPath: string) => string;
6
+ /**
7
+ * Sanitize string for use in generated code
8
+ */
9
+ export declare const sanitizeForCode: (input: string) => string;
10
+ /**
11
+ * Validate that a path is safe to write to
12
+ */
13
+ export declare const validateTargetPath: (targetPath: string, basePath?: string) => void;
14
+ /**
15
+ * Check if path is within allowed boundaries
16
+ */
17
+ export declare const isPathSafe: (targetPath: string, basePath?: string) => boolean;
18
+ /**
19
+ * Validate package name for npm
20
+ */
21
+ export declare const validatePackageName: (name: string) => boolean;
22
+ /**
23
+ * Validate dependency entry
24
+ */
25
+ export declare const validateDependency: (name: string, version: string) => void;
26
+ /**
27
+ * Scan content for potentially dangerous patterns
28
+ */
29
+ export declare const scanContent: (content: string) => {
30
+ safe: boolean;
31
+ warnings: string[];
32
+ };
33
+ /**
34
+ * Validate file content before writing
35
+ */
36
+ export declare const validateFileContent: (content: string, options?: {
37
+ strict?: boolean;
38
+ }) => void;
39
+ /**
40
+ * Check if running in a safe environment
41
+ */
42
+ export declare const validateEnvironment: () => {
43
+ safe: boolean;
44
+ warnings: string[];
45
+ };
46
+ /**
47
+ * Safely join paths, preventing directory traversal
48
+ */
49
+ export declare const safeJoin: (basePath: string, ...segments: string[]) => string;
50
+ /**
51
+ * Create a safe context for file operations
52
+ */
53
+ export declare const createSafeContext: (basePath: string) => {
54
+ basePath: string;
55
+ join: (...segments: string[]) => string;
56
+ validate: (targetPath: string) => void;
57
+ isWithinBase: (targetPath: string) => boolean;
58
+ };
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQnD;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,KAAG,MAMhD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAK/C,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,YAAY,MAAM,EAAE,WAAW,MAAM,KAAG,IAoD1E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,YAAY,MAAM,EAAE,WAAW,MAAM,KAAG,OAOlE,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,OAoBlD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,IAiBlE,CAAC;AAsBF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAahF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,UAAS;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,KACjC,IAeF,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAO;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAoBzE,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,UAAU,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,KAAG,MAgBlE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM;;wBAM1B,MAAM,EAAE;2BAEL,MAAM;+BAIF,MAAM;CAKpC,CAAC"}
@@ -0,0 +1,230 @@
1
+ import path from 'node:path';
2
+ import pc from 'picocolors';
3
+ import { SecurityError } from '../errors/index.js';
4
+ // Re-export SecurityError for convenience
5
+ export { SecurityError } from '../errors/index.js';
6
+ // ============================================
7
+ // Input Sanitization
8
+ // ============================================
9
+ // Note: sanitizeProjectName is in validation/index.ts
10
+ /**
11
+ * Sanitize file path to prevent directory traversal
12
+ */
13
+ export const sanitizePath = (inputPath) => {
14
+ return inputPath
15
+ .replace(/\.\./g, '')
16
+ .replace(/\/+/g, '/')
17
+ .replace(/\\+/g, '/')
18
+ .replace(/^\//, '');
19
+ };
20
+ /**
21
+ * Sanitize string for use in generated code
22
+ */
23
+ export const sanitizeForCode = (input) => {
24
+ return input
25
+ .replace(/[<>]/g, '')
26
+ .replace(/[`${}]/g, '')
27
+ .replace(/['"\\/]/g, (char) => `\\${char}`);
28
+ };
29
+ // ============================================
30
+ // Path Validation
31
+ // ============================================
32
+ /**
33
+ * Validate that a path is safe to write to
34
+ */
35
+ export const validateTargetPath = (targetPath, basePath) => {
36
+ const resolved = path.resolve(targetPath);
37
+ const base = basePath ? path.resolve(basePath) : process.cwd();
38
+ // Check for directory traversal
39
+ if (!resolved.startsWith(base)) {
40
+ throw new SecurityError('Cannot write outside the base directory', { targetPath, basePath: base, resolvedPath: resolved });
41
+ }
42
+ // Check for system directories (cross-platform)
43
+ const forbiddenPaths = [
44
+ // Unix
45
+ '/etc',
46
+ '/usr',
47
+ '/bin',
48
+ '/sbin',
49
+ '/var',
50
+ '/root',
51
+ '/home',
52
+ // Windows
53
+ 'C:\\Windows',
54
+ 'C:\\Program Files',
55
+ 'C:\\Program Files (x86)',
56
+ 'C:\\ProgramData',
57
+ 'C:\\Users\\Default',
58
+ ];
59
+ const normalizedResolved = resolved.replace(/\\/g, '/').toLowerCase();
60
+ for (const forbidden of forbiddenPaths) {
61
+ const normalizedForbidden = forbidden.replace(/\\/g, '/').toLowerCase();
62
+ if (normalizedResolved.startsWith(normalizedForbidden)) {
63
+ throw new SecurityError('Cannot write to system directories', { targetPath: resolved, forbiddenPath: forbidden });
64
+ }
65
+ }
66
+ // Check for hidden directories (starting with .)
67
+ const pathParts = resolved.split(path.sep);
68
+ const hasHiddenParent = pathParts.some((part, index) => index > 0 && part.startsWith('.') && part !== '.' && part !== '..');
69
+ if (hasHiddenParent) {
70
+ // Just warn, don't block
71
+ console.warn(pc.yellow('Warning: Writing to a hidden directory'));
72
+ }
73
+ };
74
+ /**
75
+ * Check if path is within allowed boundaries
76
+ */
77
+ export const isPathSafe = (targetPath, basePath) => {
78
+ try {
79
+ validateTargetPath(targetPath, basePath);
80
+ return true;
81
+ }
82
+ catch {
83
+ return false;
84
+ }
85
+ };
86
+ // ============================================
87
+ // Dependency Validation
88
+ // ============================================
89
+ /**
90
+ * Validate package name for npm
91
+ */
92
+ export const validatePackageName = (name) => {
93
+ // npm package naming rules
94
+ const validNameRegex = /^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
95
+ if (!validNameRegex.test(name)) {
96
+ return false;
97
+ }
98
+ // Check for suspicious patterns
99
+ const suspicious = [
100
+ 'eval',
101
+ 'exec',
102
+ 'spawn',
103
+ 'child_process',
104
+ 'require(',
105
+ 'import(',
106
+ ];
107
+ const lowerName = name.toLowerCase();
108
+ return !suspicious.some((s) => lowerName.includes(s));
109
+ };
110
+ /**
111
+ * Validate dependency entry
112
+ */
113
+ export const validateDependency = (name, version) => {
114
+ if (!validatePackageName(name)) {
115
+ throw new SecurityError(`Invalid or suspicious package name: ${name}`, { packageName: name });
116
+ }
117
+ // Validate version format (semver-like)
118
+ const validVersionRegex = /^[\^~]?\d+(\.\d+)*(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$|^latest$|^next$|^\*$/;
119
+ if (!validVersionRegex.test(version)) {
120
+ throw new SecurityError(`Invalid version format: ${version}`, { packageName: name, version });
121
+ }
122
+ };
123
+ // ============================================
124
+ // Content Validation
125
+ // ============================================
126
+ /**
127
+ * Patterns that might indicate dangerous code
128
+ */
129
+ const DANGEROUS_PATTERNS = [
130
+ { pattern: /eval\s*\(/g, name: 'eval()' },
131
+ { pattern: /new\s+Function\s*\(/g, name: 'new Function()' },
132
+ { pattern: /child_process/g, name: 'child_process' },
133
+ { pattern: /\.exec\s*\(/g, name: '.exec()' },
134
+ { pattern: /\.spawn\s*\(/g, name: '.spawn()' },
135
+ { pattern: /fs\.(rm|rmdir|unlink)\s*\(/g, name: 'fs.rm/rmdir/unlink' },
136
+ { pattern: /process\.exit\s*\(/g, name: 'process.exit()' },
137
+ { pattern: /require\s*\(\s*['"`]child_process/g, name: 'require child_process' },
138
+ { pattern: /__proto__/g, name: '__proto__' },
139
+ { pattern: /constructor\s*\[\s*['"`]prototype/g, name: 'prototype pollution' },
140
+ ];
141
+ /**
142
+ * Scan content for potentially dangerous patterns
143
+ */
144
+ export const scanContent = (content) => {
145
+ const warnings = [];
146
+ for (const { pattern, name } of DANGEROUS_PATTERNS) {
147
+ if (pattern.test(content)) {
148
+ warnings.push(`Potentially dangerous pattern detected: ${name}`);
149
+ }
150
+ }
151
+ return {
152
+ safe: warnings.length === 0,
153
+ warnings,
154
+ };
155
+ };
156
+ /**
157
+ * Validate file content before writing
158
+ */
159
+ export const validateFileContent = (content, options = {}) => {
160
+ const { safe, warnings } = scanContent(content);
161
+ if (!safe) {
162
+ if (options.strict) {
163
+ throw new SecurityError('Dangerous code patterns detected in file content', { warnings });
164
+ }
165
+ else {
166
+ warnings.forEach((w) => {
167
+ console.warn(pc.yellow(`⚠ ${w}`));
168
+ });
169
+ }
170
+ }
171
+ };
172
+ // ============================================
173
+ // Environment Validation
174
+ // ============================================
175
+ /**
176
+ * Check if running in a safe environment
177
+ */
178
+ export const validateEnvironment = () => {
179
+ const warnings = [];
180
+ // Check for root/admin (Unix)
181
+ if (process.getuid && process.getuid() === 0) {
182
+ warnings.push('Running as root is not recommended');
183
+ }
184
+ // Check for suspicious environment variables
185
+ const suspiciousEnvVars = ['LD_PRELOAD', 'LD_LIBRARY_PATH', 'NODE_OPTIONS'];
186
+ for (const envVar of suspiciousEnvVars) {
187
+ if (process.env[envVar]) {
188
+ warnings.push(`Suspicious environment variable set: ${envVar}`);
189
+ }
190
+ }
191
+ return {
192
+ safe: warnings.length === 0,
193
+ warnings,
194
+ };
195
+ };
196
+ // ============================================
197
+ // Safe Wrappers
198
+ // ============================================
199
+ /**
200
+ * Safely join paths, preventing directory traversal
201
+ */
202
+ export const safeJoin = (basePath, ...segments) => {
203
+ const sanitizedSegments = segments.map(sanitizePath);
204
+ const result = path.join(basePath, ...sanitizedSegments);
205
+ // Ensure result is within base path
206
+ const resolvedBase = path.resolve(basePath);
207
+ const resolvedResult = path.resolve(result);
208
+ if (!resolvedResult.startsWith(resolvedBase)) {
209
+ throw new SecurityError('Path traversal detected', { basePath, segments, result });
210
+ }
211
+ return result;
212
+ };
213
+ /**
214
+ * Create a safe context for file operations
215
+ */
216
+ export const createSafeContext = (basePath) => {
217
+ const resolvedBase = path.resolve(basePath);
218
+ return {
219
+ basePath: resolvedBase,
220
+ join: (...segments) => safeJoin(resolvedBase, ...segments),
221
+ validate: (targetPath) => {
222
+ validateTargetPath(targetPath, resolvedBase);
223
+ },
224
+ isWithinBase: (targetPath) => {
225
+ const resolved = path.resolve(targetPath);
226
+ return resolved.startsWith(resolvedBase);
227
+ },
228
+ };
229
+ };
230
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ConfiguratorContext } from '../types/index.js';
2
+ /**
3
+ * Create all entry files (main.tsx, App.tsx, vite-env.d.ts)
4
+ */
5
+ export declare const createEntryFiles: (ctx: ConfiguratorContext) => Promise<void>;
6
+ export { createMainFile } from './main.js';
7
+ export { createAppCss } from './styles.js';
8
+ export { createAppFile, createWelcomePage } from './welcome.js';
9
+ //# sourceMappingURL=entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/templates/entry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAK7D;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAU,KAAK,mBAAmB,KAAG,OAAO,CAAC,IAAI,CAS7E,CAAC;AAGF,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Entry files generator - Coordinates main.tsx and App.tsx creation
3
+ */
4
+ import path from 'node:path';
5
+ import { ensureDir } from '../utils/index.js';
6
+ import { createMainFile } from './main.js';
7
+ import { createAppFile } from './welcome.js';
8
+ /**
9
+ * Create all entry files (main.tsx, App.tsx, vite-env.d.ts)
10
+ */
11
+ export const createEntryFiles = async (ctx) => {
12
+ const { variant } = ctx.selections;
13
+ const isTypeScript = variant.startsWith('ts');
14
+ const ext = isTypeScript ? 'tsx' : 'jsx';
15
+ const srcDir = path.join(ctx.projectPath, 'src');
16
+ await ensureDir(srcDir);
17
+ await createMainFile(ctx, ext);
18
+ await createAppFile(ctx, ext);
19
+ };
20
+ // Re-export for backward compatibility
21
+ export { createMainFile } from './main.js';
22
+ export { createAppCss } from './styles.js';
23
+ export { createAppFile, createWelcomePage } from './welcome.js';
24
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/templates/entry.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAwB,EAAiB,EAAE;IAChF,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;IACnC,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEjD,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/B,MAAM,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,uCAAuC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Templates module - File generators
3
+ */
4
+ export { createAppCss, createEntryFiles, createMainFile, createWelcomePage } from './entry.js';
5
+ export { createAppCss as createStyles } from './styles.js';
6
+ export { createReadme } from './readme.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/F,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Templates module - File generators
3
+ */
4
+ // Entry files
5
+ export { createAppCss, createEntryFiles, createMainFile, createWelcomePage } from './entry.js';
6
+ // Styles (alias for backward compatibility)
7
+ export { createAppCss as createStyles } from './styles.js';
8
+ // README
9
+ export { createReadme } from './readme.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc;AACd,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/F,4CAA4C;AAC5C,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3D,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ConfiguratorContext } from '../types/index.js';
2
+ /**
3
+ * Create main.tsx/main.jsx with providers
4
+ */
5
+ export declare const createMainFile: (ctx: ConfiguratorContext, ext: string) => Promise<void>;
6
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/templates/main.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAQ7D;;GAEG;AACH,eAAO,MAAM,cAAc,GACzB,KAAK,mBAAmB,EACxB,KAAK,MAAM,KACV,OAAO,CAAC,IAAI,CA4Ed,CAAC"}