@flightdev/core 0.6.7

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 (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +541 -0
  3. package/dist/actions/index.d.ts +743 -0
  4. package/dist/actions/index.js +3 -0
  5. package/dist/actions/index.js.map +1 -0
  6. package/dist/adapters/index.d.ts +502 -0
  7. package/dist/adapters/index.js +3 -0
  8. package/dist/adapters/index.js.map +1 -0
  9. package/dist/cache/index.d.ts +191 -0
  10. package/dist/cache/index.js +3 -0
  11. package/dist/cache/index.js.map +1 -0
  12. package/dist/chunk-62HISNA3.js +354 -0
  13. package/dist/chunk-62HISNA3.js.map +1 -0
  14. package/dist/chunk-63LWTEDQ.js +341 -0
  15. package/dist/chunk-63LWTEDQ.js.map +1 -0
  16. package/dist/chunk-63SCEXD7.js +3 -0
  17. package/dist/chunk-63SCEXD7.js.map +1 -0
  18. package/dist/chunk-72MYOTUB.js +667 -0
  19. package/dist/chunk-72MYOTUB.js.map +1 -0
  20. package/dist/chunk-7CNW24MQ.js +257 -0
  21. package/dist/chunk-7CNW24MQ.js.map +1 -0
  22. package/dist/chunk-7WIEAUJT.js +300 -0
  23. package/dist/chunk-7WIEAUJT.js.map +1 -0
  24. package/dist/chunk-7ZZF4ULK.js +259 -0
  25. package/dist/chunk-7ZZF4ULK.js.map +1 -0
  26. package/dist/chunk-AE3JTS73.js +222 -0
  27. package/dist/chunk-AE3JTS73.js.map +1 -0
  28. package/dist/chunk-AP5NLUSB.js +258 -0
  29. package/dist/chunk-AP5NLUSB.js.map +1 -0
  30. package/dist/chunk-C37YQQI7.js +221 -0
  31. package/dist/chunk-C37YQQI7.js.map +1 -0
  32. package/dist/chunk-DCLVXFVH.js +225 -0
  33. package/dist/chunk-DCLVXFVH.js.map +1 -0
  34. package/dist/chunk-DZMWWDFD.js +223 -0
  35. package/dist/chunk-DZMWWDFD.js.map +1 -0
  36. package/dist/chunk-GCQZ4FHI.js +245 -0
  37. package/dist/chunk-GCQZ4FHI.js.map +1 -0
  38. package/dist/chunk-IPP44XY6.js +47 -0
  39. package/dist/chunk-IPP44XY6.js.map +1 -0
  40. package/dist/chunk-IW7FTQQX.js +267 -0
  41. package/dist/chunk-IW7FTQQX.js.map +1 -0
  42. package/dist/chunk-JX4YSCBH.js +428 -0
  43. package/dist/chunk-JX4YSCBH.js.map +1 -0
  44. package/dist/chunk-KX6UYWWR.js +229 -0
  45. package/dist/chunk-KX6UYWWR.js.map +1 -0
  46. package/dist/chunk-LWVETFJV.js +46 -0
  47. package/dist/chunk-LWVETFJV.js.map +1 -0
  48. package/dist/chunk-MCL2MCA2.js +285 -0
  49. package/dist/chunk-MCL2MCA2.js.map +1 -0
  50. package/dist/chunk-MZXCF35B.js +205 -0
  51. package/dist/chunk-MZXCF35B.js.map +1 -0
  52. package/dist/chunk-NCGPUFWV.js +96 -0
  53. package/dist/chunk-NCGPUFWV.js.map +1 -0
  54. package/dist/chunk-OEJMIE2Q.js +351 -0
  55. package/dist/chunk-OEJMIE2Q.js.map +1 -0
  56. package/dist/chunk-OYF2OAKS.js +394 -0
  57. package/dist/chunk-OYF2OAKS.js.map +1 -0
  58. package/dist/chunk-P6S43FYZ.js +316 -0
  59. package/dist/chunk-P6S43FYZ.js.map +1 -0
  60. package/dist/chunk-PL37KFRJ.js +3 -0
  61. package/dist/chunk-PL37KFRJ.js.map +1 -0
  62. package/dist/chunk-Q7BS5QC5.js +197 -0
  63. package/dist/chunk-Q7BS5QC5.js.map +1 -0
  64. package/dist/chunk-SDYPG3JD.js +288 -0
  65. package/dist/chunk-SDYPG3JD.js.map +1 -0
  66. package/dist/chunk-SUG56SZO.js +256 -0
  67. package/dist/chunk-SUG56SZO.js.map +1 -0
  68. package/dist/chunk-UVH5XJRP.js +164 -0
  69. package/dist/chunk-UVH5XJRP.js.map +1 -0
  70. package/dist/chunk-WZIJKCL3.js +282 -0
  71. package/dist/chunk-WZIJKCL3.js.map +1 -0
  72. package/dist/chunk-Y22AMGTM.js +3 -0
  73. package/dist/chunk-Y22AMGTM.js.map +1 -0
  74. package/dist/chunk-Z7G23XWU.js +200 -0
  75. package/dist/chunk-Z7G23XWU.js.map +1 -0
  76. package/dist/chunk-ZJU5M4IB.js +125 -0
  77. package/dist/chunk-ZJU5M4IB.js.map +1 -0
  78. package/dist/chunk-ZVC3ZWLM.js +52 -0
  79. package/dist/chunk-ZVC3ZWLM.js.map +1 -0
  80. package/dist/chunk-ZZZML7Y3.js +310 -0
  81. package/dist/chunk-ZZZML7Y3.js.map +1 -0
  82. package/dist/client.d.ts +25 -0
  83. package/dist/client.js +16 -0
  84. package/dist/client.js.map +1 -0
  85. package/dist/config/index.d.ts +170 -0
  86. package/dist/config/index.js +3 -0
  87. package/dist/config/index.js.map +1 -0
  88. package/dist/errors/index.d.ts +267 -0
  89. package/dist/errors/index.js +4 -0
  90. package/dist/errors/index.js.map +1 -0
  91. package/dist/file-router/index.d.ts +184 -0
  92. package/dist/file-router/index.js +3 -0
  93. package/dist/file-router/index.js.map +1 -0
  94. package/dist/file-router/streaming-hints.d.ts +129 -0
  95. package/dist/file-router/streaming-hints.js +3 -0
  96. package/dist/file-router/streaming-hints.js.map +1 -0
  97. package/dist/handlers/index.d.ts +59 -0
  98. package/dist/handlers/index.js +3 -0
  99. package/dist/handlers/index.js.map +1 -0
  100. package/dist/index.d.ts +588 -0
  101. package/dist/index.js +886 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/islands/index.d.ts +234 -0
  104. package/dist/islands/index.js +3 -0
  105. package/dist/islands/index.js.map +1 -0
  106. package/dist/middleware/index.d.ts +305 -0
  107. package/dist/middleware/index.js +3 -0
  108. package/dist/middleware/index.js.map +1 -0
  109. package/dist/react/index.d.ts +73 -0
  110. package/dist/react/index.js +52 -0
  111. package/dist/react/index.js.map +1 -0
  112. package/dist/render/index.d.ts +131 -0
  113. package/dist/render/index.js +3 -0
  114. package/dist/render/index.js.map +1 -0
  115. package/dist/router/index.d.ts +65 -0
  116. package/dist/router/index.js +3 -0
  117. package/dist/router/index.js.map +1 -0
  118. package/dist/rsc/adapters/index.d.ts +8 -0
  119. package/dist/rsc/adapters/index.js +7 -0
  120. package/dist/rsc/adapters/index.js.map +1 -0
  121. package/dist/rsc/adapters/preact.d.ts +97 -0
  122. package/dist/rsc/adapters/preact.js +3 -0
  123. package/dist/rsc/adapters/preact.js.map +1 -0
  124. package/dist/rsc/adapters/react.d.ts +82 -0
  125. package/dist/rsc/adapters/react.js +3 -0
  126. package/dist/rsc/adapters/react.js.map +1 -0
  127. package/dist/rsc/adapters/solid.d.ts +84 -0
  128. package/dist/rsc/adapters/solid.js +3 -0
  129. package/dist/rsc/adapters/solid.js.map +1 -0
  130. package/dist/rsc/adapters/vue.d.ts +80 -0
  131. package/dist/rsc/adapters/vue.js +3 -0
  132. package/dist/rsc/adapters/vue.js.map +1 -0
  133. package/dist/rsc/boundaries.d.ts +182 -0
  134. package/dist/rsc/boundaries.js +3 -0
  135. package/dist/rsc/boundaries.js.map +1 -0
  136. package/dist/rsc/context.d.ts +201 -0
  137. package/dist/rsc/context.js +3 -0
  138. package/dist/rsc/context.js.map +1 -0
  139. package/dist/rsc/index.d.ts +232 -0
  140. package/dist/rsc/index.js +15 -0
  141. package/dist/rsc/index.js.map +1 -0
  142. package/dist/rsc/legacy.d.ts +155 -0
  143. package/dist/rsc/legacy.js +3 -0
  144. package/dist/rsc/legacy.js.map +1 -0
  145. package/dist/rsc/payload.d.ts +262 -0
  146. package/dist/rsc/payload.js +3 -0
  147. package/dist/rsc/payload.js.map +1 -0
  148. package/dist/rsc/plugins/esbuild.d.ts +124 -0
  149. package/dist/rsc/plugins/esbuild.js +4 -0
  150. package/dist/rsc/plugins/esbuild.js.map +1 -0
  151. package/dist/rsc/plugins/index.d.ts +4 -0
  152. package/dist/rsc/plugins/index.js +6 -0
  153. package/dist/rsc/plugins/index.js.map +1 -0
  154. package/dist/rsc/plugins/rollup.d.ts +103 -0
  155. package/dist/rsc/plugins/rollup.js +4 -0
  156. package/dist/rsc/plugins/rollup.js.map +1 -0
  157. package/dist/rsc/renderer.d.ts +162 -0
  158. package/dist/rsc/renderer.js +5 -0
  159. package/dist/rsc/renderer.js.map +1 -0
  160. package/dist/rsc/stream.d.ts +129 -0
  161. package/dist/rsc/stream.js +3 -0
  162. package/dist/rsc/stream.js.map +1 -0
  163. package/dist/rsc/vite-plugin.d.ts +78 -0
  164. package/dist/rsc/vite-plugin.js +4 -0
  165. package/dist/rsc/vite-plugin.js.map +1 -0
  166. package/dist/server/index.d.ts +135 -0
  167. package/dist/server/index.js +6 -0
  168. package/dist/server/index.js.map +1 -0
  169. package/dist/streaming/adapters/index.d.ts +223 -0
  170. package/dist/streaming/adapters/index.js +3 -0
  171. package/dist/streaming/adapters/index.js.map +1 -0
  172. package/dist/streaming/conditional.d.ts +130 -0
  173. package/dist/streaming/conditional.js +3 -0
  174. package/dist/streaming/conditional.js.map +1 -0
  175. package/dist/streaming/index.d.ts +177 -0
  176. package/dist/streaming/index.js +3 -0
  177. package/dist/streaming/index.js.map +1 -0
  178. package/dist/streaming/observability.d.ts +201 -0
  179. package/dist/streaming/observability.js +4 -0
  180. package/dist/streaming/observability.js.map +1 -0
  181. package/dist/streaming/priority.d.ts +103 -0
  182. package/dist/streaming/priority.js +3 -0
  183. package/dist/streaming/priority.js.map +1 -0
  184. package/dist/utils/index.d.ts +42 -0
  185. package/dist/utils/index.js +4 -0
  186. package/dist/utils/index.js.map +1 -0
  187. package/package.json +228 -0
@@ -0,0 +1,341 @@
1
+ import { analyzeModule, hasUseClientDirective, hasUseServerDirective, detectInlineServerActions } from './chunk-AP5NLUSB.js';
2
+
3
+ // src/rsc/vite-plugin.ts
4
+ function flightRSC(options = {}) {
5
+ const {
6
+ include = ["**/*.tsx", "**/*.ts", "**/*.jsx", "**/*.js"],
7
+ exclude = ["**/node_modules/**", "**/.git/**"],
8
+ actionsEndpoint = "/_flight/action",
9
+ clientManifest = ".flight/client-manifest.json",
10
+ serverManifest = ".flight/server-manifest.json"
11
+ // dev flag reserved for future use
12
+ } = options;
13
+ const clientModules = /* @__PURE__ */ new Map();
14
+ const serverActions = /* @__PURE__ */ new Map();
15
+ let config;
16
+ let isSSR = false;
17
+ return [
18
+ // ================================================================
19
+ // 1. Analyze modules and track boundaries
20
+ // ================================================================
21
+ {
22
+ name: "flight-rsc:analyze",
23
+ enforce: "pre",
24
+ configResolved(resolvedConfig) {
25
+ config = resolvedConfig;
26
+ },
27
+ transform(code, id) {
28
+ if (!shouldProcess(id, include, exclude)) {
29
+ return null;
30
+ }
31
+ const analysis = analyzeModule(code, id);
32
+ if (analysis.fileDirective === "client") {
33
+ clientModules.set(id, {
34
+ id: createModuleId(id, config),
35
+ file: id,
36
+ exports: analysis.clientComponents
37
+ });
38
+ }
39
+ if (analysis.fileDirective === "server" || analysis.serverActions.length > 0) {
40
+ serverActions.set(id, {
41
+ id: createModuleId(id, config),
42
+ file: id,
43
+ actions: analysis.serverActions
44
+ });
45
+ }
46
+ return null;
47
+ }
48
+ },
49
+ // ================================================================
50
+ // 2. Transform client components to references (server bundle)
51
+ // ================================================================
52
+ {
53
+ name: "flight-rsc:client-transform",
54
+ transform(code, id, opts) {
55
+ isSSR = opts?.ssr ?? false;
56
+ if (!isSSR) return null;
57
+ if (!hasUseClientDirective(code)) return null;
58
+ if (!shouldProcess(id, include, exclude)) return null;
59
+ if (options.transforms?.client) {
60
+ const result = options.transforms.client(code, id);
61
+ if (result) return result;
62
+ }
63
+ const moduleId = createModuleId(id, config);
64
+ const exports$1 = extractExportNames(code);
65
+ let transformed = `
66
+ // Flight RSC: Client Component Reference
67
+ // Original: ${id}
68
+
69
+ const __flight_client_module_id = ${JSON.stringify(moduleId)};
70
+
71
+ `;
72
+ for (const exportName of exports$1) {
73
+ if (exportName === "default") {
74
+ transformed += `
75
+ const __flight_default_proxy = Object.assign(
76
+ function() {
77
+ throw new Error('Client Component cannot be called on the server. Module: ' + __flight_client_module_id);
78
+ },
79
+ {
80
+ $$typeof: Symbol.for('flight.client.reference'),
81
+ $$id: __flight_client_module_id + '#default',
82
+ $$async: false,
83
+ __flight_client: true,
84
+ __flight_module: __flight_client_module_id,
85
+ __flight_export: 'default',
86
+ }
87
+ );
88
+
89
+ export default __flight_default_proxy;
90
+ `;
91
+ } else {
92
+ transformed += `
93
+ export const ${exportName} = Object.assign(
94
+ function() {
95
+ throw new Error('Client Component cannot be called on the server. Module: ' + __flight_client_module_id);
96
+ },
97
+ {
98
+ $$typeof: Symbol.for('flight.client.reference'),
99
+ $$id: __flight_client_module_id + '#${exportName}',
100
+ $$async: false,
101
+ __flight_client: true,
102
+ __flight_module: __flight_client_module_id,
103
+ __flight_export: '${exportName}',
104
+ }
105
+ );
106
+ `;
107
+ }
108
+ }
109
+ return {
110
+ code: transformed,
111
+ map: null
112
+ };
113
+ }
114
+ },
115
+ // ================================================================
116
+ // 3. Transform server actions to RPC calls (client bundle)
117
+ // ================================================================
118
+ {
119
+ name: "flight-rsc:server-transform",
120
+ transform(code, id, opts) {
121
+ isSSR = opts?.ssr ?? false;
122
+ if (isSSR) return null;
123
+ if (!shouldProcess(id, include, exclude)) return null;
124
+ if (hasUseServerDirective(code)) {
125
+ if (options.transforms?.server) {
126
+ const result = options.transforms.server(code, id);
127
+ if (result) return result;
128
+ }
129
+ const moduleId = createModuleId(id, config);
130
+ const exports$1 = extractExportNames(code);
131
+ let transformed = `
132
+ // Flight RSC: Server Actions (RPC Proxies)
133
+ // Original: ${id}
134
+
135
+ const __flight_actions_endpoint = ${JSON.stringify(actionsEndpoint)};
136
+ const __flight_module_id = ${JSON.stringify(moduleId)};
137
+
138
+ async function __flight_call_action(actionId, args) {
139
+ const response = await fetch(__flight_actions_endpoint, {
140
+ method: 'POST',
141
+ headers: {
142
+ 'Content-Type': 'application/json',
143
+ 'X-Flight-Action': actionId,
144
+ },
145
+ body: JSON.stringify({ actionId, args }),
146
+ });
147
+
148
+ if (!response.ok) {
149
+ const error = await response.json().catch(() => ({ message: 'Server action failed' }));
150
+ throw new Error(error.message || 'Server action failed');
151
+ }
152
+
153
+ return response.json();
154
+ }
155
+
156
+ `;
157
+ for (const exportName of exports$1) {
158
+ const actionId = `${moduleId}#${exportName}`;
159
+ if (exportName === "default") {
160
+ transformed += `
161
+ export default async function(...args) {
162
+ return __flight_call_action(${JSON.stringify(actionId)}, args);
163
+ }
164
+ `;
165
+ } else {
166
+ transformed += `
167
+ export async function ${exportName}(...args) {
168
+ return __flight_call_action(${JSON.stringify(actionId)}, args);
169
+ }
170
+ `;
171
+ }
172
+ }
173
+ return {
174
+ code: transformed,
175
+ map: null
176
+ };
177
+ }
178
+ const inlineActions = detectInlineServerActions(code);
179
+ if (inlineActions.length > 0) {
180
+ let transformed = code;
181
+ const moduleId = createModuleId(id, config);
182
+ for (const actionName of inlineActions) {
183
+ const actionId = `${moduleId}#${actionName}`;
184
+ const asyncFnPattern = new RegExp(
185
+ `(async\\s+function\\s+${actionName}\\s*\\([^)]*\\)\\s*\\{[^}]*['"]use server['"][^}]*\\})`,
186
+ "g"
187
+ );
188
+ transformed = transformed.replace(
189
+ asyncFnPattern,
190
+ `
191
+ async function ${actionName}(...args) {
192
+ const response = await fetch(${JSON.stringify(actionsEndpoint)}, {
193
+ method: 'POST',
194
+ headers: {
195
+ 'Content-Type': 'application/json',
196
+ 'X-Flight-Action': ${JSON.stringify(actionId)},
197
+ },
198
+ body: JSON.stringify({ actionId: ${JSON.stringify(actionId)}, args }),
199
+ });
200
+ if (!response.ok) throw new Error('Server action failed');
201
+ return response.json();
202
+ }`
203
+ );
204
+ }
205
+ if (transformed !== code) {
206
+ return {
207
+ code: transformed,
208
+ map: null
209
+ };
210
+ }
211
+ }
212
+ return null;
213
+ }
214
+ },
215
+ // ================================================================
216
+ // 4. Generate manifests
217
+ // ================================================================
218
+ {
219
+ name: "flight-rsc:manifest",
220
+ generateBundle() {
221
+ if (clientModules.size > 0) {
222
+ const manifest = Object.fromEntries(clientModules);
223
+ this.emitFile({
224
+ type: "asset",
225
+ fileName: clientManifest,
226
+ source: JSON.stringify(manifest, null, 2)
227
+ });
228
+ }
229
+ if (serverActions.size > 0) {
230
+ const manifest = Object.fromEntries(serverActions);
231
+ this.emitFile({
232
+ type: "asset",
233
+ fileName: serverManifest,
234
+ source: JSON.stringify(manifest, null, 2)
235
+ });
236
+ }
237
+ }
238
+ },
239
+ // ================================================================
240
+ // 5. Dev server middleware for server actions
241
+ // ================================================================
242
+ {
243
+ name: "flight-rsc:dev-server",
244
+ apply: "serve",
245
+ configureServer(server) {
246
+ server.middlewares.use(async (req, res, next) => {
247
+ if (req.url?.startsWith(actionsEndpoint) && req.method === "POST") {
248
+ try {
249
+ const chunks = [];
250
+ for await (const chunk of req) {
251
+ chunks.push(chunk);
252
+ }
253
+ const body = JSON.parse(Buffer.concat(chunks).toString());
254
+ const { actionId, args } = body;
255
+ const [moduleId, actionName] = actionId.split("#");
256
+ const entry = [...serverActions.values()].find((e) => e.id === moduleId);
257
+ if (!entry) {
258
+ res.statusCode = 404;
259
+ res.end(JSON.stringify({ error: "Action not found" }));
260
+ return;
261
+ }
262
+ const mod = await server.ssrLoadModule(entry.file);
263
+ const action = mod[actionName] || mod.default;
264
+ if (typeof action !== "function") {
265
+ res.statusCode = 404;
266
+ res.end(JSON.stringify({ error: "Action not found" }));
267
+ return;
268
+ }
269
+ const result = await action(...args);
270
+ res.setHeader("Content-Type", "application/json");
271
+ res.end(JSON.stringify(result));
272
+ } catch (error) {
273
+ console.error("[Flight RSC] Action error:", error);
274
+ res.statusCode = 500;
275
+ res.end(JSON.stringify({
276
+ error: error.message
277
+ }));
278
+ }
279
+ return;
280
+ }
281
+ next();
282
+ });
283
+ }
284
+ }
285
+ ];
286
+ }
287
+ function shouldProcess(id, include, exclude) {
288
+ const isIncluded = include.some((pattern) => {
289
+ const regex = globToRegex(pattern);
290
+ return regex.test(id);
291
+ });
292
+ const isExcluded = exclude.some((pattern) => {
293
+ const regex = globToRegex(pattern);
294
+ return regex.test(id);
295
+ });
296
+ return isIncluded && !isExcluded;
297
+ }
298
+ function globToRegex(pattern) {
299
+ const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*\*/g, "{{GLOBSTAR}}").replace(/\*/g, "[^/]*").replace(/{{GLOBSTAR}}/g, ".*");
300
+ return new RegExp(escaped);
301
+ }
302
+ function createModuleId(id, config) {
303
+ let moduleId = id;
304
+ if (config?.root && id.startsWith(config.root)) {
305
+ moduleId = id.slice(config.root.length);
306
+ }
307
+ moduleId = moduleId.replace(/\\/g, "/");
308
+ if (!moduleId.startsWith("/")) {
309
+ moduleId = "/" + moduleId;
310
+ }
311
+ return moduleId;
312
+ }
313
+ function extractExportNames(code) {
314
+ const exports$1 = [];
315
+ if (/export\s+default\s+/.test(code)) {
316
+ exports$1.push("default");
317
+ }
318
+ const namedPattern = /export\s+(?:async\s+)?(?:function|const|let|var|class)\s+(\w+)/g;
319
+ let match;
320
+ while ((match = namedPattern.exec(code)) !== null) {
321
+ if (match[1] && match[1] !== "default") {
322
+ exports$1.push(match[1]);
323
+ }
324
+ }
325
+ const bracketPattern = /export\s*\{\s*([^}]+)\s*\}/g;
326
+ while ((match = bracketPattern.exec(code)) !== null) {
327
+ if (match[1]) {
328
+ const names = match[1].split(",").map((n) => {
329
+ const parts = n.trim().split(/\s+as\s+/);
330
+ return parts[parts.length - 1].trim();
331
+ });
332
+ exports$1.push(...names.filter((n) => n && n !== "default"));
333
+ }
334
+ }
335
+ return [...new Set(exports$1)];
336
+ }
337
+ var vite_plugin_default = flightRSC;
338
+
339
+ export { flightRSC, vite_plugin_default };
340
+ //# sourceMappingURL=chunk-63LWTEDQ.js.map
341
+ //# sourceMappingURL=chunk-63LWTEDQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/vite-plugin.ts"],"names":["exports"],"mappings":"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","file":"chunk-63LWTEDQ.js","sourcesContent":["/**\r\n * @flightdev/vite-plugin-rsc\r\n * \r\n * Vite plugin for Flight Server Components.\r\n * Transforms 'use client' and 'use server' directives at build time.\r\n * \r\n * Philosophy:\r\n * - Zero config for common cases\r\n * - Full control when needed\r\n * - Works with any Vite project\r\n * - No Next.js dependencies\r\n * \r\n * @module @flightdev/vite-plugin-rsc\r\n */\r\n\r\nimport type { Plugin, ResolvedConfig } from 'vite';\r\nimport {\r\n analyzeModule,\r\n hasUseClientDirective,\r\n hasUseServerDirective,\r\n detectInlineServerActions,\r\n} from './boundaries.js';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Plugin configuration\r\n */\r\nexport interface FlightRSCPluginOptions {\r\n /** Include patterns (glob) */\r\n include?: string[];\r\n\r\n /** Exclude patterns (glob) */\r\n exclude?: string[];\r\n\r\n /** Server actions endpoint */\r\n actionsEndpoint?: string;\r\n\r\n /** Client manifest output path */\r\n clientManifest?: string;\r\n\r\n /** Server manifest output path */\r\n serverManifest?: string;\r\n\r\n /** Enable dev mode features */\r\n dev?: boolean;\r\n\r\n /** Custom transforms */\r\n transforms?: {\r\n /** Transform client components */\r\n client?: (code: string, id: string) => string | null;\r\n /** Transform server actions */\r\n server?: (code: string, id: string) => string | null;\r\n };\r\n}\r\n\r\n/**\r\n * Client manifest entry\r\n */\r\nexport interface ClientManifestEntry {\r\n id: string;\r\n file: string;\r\n exports: string[];\r\n chunks?: string[];\r\n}\r\n\r\n/**\r\n * Server manifest entry\r\n */\r\nexport interface ServerManifestEntry {\r\n id: string;\r\n file: string;\r\n actions: string[];\r\n}\r\n\r\n// ============================================================================\r\n// Plugin Implementation\r\n// ============================================================================\r\n\r\n/**\r\n * Flight RSC Vite Plugin\r\n * \r\n * @example\r\n * ```typescript\r\n * // vite.config.ts\r\n * import { flightRSC } from '@flightdev/core/rsc/vite-plugin';\r\n * \r\n * export default defineConfig({\r\n * plugins: [\r\n * flightRSC({\r\n * actionsEndpoint: '/_flight/action',\r\n * }),\r\n * ],\r\n * });\r\n * ```\r\n */\r\nexport function flightRSC(options: FlightRSCPluginOptions = {}): Plugin[] {\r\n const {\r\n include = ['**/*.tsx', '**/*.ts', '**/*.jsx', '**/*.js'],\r\n exclude = ['**/node_modules/**', '**/.git/**'],\r\n actionsEndpoint = '/_flight/action',\r\n clientManifest = '.flight/client-manifest.json',\r\n serverManifest = '.flight/server-manifest.json',\r\n // dev flag reserved for future use\r\n } = options;\r\n\r\n // State\r\n const clientModules = new Map<string, ClientManifestEntry>();\r\n const serverActions = new Map<string, ServerManifestEntry>();\r\n let config: ResolvedConfig;\r\n let isSSR = false;\r\n\r\n return [\r\n // ================================================================\r\n // 1. Analyze modules and track boundaries\r\n // ================================================================\r\n {\r\n name: 'flight-rsc:analyze',\r\n enforce: 'pre',\r\n\r\n configResolved(resolvedConfig) {\r\n config = resolvedConfig;\r\n },\r\n\r\n transform(code, id) {\r\n // Skip excluded files\r\n if (!shouldProcess(id, include, exclude)) {\r\n return null;\r\n }\r\n\r\n // Analyze module\r\n const analysis = analyzeModule(code, id);\r\n\r\n // Track client modules\r\n if (analysis.fileDirective === 'client') {\r\n clientModules.set(id, {\r\n id: createModuleId(id, config),\r\n file: id,\r\n exports: analysis.clientComponents,\r\n });\r\n }\r\n\r\n // Track server actions\r\n if (analysis.fileDirective === 'server' || analysis.serverActions.length > 0) {\r\n serverActions.set(id, {\r\n id: createModuleId(id, config),\r\n file: id,\r\n actions: analysis.serverActions,\r\n });\r\n }\r\n\r\n return null;\r\n },\r\n },\r\n\r\n // ================================================================\r\n // 2. Transform client components to references (server bundle)\r\n // ================================================================\r\n {\r\n name: 'flight-rsc:client-transform',\r\n\r\n transform(code, id, opts) {\r\n isSSR = opts?.ssr ?? false;\r\n\r\n if (!isSSR) return null;\r\n if (!hasUseClientDirective(code)) return null;\r\n if (!shouldProcess(id, include, exclude)) return null;\r\n\r\n // Custom transform\r\n if (options.transforms?.client) {\r\n const result = options.transforms.client(code, id);\r\n if (result) return result;\r\n }\r\n\r\n // Replace client component with reference proxy\r\n const moduleId = createModuleId(id, config);\r\n const exports = extractExportNames(code);\r\n\r\n let transformed = `\r\n// Flight RSC: Client Component Reference\r\n// Original: ${id}\r\n\r\nconst __flight_client_module_id = ${JSON.stringify(moduleId)};\r\n\r\n`;\r\n\r\n // Create proxy for each export\r\n for (const exportName of exports) {\r\n if (exportName === 'default') {\r\n transformed += `\r\nconst __flight_default_proxy = Object.assign(\r\n function() {\r\n throw new Error('Client Component cannot be called on the server. Module: ' + __flight_client_module_id);\r\n },\r\n {\r\n $$typeof: Symbol.for('flight.client.reference'),\r\n $$id: __flight_client_module_id + '#default',\r\n $$async: false,\r\n __flight_client: true,\r\n __flight_module: __flight_client_module_id,\r\n __flight_export: 'default',\r\n }\r\n);\r\n\r\nexport default __flight_default_proxy;\r\n`;\r\n } else {\r\n transformed += `\r\nexport const ${exportName} = Object.assign(\r\n function() {\r\n throw new Error('Client Component cannot be called on the server. Module: ' + __flight_client_module_id);\r\n },\r\n {\r\n $$typeof: Symbol.for('flight.client.reference'),\r\n $$id: __flight_client_module_id + '#${exportName}',\r\n $$async: false,\r\n __flight_client: true,\r\n __flight_module: __flight_client_module_id,\r\n __flight_export: '${exportName}',\r\n }\r\n);\r\n`;\r\n }\r\n }\r\n\r\n return {\r\n code: transformed,\r\n map: null,\r\n };\r\n },\r\n },\r\n\r\n // ================================================================\r\n // 3. Transform server actions to RPC calls (client bundle)\r\n // ================================================================\r\n {\r\n name: 'flight-rsc:server-transform',\r\n\r\n transform(code, id, opts) {\r\n isSSR = opts?.ssr ?? false;\r\n\r\n if (isSSR) return null; // Only transform for client\r\n if (!shouldProcess(id, include, exclude)) return null;\r\n\r\n // Check for file-level 'use server'\r\n if (hasUseServerDirective(code)) {\r\n // Custom transform\r\n if (options.transforms?.server) {\r\n const result = options.transforms.server(code, id);\r\n if (result) return result;\r\n }\r\n\r\n // Replace all exports with RPC calls\r\n const moduleId = createModuleId(id, config);\r\n const exports = extractExportNames(code);\r\n\r\n let transformed = `\r\n// Flight RSC: Server Actions (RPC Proxies)\r\n// Original: ${id}\r\n\r\nconst __flight_actions_endpoint = ${JSON.stringify(actionsEndpoint)};\r\nconst __flight_module_id = ${JSON.stringify(moduleId)};\r\n\r\nasync function __flight_call_action(actionId, args) {\r\n const response = await fetch(__flight_actions_endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Flight-Action': actionId,\r\n },\r\n body: JSON.stringify({ actionId, args }),\r\n });\r\n \r\n if (!response.ok) {\r\n const error = await response.json().catch(() => ({ message: 'Server action failed' }));\r\n throw new Error(error.message || 'Server action failed');\r\n }\r\n \r\n return response.json();\r\n}\r\n\r\n`;\r\n\r\n for (const exportName of exports) {\r\n const actionId = `${moduleId}#${exportName}`;\r\n if (exportName === 'default') {\r\n transformed += `\r\nexport default async function(...args) {\r\n return __flight_call_action(${JSON.stringify(actionId)}, args);\r\n}\r\n`;\r\n } else {\r\n transformed += `\r\nexport async function ${exportName}(...args) {\r\n return __flight_call_action(${JSON.stringify(actionId)}, args);\r\n}\r\n`;\r\n }\r\n }\r\n\r\n return {\r\n code: transformed,\r\n map: null,\r\n };\r\n }\r\n\r\n // Check for inline 'use server' in functions\r\n const inlineActions = detectInlineServerActions(code);\r\n if (inlineActions.length > 0) {\r\n // Transform specific functions to RPC calls\r\n let transformed = code;\r\n const moduleId = createModuleId(id, config);\r\n\r\n for (const actionName of inlineActions) {\r\n const actionId = `${moduleId}#${actionName}`;\r\n\r\n // Replace function with RPC call\r\n // This is a simplified transform - a real implementation would use AST\r\n const asyncFnPattern = new RegExp(\r\n `(async\\\\s+function\\\\s+${actionName}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{[^}]*['\"]use server['\"][^}]*\\\\})`,\r\n 'g'\r\n );\r\n\r\n transformed = transformed.replace(asyncFnPattern, `\r\nasync function ${actionName}(...args) {\r\n const response = await fetch(${JSON.stringify(actionsEndpoint)}, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Flight-Action': ${JSON.stringify(actionId)},\r\n },\r\n body: JSON.stringify({ actionId: ${JSON.stringify(actionId)}, args }),\r\n });\r\n if (!response.ok) throw new Error('Server action failed');\r\n return response.json();\r\n}`\r\n );\r\n }\r\n\r\n if (transformed !== code) {\r\n return {\r\n code: transformed,\r\n map: null,\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n },\r\n\r\n // ================================================================\r\n // 4. Generate manifests\r\n // ================================================================\r\n {\r\n name: 'flight-rsc:manifest',\r\n\r\n generateBundle() {\r\n // Client manifest\r\n if (clientModules.size > 0) {\r\n const manifest = Object.fromEntries(clientModules);\r\n this.emitFile({\r\n type: 'asset',\r\n fileName: clientManifest,\r\n source: JSON.stringify(manifest, null, 2),\r\n });\r\n }\r\n\r\n // Server manifest\r\n if (serverActions.size > 0) {\r\n const manifest = Object.fromEntries(serverActions);\r\n this.emitFile({\r\n type: 'asset',\r\n fileName: serverManifest,\r\n source: JSON.stringify(manifest, null, 2),\r\n });\r\n }\r\n },\r\n },\r\n\r\n // ================================================================\r\n // 5. Dev server middleware for server actions\r\n // ================================================================\r\n {\r\n name: 'flight-rsc:dev-server',\r\n apply: 'serve',\r\n\r\n configureServer(server) {\r\n server.middlewares.use(async (req, res, next) => {\r\n if (req.url?.startsWith(actionsEndpoint) && req.method === 'POST') {\r\n try {\r\n // Parse request body\r\n const chunks: Buffer[] = [];\r\n for await (const chunk of req) {\r\n chunks.push(chunk as Buffer);\r\n }\r\n const body = JSON.parse(Buffer.concat(chunks).toString());\r\n\r\n const { actionId, args } = body;\r\n\r\n // Find and execute action\r\n const [moduleId, actionName] = actionId.split('#');\r\n const entry = [...serverActions.values()].find(e => e.id === moduleId);\r\n\r\n if (!entry) {\r\n res.statusCode = 404;\r\n res.end(JSON.stringify({ error: 'Action not found' }));\r\n return;\r\n }\r\n\r\n // Load module and execute action\r\n const mod = await server.ssrLoadModule(entry.file);\r\n const action = mod[actionName] || mod.default;\r\n\r\n if (typeof action !== 'function') {\r\n res.statusCode = 404;\r\n res.end(JSON.stringify({ error: 'Action not found' }));\r\n return;\r\n }\r\n\r\n const result = await action(...args);\r\n\r\n res.setHeader('Content-Type', 'application/json');\r\n res.end(JSON.stringify(result));\r\n\r\n } catch (error) {\r\n console.error('[Flight RSC] Action error:', error);\r\n res.statusCode = 500;\r\n res.end(JSON.stringify({\r\n error: (error as Error).message\r\n }));\r\n }\r\n return;\r\n }\r\n\r\n next();\r\n });\r\n },\r\n },\r\n ];\r\n}\r\n\r\n// ============================================================================\r\n// Helper Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Check if file should be processed\r\n */\r\nfunction shouldProcess(id: string, include: string[], exclude: string[]): boolean {\r\n // Simple glob matching (for production, use picomatch)\r\n const isIncluded = include.some(pattern => {\r\n const regex = globToRegex(pattern);\r\n return regex.test(id);\r\n });\r\n\r\n const isExcluded = exclude.some(pattern => {\r\n const regex = globToRegex(pattern);\r\n return regex.test(id);\r\n });\r\n\r\n return isIncluded && !isExcluded;\r\n}\r\n\r\n/**\r\n * Convert glob pattern to regex (simplified)\r\n */\r\nfunction globToRegex(pattern: string): RegExp {\r\n const escaped = pattern\r\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\r\n .replace(/\\*\\*/g, '{{GLOBSTAR}}')\r\n .replace(/\\*/g, '[^/]*')\r\n .replace(/{{GLOBSTAR}}/g, '.*');\r\n\r\n return new RegExp(escaped);\r\n}\r\n\r\n/**\r\n * Create a stable module ID from file path\r\n */\r\nfunction createModuleId(id: string, config: ResolvedConfig): string {\r\n // Remove root prefix\r\n let moduleId = id;\r\n if (config?.root && id.startsWith(config.root)) {\r\n moduleId = id.slice(config.root.length);\r\n }\r\n\r\n // Normalize path\r\n moduleId = moduleId.replace(/\\\\/g, '/');\r\n if (!moduleId.startsWith('/')) {\r\n moduleId = '/' + moduleId;\r\n }\r\n\r\n return moduleId;\r\n}\r\n\r\n/**\r\n * Extract export names from source code\r\n */\r\nfunction extractExportNames(code: string): string[] {\r\n const exports: string[] = [];\r\n\r\n // export default\r\n if (/export\\s+default\\s+/.test(code)) {\r\n exports.push('default');\r\n }\r\n\r\n // export function/const/let/class Name\r\n const namedPattern = /export\\s+(?:async\\s+)?(?:function|const|let|var|class)\\s+(\\w+)/g;\r\n let match;\r\n while ((match = namedPattern.exec(code)) !== null) {\r\n if (match[1] && match[1] !== 'default') {\r\n exports.push(match[1]);\r\n }\r\n }\r\n\r\n // export { a, b, c }\r\n const bracketPattern = /export\\s*\\{\\s*([^}]+)\\s*\\}/g;\r\n while ((match = bracketPattern.exec(code)) !== null) {\r\n if (match[1]) {\r\n const names = match[1].split(',').map(n => {\r\n const parts = n.trim().split(/\\s+as\\s+/);\r\n return parts[parts.length - 1]!.trim();\r\n });\r\n exports.push(...names.filter(n => n && n !== 'default'));\r\n }\r\n }\r\n\r\n return [...new Set(exports)];\r\n}\r\n\r\nexport default flightRSC;\r\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-63SCEXD7.js.map
3
+ //# sourceMappingURL=chunk-63SCEXD7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-63SCEXD7.js"}