satset-react 0.0.1-beta.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 (141) hide show
  1. package/dist/adapter/index.d.ts +4 -0
  2. package/dist/adapter/index.d.ts.map +1 -0
  3. package/dist/adapter/index.js +8 -0
  4. package/dist/adapter/index.js.map +1 -0
  5. package/dist/adapter/node.d.ts +3 -0
  6. package/dist/adapter/node.d.ts.map +1 -0
  7. package/dist/adapter/node.js +244 -0
  8. package/dist/adapter/node.js.map +1 -0
  9. package/dist/adapter/types.d.ts +24 -0
  10. package/dist/adapter/types.d.ts.map +1 -0
  11. package/dist/adapter/types.js +3 -0
  12. package/dist/adapter/types.js.map +1 -0
  13. package/dist/adapter/vercel.d.ts +3 -0
  14. package/dist/adapter/vercel.d.ts.map +1 -0
  15. package/dist/adapter/vercel.js +173 -0
  16. package/dist/adapter/vercel.js.map +1 -0
  17. package/dist/assets/favicon.d.ts +2 -0
  18. package/dist/assets/favicon.d.ts.map +1 -0
  19. package/dist/assets/favicon.js +67 -0
  20. package/dist/assets/favicon.js.map +1 -0
  21. package/dist/assets/index.d.ts +6 -0
  22. package/dist/assets/index.d.ts.map +1 -0
  23. package/dist/assets/index.js +14 -0
  24. package/dist/assets/index.js.map +1 -0
  25. package/dist/assets/metadata.d.ts +23 -0
  26. package/dist/assets/metadata.d.ts.map +1 -0
  27. package/dist/assets/metadata.js +55 -0
  28. package/dist/assets/metadata.js.map +1 -0
  29. package/dist/assets/robots.d.ts +11 -0
  30. package/dist/assets/robots.d.ts.map +1 -0
  31. package/dist/assets/robots.js +70 -0
  32. package/dist/assets/robots.js.map +1 -0
  33. package/dist/assets/sitemap.d.ts +12 -0
  34. package/dist/assets/sitemap.d.ts.map +1 -0
  35. package/dist/assets/sitemap.js +71 -0
  36. package/dist/assets/sitemap.js.map +1 -0
  37. package/dist/cli/commands.d.ts +4 -0
  38. package/dist/cli/commands.d.ts.map +1 -0
  39. package/dist/cli/commands.js +74 -0
  40. package/dist/cli/commands.js.map +1 -0
  41. package/dist/cli/index.d.ts +3 -0
  42. package/dist/cli/index.d.ts.map +1 -0
  43. package/dist/cli/index.js +32 -0
  44. package/dist/cli/index.js.map +1 -0
  45. package/dist/components/ErrorBoundary.d.ts +22 -0
  46. package/dist/components/ErrorBoundary.d.ts.map +1 -0
  47. package/dist/components/ErrorBoundary.js +56 -0
  48. package/dist/components/ErrorBoundary.js.map +1 -0
  49. package/dist/components/Image.d.ts +15 -0
  50. package/dist/components/Image.d.ts.map +1 -0
  51. package/dist/components/Image.js +65 -0
  52. package/dist/components/Image.js.map +1 -0
  53. package/dist/components/Link.d.ts +14 -0
  54. package/dist/components/Link.d.ts.map +1 -0
  55. package/dist/components/Link.js +67 -0
  56. package/dist/components/Link.js.map +1 -0
  57. package/dist/components/Script.d.ts +10 -0
  58. package/dist/components/Script.d.ts.map +1 -0
  59. package/dist/components/Script.js +60 -0
  60. package/dist/components/Script.js.map +1 -0
  61. package/dist/components/index.d.ts +5 -0
  62. package/dist/components/index.d.ts.map +1 -0
  63. package/dist/components/index.js +15 -0
  64. package/dist/components/index.js.map +1 -0
  65. package/dist/core/hydrate.d.ts +8 -0
  66. package/dist/core/hydrate.d.ts.map +1 -0
  67. package/dist/core/hydrate.js +73 -0
  68. package/dist/core/hydrate.js.map +1 -0
  69. package/dist/core/index.d.ts +8 -0
  70. package/dist/core/index.d.ts.map +1 -0
  71. package/dist/core/index.js +19 -0
  72. package/dist/core/index.js.map +1 -0
  73. package/dist/core/ssr.d.ts +28 -0
  74. package/dist/core/ssr.d.ts.map +1 -0
  75. package/dist/core/ssr.js +91 -0
  76. package/dist/core/ssr.js.map +1 -0
  77. package/dist/core/types.d.ts +24 -0
  78. package/dist/core/types.d.ts.map +1 -0
  79. package/dist/core/types.js +3 -0
  80. package/dist/core/types.js.map +1 -0
  81. package/dist/index.d.ts +8 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +27 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/navigation/notFound.d.ts +2 -0
  86. package/dist/navigation/notFound.d.ts.map +1 -0
  87. package/dist/navigation/notFound.js +9 -0
  88. package/dist/navigation/notFound.js.map +1 -0
  89. package/dist/router/file-system.d.ts +19 -0
  90. package/dist/router/file-system.d.ts.map +1 -0
  91. package/dist/router/file-system.js +332 -0
  92. package/dist/router/file-system.js.map +1 -0
  93. package/dist/router/index.d.ts +4 -0
  94. package/dist/router/index.d.ts.map +1 -0
  95. package/dist/router/index.js +12 -0
  96. package/dist/router/index.js.map +1 -0
  97. package/dist/router/router.d.ts +17 -0
  98. package/dist/router/router.d.ts.map +1 -0
  99. package/dist/router/router.js +138 -0
  100. package/dist/router/router.js.map +1 -0
  101. package/dist/router/types.d.ts +11 -0
  102. package/dist/router/types.d.ts.map +1 -0
  103. package/dist/router/types.js +3 -0
  104. package/dist/router/types.js.map +1 -0
  105. package/dist/server/build.d.ts +5 -0
  106. package/dist/server/build.d.ts.map +1 -0
  107. package/dist/server/build.js +449 -0
  108. package/dist/server/build.js.map +1 -0
  109. package/dist/server/bundler.d.ts +27 -0
  110. package/dist/server/bundler.d.ts.map +1 -0
  111. package/dist/server/bundler.js +213 -0
  112. package/dist/server/bundler.js.map +1 -0
  113. package/dist/server/dev.d.ts +11 -0
  114. package/dist/server/dev.d.ts.map +1 -0
  115. package/dist/server/dev.js +1052 -0
  116. package/dist/server/dev.js.map +1 -0
  117. package/dist/server/env.d.ts +10 -0
  118. package/dist/server/env.d.ts.map +1 -0
  119. package/dist/server/env.js +102 -0
  120. package/dist/server/env.js.map +1 -0
  121. package/dist/server/error-overlay.d.ts +11 -0
  122. package/dist/server/error-overlay.d.ts.map +1 -0
  123. package/dist/server/error-overlay.js +395 -0
  124. package/dist/server/error-overlay.js.map +1 -0
  125. package/dist/server/hmr.d.ts +8 -0
  126. package/dist/server/hmr.d.ts.map +1 -0
  127. package/dist/server/hmr.js +166 -0
  128. package/dist/server/hmr.js.map +1 -0
  129. package/dist/server/index.d.ts +5 -0
  130. package/dist/server/index.d.ts.map +1 -0
  131. package/dist/server/index.js +10 -0
  132. package/dist/server/index.js.map +1 -0
  133. package/dist/server/response.d.ts +38 -0
  134. package/dist/server/response.d.ts.map +1 -0
  135. package/dist/server/response.js +142 -0
  136. package/dist/server/response.js.map +1 -0
  137. package/dist/server/types.d.ts +13 -0
  138. package/dist/server/types.d.ts.map +1 -0
  139. package/dist/server/types.js +3 -0
  140. package/dist/server/types.js.map +1 -0
  141. package/package.json +70 -0
@@ -0,0 +1,449 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.build = build;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const file_system_1 = require("../router/file-system");
10
+ const bundler_1 = require("./bundler");
11
+ const env_1 = require("./env");
12
+ const assets_1 = require("../assets");
13
+ async function build(options) {
14
+ const { root, outDir = 'dist', minify = true, } = options;
15
+ // Load production env
16
+ const env = (0, env_1.loadEnv)(root, 'production');
17
+ console.log('📦 Building for production...');
18
+ const distPath = path_1.default.join(root, outDir);
19
+ // Clean dist folder
20
+ if (fs_1.default.existsSync(distPath)) {
21
+ fs_1.default.rmSync(distPath, { recursive: true });
22
+ }
23
+ fs_1.default.mkdirSync(distPath, { recursive: true });
24
+ // Scan routes
25
+ const { routes, apiRoutes } = (0, file_system_1.getRoutes)(root);
26
+ console.log(`📁 Found ${routes.length} pages and ${apiRoutes.length} API routes`);
27
+ // 1. Build client bundle
28
+ console.log('🔨 Building client bundle...');
29
+ await buildClientBundle(root, distPath, routes, minify);
30
+ // 2. Build server bundle (for SSR)
31
+ console.log('🔨 Building server bundle...');
32
+ await buildServerBundle(root, distPath, routes, minify);
33
+ // 3. Copy public folder
34
+ const publicPath = path_1.default.join(root, 'public');
35
+ if (fs_1.default.existsSync(publicPath)) {
36
+ console.log('📁 Copying public assets...');
37
+ copyFolderRecursive(publicPath, path_1.default.join(distPath, 'public'));
38
+ }
39
+ // 3.5. Generate sitemap
40
+ console.log('🗺️ Generating sitemap...');
41
+ try {
42
+ await (0, assets_1.generateAndSaveSitemap)(root, routes);
43
+ // Copy sitemap to dist
44
+ const sitemapSource = path_1.default.join(root, 'public', 'sitemap.xml');
45
+ const sitemapDest = path_1.default.join(distPath, 'public', 'sitemap.xml');
46
+ if (fs_1.default.existsSync(sitemapSource)) {
47
+ fs_1.default.copyFileSync(sitemapSource, sitemapDest);
48
+ }
49
+ }
50
+ catch (e) {
51
+ console.log('⚠️ Sitemap generation skipped');
52
+ }
53
+ // 4. Generate route manifest
54
+ console.log('📝 Generating route manifest...');
55
+ const manifest = {
56
+ routes: routes.map(r => ({ path: r.path, component: r.component })),
57
+ apiRoutes: apiRoutes.map(r => ({ path: r.path, component: r.component })),
58
+ buildTime: new Date().toISOString(),
59
+ };
60
+ fs_1.default.writeFileSync(path_1.default.join(distPath, 'routes.json'), JSON.stringify(manifest, null, 2));
61
+ // 5. Copy API routes
62
+ console.log('📁 Copying API routes...');
63
+ for (const route of apiRoutes) {
64
+ const dest = path_1.default.join(distPath, 'api', path_1.default.relative(path_1.default.join(root, 'src/app/api'), route.component));
65
+ fs_1.default.mkdirSync(path_1.default.dirname(dest), { recursive: true });
66
+ fs_1.default.copyFileSync(route.component, dest);
67
+ }
68
+ // 6. Generate production server.js
69
+ console.log('🔨 Generating production server...');
70
+ generateProductionServer(distPath, routes, apiRoutes, env);
71
+ console.log('✅ Build complete!');
72
+ console.log(`📂 Output: ${distPath}`);
73
+ console.log('\n🚀 To run production server:');
74
+ console.log(` cd ${outDir}`);
75
+ console.log(' node server.js');
76
+ return { outDir: distPath };
77
+ }
78
+ async function buildClientBundle(root, outdir, routes, minify) {
79
+ const clientDir = path_1.default.join(outdir, 'client');
80
+ fs_1.default.mkdirSync(clientDir, { recursive: true });
81
+ const entryContent = `
82
+ import React from 'react';
83
+ import { hydrateRoot } from 'react-dom/client';
84
+
85
+ ${routes.map((route, idx) => {
86
+ const relativePath = path_1.default.relative(root, route.component).replace(/\\/g, '/');
87
+ return `import Page${idx} from '../../${relativePath}';`;
88
+ }).join('\n')}
89
+
90
+ // Route definitions
91
+ const routeDefs = [
92
+ ${routes.map((route, idx) => ` { path: '${route.path}', component: Page${idx} },`).join('\n')}
93
+ ];
94
+
95
+ function matchPath(pathname) {
96
+ const pathSegments = pathname.split('/').filter(Boolean);
97
+ for (const r of routeDefs) {
98
+ const routeSegments = r.path.split('/').filter(Boolean);
99
+
100
+ if (r.path.includes('*')) {
101
+ const catchIndex = routeSegments.findIndex(s => s.startsWith('*'));
102
+ const paramName = routeSegments[catchIndex].slice(1);
103
+ const params = {};
104
+ params[paramName] = pathSegments.slice(catchIndex).join('/');
105
+ return { component: r.component, params };
106
+ }
107
+
108
+ if (routeSegments.length !== pathSegments.length) continue;
109
+
110
+ let matched = true;
111
+ const params = {};
112
+
113
+ for (let i = 0; i < routeSegments.length; i++) {
114
+ const rs = routeSegments[i];
115
+ const ps = pathSegments[i];
116
+
117
+ if (rs.startsWith(':')) {
118
+ params[rs.slice(1)] = ps;
119
+ } else if (rs !== ps) {
120
+ matched = false;
121
+ break;
122
+ }
123
+ }
124
+
125
+ if (matched) {
126
+ return { component: r.component, params };
127
+ }
128
+ }
129
+
130
+ return { component: routeDefs.find(r => r.path === '/')?.component, params: {} };
131
+ }
132
+
133
+ const currentPath = window.location.pathname;
134
+ const match = matchPath(currentPath);
135
+ window.__SATSET_ROUTES__ = routeDefs.map(r => r.path);
136
+ window.__SATSET_PARAMS__ = match.params || {};
137
+
138
+ const PageComponent = match.component;
139
+
140
+ if (PageComponent) {
141
+ const root = document.getElementById('root');
142
+ if (root) {
143
+ hydrateRoot(root, React.createElement(PageComponent, match.params ? { params: match.params } : undefined));
144
+ }
145
+ }
146
+ `;
147
+ const tempDir = path_1.default.join(root, '.satset');
148
+ fs_1.default.mkdirSync(tempDir, { recursive: true });
149
+ const entryPath = path_1.default.join(tempDir, '_entry.tsx');
150
+ fs_1.default.writeFileSync(entryPath, entryContent);
151
+ await bundler_1.bundler.bundle({
152
+ entryPoints: [entryPath],
153
+ outdir: clientDir,
154
+ minify,
155
+ sourcemap: false,
156
+ watch: false,
157
+ });
158
+ const appDir = path_1.default.join(root, 'src/app');
159
+ const cssFiles = findFiles(appDir, '.css');
160
+ for (const cssFile of cssFiles) {
161
+ const dest = path_1.default.join(clientDir, path_1.default.basename(cssFile));
162
+ fs_1.default.copyFileSync(cssFile, dest);
163
+ }
164
+ console.log('✅ Client bundle built');
165
+ }
166
+ async function buildServerBundle(root, outdir, routes, minify) {
167
+ const serverDir = path_1.default.join(outdir, 'server');
168
+ fs_1.default.mkdirSync(serverDir, { recursive: true });
169
+ const serverEntry = `
170
+ import React from 'react';
171
+ import { renderToString } from 'react-dom/server';
172
+
173
+ ${routes.map((route, idx) => {
174
+ const relativePath = path_1.default.relative(root, route.component).replace(/\\/g, '/');
175
+ return `import * as Page${idx} from '../../${relativePath}';`;
176
+ }).join('\n')}
177
+
178
+ const routeDefs = [
179
+ ${routes.map((route, idx) => ` { path: '${route.path}', module: Page${idx} },`).join('\n')}
180
+ ];
181
+
182
+ function getComponentFromModule(m) {
183
+ if (!m) return null;
184
+ if (typeof m.default === 'function') return m.default;
185
+ for (const k of Object.keys(m)) {
186
+ if (typeof m[k] === 'function') return m[k];
187
+ }
188
+ return null;
189
+ }
190
+
191
+ function matchPath(pathname) {
192
+ const pathSegments = pathname.split('/').filter(Boolean);
193
+ for (const r of routeDefs) {
194
+ const routeSegments = r.path.split('/').filter(Boolean);
195
+
196
+ if (r.path.includes('*')) {
197
+ const catchIndex = routeSegments.findIndex(s => s.startsWith('*'));
198
+ const paramName = routeSegments[catchIndex].slice(1);
199
+ const params = {};
200
+ params[paramName] = pathSegments.slice(catchIndex).join('/');
201
+ return { component: r.component, params };
202
+ }
203
+
204
+ if (routeSegments.length !== pathSegments.length) continue;
205
+
206
+ let matched = true;
207
+ const params = {};
208
+
209
+ for (let i = 0; i < routeSegments.length; i++) {
210
+ const rs = routeSegments[i];
211
+ const ps = pathSegments[i];
212
+
213
+ if (rs.startsWith(':')) {
214
+ params[rs.slice(1)] = ps;
215
+ } else if (rs !== ps) {
216
+ matched = false;
217
+ break;
218
+ }
219
+ }
220
+
221
+ if (matched) {
222
+ return { component: r.component, params };
223
+ }
224
+ }
225
+
226
+ return null;
227
+ }
228
+
229
+ export function renderPage(pathname) {
230
+ const match = matchPath(pathname);
231
+ if (!match || !match.module) return null;
232
+ const PageComponent = getComponentFromModule(match.module);
233
+ const params = match.params || {};
234
+ if (!PageComponent) return null;
235
+ return renderToString(React.createElement(PageComponent, { params }));
236
+ }
237
+
238
+ export function getMetadataForPath(pathname) {
239
+ const match = matchPath(pathname);
240
+ if (!match || !match.module) return null;
241
+ const m = match.module;
242
+ if (m && m.metadata) return m.metadata;
243
+ if (m && typeof m.getMetadata === 'function') {
244
+ try { return m.getMetadata({ params: match.params || {} }); } catch (e) { return null; }
245
+ }
246
+ return null;
247
+ }
248
+
249
+ export { routeDefs as routes };
250
+ `;
251
+ const tempDir = path_1.default.join(root, '.satset');
252
+ const serverEntryPath = path_1.default.join(tempDir, '_server.tsx');
253
+ fs_1.default.writeFileSync(serverEntryPath, serverEntry);
254
+ await bundler_1.bundler.bundleServer({
255
+ entryPoint: serverEntryPath,
256
+ outfile: path_1.default.join(serverDir, 'render.js'),
257
+ minify,
258
+ });
259
+ console.log('✅ Server bundle built');
260
+ }
261
+ function generateProductionServer(distPath, routes, apiRoutes, env) {
262
+ const envScript = (0, env_1.getPublicEnvScript)(env.publicVars || {});
263
+ const serverCode = `
264
+ const http = require('http');
265
+ const fs = require('fs');
266
+ const path = require('path');
267
+
268
+ ${Object.entries(env.privateVars || {}).map(([key, value]) => `process.env.${key} = '${value}';`).join('\n')}
269
+
270
+ const PORT = process.env.PORT || 3000;
271
+ const HOST = process.env.HOST || '0.0.0.0';
272
+
273
+ const { renderPage, routes, getMetadataForPath } = require('./server/render.js');
274
+
275
+ const server = http.createServer((req, res) => {
276
+ const url = req.url || '/';
277
+
278
+ console.log(\`\${req.method} \${url}\`);
279
+
280
+ if (url.startsWith('/client/')) {
281
+ serveStatic(path.join(__dirname, url), res);
282
+ return;
283
+ }
284
+
285
+ if (url.startsWith('/public/')) {
286
+ serveStatic(path.join(__dirname, url), res);
287
+ return;
288
+ }
289
+
290
+ const apiRoute = ${JSON.stringify(apiRoutes)}.find(r => r.path === url);
291
+ if (apiRoute) {
292
+ handleApiRoute(apiRoute, req, res);
293
+ return;
294
+ }
295
+
296
+ const pageHTML = renderPage(url);
297
+ if (pageHTML) {
298
+ // Page found, assemble HTML and return
299
+ let metaHtml = '';
300
+ try {
301
+ const metaObj = getMetadataForPath(url);
302
+ const metadataAsset = require('./assets/metadata');
303
+ metaHtml = metadataAsset.renderMetaTags(metaObj);
304
+ } catch (e) {
305
+ metaHtml = '';
306
+ }
307
+
308
+ const html = '<!DOCTYPE html>' +
309
+ '<html lang="en">' +
310
+ '<head>' +
311
+ metaHtml +
312
+ '<meta charset="UTF-8" />' +
313
+ '<meta name="viewport" content="width=device-width, initial-scale=1.0" />' +
314
+ '<link rel="stylesheet" href="/client/globals.css" />' +
315
+ '</head>' +
316
+ '<body>' +
317
+ '<div id="root">' + pageHTML + '</div>' +
318
+ '<script>' + envScript + '</script>' +
319
+ '<script type="module" src="/client/_entry.js"></script>' +
320
+ '</body>' +
321
+ '</html>';
322
+
323
+ res.writeHead(200, { 'Content-Type': 'text/html' });
324
+ res.end(html);
325
+ return;
326
+ }
327
+
328
+ res.writeHead(404, { 'Content-Type': 'text/html' });
329
+ res.end('<h1>404 - Page Not Found</h1>');
330
+ });
331
+
332
+ function serveStatic(filePath, res) {
333
+ if (!fs.existsSync(filePath)) {
334
+ res.writeHead(404);
335
+ res.end('Not Found');
336
+ return;
337
+ }
338
+
339
+ const ext = path.extname(filePath);
340
+ const contentType = getContentType(ext);
341
+
342
+ res.writeHead(200, { 'Content-Type': contentType });
343
+ fs.createReadStream(filePath).pipe(res);
344
+ }
345
+
346
+ function handleApiRoute(route, req, res) {
347
+ try {
348
+ const apiPath = path.join(__dirname, 'api', path.basename(route.component));
349
+ delete require.cache[require.resolve(apiPath)];
350
+ const handler = require(apiPath);
351
+
352
+ if (typeof handler.default === 'function') {
353
+ handler.default(req, res);
354
+ } else if (typeof handler[req.method] === 'function') {
355
+ handler[req.method](req, res);
356
+ } else {
357
+ res.writeHead(405, { 'Content-Type': 'application/json' });
358
+ res.end(JSON.stringify({ error: 'Method not allowed' }));
359
+ }
360
+ } catch (error) {
361
+ res.writeHead(500, { 'Content-Type': 'application/json' });
362
+ res.end(JSON.stringify({ error: error.message }));
363
+ }
364
+ }
365
+
366
+ function handlePageRoute(pathname, req, res) {
367
+ try {
368
+ const pageHTML = renderPage(pathname);
369
+
370
+ const html = \`
371
+ <!DOCTYPE html>
372
+ <html lang="en">
373
+ <head>
374
+ <meta charset="UTF-8" />
375
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
376
+ <title>Satset App</title>
377
+ <link rel="stylesheet" href="/client/globals.css" />
378
+ </head>
379
+ <body>
380
+ <div id="root">\${pageHTML}</div>
381
+ <script>${envScript}</script>
382
+ <script type="module" src="/client/_entry.js"></script>
383
+ </body>
384
+ </html>
385
+ \`;
386
+
387
+ res.writeHead(200, { 'Content-Type': 'text/html' });
388
+ res.end(html);
389
+ } catch (error) {
390
+ res.writeHead(500, { 'Content-Type': 'text/html' });
391
+ res.end(\`<h1>Error</h1><pre>\${error.stack}</pre>\`);
392
+ }
393
+ }
394
+
395
+ function getContentType(ext) {
396
+ const types = {
397
+ '.html': 'text/html',
398
+ '.css': 'text/css',
399
+ '.js': 'application/javascript',
400
+ '.json': 'application/json',
401
+ '.png': 'image/png',
402
+ '.jpg': 'image/jpeg',
403
+ '.svg': 'image/svg+xml',
404
+ '.xml': 'application/xml',
405
+ };
406
+ return types[ext] || 'text/plain';
407
+ }
408
+
409
+ server.listen(PORT, HOST, () => {
410
+ console.log(\`✅ Server running at http://\${HOST}:\${PORT}\`);
411
+ });
412
+ `;
413
+ fs_1.default.writeFileSync(path_1.default.join(distPath, 'server.js'), serverCode);
414
+ }
415
+ function findFiles(dir, ext) {
416
+ const files = [];
417
+ if (!fs_1.default.existsSync(dir))
418
+ return files;
419
+ const items = fs_1.default.readdirSync(dir);
420
+ for (const item of items) {
421
+ const fullPath = path_1.default.join(dir, item);
422
+ const stat = fs_1.default.statSync(fullPath);
423
+ if (stat.isDirectory()) {
424
+ files.push(...findFiles(fullPath, ext));
425
+ }
426
+ else if (fullPath.endsWith(ext)) {
427
+ files.push(fullPath);
428
+ }
429
+ }
430
+ return files;
431
+ }
432
+ function copyFolderRecursive(source, target) {
433
+ if (!fs_1.default.existsSync(target)) {
434
+ fs_1.default.mkdirSync(target, { recursive: true });
435
+ }
436
+ const files = fs_1.default.readdirSync(source);
437
+ for (const file of files) {
438
+ const sourcePath = path_1.default.join(source, file);
439
+ const targetPath = path_1.default.join(target, file);
440
+ const stat = fs_1.default.statSync(sourcePath);
441
+ if (stat.isDirectory()) {
442
+ copyFolderRecursive(sourcePath, targetPath);
443
+ }
444
+ else {
445
+ fs_1.default.copyFileSync(sourcePath, targetPath);
446
+ }
447
+ }
448
+ }
449
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/server/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import * as esbuild from 'esbuild';
2
+ export interface BundleOptions {
3
+ entryPoints: string[];
4
+ outdir: string;
5
+ minify?: boolean;
6
+ sourcemap?: boolean;
7
+ watch?: boolean;
8
+ onRebuild?: (result: esbuild.BuildResult) => void;
9
+ root?: string;
10
+ }
11
+ export declare class Bundler {
12
+ private ctx;
13
+ bundle(options: BundleOptions): Promise<esbuild.BuildResult>;
14
+ bundleServer(options: {
15
+ entryPoint: string;
16
+ outfile: string;
17
+ minify?: boolean;
18
+ root?: string;
19
+ sourcemap?: boolean;
20
+ }): Promise<esbuild.BuildResult>;
21
+ stop(): Promise<void>;
22
+ transform(code: string, filepath: string): Promise<string>;
23
+ buildCSS(files: string[], outdir: string): Promise<void>;
24
+ private scopeCSS;
25
+ }
26
+ export declare const bundler: Bundler;
27
+ //# sourceMappingURL=bundler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundler.d.ts","sourceRoot":"","sources":["../../src/server/bundler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAInC,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAqC;IAE1C,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;IA2F5D,YAAY,CAAC,OAAO,EAAE;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;IA2C1B,IAAI;IAQJ,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1D,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB9D,OAAO,CAAC,QAAQ;CASjB;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}