satset-react 0.4.7 → 0.4.8

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 (169) 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 +10 -0
  14. package/dist/adapter/vercel.d.ts.map +1 -0
  15. package/dist/adapter/vercel.js +330 -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 +7 -0
  22. package/dist/assets/index.d.ts.map +1 -0
  23. package/dist/assets/index.js +31 -0
  24. package/dist/assets/index.js.map +1 -0
  25. package/dist/assets/metadata.d.ts +35 -0
  26. package/dist/assets/metadata.d.ts.map +1 -0
  27. package/dist/assets/metadata.js +75 -0
  28. package/dist/assets/metadata.js.map +1 -0
  29. package/dist/assets/robots.d.ts +23 -0
  30. package/dist/assets/robots.d.ts.map +1 -0
  31. package/dist/assets/robots.js +95 -0
  32. package/dist/assets/robots.js.map +1 -0
  33. package/dist/assets/sitemap.d.ts +19 -0
  34. package/dist/assets/sitemap.d.ts.map +1 -0
  35. package/dist/assets/sitemap.js +78 -0
  36. package/dist/assets/sitemap.js.map +1 -0
  37. package/dist/cli/commands.d.ts +5 -0
  38. package/dist/cli/commands.d.ts.map +1 -0
  39. package/dist/cli/commands.js +165 -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 +40 -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 +61 -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 +67 -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 +66 -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 +6 -0
  62. package/dist/components/index.d.ts.map +1 -0
  63. package/dist/components/index.js +30 -0
  64. package/dist/components/index.js.map +1 -0
  65. package/dist/components/theme.d.ts +23 -0
  66. package/dist/components/theme.d.ts.map +1 -0
  67. package/dist/components/theme.js +118 -0
  68. package/dist/components/theme.js.map +1 -0
  69. package/dist/config.d.ts +23 -0
  70. package/dist/config.d.ts.map +1 -0
  71. package/dist/config.js +9 -0
  72. package/dist/config.js.map +1 -0
  73. package/dist/core/dynamic.d.ts +10 -0
  74. package/dist/core/dynamic.d.ts.map +1 -0
  75. package/dist/core/dynamic.js +51 -0
  76. package/dist/core/dynamic.js.map +1 -0
  77. package/dist/core/hydrate.d.ts +8 -0
  78. package/dist/core/hydrate.d.ts.map +1 -0
  79. package/dist/core/hydrate.js +81 -0
  80. package/dist/core/hydrate.js.map +1 -0
  81. package/dist/core/index.d.ts +10 -0
  82. package/dist/core/index.d.ts.map +1 -0
  83. package/dist/core/index.js +22 -0
  84. package/dist/core/index.js.map +1 -0
  85. package/dist/core/response.d.ts +26 -0
  86. package/dist/core/response.d.ts.map +1 -0
  87. package/dist/core/response.js +48 -0
  88. package/dist/core/response.js.map +1 -0
  89. package/dist/core/ssr.d.ts +29 -0
  90. package/dist/core/ssr.d.ts.map +1 -0
  91. package/dist/core/ssr.js +91 -0
  92. package/dist/core/ssr.js.map +1 -0
  93. package/dist/core/translation.d.ts +19 -0
  94. package/dist/core/translation.d.ts.map +1 -0
  95. package/dist/core/translation.js +84 -0
  96. package/dist/core/translation.js.map +1 -0
  97. package/dist/core/types.d.ts +47 -0
  98. package/dist/core/types.d.ts.map +1 -0
  99. package/dist/core/types.js +3 -0
  100. package/dist/core/types.js.map +1 -0
  101. package/dist/index.d.ts +7 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +25 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/navigation/notFound.d.ts +3 -0
  106. package/dist/navigation/notFound.d.ts.map +1 -0
  107. package/dist/navigation/notFound.js +15 -0
  108. package/dist/navigation/notFound.js.map +1 -0
  109. package/dist/router/file-system.d.ts +19 -0
  110. package/dist/router/file-system.d.ts.map +1 -0
  111. package/dist/router/file-system.js +364 -0
  112. package/dist/router/file-system.js.map +1 -0
  113. package/dist/router/index.d.ts +3 -0
  114. package/dist/router/index.d.ts.map +1 -0
  115. package/dist/router/index.js +10 -0
  116. package/dist/router/index.js.map +1 -0
  117. package/dist/router/router.d.ts +17 -0
  118. package/dist/router/router.d.ts.map +1 -0
  119. package/dist/router/router.js +158 -0
  120. package/dist/router/router.js.map +1 -0
  121. package/dist/router/types.d.ts +11 -0
  122. package/dist/router/types.d.ts.map +1 -0
  123. package/dist/router/types.js +3 -0
  124. package/dist/router/types.js.map +1 -0
  125. package/dist/server/build.d.ts +5 -0
  126. package/dist/server/build.d.ts.map +1 -0
  127. package/dist/server/build.js +780 -0
  128. package/dist/server/build.js.map +1 -0
  129. package/dist/server/bundler.d.ts +28 -0
  130. package/dist/server/bundler.d.ts.map +1 -0
  131. package/dist/server/bundler.js +401 -0
  132. package/dist/server/bundler.js.map +1 -0
  133. package/dist/server/dev.d.ts +11 -0
  134. package/dist/server/dev.d.ts.map +1 -0
  135. package/dist/server/dev.js +1831 -0
  136. package/dist/server/dev.js.map +1 -0
  137. package/dist/server/env.d.ts +10 -0
  138. package/dist/server/env.d.ts.map +1 -0
  139. package/dist/server/env.js +102 -0
  140. package/dist/server/env.js.map +1 -0
  141. package/dist/server/error-overlay.d.ts +12 -0
  142. package/dist/server/error-overlay.d.ts.map +1 -0
  143. package/dist/server/error-overlay.js +396 -0
  144. package/dist/server/error-overlay.js.map +1 -0
  145. package/dist/server/hmr.d.ts +8 -0
  146. package/dist/server/hmr.d.ts.map +1 -0
  147. package/dist/server/hmr.js +166 -0
  148. package/dist/server/hmr.js.map +1 -0
  149. package/dist/server/index.d.ts +10 -0
  150. package/dist/server/index.d.ts.map +1 -0
  151. package/dist/server/index.js +25 -0
  152. package/dist/server/index.js.map +1 -0
  153. package/dist/server/response.d.ts +30 -0
  154. package/dist/server/response.d.ts.map +1 -0
  155. package/dist/server/response.js +238 -0
  156. package/dist/server/response.js.map +1 -0
  157. package/dist/server/storage.d.ts +13 -0
  158. package/dist/server/storage.d.ts.map +1 -0
  159. package/dist/server/storage.js +26 -0
  160. package/dist/server/storage.js.map +1 -0
  161. package/dist/server/tui.d.ts +23 -0
  162. package/dist/server/tui.d.ts.map +1 -0
  163. package/dist/server/tui.js +182 -0
  164. package/dist/server/tui.js.map +1 -0
  165. package/dist/server/types.d.ts +14 -0
  166. package/dist/server/types.d.ts.map +1 -0
  167. package/dist/server/types.js +3 -0
  168. package/dist/server/types.js.map +1 -0
  169. package/package.json +3 -2
@@ -0,0 +1,4 @@
1
+ export { vercelAdapter } from './vercel';
2
+ export { nodeAdapter } from './node';
3
+ export type { AdapterConfig, VercelConfig, NodeConfig } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nodeAdapter = exports.vercelAdapter = void 0;
4
+ var vercel_1 = require("./vercel");
5
+ Object.defineProperty(exports, "vercelAdapter", { enumerable: true, get: function () { return vercel_1.vercelAdapter; } });
6
+ var node_1 = require("./node");
7
+ Object.defineProperty(exports, "nodeAdapter", { enumerable: true, get: function () { return node_1.nodeAdapter; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AACtB,+BAAqC;AAA5B,mGAAA,WAAW,OAAA"}
@@ -0,0 +1,3 @@
1
+ import type { NodeConfig, BuildResult } from './types';
2
+ export declare function nodeAdapter(config: NodeConfig): Promise<BuildResult>;
3
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/adapter/node.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEvD,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAqE1E"}
@@ -0,0 +1,244 @@
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.nodeAdapter = nodeAdapter;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const file_system_1 = require("../router/file-system");
10
+ async function nodeAdapter(config) {
11
+ const { outDir = 'dist', port = 3000, host = '0.0.0.0', compress = true, } = config;
12
+ console.log('🟢 Building for Node.js...');
13
+ const root = process.cwd();
14
+ const outputPath = path_1.default.join(root, outDir);
15
+ // Clean output directory
16
+ if (fs_1.default.existsSync(outputPath)) {
17
+ fs_1.default.rmSync(outputPath, { recursive: true });
18
+ }
19
+ fs_1.default.mkdirSync(outputPath, { recursive: true });
20
+ // Scan routes
21
+ const { routes, apiRoutes } = (0, file_system_1.getRoutes)(root);
22
+ // Generate standalone server.js
23
+ generateNodeServer(outputPath, routes, apiRoutes, { port, host, compress });
24
+ // Copy static files
25
+ const publicPath = path_1.default.join(root, 'public');
26
+ if (fs_1.default.existsSync(publicPath)) {
27
+ copyFolderRecursive(publicPath, path_1.default.join(outputPath, 'public'));
28
+ }
29
+ // Copy src files (for now - TODO: bundle them)
30
+ const srcPath = path_1.default.join(root, 'src');
31
+ if (fs_1.default.existsSync(srcPath)) {
32
+ copyFolderRecursive(srcPath, path_1.default.join(outputPath, 'src'));
33
+ }
34
+ // Generate package.json for production
35
+ const productionPackage = {
36
+ name: 'satset-app-production',
37
+ version: '1.0.0',
38
+ main: 'server.js',
39
+ scripts: {
40
+ start: 'node server.js',
41
+ },
42
+ dependencies: {
43
+ '@satset/core': '^0.0.1',
44
+ react: '^18.2.0',
45
+ 'react-dom': '^18.2.0',
46
+ },
47
+ };
48
+ fs_1.default.writeFileSync(path_1.default.join(outputPath, 'package.json'), JSON.stringify(productionPackage, null, 2));
49
+ console.log('✅ Node.js build complete!');
50
+ console.log(`📂 Output: ${outputPath}`);
51
+ console.log('💡 Run with:');
52
+ console.log(` cd ${outDir}`);
53
+ console.log(' npm install --production');
54
+ console.log(' npm start');
55
+ return {
56
+ success: true,
57
+ outDir: outputPath,
58
+ entryPoint: 'server.js',
59
+ };
60
+ }
61
+ function generateNodeServer(outputPath, routes, apiRoutes, config) {
62
+ const serverCode = `
63
+ const http = require('http');
64
+ const fs = require('fs');
65
+ const path = require('path');
66
+
67
+ const PORT = process.env.PORT || ${config.port};
68
+ const HOST_RAW = process.env.HOST || '${config.host}';
69
+ const HOST = (HOST_RAW === 'true' ? '0.0.0.0' : (HOST_RAW === 'false' ? 'localhost' : HOST_RAW));
70
+
71
+ // Route manifest
72
+ const routes = ${JSON.stringify(routes, null, 2)};
73
+ const apiRoutes = ${JSON.stringify(apiRoutes, null, 2)};
74
+
75
+ // Simple matcher for dynamic routes
76
+ function matchPath(pathname, routesArr) {
77
+ const pathSegments = pathname.split('/').filter(Boolean);
78
+ for (const r of routesArr) {
79
+ const routeSegments = r.path.split('/').filter(Boolean);
80
+
81
+ if (r.path.includes('*')) {
82
+ const catchIndex = routeSegments.findIndex(s => s.startsWith('*'));
83
+ const paramName = routeSegments[catchIndex].slice(1);
84
+ const params = {};
85
+ params[paramName] = pathSegments.slice(catchIndex).join('/');
86
+ return { route: r, params };
87
+ }
88
+
89
+ if (routeSegments.length !== pathSegments.length) continue;
90
+
91
+ let matched = true;
92
+ const params = {};
93
+
94
+ for (let i = 0; i < routeSegments.length; i++) {
95
+ const rs = routeSegments[i];
96
+ const ps = pathSegments[i];
97
+
98
+ if (rs.startsWith(':')) {
99
+ params[rs.slice(1)] = ps;
100
+ } else if (rs !== ps) {
101
+ matched = false;
102
+ break;
103
+ }
104
+ }
105
+
106
+ if (matched) {
107
+ return { route: r, params };
108
+ }
109
+ }
110
+
111
+ return null;
112
+ }
113
+
114
+ const server = http.createServer((req, res) => {
115
+ const url = req.url || '/';
116
+
117
+ console.log(\`\${req.method} \${url}\`);
118
+
119
+ // Serve static files
120
+ if (url.startsWith('/public/')) {
121
+ serveStatic(url, res);
122
+ return;
123
+ }
124
+
125
+ // Handle API routes
126
+ const apiRoute = apiRoutes.find(r => r.path === url);
127
+ if (apiRoute) {
128
+ handleApiRoute(apiRoute, req, res);
129
+ return;
130
+ }
131
+
132
+ // Handle page routes (dynamic matching)
133
+ const match = matchPath(url, routes);
134
+ if (match) {
135
+ handlePageRoute(match.route, req, res, match.params);
136
+ return;
137
+ }
138
+
139
+ // 404
140
+ res.writeHead(404, { 'Content-Type': 'text/html' });
141
+ res.end('<h1>404 - Page Not Found</h1>');
142
+ });
143
+
144
+ function serveStatic(url, res) {
145
+ const filePath = path.join(__dirname, url);
146
+
147
+ if (!fs.existsSync(filePath)) {
148
+ res.writeHead(404);
149
+ res.end('Not Found');
150
+ return;
151
+ }
152
+
153
+ const ext = path.extname(filePath);
154
+ const contentType = getContentType(ext);
155
+
156
+ res.writeHead(200, { 'Content-Type': contentType });
157
+ fs.createReadStream(filePath).pipe(res);
158
+ }
159
+
160
+ function handleApiRoute(route, req, res) {
161
+ try {
162
+ delete require.cache[require.resolve(route.component)];
163
+ const handler = require(route.component);
164
+
165
+ if (typeof handler.default === 'function') {
166
+ handler.default(req, res);
167
+ } else if (typeof handler[req.method] === 'function') {
168
+ handler[req.method](req, res);
169
+ } else {
170
+ res.writeHead(405, { 'Content-Type': 'application/json' });
171
+ res.end(JSON.stringify({ error: 'Method not allowed' }));
172
+ }
173
+ } catch (error) {
174
+ res.writeHead(500, { 'Content-Type': 'application/json' });
175
+ res.end(JSON.stringify({ error: error.message }));
176
+ }
177
+ }
178
+
179
+ function handlePageRoute(route, req, res, params = {}) {
180
+ try {
181
+ // TODO: Implement actual SSR
182
+ const paramJson = JSON.stringify(params);
183
+ const html = '<!DOCTYPE html>' +
184
+ '<html lang="en">' +
185
+ '<head>' +
186
+ '<meta charset="UTF-8" />' +
187
+ '<meta name="viewport" content="width=device-width, initial-scale=1.0" />' +
188
+ '<title>Satset App</title>' +
189
+ '</head>' +
190
+ '<body>' +
191
+ '<div id="root">' +
192
+ '<h1>Satset.js Production</h1>' +
193
+ '<p>Route: ' + route.path + '</p>' +
194
+ '<pre>Params: ' + paramJson + '</pre>' +
195
+ '</div>' +
196
+ '</body>' +
197
+ '</html>';
198
+
199
+
200
+ res.writeHead(200, { 'Content-Type': 'text/html' });
201
+ res.end(html);
202
+ } catch (error) {
203
+ res.writeHead(500, { 'Content-Type': 'text/html' });
204
+ res.end(\`<h1>Error</h1><pre>\${error.stack}</pre>\`);
205
+ }
206
+ }
207
+
208
+ function getContentType(ext) {
209
+ const types = {
210
+ '.html': 'text/html',
211
+ '.css': 'text/css',
212
+ '.js': 'application/javascript',
213
+ '.json': 'application/json',
214
+ '.png': 'image/png',
215
+ '.jpg': 'image/jpeg',
216
+ '.svg': 'image/svg+xml',
217
+ };
218
+ return types[ext] || 'text/plain';
219
+ }
220
+
221
+ server.listen(PORT, HOST, () => {
222
+ console.log(\`✅ Server running at http://\${HOST}:\${PORT}\`);
223
+ });
224
+ `;
225
+ fs_1.default.writeFileSync(path_1.default.join(outputPath, 'server.js'), serverCode);
226
+ }
227
+ function copyFolderRecursive(source, target) {
228
+ if (!fs_1.default.existsSync(target)) {
229
+ fs_1.default.mkdirSync(target, { recursive: true });
230
+ }
231
+ const files = fs_1.default.readdirSync(source);
232
+ for (const file of files) {
233
+ const sourcePath = path_1.default.join(source, file);
234
+ const targetPath = path_1.default.join(target, file);
235
+ const stat = fs_1.default.statSync(sourcePath);
236
+ if (stat.isDirectory()) {
237
+ copyFolderRecursive(sourcePath, targetPath);
238
+ }
239
+ else {
240
+ fs_1.default.copyFileSync(sourcePath, targetPath);
241
+ }
242
+ }
243
+ }
244
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/adapter/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface AdapterConfig {
2
+ platform: 'vercel' | 'node' | 'custom';
3
+ outDir?: string;
4
+ }
5
+ export interface VercelConfig extends AdapterConfig {
6
+ platform: 'vercel';
7
+ regions?: string[];
8
+ functions?: Record<string, {
9
+ memory?: number;
10
+ maxDuration?: number;
11
+ }>;
12
+ }
13
+ export interface NodeConfig extends AdapterConfig {
14
+ platform: 'node';
15
+ port?: number;
16
+ host?: string | boolean;
17
+ compress?: boolean;
18
+ }
19
+ export interface BuildResult {
20
+ success: boolean;
21
+ outDir: string;
22
+ entryPoint?: string;
23
+ }
24
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export interface VercelAdapterOptions {
2
+ root: string;
3
+ sourceDir: string;
4
+ outDir: string;
5
+ routes: any[];
6
+ apiRoutes: any[];
7
+ env: any;
8
+ }
9
+ export declare function vercelAdapter(options: VercelAdapterOptions): Promise<void>;
10
+ //# sourceMappingURL=vercel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../src/adapter/vercel.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,SAAS,EAAE,GAAG,EAAE,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC;CACV;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,iBA2EhE"}
@@ -0,0 +1,330 @@
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.vercelAdapter = vercelAdapter;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const env_1 = require("../server/env");
10
+ async function vercelAdapter(options) {
11
+ const { root, sourceDir, outDir, routes, apiRoutes, env } = options;
12
+ const outputPath = path_1.default.join(root, outDir);
13
+ console.log(' Creating Vercel output...');
14
+ // 1. Create Directory Structure
15
+ if (fs_1.default.existsSync(outputPath))
16
+ fs_1.default.rmSync(outputPath, { recursive: true });
17
+ fs_1.default.mkdirSync(path_1.default.join(outputPath, 'static'), { recursive: true });
18
+ fs_1.default.mkdirSync(path_1.default.join(outputPath, 'functions'), { recursive: true });
19
+ // 2. Move Static Assets
20
+ // Client bundle -> static/client
21
+ const clientSrc = path_1.default.join(sourceDir, 'client');
22
+ const clientDest = path_1.default.join(outputPath, 'static', 'client');
23
+ if (fs_1.default.existsSync(clientSrc)) {
24
+ copyFolderRecursive(clientSrc, clientDest);
25
+ }
26
+ // Public folder -> static
27
+ const publicSrc = path_1.default.join(sourceDir, 'public');
28
+ if (fs_1.default.existsSync(publicSrc)) {
29
+ copyFolderRecursive(publicSrc, path_1.default.join(outputPath, 'static'));
30
+ }
31
+ // 3. Create Serverless Function
32
+ const funcName = 'index.func';
33
+ const funcDir = path_1.default.join(outputPath, 'functions', funcName);
34
+ fs_1.default.mkdirSync(funcDir, { recursive: true });
35
+ // Copy server bundle
36
+ const serverSrc = path_1.default.join(sourceDir, 'server');
37
+ const serverDest = path_1.default.join(funcDir, 'server');
38
+ if (fs_1.default.existsSync(serverSrc)) {
39
+ copyFolderRecursive(serverSrc, serverDest);
40
+ }
41
+ // Copy API routes (raw files for now, but usually they should be bundled or handled by main server)
42
+ // In build.ts, API routes are copied to dist/api.
43
+ // We can copy them to the function dir so the handler can load them.
44
+ const apiSrc = path_1.default.join(sourceDir, 'api');
45
+ const apiDest = path_1.default.join(funcDir, 'api');
46
+ if (fs_1.default.existsSync(apiSrc)) {
47
+ copyFolderRecursive(apiSrc, apiDest);
48
+ }
49
+ // Generate Handler
50
+ const handlerCode = generateHandlerCode(env, apiRoutes, root);
51
+ fs_1.default.writeFileSync(path_1.default.join(funcDir, 'index.js'), handlerCode);
52
+ // Generate .vc-config.json
53
+ const vcConfig = {
54
+ runtime: 'nodejs18.x',
55
+ handler: 'index.js',
56
+ launcherType: 'Nodejs',
57
+ shouldAddHelpers: true,
58
+ };
59
+ fs_1.default.writeFileSync(path_1.default.join(funcDir, '.vc-config.json'), JSON.stringify(vcConfig, null, 2));
60
+ // 4. Generate Output Config (Routing)
61
+ const config = {
62
+ version: 3,
63
+ routes: [
64
+ // Static files
65
+ { src: '/client/(.*)', dest: '/client/$1' },
66
+ // Handle public files (if any specific ones needed, or catch-all if no conflict)
67
+ // For now, let's assume public files are served if they exist.
68
+ { handle: 'filesystem' },
69
+ // API and Pages -> Function
70
+ { src: '/(.*)', dest: '/index' }
71
+ ]
72
+ };
73
+ fs_1.default.writeFileSync(path_1.default.join(outputPath, 'config.json'), JSON.stringify(config, null, 2));
74
+ console.log(' ✅ Vercel output generated at .vercel/output');
75
+ }
76
+ function copyFolderRecursive(source, target) {
77
+ if (!fs_1.default.existsSync(target))
78
+ fs_1.default.mkdirSync(target, { recursive: true });
79
+ const files = fs_1.default.readdirSync(source);
80
+ for (const file of files) {
81
+ const srcPath = path_1.default.join(source, file);
82
+ const destPath = path_1.default.join(target, file);
83
+ if (fs_1.default.lstatSync(srcPath).isDirectory()) {
84
+ copyFolderRecursive(srcPath, destPath);
85
+ }
86
+ else {
87
+ fs_1.default.copyFileSync(srcPath, destPath);
88
+ }
89
+ }
90
+ }
91
+ function generateHandlerCode(env, apiRoutes, root) {
92
+ const envScript = (0, env_1.getPublicEnvScript)(env.publicVars || {});
93
+ return `
94
+ const fs = require('fs');
95
+ const path = require('path');
96
+
97
+ // Inject Environment Variables
98
+ ${Object.entries(env.privateVars || {}).map(([key, value]) => `process.env.${key} = '${value}';`).join('\n')}
99
+
100
+ const { renderPage, routes, getMetadataForPath, dictionaries } = require('./server/render.js');
101
+ const { generateSitemapXml, generateSitemap, generateRobotsTxtFromData, generateRobotsTxt } = require('satset-react/assets');
102
+
103
+ // API Routes Map
104
+ const apiRoutes = ${JSON.stringify(apiRoutes.map(r => {
105
+ // Logic must match build.ts relative path logic
106
+ let relativePath = '';
107
+ // Normalize paths to forward slashes for comparison
108
+ const comp = r.component.replace(/\\/g, '/');
109
+ const rootStr = root.replace(/\\/g, '/');
110
+ if (comp.includes(rootStr + '/src/app/api')) {
111
+ relativePath = comp.replace(rootStr + '/src/app/api/', '');
112
+ }
113
+ else if (comp.includes(rootStr + '/src/api')) {
114
+ relativePath = comp.replace(rootStr + '/src/api/', '');
115
+ }
116
+ else {
117
+ relativePath = path_1.default.basename(comp);
118
+ }
119
+ // Replace extension with .js and ensure relative path ./api/...
120
+ const fileRel = './api/' + relativePath.replace(/\.tsx?$/, '.js');
121
+ return {
122
+ path: r.path,
123
+ file: fileRel
124
+ };
125
+ }))};
126
+
127
+ function stripLocale(pathname) {
128
+ if (!pathname) return '/';
129
+ const raw = pathname.split('?')[0].split('#')[0];
130
+ const segments = raw.split('/').filter(Boolean);
131
+ if (!segments.length) return '/';
132
+ const first = segments[0];
133
+ const localePattern = /^[a-zA-Z]{2}(?:-[a-zA-Z]{2})?$/;
134
+ if (localePattern.test(first)) {
135
+ const rest = segments.slice(1);
136
+ return rest.length ? '/' + rest.join('/') : '/';
137
+ }
138
+ return raw.startsWith('/') ? raw : '/' + raw;
139
+ }
140
+
141
+ function matchRoute(pathname, routes) {
142
+ const pathSegments = pathname.split('/').filter(Boolean);
143
+
144
+ for (const r of routes) {
145
+ const routeSegments = r.path.split('/').filter(Boolean);
146
+
147
+ // Catch-all
148
+ if (r.path.includes('*')) {
149
+ // Simple check: prefix matches
150
+ // This is a naive implementation, good enough for now
151
+ const prefix = r.path.split('*')[0];
152
+ if (pathname.startsWith(prefix)) return { route: r, params: {} };
153
+ }
154
+
155
+ if (routeSegments.length !== pathSegments.length) continue;
156
+
157
+ let matched = true;
158
+ const params = {};
159
+
160
+ for (let i = 0; i < routeSegments.length; i++) {
161
+ const rs = routeSegments[i];
162
+ const ps = pathSegments[i];
163
+
164
+ if (rs.startsWith(':')) {
165
+ params[rs.slice(1)] = ps;
166
+ } else if (rs !== ps) {
167
+ matched = false;
168
+ break;
169
+ }
170
+ }
171
+
172
+ if (matched) {
173
+ return { route: r, params };
174
+ }
175
+ }
176
+ return null;
177
+ }
178
+
179
+ module.exports = async (req, res) => {
180
+ const url = req.url || '/';
181
+ const pathOnly = url.split('?')[0].split('#')[0];
182
+ const normalizedPath = stripLocale(pathOnly);
183
+
184
+ // Helper to get base URL
185
+ const getBaseUrl = () => {
186
+ if (process.env.SATSET_PUBLIC_SITE_URL) return process.env.SATSET_PUBLIC_SITE_URL;
187
+ const host = req.headers.host || 'localhost';
188
+ const proto = (req.headers['x-forwarded-proto']) || 'http';
189
+ return proto + '://' + host;
190
+ };
191
+
192
+ // Sitemap.xml Handler
193
+ if (pathOnly === '/sitemap.xml') {
194
+ try {
195
+ const sitemapPath = path.join(__dirname, 'server', 'sitemap.js');
196
+ if (fs.existsSync(sitemapPath)) {
197
+ const mod = require(sitemapPath);
198
+ const fn = mod.default;
199
+ if (typeof fn === 'function' && generateSitemapXml) {
200
+ const data = await fn();
201
+ const xml = generateSitemapXml(data);
202
+ res.setHeader('Content-Type', 'application/xml');
203
+ res.end(xml);
204
+ return;
205
+ }
206
+ }
207
+
208
+ if (generateSitemap) {
209
+ const xml = generateSitemap({ baseUrl: getBaseUrl(), routes });
210
+ res.setHeader('Content-Type', 'application/xml');
211
+ res.end(xml);
212
+ return;
213
+ }
214
+ } catch (e) {
215
+ console.error('Sitemap generation error:', e);
216
+ }
217
+ }
218
+
219
+ // Robots.txt Handler
220
+ if (pathOnly === '/robots.txt') {
221
+ try {
222
+ const robotsPath = path.join(__dirname, 'server', 'robots.js');
223
+ if (fs.existsSync(robotsPath)) {
224
+ const mod = require(robotsPath);
225
+ const fn = mod.default;
226
+ if (typeof fn === 'function' && generateRobotsTxtFromData) {
227
+ const data = await fn();
228
+ const txt = generateRobotsTxtFromData(data);
229
+ res.setHeader('Content-Type', 'text/plain');
230
+ res.end(txt);
231
+ return;
232
+ }
233
+ }
234
+
235
+ if (generateRobotsTxt) {
236
+ const txt = generateRobotsTxt({ baseUrl: getBaseUrl() });
237
+ res.setHeader('Content-Type', 'text/plain');
238
+ res.end(txt);
239
+ return;
240
+ }
241
+ } catch (e) {
242
+ console.error('Robots generation error:', e);
243
+ }
244
+ }
245
+
246
+ // API Routes
247
+ if (pathOnly.startsWith('/api/')) {
248
+ const match = matchRoute(pathOnly, apiRoutes);
249
+ if (match) {
250
+ // match.route.file is relative path like ./api/user/[id].js
251
+ try {
252
+ const apiPath = path.join(__dirname, match.route.file);
253
+ if (fs.existsSync(apiPath)) {
254
+ const mod = require(apiPath);
255
+ const handler = mod.GET || mod.POST || mod.default;
256
+ if (handler) {
257
+ // Inject params if needed
258
+ req.params = match.params;
259
+ return handler(req, res);
260
+ }
261
+ }
262
+ } catch(e) {
263
+ console.error('API Load Error:', e);
264
+ }
265
+ }
266
+
267
+ // Fallback: try to just require the file if it exists (for static routes)
268
+ try {
269
+ const potentialPath = path.join(__dirname, pathOnly + '.js');
270
+ if (fs.existsSync(potentialPath)) {
271
+ const mod = require(potentialPath);
272
+ const handler = mod.GET || mod.POST || mod.default; // simplistic support
273
+ if (handler) {
274
+ return handler(req, res);
275
+ }
276
+ }
277
+ } catch (e) {
278
+ console.error('API Error:', e);
279
+ res.statusCode = 500;
280
+ res.end('API Error');
281
+ return;
282
+ }
283
+ }
284
+
285
+ // Page Rendering (SSR)
286
+ try {
287
+ const html = await renderPage(url);
288
+ if (html) {
289
+ // Check if the page content is a full HTML document (starts with <html> or <!DOCTYPE html)
290
+ const trimmed = html.trim();
291
+ const isFullDocument = trimmed.indexOf('<html') !== -1 || /^\s*<!doctype/i.test(trimmed);
292
+
293
+ if (isFullDocument) {
294
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
295
+ res.end(html);
296
+ return;
297
+ }
298
+
299
+ const fullHtml = \`<!DOCTYPE html>
300
+ <html>
301
+ <head>
302
+ <meta charset="UTF-8" />
303
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
304
+ <link rel="icon" href="/favicon.ico" />
305
+ \${${JSON.stringify(envScript)}}
306
+ <script>window.__SATSET_LOCALE__ = "\${stripLocale(url) === url ? 'en-US' : url.split('/')[1]}";</script>
307
+ <link rel="stylesheet" href="/client/index.css">
308
+ </head>
309
+ <body>
310
+ <div id="root">\${html}</div>
311
+ <script src="/client/main.js"></script>
312
+ </body>
313
+ </html>\`;
314
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
315
+ res.end(fullHtml);
316
+ return;
317
+ }
318
+ } catch (err) {
319
+ console.error(err);
320
+ res.statusCode = 500;
321
+ res.end('Internal Server Error');
322
+ return;
323
+ }
324
+
325
+ res.statusCode = 404;
326
+ res.end('Not Found');
327
+ };
328
+ `;
329
+ }
330
+ //# sourceMappingURL=vercel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../src/adapter/vercel.ts"],"names":[],"mappings":"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"}