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,229 @@
1
+ /**
2
+ * NEXO Plugin System - Plugin Loader
3
+ *
4
+ * Loads plugins from various sources:
5
+ * - .nexorc.json configuration file
6
+ * - package.json nexo config
7
+ * - Direct npm packages
8
+ * - Local file paths
9
+ */
10
+ import fs from 'node:fs/promises';
11
+ import path from 'node:path';
12
+ import pc from 'picocolors';
13
+ import { loadPlugins, pluginManager } from './manager.js';
14
+ // ============================================
15
+ // Configuration File Paths
16
+ // ============================================
17
+ const CONFIG_FILES = [
18
+ '.nexorc.json',
19
+ '.nexorc',
20
+ 'nexo.config.json',
21
+ '.config/nexo.json',
22
+ ];
23
+ // ============================================
24
+ // Configuration Loading
25
+ // ============================================
26
+ /**
27
+ * Find and read the nexo configuration file
28
+ */
29
+ export const findConfig = async (cwd = process.cwd()) => {
30
+ // Try config files
31
+ for (const configFile of CONFIG_FILES) {
32
+ const configPath = path.join(cwd, configFile);
33
+ try {
34
+ const content = await fs.readFile(configPath, 'utf-8');
35
+ return JSON.parse(content);
36
+ }
37
+ catch {
38
+ // File doesn't exist or can't be parsed
39
+ }
40
+ }
41
+ // Try package.json
42
+ try {
43
+ const pkgPath = path.join(cwd, 'package.json');
44
+ const content = await fs.readFile(pkgPath, 'utf-8');
45
+ const pkg = JSON.parse(content);
46
+ if (pkg.nexo) {
47
+ return pkg.nexo;
48
+ }
49
+ }
50
+ catch {
51
+ // No package.json or no nexo config
52
+ }
53
+ return null;
54
+ };
55
+ /**
56
+ * Resolve extends in configuration
57
+ */
58
+ const resolveExtends = async (config, cwd) => {
59
+ if (!config.extends) {
60
+ return config;
61
+ }
62
+ try {
63
+ // Try to load extended config
64
+ let extendedConfig;
65
+ if (config.extends.startsWith('.')) {
66
+ // Local path
67
+ const extPath = path.resolve(cwd, config.extends);
68
+ const content = await fs.readFile(extPath, 'utf-8');
69
+ extendedConfig = JSON.parse(content);
70
+ }
71
+ else {
72
+ // npm package
73
+ const module = await import(config.extends);
74
+ extendedConfig = module.default || module;
75
+ }
76
+ // Recursively resolve extends
77
+ extendedConfig = await resolveExtends(extendedConfig, cwd);
78
+ // Merge configurations
79
+ return {
80
+ ...extendedConfig,
81
+ ...config,
82
+ plugins: [
83
+ ...(extendedConfig.plugins || []),
84
+ ...(config.plugins || []),
85
+ ],
86
+ defaults: {
87
+ ...extendedConfig.defaults,
88
+ ...config.defaults,
89
+ },
90
+ customConfigurators: [
91
+ ...(extendedConfig.customConfigurators || []),
92
+ ...(config.customConfigurators || []),
93
+ ],
94
+ };
95
+ }
96
+ catch (error) {
97
+ console.warn(pc.yellow(`Warning: Failed to load extended config "${config.extends}": ${error}`));
98
+ return config;
99
+ }
100
+ };
101
+ /**
102
+ * Load all plugins from configuration
103
+ */
104
+ export const loadPluginsFromConfig = async (cwd = process.cwd()) => {
105
+ const results = [];
106
+ // Find configuration
107
+ let config = await findConfig(cwd);
108
+ if (!config) {
109
+ return { config: null, results };
110
+ }
111
+ // Resolve extends
112
+ config = await resolveExtends(config, cwd);
113
+ // Load plugins
114
+ if (config.plugins && config.plugins.length > 0) {
115
+ const pluginSources = config.plugins.map(source => {
116
+ // Resolve local paths
117
+ if (source.startsWith('.')) {
118
+ return path.resolve(cwd, source);
119
+ }
120
+ return source;
121
+ });
122
+ const loadResults = await loadPlugins(pluginSources);
123
+ results.push(...loadResults);
124
+ }
125
+ // Load custom configurators
126
+ if (config.customConfigurators && config.customConfigurators.length > 0) {
127
+ for (const custom of config.customConfigurators) {
128
+ const customPath = path.resolve(cwd, custom.path);
129
+ try {
130
+ const module = await import(customPath);
131
+ const configurator = module.default || module;
132
+ // Create a mini-plugin for this configurator
133
+ const plugin = {
134
+ name: `custom-configurator-${custom.name}`,
135
+ version: '1.0.0',
136
+ configurators: {
137
+ [custom.name]: configurator,
138
+ },
139
+ };
140
+ pluginManager.register(plugin);
141
+ results.push({ success: true, plugin });
142
+ }
143
+ catch (error) {
144
+ results.push({
145
+ success: false,
146
+ error: `Failed to load custom configurator "${custom.name}": ${error}`,
147
+ });
148
+ }
149
+ }
150
+ }
151
+ return { config, results };
152
+ };
153
+ /**
154
+ * Initialize plugins from configuration and return defaults
155
+ */
156
+ export const initializePlugins = async (cwd = process.cwd()) => {
157
+ const errors = [];
158
+ const { config, results } = await loadPluginsFromConfig(cwd);
159
+ // Collect errors
160
+ for (const result of results) {
161
+ if (!result.success && result.error) {
162
+ errors.push(result.error);
163
+ }
164
+ }
165
+ const loadedCount = results.filter(r => r.success).length;
166
+ return {
167
+ defaults: config?.defaults || {},
168
+ loadedCount,
169
+ errors,
170
+ };
171
+ };
172
+ // ============================================
173
+ // Plugin Discovery
174
+ // ============================================
175
+ /**
176
+ * Discover plugins in node_modules that match naming convention
177
+ */
178
+ export const discoverPlugins = async (cwd = process.cwd()) => {
179
+ const discovered = [];
180
+ const nodeModulesPath = path.join(cwd, 'node_modules');
181
+ try {
182
+ const entries = await fs.readdir(nodeModulesPath, { withFileTypes: true });
183
+ for (const entry of entries) {
184
+ if (!entry.isDirectory())
185
+ continue;
186
+ // Check for nexo-plugin-* pattern
187
+ if (entry.name.startsWith('nexo-plugin-')) {
188
+ discovered.push(entry.name);
189
+ }
190
+ // Check for @nexo/* scoped packages
191
+ if (entry.name === '@nexo') {
192
+ const scopedPath = path.join(nodeModulesPath, '@nexo');
193
+ const scopedEntries = await fs.readdir(scopedPath, { withFileTypes: true });
194
+ for (const scoped of scopedEntries) {
195
+ if (scoped.isDirectory()) {
196
+ discovered.push(`@nexo/${scoped.name}`);
197
+ }
198
+ }
199
+ }
200
+ // Check for @*/nexo-* pattern in other scopes
201
+ if (entry.name.startsWith('@')) {
202
+ const scopedPath = path.join(nodeModulesPath, entry.name);
203
+ try {
204
+ const scopedEntries = await fs.readdir(scopedPath, { withFileTypes: true });
205
+ for (const scoped of scopedEntries) {
206
+ if (scoped.isDirectory() && scoped.name.startsWith('nexo-')) {
207
+ discovered.push(`${entry.name}/${scoped.name}`);
208
+ }
209
+ }
210
+ }
211
+ catch {
212
+ // Scope directory not readable
213
+ }
214
+ }
215
+ }
216
+ }
217
+ catch {
218
+ // node_modules doesn't exist or can't be read
219
+ }
220
+ return discovered;
221
+ };
222
+ /**
223
+ * Auto-discover and load plugins
224
+ */
225
+ export const autoDiscoverPlugins = async (cwd = process.cwd()) => {
226
+ const discovered = await discoverPlugins(cwd);
227
+ return loadPlugins(discovered);
228
+ };
229
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * NEXO Plugin System - Plugin Manager
3
+ */
4
+ import type { NexoPlugin, PluginLoadResult, PluginManager } from './types.js';
5
+ /**
6
+ * Create a plugin manager instance
7
+ */
8
+ export declare const createPluginManager: () => PluginManager;
9
+ /**
10
+ * Global plugin manager instance
11
+ */
12
+ export declare const pluginManager: PluginManager;
13
+ /**
14
+ * Define a plugin (helper for type safety)
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * export default definePlugin({
19
+ * name: 'my-plugin',
20
+ * version: '1.0.0',
21
+ * beforeSetup: async (ctx) => {
22
+ * console.log('Before setup!');
23
+ * }
24
+ * });
25
+ * ```
26
+ */
27
+ export declare const definePlugin: (plugin: NexoPlugin) => NexoPlugin;
28
+ /**
29
+ * Load plugins from a list of sources
30
+ */
31
+ export declare const loadPlugins: (sources: string[], manager?: PluginManager) => Promise<PluginLoadResult[]>;
32
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,aAAa,EAEd,MAAM,YAAY,CAAC;AAqBpB;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAO,aA+KtC,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,aAAa,eAAwB,CAAC;AAMnD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,UAAU,KAAG,UAAoB,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,WAAW,GACtB,SAAS,MAAM,EAAE,EACjB,UAAS,aAA6B,KACrC,OAAO,CAAC,gBAAgB,EAAE,CAa5B,CAAC"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * NEXO Plugin System - Plugin Manager
3
+ */
4
+ import pc from 'picocolors';
5
+ // ============================================
6
+ // Plugin Registry
7
+ // ============================================
8
+ const createRegistry = () => ({
9
+ plugins: new Map(),
10
+ hooks: {
11
+ beforeSetup: [],
12
+ afterSetup: [],
13
+ beforeConfigurator: [],
14
+ afterConfigurator: [],
15
+ modifySelections: [],
16
+ },
17
+ });
18
+ // ============================================
19
+ // Plugin Manager Implementation
20
+ // ============================================
21
+ /**
22
+ * Create a plugin manager instance
23
+ */
24
+ export const createPluginManager = () => {
25
+ const registry = createRegistry();
26
+ /**
27
+ * Load a plugin from a source (npm package or local path)
28
+ */
29
+ const load = async (source) => {
30
+ try {
31
+ // Dynamic import
32
+ const module = await import(source);
33
+ const plugin = module.default || module;
34
+ // Validate plugin
35
+ if (!plugin.name || !plugin.version) {
36
+ return {
37
+ success: false,
38
+ error: `Invalid plugin: missing name or version (source: ${source})`,
39
+ };
40
+ }
41
+ // Register the plugin
42
+ register(plugin);
43
+ return { success: true, plugin };
44
+ }
45
+ catch (error) {
46
+ return {
47
+ success: false,
48
+ error: `Failed to load plugin from "${source}": ${error instanceof Error ? error.message : String(error)}`,
49
+ };
50
+ }
51
+ };
52
+ /**
53
+ * Register a plugin and its hooks
54
+ */
55
+ const register = (plugin) => {
56
+ // Check for duplicate
57
+ if (registry.plugins.has(plugin.name)) {
58
+ console.warn(pc.yellow(`Plugin "${plugin.name}" is already registered. Overwriting.`));
59
+ }
60
+ // Store plugin
61
+ registry.plugins.set(plugin.name, plugin);
62
+ // Register hooks
63
+ if (plugin.beforeSetup) {
64
+ registry.hooks.beforeSetup.push(plugin.beforeSetup);
65
+ }
66
+ if (plugin.afterSetup) {
67
+ registry.hooks.afterSetup.push(plugin.afterSetup);
68
+ }
69
+ if (plugin.beforeConfigurator) {
70
+ registry.hooks.beforeConfigurator.push(plugin.beforeConfigurator);
71
+ }
72
+ if (plugin.afterConfigurator) {
73
+ registry.hooks.afterConfigurator.push(plugin.afterConfigurator);
74
+ }
75
+ if (plugin.modifySelections) {
76
+ registry.hooks.modifySelections.push(plugin.modifySelections);
77
+ }
78
+ };
79
+ /**
80
+ * Unregister a plugin
81
+ */
82
+ const unregister = (name) => {
83
+ const plugin = registry.plugins.get(name);
84
+ if (!plugin)
85
+ return;
86
+ // Remove hooks
87
+ if (plugin.beforeSetup) {
88
+ const idx = registry.hooks.beforeSetup.indexOf(plugin.beforeSetup);
89
+ if (idx > -1)
90
+ registry.hooks.beforeSetup.splice(idx, 1);
91
+ }
92
+ if (plugin.afterSetup) {
93
+ const idx = registry.hooks.afterSetup.indexOf(plugin.afterSetup);
94
+ if (idx > -1)
95
+ registry.hooks.afterSetup.splice(idx, 1);
96
+ }
97
+ if (plugin.beforeConfigurator) {
98
+ const idx = registry.hooks.beforeConfigurator.indexOf(plugin.beforeConfigurator);
99
+ if (idx > -1)
100
+ registry.hooks.beforeConfigurator.splice(idx, 1);
101
+ }
102
+ if (plugin.afterConfigurator) {
103
+ const idx = registry.hooks.afterConfigurator.indexOf(plugin.afterConfigurator);
104
+ if (idx > -1)
105
+ registry.hooks.afterConfigurator.splice(idx, 1);
106
+ }
107
+ if (plugin.modifySelections) {
108
+ const idx = registry.hooks.modifySelections.indexOf(plugin.modifySelections);
109
+ if (idx > -1)
110
+ registry.hooks.modifySelections.splice(idx, 1);
111
+ }
112
+ registry.plugins.delete(name);
113
+ };
114
+ /**
115
+ * Get all registered plugins
116
+ */
117
+ const getPlugins = () => {
118
+ return Array.from(registry.plugins.values());
119
+ };
120
+ /**
121
+ * Get a plugin by name
122
+ */
123
+ const getPlugin = (name) => {
124
+ return registry.plugins.get(name);
125
+ };
126
+ /**
127
+ * Execute beforeSetup hooks
128
+ */
129
+ const executeBeforeSetup = async (ctx) => {
130
+ for (const hook of registry.hooks.beforeSetup) {
131
+ await hook(ctx);
132
+ }
133
+ };
134
+ /**
135
+ * Execute afterSetup hooks
136
+ */
137
+ const executeAfterSetup = async (ctx) => {
138
+ for (const hook of registry.hooks.afterSetup) {
139
+ await hook(ctx);
140
+ }
141
+ };
142
+ /**
143
+ * Execute beforeConfigurator hooks
144
+ */
145
+ const executeBeforeConfigurator = async (ctx, name) => {
146
+ for (const hook of registry.hooks.beforeConfigurator) {
147
+ await hook(ctx, name);
148
+ }
149
+ };
150
+ /**
151
+ * Execute afterConfigurator hooks
152
+ */
153
+ const executeAfterConfigurator = async (ctx, name) => {
154
+ for (const hook of registry.hooks.afterConfigurator) {
155
+ await hook(ctx, name);
156
+ }
157
+ };
158
+ /**
159
+ * Apply selection modifiers
160
+ */
161
+ const applyModifySelections = async (selections) => {
162
+ let result = selections;
163
+ for (const hook of registry.hooks.modifySelections) {
164
+ result = await hook(result);
165
+ }
166
+ return result;
167
+ };
168
+ return {
169
+ load,
170
+ register,
171
+ unregister,
172
+ getPlugins,
173
+ getPlugin,
174
+ executeBeforeSetup,
175
+ executeAfterSetup,
176
+ executeBeforeConfigurator,
177
+ executeAfterConfigurator,
178
+ applyModifySelections,
179
+ };
180
+ };
181
+ // ============================================
182
+ // Default Plugin Manager Instance
183
+ // ============================================
184
+ /**
185
+ * Global plugin manager instance
186
+ */
187
+ export const pluginManager = createPluginManager();
188
+ // ============================================
189
+ // Plugin Helpers
190
+ // ============================================
191
+ /**
192
+ * Define a plugin (helper for type safety)
193
+ *
194
+ * @example
195
+ * ```typescript
196
+ * export default definePlugin({
197
+ * name: 'my-plugin',
198
+ * version: '1.0.0',
199
+ * beforeSetup: async (ctx) => {
200
+ * console.log('Before setup!');
201
+ * }
202
+ * });
203
+ * ```
204
+ */
205
+ export const definePlugin = (plugin) => plugin;
206
+ /**
207
+ * Load plugins from a list of sources
208
+ */
209
+ export const loadPlugins = async (sources, manager = pluginManager) => {
210
+ const results = [];
211
+ for (const source of sources) {
212
+ const result = await manager.load(source);
213
+ results.push(result);
214
+ if (!result.success) {
215
+ console.warn(pc.yellow(`Warning: ${result.error}`));
216
+ }
217
+ }
218
+ return results;
219
+ };
220
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/plugins/manager.ts"],"names":[],"mappings":"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"}