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,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":";;;;;AAMA,kCAqEC;AA1ED,4CAAoB;AACpB,gDAAwB;AACxB,uDAAkD;AAG3C,KAAK,UAAU,WAAW,CAAC,MAAkB;IAClD,MAAM,EACJ,MAAM,GAAG,MAAM,EACf,IAAI,GAAG,IAAI,EACX,IAAI,GAAG,SAAS,EAChB,QAAQ,GAAG,IAAI,GAChB,GAAG,MAAM,CAAC;IAEX,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE3C,yBAAyB;IACzB,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,YAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,YAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,cAAc;IACd,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,uBAAS,EAAC,IAAI,CAAC,CAAC;IAE9C,gCAAgC;IAChC,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE5E,oBAAoB;IACpB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,mBAAmB,CAAC,UAAU,EAAE,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,+CAA+C;IAC/C,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,IAAI,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,mBAAmB,CAAC,OAAO,EAAE,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,uCAAuC;IACvC,MAAM,iBAAiB,GAAG;QACxB,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE;YACP,KAAK,EAAE,gBAAgB;SACxB;QACD,YAAY,EAAE;YACZ,cAAc,EAAE,QAAQ;YACxB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,SAAS;SACvB;KACF,CAAC;IAEF,YAAE,CAAC,aAAa,CACd,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EACrC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAC3C,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAE5B,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,WAAW;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAkB,EAClB,MAAa,EACb,SAAgB,EAChB,MAAmE;IAEnE,MAAM,UAAU,GAAG;;;;;mCAKc,MAAM,CAAC,IAAI;wCACN,MAAM,CAAC,IAAI;;;;iBAIlC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC5B,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuJnD,CAAC;IAEF,YAAE,CAAC,aAAa,CAAC,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,MAAc;IACzD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,YAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -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,3 @@
1
+ import type { VercelConfig, BuildResult } from './types';
2
+ export declare function vercelAdapter(config: VercelConfig): Promise<BuildResult>;
3
+ //# sourceMappingURL=vercel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../src/adapter/vercel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEzD,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA2E9E"}
@@ -0,0 +1,173 @@
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 file_system_1 = require("../router/file-system");
10
+ async function vercelAdapter(config) {
11
+ const { outDir = '.vercel/output', regions = ['iad1'] } = config;
12
+ console.log('🔷 Building for Vercel...');
13
+ const root = process.cwd();
14
+ const outputPath = path_1.default.join(root, outDir);
15
+ // Create Vercel output structure
16
+ createVercelStructure(outputPath);
17
+ // Scan routes
18
+ const { routes, apiRoutes } = (0, file_system_1.getRoutes)(root);
19
+ // Generate config.json for Vercel
20
+ const vercelConfig = {
21
+ version: 3,
22
+ routes: [
23
+ // Static files
24
+ {
25
+ src: '/public/(.*)',
26
+ dest: '/public/$1',
27
+ },
28
+ // API routes
29
+ ...apiRoutes.map(route => ({
30
+ src: route.path,
31
+ dest: `/api${route.path}`,
32
+ })),
33
+ // Page routes (SSR) - convert Next-like paths to Vercel regex src patterns
34
+ ...routes.map(route => {
35
+ const srcPattern = route.path === '/' ? '^/$' : `^${route.path.replace(/:([^/]+)/g, '([^/]+)').replace(/\\*([^/]+)/g, '(.*)')}$`;
36
+ return {
37
+ src: srcPattern,
38
+ dest: route.path === '/' ? '/index' : route.path,
39
+ };
40
+ }),
41
+ // Catch-all 404
42
+ {
43
+ src: '/(.*)',
44
+ dest: '/404',
45
+ },
46
+ ],
47
+ };
48
+ fs_1.default.writeFileSync(path_1.default.join(outputPath, 'config.json'), JSON.stringify(vercelConfig, null, 2));
49
+ // Copy static files
50
+ const publicPath = path_1.default.join(root, 'public');
51
+ if (fs_1.default.existsSync(publicPath)) {
52
+ const staticPath = path_1.default.join(outputPath, 'static');
53
+ fs_1.default.mkdirSync(staticPath, { recursive: true });
54
+ copyFolderRecursive(publicPath, staticPath);
55
+ }
56
+ // Generate serverless functions for each page
57
+ for (const route of routes) {
58
+ generateVercelFunction(outputPath, route);
59
+ }
60
+ // Generate API functions
61
+ for (const route of apiRoutes) {
62
+ generateVercelApiFunction(outputPath, route);
63
+ }
64
+ console.log('✅ Vercel build complete!');
65
+ console.log(`📂 Output: ${outputPath}`);
66
+ console.log('💡 Deploy with: vercel --prebuilt');
67
+ return {
68
+ success: true,
69
+ outDir: outputPath,
70
+ };
71
+ }
72
+ function createVercelStructure(outputPath) {
73
+ const dirs = [
74
+ 'functions',
75
+ 'static',
76
+ ];
77
+ dirs.forEach(dir => {
78
+ fs_1.default.mkdirSync(path_1.default.join(outputPath, dir), { recursive: true });
79
+ });
80
+ }
81
+ function generateVercelFunction(outputPath, route) {
82
+ const functionName = route.path === '/' ? 'index' : route.path.replace(/^\//, '').replace(/\//g, '-');
83
+ const functionPath = path_1.default.join(outputPath, 'functions', `${functionName}.func`);
84
+ fs_1.default.mkdirSync(functionPath, { recursive: true });
85
+ // .vc-config.json
86
+ const vcConfig = {
87
+ runtime: 'nodejs18.x',
88
+ handler: 'index.js',
89
+ launcherType: 'Nodejs',
90
+ shouldAddHelpers: true,
91
+ };
92
+ fs_1.default.writeFileSync(path_1.default.join(functionPath, '.vc-config.json'), JSON.stringify(vcConfig, null, 2));
93
+ // index.js (serverless function)
94
+ const handlerCode = `
95
+ const { renderToString } = require('@satset/core');
96
+
97
+ module.exports = async (req, res) => {
98
+ try {
99
+ // TODO: Import actual component
100
+ const html = \`
101
+ <!DOCTYPE html>
102
+ <html>
103
+ <head>
104
+ <title>Satset App</title>
105
+ </head>
106
+ <body>
107
+ <div id="root">
108
+ <h1>Route: ${route.path}</h1>
109
+ </div>
110
+ </body>
111
+ </html>
112
+ \`;
113
+
114
+ res.status(200).send(html);
115
+ } catch (error) {
116
+ res.status(500).send('Internal Server Error');
117
+ }
118
+ };
119
+ `;
120
+ fs_1.default.writeFileSync(path_1.default.join(functionPath, 'index.js'), handlerCode);
121
+ }
122
+ function generateVercelApiFunction(outputPath, route) {
123
+ const functionName = route.path.replace(/^\/api\//, '').replace(/\//g, '-');
124
+ const functionPath = path_1.default.join(outputPath, 'functions', `api-${functionName}.func`);
125
+ fs_1.default.mkdirSync(functionPath, { recursive: true });
126
+ // .vc-config.json
127
+ const vcConfig = {
128
+ runtime: 'nodejs18.x',
129
+ handler: 'index.js',
130
+ launcherType: 'Nodejs',
131
+ };
132
+ fs_1.default.writeFileSync(path_1.default.join(functionPath, '.vc-config.json'), JSON.stringify(vcConfig, null, 2));
133
+ // index.js (API handler)
134
+ const handlerCode = `
135
+ const handler = require('${route.component}');
136
+
137
+ module.exports = async (req, res) => {
138
+ try {
139
+ if (typeof handler.default === 'function') {
140
+ return handler.default(req, res);
141
+ }
142
+
143
+ const method = req.method || 'GET';
144
+ if (typeof handler[method] === 'function') {
145
+ return handler[method](req, res);
146
+ }
147
+
148
+ res.status(405).json({ error: 'Method not allowed' });
149
+ } catch (error) {
150
+ res.status(500).json({ error: error.message });
151
+ }
152
+ };
153
+ `;
154
+ fs_1.default.writeFileSync(path_1.default.join(functionPath, 'index.js'), handlerCode);
155
+ }
156
+ function copyFolderRecursive(source, target) {
157
+ if (!fs_1.default.existsSync(target)) {
158
+ fs_1.default.mkdirSync(target, { recursive: true });
159
+ }
160
+ const files = fs_1.default.readdirSync(source);
161
+ for (const file of files) {
162
+ const sourcePath = path_1.default.join(source, file);
163
+ const targetPath = path_1.default.join(target, file);
164
+ const stat = fs_1.default.statSync(sourcePath);
165
+ if (stat.isDirectory()) {
166
+ copyFolderRecursive(sourcePath, targetPath);
167
+ }
168
+ else {
169
+ fs_1.default.copyFileSync(sourcePath, targetPath);
170
+ }
171
+ }
172
+ }
173
+ //# 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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"}
@@ -0,0 +1,2 @@
1
+ export declare function generateFavicon(root: string, username?: string): Promise<void>;
2
+ //# sourceMappingURL=favicon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"favicon.d.ts","sourceRoot":"","sources":["../../src/assets/favicon.ts"],"names":[],"mappings":"AAIA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBpF"}
@@ -0,0 +1,67 @@
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.generateFavicon = generateFavicon;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const https_1 = __importDefault(require("https"));
10
+ async function generateFavicon(root, username) {
11
+ const publicPath = path_1.default.join(root, 'public');
12
+ const faviconPath = path_1.default.join(publicPath, 'favicon.png');
13
+ // Skip if favicon already exists
14
+ if (fs_1.default.existsSync(faviconPath)) {
15
+ console.log('✅ Favicon already exists, skipping...');
16
+ return;
17
+ }
18
+ console.log('🎨 Generating favicon...');
19
+ // Get username from package.json or use default
20
+ const faviconUrl = "https://raw.githubusercontent.com/IndokuDev/IndokuDev-all-Logo/refs/heads/main/satset.png";
21
+ try {
22
+ await downloadImage(faviconUrl, faviconPath);
23
+ console.log(`✅ Favicon generated`);
24
+ }
25
+ catch (error) {
26
+ console.error('❌ Failed to generate favicon:', error);
27
+ // Create default SVG favicon
28
+ createDefaultFavicon(faviconPath);
29
+ }
30
+ }
31
+ function downloadImage(url, dest) {
32
+ return new Promise((resolve, reject) => {
33
+ const file = fs_1.default.createWriteStream(dest);
34
+ https_1.default.get(url, (response) => {
35
+ if (response.statusCode !== 200) {
36
+ reject(new Error(`Failed to download: ${response.statusCode}`));
37
+ return;
38
+ }
39
+ response.pipe(file);
40
+ file.on('finish', () => {
41
+ file.close();
42
+ resolve();
43
+ });
44
+ }).on('error', (err) => {
45
+ fs_1.default.unlink(dest, () => { });
46
+ reject(err);
47
+ });
48
+ });
49
+ }
50
+ function createDefaultFavicon(dest) {
51
+ // Create a simple SVG favicon
52
+ const svg = `
53
+ <svg width="256" height="256" xmlns="http://www.w3.org/2000/svg">
54
+ <defs>
55
+ <linearGradient id="grad" x1="0%" y1="0%" x2="100%" y2="100%">
56
+ <stop offset="0%" style="stop-color:#3b82f6;stop-opacity:1" />
57
+ <stop offset="100%" style="stop-color:#8b5cf6;stop-opacity:1" />
58
+ </linearGradient>
59
+ </defs>
60
+ <rect width="256" height="256" fill="url(#grad)" rx="32"/>
61
+ <text x="128" y="180" font-family="Arial, sans-serif" font-size="140" font-weight="bold" fill="white" text-anchor="middle">S</text>
62
+ </svg>
63
+ `.trim();
64
+ fs_1.default.writeFileSync(dest.replace('.png', '.svg'), svg);
65
+ console.log('✅ Default SVG favicon created');
66
+ }
67
+ //# sourceMappingURL=favicon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"favicon.js","sourceRoot":"","sources":["../../src/assets/favicon.ts"],"names":[],"mappings":";;;;;AAIA,0CAsBC;AA1BD,4CAAoB;AACpB,gDAAwB;AACxB,kDAA0B;AAEnB,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,QAAiB;IACnE,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAEzD,iCAAiC;IACjC,IAAI,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExC,gDAAgD;IAChD,MAAM,UAAU,GAAG,2FAA2F,CAAA;IAC9G,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,6BAA6B;QAC7B,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,IAAY;IAC9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,YAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE;YAC1B,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBAChE,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEpB,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACrB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACrB,YAAE,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,8BAA8B;IAC9B,MAAM,GAAG,GAAG;;;;;;;;;;;GAWX,CAAC,IAAI,EAAE,CAAC;IAET,YAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { generateFavicon } from './favicon';
2
+ export { generateSitemap, saveSitemap, generateAndSaveSitemap } from './sitemap';
3
+ export type { SitemapOptions } from './sitemap';
4
+ export { generateRobotsTxt, saveRobotsTxt, generateAndSaveRobots } from './robots';
5
+ export type { RobotsOptions } from './robots';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACnF,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateAndSaveRobots = exports.saveRobotsTxt = exports.generateRobotsTxt = exports.generateAndSaveSitemap = exports.saveSitemap = exports.generateSitemap = exports.generateFavicon = void 0;
4
+ var favicon_1 = require("./favicon");
5
+ Object.defineProperty(exports, "generateFavicon", { enumerable: true, get: function () { return favicon_1.generateFavicon; } });
6
+ var sitemap_1 = require("./sitemap");
7
+ Object.defineProperty(exports, "generateSitemap", { enumerable: true, get: function () { return sitemap_1.generateSitemap; } });
8
+ Object.defineProperty(exports, "saveSitemap", { enumerable: true, get: function () { return sitemap_1.saveSitemap; } });
9
+ Object.defineProperty(exports, "generateAndSaveSitemap", { enumerable: true, get: function () { return sitemap_1.generateAndSaveSitemap; } });
10
+ var robots_1 = require("./robots");
11
+ Object.defineProperty(exports, "generateRobotsTxt", { enumerable: true, get: function () { return robots_1.generateRobotsTxt; } });
12
+ Object.defineProperty(exports, "saveRobotsTxt", { enumerable: true, get: function () { return robots_1.saveRobotsTxt; } });
13
+ Object.defineProperty(exports, "generateAndSaveRobots", { enumerable: true, get: function () { return robots_1.generateAndSaveRobots; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assets/index.ts"],"names":[],"mappings":";;;AAAA,qCAA4C;AAAnC,0GAAA,eAAe,OAAA;AACxB,qCAAiF;AAAxE,0GAAA,eAAe,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,iHAAA,sBAAsB,OAAA;AAE7D,mCAAmF;AAA1E,2GAAA,iBAAiB,OAAA;AAAE,uGAAA,aAAa,OAAA;AAAE,+GAAA,qBAAqB,OAAA"}
@@ -0,0 +1,23 @@
1
+ export interface OpenGraph {
2
+ title?: string;
3
+ description?: string;
4
+ url?: string;
5
+ image?: string;
6
+ type?: string;
7
+ }
8
+ export interface TwitterCard {
9
+ card?: 'summary' | 'summary_large_image' | 'app' | 'player';
10
+ site?: string;
11
+ creator?: string;
12
+ }
13
+ export interface Metadata {
14
+ title?: string;
15
+ description?: string;
16
+ keywords?: string;
17
+ canonical?: string;
18
+ openGraph?: OpenGraph;
19
+ twitter?: TwitterCard;
20
+ robots?: string;
21
+ }
22
+ export declare function renderMetaTags(meta: Metadata | null | undefined): string;
23
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/assets/metadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,SAAS,GAAG,qBAAqB,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CA2CxE"}