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,188 @@
|
|
|
1
|
+
import { addDependency, getPackageJson, savePackageJson } from '../../utils/index.js';
|
|
2
|
+
const UI_CONFIGS = {
|
|
3
|
+
shadcn: {
|
|
4
|
+
'@radix-ui/react-slot': '^1.1.0',
|
|
5
|
+
'class-variance-authority': '^0.7.1',
|
|
6
|
+
'clsx': '^2.1.1',
|
|
7
|
+
'tailwind-merge': '^2.6.0',
|
|
8
|
+
},
|
|
9
|
+
radix: {
|
|
10
|
+
'@radix-ui/react-dialog': '^1.1.0',
|
|
11
|
+
'@radix-ui/react-dropdown-menu': '^2.1.0',
|
|
12
|
+
'@radix-ui/react-slot': '^1.1.0',
|
|
13
|
+
},
|
|
14
|
+
mantine: {
|
|
15
|
+
'@mantine/core': '^7.15.0',
|
|
16
|
+
'@mantine/hooks': '^7.15.0',
|
|
17
|
+
},
|
|
18
|
+
heroui: {
|
|
19
|
+
'@heroui/react': '^2.7.0',
|
|
20
|
+
'framer-motion': '^12.0.0',
|
|
21
|
+
},
|
|
22
|
+
antd: {
|
|
23
|
+
'antd': '^5.23.0',
|
|
24
|
+
},
|
|
25
|
+
chakra: {
|
|
26
|
+
'@chakra-ui/react': '^3.3.0',
|
|
27
|
+
'@emotion/react': '^11.14.0',
|
|
28
|
+
},
|
|
29
|
+
'styled-components': {
|
|
30
|
+
'styled-components': '^6.1.14',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
export const uiConfigurator = async (ctx) => {
|
|
34
|
+
if (ctx.selections.ui === 'none')
|
|
35
|
+
return;
|
|
36
|
+
const config = UI_CONFIGS[ctx.selections.ui];
|
|
37
|
+
if (!config)
|
|
38
|
+
return;
|
|
39
|
+
const pkg = await getPackageJson(ctx);
|
|
40
|
+
for (const [name, version] of Object.entries(config)) {
|
|
41
|
+
addDependency(pkg, name, version);
|
|
42
|
+
}
|
|
43
|
+
await savePackageJson(ctx, pkg);
|
|
44
|
+
// HeroUI Setup
|
|
45
|
+
if (ctx.selections.ui === 'heroui') {
|
|
46
|
+
const isTypeScript = ctx.selections.variant.startsWith('ts');
|
|
47
|
+
// Create tailwind.config.js for HeroUI
|
|
48
|
+
// Tailwind v4 supports config files for plugins and legacy compatibility
|
|
49
|
+
const tailwindConfig = `import { heroui } from "@heroui/react";
|
|
50
|
+
|
|
51
|
+
/** @type {import('tailwindcss').Config} */
|
|
52
|
+
export default {
|
|
53
|
+
content: [
|
|
54
|
+
"./index.html",
|
|
55
|
+
"./src/**/*.{js,ts,jsx,tsx}",
|
|
56
|
+
"./node_modules/@heroui/theme/dist/**/*.{js,ts,jsx,tsx}"
|
|
57
|
+
],
|
|
58
|
+
theme: {
|
|
59
|
+
extend: {},
|
|
60
|
+
},
|
|
61
|
+
darkMode: "class",
|
|
62
|
+
plugins: [heroui()]
|
|
63
|
+
}`;
|
|
64
|
+
const { writeFile } = await import('../../utils/index.js');
|
|
65
|
+
const path = await import('node:path');
|
|
66
|
+
await writeFile(path.join(ctx.projectPath, 'tailwind.config.js'), tailwindConfig);
|
|
67
|
+
// Ensure main file wraps app with HeroUIProvider
|
|
68
|
+
// For now, simpler template in entry.ts handles basic imports, but provider is key.
|
|
69
|
+
// We will handle Provider in entry.ts
|
|
70
|
+
}
|
|
71
|
+
// Shadcn UI Setup
|
|
72
|
+
if (ctx.selections.ui === 'shadcn') {
|
|
73
|
+
const { writeFile, ensureDir } = await import('../../utils/index.js');
|
|
74
|
+
const path = await import('node:path');
|
|
75
|
+
const { appendFile } = await import('node:fs/promises');
|
|
76
|
+
const isTypeScript = ctx.selections.variant.startsWith('ts');
|
|
77
|
+
const ext = isTypeScript ? 'ts' : 'js';
|
|
78
|
+
// 1. Create utils.ts
|
|
79
|
+
await ensureDir(path.join(ctx.projectPath, 'src/lib'));
|
|
80
|
+
const utilsContent = `import { clsx, type ClassValue } from "clsx"
|
|
81
|
+
import { twMerge } from "tailwind-merge"
|
|
82
|
+
|
|
83
|
+
export function cn(...inputs: ClassValue[]) {
|
|
84
|
+
return twMerge(clsx(inputs))
|
|
85
|
+
}
|
|
86
|
+
`;
|
|
87
|
+
await writeFile(path.join(ctx.projectPath, 'src/lib', `utils.${ext}`), utilsContent);
|
|
88
|
+
// 2. Create components.json
|
|
89
|
+
const componentsJson = {
|
|
90
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
91
|
+
"style": "new-york",
|
|
92
|
+
"rsc": false,
|
|
93
|
+
"tsx": isTypeScript,
|
|
94
|
+
"tailwind": {
|
|
95
|
+
"config": "tailwind.config.js",
|
|
96
|
+
"css": "src/index.css",
|
|
97
|
+
"baseColor": "slate",
|
|
98
|
+
"cssVariables": true,
|
|
99
|
+
"prefix": ""
|
|
100
|
+
},
|
|
101
|
+
"aliases": {
|
|
102
|
+
"components": "@/components",
|
|
103
|
+
"utils": "@/lib/utils"
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
await writeFile(path.join(ctx.projectPath, 'components.json'), JSON.stringify(componentsJson, null, 2));
|
|
107
|
+
// 3. Update index.css with CSS Variables
|
|
108
|
+
const cssVariables = `
|
|
109
|
+
@layer base {
|
|
110
|
+
:root {
|
|
111
|
+
--background: 0 0% 100%;
|
|
112
|
+
--foreground: 222.2 84% 4.9%;
|
|
113
|
+
--card: 0 0% 100%;
|
|
114
|
+
--card-foreground: 222.2 84% 4.9%;
|
|
115
|
+
--popover: 0 0% 100%;
|
|
116
|
+
--popover-foreground: 222.2 84% 4.9%;
|
|
117
|
+
--primary: 222.2 47.4% 11.2%;
|
|
118
|
+
--primary-foreground: 210 40% 98%;
|
|
119
|
+
--secondary: 210 40% 96.1%;
|
|
120
|
+
--secondary-foreground: 222.2 47.4% 11.2%;
|
|
121
|
+
--muted: 210 40% 96.1%;
|
|
122
|
+
--muted-foreground: 215.4 16.3% 46.9%;
|
|
123
|
+
--accent: 210 40% 96.1%;
|
|
124
|
+
--accent-foreground: 222.2 47.4% 11.2%;
|
|
125
|
+
--destructive: 0 84.2% 60.2%;
|
|
126
|
+
--destructive-foreground: 210 40% 98%;
|
|
127
|
+
--border: 214.3 31.8% 91.4%;
|
|
128
|
+
--input: 214.3 31.8% 91.4%;
|
|
129
|
+
--ring: 222.2 84% 4.9%;
|
|
130
|
+
--radius: 0.5rem;
|
|
131
|
+
--chart-1: 12 76% 61%;
|
|
132
|
+
--chart-2: 173 58% 39%;
|
|
133
|
+
--chart-3: 197 37% 24%;
|
|
134
|
+
--chart-4: 43 74% 66%;
|
|
135
|
+
--chart-5: 27 87% 67%;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.dark {
|
|
139
|
+
--background: 222.2 84% 4.9%;
|
|
140
|
+
--foreground: 210 40% 98%;
|
|
141
|
+
--card: 222.2 84% 4.9%;
|
|
142
|
+
--card-foreground: 210 40% 98%;
|
|
143
|
+
--popover: 222.2 84% 4.9%;
|
|
144
|
+
--popover-foreground: 210 40% 98%;
|
|
145
|
+
--primary: 210 40% 98%;
|
|
146
|
+
--primary-foreground: 222.2 47.4% 11.2%;
|
|
147
|
+
--secondary: 217.2 32.6% 17.5%;
|
|
148
|
+
--secondary-foreground: 210 40% 98%;
|
|
149
|
+
--muted: 217.2 32.6% 17.5%;
|
|
150
|
+
--muted-foreground: 215 20.2% 65.1%;
|
|
151
|
+
--accent: 217.2 32.6% 17.5%;
|
|
152
|
+
--accent-foreground: 210 40% 98%;
|
|
153
|
+
--destructive: 0 62.8% 30.6%;
|
|
154
|
+
--destructive-foreground: 210 40% 98%;
|
|
155
|
+
--border: 217.2 32.6% 17.5%;
|
|
156
|
+
--input: 217.2 32.6% 17.5%;
|
|
157
|
+
--ring: 212.7 26.8% 83.9%;
|
|
158
|
+
--chart-1: 220 70% 50%;
|
|
159
|
+
--chart-2: 160 60% 45%;
|
|
160
|
+
--chart-3: 30 80% 55%;
|
|
161
|
+
--chart-4: 280 65% 60%;
|
|
162
|
+
--chart-5: 340 75% 55%;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
@layer base {
|
|
167
|
+
* {
|
|
168
|
+
border-color: hsl(var(--border));
|
|
169
|
+
}
|
|
170
|
+
body {
|
|
171
|
+
background-color: hsl(var(--background));
|
|
172
|
+
color: hsl(var(--foreground));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
`;
|
|
176
|
+
// We assume index.css exists because styling runs before UI
|
|
177
|
+
// But we need to make sure we append. Since 'appendFile' is not in our utils index explicitly in the original view,
|
|
178
|
+
// I will use writeFile with read logic or just use node:fs directly.
|
|
179
|
+
const fs = await import('node:fs/promises');
|
|
180
|
+
try {
|
|
181
|
+
await fs.appendFile(path.join(ctx.projectPath, 'src/index.css'), cssVariables);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
await writeFile(path.join(ctx.projectPath, 'src/index.css'), `@import "tailwindcss";\n${cssVariables}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/configurators/styling/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './lazy-loader.js';
|
|
2
|
+
export * from './parallel.js';
|
|
3
|
+
export * from './presets.js';
|
|
4
|
+
export * from './prompts.js';
|
|
5
|
+
export { createSteps, executeSequential, setup } from './setup.js';
|
|
6
|
+
export * from './wizard.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnE,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnE,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NEXO CLI - Lazy Loader
|
|
3
|
+
*
|
|
4
|
+
* Dynamically loads configurators on-demand to improve startup time.
|
|
5
|
+
* Only loads configurators that are actually needed based on user selections.
|
|
6
|
+
*/
|
|
7
|
+
import type { Configurator, ConfiguratorContext } from '../types/index.js';
|
|
8
|
+
export type ConfiguratorModule = {
|
|
9
|
+
default?: Configurator;
|
|
10
|
+
[key: string]: Configurator | undefined;
|
|
11
|
+
};
|
|
12
|
+
export interface LazyConfiguratorConfig {
|
|
13
|
+
/** Module path (relative to configurators folder) */
|
|
14
|
+
path: string;
|
|
15
|
+
/** Export name (default: 'default' or derived from path) */
|
|
16
|
+
exportName?: string;
|
|
17
|
+
/** Condition to load this configurator */
|
|
18
|
+
condition?: (ctx: ConfiguratorContext) => boolean;
|
|
19
|
+
/** Dependencies (other configurator names) */
|
|
20
|
+
dependencies?: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface LazyLoaderOptions {
|
|
23
|
+
/** Base path for configurator modules */
|
|
24
|
+
basePath?: string;
|
|
25
|
+
/** Cache loaded modules */
|
|
26
|
+
cache?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Registry of available configurators with their lazy load configs
|
|
30
|
+
*/
|
|
31
|
+
export declare const configuratorRegistry: Record<string, LazyConfiguratorConfig>;
|
|
32
|
+
/**
|
|
33
|
+
* Load a configurator module dynamically
|
|
34
|
+
*/
|
|
35
|
+
export declare const loadConfigurator: (name: string, options?: LazyLoaderOptions) => Promise<Configurator | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Load multiple configurators
|
|
38
|
+
*/
|
|
39
|
+
export declare const loadConfigurators: (names: string[], options?: LazyLoaderOptions) => Promise<Map<string, Configurator>>;
|
|
40
|
+
/**
|
|
41
|
+
* Get configurators that should run based on context
|
|
42
|
+
*/
|
|
43
|
+
export declare const getRequiredConfigurators: (ctx: ConfiguratorContext) => string[];
|
|
44
|
+
/**
|
|
45
|
+
* Sort configurators by dependencies
|
|
46
|
+
*/
|
|
47
|
+
export declare const sortByDependencies: (names: string[]) => string[];
|
|
48
|
+
/**
|
|
49
|
+
* Clear the module cache
|
|
50
|
+
*/
|
|
51
|
+
export declare const clearModuleCache: () => void;
|
|
52
|
+
/**
|
|
53
|
+
* Preload configurators (for warming up)
|
|
54
|
+
*/
|
|
55
|
+
export declare const preloadConfigurators: (names?: string[], options?: LazyLoaderOptions) => Promise<void>;
|
|
56
|
+
export default loadConfigurator;
|
|
57
|
+
//# sourceMappingURL=lazy-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-loader.d.ts","sourceRoot":"","sources":["../../src/core/lazy-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAM3E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;CACzC,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC;IAClD,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAMD;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CA2FvE,CAAC;AAWF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,MAAM,EACZ,UAAS,iBAAsB,KAC9B,OAAO,CAAC,YAAY,GAAG,IAAI,CA+B7B,CAAC;AAyBF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,MAAM,EAAE,EACf,UAAS,iBAAsB,KAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAanC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,GAAI,KAAK,mBAAmB,KAAG,MAAM,EAYzE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,EAAE,KAAG,MAAM,EAgC1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,IAEnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,MAAM,EAAE,EAChB,UAAS,iBAAsB,KAC9B,OAAO,CAAC,IAAI,CAGd,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NEXO CLI - Lazy Loader
|
|
3
|
+
*
|
|
4
|
+
* Dynamically loads configurators on-demand to improve startup time.
|
|
5
|
+
* Only loads configurators that are actually needed based on user selections.
|
|
6
|
+
*/
|
|
7
|
+
// ============================================
|
|
8
|
+
// Configurator Registry
|
|
9
|
+
// ============================================
|
|
10
|
+
/**
|
|
11
|
+
* Registry of available configurators with their lazy load configs
|
|
12
|
+
*/
|
|
13
|
+
export const configuratorRegistry = {
|
|
14
|
+
// Core
|
|
15
|
+
framework: {
|
|
16
|
+
path: 'core/framework',
|
|
17
|
+
exportName: 'frameworkConfigurator',
|
|
18
|
+
},
|
|
19
|
+
variant: {
|
|
20
|
+
path: 'core/variant',
|
|
21
|
+
exportName: 'variantConfigurator',
|
|
22
|
+
dependencies: ['framework'],
|
|
23
|
+
},
|
|
24
|
+
language: {
|
|
25
|
+
path: 'core/language',
|
|
26
|
+
exportName: 'languageConfigurator',
|
|
27
|
+
dependencies: ['variant'],
|
|
28
|
+
},
|
|
29
|
+
// Styling
|
|
30
|
+
styling: {
|
|
31
|
+
path: 'styling/styling',
|
|
32
|
+
exportName: 'stylingConfigurator',
|
|
33
|
+
dependencies: ['language'],
|
|
34
|
+
},
|
|
35
|
+
ui: {
|
|
36
|
+
path: 'styling/ui',
|
|
37
|
+
exportName: 'uiConfigurator',
|
|
38
|
+
dependencies: ['styling'],
|
|
39
|
+
condition: (ctx) => ctx.selections.ui !== 'none',
|
|
40
|
+
},
|
|
41
|
+
icons: {
|
|
42
|
+
path: 'styling/icons',
|
|
43
|
+
exportName: 'iconsConfigurator',
|
|
44
|
+
dependencies: ['language'],
|
|
45
|
+
condition: (ctx) => ctx.selections.icons !== 'none',
|
|
46
|
+
},
|
|
47
|
+
// State
|
|
48
|
+
forms: {
|
|
49
|
+
path: 'state/forms',
|
|
50
|
+
exportName: 'formsConfigurator',
|
|
51
|
+
dependencies: ['language'],
|
|
52
|
+
condition: (ctx) => ctx.selections.forms !== 'none',
|
|
53
|
+
},
|
|
54
|
+
state: {
|
|
55
|
+
path: 'state/state',
|
|
56
|
+
exportName: 'stateConfigurator',
|
|
57
|
+
dependencies: ['language'],
|
|
58
|
+
condition: (ctx) => ctx.selections.state !== 'none',
|
|
59
|
+
},
|
|
60
|
+
routing: {
|
|
61
|
+
path: 'state/routing',
|
|
62
|
+
exportName: 'routingConfigurator',
|
|
63
|
+
dependencies: ['language'],
|
|
64
|
+
condition: (ctx) => ctx.selections.routing !== 'none',
|
|
65
|
+
},
|
|
66
|
+
dataFetching: {
|
|
67
|
+
path: 'state/dataFetching',
|
|
68
|
+
exportName: 'dataFetchingConfigurator',
|
|
69
|
+
dependencies: ['language'],
|
|
70
|
+
condition: (ctx) => ctx.selections.dataFetching !== 'none',
|
|
71
|
+
},
|
|
72
|
+
// Project
|
|
73
|
+
structure: {
|
|
74
|
+
path: 'project/structure',
|
|
75
|
+
exportName: 'structureConfigurator',
|
|
76
|
+
dependencies: ['language'],
|
|
77
|
+
},
|
|
78
|
+
i18n: {
|
|
79
|
+
path: 'project/i18n',
|
|
80
|
+
exportName: 'i18nConfigurator',
|
|
81
|
+
dependencies: ['language'],
|
|
82
|
+
condition: (ctx) => ctx.selections.i18n !== 'none',
|
|
83
|
+
},
|
|
84
|
+
auth: {
|
|
85
|
+
path: 'project/auth',
|
|
86
|
+
exportName: 'authConfigurator',
|
|
87
|
+
dependencies: ['language'],
|
|
88
|
+
condition: (ctx) => ctx.selections.auth !== 'none',
|
|
89
|
+
},
|
|
90
|
+
mandatory: {
|
|
91
|
+
path: 'project/mandatory',
|
|
92
|
+
exportName: 'mandatoryConfigurator',
|
|
93
|
+
dependencies: ['styling', 'structure'],
|
|
94
|
+
},
|
|
95
|
+
cicd: {
|
|
96
|
+
path: 'project/cicd',
|
|
97
|
+
exportName: 'cicdConfigurator',
|
|
98
|
+
dependencies: ['mandatory'],
|
|
99
|
+
condition: () => false, // Disabled by default, enable via options
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
// ============================================
|
|
103
|
+
// Lazy Loader Implementation
|
|
104
|
+
// ============================================
|
|
105
|
+
/**
|
|
106
|
+
* Module cache for loaded configurators
|
|
107
|
+
*/
|
|
108
|
+
const moduleCache = new Map();
|
|
109
|
+
/**
|
|
110
|
+
* Load a configurator module dynamically
|
|
111
|
+
*/
|
|
112
|
+
export const loadConfigurator = async (name, options = {}) => {
|
|
113
|
+
const config = configuratorRegistry[name];
|
|
114
|
+
if (!config) {
|
|
115
|
+
console.warn(`Unknown configurator: ${name}`);
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const { basePath = '../configurators', cache = true } = options;
|
|
119
|
+
// Check cache
|
|
120
|
+
const cacheKey = `${basePath}/${config.path}`;
|
|
121
|
+
if (cache && moduleCache.has(cacheKey)) {
|
|
122
|
+
const module = moduleCache.get(cacheKey);
|
|
123
|
+
return getExport(module, config.exportName || name);
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
// Dynamic import
|
|
127
|
+
const modulePath = `${basePath}/${config.path}.js`;
|
|
128
|
+
const module = await import(modulePath);
|
|
129
|
+
// Cache the module
|
|
130
|
+
if (cache) {
|
|
131
|
+
moduleCache.set(cacheKey, module);
|
|
132
|
+
}
|
|
133
|
+
return getExport(module, config.exportName || name);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
console.error(`Failed to load configurator "${name}":`, error);
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Get export from module
|
|
142
|
+
*/
|
|
143
|
+
const getExport = (module, exportName) => {
|
|
144
|
+
// Try exact name
|
|
145
|
+
if (module[exportName]) {
|
|
146
|
+
return module[exportName];
|
|
147
|
+
}
|
|
148
|
+
// Try default export
|
|
149
|
+
if (module.default) {
|
|
150
|
+
return module.default;
|
|
151
|
+
}
|
|
152
|
+
// Try with "Configurator" suffix
|
|
153
|
+
const withSuffix = `${exportName}Configurator`;
|
|
154
|
+
if (module[withSuffix]) {
|
|
155
|
+
return module[withSuffix];
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Load multiple configurators
|
|
161
|
+
*/
|
|
162
|
+
export const loadConfigurators = async (names, options = {}) => {
|
|
163
|
+
const results = new Map();
|
|
164
|
+
await Promise.all(names.map(async (name) => {
|
|
165
|
+
const configurator = await loadConfigurator(name, options);
|
|
166
|
+
if (configurator) {
|
|
167
|
+
results.set(name, configurator);
|
|
168
|
+
}
|
|
169
|
+
}));
|
|
170
|
+
return results;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Get configurators that should run based on context
|
|
174
|
+
*/
|
|
175
|
+
export const getRequiredConfigurators = (ctx) => {
|
|
176
|
+
const required = [];
|
|
177
|
+
for (const [name, config] of Object.entries(configuratorRegistry)) {
|
|
178
|
+
// Check condition
|
|
179
|
+
if (config.condition && !config.condition(ctx)) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
required.push(name);
|
|
183
|
+
}
|
|
184
|
+
return required;
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* Sort configurators by dependencies
|
|
188
|
+
*/
|
|
189
|
+
export const sortByDependencies = (names) => {
|
|
190
|
+
const sorted = [];
|
|
191
|
+
const visited = new Set();
|
|
192
|
+
const visiting = new Set();
|
|
193
|
+
const visit = (name) => {
|
|
194
|
+
if (visited.has(name))
|
|
195
|
+
return;
|
|
196
|
+
if (visiting.has(name)) {
|
|
197
|
+
throw new Error(`Circular dependency detected: ${name}`);
|
|
198
|
+
}
|
|
199
|
+
visiting.add(name);
|
|
200
|
+
const config = configuratorRegistry[name];
|
|
201
|
+
if (config?.dependencies) {
|
|
202
|
+
for (const dep of config.dependencies) {
|
|
203
|
+
if (names.includes(dep)) {
|
|
204
|
+
visit(dep);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
visiting.delete(name);
|
|
209
|
+
visited.add(name);
|
|
210
|
+
sorted.push(name);
|
|
211
|
+
};
|
|
212
|
+
for (const name of names) {
|
|
213
|
+
visit(name);
|
|
214
|
+
}
|
|
215
|
+
return sorted;
|
|
216
|
+
};
|
|
217
|
+
/**
|
|
218
|
+
* Clear the module cache
|
|
219
|
+
*/
|
|
220
|
+
export const clearModuleCache = () => {
|
|
221
|
+
moduleCache.clear();
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* Preload configurators (for warming up)
|
|
225
|
+
*/
|
|
226
|
+
export const preloadConfigurators = async (names, options = {}) => {
|
|
227
|
+
const toLoad = names || Object.keys(configuratorRegistry);
|
|
228
|
+
await loadConfigurators(toLoad, options);
|
|
229
|
+
};
|
|
230
|
+
export default loadConfigurator;
|
|
231
|
+
//# sourceMappingURL=lazy-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-loader.js","sourceRoot":"","sources":["../../src/core/lazy-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface Step {
|
|
2
|
+
name: string;
|
|
3
|
+
fn: () => Promise<void>;
|
|
4
|
+
/** Dependencies - step names that must complete first */
|
|
5
|
+
dependencies?: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface ParallelExecutorOptions {
|
|
8
|
+
/** Show individual step progress */
|
|
9
|
+
verbose?: boolean;
|
|
10
|
+
/** Maximum concurrent steps */
|
|
11
|
+
maxConcurrency?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Execute steps with dependency resolution and parallelism
|
|
15
|
+
*/
|
|
16
|
+
export declare const executeParallel: (steps: Step[], options?: ParallelExecutorOptions) => Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Group steps by their dependency level for visualization
|
|
19
|
+
*/
|
|
20
|
+
export declare const groupByLevel: (steps: Step[]) => Step[][];
|
|
21
|
+
/**
|
|
22
|
+
* Estimate time savings from parallel execution
|
|
23
|
+
*/
|
|
24
|
+
export declare const estimateTimeSavings: (steps: Step[], avgStepTime?: number) => {
|
|
25
|
+
sequential: number;
|
|
26
|
+
parallel: number;
|
|
27
|
+
savings: number;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=parallel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel.d.ts","sourceRoot":"","sources":["../../src/core/parallel.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAQD;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,IAAI,EAAE,EACb,UAAS,uBAA4B,KACpC,OAAO,CAAC,IAAI,CAgGd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,IAAI,EAAE,KAAG,IAAI,EAAE,EAyBlD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,IAAI,EAAE,EACb,cAAa,MAAY,KACxB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAQzD,CAAC"}
|