create-nexo 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +185 -0
- package/dist/api/index.d.ts +196 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +390 -0
- package/dist/api/index.js.map +1 -0
- package/dist/bin/nexo.d.ts +3 -0
- package/dist/bin/nexo.d.ts.map +1 -0
- package/dist/bin/nexo.js +427 -0
- package/dist/bin/nexo.js.map +1 -0
- package/dist/configurators/core/framework.d.ts +3 -0
- package/dist/configurators/core/framework.d.ts.map +1 -0
- package/dist/configurators/core/framework.js +56 -0
- package/dist/configurators/core/framework.js.map +1 -0
- package/dist/configurators/core/index.d.ts +4 -0
- package/dist/configurators/core/index.d.ts.map +1 -0
- package/dist/configurators/core/index.js +4 -0
- package/dist/configurators/core/index.js.map +1 -0
- package/dist/configurators/core/language.d.ts +3 -0
- package/dist/configurators/core/language.d.ts.map +1 -0
- package/dist/configurators/core/language.js +59 -0
- package/dist/configurators/core/language.js.map +1 -0
- package/dist/configurators/core/variant.d.ts +3 -0
- package/dist/configurators/core/variant.d.ts.map +1 -0
- package/dist/configurators/core/variant.js +22 -0
- package/dist/configurators/core/variant.js.map +1 -0
- package/dist/configurators/index.d.ts +5 -0
- package/dist/configurators/index.d.ts.map +1 -0
- package/dist/configurators/index.js +6 -0
- package/dist/configurators/index.js.map +1 -0
- package/dist/configurators/project/auth.d.ts +3 -0
- package/dist/configurators/project/auth.d.ts.map +1 -0
- package/dist/configurators/project/auth.js +82 -0
- package/dist/configurators/project/auth.js.map +1 -0
- package/dist/configurators/project/cicd.d.ts +30 -0
- package/dist/configurators/project/cicd.d.ts.map +1 -0
- package/dist/configurators/project/cicd.js +289 -0
- package/dist/configurators/project/cicd.js.map +1 -0
- package/dist/configurators/project/i18n.d.ts +3 -0
- package/dist/configurators/project/i18n.d.ts.map +1 -0
- package/dist/configurators/project/i18n.js +67 -0
- package/dist/configurators/project/i18n.js.map +1 -0
- package/dist/configurators/project/index.d.ts +6 -0
- package/dist/configurators/project/index.d.ts.map +1 -0
- package/dist/configurators/project/index.js +6 -0
- package/dist/configurators/project/index.js.map +1 -0
- package/dist/configurators/project/mandatory.d.ts +3 -0
- package/dist/configurators/project/mandatory.d.ts.map +1 -0
- package/dist/configurators/project/mandatory.js +167 -0
- package/dist/configurators/project/mandatory.js.map +1 -0
- package/dist/configurators/project/structure.d.ts +3 -0
- package/dist/configurators/project/structure.d.ts.map +1 -0
- package/dist/configurators/project/structure.js +34 -0
- package/dist/configurators/project/structure.js.map +1 -0
- package/dist/configurators/state/dataFetching.d.ts +3 -0
- package/dist/configurators/state/dataFetching.d.ts.map +1 -0
- package/dist/configurators/state/dataFetching.js +23 -0
- package/dist/configurators/state/dataFetching.js.map +1 -0
- package/dist/configurators/state/forms.d.ts +3 -0
- package/dist/configurators/state/forms.d.ts.map +1 -0
- package/dist/configurators/state/forms.js +35 -0
- package/dist/configurators/state/forms.js.map +1 -0
- package/dist/configurators/state/index.d.ts +5 -0
- package/dist/configurators/state/index.d.ts.map +1 -0
- package/dist/configurators/state/index.js +5 -0
- package/dist/configurators/state/index.js.map +1 -0
- package/dist/configurators/state/routing.d.ts +3 -0
- package/dist/configurators/state/routing.d.ts.map +1 -0
- package/dist/configurators/state/routing.js +23 -0
- package/dist/configurators/state/routing.js.map +1 -0
- package/dist/configurators/state/state.d.ts +3 -0
- package/dist/configurators/state/state.d.ts.map +1 -0
- package/dist/configurators/state/state.js +91 -0
- package/dist/configurators/state/state.js.map +1 -0
- package/dist/configurators/styling/icons.d.ts +3 -0
- package/dist/configurators/styling/icons.d.ts.map +1 -0
- package/dist/configurators/styling/icons.js +27 -0
- package/dist/configurators/styling/icons.js.map +1 -0
- package/dist/configurators/styling/index.d.ts +4 -0
- package/dist/configurators/styling/index.d.ts.map +1 -0
- package/dist/configurators/styling/index.js +4 -0
- package/dist/configurators/styling/index.js.map +1 -0
- package/dist/configurators/styling/styling.d.ts +3 -0
- package/dist/configurators/styling/styling.d.ts.map +1 -0
- package/dist/configurators/styling/styling.js +62 -0
- package/dist/configurators/styling/styling.js.map +1 -0
- package/dist/configurators/styling/ui.d.ts +3 -0
- package/dist/configurators/styling/ui.d.ts.map +1 -0
- package/dist/configurators/styling/ui.js +188 -0
- package/dist/configurators/styling/ui.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lazy-loader.d.ts +57 -0
- package/dist/core/lazy-loader.d.ts.map +1 -0
- package/dist/core/lazy-loader.js +231 -0
- package/dist/core/lazy-loader.js.map +1 -0
- package/dist/core/parallel.d.ts +29 -0
- package/dist/core/parallel.d.ts.map +1 -0
- package/dist/core/parallel.js +127 -0
- package/dist/core/parallel.js.map +1 -0
- package/dist/core/presets.d.ts +10 -0
- package/dist/core/presets.d.ts.map +1 -0
- package/dist/core/presets.js +73 -0
- package/dist/core/presets.js.map +1 -0
- package/dist/core/prompts/core.d.ts +18 -0
- package/dist/core/prompts/core.d.ts.map +1 -0
- package/dist/core/prompts/core.js +420 -0
- package/dist/core/prompts/core.js.map +1 -0
- package/dist/core/prompts/filter.d.ts +34 -0
- package/dist/core/prompts/filter.d.ts.map +1 -0
- package/dist/core/prompts/filter.js +48 -0
- package/dist/core/prompts/filter.js.map +1 -0
- package/dist/core/prompts/index.d.ts +10 -0
- package/dist/core/prompts/index.d.ts.map +1 -0
- package/dist/core/prompts/index.js +16 -0
- package/dist/core/prompts/index.js.map +1 -0
- package/dist/core/prompts/optional.d.ts +15 -0
- package/dist/core/prompts/optional.d.ts.map +1 -0
- package/dist/core/prompts/optional.js +228 -0
- package/dist/core/prompts/optional.js.map +1 -0
- package/dist/core/prompts/utils.d.ts +37 -0
- package/dist/core/prompts/utils.d.ts.map +1 -0
- package/dist/core/prompts/utils.js +72 -0
- package/dist/core/prompts/utils.js.map +1 -0
- package/dist/core/prompts.d.ts +6 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +6 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/setup.d.ts +28 -0
- package/dist/core/setup.d.ts.map +1 -0
- package/dist/core/setup.js +96 -0
- package/dist/core/setup.js.map +1 -0
- package/dist/core/wizard.d.ts +39 -0
- package/dist/core/wizard.d.ts.map +1 -0
- package/dist/core/wizard.js +259 -0
- package/dist/core/wizard.js.map +1 -0
- package/dist/errors/index.d.ts +67 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +253 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/messages.d.ts +56 -0
- package/dist/errors/messages.d.ts.map +1 -0
- package/dist/errors/messages.js +234 -0
- package/dist/errors/messages.js.map +1 -0
- package/dist/generators/index.d.ts +86 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +441 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/index.d.ts +48 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +49 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +38 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +229 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/manager.d.ts +32 -0
- package/dist/plugins/manager.d.ts.map +1 -0
- package/dist/plugins/manager.js +220 -0
- package/dist/plugins/manager.js.map +1 -0
- package/dist/plugins/types.d.ts +186 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +5 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/security/index.d.ts +59 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +230 -0
- package/dist/security/index.js.map +1 -0
- package/dist/templates/entry.d.ts +9 -0
- package/dist/templates/entry.d.ts.map +1 -0
- package/dist/templates/entry.js +24 -0
- package/dist/templates/entry.js.map +1 -0
- package/dist/templates/index.d.ts +7 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +10 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/main.d.ts +6 -0
- package/dist/templates/main.d.ts.map +1 -0
- package/dist/templates/main.js +72 -0
- package/dist/templates/main.js.map +1 -0
- package/dist/templates/readme.d.ts +3 -0
- package/dist/templates/readme.d.ts.map +1 -0
- package/dist/templates/readme.js +127 -0
- package/dist/templates/readme.js.map +1 -0
- package/dist/templates/styles.d.ts +6 -0
- package/dist/templates/styles.d.ts.map +1 -0
- package/dist/templates/styles.js +212 -0
- package/dist/templates/styles.js.map +1 -0
- package/dist/templates/welcome.d.ts +10 -0
- package/dist/templates/welcome.d.ts.map +1 -0
- package/dist/templates/welcome.js +322 -0
- package/dist/templates/welcome.js.map +1 -0
- package/dist/types/index.d.ts +46 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/batch-writer.d.ts +101 -0
- package/dist/utils/batch-writer.d.ts.map +1 -0
- package/dist/utils/batch-writer.js +232 -0
- package/dist/utils/batch-writer.js.map +1 -0
- package/dist/utils/cache.d.ts +60 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +119 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/fileTree.d.ts +3 -0
- package/dist/utils/fileTree.d.ts.map +1 -0
- package/dist/utils/fileTree.js +71 -0
- package/dist/utils/fileTree.js.map +1 -0
- package/dist/utils/fs.d.ts +22 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +75 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/helpers.d.ts +91 -0
- package/dist/utils/helpers.d.ts.map +1 -0
- package/dist/utils/helpers.js +192 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/progress.d.ts +85 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +142 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/spinner.d.ts +9 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +56 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/validation/index.d.ts +63 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +262 -0
- package/dist/validation/index.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,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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"}
|