@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.
Files changed (243) hide show
  1. package/README.md +166 -0
  2. package/bin/oaysus.js +6 -0
  3. package/dist/cli.d.ts +11 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +174 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/login.d.ts +2 -0
  8. package/dist/commands/login.d.ts.map +1 -0
  9. package/dist/commands/login.js +75 -0
  10. package/dist/commands/login.js.map +1 -0
  11. package/dist/commands/logout.d.ts +2 -0
  12. package/dist/commands/logout.d.ts.map +1 -0
  13. package/dist/commands/logout.js +23 -0
  14. package/dist/commands/logout.js.map +1 -0
  15. package/dist/commands/whoami.d.ts +2 -0
  16. package/dist/commands/whoami.d.ts.map +1 -0
  17. package/dist/commands/whoami.js +44 -0
  18. package/dist/commands/whoami.js.map +1 -0
  19. package/dist/components/App.d.ts +43 -0
  20. package/dist/components/App.d.ts.map +1 -0
  21. package/dist/components/App.js +63 -0
  22. package/dist/components/App.js.map +1 -0
  23. package/dist/components/BuildProgress.d.ts +16 -0
  24. package/dist/components/BuildProgress.d.ts.map +1 -0
  25. package/dist/components/BuildProgress.js +42 -0
  26. package/dist/components/BuildProgress.js.map +1 -0
  27. package/dist/components/ErrorMessage.d.ts +13 -0
  28. package/dist/components/ErrorMessage.d.ts.map +1 -0
  29. package/dist/components/ErrorMessage.js +29 -0
  30. package/dist/components/ErrorMessage.js.map +1 -0
  31. package/dist/components/FileList.d.ts +13 -0
  32. package/dist/components/FileList.d.ts.map +1 -0
  33. package/dist/components/FileList.js +25 -0
  34. package/dist/components/FileList.js.map +1 -0
  35. package/dist/components/Header.d.ts +12 -0
  36. package/dist/components/Header.d.ts.map +1 -0
  37. package/dist/components/Header.js +18 -0
  38. package/dist/components/Header.js.map +1 -0
  39. package/dist/components/LastCommand.d.ts +9 -0
  40. package/dist/components/LastCommand.d.ts.map +1 -0
  41. package/dist/components/LastCommand.js +39 -0
  42. package/dist/components/LastCommand.js.map +1 -0
  43. package/dist/components/Logo.d.ts +14 -0
  44. package/dist/components/Logo.d.ts.map +1 -0
  45. package/dist/components/Logo.js +44 -0
  46. package/dist/components/Logo.js.map +1 -0
  47. package/dist/components/ProgressBar.d.ts +13 -0
  48. package/dist/components/ProgressBar.d.ts.map +1 -0
  49. package/dist/components/ProgressBar.js +20 -0
  50. package/dist/components/ProgressBar.js.map +1 -0
  51. package/dist/components/SlashCommands.d.ts +17 -0
  52. package/dist/components/SlashCommands.d.ts.map +1 -0
  53. package/dist/components/SlashCommands.js +59 -0
  54. package/dist/components/SlashCommands.js.map +1 -0
  55. package/dist/components/Spinner.d.ts +13 -0
  56. package/dist/components/Spinner.d.ts.map +1 -0
  57. package/dist/components/Spinner.js +16 -0
  58. package/dist/components/Spinner.js.map +1 -0
  59. package/dist/components/StatusCard.d.ts +14 -0
  60. package/dist/components/StatusCard.d.ts.map +1 -0
  61. package/dist/components/StatusCard.js +40 -0
  62. package/dist/components/StatusCard.js.map +1 -0
  63. package/dist/components/SuccessMessage.d.ts +12 -0
  64. package/dist/components/SuccessMessage.d.ts.map +1 -0
  65. package/dist/components/SuccessMessage.js +18 -0
  66. package/dist/components/SuccessMessage.js.map +1 -0
  67. package/dist/components/UploadProgress.d.ts +13 -0
  68. package/dist/components/UploadProgress.d.ts.map +1 -0
  69. package/dist/components/UploadProgress.js +40 -0
  70. package/dist/components/UploadProgress.js.map +1 -0
  71. package/dist/components/ValidationProgress.d.ts +12 -0
  72. package/dist/components/ValidationProgress.d.ts.map +1 -0
  73. package/dist/components/ValidationProgress.js +44 -0
  74. package/dist/components/ValidationProgress.js.map +1 -0
  75. package/dist/index.d.ts +7 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +21 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/lib/core/framework-registry.d.ts +27 -0
  80. package/dist/lib/core/framework-registry.d.ts.map +1 -0
  81. package/dist/lib/core/framework-registry.js +67 -0
  82. package/dist/lib/core/framework-registry.js.map +1 -0
  83. package/dist/lib/core/types.d.ts +124 -0
  84. package/dist/lib/core/types.d.ts.map +1 -0
  85. package/dist/lib/core/types.js +6 -0
  86. package/dist/lib/core/types.js.map +1 -0
  87. package/dist/lib/project-generator.d.ts +15 -0
  88. package/dist/lib/project-generator.d.ts.map +1 -0
  89. package/dist/lib/project-generator.js +286 -0
  90. package/dist/lib/project-generator.js.map +1 -0
  91. package/dist/lib/push.d.ts +20 -0
  92. package/dist/lib/push.d.ts.map +1 -0
  93. package/dist/lib/push.js +222 -0
  94. package/dist/lib/push.js.map +1 -0
  95. package/dist/lib/react/builder.d.ts +45 -0
  96. package/dist/lib/react/builder.d.ts.map +1 -0
  97. package/dist/lib/react/builder.js +381 -0
  98. package/dist/lib/react/builder.js.map +1 -0
  99. package/dist/lib/react/bundler.d.ts +104 -0
  100. package/dist/lib/react/bundler.d.ts.map +1 -0
  101. package/dist/lib/react/bundler.js +654 -0
  102. package/dist/lib/react/bundler.js.map +1 -0
  103. package/dist/lib/react/config.d.ts +34 -0
  104. package/dist/lib/react/config.d.ts.map +1 -0
  105. package/dist/lib/react/config.js +64 -0
  106. package/dist/lib/react/config.js.map +1 -0
  107. package/dist/lib/react/import-map.d.ts +54 -0
  108. package/dist/lib/react/import-map.d.ts.map +1 -0
  109. package/dist/lib/react/import-map.js +187 -0
  110. package/dist/lib/react/import-map.js.map +1 -0
  111. package/dist/lib/shared/auth-middleware.d.ts +29 -0
  112. package/dist/lib/shared/auth-middleware.d.ts.map +1 -0
  113. package/dist/lib/shared/auth-middleware.js +48 -0
  114. package/dist/lib/shared/auth-middleware.js.map +1 -0
  115. package/dist/lib/shared/auth.d.ts +50 -0
  116. package/dist/lib/shared/auth.d.ts.map +1 -0
  117. package/dist/lib/shared/auth.js +243 -0
  118. package/dist/lib/shared/auth.js.map +1 -0
  119. package/dist/lib/shared/cdn-downloader.d.ts +30 -0
  120. package/dist/lib/shared/cdn-downloader.d.ts.map +1 -0
  121. package/dist/lib/shared/cdn-downloader.js +126 -0
  122. package/dist/lib/shared/cdn-downloader.js.map +1 -0
  123. package/dist/lib/shared/command-history.d.ts +29 -0
  124. package/dist/lib/shared/command-history.d.ts.map +1 -0
  125. package/dist/lib/shared/command-history.js +73 -0
  126. package/dist/lib/shared/command-history.js.map +1 -0
  127. package/dist/lib/shared/commands.d.ts +24 -0
  128. package/dist/lib/shared/commands.d.ts.map +1 -0
  129. package/dist/lib/shared/commands.js +63 -0
  130. package/dist/lib/shared/commands.js.map +1 -0
  131. package/dist/lib/shared/config.d.ts +40 -0
  132. package/dist/lib/shared/config.d.ts.map +1 -0
  133. package/dist/lib/shared/config.js +69 -0
  134. package/dist/lib/shared/config.js.map +1 -0
  135. package/dist/lib/shared/file-utils.d.ts +45 -0
  136. package/dist/lib/shared/file-utils.d.ts.map +1 -0
  137. package/dist/lib/shared/file-utils.js +88 -0
  138. package/dist/lib/shared/file-utils.js.map +1 -0
  139. package/dist/lib/shared/import-analyzer.d.ts +49 -0
  140. package/dist/lib/shared/import-analyzer.d.ts.map +1 -0
  141. package/dist/lib/shared/import-analyzer.js +268 -0
  142. package/dist/lib/shared/import-analyzer.js.map +1 -0
  143. package/dist/lib/shared/path-builder.d.ts +55 -0
  144. package/dist/lib/shared/path-builder.d.ts.map +1 -0
  145. package/dist/lib/shared/path-builder.js +66 -0
  146. package/dist/lib/shared/path-builder.js.map +1 -0
  147. package/dist/lib/shared/uploader.d.ts +79 -0
  148. package/dist/lib/shared/uploader.d.ts.map +1 -0
  149. package/dist/lib/shared/uploader.js +340 -0
  150. package/dist/lib/shared/uploader.js.map +1 -0
  151. package/dist/lib/shared/zip-creator.d.ts +18 -0
  152. package/dist/lib/shared/zip-creator.d.ts.map +1 -0
  153. package/dist/lib/shared/zip-creator.js +131 -0
  154. package/dist/lib/shared/zip-creator.js.map +1 -0
  155. package/dist/lib/svelte/builder.d.ts +37 -0
  156. package/dist/lib/svelte/builder.d.ts.map +1 -0
  157. package/dist/lib/svelte/builder.js +364 -0
  158. package/dist/lib/svelte/builder.js.map +1 -0
  159. package/dist/lib/svelte/bundler.d.ts +92 -0
  160. package/dist/lib/svelte/bundler.d.ts.map +1 -0
  161. package/dist/lib/svelte/bundler.js +499 -0
  162. package/dist/lib/svelte/bundler.js.map +1 -0
  163. package/dist/lib/svelte/config.d.ts +22 -0
  164. package/dist/lib/svelte/config.d.ts.map +1 -0
  165. package/dist/lib/svelte/config.js +65 -0
  166. package/dist/lib/svelte/config.js.map +1 -0
  167. package/dist/lib/svelte/import-map.d.ts +42 -0
  168. package/dist/lib/svelte/import-map.d.ts.map +1 -0
  169. package/dist/lib/svelte/import-map.js +197 -0
  170. package/dist/lib/svelte/import-map.js.map +1 -0
  171. package/dist/lib/template-manager.d.ts +33 -0
  172. package/dist/lib/template-manager.d.ts.map +1 -0
  173. package/dist/lib/template-manager.js +69 -0
  174. package/dist/lib/template-manager.js.map +1 -0
  175. package/dist/lib/validator.d.ts +10 -0
  176. package/dist/lib/validator.d.ts.map +1 -0
  177. package/dist/lib/validator.js +343 -0
  178. package/dist/lib/validator.js.map +1 -0
  179. package/dist/lib/vue/builder.d.ts +37 -0
  180. package/dist/lib/vue/builder.d.ts.map +1 -0
  181. package/dist/lib/vue/builder.js +366 -0
  182. package/dist/lib/vue/builder.js.map +1 -0
  183. package/dist/lib/vue/bundler.d.ts +78 -0
  184. package/dist/lib/vue/bundler.d.ts.map +1 -0
  185. package/dist/lib/vue/bundler.js +208 -0
  186. package/dist/lib/vue/bundler.js.map +1 -0
  187. package/dist/lib/vue/config.d.ts +18 -0
  188. package/dist/lib/vue/config.d.ts.map +1 -0
  189. package/dist/lib/vue/config.js +42 -0
  190. package/dist/lib/vue/config.js.map +1 -0
  191. package/dist/lib/vue/import-map.d.ts +42 -0
  192. package/dist/lib/vue/import-map.d.ts.map +1 -0
  193. package/dist/lib/vue/import-map.js +156 -0
  194. package/dist/lib/vue/import-map.js.map +1 -0
  195. package/dist/screens/BuildScreen.d.ts +8 -0
  196. package/dist/screens/BuildScreen.d.ts.map +1 -0
  197. package/dist/screens/BuildScreen.js +158 -0
  198. package/dist/screens/BuildScreen.js.map +1 -0
  199. package/dist/screens/CreateScreen.d.ts +12 -0
  200. package/dist/screens/CreateScreen.d.ts.map +1 -0
  201. package/dist/screens/CreateScreen.js +305 -0
  202. package/dist/screens/CreateScreen.js.map +1 -0
  203. package/dist/screens/InitScreen.d.ts +11 -0
  204. package/dist/screens/InitScreen.d.ts.map +1 -0
  205. package/dist/screens/InitScreen.js +339 -0
  206. package/dist/screens/InitScreen.js.map +1 -0
  207. package/dist/screens/LoginScreen.d.ts +15 -0
  208. package/dist/screens/LoginScreen.d.ts.map +1 -0
  209. package/dist/screens/LoginScreen.js +427 -0
  210. package/dist/screens/LoginScreen.js.map +1 -0
  211. package/dist/screens/LogoutScreen.d.ts +15 -0
  212. package/dist/screens/LogoutScreen.d.ts.map +1 -0
  213. package/dist/screens/LogoutScreen.js +187 -0
  214. package/dist/screens/LogoutScreen.js.map +1 -0
  215. package/dist/screens/PushScreen.d.ts +12 -0
  216. package/dist/screens/PushScreen.d.ts.map +1 -0
  217. package/dist/screens/PushScreen.js +546 -0
  218. package/dist/screens/PushScreen.js.map +1 -0
  219. package/dist/screens/ValidateScreen.d.ts +12 -0
  220. package/dist/screens/ValidateScreen.d.ts.map +1 -0
  221. package/dist/screens/ValidateScreen.js +193 -0
  222. package/dist/screens/ValidateScreen.js.map +1 -0
  223. package/dist/screens/WelcomeScreen.d.ts +39 -0
  224. package/dist/screens/WelcomeScreen.d.ts.map +1 -0
  225. package/dist/screens/WelcomeScreen.js +297 -0
  226. package/dist/screens/WelcomeScreen.js.map +1 -0
  227. package/dist/screens/WhoamiScreen.d.ts +14 -0
  228. package/dist/screens/WhoamiScreen.d.ts.map +1 -0
  229. package/dist/screens/WhoamiScreen.js +180 -0
  230. package/dist/screens/WhoamiScreen.js.map +1 -0
  231. package/dist/types/index.d.ts +40 -0
  232. package/dist/types/index.d.ts.map +1 -0
  233. package/dist/types/index.js +2 -0
  234. package/dist/types/index.js.map +1 -0
  235. package/dist/types/templates.d.ts +55 -0
  236. package/dist/types/templates.d.ts.map +1 -0
  237. package/dist/types/templates.js +6 -0
  238. package/dist/types/templates.js.map +1 -0
  239. package/dist/types/validation.d.ts +108 -0
  240. package/dist/types/validation.d.ts.map +1 -0
  241. package/dist/types/validation.js +6 -0
  242. package/dist/types/validation.js.map +1 -0
  243. 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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"}