@farm.js/core 0.1.42 → 0.1.44
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/{agent-mcp-ssVy_tea.d.mts → agent-mcp-CWI-awqd.d.mts} +1 -1
- package/dist/{agent-mcp-SSD6L3VZ.d.ts → agent-mcp-EnzWYv_X.d.ts} +1 -1
- package/dist/agent-runtime.cjs +3 -2
- package/dist/agent-runtime.d.mts +1 -1
- package/dist/agent-runtime.d.ts +1 -1
- package/dist/agent-runtime.mjs +2 -1
- package/dist/api/route-manager.d.mts +3 -3
- package/dist/api/route-manager.d.ts +3 -3
- package/dist/api/runtime.d.mts +2 -2
- package/dist/api/runtime.d.ts +2 -2
- package/dist/api.cjs +2 -2
- package/dist/api.d.mts +8 -3
- package/dist/api.d.ts +8 -3
- package/dist/api.mjs +1 -1
- package/dist/{app-KjFzdCqy.d.ts → app-CAN_2Cqo.d.ts} +8 -4
- package/dist/{app-1h3lVT4a.d.mts → app-DG3dE8v5.d.mts} +8 -4
- package/dist/{app-manifest-D3RkVNuS.d.mts → app-manifest-8x5VjZ0L.d.mts} +1 -1
- package/dist/{app-manifest-DaW8-tvX.d.ts → app-manifest-DazjgQya.d.ts} +1 -1
- package/dist/app-markdown.d.mts +2 -2
- package/dist/app-markdown.d.ts +2 -2
- package/dist/{chunk-ECKF2BAM.cjs → chunk-2GVF3C2F.cjs} +255 -42
- package/dist/{chunk-TUL355PH.mjs → chunk-2MKTHHEU.mjs} +136 -161
- package/dist/chunk-2NXO5SBY.mjs +57 -0
- package/dist/{chunk-AX7S67YV.mjs → chunk-37VKVISD.mjs} +9 -173
- package/dist/chunk-3BROEWFY.cjs +39 -0
- package/dist/chunk-3SAWHWDH.cjs +186 -0
- package/dist/{chunk-AHFRQMRX.cjs → chunk-3YJMBQ27.cjs} +1 -1
- package/dist/{chunk-6PKXK4TY.mjs → chunk-53ZV6K65.mjs} +1 -1
- package/dist/{chunk-JG3MEQUH.cjs → chunk-5GBL2LKD.cjs} +430 -217
- package/dist/{chunk-LYIZHJTK.cjs → chunk-5LPHJZSI.cjs} +14 -14
- package/dist/chunk-5NIWBWDD.mjs +97 -0
- package/dist/{chunk-NRDBW4MP.mjs → chunk-7IQQIPRZ.mjs} +10 -0
- package/dist/{chunk-TCJ4A4A2.cjs → chunk-AI3WVJNP.cjs} +324 -350
- package/dist/chunk-APDGOKKE.cjs +148 -0
- package/dist/chunk-AZBSVLRM.cjs +132 -0
- package/dist/{chunk-RHGK2JEN.cjs → chunk-B6XAA7V6.cjs} +18 -182
- package/dist/chunk-CEDPEDNW.cjs +98 -0
- package/dist/{chunk-WSOBCAYO.cjs → chunk-CW6SNEN2.cjs} +25 -25
- package/dist/chunk-D5RFPV2H.mjs +148 -0
- package/dist/chunk-E22SWCXB.cjs +144 -0
- package/dist/{chunk-375K2ZVU.mjs → chunk-ERA5RP3L.mjs} +263 -50
- package/dist/{chunk-724JLMS4.mjs → chunk-F646BZ4Y.mjs} +4 -2
- package/dist/{chunk-C5KVWHIH.cjs → chunk-G2Z5DGMS.cjs} +5 -3
- package/dist/{chunk-ZATTDMBW.cjs → chunk-GA6JM4L6.cjs} +279 -376
- package/dist/chunk-GZWHCWLB.mjs +186 -0
- package/dist/{chunk-24SP5TGU.mjs → chunk-H4LXPWI2.mjs} +2 -2
- package/dist/chunk-H7BLEEAE.cjs +57 -0
- package/dist/chunk-IOMVXBLZ.mjs +144 -0
- package/dist/{chunk-BD3D7EZV.cjs → chunk-IXFOBGLQ.cjs} +9 -3
- package/dist/{chunk-JIYYX7WU.mjs → chunk-JVXW76I7.mjs} +2 -2
- package/dist/{chunk-MHN4UR5U.cjs → chunk-KFZZFZ7J.cjs} +7 -7
- package/dist/{chunk-BXJ5HJTJ.cjs → chunk-LPE3ED4R.cjs} +17 -13
- package/dist/chunk-LRJRXXQZ.cjs +109 -0
- package/dist/{chunk-HCSVR4YZ.mjs → chunk-M3BXTWJM.mjs} +18 -0
- package/dist/{chunk-2JZHQDUY.mjs → chunk-OYZGFRPA.mjs} +1 -1
- package/dist/{chunk-JR4QCLJY.cjs → chunk-PDU4P2IC.cjs} +19 -1
- package/dist/chunk-PJEHUSHA.mjs +229 -0
- package/dist/{chunk-QTEJGB5A.mjs → chunk-QGFKXYC7.mjs} +80 -177
- package/dist/chunk-QGH2RQVF.mjs +132 -0
- package/dist/{chunk-YWMZUGIS.mjs → chunk-R3ZFQJEF.mjs} +247 -34
- package/dist/{chunk-U2UC7UGP.mjs → chunk-R4J2UOV4.mjs} +1 -1
- package/dist/chunk-S34OBRMZ.mjs +109 -0
- package/dist/{chunk-TS4JHGUJ.mjs → chunk-S3ZEMCE6.mjs} +9 -3
- package/dist/{chunk-WWFTAUFG.cjs → chunk-SBH2JLLF.cjs} +12 -2
- package/dist/{chunk-YSLWRWWP.cjs → chunk-SKK6UF5P.cjs} +200 -46
- package/dist/{chunk-ZS6HDNOM.cjs → chunk-T44ECMEP.cjs} +6 -6
- package/dist/{chunk-OFZUJMCU.mjs → chunk-WPJQN64R.mjs} +195 -41
- package/dist/{chunk-NU25TRIO.mjs → chunk-WWYXIECF.mjs} +12 -8
- package/dist/{chunk-7YHSD3Z6.cjs → chunk-XPSGGECF.cjs} +85 -31
- package/dist/chunk-XUGFRFD2.mjs +39 -0
- package/dist/{chunk-IVQY6UTY.mjs → chunk-XUHIRBXY.mjs} +1 -1
- package/dist/{chunk-PIZXONIS.mjs → chunk-YFLBG2W3.mjs} +56 -2
- package/dist/chunk-YKUEJ3MG.cjs +229 -0
- package/dist/{chunk-QKZMB7LY.cjs → chunk-YN2QEMMO.cjs} +2 -2
- package/dist/{client-plugins-DIem0I0W.d.ts → client-plugins-BGS0wqzc.d.ts} +36 -16
- package/dist/{client-plugins-C9Py_50W.d.mts → client-plugins-nQ0tYt4l.d.mts} +36 -16
- package/dist/client-plugins.d.mts +1 -1
- package/dist/client-plugins.d.ts +1 -1
- package/dist/client.cjs +4 -3
- package/dist/client.d.mts +5 -5
- package/dist/client.d.ts +5 -5
- package/dist/client.mjs +3 -2
- package/dist/config.d.mts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/{devtools-2RY3EKHL.cjs → devtools-5Q7VRKVH.cjs} +6 -5
- package/dist/{devtools-Q3LBNUJ7.mjs → devtools-LJ4IGYGW.mjs} +5 -4
- package/dist/docs.cjs +7 -6
- package/dist/docs.d.mts +2 -2
- package/dist/docs.d.ts +2 -2
- package/dist/docs.mjs +6 -5
- package/dist/index-Cy26isrh.d.ts +48 -0
- package/dist/index-y1jgR74U.d.mts +48 -0
- package/dist/index.cjs +44 -25
- package/dist/index.d.mts +15 -15
- package/dist/index.d.ts +15 -15
- package/dist/index.mjs +51 -32
- package/dist/integrations.cjs +5 -3
- package/dist/integrations.d.mts +1 -1
- package/dist/integrations.d.ts +1 -1
- package/dist/integrations.mjs +6 -4
- package/dist/internal/app-markdown-runtime.d.mts +2 -2
- package/dist/internal/app-markdown-runtime.d.ts +2 -2
- package/dist/internal/build-runtime.cjs +30 -15
- package/dist/internal/build-runtime.d.mts +12 -16
- package/dist/internal/build-runtime.d.ts +12 -16
- package/dist/internal/build-runtime.mjs +29 -14
- package/dist/internal/cli-runtime.cjs +24 -11
- package/dist/internal/cli-runtime.mjs +24 -11
- package/dist/internal/client-error-overlay.cjs +4 -4
- package/dist/internal/client-error-overlay.mjs +1 -1
- package/dist/internal/client-runtime.cjs +5 -1
- package/dist/internal/client-runtime.d.mts +1 -0
- package/dist/internal/client-runtime.d.ts +1 -0
- package/dist/internal/client-runtime.mjs +4 -0
- package/dist/internal/compression-runtime.d.mts +1 -1
- package/dist/internal/compression-runtime.d.ts +1 -1
- package/dist/internal/config-runtime.cjs +6 -5
- package/dist/internal/config-runtime.d.mts +2 -2
- package/dist/internal/config-runtime.d.ts +2 -2
- package/dist/internal/config-runtime.mjs +5 -4
- package/dist/internal/form-actions-client.cjs +18 -0
- package/dist/internal/form-actions-client.d.mts +5 -0
- package/dist/internal/form-actions-client.d.ts +5 -0
- package/dist/internal/form-actions-client.mjs +18 -0
- package/dist/internal/form-actions.cjs +18 -0
- package/dist/internal/form-actions.d.mts +14 -0
- package/dist/internal/form-actions.d.ts +14 -0
- package/dist/internal/form-actions.mjs +18 -0
- package/dist/internal/island-codec.cjs +22 -0
- package/dist/internal/island-codec.d.mts +29 -0
- package/dist/internal/island-codec.d.ts +29 -0
- package/dist/internal/island-codec.mjs +22 -0
- package/dist/internal/island-value-store.cjs +13 -0
- package/dist/internal/island-value-store.d.mts +6 -0
- package/dist/internal/island-value-store.d.ts +6 -0
- package/dist/internal/island-value-store.mjs +13 -0
- package/dist/internal/islands-runtime.cjs +77 -0
- package/dist/internal/islands-runtime.d.mts +57 -0
- package/dist/internal/islands-runtime.d.ts +57 -0
- package/dist/internal/islands-runtime.mjs +77 -0
- package/dist/internal/islands-server.cjs +19 -0
- package/dist/internal/islands-server.d.mts +3 -0
- package/dist/internal/islands-server.d.ts +3 -0
- package/dist/internal/islands-server.mjs +19 -0
- package/dist/internal/islx-client.cjs +5 -0
- package/dist/internal/islx-client.d.mts +2 -0
- package/dist/internal/islx-client.d.ts +2 -0
- package/dist/internal/islx-client.mjs +3 -0
- package/dist/internal/islx-react.cjs +4 -0
- package/dist/internal/islx-react.d.mts +1 -0
- package/dist/internal/islx-react.d.ts +1 -0
- package/dist/internal/islx-react.mjs +2 -0
- package/dist/internal/islx-server.cjs +5 -0
- package/dist/internal/islx-server.d.mts +2 -0
- package/dist/internal/islx-server.d.ts +2 -0
- package/dist/internal/islx-server.mjs +3 -0
- package/dist/internal/isolated-boundary.cjs +4 -3
- package/dist/internal/isolated-boundary.d.mts +13 -1
- package/dist/internal/isolated-boundary.d.ts +13 -1
- package/dist/internal/isolated-boundary.mjs +3 -2
- package/dist/internal/product-telemetry-runtime.cjs +2 -2
- package/dist/internal/product-telemetry-runtime.mjs +1 -1
- package/dist/internal/production-runtime.cjs +24 -13
- package/dist/internal/production-runtime.d.mts +20 -10
- package/dist/internal/production-runtime.d.ts +20 -10
- package/dist/internal/production-runtime.mjs +24 -13
- package/dist/internal/server-tree.cjs +6 -3
- package/dist/internal/server-tree.d.mts +25 -2
- package/dist/internal/server-tree.d.ts +25 -2
- package/dist/internal/server-tree.mjs +7 -4
- package/dist/island-value-protocol-BRayRghM.d.mts +12 -0
- package/dist/island-value-protocol-BRayRghM.d.ts +12 -0
- package/dist/markdown.d.mts +1 -1
- package/dist/markdown.d.ts +1 -1
- package/dist/middleware.d.mts +3 -3
- package/dist/middleware.d.ts +3 -3
- package/dist/navigation.cjs +5 -4
- package/dist/navigation.d.mts +4 -4
- package/dist/navigation.d.ts +4 -4
- package/dist/navigation.mjs +4 -3
- package/dist/og.d.mts +5 -0
- package/dist/og.d.ts +5 -0
- package/dist/plugin.cjs +19 -12
- package/dist/plugin.d.mts +3 -3
- package/dist/plugin.d.ts +3 -3
- package/dist/plugin.mjs +18 -11
- package/dist/{production-runtime-bjjWq-DA.d.ts → production-runtime-BVMDgHrA.d.ts} +1 -1
- package/dist/{production-runtime-CHFKIgpW.d.mts → production-runtime-ClFA_1KQ.d.mts} +1 -1
- package/dist/query/client.cjs +6 -5
- package/dist/query/client.mjs +2 -1
- package/dist/{render-plan-DOHg6wdO.d.mts → render-plan-CoSovy_O.d.mts} +4 -2
- package/dist/{render-plan-B2UndB4x.d.ts → render-plan-y2DefWf8.d.ts} +4 -2
- package/dist/renderer/react/server.cjs +7 -6
- package/dist/renderer/react/server.d.mts +3 -1
- package/dist/renderer/react/server.d.ts +3 -1
- package/dist/renderer/react/server.mjs +5 -4
- package/dist/renderer-client.cjs +5 -4
- package/dist/renderer-client.d.mts +3 -3
- package/dist/renderer-client.d.ts +3 -3
- package/dist/renderer-client.mjs +2 -1
- package/dist/renderer.d.mts +3 -1
- package/dist/renderer.d.ts +3 -1
- package/dist/{request-DVNXRQrI.d.ts → request-aG5Wovm5.d.ts} +1 -1
- package/dist/{request-DQcGfdgQ.d.mts → request-cNM09Q7e.d.mts} +1 -1
- package/dist/request.d.mts +2 -2
- package/dist/request.d.ts +2 -2
- package/dist/{route-rendering-B_6fj-GG.d.ts → route-rendering-B3uQmCWX.d.ts} +1 -1
- package/dist/{route-rendering-CEX4mFn-.d.mts → route-rendering-EyInfsjI.d.mts} +1 -1
- package/dist/{router-CHEMHm1P.d.ts → router-DNUf-Bg1.d.ts} +1 -1
- package/dist/{router-CKHPBKXX.d.mts → router-Devibh4r.d.mts} +1 -1
- package/dist/routes.d.mts +1 -1
- package/dist/routes.d.ts +1 -1
- package/dist/rsc-pipeline-4ZJ6GUVQ.cjs +78 -0
- package/dist/rsc-pipeline-KK6GFDET.mjs +78 -0
- package/dist/{runtime-jj8TKNsy.d.mts → runtime-9KZb8AI5.d.mts} +1 -1
- package/dist/{runtime-Br2ZDTAv.d.ts → runtime-CLr9P5kn.d.ts} +1 -1
- package/dist/{schema-dev-notice-5JPE67AI.cjs → schema-dev-notice-77ZL23PL.cjs} +4 -4
- package/dist/{schema-dev-notice-WLPZ6WKU.mjs → schema-dev-notice-BLXOS6U2.mjs} +2 -2
- package/dist/server-plugins.d.mts +2 -2
- package/dist/server-plugins.d.ts +2 -2
- package/dist/server.cjs +57 -38
- package/dist/server.d.mts +15 -10
- package/dist/server.d.ts +15 -10
- package/dist/server.mjs +37 -18
- package/dist/{spa-router-BEvS9Erj.d.mts → spa-router-BIxh4IY-.d.mts} +8 -3
- package/dist/{spa-router-DmCuH5B7.d.ts → spa-router-Ds6R_oe-.d.ts} +8 -3
- package/dist/{ssg-57v6cZcW.d.mts → ssg-ByrOVYdM.d.mts} +2 -2
- package/dist/{ssg-gT093ETk.d.ts → ssg-XnMHCyEc.d.ts} +2 -2
- package/dist/testing.d.mts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/{utils-CCTKvR-P.d.ts → utils-BN70ueSN.d.ts} +1 -1
- package/dist/{utils-raHHQVyL.d.mts → utils-BrjR5xRs.d.mts} +1 -1
- package/dist/version.cjs +2 -2
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +19 -12
- package/dist/vite.d.mts +6 -4
- package/dist/vite.d.ts +6 -4
- package/dist/vite.mjs +18 -11
- package/package.json +53 -1
- package/dist/{chunk-35WS7P2V.mjs → chunk-26CXZR6L.mjs} +3 -3
- package/dist/{chunk-QEILRWVV.cjs → chunk-3XEMGDBF.cjs} +2 -2
- package/dist/{chunk-BPOTSHDO.cjs → chunk-IOAUK4OI.cjs} +2 -2
- package/dist/{chunk-BYR3RQPB.mjs → chunk-T76H22WI.mjs} +4 -4
|
@@ -2,12 +2,13 @@ import {
|
|
|
2
2
|
collectSSGPages,
|
|
3
3
|
matchSSGPage,
|
|
4
4
|
resolveRouteRenderingConfigFromFile
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-26CXZR6L.mjs";
|
|
6
6
|
import {
|
|
7
7
|
classifyFarmDocumentPrefix,
|
|
8
8
|
composeFarmFullDocument,
|
|
9
9
|
createDefaultErrorMarkup,
|
|
10
10
|
createFarmMetadataRouteResponse,
|
|
11
|
+
createFarmRouteRenderPlan,
|
|
11
12
|
createFarmThemeDocumentParts,
|
|
12
13
|
createLateNotFoundRecovery,
|
|
13
14
|
createLateRedirectRecovery,
|
|
@@ -24,7 +25,7 @@ import {
|
|
|
24
25
|
renderFarmLocaleAlternateLinks,
|
|
25
26
|
resolveDefaultErrorStatus,
|
|
26
27
|
routeBoundaryCoversDirectory
|
|
27
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-YFLBG2W3.mjs";
|
|
28
29
|
import {
|
|
29
30
|
FARM_DEFAULT_MCP_PATH,
|
|
30
31
|
collectFarmDefaultMCPPages,
|
|
@@ -33,9 +34,15 @@ import {
|
|
|
33
34
|
isFarmDefaultMCPPathname,
|
|
34
35
|
resolveFarmDefaultMCPServer
|
|
35
36
|
} from "./chunk-4ZZNPK25.mjs";
|
|
37
|
+
import {
|
|
38
|
+
handleFarmFormActionRequest
|
|
39
|
+
} from "./chunk-XUGFRFD2.mjs";
|
|
36
40
|
import {
|
|
37
41
|
createFarmMetadataImageResponse
|
|
38
42
|
} from "./chunk-OJ7JP7RJ.mjs";
|
|
43
|
+
import {
|
|
44
|
+
installFarmIslandValues
|
|
45
|
+
} from "./chunk-D5RFPV2H.mjs";
|
|
39
46
|
import {
|
|
40
47
|
FARM_ISLAND_REPLAYABLE_SELECTOR,
|
|
41
48
|
isFarmIslandStrategy
|
|
@@ -55,14 +62,15 @@ import {
|
|
|
55
62
|
import {
|
|
56
63
|
getFarmProjectSourceDir,
|
|
57
64
|
resolveFarmAuthConfig,
|
|
58
|
-
resolveFarmDevIndicatorsConfig
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
normalizeRouteRules
|
|
62
|
-
} from "./chunk-GHFS7RUB.mjs";
|
|
65
|
+
resolveFarmDevIndicatorsConfig,
|
|
66
|
+
resolveFarmServerComponentsMode
|
|
67
|
+
} from "./chunk-M3BXTWJM.mjs";
|
|
63
68
|
import {
|
|
64
69
|
resolveFarmDevtoolsConfig
|
|
65
70
|
} from "./chunk-JBSVKMC5.mjs";
|
|
71
|
+
import {
|
|
72
|
+
normalizeRouteRules
|
|
73
|
+
} from "./chunk-GHFS7RUB.mjs";
|
|
66
74
|
import {
|
|
67
75
|
assertFarmRendererStreamingRuntime,
|
|
68
76
|
getFarmRendererCapabilities,
|
|
@@ -147,7 +155,7 @@ import {
|
|
|
147
155
|
getIntegrationProviders,
|
|
148
156
|
getRegisteredIntegrationAPIManifest,
|
|
149
157
|
isFarmIntegrationProviderComponentReference
|
|
150
|
-
} from "./chunk-
|
|
158
|
+
} from "./chunk-37VKVISD.mjs";
|
|
151
159
|
import {
|
|
152
160
|
createRouteSlotContainerId,
|
|
153
161
|
parseRouteSlotFile
|
|
@@ -170,7 +178,6 @@ import {
|
|
|
170
178
|
} from "./chunk-NPC7VWJE.mjs";
|
|
171
179
|
import {
|
|
172
180
|
formatOptionalPeerInstallHint,
|
|
173
|
-
isMissingPackageError,
|
|
174
181
|
isOptionalPeerInstalled
|
|
175
182
|
} from "./chunk-YOZYCI6Z.mjs";
|
|
176
183
|
import {
|
|
@@ -237,7 +244,7 @@ import {
|
|
|
237
244
|
} from "./chunk-P7XDC7UJ.mjs";
|
|
238
245
|
import {
|
|
239
246
|
FARM_VERSION
|
|
240
|
-
} from "./chunk-
|
|
247
|
+
} from "./chunk-R4J2UOV4.mjs";
|
|
241
248
|
import {
|
|
242
249
|
resolveFarmTrailingSlashRedirect,
|
|
243
250
|
setFarmTrailingSlashPreference
|
|
@@ -731,7 +738,7 @@ function getClientModuleHydrationPlan(modulePath, root, mode = "off", options =
|
|
|
731
738
|
...costGuardExceeded ? { costGuardExceeded: true } : {},
|
|
732
739
|
...fallbackReason ? { fallbackReason } : {}
|
|
733
740
|
}), "emptyPlan");
|
|
734
|
-
const asyncOwner = metadata.suppressedAsyncHydration === true && options.asyncOwnerIslands === true;
|
|
741
|
+
const asyncOwner = (metadata.suppressedAsyncHydration === true || options.serverOwners === true) && options.asyncOwnerIslands === true;
|
|
735
742
|
if (mode === "off" && !asyncOwner) return emptyPlan();
|
|
736
743
|
const resolvedPath = resolveOwnerSourcePath(resolveModuleSourcePath(modulePath, root), root);
|
|
737
744
|
const content = readIfExists(resolvedPath ?? "");
|
|
@@ -1745,56 +1752,6 @@ function resolveSourceCandidate(candidates) {
|
|
|
1745
1752
|
}
|
|
1746
1753
|
__name(resolveSourceCandidate, "resolveSourceCandidate");
|
|
1747
1754
|
|
|
1748
|
-
// src/navigation/render-plan.ts
|
|
1749
|
-
function createFarmRouteRenderPlan(input = {}) {
|
|
1750
|
-
const pageShouldHydrate = input.pageShouldHydrate === true;
|
|
1751
|
-
const layoutShouldHydrate = input.layoutShouldHydrate === true;
|
|
1752
|
-
const hydration = pageShouldHydrate ? layoutShouldHydrate ? "route-and-layout-islands" : "route-island" : layoutShouldHydrate ? "layout-island" : "none";
|
|
1753
|
-
const rendering = input.rendering;
|
|
1754
|
-
const cache2 = rendering?.ssg ? typeof rendering.revalidate === "number" && rendering.revalidate > 0 ? { mode: "revalidate", revalidate: rendering.revalidate } : { mode: "static" } : { mode: "dynamic" };
|
|
1755
|
-
return {
|
|
1756
|
-
version: 1,
|
|
1757
|
-
output: "html",
|
|
1758
|
-
navigation: "html-fragment",
|
|
1759
|
-
hydration,
|
|
1760
|
-
islandStrategy: hydration === "none" ? null : input.islandStrategy ?? "load",
|
|
1761
|
-
cache: cache2
|
|
1762
|
-
};
|
|
1763
|
-
}
|
|
1764
|
-
__name(createFarmRouteRenderPlan, "createFarmRouteRenderPlan");
|
|
1765
|
-
function getFarmFragmentCacheControl(plan) {
|
|
1766
|
-
if (plan.cache.mode === "static") {
|
|
1767
|
-
return "public, max-age=0, s-maxage=31536000, immutable";
|
|
1768
|
-
}
|
|
1769
|
-
if (plan.cache.mode === "revalidate") {
|
|
1770
|
-
const seconds = Math.max(1, plan.cache.revalidate ?? 1);
|
|
1771
|
-
return `public, max-age=0, s-maxage=${seconds}, stale-while-revalidate=${seconds}`;
|
|
1772
|
-
}
|
|
1773
|
-
return "private, max-age=0";
|
|
1774
|
-
}
|
|
1775
|
-
__name(getFarmFragmentCacheControl, "getFarmFragmentCacheControl");
|
|
1776
|
-
function parseFarmLayoutChainHeader(value) {
|
|
1777
|
-
if (!value || value.length > 8192) return [];
|
|
1778
|
-
try {
|
|
1779
|
-
const parsed = JSON.parse(value);
|
|
1780
|
-
if (!Array.isArray(parsed) || parsed.length > 64) return [];
|
|
1781
|
-
return parsed.filter(
|
|
1782
|
-
(pattern) => typeof pattern === "string" && pattern.startsWith("/") && pattern.length <= 512
|
|
1783
|
-
);
|
|
1784
|
-
} catch {
|
|
1785
|
-
return [];
|
|
1786
|
-
}
|
|
1787
|
-
}
|
|
1788
|
-
__name(parseFarmLayoutChainHeader, "parseFarmLayoutChainHeader");
|
|
1789
|
-
function getSharedLayoutPrefixLength(current, next) {
|
|
1790
|
-
let index = 0;
|
|
1791
|
-
while (index < current.length && index < next.length && current[index] === next[index]) {
|
|
1792
|
-
index++;
|
|
1793
|
-
}
|
|
1794
|
-
return index;
|
|
1795
|
-
}
|
|
1796
|
-
__name(getSharedLayoutPrefixLength, "getSharedLayoutPrefixLength");
|
|
1797
|
-
|
|
1798
1755
|
// src/routing/route-manager.ts
|
|
1799
1756
|
import { realpathSync } from "fs";
|
|
1800
1757
|
import path3 from "path";
|
|
@@ -2204,7 +2161,7 @@ var _RouteManager = class _RouteManager {
|
|
|
2204
2161
|
const unsupportedIntegrationProvider = integrationProviders.find(
|
|
2205
2162
|
(provider) => provider.supportsIsolatedHydration !== true
|
|
2206
2163
|
);
|
|
2207
|
-
if (this.config.experimental?.isolatedClientHydration === "enabled" && this.config.experimental?.serverComponents !==
|
|
2164
|
+
if (this.config.experimental?.isolatedClientHydration === "enabled" && resolveFarmServerComponentsMode(this.config.experimental?.serverComponents) !== "rsc" && unsupportedIntegrationProvider) {
|
|
2208
2165
|
logger.warn(
|
|
2209
2166
|
`[Farm.js] isolated hydration kept route-wide because integration provider "${unsupportedIntegrationProvider.name}" does not declare supportsIsolatedHydration: true.`
|
|
2210
2167
|
);
|
|
@@ -2212,7 +2169,7 @@ var _RouteManager = class _RouteManager {
|
|
|
2212
2169
|
const isolatedMode = resolveFarmIsolatedClientHydrationMode(
|
|
2213
2170
|
this.config.experimental?.isolatedClientHydration,
|
|
2214
2171
|
{
|
|
2215
|
-
serverComponents: this.config.experimental?.serverComponents ===
|
|
2172
|
+
serverComponents: resolveFarmServerComponentsMode(this.config.experimental?.serverComponents) === "rsc",
|
|
2216
2173
|
hasUnsupportedIntegrationProvider: Boolean(unsupportedIntegrationProvider)
|
|
2217
2174
|
}
|
|
2218
2175
|
);
|
|
@@ -2237,12 +2194,10 @@ var _RouteManager = class _RouteManager {
|
|
|
2237
2194
|
);
|
|
2238
2195
|
const routeEntries = Array.from(this.routes.values()).map((entry) => ({
|
|
2239
2196
|
entry,
|
|
2240
|
-
metadata: isFarmMarkdownPageFile(entry.modulePath) ? markdownPagePlan() : getClientModuleHydrationPlan(
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
planOptions
|
|
2245
|
-
)
|
|
2197
|
+
metadata: isFarmMarkdownPageFile(entry.modulePath) ? markdownPagePlan() : getClientModuleHydrationPlan(entry.modulePath, normalizedProjectRoot, isolatedMode, {
|
|
2198
|
+
...planOptions,
|
|
2199
|
+
serverOwners: resolveFarmServerComponentsMode(this.config.experimental?.serverComponents) === "islands"
|
|
2200
|
+
})
|
|
2246
2201
|
}));
|
|
2247
2202
|
const markdownFallback = routeEntries.find(
|
|
2248
2203
|
({ entry, metadata }) => isFarmMarkdownPageFile(entry.modulePath) && metadata.fallbackReason
|
|
@@ -4530,6 +4485,8 @@ function createDefaultErrorDiagnostics(error, root) {
|
|
|
4530
4485
|
__name(createDefaultErrorDiagnostics, "createDefaultErrorDiagnostics");
|
|
4531
4486
|
|
|
4532
4487
|
// src/server/renderer.ts
|
|
4488
|
+
installFarmIslandValues();
|
|
4489
|
+
var islands;
|
|
4533
4490
|
var cachedClerkProvider = null;
|
|
4534
4491
|
var importRuntimeModule = new Function("specifier", "return import(specifier);");
|
|
4535
4492
|
function shouldServePrerenderedPage(nodeEnv, method) {
|
|
@@ -4789,6 +4746,10 @@ var _ServerRenderer = class _ServerRenderer {
|
|
|
4789
4746
|
}
|
|
4790
4747
|
async initialize() {
|
|
4791
4748
|
if (this.rendererRuntime) return;
|
|
4749
|
+
if (this.islandValues()) {
|
|
4750
|
+
(await import("./internal/islands-server.mjs")).installFarmIslandsServer();
|
|
4751
|
+
islands ?? (islands = await import("./internal/islands-runtime.mjs"));
|
|
4752
|
+
}
|
|
4792
4753
|
if (this.config.notFound?.component?.trim()) {
|
|
4793
4754
|
resolveFarmNotFoundComponentPath(this.config, getFarmAppDirectories(this.config));
|
|
4794
4755
|
}
|
|
@@ -4899,8 +4860,20 @@ var _ServerRenderer = class _ServerRenderer {
|
|
|
4899
4860
|
if (!this.rendererRuntime.wrapClientGraph || typeof getIsolatedClientBoundaryModules !== "function" || getIsolatedClientBoundaryModules.call(this.routeManager, this.config.root).size === 0) {
|
|
4900
4861
|
return element;
|
|
4901
4862
|
}
|
|
4863
|
+
if (islands && this.islandValues())
|
|
4864
|
+
return islands.wrapFarmIsolatedClientGraph(void 0, element);
|
|
4902
4865
|
return this.rendererRuntime.wrapClientGraph(element);
|
|
4903
4866
|
}
|
|
4867
|
+
/** The page a hydrating layout keeps as server HTML: islands again, or a server tree. */
|
|
4868
|
+
async isolateServerPage(element, serverTree) {
|
|
4869
|
+
if (islands && this.islandValues()) {
|
|
4870
|
+
const runtime = islands;
|
|
4871
|
+
return serverTree ? runtime.renderFarmServerTreePage(void 0, element, {
|
|
4872
|
+
isolate: /* @__PURE__ */ __name((node) => runtime.isolateFarmServerPageGraph(void 0, node), "isolate")
|
|
4873
|
+
}) : runtime.isolateFarmServerPageGraph(void 0, element);
|
|
4874
|
+
}
|
|
4875
|
+
return serverTree && this.rendererRuntime.renderServerTreePage ? this.rendererRuntime.renderServerTreePage(element, { values: false }) : this.rendererRuntime.isolateServerPageGraph(element);
|
|
4876
|
+
}
|
|
4904
4877
|
async renderElementToCompleteHTML(element, options = {}) {
|
|
4905
4878
|
const streaming = getFarmRendererStreamingCapabilitiesForRuntime(this.config.renderer, "node");
|
|
4906
4879
|
const renderToPipeableStream = streaming.node ? this.rendererRuntime.renderToPipeableStream : void 0;
|
|
@@ -4961,6 +4934,10 @@ var _ServerRenderer = class _ServerRenderer {
|
|
|
4961
4934
|
}
|
|
4962
4935
|
return { html: await this.renderElementToCompleteHTML(element, options), head: "" };
|
|
4963
4936
|
}
|
|
4937
|
+
/** Islands mode sends large prop values once, keyed by content (RFC 0003). */
|
|
4938
|
+
islandValues() {
|
|
4939
|
+
return resolveFarmServerComponentsMode(this.config.experimental?.serverComponents) === "islands";
|
|
4940
|
+
}
|
|
4964
4941
|
/**
|
|
4965
4942
|
* Render the route tree used by client navigation without producing a second
|
|
4966
4943
|
* document response. Layout markers let the browser preserve the longest
|
|
@@ -4987,7 +4964,7 @@ var _ServerRenderer = class _ServerRenderer {
|
|
|
4987
4964
|
if (input.pageShouldHydrate && !input.layoutShouldHydrate) {
|
|
4988
4965
|
element = this.wrapClientGraph(element);
|
|
4989
4966
|
} else if (input.layoutShouldHydrate && !input.pageShouldHydrate && this.rendererRuntime.isolateServerPageGraph) {
|
|
4990
|
-
element =
|
|
4967
|
+
element = await this.isolateServerPage(element, input.serverTree === true);
|
|
4991
4968
|
}
|
|
4992
4969
|
element = this.createPageBoundary(element, {
|
|
4993
4970
|
pageShouldHydrate: input.pageShouldHydrate,
|
|
@@ -5434,6 +5411,25 @@ var _ServerRenderer = class _ServerRenderer {
|
|
|
5434
5411
|
route: route.pattern,
|
|
5435
5412
|
params
|
|
5436
5413
|
});
|
|
5414
|
+
let actionRequest;
|
|
5415
|
+
if (req.method === "POST" && resolveFarmServerComponentsMode(this.config.experimental?.serverComponents) === "islands") {
|
|
5416
|
+
await Promise.all([
|
|
5417
|
+
this.routeManager.loadRouteModule(route.modulePath),
|
|
5418
|
+
...layouts.map((layout) => this.routeManager.loadLayoutModule(layout.modulePath))
|
|
5419
|
+
]);
|
|
5420
|
+
actionRequest = createWebRequestFromFarmRequest(req, {
|
|
5421
|
+
trustProxy: this.config.server?.trustProxy
|
|
5422
|
+
});
|
|
5423
|
+
const actionResponse = await handleFarmFormActionRequest(
|
|
5424
|
+
actionRequest,
|
|
5425
|
+
resolveServerActionsConfig(this.config.serverActions)
|
|
5426
|
+
);
|
|
5427
|
+
if (actionResponse) {
|
|
5428
|
+
await sendWebResponse(res, actionResponse);
|
|
5429
|
+
completeRender(actionResponse.status, route.pattern);
|
|
5430
|
+
return;
|
|
5431
|
+
}
|
|
5432
|
+
}
|
|
5437
5433
|
const loadingBoundaryEntry = this.routeManager.getMatchingLoading(pathname, route);
|
|
5438
5434
|
errorBoundaryEntry = this.routeManager.getMatchingError(pathname, route);
|
|
5439
5435
|
middlewareMap = toMiddlewareMap(req.__FARM_MIDDLEWARE_DATA__);
|
|
@@ -5441,7 +5437,7 @@ var _ServerRenderer = class _ServerRenderer {
|
|
|
5441
5437
|
pluginExposedContext = getRequestContextSnapshot(req, {
|
|
5442
5438
|
exposedOnly: true
|
|
5443
5439
|
});
|
|
5444
|
-
const currentRequest = createWebRequestFromFarmRequest(req, {
|
|
5440
|
+
const currentRequest = actionRequest ?? createWebRequestFromFarmRequest(req, {
|
|
5445
5441
|
trustProxy: this.config.server?.trustProxy
|
|
5446
5442
|
});
|
|
5447
5443
|
const routeContext = await this.resolveRouteContext({
|
|
@@ -5762,7 +5758,10 @@ var _ServerRenderer = class _ServerRenderer {
|
|
|
5762
5758
|
if ((isClientComponent || shouldHydrate) && !shouldHydrateLayout) {
|
|
5763
5759
|
pageElement = this.wrapClientGraph(pageElement);
|
|
5764
5760
|
} else if (shouldHydrateLayout && !(isClientComponent || shouldHydrate) && this.rendererRuntime.isolateServerPageGraph) {
|
|
5765
|
-
pageElement =
|
|
5761
|
+
pageElement = await this.isolateServerPage(
|
|
5762
|
+
pageElement,
|
|
5763
|
+
routeManifestEntry?.serverTree === true
|
|
5764
|
+
);
|
|
5766
5765
|
}
|
|
5767
5766
|
pageElement = this.createPageBoundary(pageElement, {
|
|
5768
5767
|
pageShouldHydrate: isClientComponent || shouldHydrate,
|
|
@@ -8366,103 +8365,8 @@ function farmDocsClientConfigPlugin(configModule) {
|
|
|
8366
8365
|
}
|
|
8367
8366
|
__name(farmDocsClientConfigPlugin, "farmDocsClientConfigPlugin");
|
|
8368
8367
|
|
|
8369
|
-
// src/build/tailwind.ts
|
|
8370
|
-
import path16 from "path";
|
|
8371
|
-
|
|
8372
|
-
// src/build/vite-plugin-compat.ts
|
|
8373
|
-
function adaptTailwindVitePlugin(pluginOption, builder) {
|
|
8374
|
-
if (builder !== "rolldown") return pluginOption;
|
|
8375
|
-
return adaptPluginOption(pluginOption);
|
|
8376
|
-
}
|
|
8377
|
-
__name(adaptTailwindVitePlugin, "adaptTailwindVitePlugin");
|
|
8378
|
-
function adaptPluginOption(pluginOption) {
|
|
8379
|
-
if (Array.isArray(pluginOption)) return pluginOption.map(adaptPluginOption);
|
|
8380
|
-
if (!pluginOption || typeof pluginOption !== "object") return pluginOption;
|
|
8381
|
-
const plugin = pluginOption;
|
|
8382
|
-
if (!plugin.name?.startsWith("@tailwindcss/vite:generate:")) return pluginOption;
|
|
8383
|
-
if (isVitePluginHook(plugin.transform)) {
|
|
8384
|
-
return {
|
|
8385
|
-
...plugin,
|
|
8386
|
-
transform: withVite5TransformContext(plugin.transform)
|
|
8387
|
-
};
|
|
8388
|
-
}
|
|
8389
|
-
if (plugin.transform && typeof plugin.transform === "object" && "handler" in plugin.transform && isVitePluginHook(plugin.transform.handler)) {
|
|
8390
|
-
return {
|
|
8391
|
-
...plugin,
|
|
8392
|
-
transform: {
|
|
8393
|
-
...plugin.transform,
|
|
8394
|
-
handler: withVite5TransformContext(plugin.transform.handler)
|
|
8395
|
-
}
|
|
8396
|
-
};
|
|
8397
|
-
}
|
|
8398
|
-
return pluginOption;
|
|
8399
|
-
}
|
|
8400
|
-
__name(adaptPluginOption, "adaptPluginOption");
|
|
8401
|
-
function isVitePluginHook(value) {
|
|
8402
|
-
return typeof value === "function";
|
|
8403
|
-
}
|
|
8404
|
-
__name(isVitePluginHook, "isVitePluginHook");
|
|
8405
|
-
function withVite5TransformContext(handler) {
|
|
8406
|
-
return function(...args) {
|
|
8407
|
-
const context = new Proxy(this, {
|
|
8408
|
-
get(target, property2, receiver) {
|
|
8409
|
-
if (property2 === "environment") return void 0;
|
|
8410
|
-
return Reflect.get(target, property2, receiver);
|
|
8411
|
-
}
|
|
8412
|
-
});
|
|
8413
|
-
return handler.apply(context, args);
|
|
8414
|
-
};
|
|
8415
|
-
}
|
|
8416
|
-
__name(withVite5TransformContext, "withVite5TransformContext");
|
|
8417
|
-
|
|
8418
|
-
// src/build/tailwind.ts
|
|
8419
|
-
var TAILWIND_CSS_IMPORT = /@import\s+["']tailwindcss["']/;
|
|
8420
|
-
var TAILWIND_VITE_INSTALL_HINT = formatOptionalPeerInstallHint(
|
|
8421
|
-
"@tailwindcss/vite",
|
|
8422
|
-
"enable built-in Tailwind CSS support",
|
|
8423
|
-
{ dev: true }
|
|
8424
|
-
);
|
|
8425
|
-
var warnedMissingTailwind = false;
|
|
8426
|
-
async function loadTailwindVitePlugin(options = {}, importTailwind = () => import("@tailwindcss/vite")) {
|
|
8427
|
-
try {
|
|
8428
|
-
const tailwindVite = (await importTailwind()).default;
|
|
8429
|
-
const plugin = options.builder ? adaptTailwindVitePlugin(tailwindVite(), options.builder) : tailwindVite();
|
|
8430
|
-
if (options.announce) logger.info("\u{1F4E6} Enabled built-in Tailwind support (@tailwindcss/vite)");
|
|
8431
|
-
return plugin;
|
|
8432
|
-
} catch (error) {
|
|
8433
|
-
if (isMissingPackageError(error, "@tailwindcss/vite")) return createMissingTailwindPlugin();
|
|
8434
|
-
logger.warn(
|
|
8435
|
-
`Tailwind plugin auto-enable failed${options.label ? ` ${options.label}` : ""}; continuing without it: ${error.message}`
|
|
8436
|
-
);
|
|
8437
|
-
return void 0;
|
|
8438
|
-
}
|
|
8439
|
-
}
|
|
8440
|
-
__name(loadTailwindVitePlugin, "loadTailwindVitePlugin");
|
|
8441
|
-
function createMissingTailwindPlugin() {
|
|
8442
|
-
let root = process.cwd();
|
|
8443
|
-
return {
|
|
8444
|
-
name: "farm:tailwind-missing",
|
|
8445
|
-
enforce: "pre",
|
|
8446
|
-
configResolved(config) {
|
|
8447
|
-
root = config.root;
|
|
8448
|
-
},
|
|
8449
|
-
transform(code, id) {
|
|
8450
|
-
if (warnedMissingTailwind || !/\.css(?:\?.*)?$/.test(id) || !TAILWIND_CSS_IMPORT.test(code)) {
|
|
8451
|
-
return null;
|
|
8452
|
-
}
|
|
8453
|
-
warnedMissingTailwind = true;
|
|
8454
|
-
const file = path16.relative(root, id.split("?", 1)[0]).replace(/\\/g, "/");
|
|
8455
|
-
logger.warn(
|
|
8456
|
-
`${file} imports Tailwind CSS, but @tailwindcss/vite is not installed; continuing without Tailwind. ${TAILWIND_VITE_INSTALL_HINT}`
|
|
8457
|
-
);
|
|
8458
|
-
return null;
|
|
8459
|
-
}
|
|
8460
|
-
};
|
|
8461
|
-
}
|
|
8462
|
-
__name(createMissingTailwindPlugin, "createMissingTailwindPlugin");
|
|
8463
|
-
|
|
8464
8368
|
// src/server/vite-config.ts
|
|
8465
|
-
import
|
|
8369
|
+
import path16 from "path";
|
|
8466
8370
|
var FARM_CLIENT_ENTRY_PATTERN = "**/{page,layout,loading,error,not-found,default}.{js,jsx,ts,tsx}";
|
|
8467
8371
|
var FARM_CLIENT_OPTIMIZE_DEPS_INCLUDE = [
|
|
8468
8372
|
"react",
|
|
@@ -8477,7 +8381,11 @@ var FARM_CLIENT_OPTIMIZE_DEPS_INCLUDE = [
|
|
|
8477
8381
|
"@farm.js/core/i18n/client",
|
|
8478
8382
|
"@farm.js/core/query/client",
|
|
8479
8383
|
"@farm.js/core/server-fn/client",
|
|
8480
|
-
"@farm.js/core/server-query/client"
|
|
8384
|
+
"@farm.js/core/server-query/client",
|
|
8385
|
+
// Islands mode's browser runtime: Farm imports islx, which the app reaches only through Farm.
|
|
8386
|
+
"@farm.js/core > @farm.js/islx/client",
|
|
8387
|
+
"@farm.js/core > @farm.js/islx/react",
|
|
8388
|
+
"@farm.js/core > @farm.js/islx/react/client"
|
|
8481
8389
|
];
|
|
8482
8390
|
function getFarmClientOptimizeDepsInclude(renderer) {
|
|
8483
8391
|
return Array.from(
|
|
@@ -8486,9 +8394,9 @@ function getFarmClientOptimizeDepsInclude(renderer) {
|
|
|
8486
8394
|
}
|
|
8487
8395
|
__name(getFarmClientOptimizeDepsInclude, "getFarmClientOptimizeDepsInclude");
|
|
8488
8396
|
function createFarmClientOptimizeDepsEntries(projectRoot, appDirectories) {
|
|
8489
|
-
const resolvedProjectRoot =
|
|
8397
|
+
const resolvedProjectRoot = path16.resolve(projectRoot);
|
|
8490
8398
|
return appDirectories.map((appDirectory) => {
|
|
8491
|
-
const relativeAppDirectory =
|
|
8399
|
+
const relativeAppDirectory = path16.relative(resolvedProjectRoot, path16.resolve(appDirectory)).replace(/\\/g, "/");
|
|
8492
8400
|
const prefix = relativeAppDirectory || ".";
|
|
8493
8401
|
return `${prefix}/${FARM_CLIENT_ENTRY_PATTERN}`;
|
|
8494
8402
|
});
|
|
@@ -8512,7 +8420,7 @@ function createFarmClientOptimizeDepsConfig(entries, renderer) {
|
|
|
8512
8420
|
__name(createFarmClientOptimizeDepsConfig, "createFarmClientOptimizeDepsConfig");
|
|
8513
8421
|
function createFarmSourceAlias(projectRoot, srcDir = "src") {
|
|
8514
8422
|
return {
|
|
8515
|
-
"@":
|
|
8423
|
+
"@": path16.resolve(projectRoot, srcDir)
|
|
8516
8424
|
};
|
|
8517
8425
|
}
|
|
8518
8426
|
__name(createFarmSourceAlias, "createFarmSourceAlias");
|
|
@@ -8680,10 +8588,6 @@ export {
|
|
|
8680
8588
|
createMarkdownPageHydrationPlanner,
|
|
8681
8589
|
enforceFarmIsolatedHydrationRouteBudget,
|
|
8682
8590
|
isIsolatableClientBoundarySource,
|
|
8683
|
-
createFarmRouteRenderPlan,
|
|
8684
|
-
getFarmFragmentCacheControl,
|
|
8685
|
-
parseFarmLayoutChainHeader,
|
|
8686
|
-
getSharedLayoutPrefixLength,
|
|
8687
8591
|
RouteManager,
|
|
8688
8592
|
resolveDevGlobalStylesheetHref,
|
|
8689
8593
|
resolveFarmNotFoundComponentPath,
|
|
@@ -8707,7 +8611,6 @@ export {
|
|
|
8707
8611
|
redactFarmDocsClientConfig,
|
|
8708
8612
|
isFarmDocsClientConfigModule,
|
|
8709
8613
|
farmDocsClientConfigPlugin,
|
|
8710
|
-
loadTailwindVitePlugin,
|
|
8711
8614
|
createFarmClientOptimizeDepsEntries,
|
|
8712
8615
|
createFarmClientOptimizeDepsConfig,
|
|
8713
8616
|
createFarmSourceAlias,
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isExplicitFarmServerComponentsMode,
|
|
3
|
+
resolveFarmServerComponentsMode
|
|
4
|
+
} from "./chunk-M3BXTWJM.mjs";
|
|
5
|
+
import {
|
|
6
|
+
logger
|
|
7
|
+
} from "./chunk-KI3MESHB.mjs";
|
|
8
|
+
import {
|
|
9
|
+
__name
|
|
10
|
+
} from "./chunk-LPEX4YW6.mjs";
|
|
11
|
+
|
|
12
|
+
// src/server-components-status.ts
|
|
13
|
+
import { existsSync, realpathSync } from "fs";
|
|
14
|
+
import path from "path";
|
|
15
|
+
var FARM_RSC_PACKAGES = [
|
|
16
|
+
"@farm.js/plugin",
|
|
17
|
+
"@vitejs/plugin-rsc",
|
|
18
|
+
"react-server-dom-webpack"
|
|
19
|
+
];
|
|
20
|
+
var FARM_RSC_INSTALL_HINT = `pnpm add ${FARM_RSC_PACKAGES.join(" ")}`;
|
|
21
|
+
var FARM_RSC_BLOCKING_KEYS = [
|
|
22
|
+
"auth",
|
|
23
|
+
"integrations",
|
|
24
|
+
"headers",
|
|
25
|
+
"redirects",
|
|
26
|
+
"rewrites",
|
|
27
|
+
"routeRules",
|
|
28
|
+
"context"
|
|
29
|
+
];
|
|
30
|
+
var FARM_RSC_IGNORED_KEYS = [
|
|
31
|
+
"plugins",
|
|
32
|
+
"storage",
|
|
33
|
+
"schema",
|
|
34
|
+
"cron",
|
|
35
|
+
"workflows",
|
|
36
|
+
"docs",
|
|
37
|
+
"theme",
|
|
38
|
+
"observability"
|
|
39
|
+
];
|
|
40
|
+
function farmConfigUsesServerComponents(config) {
|
|
41
|
+
return resolveFarmServerComponentsMode(config?.experimental?.serverComponents) === "rsc";
|
|
42
|
+
}
|
|
43
|
+
__name(farmConfigUsesServerComponents, "farmConfigUsesServerComponents");
|
|
44
|
+
function findFarmAppPackageDir(root, packageName) {
|
|
45
|
+
for (let dir = path.resolve(root); ; dir = path.dirname(dir)) {
|
|
46
|
+
const candidate = path.join(dir, "node_modules", packageName);
|
|
47
|
+
if (existsSync(path.join(candidate, "package.json"))) return realpathSync(candidate);
|
|
48
|
+
if (path.dirname(dir) === dir) return void 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
__name(findFarmAppPackageDir, "findFarmAppPackageDir");
|
|
52
|
+
function isSet(value) {
|
|
53
|
+
if (value === void 0 || value === false || value === null) return false;
|
|
54
|
+
if (Array.isArray(value)) return value.length > 0;
|
|
55
|
+
return typeof value !== "object" || Object.keys(value).length > 0;
|
|
56
|
+
}
|
|
57
|
+
__name(isSet, "isSet");
|
|
58
|
+
function inspectFarmServerComponents(config, root) {
|
|
59
|
+
const value = config?.experimental?.serverComponents;
|
|
60
|
+
const mode = resolveFarmServerComponentsMode(value);
|
|
61
|
+
const enabled = mode === "rsc";
|
|
62
|
+
const explicit = enabled && isExplicitFarmServerComponentsMode(value);
|
|
63
|
+
const missingPackages = enabled ? FARM_RSC_PACKAGES.filter((name) => !findFarmAppPackageDir(root, name)) : [];
|
|
64
|
+
return {
|
|
65
|
+
mode,
|
|
66
|
+
enabled,
|
|
67
|
+
explicit,
|
|
68
|
+
missingPackages,
|
|
69
|
+
// `true` predates the pipeline; `{ mode: "rsc" }` is new and fails with the install command.
|
|
70
|
+
fallback: enabled && !explicit && missingPackages.length > 0,
|
|
71
|
+
blockingKeys: enabled ? FARM_RSC_BLOCKING_KEYS.filter((key) => isSet(config?.[key])) : [],
|
|
72
|
+
ignoredKeys: enabled ? FARM_RSC_IGNORED_KEYS.filter((key) => isSet(config?.[key])) : []
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
__name(inspectFarmServerComponents, "inspectFarmServerComponents");
|
|
76
|
+
function formatKeys(keys) {
|
|
77
|
+
return keys.map((key) => `\`${key}\``).join(", ");
|
|
78
|
+
}
|
|
79
|
+
__name(formatKeys, "formatKeys");
|
|
80
|
+
function formatFarmRscFallbackMessage(missingPackages, blockingKeys = []) {
|
|
81
|
+
if (blockingKeys.length > 0) {
|
|
82
|
+
return `experimental.serverComponents is true, but this app uses ${formatKeys(
|
|
83
|
+
blockingKeys
|
|
84
|
+
)}, which the RSC pipeline does not run yet, so it runs without React Server Components. Remove the flag, or move ${blockingKeys.length === 1 ? "that feature" : "those features"} out of farm.config to turn RSC on.`;
|
|
85
|
+
}
|
|
86
|
+
return `experimental.serverComponents is true, but ${missingPackages.join(", ")} ${missingPackages.length === 1 ? "is" : "are"} not installed, so the app runs without React Server Components. \`farm dev\` and \`farm build\` install them outside CI; in CI or with another tool, run ${FARM_RSC_INSTALL_HINT}.`;
|
|
87
|
+
}
|
|
88
|
+
__name(formatFarmRscFallbackMessage, "formatFarmRscFallbackMessage");
|
|
89
|
+
function formatFarmRscBlockingMessage(blockingKeys) {
|
|
90
|
+
return `experimental.serverComponents runs on the RSC pipeline, which does not run ${formatKeys(
|
|
91
|
+
blockingKeys
|
|
92
|
+
)} yet. Serving the app without ${blockingKeys.length === 1 ? "it" : "them"} could expose what ${blockingKeys.length === 1 ? "it protects" : "they protect"}, so RSC does not start. Remove experimental.serverComponents to keep ${blockingKeys.length === 1 ? "it" : "them"}.`;
|
|
93
|
+
}
|
|
94
|
+
__name(formatFarmRscBlockingMessage, "formatFarmRscBlockingMessage");
|
|
95
|
+
var warnedFallback = false;
|
|
96
|
+
function farmAppUsesRscPipeline(config, root) {
|
|
97
|
+
const status = inspectFarmServerComponents(config, root);
|
|
98
|
+
if (status.mode === "islands") return false;
|
|
99
|
+
if (!status.enabled) return false;
|
|
100
|
+
if (status.fallback) {
|
|
101
|
+
if (!warnedFallback) {
|
|
102
|
+
warnedFallback = true;
|
|
103
|
+
logger.warn(
|
|
104
|
+
`[Farm.js] ${formatFarmRscFallbackMessage(status.missingPackages, status.blockingKeys)}`
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
if (status.blockingKeys.length > 0) {
|
|
110
|
+
throw new Error(`[Farm.js] ${formatFarmRscBlockingMessage(status.blockingKeys)}`);
|
|
111
|
+
}
|
|
112
|
+
if (status.ignoredKeys.length > 0) {
|
|
113
|
+
logger.warn(
|
|
114
|
+
`[Farm.js] experimental.serverComponents runs on the RSC pipeline, which does not run ${formatKeys(
|
|
115
|
+
status.ignoredKeys
|
|
116
|
+
)} yet. ${status.ignoredKeys.length === 1 ? "It is" : "They are"} ignored.`
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
__name(farmAppUsesRscPipeline, "farmAppUsesRscPipeline");
|
|
122
|
+
|
|
123
|
+
export {
|
|
124
|
+
FARM_RSC_PACKAGES,
|
|
125
|
+
FARM_RSC_INSTALL_HINT,
|
|
126
|
+
farmConfigUsesServerComponents,
|
|
127
|
+
findFarmAppPackageDir,
|
|
128
|
+
inspectFarmServerComponents,
|
|
129
|
+
formatFarmRscFallbackMessage,
|
|
130
|
+
formatFarmRscBlockingMessage,
|
|
131
|
+
farmAppUsesRscPipeline
|
|
132
|
+
};
|