@oaysus/cli 0.1.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/README.md +166 -0
- package/bin/oaysus.js +6 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +174 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +75 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +23 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +44 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/components/App.d.ts +43 -0
- package/dist/components/App.d.ts.map +1 -0
- package/dist/components/App.js +63 -0
- package/dist/components/App.js.map +1 -0
- package/dist/components/BuildProgress.d.ts +16 -0
- package/dist/components/BuildProgress.d.ts.map +1 -0
- package/dist/components/BuildProgress.js +42 -0
- package/dist/components/BuildProgress.js.map +1 -0
- package/dist/components/ErrorMessage.d.ts +13 -0
- package/dist/components/ErrorMessage.d.ts.map +1 -0
- package/dist/components/ErrorMessage.js +29 -0
- package/dist/components/ErrorMessage.js.map +1 -0
- package/dist/components/FileList.d.ts +13 -0
- package/dist/components/FileList.d.ts.map +1 -0
- package/dist/components/FileList.js +25 -0
- package/dist/components/FileList.js.map +1 -0
- package/dist/components/Header.d.ts +12 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +18 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/LastCommand.d.ts +9 -0
- package/dist/components/LastCommand.d.ts.map +1 -0
- package/dist/components/LastCommand.js +39 -0
- package/dist/components/LastCommand.js.map +1 -0
- package/dist/components/Logo.d.ts +14 -0
- package/dist/components/Logo.d.ts.map +1 -0
- package/dist/components/Logo.js +44 -0
- package/dist/components/Logo.js.map +1 -0
- package/dist/components/ProgressBar.d.ts +13 -0
- package/dist/components/ProgressBar.d.ts.map +1 -0
- package/dist/components/ProgressBar.js +20 -0
- package/dist/components/ProgressBar.js.map +1 -0
- package/dist/components/SlashCommands.d.ts +17 -0
- package/dist/components/SlashCommands.d.ts.map +1 -0
- package/dist/components/SlashCommands.js +59 -0
- package/dist/components/SlashCommands.js.map +1 -0
- package/dist/components/Spinner.d.ts +13 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +16 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/StatusCard.d.ts +14 -0
- package/dist/components/StatusCard.d.ts.map +1 -0
- package/dist/components/StatusCard.js +40 -0
- package/dist/components/StatusCard.js.map +1 -0
- package/dist/components/SuccessMessage.d.ts +12 -0
- package/dist/components/SuccessMessage.d.ts.map +1 -0
- package/dist/components/SuccessMessage.js +18 -0
- package/dist/components/SuccessMessage.js.map +1 -0
- package/dist/components/UploadProgress.d.ts +13 -0
- package/dist/components/UploadProgress.d.ts.map +1 -0
- package/dist/components/UploadProgress.js +40 -0
- package/dist/components/UploadProgress.js.map +1 -0
- package/dist/components/ValidationProgress.d.ts +12 -0
- package/dist/components/ValidationProgress.d.ts.map +1 -0
- package/dist/components/ValidationProgress.js +44 -0
- package/dist/components/ValidationProgress.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/core/framework-registry.d.ts +27 -0
- package/dist/lib/core/framework-registry.d.ts.map +1 -0
- package/dist/lib/core/framework-registry.js +67 -0
- package/dist/lib/core/framework-registry.js.map +1 -0
- package/dist/lib/core/types.d.ts +124 -0
- package/dist/lib/core/types.d.ts.map +1 -0
- package/dist/lib/core/types.js +6 -0
- package/dist/lib/core/types.js.map +1 -0
- package/dist/lib/project-generator.d.ts +15 -0
- package/dist/lib/project-generator.d.ts.map +1 -0
- package/dist/lib/project-generator.js +286 -0
- package/dist/lib/project-generator.js.map +1 -0
- package/dist/lib/push.d.ts +20 -0
- package/dist/lib/push.d.ts.map +1 -0
- package/dist/lib/push.js +222 -0
- package/dist/lib/push.js.map +1 -0
- package/dist/lib/react/builder.d.ts +45 -0
- package/dist/lib/react/builder.d.ts.map +1 -0
- package/dist/lib/react/builder.js +381 -0
- package/dist/lib/react/builder.js.map +1 -0
- package/dist/lib/react/bundler.d.ts +104 -0
- package/dist/lib/react/bundler.d.ts.map +1 -0
- package/dist/lib/react/bundler.js +654 -0
- package/dist/lib/react/bundler.js.map +1 -0
- package/dist/lib/react/config.d.ts +34 -0
- package/dist/lib/react/config.d.ts.map +1 -0
- package/dist/lib/react/config.js +64 -0
- package/dist/lib/react/config.js.map +1 -0
- package/dist/lib/react/import-map.d.ts +54 -0
- package/dist/lib/react/import-map.d.ts.map +1 -0
- package/dist/lib/react/import-map.js +187 -0
- package/dist/lib/react/import-map.js.map +1 -0
- package/dist/lib/shared/auth-middleware.d.ts +29 -0
- package/dist/lib/shared/auth-middleware.d.ts.map +1 -0
- package/dist/lib/shared/auth-middleware.js +48 -0
- package/dist/lib/shared/auth-middleware.js.map +1 -0
- package/dist/lib/shared/auth.d.ts +50 -0
- package/dist/lib/shared/auth.d.ts.map +1 -0
- package/dist/lib/shared/auth.js +243 -0
- package/dist/lib/shared/auth.js.map +1 -0
- package/dist/lib/shared/cdn-downloader.d.ts +30 -0
- package/dist/lib/shared/cdn-downloader.d.ts.map +1 -0
- package/dist/lib/shared/cdn-downloader.js +126 -0
- package/dist/lib/shared/cdn-downloader.js.map +1 -0
- package/dist/lib/shared/command-history.d.ts +29 -0
- package/dist/lib/shared/command-history.d.ts.map +1 -0
- package/dist/lib/shared/command-history.js +73 -0
- package/dist/lib/shared/command-history.js.map +1 -0
- package/dist/lib/shared/commands.d.ts +24 -0
- package/dist/lib/shared/commands.d.ts.map +1 -0
- package/dist/lib/shared/commands.js +63 -0
- package/dist/lib/shared/commands.js.map +1 -0
- package/dist/lib/shared/config.d.ts +40 -0
- package/dist/lib/shared/config.d.ts.map +1 -0
- package/dist/lib/shared/config.js +69 -0
- package/dist/lib/shared/config.js.map +1 -0
- package/dist/lib/shared/file-utils.d.ts +45 -0
- package/dist/lib/shared/file-utils.d.ts.map +1 -0
- package/dist/lib/shared/file-utils.js +88 -0
- package/dist/lib/shared/file-utils.js.map +1 -0
- package/dist/lib/shared/import-analyzer.d.ts +49 -0
- package/dist/lib/shared/import-analyzer.d.ts.map +1 -0
- package/dist/lib/shared/import-analyzer.js +268 -0
- package/dist/lib/shared/import-analyzer.js.map +1 -0
- package/dist/lib/shared/path-builder.d.ts +55 -0
- package/dist/lib/shared/path-builder.d.ts.map +1 -0
- package/dist/lib/shared/path-builder.js +66 -0
- package/dist/lib/shared/path-builder.js.map +1 -0
- package/dist/lib/shared/uploader.d.ts +79 -0
- package/dist/lib/shared/uploader.d.ts.map +1 -0
- package/dist/lib/shared/uploader.js +340 -0
- package/dist/lib/shared/uploader.js.map +1 -0
- package/dist/lib/shared/zip-creator.d.ts +18 -0
- package/dist/lib/shared/zip-creator.d.ts.map +1 -0
- package/dist/lib/shared/zip-creator.js +131 -0
- package/dist/lib/shared/zip-creator.js.map +1 -0
- package/dist/lib/svelte/builder.d.ts +37 -0
- package/dist/lib/svelte/builder.d.ts.map +1 -0
- package/dist/lib/svelte/builder.js +364 -0
- package/dist/lib/svelte/builder.js.map +1 -0
- package/dist/lib/svelte/bundler.d.ts +92 -0
- package/dist/lib/svelte/bundler.d.ts.map +1 -0
- package/dist/lib/svelte/bundler.js +499 -0
- package/dist/lib/svelte/bundler.js.map +1 -0
- package/dist/lib/svelte/config.d.ts +22 -0
- package/dist/lib/svelte/config.d.ts.map +1 -0
- package/dist/lib/svelte/config.js +65 -0
- package/dist/lib/svelte/config.js.map +1 -0
- package/dist/lib/svelte/import-map.d.ts +42 -0
- package/dist/lib/svelte/import-map.d.ts.map +1 -0
- package/dist/lib/svelte/import-map.js +197 -0
- package/dist/lib/svelte/import-map.js.map +1 -0
- package/dist/lib/template-manager.d.ts +33 -0
- package/dist/lib/template-manager.d.ts.map +1 -0
- package/dist/lib/template-manager.js +69 -0
- package/dist/lib/template-manager.js.map +1 -0
- package/dist/lib/validator.d.ts +10 -0
- package/dist/lib/validator.d.ts.map +1 -0
- package/dist/lib/validator.js +343 -0
- package/dist/lib/validator.js.map +1 -0
- package/dist/lib/vue/builder.d.ts +37 -0
- package/dist/lib/vue/builder.d.ts.map +1 -0
- package/dist/lib/vue/builder.js +366 -0
- package/dist/lib/vue/builder.js.map +1 -0
- package/dist/lib/vue/bundler.d.ts +78 -0
- package/dist/lib/vue/bundler.d.ts.map +1 -0
- package/dist/lib/vue/bundler.js +208 -0
- package/dist/lib/vue/bundler.js.map +1 -0
- package/dist/lib/vue/config.d.ts +18 -0
- package/dist/lib/vue/config.d.ts.map +1 -0
- package/dist/lib/vue/config.js +42 -0
- package/dist/lib/vue/config.js.map +1 -0
- package/dist/lib/vue/import-map.d.ts +42 -0
- package/dist/lib/vue/import-map.d.ts.map +1 -0
- package/dist/lib/vue/import-map.js +156 -0
- package/dist/lib/vue/import-map.js.map +1 -0
- package/dist/screens/BuildScreen.d.ts +8 -0
- package/dist/screens/BuildScreen.d.ts.map +1 -0
- package/dist/screens/BuildScreen.js +158 -0
- package/dist/screens/BuildScreen.js.map +1 -0
- package/dist/screens/CreateScreen.d.ts +12 -0
- package/dist/screens/CreateScreen.d.ts.map +1 -0
- package/dist/screens/CreateScreen.js +305 -0
- package/dist/screens/CreateScreen.js.map +1 -0
- package/dist/screens/InitScreen.d.ts +11 -0
- package/dist/screens/InitScreen.d.ts.map +1 -0
- package/dist/screens/InitScreen.js +339 -0
- package/dist/screens/InitScreen.js.map +1 -0
- package/dist/screens/LoginScreen.d.ts +15 -0
- package/dist/screens/LoginScreen.d.ts.map +1 -0
- package/dist/screens/LoginScreen.js +427 -0
- package/dist/screens/LoginScreen.js.map +1 -0
- package/dist/screens/LogoutScreen.d.ts +15 -0
- package/dist/screens/LogoutScreen.d.ts.map +1 -0
- package/dist/screens/LogoutScreen.js +187 -0
- package/dist/screens/LogoutScreen.js.map +1 -0
- package/dist/screens/PushScreen.d.ts +12 -0
- package/dist/screens/PushScreen.d.ts.map +1 -0
- package/dist/screens/PushScreen.js +546 -0
- package/dist/screens/PushScreen.js.map +1 -0
- package/dist/screens/ValidateScreen.d.ts +12 -0
- package/dist/screens/ValidateScreen.d.ts.map +1 -0
- package/dist/screens/ValidateScreen.js +193 -0
- package/dist/screens/ValidateScreen.js.map +1 -0
- package/dist/screens/WelcomeScreen.d.ts +39 -0
- package/dist/screens/WelcomeScreen.d.ts.map +1 -0
- package/dist/screens/WelcomeScreen.js +297 -0
- package/dist/screens/WelcomeScreen.js.map +1 -0
- package/dist/screens/WhoamiScreen.d.ts +14 -0
- package/dist/screens/WhoamiScreen.d.ts.map +1 -0
- package/dist/screens/WhoamiScreen.js +180 -0
- package/dist/screens/WhoamiScreen.js.map +1 -0
- package/dist/types/index.d.ts +40 -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/types/templates.d.ts +55 -0
- package/dist/types/templates.d.ts.map +1 -0
- package/dist/types/templates.js +6 -0
- package/dist/types/templates.js.map +1 -0
- package/dist/types/validation.d.ts +108 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +6 -0
- package/dist/types/validation.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Component Builder
|
|
3
|
+
* React-specific implementation of the component builder
|
|
4
|
+
*/
|
|
5
|
+
import { build as viteBuild } from 'vite';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
import { execSync } from 'child_process';
|
|
9
|
+
import { getReactPlugin, buildExternals } from './config.js';
|
|
10
|
+
class ReactBuilder {
|
|
11
|
+
/** Detected dependencies to externalize (set during buildComponents) */
|
|
12
|
+
detectedDeps = [];
|
|
13
|
+
/**
|
|
14
|
+
* Build a single React component with Vite
|
|
15
|
+
*/
|
|
16
|
+
async buildComponent(component, projectPath, outputDir, packageJson, getDependenciesToBundle, filterRuntimeDependencies) {
|
|
17
|
+
const componentOutDir = path.join(outputDir, component.name);
|
|
18
|
+
// Ensure output directory exists
|
|
19
|
+
if (!fs.existsSync(componentOutDir)) {
|
|
20
|
+
fs.mkdirSync(componentOutDir, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
// Get React plugin (returns null - uses esbuild JSX)
|
|
23
|
+
const plugin = await getReactPlugin();
|
|
24
|
+
const plugins = plugin ? [plugin] : [];
|
|
25
|
+
// Externalize React framework dependencies AND detected external deps
|
|
26
|
+
// These will be loaded via import map at runtime
|
|
27
|
+
const external = buildExternals(this.detectedDeps);
|
|
28
|
+
// Resolve absolute entry path
|
|
29
|
+
const entryPath = path.resolve(projectPath, component.entryPoint);
|
|
30
|
+
// Build with Vite in production mode
|
|
31
|
+
const originalNodeEnv = process.env.NODE_ENV;
|
|
32
|
+
process.env.NODE_ENV = 'production';
|
|
33
|
+
try {
|
|
34
|
+
await viteBuild({
|
|
35
|
+
configFile: false,
|
|
36
|
+
mode: 'production',
|
|
37
|
+
logLevel: 'warn',
|
|
38
|
+
define: {
|
|
39
|
+
'process.env.NODE_ENV': JSON.stringify('production')
|
|
40
|
+
},
|
|
41
|
+
build: {
|
|
42
|
+
lib: {
|
|
43
|
+
entry: entryPath,
|
|
44
|
+
formats: ['es'],
|
|
45
|
+
fileName: 'index'
|
|
46
|
+
},
|
|
47
|
+
rollupOptions: {
|
|
48
|
+
external,
|
|
49
|
+
output: {
|
|
50
|
+
format: 'es',
|
|
51
|
+
entryFileNames: 'index.js',
|
|
52
|
+
exports: 'auto'
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
outDir: componentOutDir,
|
|
56
|
+
minify: 'terser',
|
|
57
|
+
sourcemap: false,
|
|
58
|
+
emptyOutDir: false,
|
|
59
|
+
target: 'es2020',
|
|
60
|
+
cssCodeSplit: false
|
|
61
|
+
},
|
|
62
|
+
plugins
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
// Restore original NODE_ENV
|
|
67
|
+
if (originalNodeEnv !== undefined) {
|
|
68
|
+
process.env.NODE_ENV = originalNodeEnv;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
delete process.env.NODE_ENV;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Copy schema.json
|
|
75
|
+
const schemaSource = path.join(component.path, 'schema.json');
|
|
76
|
+
const schemaDest = path.join(componentOutDir, 'schema.json');
|
|
77
|
+
if (fs.existsSync(schemaSource)) {
|
|
78
|
+
fs.copyFileSync(schemaSource, schemaDest);
|
|
79
|
+
}
|
|
80
|
+
// Get file sizes
|
|
81
|
+
const jsPath = path.join(componentOutDir, 'index.js');
|
|
82
|
+
const cssPath = path.join(componentOutDir, 'style.css');
|
|
83
|
+
let size = 0;
|
|
84
|
+
if (fs.existsSync(jsPath)) {
|
|
85
|
+
size += fs.statSync(jsPath).size;
|
|
86
|
+
}
|
|
87
|
+
const hasCss = fs.existsSync(cssPath);
|
|
88
|
+
if (hasCss) {
|
|
89
|
+
size += fs.statSync(cssPath).size;
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
name: component.name,
|
|
93
|
+
displayName: component.displayName,
|
|
94
|
+
jsPath,
|
|
95
|
+
cssPath: hasCss ? cssPath : undefined,
|
|
96
|
+
schemaPath: schemaDest,
|
|
97
|
+
size
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Build theme-level Tailwind CSS
|
|
102
|
+
* Supports both Tailwind v3 and v4
|
|
103
|
+
*/
|
|
104
|
+
async buildThemeCSS(projectPath, outputDir, packageJson) {
|
|
105
|
+
// Check if Tailwind is in dependencies
|
|
106
|
+
const deps = {
|
|
107
|
+
...packageJson.dependencies,
|
|
108
|
+
...packageJson.devDependencies
|
|
109
|
+
};
|
|
110
|
+
if (!deps.tailwindcss) {
|
|
111
|
+
console.log('[ReactBuilder] No Tailwind dependency found, skipping CSS build');
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
// Detect Tailwind version
|
|
115
|
+
const tailwindVersion = deps.tailwindcss;
|
|
116
|
+
const isV4 = tailwindVersion.match(/^[\^~]?4/);
|
|
117
|
+
// Check for tailwind config
|
|
118
|
+
const tailwindConfigPath = path.join(projectPath, 'tailwind.config.js');
|
|
119
|
+
const tailwindConfigTsPath = path.join(projectPath, 'tailwind.config.ts');
|
|
120
|
+
const hasTailwindConfig = fs.existsSync(tailwindConfigPath) || fs.existsSync(tailwindConfigTsPath);
|
|
121
|
+
if (!isV4 && !hasTailwindConfig) {
|
|
122
|
+
console.log('[ReactBuilder] No tailwind.config found, skipping CSS build');
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
// Create temporary CSS entry file
|
|
127
|
+
const tempCssEntry = path.join(projectPath, '.oaysus-temp-tailwind.css');
|
|
128
|
+
if (isV4) {
|
|
129
|
+
fs.writeFileSync(tempCssEntry, `@import "tailwindcss";\n`);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
fs.writeFileSync(tempCssEntry, `@tailwind base;
|
|
133
|
+
@tailwind components;
|
|
134
|
+
@tailwind utilities;
|
|
135
|
+
`);
|
|
136
|
+
}
|
|
137
|
+
const themeCssPath = path.join(outputDir, 'theme.css');
|
|
138
|
+
console.log(`[ReactBuilder] Building Tailwind CSS (v${isV4 ? '4' : '3'})...`);
|
|
139
|
+
// Get Tailwind binary
|
|
140
|
+
let tailwindBin;
|
|
141
|
+
if (isV4) {
|
|
142
|
+
const v4CliBin = path.join(projectPath, 'node_modules/.bin/tailwindcss');
|
|
143
|
+
const v4CliPackage = path.join(projectPath, 'node_modules/@tailwindcss/cli');
|
|
144
|
+
if (fs.existsSync(v4CliPackage)) {
|
|
145
|
+
tailwindBin = v4CliBin;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
console.log('[ReactBuilder] Installing @tailwindcss/cli for Tailwind v4...');
|
|
149
|
+
execSync('npm install --save-dev @tailwindcss/cli', {
|
|
150
|
+
cwd: projectPath,
|
|
151
|
+
stdio: 'pipe'
|
|
152
|
+
});
|
|
153
|
+
tailwindBin = v4CliBin;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
tailwindBin = path.join(projectPath, 'node_modules/.bin/tailwindcss');
|
|
158
|
+
}
|
|
159
|
+
execSync(`"${tailwindBin}" -i "${tempCssEntry}" -o "${themeCssPath}" --minify`, {
|
|
160
|
+
cwd: projectPath,
|
|
161
|
+
stdio: 'pipe',
|
|
162
|
+
env: {
|
|
163
|
+
...process.env,
|
|
164
|
+
NODE_ENV: 'production'
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
// Clean up temp file
|
|
168
|
+
fs.unlinkSync(tempCssEntry);
|
|
169
|
+
// Get file size
|
|
170
|
+
const size = fs.existsSync(themeCssPath) ? fs.statSync(themeCssPath).size : 0;
|
|
171
|
+
console.log(`[ReactBuilder] Theme CSS built: ${(size / 1024).toFixed(2)} KB`);
|
|
172
|
+
return {
|
|
173
|
+
cssPath: themeCssPath,
|
|
174
|
+
size
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
console.error('[ReactBuilder] Failed to build Tailwind CSS:', error);
|
|
179
|
+
const tempCssEntry = path.join(projectPath, '.oaysus-temp-tailwind.css');
|
|
180
|
+
if (fs.existsSync(tempCssEntry)) {
|
|
181
|
+
fs.unlinkSync(tempCssEntry);
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Set detected dependencies to externalize during build
|
|
188
|
+
* Call this before buildComponents() to externalize third-party libs
|
|
189
|
+
*/
|
|
190
|
+
setDetectedDependencies(deps) {
|
|
191
|
+
this.detectedDeps = deps;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Build all React components in a package
|
|
195
|
+
*/
|
|
196
|
+
async buildComponents(validationResult, projectPath, detectedDeps) {
|
|
197
|
+
// Store detected deps for use in buildComponent
|
|
198
|
+
if (detectedDeps) {
|
|
199
|
+
this.detectedDeps = detectedDeps;
|
|
200
|
+
}
|
|
201
|
+
const outputDir = path.join(projectPath, '.oaysus-build');
|
|
202
|
+
const components = [];
|
|
203
|
+
let totalSize = 0;
|
|
204
|
+
try {
|
|
205
|
+
// Clean output directory
|
|
206
|
+
if (fs.existsSync(outputDir)) {
|
|
207
|
+
fs.rmSync(outputDir, { recursive: true });
|
|
208
|
+
}
|
|
209
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
210
|
+
// Import dependencies functions dynamically to avoid circular deps
|
|
211
|
+
const { getDependenciesToBundle } = await import('./import-map.js');
|
|
212
|
+
const { filterRuntimeDependencies } = await import('./bundler.js');
|
|
213
|
+
// Build each component
|
|
214
|
+
for (const component of validationResult.components) {
|
|
215
|
+
const builtComponent = await this.buildComponent(component, projectPath, outputDir, validationResult.packageJson, getDependenciesToBundle, filterRuntimeDependencies);
|
|
216
|
+
components.push(builtComponent);
|
|
217
|
+
totalSize += builtComponent.size;
|
|
218
|
+
}
|
|
219
|
+
// Build theme-level Tailwind CSS
|
|
220
|
+
const themeCss = await this.buildThemeCSS(projectPath, outputDir, validationResult.packageJson);
|
|
221
|
+
return {
|
|
222
|
+
success: true,
|
|
223
|
+
outputDir,
|
|
224
|
+
components,
|
|
225
|
+
totalSize: totalSize + (themeCss?.size || 0),
|
|
226
|
+
themeCssPath: themeCss?.cssPath,
|
|
227
|
+
themeCssSize: themeCss?.size
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
return {
|
|
232
|
+
success: false,
|
|
233
|
+
outputDir,
|
|
234
|
+
components,
|
|
235
|
+
totalSize: 0,
|
|
236
|
+
error: error instanceof Error ? error.message : 'Build failed'
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Build a single React component for server-side rendering
|
|
242
|
+
* Creates self-contained Node.js bundle with render function export
|
|
243
|
+
*/
|
|
244
|
+
async buildServerComponent(component, projectPath, outputDir) {
|
|
245
|
+
const componentOutDir = path.join(outputDir, component.name);
|
|
246
|
+
// Ensure output directory exists
|
|
247
|
+
if (!fs.existsSync(componentOutDir)) {
|
|
248
|
+
fs.mkdirSync(componentOutDir, { recursive: true });
|
|
249
|
+
}
|
|
250
|
+
// Create temporary wrapper that exports component + render function
|
|
251
|
+
const componentPath = path.resolve(projectPath, component.entryPoint);
|
|
252
|
+
const wrapperPath = path.join(componentOutDir, '.temp-server-wrapper.js');
|
|
253
|
+
const wrapperCode = `
|
|
254
|
+
import Component from '${componentPath}';
|
|
255
|
+
import { jsx } from 'react/jsx-runtime';
|
|
256
|
+
import { renderToString } from 'react-dom/server';
|
|
257
|
+
|
|
258
|
+
export default Component;
|
|
259
|
+
|
|
260
|
+
export function render(props) {
|
|
261
|
+
return renderToString(jsx(Component, props));
|
|
262
|
+
}
|
|
263
|
+
`;
|
|
264
|
+
fs.writeFileSync(wrapperPath, wrapperCode);
|
|
265
|
+
// Get React plugin (returns null - uses esbuild JSX)
|
|
266
|
+
const plugin = await getReactPlugin();
|
|
267
|
+
const plugins = plugin ? [plugin] : [];
|
|
268
|
+
// Externalize React/ReactDOM to ensure SSR uses same instance as client
|
|
269
|
+
// This prevents hydration mismatches (Error #418, #423)
|
|
270
|
+
const external = (id) => {
|
|
271
|
+
if (id === 'react' || id.startsWith('react/') || id === 'react-dom' || id.startsWith('react-dom/')) {
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
return false;
|
|
275
|
+
};
|
|
276
|
+
// Build with Vite in production mode for Node.js
|
|
277
|
+
const originalNodeEnv = process.env.NODE_ENV;
|
|
278
|
+
process.env.NODE_ENV = 'production';
|
|
279
|
+
try {
|
|
280
|
+
await viteBuild({
|
|
281
|
+
configFile: false,
|
|
282
|
+
mode: 'production',
|
|
283
|
+
logLevel: 'warn',
|
|
284
|
+
define: {
|
|
285
|
+
'process.env.NODE_ENV': JSON.stringify('production')
|
|
286
|
+
},
|
|
287
|
+
ssr: {
|
|
288
|
+
noExternal: true // Bundle all dependencies, don't externalize anything
|
|
289
|
+
},
|
|
290
|
+
build: {
|
|
291
|
+
lib: {
|
|
292
|
+
entry: wrapperPath, // Build the wrapper, not the component directly
|
|
293
|
+
formats: ['es'],
|
|
294
|
+
fileName: 'server'
|
|
295
|
+
},
|
|
296
|
+
rollupOptions: {
|
|
297
|
+
external,
|
|
298
|
+
output: {
|
|
299
|
+
format: 'es',
|
|
300
|
+
entryFileNames: 'server.js',
|
|
301
|
+
exports: 'auto',
|
|
302
|
+
inlineDynamicImports: false
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
outDir: componentOutDir,
|
|
306
|
+
minify: 'terser',
|
|
307
|
+
sourcemap: false,
|
|
308
|
+
emptyOutDir: false,
|
|
309
|
+
target: 'node18',
|
|
310
|
+
ssr: true, // Enable SSR mode
|
|
311
|
+
cssCodeSplit: false
|
|
312
|
+
},
|
|
313
|
+
plugins
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
finally {
|
|
317
|
+
// Restore original NODE_ENV
|
|
318
|
+
if (originalNodeEnv !== undefined) {
|
|
319
|
+
process.env.NODE_ENV = originalNodeEnv;
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
delete process.env.NODE_ENV;
|
|
323
|
+
}
|
|
324
|
+
// Clean up temp wrapper file
|
|
325
|
+
if (fs.existsSync(wrapperPath)) {
|
|
326
|
+
fs.unlinkSync(wrapperPath);
|
|
327
|
+
}
|
|
328
|
+
// Clean up extracted CSS file - not needed for SSR
|
|
329
|
+
// CSS is extracted as a side effect of bundling deps like Swiper
|
|
330
|
+
const cssPath = path.join(componentOutDir, 'server.css');
|
|
331
|
+
if (fs.existsSync(cssPath)) {
|
|
332
|
+
fs.unlinkSync(cssPath);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Get file size
|
|
336
|
+
const jsPath = path.join(componentOutDir, 'server.js');
|
|
337
|
+
const size = fs.existsSync(jsPath) ? fs.statSync(jsPath).size : 0;
|
|
338
|
+
return {
|
|
339
|
+
name: component.name,
|
|
340
|
+
displayName: component.displayName,
|
|
341
|
+
jsPath,
|
|
342
|
+
size
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Build all React components for server-side rendering
|
|
347
|
+
*/
|
|
348
|
+
async buildServerComponents(validationResult, projectPath) {
|
|
349
|
+
const outputDir = path.join(projectPath, '.oaysus-build');
|
|
350
|
+
const serverComponents = [];
|
|
351
|
+
let totalSize = 0;
|
|
352
|
+
try {
|
|
353
|
+
// Build each component for server
|
|
354
|
+
for (const component of validationResult.components) {
|
|
355
|
+
const builtServerComponent = await this.buildServerComponent(component, projectPath, outputDir);
|
|
356
|
+
serverComponents.push(builtServerComponent);
|
|
357
|
+
totalSize += builtServerComponent.size;
|
|
358
|
+
}
|
|
359
|
+
return {
|
|
360
|
+
success: true,
|
|
361
|
+
outputDir,
|
|
362
|
+
components: serverComponents,
|
|
363
|
+
totalSize
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
return {
|
|
368
|
+
success: false,
|
|
369
|
+
outputDir,
|
|
370
|
+
components: [],
|
|
371
|
+
totalSize: 0,
|
|
372
|
+
error: error instanceof Error ? error.message : 'Server build failed'
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
// Export singleton instance
|
|
378
|
+
const builder = new ReactBuilder();
|
|
379
|
+
export default builder;
|
|
380
|
+
export { builder };
|
|
381
|
+
//# sourceMappingURL=builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/lib/react/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Dependency Bundler
|
|
3
|
+
* React-specific implementation for bundling dependencies
|
|
4
|
+
*/
|
|
5
|
+
import type { IBundler, BundledDependency, BundleDependencyOptions } from '../core/types.js';
|
|
6
|
+
import type { DetectedDependency } from '../shared/import-analyzer.js';
|
|
7
|
+
declare class ReactBundler implements IBundler {
|
|
8
|
+
/**
|
|
9
|
+
* Get exports configuration for a React package
|
|
10
|
+
*/
|
|
11
|
+
private getExportsConfig;
|
|
12
|
+
/**
|
|
13
|
+
* Read bundle file from multiple possible paths
|
|
14
|
+
*/
|
|
15
|
+
private readBundleFile;
|
|
16
|
+
/**
|
|
17
|
+
* Bundle a sub-export (e.g., react/jsx-runtime, react-dom/client)
|
|
18
|
+
*/
|
|
19
|
+
private bundleSubExport;
|
|
20
|
+
/**
|
|
21
|
+
* Bundle a single dependency
|
|
22
|
+
*/
|
|
23
|
+
private bundleSingleDependency;
|
|
24
|
+
/**
|
|
25
|
+
* Bundle multiple dependencies for R2 upload
|
|
26
|
+
*/
|
|
27
|
+
bundleDependencies(dependencies: Array<{
|
|
28
|
+
name: string;
|
|
29
|
+
version: string;
|
|
30
|
+
}>, options: BundleDependencyOptions): Promise<BundledDependency[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Filter dependencies to only include runtime dependencies
|
|
33
|
+
*/
|
|
34
|
+
filterRuntimeDependencies(dependencies: Array<{
|
|
35
|
+
name: string;
|
|
36
|
+
version: string;
|
|
37
|
+
}>): Array<{
|
|
38
|
+
name: string;
|
|
39
|
+
version: string;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Get the size of bundled dependencies in bytes
|
|
43
|
+
*/
|
|
44
|
+
getBundleSize(bundles: BundledDependency[]): number;
|
|
45
|
+
/**
|
|
46
|
+
* Format bundle size for display
|
|
47
|
+
*/
|
|
48
|
+
formatBundleSize(bytes: number): string;
|
|
49
|
+
/**
|
|
50
|
+
* Bundle framework dependencies for server-side rendering (Node.js)
|
|
51
|
+
* Creates node_modules structure that can be downloaded and used by Express
|
|
52
|
+
*/
|
|
53
|
+
bundleServerDependencies(dependencies: Array<{
|
|
54
|
+
name: string;
|
|
55
|
+
version: string;
|
|
56
|
+
}>, options: BundleDependencyOptions): Promise<{
|
|
57
|
+
depKey: string;
|
|
58
|
+
path: string;
|
|
59
|
+
size: number;
|
|
60
|
+
}[]>;
|
|
61
|
+
/**
|
|
62
|
+
* Bundle detected external dependencies (non-React libraries)
|
|
63
|
+
* Creates ESM bundles for JS and CSS wrapper modules
|
|
64
|
+
*/
|
|
65
|
+
bundleDetectedDependencies(detectedDeps: DetectedDependency[], options: BundleDependencyOptions): Promise<BundledDependency[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Bundle a single external dependency with all its sub-exports and CSS
|
|
68
|
+
*/
|
|
69
|
+
private bundleExternalDependency;
|
|
70
|
+
/**
|
|
71
|
+
* Bundle a package export (main or sub-export)
|
|
72
|
+
*/
|
|
73
|
+
private bundlePackageExport;
|
|
74
|
+
/**
|
|
75
|
+
* Bundle a CSS import as a JS module that injects styles
|
|
76
|
+
*/
|
|
77
|
+
private bundleCSSAsModule;
|
|
78
|
+
}
|
|
79
|
+
declare const bundler: ReactBundler;
|
|
80
|
+
export default bundler;
|
|
81
|
+
export { bundler };
|
|
82
|
+
export declare const bundleDependencies: (dependencies: Array<{
|
|
83
|
+
name: string;
|
|
84
|
+
version: string;
|
|
85
|
+
}>, options: BundleDependencyOptions) => Promise<BundledDependency[]>;
|
|
86
|
+
export declare const filterRuntimeDependencies: (dependencies: Array<{
|
|
87
|
+
name: string;
|
|
88
|
+
version: string;
|
|
89
|
+
}>) => Array<{
|
|
90
|
+
name: string;
|
|
91
|
+
version: string;
|
|
92
|
+
}>;
|
|
93
|
+
export declare const getBundleSize: (bundles: BundledDependency[]) => number;
|
|
94
|
+
export declare const formatBundleSize: (bytes: number) => string;
|
|
95
|
+
export declare const bundleServerDependencies: (dependencies: Array<{
|
|
96
|
+
name: string;
|
|
97
|
+
version: string;
|
|
98
|
+
}>, options: BundleDependencyOptions) => Promise<{
|
|
99
|
+
depKey: string;
|
|
100
|
+
path: string;
|
|
101
|
+
size: number;
|
|
102
|
+
}[]>;
|
|
103
|
+
export declare const bundleDetectedDependencies: (detectedDeps: DetectedDependency[], options: BundleDependencyOptions) => Promise<BundledDependency[]>;
|
|
104
|
+
//# sourceMappingURL=bundler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundler.d.ts","sourceRoot":"","sources":["../../../src/lib/react/bundler.ts"],"names":[],"mappings":"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"}
|