@farm.js/core 0.1.0-beta.51 → 0.1.0-beta.53
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/dist/{chunk-HSHA3H3U.mjs → chunk-3E2WRUR2.mjs} +15 -1
- package/dist/chunk-3E2WRUR2.mjs.map +1 -0
- package/dist/{chunk-QCSOE6HT.mjs → chunk-FCY7TXMA.mjs} +52 -9
- package/dist/chunk-FCY7TXMA.mjs.map +1 -0
- package/dist/{chunk-235ZOXDY.mjs → chunk-HAMMDSJM.mjs} +2 -2
- package/dist/{chunk-FRN7PNL4.mjs → chunk-LN2BAU5H.mjs} +2 -2
- package/dist/{chunk-ZAW3D2TI.mjs → chunk-M2DI67UZ.mjs} +2 -2
- package/dist/{chunk-7XJV5RZO.mjs → chunk-RPEYD7TD.mjs} +2 -2
- package/dist/{chunk-7XJV5RZO.mjs.map → chunk-RPEYD7TD.mjs.map} +1 -1
- package/dist/client/lifecycle.mjs +2 -2
- package/dist/client-plugins.cjs +1 -1
- package/dist/client-plugins.cjs.map +1 -1
- package/dist/client-plugins.mjs +2 -2
- package/dist/client.cjs +15 -1
- package/dist/client.cjs.map +1 -1
- package/dist/client.mjs +4 -4
- package/dist/index.cjs +72 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +6 -6
- package/dist/internal/build-runtime.cjs +58 -8
- package/dist/internal/build-runtime.cjs.map +1 -1
- package/dist/internal/build-runtime.mjs +3 -3
- package/dist/internal/client-runtime.cjs +1 -1
- package/dist/internal/client-runtime.cjs.map +1 -1
- package/dist/internal/client-runtime.mjs +2 -2
- package/dist/plugin.cjs +51 -8
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.mjs +2 -2
- package/dist/renderer-client.cjs +14 -0
- package/dist/renderer-client.cjs.map +1 -1
- package/dist/renderer-client.mjs +1 -1
- package/dist/server-query-client.cjs +14 -0
- package/dist/server-query-client.cjs.map +1 -1
- package/dist/server-query-client.mjs +2 -2
- package/dist/server.cjs +51 -8
- package/dist/server.cjs.map +1 -1
- package/dist/server.mjs +2 -2
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +51 -8
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.mjs +2 -2
- package/package.json +3 -3
- package/dist/chunk-HSHA3H3U.mjs.map +0 -1
- package/dist/chunk-QCSOE6HT.mjs.map +0 -1
- /package/dist/{chunk-235ZOXDY.mjs.map → chunk-HAMMDSJM.mjs.map} +0 -0
- /package/dist/{chunk-FRN7PNL4.mjs.map → chunk-LN2BAU5H.mjs.map} +0 -0
- /package/dist/{chunk-ZAW3D2TI.mjs.map → chunk-M2DI67UZ.mjs.map} +0 -0
|
@@ -19,6 +19,19 @@ var serverQueryClientState = serverQueryClientGlobal[FARM_SERVER_QUERY_CLIENT_ST
|
|
|
19
19
|
nextFunctionId: 0,
|
|
20
20
|
active: []
|
|
21
21
|
});
|
|
22
|
+
var RAW_SERVER_QUERY_SYMBOL = /* @__PURE__ */ Symbol.for("farm.server-query");
|
|
23
|
+
function assertNotRawServerQueryInBrowser(query) {
|
|
24
|
+
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
25
|
+
if (!query?.[RAW_SERVER_QUERY_SYMBOL]) return;
|
|
26
|
+
throw new Error(
|
|
27
|
+
[
|
|
28
|
+
"useServerQuery received a raw server query implementation in the browser.",
|
|
29
|
+
"Server query handlers run only on the server. Enable the server-function transform (add @farm.js/plugin/rsc and set experimental.serverActions: true in farm.config.ts) so client imports become server references,",
|
|
30
|
+
"or call the query from server code / an API route (createAPIClient) instead."
|
|
31
|
+
].join("\n")
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
__name(assertNotRawServerQueryInBrowser, "assertNotRawServerQueryInBrowser");
|
|
22
35
|
function beginFarmServerQueryAction(actionId, args) {
|
|
23
36
|
const active = serverQueryClientState.active.at(-1);
|
|
24
37
|
return {
|
|
@@ -75,6 +88,7 @@ function prefetchServerQuery(query, input, options = {}) {
|
|
|
75
88
|
}
|
|
76
89
|
__name(prefetchServerQuery, "prefetchServerQuery");
|
|
77
90
|
async function executeServerQuery(query, input, provisionalKey, options) {
|
|
91
|
+
assertNotRawServerQueryInBrowser(query);
|
|
78
92
|
const cache = getFarmClientDataCache();
|
|
79
93
|
const inflight = cache.getInflight(provisionalKey);
|
|
80
94
|
if (inflight) return inflight;
|
|
@@ -149,4 +163,4 @@ export {
|
|
|
149
163
|
fetchServerQuery,
|
|
150
164
|
prefetchServerQuery
|
|
151
165
|
};
|
|
152
|
-
//# sourceMappingURL=chunk-
|
|
166
|
+
//# sourceMappingURL=chunk-3E2WRUR2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server-query-runtime.ts"],"sourcesContent":["\"use client\";\n\nimport { createFarmCacheKey } from \"./cache\";\nimport { getFarmClientDataCache } from \"./client-cache\";\nimport type { ServerQuery } from \"./server-query\";\nimport { isFarmServerQueryResult, type FarmServerQueryResult } from \"./server-query-protocol\";\n\nexport type ServerQueryFetchOptions = {\n /** Used only when a non-Farm transport returns plain data. Farm transports use the declaration. */\n staleTime?: number | false;\n /** Return stale data immediately while refreshing it in the background. Default true. */\n swr?: boolean;\n /** Always wait for a new result. */\n force?: boolean;\n};\n\nexport type FarmServerQueryActionInvocation = {\n actionId: string;\n args: readonly unknown[];\n provisionalKey?: string;\n};\n\ntype ActiveServerQueryInvocation = {\n provisionalKey: string;\n};\n\ntype ServerQueryClientState = {\n functionIds: WeakMap<Function, number>;\n nextFunctionId: number;\n active: ActiveServerQueryInvocation[];\n};\n\nconst FARM_SERVER_QUERY_CLIENT_STATE = Symbol.for(\"farm.serverQueryClientState\");\nconst serverQueryClientGlobal = globalThis as typeof globalThis & {\n [FARM_SERVER_QUERY_CLIENT_STATE]?: ServerQueryClientState;\n};\nconst serverQueryClientState = (serverQueryClientGlobal[FARM_SERVER_QUERY_CLIENT_STATE] ??= {\n functionIds: new WeakMap(),\n nextFunctionId: 0,\n active: [],\n});\n\n// Global symbol registry key set on raw server query implementations by\n// createServerQuery. Referenced via Symbol.for instead of importing\n// server-query.ts, which would pull the server handler pipeline into the\n// client bundle.\nconst RAW_SERVER_QUERY_SYMBOL = Symbol.for(\"farm.server-query\");\n\n/**\n * A query reaching the browser should be a transformed server reference. The\n * raw implementation carries the server query symbol; executing it here would\n * run the server handler in the browser (#408). During SSR the raw\n * implementation is expected and runs directly.\n */\nfunction assertNotRawServerQueryInBrowser(query: unknown): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n if (!(query as Record<symbol, unknown> | null)?.[RAW_SERVER_QUERY_SYMBOL]) return;\n throw new Error(\n [\n \"useServerQuery received a raw server query implementation in the browser.\",\n \"Server query handlers run only on the server. Enable the server-function transform (add @farm.js/plugin/rsc and set experimental.serverActions: true in farm.config.ts) so client imports become server references,\",\n \"or call the query from server code / an API route (createAPIClient) instead.\",\n ].join(\"\\n\"),\n );\n}\n\nexport function beginFarmServerQueryAction(\n actionId: string,\n args: readonly unknown[],\n): FarmServerQueryActionInvocation {\n const active = serverQueryClientState.active.at(-1);\n return {\n actionId,\n args,\n provisionalKey: active?.provisionalKey,\n };\n}\n\nexport function completeFarmServerQueryAction<TData>(\n invocation: FarmServerQueryActionInvocation,\n value: TData | FarmServerQueryResult<TData>,\n): TData {\n if (!isFarmServerQueryResult(value)) return value as TData;\n\n const cache = getFarmClientDataCache();\n const metadata = value.__farmServerQuery;\n if (invocation.provisionalKey) {\n cache.alias(invocation.provisionalKey, metadata.key);\n }\n\n cache.set(metadata.key, {\n data: value.data,\n updatedAt: metadata.updatedAt,\n staleAt:\n metadata.staleTime === false\n ? Number.POSITIVE_INFINITY\n : metadata.updatedAt + metadata.staleTime,\n status: \"success\",\n error: null,\n fetching: false,\n });\n\n return value.data as TData;\n}\n\nexport function createServerQueryCallKey<TInput, TData>(\n query: ServerQuery<TInput, TData>,\n input: TInput,\n): string {\n let id = serverQueryClientState.functionIds.get(query);\n if (!id) {\n id = ++serverQueryClientState.nextFunctionId;\n serverQueryClientState.functionIds.set(query, id);\n }\n return createFarmCacheKey([\"server-query-call\", id, input]);\n}\n\nexport async function fetchServerQuery<TInput, TData>(\n query: ServerQuery<TInput, TData>,\n input: TInput,\n options: ServerQueryFetchOptions = {},\n): Promise<TData> {\n const cache = getFarmClientDataCache();\n const provisionalKey = createServerQueryCallKey(query, input);\n const entry = cache.get<TData>(provisionalKey);\n const stale = cache.isStale(provisionalKey);\n const inflight = cache.getInflight<TData>(provisionalKey);\n\n if (inflight) return inflight;\n if (!options.force && entry && !stale && entry.status !== \"error\") return entry.data;\n\n if (\n !options.force &&\n entry &&\n stale &&\n entry.status !== \"pending\" &&\n entry.status !== \"error\" &&\n (options.swr ?? true)\n ) {\n void executeServerQuery(query, input, provisionalKey, options).catch(() => undefined);\n return entry.data;\n }\n\n return executeServerQuery(query, input, provisionalKey, options);\n}\n\nexport function prefetchServerQuery<TInput, TData>(\n query: ServerQuery<TInput, TData>,\n input: TInput,\n options: Omit<ServerQueryFetchOptions, \"force\"> = {},\n): Promise<TData> {\n return fetchServerQuery(query, input, options);\n}\n\nasync function executeServerQuery<TInput, TData>(\n query: ServerQuery<TInput, TData>,\n input: TInput,\n provisionalKey: string,\n options: ServerQueryFetchOptions,\n): Promise<TData> {\n assertNotRawServerQueryInBrowser(query);\n const cache = getFarmClientDataCache();\n const inflight = cache.getInflight<TData>(provisionalKey);\n if (inflight) return inflight;\n\n const previous = cache.get<TData>(provisionalKey);\n cache.set(provisionalKey, {\n data: previous?.data as TData,\n updatedAt: previous?.updatedAt ?? 0,\n staleAt: previous?.staleAt ?? 0,\n gcAt: previous?.gcAt,\n invalidatedAt: previous?.invalidatedAt,\n status: \"pending\",\n error: null,\n fetching: true,\n });\n\n const promise = (async () => {\n try {\n serverQueryClientState.active.push({ provisionalKey });\n let pending: Promise<TData>;\n try {\n pending = query(input);\n } finally {\n serverQueryClientState.active.pop();\n }\n\n const data = await pending;\n const transported = cache.get<TData>(provisionalKey);\n if (!transported || transported.fetching) {\n const updatedAt = Date.now();\n cache.set(provisionalKey, {\n data,\n updatedAt,\n staleAt:\n options.staleTime === false\n ? Number.POSITIVE_INFINITY\n : updatedAt + (options.staleTime ?? 0),\n status: \"success\",\n error: null,\n fetching: false,\n });\n }\n return data;\n } catch (cause) {\n const error = normalizeServerQueryError(cause);\n const current = cache.get<TData>(provisionalKey);\n cache.set(provisionalKey, {\n data: current?.data as TData,\n updatedAt: current?.updatedAt ?? 0,\n staleAt: current?.staleAt ?? 0,\n gcAt: current?.gcAt,\n invalidatedAt: current?.invalidatedAt,\n status: \"error\",\n error,\n fetching: false,\n });\n throw error;\n } finally {\n cache.deleteInflight(provisionalKey);\n }\n })();\n\n cache.setInflight(provisionalKey, promise);\n return promise;\n}\n\nfunction normalizeServerQueryError(cause: unknown): Error {\n if (cause instanceof Error) return cause;\n const error = new Error(typeof cause === \"string\" ? cause : \"Server query failed\");\n (error as Error & { cause?: unknown }).cause = cause;\n return error;\n}\n"],"mappings":";;;;;;;;;;;;;;AAgCA,IAAM,iCAAiC,uBAAO,IAAI,6BAA6B;AAC/E,IAAM,0BAA0B;AAGhC,IAAM,yBAA0B,sHAA4D;AAAA,EAC1F,aAAa,oBAAI,QAAQ;AAAA,EACzB,gBAAgB;AAAA,EAChB,QAAQ,CAAC;AACX;AAMA,IAAM,0BAA0B,uBAAO,IAAI,mBAAmB;AAQ9D,SAAS,iCAAiC,OAAsB;AAC9D,MAAI,OAAO,WAAW,eAAe,OAAO,aAAa,YAAa;AACtE,MAAI,CAAE,QAA2C,uBAAuB,EAAG;AAC3E,QAAM,IAAI;AAAA,IACR;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AACF;AAVS;AAYF,SAAS,2BACd,UACA,MACiC;AACjC,QAAM,SAAS,uBAAuB,OAAO,GAAG,EAAE;AAClD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,gBAAgB,QAAQ;AAAA,EAC1B;AACF;AAVgB;AAYT,SAAS,8BACd,YACA,OACO;AACP,MAAI,CAAC,wBAAwB,KAAK,EAAG,QAAO;AAE5C,QAAM,QAAQ,uBAAuB;AACrC,QAAM,WAAW,MAAM;AACvB,MAAI,WAAW,gBAAgB;AAC7B,UAAM,MAAM,WAAW,gBAAgB,SAAS,GAAG;AAAA,EACrD;AAEA,QAAM,IAAI,SAAS,KAAK;AAAA,IACtB,MAAM,MAAM;AAAA,IACZ,WAAW,SAAS;AAAA,IACpB,SACE,SAAS,cAAc,QACnB,OAAO,oBACP,SAAS,YAAY,SAAS;AAAA,IACpC,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC;AAED,SAAO,MAAM;AACf;AAzBgB;AA2BT,SAAS,yBACd,OACA,OACQ;AACR,MAAI,KAAK,uBAAuB,YAAY,IAAI,KAAK;AACrD,MAAI,CAAC,IAAI;AACP,SAAK,EAAE,uBAAuB;AAC9B,2BAAuB,YAAY,IAAI,OAAO,EAAE;AAAA,EAClD;AACA,SAAO,mBAAmB,CAAC,qBAAqB,IAAI,KAAK,CAAC;AAC5D;AAVgB;AAYhB,eAAsB,iBACpB,OACA,OACA,UAAmC,CAAC,GACpB;AAChB,QAAM,QAAQ,uBAAuB;AACrC,QAAM,iBAAiB,yBAAyB,OAAO,KAAK;AAC5D,QAAM,QAAQ,MAAM,IAAW,cAAc;AAC7C,QAAM,QAAQ,MAAM,QAAQ,cAAc;AAC1C,QAAM,WAAW,MAAM,YAAmB,cAAc;AAExD,MAAI,SAAU,QAAO;AACrB,MAAI,CAAC,QAAQ,SAAS,SAAS,CAAC,SAAS,MAAM,WAAW,QAAS,QAAO,MAAM;AAEhF,MACE,CAAC,QAAQ,SACT,SACA,SACA,MAAM,WAAW,aACjB,MAAM,WAAW,YAChB,QAAQ,OAAO,OAChB;AACA,SAAK,mBAAmB,OAAO,OAAO,gBAAgB,OAAO,EAAE,MAAM,MAAM,MAAS;AACpF,WAAO,MAAM;AAAA,EACf;AAEA,SAAO,mBAAmB,OAAO,OAAO,gBAAgB,OAAO;AACjE;AA3BsB;AA6Bf,SAAS,oBACd,OACA,OACA,UAAkD,CAAC,GACnC;AAChB,SAAO,iBAAiB,OAAO,OAAO,OAAO;AAC/C;AANgB;AAQhB,eAAe,mBACb,OACA,OACA,gBACA,SACgB;AAChB,mCAAiC,KAAK;AACtC,QAAM,QAAQ,uBAAuB;AACrC,QAAM,WAAW,MAAM,YAAmB,cAAc;AACxD,MAAI,SAAU,QAAO;AAErB,QAAM,WAAW,MAAM,IAAW,cAAc;AAChD,QAAM,IAAI,gBAAgB;AAAA,IACxB,MAAM,UAAU;AAAA,IAChB,WAAW,UAAU,aAAa;AAAA,IAClC,SAAS,UAAU,WAAW;AAAA,IAC9B,MAAM,UAAU;AAAA,IAChB,eAAe,UAAU;AAAA,IACzB,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC;AAED,QAAM,WAAW,YAAY;AAC3B,QAAI;AACF,6BAAuB,OAAO,KAAK,EAAE,eAAe,CAAC;AACrD,UAAI;AACJ,UAAI;AACF,kBAAU,MAAM,KAAK;AAAA,MACvB,UAAE;AACA,+BAAuB,OAAO,IAAI;AAAA,MACpC;AAEA,YAAM,OAAO,MAAM;AACnB,YAAM,cAAc,MAAM,IAAW,cAAc;AACnD,UAAI,CAAC,eAAe,YAAY,UAAU;AACxC,cAAM,YAAY,KAAK,IAAI;AAC3B,cAAM,IAAI,gBAAgB;AAAA,UACxB;AAAA,UACA;AAAA,UACA,SACE,QAAQ,cAAc,QAClB,OAAO,oBACP,aAAa,QAAQ,aAAa;AAAA,UACxC,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,QAAQ,0BAA0B,KAAK;AAC7C,YAAM,UAAU,MAAM,IAAW,cAAc;AAC/C,YAAM,IAAI,gBAAgB;AAAA,QACxB,MAAM,SAAS;AAAA,QACf,WAAW,SAAS,aAAa;AAAA,QACjC,SAAS,SAAS,WAAW;AAAA,QAC7B,MAAM,SAAS;AAAA,QACf,eAAe,SAAS;AAAA,QACxB,QAAQ;AAAA,QACR;AAAA,QACA,UAAU;AAAA,MACZ,CAAC;AACD,YAAM;AAAA,IACR,UAAE;AACA,YAAM,eAAe,cAAc;AAAA,IACrC;AAAA,EACF,GAAG;AAEH,QAAM,YAAY,gBAAgB,OAAO;AACzC,SAAO;AACT;AAvEe;AAyEf,SAAS,0BAA0B,OAAuB;AACxD,MAAI,iBAAiB,MAAO,QAAO;AACnC,QAAM,QAAQ,IAAI,MAAM,OAAO,UAAU,WAAW,QAAQ,qBAAqB;AACjF,EAAC,MAAsC,QAAQ;AAC/C,SAAO;AACT;AALS;","names":[]}
|
|
@@ -227,7 +227,7 @@ import {
|
|
|
227
227
|
} from "./chunk-7ZMKVETU.mjs";
|
|
228
228
|
import {
|
|
229
229
|
FARM_VERSION
|
|
230
|
-
} from "./chunk-
|
|
230
|
+
} from "./chunk-RPEYD7TD.mjs";
|
|
231
231
|
import {
|
|
232
232
|
__name,
|
|
233
233
|
__require
|
|
@@ -6858,6 +6858,14 @@ import { pathToFileURL as pathToFileURL3 } from "url";
|
|
|
6858
6858
|
// src/dev-static.ts
|
|
6859
6859
|
import * as fs6 from "fs";
|
|
6860
6860
|
import * as path11 from "path";
|
|
6861
|
+
function shouldBypassFarmRouterForDottedPath(pathname, routeManager, baseDirs) {
|
|
6862
|
+
if (!pathname.includes(".") || pathname.endsWith(".html")) return false;
|
|
6863
|
+
const matchesAppRoute = Boolean(
|
|
6864
|
+
routeManager?.matchRoute(pathname)?.route || routeManager?.matchMetadataRoute(pathname) || routeManager?.matchMetadataImage(pathname)
|
|
6865
|
+
);
|
|
6866
|
+
return !matchesAppRoute || devServableFileExists(pathname, baseDirs);
|
|
6867
|
+
}
|
|
6868
|
+
__name(shouldBypassFarmRouterForDottedPath, "shouldBypassFarmRouterForDottedPath");
|
|
6861
6869
|
function devServableFileExists(pathname, baseDirs) {
|
|
6862
6870
|
let decodedPathname;
|
|
6863
6871
|
try {
|
|
@@ -6883,6 +6891,34 @@ function devServableFileExists(pathname, baseDirs) {
|
|
|
6883
6891
|
}
|
|
6884
6892
|
__name(devServableFileExists, "devServableFileExists");
|
|
6885
6893
|
|
|
6894
|
+
// src/server-query-boundary.ts
|
|
6895
|
+
var SERVER_FN_FACTORIES = ["createServerQuery", "createServerFn"];
|
|
6896
|
+
var FARM_CORE_IMPORT_RE = /import\s*(?!type\b)(?:[\w$]+\s*,\s*)?\{([^}]*)\}\s*from\s*(["'])@farm\.js\/core(?:\/[\w./-]+)?\2/g;
|
|
6897
|
+
function findClientServerFnViolation(code, id) {
|
|
6898
|
+
if (id.startsWith("\0") || id.startsWith("virtual:") || id.includes("node_modules")) return null;
|
|
6899
|
+
if (!code.includes("@farm.js/core")) return null;
|
|
6900
|
+
for (const match of code.matchAll(FARM_CORE_IMPORT_RE)) {
|
|
6901
|
+
const specifiers = match[1];
|
|
6902
|
+
for (const factory of SERVER_FN_FACTORIES) {
|
|
6903
|
+
if (!new RegExp(`(?:^|[\\s{,])${factory}(?:[\\s},]|$)`).test(specifiers)) continue;
|
|
6904
|
+
if (new RegExp(`(?<![\\w$.])${factory}\\s*(?:<[^>]*>)?\\s*\\(`).test(code)) {
|
|
6905
|
+
return { factory };
|
|
6906
|
+
}
|
|
6907
|
+
}
|
|
6908
|
+
}
|
|
6909
|
+
return null;
|
|
6910
|
+
}
|
|
6911
|
+
__name(findClientServerFnViolation, "findClientServerFnViolation");
|
|
6912
|
+
function formatServerFnBoundaryError(violation, id) {
|
|
6913
|
+
return [
|
|
6914
|
+
`${violation.factory} handlers run only on the server, but ${id} is being bundled into the client.`,
|
|
6915
|
+
`Importing a ${violation.factory} module from client code executes the server handler (and its Node-only imports) in the browser.`,
|
|
6916
|
+
`Either enable the server-function transform (add @farm.js/plugin/rsc and set experimental.serverActions: true in farm.config.ts) so client imports become server references,`,
|
|
6917
|
+
`or keep the query on the server: call it from server components, or expose an API route and use createAPIClient from the client.`
|
|
6918
|
+
].join("\n");
|
|
6919
|
+
}
|
|
6920
|
+
__name(formatServerFnBoundaryError, "formatServerFnBoundaryError");
|
|
6921
|
+
|
|
6886
6922
|
// src/image-vite.ts
|
|
6887
6923
|
import { readFile as readFile4 } from "fs/promises";
|
|
6888
6924
|
import path12 from "path";
|
|
@@ -8427,13 +8463,11 @@ window.__FARM_MANIFEST__ = ${inlineValue({
|
|
|
8427
8463
|
if (req.url?.startsWith("/@") || req.url?.startsWith("/node_modules")) {
|
|
8428
8464
|
return next();
|
|
8429
8465
|
}
|
|
8430
|
-
if (requestPathname
|
|
8431
|
-
|
|
8432
|
-
|
|
8433
|
-
|
|
8434
|
-
|
|
8435
|
-
return next();
|
|
8436
|
-
}
|
|
8466
|
+
if (shouldBypassFarmRouterForDottedPath(requestPathname, farmApp?.getRouteManager(), [
|
|
8467
|
+
server.config.publicDir,
|
|
8468
|
+
server.config.root
|
|
8469
|
+
])) {
|
|
8470
|
+
return next();
|
|
8437
8471
|
}
|
|
8438
8472
|
if (req.url?.startsWith("/__farm/page-data")) {
|
|
8439
8473
|
const urlObj = new URL(req.url, `http://${req.headers.host || "localhost:3000"}`);
|
|
@@ -9087,6 +9121,15 @@ export const manifest = getManifest();
|
|
|
9087
9121
|
}
|
|
9088
9122
|
},
|
|
9089
9123
|
async transform(code, id, transformOptions) {
|
|
9124
|
+
if (!transformOptions?.ssr) {
|
|
9125
|
+
const currentConfig = farmApp?.getConfig() ?? options;
|
|
9126
|
+
if (currentConfig.experimental?.serverActions !== true) {
|
|
9127
|
+
const violation = findClientServerFnViolation(code, id);
|
|
9128
|
+
if (violation) {
|
|
9129
|
+
this.error(formatServerFnBoundaryError(violation, id));
|
|
9130
|
+
}
|
|
9131
|
+
}
|
|
9132
|
+
}
|
|
9090
9133
|
if (typeof imageImports.transform === "function") {
|
|
9091
9134
|
const imageModule = await imageImports.transform.call(this, code, id, transformOptions);
|
|
9092
9135
|
if (imageModule) return imageModule;
|
|
@@ -11328,4 +11371,4 @@ export {
|
|
|
11328
11371
|
farmPlugin,
|
|
11329
11372
|
defineConfig
|
|
11330
11373
|
};
|
|
11331
|
-
//# sourceMappingURL=chunk-
|
|
11374
|
+
//# sourceMappingURL=chunk-FCY7TXMA.mjs.map
|