@farm.js/plugin 0.1.0-beta.107 → 0.1.0-beta.109
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.
- package/README.md +2 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +9 -9
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +9 -0
- package/dist/middleware/matching.d.ts +2 -3
- package/dist/middleware/matching.d.ts.map +1 -1
- package/dist/middleware/matching.js +2 -3
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +7 -2
- package/dist/rsc/entries/rsc.d.ts.map +1 -1
- package/dist/rsc/entries/rsc.js +52 -17
- package/dist/rsc/index.d.ts +2 -0
- package/dist/rsc/index.d.ts.map +1 -1
- package/dist/rsc/index.js +100 -1
- package/dist/rsc/middleware-config-module.d.ts +19 -0
- package/dist/rsc/middleware-config-module.d.ts.map +1 -0
- package/dist/rsc/middleware-config-module.js +355 -0
- package/dist/rsc/nitro-build.d.ts.map +1 -1
- package/dist/rsc/nitro-build.js +13 -0
- package/dist/rsc/types.d.ts +20 -0
- package/dist/rsc/types.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Official plugins for Farm.js framework
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
See [Stability and Support](https://farmjs.dev/docs/stability) for what this package guarantees.
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install @farm.js/plugin
|
|
8
|
+
npm install @farm.js/plugin
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
See the [Farm.js repository](https://github.com/farming-labs/farm.js) for documentation, examples, and support.
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAiBlD,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,MAAM,CA6hBpE;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/api/index.js
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { _withAfterNodeMiddleware } from "@farm.js/core/after";
|
|
25
25
|
import { _runWithAPIRequestRuntime, createFarmRequestBodyErrorResponse, readNodeRequestBody, resolveFarmServerConfig, } from "@farm.js/core/internal/production-runtime";
|
|
26
|
-
import { getAllowedAPIRouteMethods, invokeAPIRouteEndpoint, matchAPIRouteAtBasePath, resolveAPIRouteEndpoint, } from "@farm.js/core/api/runtime";
|
|
26
|
+
import { API_ROUTE_METHODS, getAllowedAPIRouteMethods, invokeAPIRouteEndpoint, matchAPIRouteAtBasePath, resolveAPIRouteEndpoint, } from "@farm.js/core/api/runtime";
|
|
27
27
|
import { sendWebResponse } from "@farm.js/core/server";
|
|
28
28
|
/**
|
|
29
29
|
* Farm.js API Routes Plugin
|
|
@@ -204,10 +204,9 @@ export default function farmApi(options = {}) {
|
|
|
204
204
|
const relativePath = path.relative(apiDir, path.dirname(filePath));
|
|
205
205
|
const routePath = "/api/" + (relativePath === "." ? "" : relativePath.replace(/\\/g, "/"));
|
|
206
206
|
const routeModule = await server.ssrLoadModule(filePath);
|
|
207
|
-
const methods = ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"];
|
|
208
207
|
const endpoints = {};
|
|
209
208
|
const availableMethods = [];
|
|
210
|
-
for (const method of
|
|
209
|
+
for (const method of API_ROUTE_METHODS) {
|
|
211
210
|
if (routeModule[method]) {
|
|
212
211
|
availableMethods.push(method);
|
|
213
212
|
endpoints[method] = routeModule[method];
|
|
@@ -324,8 +323,11 @@ export default function farmApi(options = {}) {
|
|
|
324
323
|
return;
|
|
325
324
|
}
|
|
326
325
|
}
|
|
327
|
-
// Convert Node request to Web Request
|
|
328
|
-
|
|
326
|
+
// Convert Node request to Web Request. ctx.rewrite() updates
|
|
327
|
+
// req.url, so dispatch from the current value, not the one
|
|
328
|
+
// captured before middleware ran.
|
|
329
|
+
const currentUrl = req.url || url;
|
|
330
|
+
const fullUrl = `http://${req.headers.host || "localhost:3000"}${currentUrl}`;
|
|
329
331
|
const headers = new Headers();
|
|
330
332
|
for (const [key, value] of Object.entries(req.headers)) {
|
|
331
333
|
if (value) {
|
|
@@ -440,10 +442,9 @@ export default function farmApi(options = {}) {
|
|
|
440
442
|
try {
|
|
441
443
|
// Reload the module
|
|
442
444
|
const routeModule = await server.ssrLoadModule(file);
|
|
443
|
-
const methods = ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"];
|
|
444
445
|
const endpoints = {};
|
|
445
446
|
const availableMethods = [];
|
|
446
|
-
for (const method of
|
|
447
|
+
for (const method of API_ROUTE_METHODS) {
|
|
447
448
|
if (routeModule[method]) {
|
|
448
449
|
availableMethods.push(method);
|
|
449
450
|
endpoints[method] = routeModule[method];
|
|
@@ -474,10 +475,9 @@ export default function farmApi(options = {}) {
|
|
|
474
475
|
const relativePath = path.relative(apiDir, path.dirname(file));
|
|
475
476
|
const routePath = "/api/" + (relativePath === "." ? "" : relativePath.replace(/\\/g, "/"));
|
|
476
477
|
const routeModule = await server.ssrLoadModule(file);
|
|
477
|
-
const methods = ["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"];
|
|
478
478
|
const endpoints = {};
|
|
479
479
|
const availableMethods = [];
|
|
480
|
-
for (const method of
|
|
480
|
+
for (const method of API_ROUTE_METHODS) {
|
|
481
481
|
if (routeModule[method]) {
|
|
482
482
|
availableMethods.push(method);
|
|
483
483
|
endpoints[method] = routeModule[method];
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"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"}
|
package/dist/middleware/index.js
CHANGED
|
@@ -372,6 +372,12 @@ export default function farmMiddleware(options = {}) {
|
|
|
372
372
|
devServableFileExists(pathname, [server.config.publicDir, server.config.root]))) {
|
|
373
373
|
return next();
|
|
374
374
|
}
|
|
375
|
+
// @farm.js/plugin/api runs middleware itself for the requests it
|
|
376
|
+
// serves, because it may be registered ahead of this hook. Running
|
|
377
|
+
// it here as well executed every middleware twice per API request.
|
|
378
|
+
if (server.__farmApi__ && pathname.startsWith("/api/")) {
|
|
379
|
+
return next();
|
|
380
|
+
}
|
|
375
381
|
try {
|
|
376
382
|
// Execute middleware
|
|
377
383
|
const middlewareData = new Map();
|
|
@@ -381,7 +387,10 @@ export default function farmMiddleware(options = {}) {
|
|
|
381
387
|
}
|
|
382
388
|
}
|
|
383
389
|
catch (e) {
|
|
390
|
+
// Fail the request, as core's dev server does. Carrying on would
|
|
391
|
+
// render the page a throwing auth check was meant to protect.
|
|
384
392
|
console.error("[FARM] Middleware error:", e);
|
|
393
|
+
return next(e);
|
|
385
394
|
}
|
|
386
395
|
next();
|
|
387
396
|
}));
|
|
@@ -5,9 +5,8 @@ import type { CookieOptions } from "./index.js";
|
|
|
5
5
|
* A single request cookie whose value is not valid UTF-8 percent-encoding
|
|
6
6
|
* (a latin-1 value from an old link, a crawler, or a bare `%`) must not take
|
|
7
7
|
* the whole map down: an unguarded `decodeURIComponent` throws `URIError`,
|
|
8
|
-
* which
|
|
9
|
-
*
|
|
10
|
-
* bypass). Decoding falls back to the raw value per entry instead.
|
|
8
|
+
* which fails the request before any middleware runs. Decoding falls back to
|
|
9
|
+
* the raw value per entry instead.
|
|
11
10
|
*/
|
|
12
11
|
export declare function parseCookies(cookieHeader?: string): Record<string, string>;
|
|
13
12
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matching.d.ts","sourceRoot":"","sources":["../../src/middleware/matching.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD
|
|
1
|
+
{"version":3,"file":"matching.d.ts","sourceRoot":"","sources":["../../src/middleware/matching.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAc1E;AAUD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAMvF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAkChG"}
|
|
@@ -5,9 +5,8 @@ import { canonicalizeRequestPathSegments } from "@farm.js/core/middleware";
|
|
|
5
5
|
* A single request cookie whose value is not valid UTF-8 percent-encoding
|
|
6
6
|
* (a latin-1 value from an old link, a crawler, or a bare `%`) must not take
|
|
7
7
|
* the whole map down: an unguarded `decodeURIComponent` throws `URIError`,
|
|
8
|
-
* which
|
|
9
|
-
*
|
|
10
|
-
* bypass). Decoding falls back to the raw value per entry instead.
|
|
8
|
+
* which fails the request before any middleware runs. Decoding falls back to
|
|
9
|
+
* the raw value per entry instead.
|
|
11
10
|
*/
|
|
12
11
|
export function parseCookies(cookieHeader) {
|
|
13
12
|
if (!cookieHeader)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -301,7 +301,10 @@ export function observabilityPlugin(options = {}) {
|
|
|
301
301
|
console.log("[obs] ready");
|
|
302
302
|
},
|
|
303
303
|
beforeRequest(req) {
|
|
304
|
-
|
|
304
|
+
// `req.url` carries the query string, and a pathname feeds incident
|
|
305
|
+
// titles and dedupe fingerprints: a reset `?token=` would reach every
|
|
306
|
+
// pipeline action, and each distinct query would open a new incident.
|
|
307
|
+
const pathname = (req.url || "/").split("?", 1)[0] || "/";
|
|
305
308
|
const method = req.method || "GET";
|
|
306
309
|
const requestId = `req_${now()}_${(signalCounter++).toString(36)}`;
|
|
307
310
|
requestStarts.set(req, {
|
|
@@ -342,8 +345,10 @@ export function observabilityPlugin(options = {}) {
|
|
|
342
345
|
if (!annotateHtml)
|
|
343
346
|
return html;
|
|
344
347
|
const marker = `<!-- observability:path=${render.pathname} route=${render.routePattern ?? "unmatched"} -->`;
|
|
348
|
+
// A replacer function: as a replacement string, $` and $' in the request
|
|
349
|
+
// path would expand into copies of the page's own HTML.
|
|
345
350
|
return html.includes("</body>")
|
|
346
|
-
? html.replace("</body>", `${marker}\n</body>`)
|
|
351
|
+
? html.replace("</body>", () => `${marker}\n</body>`)
|
|
347
352
|
: `${html}\n${marker}`;
|
|
348
353
|
},
|
|
349
354
|
async onError(error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../../src/rsc/entries/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../../src/rsc/entries/rsc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CA6+B1D"}
|
package/dist/rsc/entries/rsc.js
CHANGED
|
@@ -23,9 +23,14 @@ export function generateRscEntry(ctx) {
|
|
|
23
23
|
return { ...root, sourceGlob };
|
|
24
24
|
});
|
|
25
25
|
const debugLog = `// Debug disabled`;
|
|
26
|
+
const middlewareConfigImports = (ctx.middlewareConfigPaths ?? [])
|
|
27
|
+
.map((configPath, index) => `import * as FarmMiddlewareConfigModule${index} from ${JSON.stringify(configPath.replace(/\\/g, "/"))};`)
|
|
28
|
+
.join("\n");
|
|
29
|
+
const middlewareConfigValues = (ctx.middlewareConfigPaths ?? []).map((_configPath, index) => `(FarmMiddlewareConfigModule${index}.default || FarmMiddlewareConfigModule${index})`);
|
|
26
30
|
let code = `
|
|
27
31
|
import React from 'react';
|
|
28
32
|
import ServerErrorFallback from '/.farm/rsc-entries/error-fallback.tsx';
|
|
33
|
+
${middlewareConfigImports}
|
|
29
34
|
import { registerAPIRouteShape } from '@farm.js/core/api/runtime';
|
|
30
35
|
import {
|
|
31
36
|
renderToReadableStream,
|
|
@@ -289,12 +294,26 @@ async function handleAPIRequest(request) {
|
|
|
289
294
|
});
|
|
290
295
|
}
|
|
291
296
|
}
|
|
297
|
+
const farmRuntimeConfigs = [${middlewareConfigValues.join(", ")}].filter(Boolean);
|
|
298
|
+
const farmConfigMiddleware = farmRuntimeConfigs.flatMap((config) => {
|
|
299
|
+
const middleware = config.middleware;
|
|
300
|
+
if (!middleware) return [];
|
|
301
|
+
return Array.isArray(middleware) ? middleware : [middleware];
|
|
302
|
+
});
|
|
292
303
|
const farmMiddlewareRunner = createProductionMiddlewareRunner({
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
filePath,
|
|
296
|
-
|
|
297
|
-
|
|
304
|
+
config: farmConfigMiddleware,
|
|
305
|
+
modules: Object.entries(middlewares)
|
|
306
|
+
.map(([filePath, module]) => ({
|
|
307
|
+
path: middlewarePathToRoute(filePath),
|
|
308
|
+
filePath,
|
|
309
|
+
module,
|
|
310
|
+
}))
|
|
311
|
+
.filter((entry) => entry.path !== null)
|
|
312
|
+
// Root first, as core runs them: a nested guard can rely on what its
|
|
313
|
+
// parent middleware set, and glob order is alphabetical, not by depth.
|
|
314
|
+
.sort((left, right) => middlewareRouteDepth(left.path) - middlewareRouteDepth(right.path)),
|
|
315
|
+
i18n: ${JSON.stringify(ctx.i18n) ?? "undefined"},
|
|
316
|
+
server: ${JSON.stringify(ctx.server) ?? "undefined"},
|
|
298
317
|
});
|
|
299
318
|
|
|
300
319
|
debug('Discovered pages:', Object.keys(pages));
|
|
@@ -305,22 +324,38 @@ debug('Discovered middlewares:', Object.keys(middlewares));
|
|
|
305
324
|
debug('Discovered API routes:', Array.from(apiRouteMap.keys()));
|
|
306
325
|
|
|
307
326
|
/**
|
|
308
|
-
* Convert middleware file path to route
|
|
309
|
-
*
|
|
310
|
-
*
|
|
327
|
+
* Convert an app-relative middleware file path to the route it guards, with the
|
|
328
|
+
* same rules as core's middleware discovery: a route group such as
|
|
329
|
+
* '(protected)' adds no URL segment, and a '_private' or dot-prefixed folder
|
|
330
|
+
* holds no routes, so its middleware never runs (null).
|
|
331
|
+
* e.g., '/middleware.ts' -> '/'
|
|
332
|
+
* e.g., '/(protected)/dashboard/middleware.ts' -> '/dashboard'
|
|
311
333
|
*/
|
|
312
334
|
function middlewarePathToRoute(filePath) {
|
|
313
|
-
|
|
314
|
-
.replace(
|
|
315
|
-
.
|
|
316
|
-
|
|
335
|
+
const segments = filePath
|
|
336
|
+
.replace(/\\/middleware\\.[tj]sx?$/, '')
|
|
337
|
+
.split('/')
|
|
338
|
+
.filter(Boolean);
|
|
339
|
+
if (segments.some((segment) => segment.startsWith('_') || segment.startsWith('.'))) {
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
const routeSegments = segments.filter(
|
|
343
|
+
(segment) => !(segment.startsWith('(') && segment.endsWith(')')),
|
|
344
|
+
);
|
|
345
|
+
return routeSegments.length === 0 ? '/' : '/' + routeSegments.join('/');
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
function middlewareRouteDepth(route) {
|
|
349
|
+
return route === '/' ? 0 : route.split('/').length - 1;
|
|
317
350
|
}
|
|
318
351
|
|
|
319
352
|
/**
|
|
320
353
|
* Execute middleware chain for a request
|
|
321
354
|
*/
|
|
322
|
-
async function executeMiddleware(request) {
|
|
323
|
-
|
|
355
|
+
async function executeMiddleware(request, context) {
|
|
356
|
+
// The Request was rebuilt by the Nitro handler and has no socket; the
|
|
357
|
+
// handler passes the connection's address alongside it.
|
|
358
|
+
return farmMiddlewareRunner(request, { clientAddress: context?.clientAddress });
|
|
324
359
|
}
|
|
325
360
|
|
|
326
361
|
/**
|
|
@@ -455,7 +490,7 @@ function getMatchingBoundary(pageFilePath, modules, kind) {
|
|
|
455
490
|
* Main request handler - entry point for both dev and production (Nitro).
|
|
456
491
|
* Exported as { fetch: handler } for the RSC/Nitro contract (see vite-plugin-rsc-deploy-example).
|
|
457
492
|
*/
|
|
458
|
-
async function handleFarmRequest(request) {
|
|
493
|
+
async function handleFarmRequest(request, context) {
|
|
459
494
|
let url = new URL(request.url);
|
|
460
495
|
let matchedPage = null;
|
|
461
496
|
let errorData = new Map();
|
|
@@ -493,7 +528,7 @@ async function handleFarmRequest(request) {
|
|
|
493
528
|
: ""}
|
|
494
529
|
|
|
495
530
|
// Execute middleware first
|
|
496
|
-
const middlewareResult = await executeMiddleware(request);
|
|
531
|
+
const middlewareResult = await executeMiddleware(request, context);
|
|
497
532
|
|
|
498
533
|
// If middleware handled the request (e.g., redirect, auth), return the response
|
|
499
534
|
if (middlewareResult.response) {
|
|
@@ -935,7 +970,7 @@ async function handler(request, context) {
|
|
|
935
970
|
dispatch: async (localRequest) =>
|
|
936
971
|
(await handleAPIRequest(localRequest)) ?? Response.json({ error: 'Not Found' }, { status: 404 }),
|
|
937
972
|
}, () => _runWithCurrentRequest(request, () =>
|
|
938
|
-
_runWithAfterRequest(request, () => handleFarmRequest(request), context)
|
|
973
|
+
_runWithAfterRequest(request, () => handleFarmRequest(request, context), context)
|
|
939
974
|
));
|
|
940
975
|
}
|
|
941
976
|
|
package/dist/rsc/index.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ import { type Plugin, type UserConfig } from "vite";
|
|
|
25
25
|
import type { FarmRscPluginOptions, EntryContext } from "./types.js";
|
|
26
26
|
import type { FarmServerActionsConfig } from "@farm.js/core/server-action-security";
|
|
27
27
|
import type { FarmAPIConfig } from "@farm.js/core/api";
|
|
28
|
+
import type { FarmMiddlewareConfig } from "@farm.js/core/middleware";
|
|
28
29
|
import type { FarmServerConfig } from "@farm.js/core/internal/production-runtime";
|
|
29
30
|
import type { FarmLayerEntry, ResolvedFarmLayer } from "@farm.js/core/server";
|
|
30
31
|
export type { FarmRscPluginOptions, EntryContext };
|
|
@@ -40,6 +41,7 @@ export interface FarmRscConfig {
|
|
|
40
41
|
basePath?: string;
|
|
41
42
|
api?: FarmAPIConfig;
|
|
42
43
|
server?: FarmServerConfig;
|
|
44
|
+
middleware?: FarmMiddlewareConfig;
|
|
43
45
|
port?: number;
|
|
44
46
|
experimental?: {
|
|
45
47
|
/**
|
package/dist/rsc/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rsc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,UAAU,EAChB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rsc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,UAAU,EAChB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA2D9E,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAExF,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,MAAM,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE;QACb;;;WAGG;QACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B;;;WAGG;QACH,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB;;;;;;;WAOG;QACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,uBAAuB,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,gHAAgH;IAChH,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAE,aAAkB,GAAG,UAAU,CAuDnE;AAuXD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,OAAO,GAAE,oBAAyB,GAAG,MAAM,EAAE,CA8yC5E"}
|
package/dist/rsc/index.js
CHANGED
|
@@ -35,6 +35,7 @@ import { transformAutomaticOptimizedBoundaries } from "./automatic-optimized-bou
|
|
|
35
35
|
import { resolveRscBuildOutputPath } from "./build-paths.js";
|
|
36
36
|
import { assertRscPackageCompatibility } from "./compatibility.js";
|
|
37
37
|
import { sendRscDevelopmentResponse } from "./dev-response.js";
|
|
38
|
+
import { loadRscMiddlewareConfigModule } from "./middleware-config-module.js";
|
|
38
39
|
import fs from "fs/promises";
|
|
39
40
|
import path from "path";
|
|
40
41
|
import { devServableFileExists } from "../dev-static.js";
|
|
@@ -46,7 +47,7 @@ const { farmApiPlugin, farmMiddlewarePlugin } = require_("@farm.js/core");
|
|
|
46
47
|
const { resolveServerActionsConfig, validateServerActionRequest, createServerActionRequestErrorResponse, } = require_("@farm.js/core/server-action-security");
|
|
47
48
|
const { normalizeFarmDeploymentId } = require_("@farm.js/core/deployment");
|
|
48
49
|
const { getFarmLayerAliases, getFarmSourceRoots, resolveFarmLayers } = require_("@farm.js/core/server");
|
|
49
|
-
const { searchParamsToObject, readNodeRequestBody, resolveFarmServerConfig, createFarmRequestBodyErrorResponse, } = require_("@farm.js/core/internal/production-runtime");
|
|
50
|
+
const { searchParamsToObject, readNodeRequestBody, resolveFarmServerConfig, resolveFarmI18nConfig, createFarmRequestBodyErrorResponse, } = require_("@farm.js/core/internal/production-runtime");
|
|
50
51
|
const { isFarmAPIPathname } = require_("@farm.js/core/api/runtime");
|
|
51
52
|
const { resolveFarmAPIConfig, resolveFarmAPIServerBasePath } = require_("@farm.js/core/api");
|
|
52
53
|
const { getResolvedEnv } = require_("@farm.js/core/env");
|
|
@@ -175,7 +176,58 @@ const VIRTUAL_CLIENT_ENTRY = "virtual:@farm.js/rsc/entry-client";
|
|
|
175
176
|
const VIRTUAL_HYDRATE_ENTRY = "virtual:@farm.js/rsc/hydrate";
|
|
176
177
|
const OPTIMIZED_BOUNDARY_ADAPTER = "@farm.js/plugin/rsc/optimized-boundary";
|
|
177
178
|
const STRATA_PACKAGE = "@farming-labs/strata";
|
|
179
|
+
const RSC_MIDDLEWARE_CONFIG_QUERY = "?farm-rsc-middleware";
|
|
178
180
|
const FARM_CORE_PACKAGE_ROOT = path.resolve(path.dirname(require_.resolve("@farm.js/core")), "..");
|
|
181
|
+
const FARM_CONFIG_FILENAMES = [
|
|
182
|
+
"farm.config.ts",
|
|
183
|
+
"farm.config.tsx",
|
|
184
|
+
"farm.config.mts",
|
|
185
|
+
"farm.config.cts",
|
|
186
|
+
"farm.config.js",
|
|
187
|
+
"farm.config.jsx",
|
|
188
|
+
"farm.config.mjs",
|
|
189
|
+
"farm.config.cjs",
|
|
190
|
+
"config.ts",
|
|
191
|
+
"config.tsx",
|
|
192
|
+
"config.mts",
|
|
193
|
+
"config.cts",
|
|
194
|
+
"config.js",
|
|
195
|
+
"config.jsx",
|
|
196
|
+
"config.mjs",
|
|
197
|
+
"config.cjs",
|
|
198
|
+
];
|
|
199
|
+
function hasFarmMiddlewareConfig(config) {
|
|
200
|
+
if (!config)
|
|
201
|
+
return false;
|
|
202
|
+
if (Array.isArray(config))
|
|
203
|
+
return config.length > 0;
|
|
204
|
+
const entry = config;
|
|
205
|
+
return Boolean(entry.matcher ||
|
|
206
|
+
entry.exclude ||
|
|
207
|
+
entry.runtime ||
|
|
208
|
+
entry.handler ||
|
|
209
|
+
(Array.isArray(entry.handlers) && entry.handlers.length > 0));
|
|
210
|
+
}
|
|
211
|
+
async function findFarmConfigPath(root) {
|
|
212
|
+
for (const fileName of FARM_CONFIG_FILENAMES) {
|
|
213
|
+
const candidate = path.join(root, fileName);
|
|
214
|
+
try {
|
|
215
|
+
if ((await fs.stat(candidate)).isFile())
|
|
216
|
+
return candidate;
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// Continue checking supported config names.
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
async function resolveMiddlewareConfigPaths(root, layers) {
|
|
225
|
+
const paths = (layers ?? []).flatMap((layer) => layer.configFile ? [path.resolve(layer.configFile)] : []);
|
|
226
|
+
const projectConfigPath = await findFarmConfigPath(root);
|
|
227
|
+
if (projectConfigPath)
|
|
228
|
+
paths.push(projectConfigPath);
|
|
229
|
+
return [...new Set(paths)];
|
|
230
|
+
}
|
|
179
231
|
function isOptimizedBoundaryModule(id) {
|
|
180
232
|
return (id === OPTIMIZED_BOUNDARY_ADAPTER ||
|
|
181
233
|
id === STRATA_PACKAGE ||
|
|
@@ -391,6 +443,7 @@ export default function farmRsc(options = {}) {
|
|
|
391
443
|
// Context passed to entry generators
|
|
392
444
|
let entryContext;
|
|
393
445
|
let rscBuildRoot;
|
|
446
|
+
const middlewareConfigModules = new Map();
|
|
394
447
|
// Store for debugging
|
|
395
448
|
const debug = options.debug ?? false;
|
|
396
449
|
const automaticDeploymentId = `build-${Date.now()}`;
|
|
@@ -480,6 +533,18 @@ export default function farmRsc(options = {}) {
|
|
|
480
533
|
};
|
|
481
534
|
return [
|
|
482
535
|
farmEnvironmentFunctionsPlugin(),
|
|
536
|
+
{
|
|
537
|
+
name: "@farm.js/plugin/rsc:middleware-config",
|
|
538
|
+
enforce: "pre",
|
|
539
|
+
resolveId(id) {
|
|
540
|
+
if (!id.endsWith(RSC_MIDDLEWARE_CONFIG_QUERY))
|
|
541
|
+
return null;
|
|
542
|
+
return id.replace(/\\/g, "/");
|
|
543
|
+
},
|
|
544
|
+
load(id) {
|
|
545
|
+
return middlewareConfigModules.get(id.replace(/\\/g, "/")) ?? null;
|
|
546
|
+
},
|
|
547
|
+
},
|
|
483
548
|
{
|
|
484
549
|
name: "@farm.js/plugin/rsc:core-runtime",
|
|
485
550
|
// Run after Vite/esbuild has lowered TS/JSX. es-module-lexer deliberately
|
|
@@ -539,6 +604,31 @@ export default function farmRsc(options = {}) {
|
|
|
539
604
|
});
|
|
540
605
|
Object.assign(c, layerResolution.config);
|
|
541
606
|
}
|
|
607
|
+
middlewareConfigModules.clear();
|
|
608
|
+
const middlewareConfigPaths = [];
|
|
609
|
+
if (hasFarmMiddlewareConfig(c.middleware)) {
|
|
610
|
+
const configPaths = await resolveMiddlewareConfigPaths(root, c.layers);
|
|
611
|
+
if (configPaths.length === 0) {
|
|
612
|
+
throw new Error("[Farm.js] RSC config middleware requires an importable farm.config file. " +
|
|
613
|
+
"Move the middleware to farm.config.ts or src/app/middleware.ts.");
|
|
614
|
+
}
|
|
615
|
+
for (const configPath of configPaths) {
|
|
616
|
+
const extracted = await loadRscMiddlewareConfigModule(configPath);
|
|
617
|
+
if (extracted.kind === "unsupported") {
|
|
618
|
+
throw new Error(`[Farm.js] Cannot extract RSC config middleware from ${configPath}: ${extracted.reason}. ` +
|
|
619
|
+
"Declare middleware directly in defineConfig({ middleware: ... }) or move it to src/app/middleware.ts.");
|
|
620
|
+
}
|
|
621
|
+
if (extracted.kind === "absent")
|
|
622
|
+
continue;
|
|
623
|
+
const moduleId = `${configPath.replace(/\\/g, "/")}${RSC_MIDDLEWARE_CONFIG_QUERY}`;
|
|
624
|
+
middlewareConfigModules.set(moduleId, extracted.code);
|
|
625
|
+
middlewareConfigPaths.push(moduleId);
|
|
626
|
+
}
|
|
627
|
+
if (middlewareConfigPaths.length === 0) {
|
|
628
|
+
throw new Error("[Farm.js] RSC config middleware could not be traced to an explicit middleware property. " +
|
|
629
|
+
"Declare middleware directly in defineConfig({ middleware: ... }) or move it to src/app/middleware.ts.");
|
|
630
|
+
}
|
|
631
|
+
}
|
|
542
632
|
// Read user's directory configuration
|
|
543
633
|
const api = await resolveFarmAPIConfig(c.api, {
|
|
544
634
|
root,
|
|
@@ -596,6 +686,15 @@ export default function farmRsc(options = {}) {
|
|
|
596
686
|
allowedOrigins: options.serverActions?.allowedOrigins ?? c.serverActions?.allowedOrigins,
|
|
597
687
|
}),
|
|
598
688
|
deploymentId,
|
|
689
|
+
// Resolved the same way core resolves it for the config, so RSC and
|
|
690
|
+
// non-RSC apps match middleware against the same pathname.
|
|
691
|
+
i18n: resolveFarmI18nConfig(c.i18n, {
|
|
692
|
+
root,
|
|
693
|
+
mode: env.command === "serve" ? "development" : "production",
|
|
694
|
+
basePath: c.basePath ?? "/",
|
|
695
|
+
}),
|
|
696
|
+
server: { trustProxy: resolveFarmServerConfig(c.server).trustProxy },
|
|
697
|
+
middlewareConfigPaths,
|
|
599
698
|
debug,
|
|
600
699
|
development: env.command === "serve",
|
|
601
700
|
clientCachePersistence: generateClientCachePersistenceCode(resolveFarmClientCacheAdapterEntry(root, c.cache)),
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type AstNode = {
|
|
2
|
+
type: string;
|
|
3
|
+
start: number;
|
|
4
|
+
end: number;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
};
|
|
7
|
+
type ExtractionResult = {
|
|
8
|
+
kind: "module";
|
|
9
|
+
code: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "absent";
|
|
12
|
+
} | {
|
|
13
|
+
kind: "unsupported";
|
|
14
|
+
reason: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function extractRscMiddlewareConfigModule(source: string, program: AstNode): ExtractionResult;
|
|
17
|
+
export declare function loadRscMiddlewareConfigModule(configPath: string): Promise<ExtractionResult>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=middleware-config-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware-config-module.d.ts","sourceRoot":"","sources":["../../src/rsc/middleware-config-module.ts"],"names":[],"mappings":"AAQA,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AASF,KAAK,gBAAgB,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA6N5C,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,gBAAgB,CA4IlB;AAiBD,wBAAsB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAejG"}
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
function isNode(value) {
|
|
3
|
+
return Boolean(value &&
|
|
4
|
+
typeof value === "object" &&
|
|
5
|
+
typeof value.type === "string" &&
|
|
6
|
+
typeof value.start === "number" &&
|
|
7
|
+
typeof value.end === "number");
|
|
8
|
+
}
|
|
9
|
+
function bindingNames(pattern, names = []) {
|
|
10
|
+
if (!pattern)
|
|
11
|
+
return names;
|
|
12
|
+
if (pattern.type === "Identifier") {
|
|
13
|
+
names.push(pattern.name);
|
|
14
|
+
return names;
|
|
15
|
+
}
|
|
16
|
+
if (pattern.type === "RestElement") {
|
|
17
|
+
return bindingNames(pattern.argument, names);
|
|
18
|
+
}
|
|
19
|
+
if (pattern.type === "AssignmentPattern") {
|
|
20
|
+
return bindingNames(pattern.left, names);
|
|
21
|
+
}
|
|
22
|
+
if (pattern.type === "ArrayPattern") {
|
|
23
|
+
for (const element of pattern.elements ?? []) {
|
|
24
|
+
bindingNames(element, names);
|
|
25
|
+
}
|
|
26
|
+
return names;
|
|
27
|
+
}
|
|
28
|
+
if (pattern.type === "ObjectPattern") {
|
|
29
|
+
for (const property of pattern.properties ?? []) {
|
|
30
|
+
bindingNames(property.type === "RestElement"
|
|
31
|
+
? property.argument
|
|
32
|
+
: property.value, names);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return names;
|
|
36
|
+
}
|
|
37
|
+
function isReferenceIdentifier(node, parent, key) {
|
|
38
|
+
if (!parent)
|
|
39
|
+
return true;
|
|
40
|
+
if ((parent.type === "MemberExpression" || parent.type === "OptionalMemberExpression") &&
|
|
41
|
+
key === "property" &&
|
|
42
|
+
parent.computed !== true) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
if ((parent.type === "Property" ||
|
|
46
|
+
parent.type === "PropertyDefinition" ||
|
|
47
|
+
parent.type === "MethodDefinition") &&
|
|
48
|
+
key === "key" &&
|
|
49
|
+
parent.computed !== true) {
|
|
50
|
+
return parent.shorthand === true;
|
|
51
|
+
}
|
|
52
|
+
if (parent.type === "VariableDeclarator")
|
|
53
|
+
return key !== "id";
|
|
54
|
+
if (parent.type === "FunctionDeclaration" ||
|
|
55
|
+
parent.type === "FunctionExpression" ||
|
|
56
|
+
parent.type === "ArrowFunctionExpression") {
|
|
57
|
+
return key !== "id" && key !== "params";
|
|
58
|
+
}
|
|
59
|
+
if (parent.type === "ClassDeclaration" || parent.type === "ClassExpression") {
|
|
60
|
+
return key !== "id";
|
|
61
|
+
}
|
|
62
|
+
if (parent.type === "CatchClause")
|
|
63
|
+
return key !== "param";
|
|
64
|
+
if (parent.type === "RestElement")
|
|
65
|
+
return false;
|
|
66
|
+
if (parent.type === "AssignmentPattern")
|
|
67
|
+
return key !== "left";
|
|
68
|
+
return ![
|
|
69
|
+
"ArrayPattern",
|
|
70
|
+
"BreakStatement",
|
|
71
|
+
"ContinueStatement",
|
|
72
|
+
"ExportSpecifier",
|
|
73
|
+
"ImportDefaultSpecifier",
|
|
74
|
+
"ImportNamespaceSpecifier",
|
|
75
|
+
"ImportSpecifier",
|
|
76
|
+
"LabeledStatement",
|
|
77
|
+
].includes(parent.type);
|
|
78
|
+
}
|
|
79
|
+
function scopeBindings(node) {
|
|
80
|
+
const names = new Set();
|
|
81
|
+
if (node.type === "FunctionDeclaration" ||
|
|
82
|
+
node.type === "FunctionExpression" ||
|
|
83
|
+
node.type === "ArrowFunctionExpression") {
|
|
84
|
+
if (isNode(node.id))
|
|
85
|
+
bindingNames(node.id).forEach((name) => names.add(name));
|
|
86
|
+
for (const parameter of node.params ?? []) {
|
|
87
|
+
bindingNames(parameter).forEach((name) => names.add(name));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else if (node.type === "CatchClause" && isNode(node.param)) {
|
|
91
|
+
bindingNames(node.param).forEach((name) => names.add(name));
|
|
92
|
+
}
|
|
93
|
+
else if (node.type === "BlockStatement") {
|
|
94
|
+
for (const statement of node.body ?? []) {
|
|
95
|
+
const declaration = statement.type === "ExportNamedDeclaration" && isNode(statement.declaration)
|
|
96
|
+
? statement.declaration
|
|
97
|
+
: statement;
|
|
98
|
+
if (declaration.type === "VariableDeclaration" && declaration.kind !== "var") {
|
|
99
|
+
for (const declarator of declaration.declarations ?? []) {
|
|
100
|
+
bindingNames(declarator.id).forEach((name) => names.add(name));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if ((declaration.type === "FunctionDeclaration" || declaration.type === "ClassDeclaration") &&
|
|
104
|
+
isNode(declaration.id)) {
|
|
105
|
+
names.add(declaration.id.name);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return names;
|
|
110
|
+
}
|
|
111
|
+
function referencedTopLevelNames(node, candidates) {
|
|
112
|
+
const references = new Set();
|
|
113
|
+
const visit = (value, parent, key, scopes) => {
|
|
114
|
+
if (Array.isArray(value)) {
|
|
115
|
+
for (const child of value)
|
|
116
|
+
visit(child, parent, key, scopes);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (!isNode(value))
|
|
120
|
+
return;
|
|
121
|
+
const nodeScopes = [
|
|
122
|
+
...scopes,
|
|
123
|
+
...([
|
|
124
|
+
"ArrowFunctionExpression",
|
|
125
|
+
"BlockStatement",
|
|
126
|
+
"CatchClause",
|
|
127
|
+
"FunctionDeclaration",
|
|
128
|
+
"FunctionExpression",
|
|
129
|
+
].includes(value.type)
|
|
130
|
+
? [scopeBindings(value)]
|
|
131
|
+
: []),
|
|
132
|
+
];
|
|
133
|
+
if (value.type === "Identifier") {
|
|
134
|
+
const name = value.name;
|
|
135
|
+
const shadowed = nodeScopes.some((scope) => scope.has(name));
|
|
136
|
+
if (candidates.has(name) && !shadowed && isReferenceIdentifier(value, parent, key)) {
|
|
137
|
+
references.add(name);
|
|
138
|
+
}
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
for (const [childKey, child] of Object.entries(value)) {
|
|
142
|
+
if (childKey === "start" || childKey === "end" || childKey === "loc")
|
|
143
|
+
continue;
|
|
144
|
+
visit(child, value, childKey, nodeScopes);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
visit(node, null, "", []);
|
|
148
|
+
return references;
|
|
149
|
+
}
|
|
150
|
+
function importBindingCode(statement, specifier, _source) {
|
|
151
|
+
const moduleSource = JSON.stringify(statement.source.value);
|
|
152
|
+
const local = specifier.local.name;
|
|
153
|
+
if (specifier.type === "ImportDefaultSpecifier") {
|
|
154
|
+
return `import ${local} from ${moduleSource};`;
|
|
155
|
+
}
|
|
156
|
+
if (specifier.type === "ImportNamespaceSpecifier") {
|
|
157
|
+
return `import * as ${local} from ${moduleSource};`;
|
|
158
|
+
}
|
|
159
|
+
const imported = specifier.imported;
|
|
160
|
+
const importedName = imported.type === "Identifier" ? imported.name : JSON.stringify(imported.value);
|
|
161
|
+
return `import { ${importedName}${importedName === local ? "" : ` as ${local}`} } from ${moduleSource};`;
|
|
162
|
+
}
|
|
163
|
+
function propertyName(property) {
|
|
164
|
+
if (property.computed === true)
|
|
165
|
+
return null;
|
|
166
|
+
const key = property.key;
|
|
167
|
+
if (key.type === "Identifier")
|
|
168
|
+
return key.name;
|
|
169
|
+
if (key.type === "Literal" && typeof key.value === "string")
|
|
170
|
+
return key.value;
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
function resolveConfigObject(node, variableInitializers, configHelpers, seen = new Set()) {
|
|
174
|
+
if (node.type === "ObjectExpression")
|
|
175
|
+
return node;
|
|
176
|
+
if (node.type === "CallExpression") {
|
|
177
|
+
const callee = node.callee;
|
|
178
|
+
const args = node.arguments ?? [];
|
|
179
|
+
if (callee.type === "Identifier" &&
|
|
180
|
+
configHelpers.has(callee.name) &&
|
|
181
|
+
args.length === 1) {
|
|
182
|
+
return resolveConfigObject(args[0], variableInitializers, configHelpers, seen);
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
if (node.type === "Identifier") {
|
|
187
|
+
const name = node.name;
|
|
188
|
+
if (seen.has(name))
|
|
189
|
+
return null;
|
|
190
|
+
const initializer = variableInitializers.get(name);
|
|
191
|
+
if (!initializer)
|
|
192
|
+
return null;
|
|
193
|
+
seen.add(name);
|
|
194
|
+
return resolveConfigObject(initializer, variableInitializers, configHelpers, seen);
|
|
195
|
+
}
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
export function extractRscMiddlewareConfigModule(source, program) {
|
|
199
|
+
const body = program.body ?? [];
|
|
200
|
+
const bindings = new Map();
|
|
201
|
+
const variableInitializers = new Map();
|
|
202
|
+
const configHelpers = new Set(["defineConfig", "defineFarmConfig"]);
|
|
203
|
+
let defaultExport = null;
|
|
204
|
+
let order = 0;
|
|
205
|
+
for (const statement of body) {
|
|
206
|
+
if (statement.type === "ImportDeclaration") {
|
|
207
|
+
const moduleName = statement.source.value;
|
|
208
|
+
for (const specifier of statement.specifiers ?? []) {
|
|
209
|
+
const local = specifier.local.name;
|
|
210
|
+
if (moduleName === "@farm.js/core" || moduleName === "@farm.js/core/config") {
|
|
211
|
+
const imported = specifier.imported;
|
|
212
|
+
const importedName = imported?.type === "Identifier" ? imported.name : undefined;
|
|
213
|
+
if (importedName === "defineConfig" || importedName === "defineFarmConfig") {
|
|
214
|
+
configHelpers.add(local);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
bindings.set(local, {
|
|
218
|
+
names: [local],
|
|
219
|
+
order: order++,
|
|
220
|
+
render: () => importBindingCode(statement, specifier, source),
|
|
221
|
+
references: null,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
if (statement.type === "ExportDefaultDeclaration") {
|
|
227
|
+
defaultExport = statement.declaration;
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
if (statement.type === "ExportNamedDeclaration") {
|
|
231
|
+
for (const specifier of statement.specifiers ?? []) {
|
|
232
|
+
const exported = specifier.exported;
|
|
233
|
+
if ((exported.type === "Identifier" && exported.name === "default") ||
|
|
234
|
+
(exported.type === "Literal" && exported.value === "default")) {
|
|
235
|
+
defaultExport = specifier.local;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
const declaration = statement.type === "ExportNamedDeclaration" && isNode(statement.declaration)
|
|
240
|
+
? statement.declaration
|
|
241
|
+
: statement;
|
|
242
|
+
if (declaration.type === "VariableDeclaration") {
|
|
243
|
+
for (const declarator of declaration.declarations ?? []) {
|
|
244
|
+
const names = bindingNames(declarator.id);
|
|
245
|
+
const initializer = isNode(declarator.init) ? declarator.init : null;
|
|
246
|
+
if (names.length === 1 && initializer)
|
|
247
|
+
variableInitializers.set(names[0], initializer);
|
|
248
|
+
const binding = {
|
|
249
|
+
names,
|
|
250
|
+
order: order++,
|
|
251
|
+
render: () => `${declaration.kind} ${source.slice(declarator.start, declarator.end)};`,
|
|
252
|
+
references: declarator,
|
|
253
|
+
};
|
|
254
|
+
for (const name of names)
|
|
255
|
+
bindings.set(name, binding);
|
|
256
|
+
}
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
if ((declaration.type === "FunctionDeclaration" || declaration.type === "ClassDeclaration") &&
|
|
260
|
+
isNode(declaration.id)) {
|
|
261
|
+
const name = declaration.id.name;
|
|
262
|
+
bindings.set(name, {
|
|
263
|
+
names: [name],
|
|
264
|
+
order: order++,
|
|
265
|
+
render: () => source.slice(declaration.start, declaration.end),
|
|
266
|
+
references: declaration,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if (!defaultExport) {
|
|
271
|
+
return { kind: "unsupported", reason: "the config has no default export" };
|
|
272
|
+
}
|
|
273
|
+
const configObject = resolveConfigObject(defaultExport, variableInitializers, configHelpers);
|
|
274
|
+
if (!configObject) {
|
|
275
|
+
return {
|
|
276
|
+
kind: "unsupported",
|
|
277
|
+
reason: "the default export is not a statically traceable defineConfig object",
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
const properties = configObject.properties ?? [];
|
|
281
|
+
let middlewareProperty = null;
|
|
282
|
+
let middlewareIndex = -1;
|
|
283
|
+
for (const [index, property] of properties.entries()) {
|
|
284
|
+
if (property.type === "Property" && propertyName(property) === "middleware") {
|
|
285
|
+
middlewareProperty = property;
|
|
286
|
+
middlewareIndex = index;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (!middlewareProperty) {
|
|
290
|
+
if (properties.some((property) => property.type === "SpreadElement")) {
|
|
291
|
+
return {
|
|
292
|
+
kind: "unsupported",
|
|
293
|
+
reason: "middleware may be supplied through a config spread",
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
return { kind: "absent" };
|
|
297
|
+
}
|
|
298
|
+
if (properties.slice(middlewareIndex + 1).some((property) => property.type === "SpreadElement")) {
|
|
299
|
+
return {
|
|
300
|
+
kind: "unsupported",
|
|
301
|
+
reason: "a config spread after middleware may override it",
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
const middlewareValue = middlewareProperty.value;
|
|
305
|
+
const candidateNames = new Set(bindings.keys());
|
|
306
|
+
const selectedBindings = new Set();
|
|
307
|
+
const pending = [...referencedTopLevelNames(middlewareValue, candidateNames)];
|
|
308
|
+
while (pending.length > 0) {
|
|
309
|
+
const name = pending.pop();
|
|
310
|
+
const binding = bindings.get(name);
|
|
311
|
+
if (!binding || selectedBindings.has(binding))
|
|
312
|
+
continue;
|
|
313
|
+
selectedBindings.add(binding);
|
|
314
|
+
if (binding.references) {
|
|
315
|
+
for (const reference of referencedTopLevelNames(binding.references, candidateNames)) {
|
|
316
|
+
pending.push(reference);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
const declarations = [...selectedBindings]
|
|
321
|
+
.sort((a, b) => a.order - b.order)
|
|
322
|
+
.map((binding) => binding.render());
|
|
323
|
+
const middlewareSource = source.slice(middlewareValue.start, middlewareValue.end);
|
|
324
|
+
return {
|
|
325
|
+
kind: "module",
|
|
326
|
+
code: `${declarations.join("\n")}${declarations.length ? "\n" : ""}export default { middleware: ${middlewareSource} };\n`,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
function esbuildLoader(file) {
|
|
330
|
+
switch (path.extname(file)) {
|
|
331
|
+
case ".ts":
|
|
332
|
+
case ".mts":
|
|
333
|
+
case ".cts":
|
|
334
|
+
return "ts";
|
|
335
|
+
case ".tsx":
|
|
336
|
+
return "tsx";
|
|
337
|
+
case ".jsx":
|
|
338
|
+
return "jsx";
|
|
339
|
+
default:
|
|
340
|
+
return "js";
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
export async function loadRscMiddlewareConfigModule(configPath) {
|
|
344
|
+
const [{ readFile }, { parseAst, transformWithEsbuild }] = await Promise.all([
|
|
345
|
+
import("node:fs/promises"),
|
|
346
|
+
import("vite"),
|
|
347
|
+
]);
|
|
348
|
+
const source = await readFile(configPath, "utf8");
|
|
349
|
+
const transformed = await transformWithEsbuild(source, configPath, {
|
|
350
|
+
format: "esm",
|
|
351
|
+
jsx: "automatic",
|
|
352
|
+
loader: esbuildLoader(configPath),
|
|
353
|
+
});
|
|
354
|
+
return extractRscMiddlewareConfigModule(transformed.code, parseAst(transformed.code));
|
|
355
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nitro-build.d.ts","sourceRoot":"","sources":["../../src/rsc/nitro-build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,IAAI,CAKN;AAcD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CA8BrF;AA4ED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC,IAAI,CAAC,CAgCf;
|
|
1
|
+
{"version":3,"file":"nitro-build.d.ts","sourceRoot":"","sources":["../../src/rsc/nitro-build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,IAAI,CAKN;AAcD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CA8BrF;AA4ED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACxD,OAAO,CAAC,IAAI,CAAC,CAgCf;AAwFD,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyLhF"}
|
package/dist/rsc/nitro-build.js
CHANGED
|
@@ -249,9 +249,22 @@ function createRscRequest(event) {
|
|
|
249
249
|
return new Request(request, { signal: controller.signal });
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
+
// The peer address the server adapter already knows; the rebuilt Request has
|
|
253
|
+
// no socket. Mirrors h3's getRequestIP without the forwarded header, which only
|
|
254
|
+
// trustProxy may honor.
|
|
255
|
+
function resolveClientAddress(event) {
|
|
256
|
+
try {
|
|
257
|
+
return event.req?.context?.clientAddress || event.req?.ip ||
|
|
258
|
+
event.node?.req?.socket?.remoteAddress || undefined;
|
|
259
|
+
} catch {
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
252
264
|
export default defineEventHandler(async (event) => {
|
|
253
265
|
const response = await handler(createRscRequest(event), {
|
|
254
266
|
waitUntil: (promise) => event.waitUntil(promise),
|
|
267
|
+
clientAddress: resolveClientAddress(event),
|
|
255
268
|
});
|
|
256
269
|
// H3's prepared headers override Response headers. Keep both the runtime's
|
|
257
270
|
// fields (e.g. Accept-Encoding from static middleware) and the app's fields.
|
package/dist/rsc/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ResolvedFarmI18nConfig } from "@farm.js/core/i18n";
|
|
1
2
|
import type { FarmServerActionsConfig, ResolvedFarmServerActionsConfig } from "@farm.js/core/server-action-security";
|
|
2
3
|
/**
|
|
3
4
|
* Configuration options for the Farm.js RSC plugin.
|
|
@@ -72,6 +73,25 @@ export interface EntryContext {
|
|
|
72
73
|
serverActions: ResolvedFarmServerActionsConfig;
|
|
73
74
|
/** Resolved build identifier embedded into the server and browser entries. */
|
|
74
75
|
deploymentId: string;
|
|
76
|
+
/**
|
|
77
|
+
* Resolved i18n configuration. Middleware path matching runs against the
|
|
78
|
+
* locale-stripped pathname, so without this a `/de/dashboard` request never
|
|
79
|
+
* matches a `/dashboard` middleware.
|
|
80
|
+
*/
|
|
81
|
+
i18n?: ResolvedFarmI18nConfig;
|
|
82
|
+
/**
|
|
83
|
+
* Server settings the request path needs. `trustProxy` decides whether
|
|
84
|
+
* forwarded headers are believed when middleware reads the client address.
|
|
85
|
+
*/
|
|
86
|
+
server?: {
|
|
87
|
+
trustProxy: boolean;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Ordered config modules that can contribute live middleware handlers.
|
|
91
|
+
* Layer configs come first and the application config comes last, matching
|
|
92
|
+
* Farm's normal config merge order.
|
|
93
|
+
*/
|
|
94
|
+
middlewareConfigPaths?: string[];
|
|
75
95
|
/** Whether debug mode is enabled */
|
|
76
96
|
debug: boolean;
|
|
77
97
|
/** True only for the Vite serve command, never for a production build. */
|
package/dist/rsc/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rsc/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,+BAA+B,EAChC,MAAM,sCAAsC,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,aAAa,CAAC,EAAE,uBAAuB,CAAC;IAExC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,OAAO,CAAC,EAAE;QACR,wCAAwC;QACxC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,wCAAwC;QACxC,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,2CAA2C;QAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IAEf,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IAEf,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;IAEjB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,uFAAuF;IACvF,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IAEH,yCAAyC;IACzC,cAAc,EAAE,OAAO,CAAC;IAExB,wDAAwD;IACxD,aAAa,EAAE,+BAA+B,CAAC;IAE/C,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAC;IAErB,oCAAoC;IACpC,KAAK,EAAE,OAAO,CAAC;IAEf,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,8EAA8E;IAC9E,sBAAsB,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAE/B,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAEhB,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;IAEzB,wFAAwF;IACxF,WAAW,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAEjC,yEAAyE;IACzE,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF,0DAA0D;IAC1D,WAAW,CAAC,EAAE;QACZ,EAAE,EAAE,OAAO,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IAEF,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,UAAU;QAClB,QAAQ,CAAC,OAAO,EAAE;YAChB,qCAAqC;YACrC,OAAO,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAEhC,6CAA6C;YAC7C,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAEhE,kDAAkD;YAClD,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;SAC5D,CAAC;KACH;CACF"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rsc/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@farm.js/plugin",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.109",
|
|
4
4
|
"description": "Official plugins for Farm.js framework",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Farm.js Team",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"nitro": "3.0.260903-beta",
|
|
63
63
|
"picocolors": "^1.0.0",
|
|
64
64
|
"rsc-html-stream": "^0.0.4",
|
|
65
|
-
"@farm.js/core": "0.1.0-beta.
|
|
65
|
+
"@farm.js/core": "0.1.0-beta.109"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@types/node": "^20.19.21",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"react-dom": "19.2.8",
|
|
84
84
|
"react-server-dom-webpack": "19.2.8",
|
|
85
85
|
"vite": ">=6.0.0",
|
|
86
|
-
"@farm.js/core": "0.1.0-beta.
|
|
86
|
+
"@farm.js/core": "0.1.0-beta.109"
|
|
87
87
|
},
|
|
88
88
|
"peerDependenciesMeta": {
|
|
89
89
|
"@vitejs/plugin-rsc": {
|