@farm.js/core 0.1.0-beta.95 → 0.1.0-beta.97
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/after.cjs +1 -1
- package/dist/after.mjs +1 -1
- package/dist/agent-runtime.d.mts +3 -2
- package/dist/agent-runtime.d.ts +3 -2
- package/dist/api/route-manager.cjs +43 -4
- package/dist/api/route-manager.d.mts +4 -3
- package/dist/api/route-manager.d.ts +4 -3
- package/dist/api/route-manager.mjs +7 -7
- package/dist/api/runtime.cjs +43 -4
- package/dist/api/runtime.d.mts +1 -1
- package/dist/api/runtime.d.ts +1 -1
- package/dist/api/runtime.mjs +5 -5
- package/dist/api.cjs +352 -109
- package/dist/api.d.mts +7 -6
- package/dist/api.d.ts +7 -6
- package/dist/api.mjs +19 -12
- package/dist/{app-CIIEvA4r.d.ts → app-CIOx3LvY.d.ts} +4 -4
- package/dist/{app-O4AEC1OH.d.mts → app-DBd6437H.d.mts} +4 -4
- package/dist/app-markdown.d.mts +4 -3
- package/dist/app-markdown.d.ts +4 -3
- package/dist/cache.cjs +42 -4
- package/dist/cache.d.mts +68 -1
- package/dist/cache.d.ts +68 -1
- package/dist/cache.mjs +3 -3
- package/dist/{chunk-AXVJCMVF.mjs → chunk-2HDOV47R.mjs} +3 -3
- package/dist/chunk-2HDOV47R.mjs.map +1 -0
- package/dist/{chunk-RBRLLZL5.mjs → chunk-34IAPZBG.mjs} +16 -3
- package/dist/chunk-34IAPZBG.mjs.map +1 -0
- package/dist/{chunk-VV24CC42.mjs → chunk-35NPLKQJ.mjs} +2 -2
- package/dist/{chunk-D7QH7MDU.mjs → chunk-3TWQERDE.mjs} +5 -4
- package/dist/chunk-3TWQERDE.mjs.map +1 -0
- package/dist/{chunk-RWYRFCLG.mjs → chunk-4X57GXQA.mjs} +2 -2
- package/dist/{chunk-KOTSX5JH.mjs → chunk-52BR7LTX.mjs} +30 -21
- package/dist/chunk-52BR7LTX.mjs.map +1 -0
- package/dist/{chunk-SALMKQXH.mjs → chunk-6EJHNHH4.mjs} +80 -27
- package/dist/chunk-6EJHNHH4.mjs.map +1 -0
- package/dist/{chunk-ZFNK77WN.mjs → chunk-6JNGOC37.mjs} +2 -2
- package/dist/{after.cjs.map → chunk-6JNGOC37.mjs.map} +1 -1
- package/dist/{chunk-MOW47IF5.mjs → chunk-6UYVU46O.mjs} +2 -2
- package/dist/{chunk-7MABZJIM.mjs → chunk-7PYVLJ4J.mjs} +1 -1
- package/dist/chunk-7PYVLJ4J.mjs.map +1 -0
- package/dist/{chunk-FLHLPB57.mjs → chunk-D7F7YZ7L.mjs} +93 -67
- package/dist/chunk-D7F7YZ7L.mjs.map +1 -0
- package/dist/chunk-DU3PKDVQ.mjs +35 -0
- package/dist/chunk-DU3PKDVQ.mjs.map +1 -0
- package/dist/{chunk-SCFX4UTD.mjs → chunk-EHTUKVSW.mjs} +1 -1
- package/dist/chunk-EHTUKVSW.mjs.map +1 -0
- package/dist/{chunk-KWCNQUH5.mjs → chunk-EPDIF432.mjs} +526 -50
- package/dist/chunk-EPDIF432.mjs.map +1 -0
- package/dist/{chunk-A3636IHN.mjs → chunk-FP5Q67FO.mjs} +167 -96
- package/dist/chunk-FP5Q67FO.mjs.map +1 -0
- package/dist/{chunk-HHZAOTQD.mjs → chunk-GJ7W6LNK.mjs} +7 -6
- package/dist/chunk-GJ7W6LNK.mjs.map +1 -0
- package/dist/{chunk-RLGUZ3HS.mjs → chunk-I3OOUWO5.mjs} +3 -3
- package/dist/{chunk-75CGAL6E.mjs → chunk-IZBX2TEU.mjs} +217 -105
- package/dist/chunk-IZBX2TEU.mjs.map +1 -0
- package/dist/{chunk-22VG4DFJ.mjs → chunk-J3MPQ4MQ.mjs} +2 -2
- package/dist/{chunk-22VG4DFJ.mjs.map → chunk-J3MPQ4MQ.mjs.map} +1 -1
- package/dist/{chunk-2LS3KKE7.mjs → chunk-JV7JUD7Q.mjs} +4 -4
- package/dist/{chunk-Q3OX763A.mjs → chunk-LXDASSTE.mjs} +2 -2
- package/dist/{chunk-ZRBCBOEX.mjs → chunk-N2FY2QZ7.mjs} +28 -3
- package/dist/chunk-N2FY2QZ7.mjs.map +1 -0
- package/dist/{chunk-MRVJCLYQ.mjs → chunk-PSQ7N4XP.mjs} +4 -2
- package/dist/chunk-PSQ7N4XP.mjs.map +1 -0
- package/dist/{chunk-HVG3HLQZ.mjs → chunk-Q7WGOOAI.mjs} +3 -3
- package/dist/{chunk-WTYAPO5I.mjs → chunk-RCNWMEBT.mjs} +3 -2
- package/dist/{chunk-WTYAPO5I.mjs.map → chunk-RCNWMEBT.mjs.map} +1 -1
- package/dist/{chunk-3INDBMUU.mjs → chunk-TGDIACZT.mjs} +2 -2
- package/dist/{chunk-WB75GIX2.mjs → chunk-TQTB33JS.mjs} +14 -3
- package/dist/chunk-TQTB33JS.mjs.map +1 -0
- package/dist/{chunk-MH27UH72.mjs → chunk-TT3E2JOF.mjs} +3 -3
- package/dist/{chunk-UWRGX3J3.mjs → chunk-UMUWR5XA.mjs} +2 -2
- package/dist/{chunk-XTLLHCWU.mjs → chunk-V4VRLVLW.mjs} +52 -31
- package/dist/chunk-V4VRLVLW.mjs.map +1 -0
- package/dist/{chunk-EXCGBERG.mjs → chunk-WD2EBM3I.mjs} +79 -17
- package/dist/chunk-WD2EBM3I.mjs.map +1 -0
- package/dist/{chunk-DLBUAJTK.mjs → chunk-WMJGA32P.mjs} +74 -5
- package/dist/chunk-WMJGA32P.mjs.map +1 -0
- package/dist/{chunk-TKQCJMY7.mjs → chunk-X4SFHKFH.mjs} +7 -4
- package/dist/{chunk-TKQCJMY7.mjs.map → chunk-X4SFHKFH.mjs.map} +1 -1
- package/dist/{chunk-Q7GPJZCO.mjs → chunk-YIBV77KZ.mjs} +26 -7
- package/dist/chunk-YIBV77KZ.mjs.map +1 -0
- package/dist/client/lifecycle.mjs +2 -2
- package/dist/{client-mcMC334J.d.mts → client-DWoLZ3QU.d.mts} +52 -5
- package/dist/{client-d5ONQ-Pd.d.ts → client-DuQuQC1h.d.ts} +52 -5
- package/dist/client-cache-BMxuFqwH.d.ts +18 -0
- package/dist/client-cache-CCK-fCe0.d.mts +18 -0
- package/dist/{client-plugins-BvClItiL.d.mts → client-plugins-B6-07YmP.d.mts} +52 -99
- package/dist/{client-plugins-B9Sq-iMg.d.ts → client-plugins-By6MVUX-.d.ts} +52 -99
- package/dist/client-plugins.cjs +1 -1
- package/dist/client-plugins.d.mts +3 -2
- package/dist/client-plugins.d.ts +3 -2
- package/dist/client-plugins.mjs +2 -2
- package/dist/client.cjs +1046 -211
- package/dist/client.d.mts +136 -18
- package/dist/client.d.ts +136 -18
- package/dist/client.mjs +32 -15
- package/dist/config.d.mts +3 -2
- package/dist/config.d.ts +3 -2
- package/dist/{devtools-S52RRRMN.mjs → devtools-XWZX6CCL.mjs} +5 -5
- package/dist/{devtools-client-3XRTBND5.mjs → devtools-client-Z7QQA3Q2.mjs} +56 -17
- package/dist/devtools-client-Z7QQA3Q2.mjs.map +1 -0
- package/dist/{devtools-ui-NJKFORTG.mjs → devtools-ui-2HG5M4EL.mjs} +3 -1
- package/dist/devtools-ui-2HG5M4EL.mjs.map +1 -0
- package/dist/docs.cjs +24 -5
- package/dist/docs.mjs +5 -5
- package/dist/i18n/server.cjs +13 -2
- package/dist/i18n/server.d.mts +2 -2
- package/dist/i18n/server.d.ts +2 -2
- package/dist/i18n/server.mjs +1 -1
- package/dist/index.cjs +1928 -894
- package/dist/index.d.mts +139 -21
- package/dist/index.d.ts +139 -21
- package/dist/index.mjs +57 -34
- package/dist/index.mjs.map +1 -1
- package/dist/integration-api-BT024nuJ.d.mts +97 -0
- package/dist/integration-api-BT024nuJ.d.ts +97 -0
- package/dist/integrations.d.mts +3 -2
- package/dist/integrations.d.ts +3 -2
- package/dist/internal/build-runtime.cjs +764 -547
- package/dist/internal/build-runtime.d.mts +5 -4
- package/dist/internal/build-runtime.d.ts +5 -4
- package/dist/internal/build-runtime.mjs +16 -16
- package/dist/internal/client-runtime.cjs +1 -1
- package/dist/internal/client-runtime.mjs +2 -2
- package/dist/internal/config-runtime.cjs +4 -1
- package/dist/internal/config-runtime.d.mts +4 -3
- package/dist/internal/config-runtime.d.ts +4 -3
- package/dist/internal/config-runtime.mjs +4 -4
- package/dist/internal/product-telemetry-runtime.cjs +1 -1
- package/dist/internal/product-telemetry-runtime.mjs +1 -1
- package/dist/internal/production-runtime.cjs +29 -3
- package/dist/internal/production-runtime.d.mts +8 -7
- package/dist/internal/production-runtime.d.ts +8 -7
- package/dist/internal/production-runtime.mjs +5 -5
- package/dist/{metadata-route-yV4U6X8h.d.ts → metadata-route-8_V3UonT.d.ts} +1 -1
- package/dist/{metadata-route-p4K1l92V.d.mts → metadata-route-CWP_HjGU.d.mts} +1 -1
- package/dist/middleware.cjs +28 -2
- package/dist/middleware.d.mts +5 -4
- package/dist/middleware.d.ts +5 -4
- package/dist/middleware.mjs +4 -4
- package/dist/navigation.cjs +3 -1
- package/dist/navigation.mjs +3 -3
- package/dist/observability.cjs +27 -2
- package/dist/observability.mjs +1 -1
- package/dist/plugin.cjs +528 -349
- package/dist/plugin.d.mts +3 -2
- package/dist/plugin.d.ts +3 -2
- package/dist/plugin.mjs +13 -13
- package/dist/{production-runtime-IkB0Qj4i.d.mts → production-runtime-BGRH1dKG.d.mts} +1 -1
- package/dist/{production-runtime-0JTch4_d.d.ts → production-runtime-CdmzsDax.d.ts} +1 -1
- package/dist/query/client.cjs +68 -29
- package/dist/query/client.mjs +69 -30
- package/dist/query/client.mjs.map +1 -1
- package/dist/{render-plan-Dc8CjNI7.d.ts → render-plan-0GeHiGVZ.d.ts} +1 -1
- package/dist/{render-plan-CU31j-Jk.d.mts → render-plan-DLxJYAA5.d.mts} +1 -1
- package/dist/renderer-client.cjs +169 -26
- package/dist/renderer-client.d.mts +7 -6
- package/dist/renderer-client.d.ts +7 -6
- package/dist/renderer-client.mjs +16 -19
- package/dist/renderer-client.mjs.map +1 -1
- package/dist/{request-BXa1KY8i.d.mts → request-BCNXSXLh.d.mts} +1 -1
- package/dist/{request-CUUBujZt.d.ts → request-BstWbZ6O.d.ts} +1 -1
- package/dist/request.d.mts +4 -3
- package/dist/request.d.ts +4 -3
- package/dist/{route-Y8lfz1wF.d.ts → route-4pd-EVtw.d.ts} +45 -50
- package/dist/{route-Cq3aObmj.d.mts → route-CvEr4Uc9.d.mts} +45 -50
- package/dist/routes.cjs +27 -2
- package/dist/routes.d.mts +3 -2
- package/dist/routes.d.ts +3 -2
- package/dist/routes.mjs +4 -4
- package/dist/{runtime-j1S3sDTh.d.ts → runtime-BgDQzBiu.d.ts} +1 -0
- package/dist/{runtime-DDwvDtS4.d.mts → runtime-CV2UCV-5.d.mts} +1 -0
- package/dist/server-action-security.mjs +2 -2
- package/dist/server-fn-client.cjs +102 -26
- package/dist/server-fn-client.d.mts +6 -0
- package/dist/server-fn-client.d.ts +6 -0
- package/dist/server-fn-client.mjs +2 -1
- package/dist/server-fn.cjs +42 -4
- package/dist/server-fn.mjs +5 -5
- package/dist/server-plugins.d.mts +4 -3
- package/dist/server-plugins.d.ts +4 -3
- package/dist/server-query-client.cjs +195 -34
- package/dist/server-query-client.d.mts +3 -3
- package/dist/server-query-client.d.ts +3 -3
- package/dist/server-query-client.mjs +7 -7
- package/dist/{server-query-runtime-3zAj77yv.d.ts → server-query-runtime-DXRNhX_3.d.ts} +2 -0
- package/dist/{server-query-runtime-B50KAcj5.d.mts → server-query-runtime-aP52iuL5.d.mts} +2 -0
- package/dist/server-query.cjs +44 -5
- package/dist/server-query.d.mts +4 -0
- package/dist/server-query.d.ts +4 -0
- package/dist/server-query.mjs +7 -7
- package/dist/server.cjs +553 -370
- package/dist/server.d.mts +11 -10
- package/dist/server.d.ts +11 -10
- package/dist/server.mjs +17 -17
- package/dist/{spa-router-CyLkwst6.d.mts → spa-router-BeyAVSc6.d.mts} +1 -1
- package/dist/{spa-router-BkqGXaV_.d.ts → spa-router-COgu4txb.d.ts} +1 -1
- package/dist/testing.cjs +27 -2
- package/dist/testing.d.mts +3 -2
- package/dist/testing.d.ts +3 -2
- package/dist/testing.mjs +9 -9
- package/dist/{utils-NKR6SoNv.d.mts → utils-DL2VwDQl.d.mts} +1 -1
- package/dist/{utils-B2OHrb9F.d.ts → utils-DkU2c_1B.d.ts} +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +536 -353
- package/dist/vite.d.mts +3 -2
- package/dist/vite.d.ts +3 -2
- package/dist/vite.mjs +17 -13
- package/package.json +17 -17
- package/types/client.d.ts +115 -10
- package/dist/agent-runtime.cjs.map +0 -1
- package/dist/api/route-manager.cjs.map +0 -1
- package/dist/api/runtime.cjs.map +0 -1
- package/dist/api.cjs.map +0 -1
- package/dist/app-markdown.cjs.map +0 -1
- package/dist/cache.cjs.map +0 -1
- package/dist/chunk-75CGAL6E.mjs.map +0 -1
- package/dist/chunk-7MABZJIM.mjs.map +0 -1
- package/dist/chunk-A3636IHN.mjs.map +0 -1
- package/dist/chunk-AXVJCMVF.mjs.map +0 -1
- package/dist/chunk-D7QH7MDU.mjs.map +0 -1
- package/dist/chunk-DLBUAJTK.mjs.map +0 -1
- package/dist/chunk-EXCGBERG.mjs.map +0 -1
- package/dist/chunk-FLHLPB57.mjs.map +0 -1
- package/dist/chunk-HHZAOTQD.mjs.map +0 -1
- package/dist/chunk-KOTSX5JH.mjs.map +0 -1
- package/dist/chunk-KWCNQUH5.mjs.map +0 -1
- package/dist/chunk-MRVJCLYQ.mjs.map +0 -1
- package/dist/chunk-Q7GPJZCO.mjs.map +0 -1
- package/dist/chunk-RBRLLZL5.mjs.map +0 -1
- package/dist/chunk-SALMKQXH.mjs.map +0 -1
- package/dist/chunk-SCFX4UTD.mjs.map +0 -1
- package/dist/chunk-WB75GIX2.mjs.map +0 -1
- package/dist/chunk-XTLLHCWU.mjs.map +0 -1
- package/dist/chunk-ZFNK77WN.mjs.map +0 -1
- package/dist/chunk-ZRBCBOEX.mjs.map +0 -1
- package/dist/client/lifecycle.cjs.map +0 -1
- package/dist/client-cache-CopR_MaI.d.mts +0 -6
- package/dist/client-cache-Djy_TlE8.d.ts +0 -6
- package/dist/client-plugins.cjs.map +0 -1
- package/dist/client.cjs.map +0 -1
- package/dist/config.cjs.map +0 -1
- package/dist/cron.cjs.map +0 -1
- package/dist/deferred.cjs.map +0 -1
- package/dist/deployment.cjs.map +0 -1
- package/dist/devtools-client-3XRTBND5.mjs.map +0 -1
- package/dist/devtools-ui-NJKFORTG.mjs.map +0 -1
- package/dist/docs.cjs.map +0 -1
- package/dist/env-types.cjs.map +0 -1
- package/dist/env.cjs.map +0 -1
- package/dist/environment/vite.cjs.map +0 -1
- package/dist/environment.cjs.map +0 -1
- package/dist/font.cjs.map +0 -1
- package/dist/headers.cjs.map +0 -1
- package/dist/i18n/client.cjs.map +0 -1
- package/dist/i18n/index.cjs.map +0 -1
- package/dist/i18n/server.cjs.map +0 -1
- package/dist/image/server.cjs.map +0 -1
- package/dist/image/sharp.cjs.map +0 -1
- package/dist/image.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/instrumentation.cjs.map +0 -1
- package/dist/integrations.cjs.map +0 -1
- package/dist/internal/build-runtime.cjs.map +0 -1
- package/dist/internal/client-runtime.cjs.map +0 -1
- package/dist/internal/config-runtime.cjs.map +0 -1
- package/dist/internal/isolated-boundary.cjs.map +0 -1
- package/dist/internal/metadata-image-runtime.cjs.map +0 -1
- package/dist/internal/product-telemetry-runtime.cjs.map +0 -1
- package/dist/internal/production-node-env.cjs.map +0 -1
- package/dist/internal/production-runtime.cjs.map +0 -1
- package/dist/markdown.cjs.map +0 -1
- package/dist/middleware.cjs.map +0 -1
- package/dist/navigation.cjs.map +0 -1
- package/dist/observability.cjs.map +0 -1
- package/dist/plugin.cjs.map +0 -1
- package/dist/query/client.cjs.map +0 -1
- package/dist/query/index.cjs.map +0 -1
- package/dist/query/parsers.cjs.map +0 -1
- package/dist/query/server.cjs.map +0 -1
- package/dist/renderer/react/client.cjs.map +0 -1
- package/dist/renderer/react/server.cjs.map +0 -1
- package/dist/renderer/react/vite.cjs.map +0 -1
- package/dist/renderer-client.cjs.map +0 -1
- package/dist/renderer.cjs.map +0 -1
- package/dist/request.cjs.map +0 -1
- package/dist/router.cjs.map +0 -1
- package/dist/routes.cjs.map +0 -1
- package/dist/server-action-security.cjs.map +0 -1
- package/dist/server-fn-client.cjs.map +0 -1
- package/dist/server-fn.cjs.map +0 -1
- package/dist/server-plugins.cjs.map +0 -1
- package/dist/server-query-client.cjs.map +0 -1
- package/dist/server-query.cjs.map +0 -1
- package/dist/server.cjs.map +0 -1
- package/dist/storage.cjs.map +0 -1
- package/dist/testing.cjs.map +0 -1
- package/dist/theme/client.cjs.map +0 -1
- package/dist/theme/index.cjs.map +0 -1
- package/dist/theme/runtime.cjs.map +0 -1
- package/dist/theme/server.cjs.map +0 -1
- package/dist/version.cjs.map +0 -1
- package/dist/vite.cjs.map +0 -1
- package/dist/workflows.cjs.map +0 -1
- /package/dist/{chunk-VV24CC42.mjs.map → chunk-35NPLKQJ.mjs.map} +0 -0
- /package/dist/{chunk-RWYRFCLG.mjs.map → chunk-4X57GXQA.mjs.map} +0 -0
- /package/dist/{chunk-MOW47IF5.mjs.map → chunk-6UYVU46O.mjs.map} +0 -0
- /package/dist/{chunk-RLGUZ3HS.mjs.map → chunk-I3OOUWO5.mjs.map} +0 -0
- /package/dist/{chunk-2LS3KKE7.mjs.map → chunk-JV7JUD7Q.mjs.map} +0 -0
- /package/dist/{chunk-Q3OX763A.mjs.map → chunk-LXDASSTE.mjs.map} +0 -0
- /package/dist/{chunk-HVG3HLQZ.mjs.map → chunk-Q7WGOOAI.mjs.map} +0 -0
- /package/dist/{chunk-3INDBMUU.mjs.map → chunk-TGDIACZT.mjs.map} +0 -0
- /package/dist/{chunk-MH27UH72.mjs.map → chunk-TT3E2JOF.mjs.map} +0 -0
- /package/dist/{chunk-UWRGX3J3.mjs.map → chunk-UMUWR5XA.mjs.map} +0 -0
- /package/dist/{devtools-S52RRRMN.mjs.map → devtools-XWZX6CCL.mjs.map} +0 -0
package/dist/api.cjs
CHANGED
|
@@ -75,7 +75,13 @@ function recordFarmEventTrace(event) {
|
|
|
75
75
|
activeSpan.addEvent(event.type, toEventAttributes(event), event.timestamp);
|
|
76
76
|
}
|
|
77
77
|
const error = event.type === "request.error" ? void 0 : getEventError(event);
|
|
78
|
-
if (error !== void 0)
|
|
78
|
+
if (error !== void 0) {
|
|
79
|
+
if (event.type === "render.error") {
|
|
80
|
+
recordSpanException(activeSpan, error);
|
|
81
|
+
} else {
|
|
82
|
+
recordSpanError(activeSpan, error);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
79
85
|
}
|
|
80
86
|
const completedTraceContext = recordCompletedEventSpan(event, activeContext);
|
|
81
87
|
return traceContext ?? completedTraceContext;
|
|
@@ -169,12 +175,25 @@ function getCompletedSpanDescriptor(event) {
|
|
|
169
175
|
return void 0;
|
|
170
176
|
}
|
|
171
177
|
}
|
|
178
|
+
function hashFarmCacheKey(value) {
|
|
179
|
+
let hash = 2166136261;
|
|
180
|
+
for (let index = 0; index < value.length; index++) {
|
|
181
|
+
hash ^= value.charCodeAt(index);
|
|
182
|
+
hash = Math.imul(hash, 16777619);
|
|
183
|
+
}
|
|
184
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
185
|
+
}
|
|
172
186
|
function toEventAttributes(event) {
|
|
173
187
|
const attributes = {};
|
|
188
|
+
const redactKey = typeof event.type === "string" && event.type.startsWith("cache.");
|
|
174
189
|
for (const [key, value] of Object.entries(event)) {
|
|
175
190
|
if (key === "timestamp" || key === "level" || key === "error" || key === "traceId" || key === "spanId" || key === "traceSampled" || value === void 0) {
|
|
176
191
|
continue;
|
|
177
192
|
}
|
|
193
|
+
if (redactKey && key === "key" && typeof value === "string") {
|
|
194
|
+
attributes["farm.key_hash"] = hashFarmCacheKey(value);
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
178
197
|
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
179
198
|
attributes[`farm.${key}`] = value;
|
|
180
199
|
} else if (Array.isArray(value)) {
|
|
@@ -192,9 +211,13 @@ function toEventAttributes(event) {
|
|
|
192
211
|
function getEventError(event) {
|
|
193
212
|
return "error" in event ? event.error : void 0;
|
|
194
213
|
}
|
|
195
|
-
function
|
|
214
|
+
function recordSpanException(span, error) {
|
|
196
215
|
const normalized = error instanceof Error ? error : new Error(String(error));
|
|
197
216
|
span.recordException(normalized);
|
|
217
|
+
return normalized;
|
|
218
|
+
}
|
|
219
|
+
function recordSpanError(span, error) {
|
|
220
|
+
const normalized = recordSpanException(span, error);
|
|
198
221
|
span.setStatus({ code: import_api.SpanStatusCode.ERROR, message: normalized.message });
|
|
199
222
|
}
|
|
200
223
|
function setResponseStatus(span, status) {
|
|
@@ -245,8 +268,10 @@ var init_tracing = __esm({
|
|
|
245
268
|
__name(recordFarmEventTrace, "recordFarmEventTrace");
|
|
246
269
|
__name(recordCompletedEventSpan, "recordCompletedEventSpan");
|
|
247
270
|
__name(getCompletedSpanDescriptor, "getCompletedSpanDescriptor");
|
|
271
|
+
__name(hashFarmCacheKey, "hashFarmCacheKey");
|
|
248
272
|
__name(toEventAttributes, "toEventAttributes");
|
|
249
273
|
__name(getEventError, "getEventError");
|
|
274
|
+
__name(recordSpanException, "recordSpanException");
|
|
250
275
|
__name(recordSpanError, "recordSpanError");
|
|
251
276
|
__name(setResponseStatus, "setResponseStatus");
|
|
252
277
|
__name(getSpanTraceContext, "getSpanTraceContext");
|
|
@@ -393,15 +418,27 @@ function getFarmCacheInvalidationState() {
|
|
|
393
418
|
taskListeners: /* @__PURE__ */ new Set()
|
|
394
419
|
});
|
|
395
420
|
}
|
|
421
|
+
function warnFarmCacheListenerError(scope, error) {
|
|
422
|
+
const detail = error instanceof Error ? error.stack ?? error.message : String(error);
|
|
423
|
+
console.warn(`[farm:cache] ${scope} listener failed: ${detail}`);
|
|
424
|
+
}
|
|
396
425
|
function notifyFarmCacheInvalidation(key) {
|
|
397
426
|
if (typeof key !== "string" || key.length === 0) return;
|
|
398
427
|
for (const listener of getFarmCacheInvalidationState().listeners) {
|
|
399
|
-
|
|
428
|
+
try {
|
|
429
|
+
listener(key);
|
|
430
|
+
} catch (error) {
|
|
431
|
+
warnFarmCacheListenerError("invalidation", error);
|
|
432
|
+
}
|
|
400
433
|
}
|
|
401
434
|
}
|
|
402
435
|
function notifyFarmCacheTask(task) {
|
|
403
436
|
for (const listener of getFarmCacheInvalidationState().taskListeners) {
|
|
404
|
-
|
|
437
|
+
try {
|
|
438
|
+
listener(task);
|
|
439
|
+
} catch (error) {
|
|
440
|
+
warnFarmCacheListenerError("task", error);
|
|
441
|
+
}
|
|
405
442
|
}
|
|
406
443
|
}
|
|
407
444
|
function applyFarmCacheInvalidations(keys) {
|
|
@@ -443,6 +480,7 @@ var init_cache_invalidation = __esm({
|
|
|
443
480
|
FARM_CACHE_INVALIDATION_STATE = /* @__PURE__ */ Symbol.for("farm.cacheInvalidationState");
|
|
444
481
|
globalState = globalThis;
|
|
445
482
|
__name(getFarmCacheInvalidationState, "getFarmCacheInvalidationState");
|
|
483
|
+
__name(warnFarmCacheListenerError, "warnFarmCacheListenerError");
|
|
446
484
|
__name(notifyFarmCacheInvalidation, "notifyFarmCacheInvalidation");
|
|
447
485
|
__name(notifyFarmCacheTask, "notifyFarmCacheTask");
|
|
448
486
|
__name(applyFarmCacheInvalidations, "applyFarmCacheInvalidations");
|
|
@@ -2250,6 +2288,7 @@ __export(api_exports, {
|
|
|
2250
2288
|
POST: () => POST,
|
|
2251
2289
|
PUT: () => PUT,
|
|
2252
2290
|
QUERY: () => QUERY,
|
|
2291
|
+
applyServerFnOptimisticUpdates: () => applyServerFnOptimisticUpdates,
|
|
2253
2292
|
createAPIClient: () => createAPIClient,
|
|
2254
2293
|
createApiClients: () => createApiClients,
|
|
2255
2294
|
createEndpoint: () => createEndpoint,
|
|
@@ -2278,6 +2317,8 @@ __export(api_exports, {
|
|
|
2278
2317
|
resolveFarmAPIRequestURL: () => resolveFarmAPIRequestURL,
|
|
2279
2318
|
resolveFarmAPIServerBasePath: () => resolveFarmAPIServerBasePath,
|
|
2280
2319
|
resolvePluginRoutes: () => resolvePluginRoutes,
|
|
2320
|
+
resolveServerFnInvalidateTargets: () => resolveServerFnInvalidateTargets,
|
|
2321
|
+
settleServerFnOptimisticUpdates: () => settleServerFnOptimisticUpdates,
|
|
2281
2322
|
toFormData: () => toFormData
|
|
2282
2323
|
});
|
|
2283
2324
|
module.exports = __toCommonJS(api_exports);
|
|
@@ -2323,12 +2364,15 @@ function jsonStream(source, init = {}) {
|
|
|
2323
2364
|
const iterator = toAsyncIterator(source);
|
|
2324
2365
|
const encoder = new TextEncoder();
|
|
2325
2366
|
let finished = false;
|
|
2367
|
+
let cleanup;
|
|
2368
|
+
const closeSource = /* @__PURE__ */ __name((reason) => cleanup ?? (cleanup = Promise.resolve().then(() => iterator.return?.(reason))), "closeSource");
|
|
2326
2369
|
const body = new ReadableStream(
|
|
2327
2370
|
{
|
|
2328
2371
|
async pull(controller) {
|
|
2329
2372
|
if (finished) return;
|
|
2330
2373
|
try {
|
|
2331
2374
|
const next = await iterator.next();
|
|
2375
|
+
if (finished) return;
|
|
2332
2376
|
if (next.done) {
|
|
2333
2377
|
finished = true;
|
|
2334
2378
|
controller.close();
|
|
@@ -2337,9 +2381,10 @@ function jsonStream(source, init = {}) {
|
|
|
2337
2381
|
controller.enqueue(encoder.encode(`${JSON.stringify(next.value)}
|
|
2338
2382
|
`));
|
|
2339
2383
|
} catch (error) {
|
|
2384
|
+
if (finished) return;
|
|
2340
2385
|
finished = true;
|
|
2341
2386
|
try {
|
|
2342
|
-
await
|
|
2387
|
+
await closeSource(error);
|
|
2343
2388
|
} catch {
|
|
2344
2389
|
}
|
|
2345
2390
|
controller.error(error);
|
|
@@ -2347,7 +2392,7 @@ function jsonStream(source, init = {}) {
|
|
|
2347
2392
|
},
|
|
2348
2393
|
async cancel(reason) {
|
|
2349
2394
|
finished = true;
|
|
2350
|
-
await
|
|
2395
|
+
await closeSource(reason);
|
|
2351
2396
|
}
|
|
2352
2397
|
},
|
|
2353
2398
|
{
|
|
@@ -2380,6 +2425,7 @@ function readJSONStream(response) {
|
|
|
2380
2425
|
const decoder = new TextDecoder();
|
|
2381
2426
|
let buffer = "";
|
|
2382
2427
|
let completed = false;
|
|
2428
|
+
let cancelled = false;
|
|
2383
2429
|
let claimed = false;
|
|
2384
2430
|
let released = false;
|
|
2385
2431
|
const releaseReader = /* @__PURE__ */ __name(() => {
|
|
@@ -2399,39 +2445,54 @@ function readJSONStream(response) {
|
|
|
2399
2445
|
throw error;
|
|
2400
2446
|
}
|
|
2401
2447
|
}, "parseLine");
|
|
2402
|
-
const
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
releaseReader();
|
|
2417
|
-
return { done: true, value: void 0 };
|
|
2418
|
-
}
|
|
2419
|
-
return { done: false, value: await parseLine(line) };
|
|
2420
|
-
}
|
|
2421
|
-
let chunk;
|
|
2422
|
-
try {
|
|
2423
|
-
chunk = await reader.read();
|
|
2424
|
-
} catch (error) {
|
|
2425
|
-
completed = true;
|
|
2426
|
-
buffer = "";
|
|
2448
|
+
const readNext = /* @__PURE__ */ __name(async () => {
|
|
2449
|
+
while (true) {
|
|
2450
|
+
if (cancelled) return { done: true, value: void 0 };
|
|
2451
|
+
const lineEnd = buffer.indexOf("\n");
|
|
2452
|
+
if (lineEnd >= 0) {
|
|
2453
|
+
const line = buffer.slice(0, lineEnd).trim();
|
|
2454
|
+
buffer = buffer.slice(lineEnd + 1);
|
|
2455
|
+
if (!line) continue;
|
|
2456
|
+
return { done: false, value: await parseLine(line) };
|
|
2457
|
+
}
|
|
2458
|
+
if (completed) {
|
|
2459
|
+
const line = buffer.trim();
|
|
2460
|
+
buffer = "";
|
|
2461
|
+
if (!line) {
|
|
2427
2462
|
releaseReader();
|
|
2428
|
-
|
|
2463
|
+
return { done: true, value: void 0 };
|
|
2429
2464
|
}
|
|
2430
|
-
|
|
2431
|
-
|
|
2465
|
+
return { done: false, value: await parseLine(line) };
|
|
2466
|
+
}
|
|
2467
|
+
let chunk;
|
|
2468
|
+
try {
|
|
2469
|
+
chunk = await reader.read();
|
|
2470
|
+
} catch (error) {
|
|
2471
|
+
if (cancelled) return { done: true, value: void 0 };
|
|
2472
|
+
completed = true;
|
|
2473
|
+
buffer = "";
|
|
2474
|
+
releaseReader();
|
|
2475
|
+
throw error;
|
|
2432
2476
|
}
|
|
2477
|
+
if (cancelled) return { done: true, value: void 0 };
|
|
2478
|
+
completed = chunk.done;
|
|
2479
|
+
buffer += decoder.decode(chunk.value, { stream: !chunk.done });
|
|
2480
|
+
}
|
|
2481
|
+
}, "readNext");
|
|
2482
|
+
let readQueue = Promise.resolve();
|
|
2483
|
+
const iterator = {
|
|
2484
|
+
next() {
|
|
2485
|
+
const result = readQueue.then(readNext);
|
|
2486
|
+
readQueue = result.then(
|
|
2487
|
+
() => {
|
|
2488
|
+
},
|
|
2489
|
+
() => {
|
|
2490
|
+
}
|
|
2491
|
+
);
|
|
2492
|
+
return result;
|
|
2433
2493
|
},
|
|
2434
2494
|
async return() {
|
|
2495
|
+
cancelled = true;
|
|
2435
2496
|
completed = true;
|
|
2436
2497
|
buffer = "";
|
|
2437
2498
|
if (!released) {
|
|
@@ -2447,6 +2508,7 @@ function readJSONStream(response) {
|
|
|
2447
2508
|
return {
|
|
2448
2509
|
response,
|
|
2449
2510
|
async cancel(reason) {
|
|
2511
|
+
cancelled = true;
|
|
2450
2512
|
completed = true;
|
|
2451
2513
|
buffer = "";
|
|
2452
2514
|
if (!released) {
|
|
@@ -2573,6 +2635,7 @@ function createEndpoint(pathOrOptions, optionsOrHandler, maybeHandler) {
|
|
|
2573
2635
|
body: options.body,
|
|
2574
2636
|
inputBody: isMultipartSchema(options.body) ? "form-data" : options.body,
|
|
2575
2637
|
query: options.query,
|
|
2638
|
+
inputQuery: options.query,
|
|
2576
2639
|
headers: options.headers,
|
|
2577
2640
|
response: null,
|
|
2578
2641
|
errors
|
|
@@ -4904,7 +4967,8 @@ async function executeServerOperation(operation, input, options, requestOptions,
|
|
|
4904
4967
|
serverRequestOptions?.baseURL ?? options.baseURL,
|
|
4905
4968
|
request
|
|
4906
4969
|
);
|
|
4907
|
-
const
|
|
4970
|
+
const origin = resolveServerBaseURL(void 0, request);
|
|
4971
|
+
const url = new URL(operation.path, new URL(baseURL, origin));
|
|
4908
4972
|
appendQuery(url, input.query);
|
|
4909
4973
|
const headers = new Headers();
|
|
4910
4974
|
appendHeaders(
|
|
@@ -4957,7 +5021,9 @@ async function executeServerOperation(operation, input, options, requestOptions,
|
|
|
4957
5021
|
}
|
|
4958
5022
|
appendIntegrationClientDataHeader(headers, data);
|
|
4959
5023
|
const body = createOperationBody(operation, input.body, headers);
|
|
4960
|
-
const
|
|
5024
|
+
const httpURL = resolveFarmAPIRequestURL(operation.path, baseURL, origin);
|
|
5025
|
+
appendQuery(httpURL, input.query);
|
|
5026
|
+
const response = await (options.fetch ?? fetch)(httpURL.toString(), {
|
|
4961
5027
|
method: operation.method,
|
|
4962
5028
|
headers,
|
|
4963
5029
|
body,
|
|
@@ -5143,6 +5209,7 @@ __name(createServerNamespaceProxy, "createServerNamespaceProxy");
|
|
|
5143
5209
|
// src/client-cache.ts
|
|
5144
5210
|
init_cache();
|
|
5145
5211
|
init_cache_invalidation();
|
|
5212
|
+
var invalidationTrackers = /* @__PURE__ */ new WeakMap();
|
|
5146
5213
|
var cacheFinalizer = typeof FinalizationRegistry === "function" ? new FinalizationRegistry((unsubscribe) => unsubscribe()) : void 0;
|
|
5147
5214
|
function subscribeWeakCache(reference) {
|
|
5148
5215
|
const unsubscribe = subscribeFarmCacheInvalidation((key) => {
|
|
@@ -5158,6 +5225,7 @@ function subscribeWeakCache(reference) {
|
|
|
5158
5225
|
return dispose;
|
|
5159
5226
|
}
|
|
5160
5227
|
__name(subscribeWeakCache, "subscribeWeakCache");
|
|
5228
|
+
var DEFAULT_GC_SWEEP_INTERVAL_MS = 3e4;
|
|
5161
5229
|
var _FarmClientDataCache = class _FarmClientDataCache {
|
|
5162
5230
|
constructor(options = {}) {
|
|
5163
5231
|
this.entries = /* @__PURE__ */ new Map();
|
|
@@ -5165,6 +5233,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
5165
5233
|
this.invalidatedAt = /* @__PURE__ */ new Map();
|
|
5166
5234
|
this.listeners = /* @__PURE__ */ new Map();
|
|
5167
5235
|
this.inflight = /* @__PURE__ */ new Map();
|
|
5236
|
+
this.gcSweepIntervalMs = options.gcSweepIntervalMs ?? DEFAULT_GC_SWEEP_INTERVAL_MS;
|
|
5168
5237
|
if (options.subscribeToInvalidation !== false) {
|
|
5169
5238
|
if (typeof WeakRef === "function") {
|
|
5170
5239
|
const reference = new WeakRef(this);
|
|
@@ -5181,6 +5250,10 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
5181
5250
|
get size() {
|
|
5182
5251
|
return this.entries.size;
|
|
5183
5252
|
}
|
|
5253
|
+
/** @internal Attach or detach the persistence engine's observation sink. */
|
|
5254
|
+
attachPersistence(sink) {
|
|
5255
|
+
this.persistence = sink;
|
|
5256
|
+
}
|
|
5184
5257
|
resolveKey(key) {
|
|
5185
5258
|
let resolved = key;
|
|
5186
5259
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -5196,6 +5269,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
5196
5269
|
if (!entry) return void 0;
|
|
5197
5270
|
if (entry.gcAt !== void 0 && now >= entry.gcAt) {
|
|
5198
5271
|
this.entries.delete(resolved);
|
|
5272
|
+
this.persistence?.onDelete(resolved);
|
|
5199
5273
|
this.emit(resolved);
|
|
5200
5274
|
return void 0;
|
|
5201
5275
|
}
|
|
@@ -5209,6 +5283,8 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
5209
5283
|
this.invalidatedAt.delete(resolved);
|
|
5210
5284
|
}
|
|
5211
5285
|
this.entries.set(resolved, nextEntry);
|
|
5286
|
+
if (nextEntry.gcAt !== void 0) this.scheduleGcSweep();
|
|
5287
|
+
this.persistence?.onSet(resolved, nextEntry);
|
|
5212
5288
|
this.emit(resolved);
|
|
5213
5289
|
return this;
|
|
5214
5290
|
}
|
|
@@ -5216,6 +5292,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
5216
5292
|
const resolved = this.resolveKey(key);
|
|
5217
5293
|
const deleted = this.entries.delete(resolved);
|
|
5218
5294
|
this.inflight.delete(resolved);
|
|
5295
|
+
if (deleted) this.persistence?.onDelete(resolved);
|
|
5219
5296
|
this.emit(resolved);
|
|
5220
5297
|
return deleted;
|
|
5221
5298
|
}
|
|
@@ -5225,11 +5302,16 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
5225
5302
|
this.aliases.clear();
|
|
5226
5303
|
this.invalidatedAt.clear();
|
|
5227
5304
|
this.inflight.clear();
|
|
5305
|
+
this.persistence?.onClear();
|
|
5228
5306
|
for (const key of keys) this.emit(key);
|
|
5229
5307
|
}
|
|
5230
5308
|
dispose() {
|
|
5231
5309
|
this.unsubscribeInvalidation?.();
|
|
5232
5310
|
this.unsubscribeInvalidation = void 0;
|
|
5311
|
+
if (this.gcTimer !== void 0) {
|
|
5312
|
+
clearTimeout(this.gcTimer);
|
|
5313
|
+
this.gcTimer = void 0;
|
|
5314
|
+
}
|
|
5233
5315
|
this.clear();
|
|
5234
5316
|
}
|
|
5235
5317
|
isStale(key, now = Date.now()) {
|
|
@@ -5238,6 +5320,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
5238
5320
|
}
|
|
5239
5321
|
invalidate(key, now = Date.now()) {
|
|
5240
5322
|
const resolved = this.resolveKey(key);
|
|
5323
|
+
for (const keys of invalidationTrackers.get(this) ?? []) keys.add(resolved);
|
|
5241
5324
|
this.invalidatedAt.set(resolved, now);
|
|
5242
5325
|
const entry = this.entries.get(resolved);
|
|
5243
5326
|
if (entry) {
|
|
@@ -5257,8 +5340,9 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
5257
5340
|
const resolvedInvalidatedAt = this.invalidatedAt.get(resolved);
|
|
5258
5341
|
if (aliasEntry && !this.entries.has(resolved)) {
|
|
5259
5342
|
this.entries.set(resolved, aliasEntry);
|
|
5343
|
+
this.persistence?.onSet(resolved, aliasEntry);
|
|
5260
5344
|
}
|
|
5261
|
-
this.entries.delete(alias);
|
|
5345
|
+
if (this.entries.delete(alias)) this.persistence?.onDelete(alias);
|
|
5262
5346
|
this.invalidatedAt.delete(alias);
|
|
5263
5347
|
const invalidatedAt = [aliasInvalidatedAt, resolvedInvalidatedAt].reduce(
|
|
5264
5348
|
(latest, value) => value === void 0 ? latest : latest === void 0 ? value : Math.max(latest, value),
|
|
@@ -5298,7 +5382,9 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
5298
5382
|
listeners.add(listener);
|
|
5299
5383
|
return () => {
|
|
5300
5384
|
listeners.delete(listener);
|
|
5301
|
-
if (listeners.size === 0
|
|
5385
|
+
if (listeners.size === 0 && this.listeners.get(key) === listeners) {
|
|
5386
|
+
this.listeners.delete(key);
|
|
5387
|
+
}
|
|
5302
5388
|
};
|
|
5303
5389
|
}
|
|
5304
5390
|
getInflight(key) {
|
|
@@ -5310,6 +5396,30 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
5310
5396
|
deleteInflight(key) {
|
|
5311
5397
|
this.inflight.delete(this.resolveKey(key));
|
|
5312
5398
|
}
|
|
5399
|
+
scheduleGcSweep() {
|
|
5400
|
+
if (this.gcSweepIntervalMs === false || this.gcTimer !== void 0) return;
|
|
5401
|
+
const timer = setTimeout(() => {
|
|
5402
|
+
this.gcTimer = void 0;
|
|
5403
|
+
this.sweepExpiredEntries();
|
|
5404
|
+
}, this.gcSweepIntervalMs);
|
|
5405
|
+
timer.unref?.();
|
|
5406
|
+
this.gcTimer = timer;
|
|
5407
|
+
}
|
|
5408
|
+
sweepExpiredEntries(now = Date.now()) {
|
|
5409
|
+
const watched = /* @__PURE__ */ new Set();
|
|
5410
|
+
for (const key of this.listeners.keys()) watched.add(this.resolveKey(key));
|
|
5411
|
+
let remaining = false;
|
|
5412
|
+
for (const [key, entry] of this.entries) {
|
|
5413
|
+
if (entry.gcAt === void 0) continue;
|
|
5414
|
+
if (now < entry.gcAt || entry.fetching || this.inflight.has(key) || watched.has(key)) {
|
|
5415
|
+
remaining = true;
|
|
5416
|
+
continue;
|
|
5417
|
+
}
|
|
5418
|
+
this.entries.delete(key);
|
|
5419
|
+
this.persistence?.onDelete(key);
|
|
5420
|
+
}
|
|
5421
|
+
if (remaining) this.scheduleGcSweep();
|
|
5422
|
+
}
|
|
5313
5423
|
emit(key, event) {
|
|
5314
5424
|
this.notifyListeners(key, event);
|
|
5315
5425
|
for (const [alias, target] of this.aliases) {
|
|
@@ -5588,69 +5698,6 @@ function createAPIClientRuntime(options = {}, transport) {
|
|
|
5588
5698
|
let scopedRequestState;
|
|
5589
5699
|
const routeMeta = transport?.routeMeta ?? /* @__PURE__ */ new WeakMap();
|
|
5590
5700
|
let requestCounter = 0;
|
|
5591
|
-
const applyOptimisticLayer = /* @__PURE__ */ __name((entry, layer) => {
|
|
5592
|
-
let data = entry?.data;
|
|
5593
|
-
for (const updater of layer.updaters) data = updater(data);
|
|
5594
|
-
return {
|
|
5595
|
-
data,
|
|
5596
|
-
updatedAt: layer.updatedAt,
|
|
5597
|
-
staleAt: entry?.staleAt ?? layer.staleAt,
|
|
5598
|
-
gcAt: entry?.gcAt ?? layer.gcAt,
|
|
5599
|
-
invalidatedAt: entry?.invalidatedAt
|
|
5600
|
-
};
|
|
5601
|
-
}, "applyOptimisticLayer");
|
|
5602
|
-
const storeOptimisticEntry = /* @__PURE__ */ __name((cacheState, key, stack, entry) => {
|
|
5603
|
-
if (!entry) {
|
|
5604
|
-
cacheState.delete(key);
|
|
5605
|
-
stack.renderedEntry = void 0;
|
|
5606
|
-
return;
|
|
5607
|
-
}
|
|
5608
|
-
cacheState.set(key, entry);
|
|
5609
|
-
if (stack.invalidatedAt !== void 0) {
|
|
5610
|
-
cacheState.invalidate(key, stack.invalidatedAt);
|
|
5611
|
-
}
|
|
5612
|
-
stack.renderedEntry = cacheState.get(key);
|
|
5613
|
-
}, "storeOptimisticEntry");
|
|
5614
|
-
const reconcileOptimisticInvalidation = /* @__PURE__ */ __name((cacheState, key, stack) => {
|
|
5615
|
-
const current = cacheState.get(key);
|
|
5616
|
-
const rendered = stack.renderedEntry;
|
|
5617
|
-
if (current === rendered) return true;
|
|
5618
|
-
if (!current || !rendered || current.data !== rendered.data || current.updatedAt !== rendered.updatedAt || current.gcAt !== rendered.gcAt || current.status !== rendered.status || current.error !== rendered.error || current.fetching !== rendered.fetching || current.staleAt !== 0 || current.invalidatedAt === void 0) {
|
|
5619
|
-
return false;
|
|
5620
|
-
}
|
|
5621
|
-
stack.invalidatedAt = current.invalidatedAt;
|
|
5622
|
-
stack.renderedEntry = current;
|
|
5623
|
-
return true;
|
|
5624
|
-
}, "reconcileOptimisticInvalidation");
|
|
5625
|
-
const renderOptimisticStack = /* @__PURE__ */ __name((cacheState, key, stack) => {
|
|
5626
|
-
let entry = stack.entry ? { ...stack.entry } : void 0;
|
|
5627
|
-
for (const layer of stack.layers) entry = applyOptimisticLayer(entry, layer);
|
|
5628
|
-
storeOptimisticEntry(cacheState, key, stack, entry);
|
|
5629
|
-
}, "renderOptimisticStack");
|
|
5630
|
-
const settleOptimisticUpdates = /* @__PURE__ */ __name((cacheState, optimisticState, snapshots, outcome) => {
|
|
5631
|
-
const settledKeys = [];
|
|
5632
|
-
for (const snapshot of snapshots) {
|
|
5633
|
-
const stack = optimisticState.get(snapshot.key);
|
|
5634
|
-
if (stack !== snapshot.stack) continue;
|
|
5635
|
-
if (!reconcileOptimisticInvalidation(cacheState, snapshot.key, stack)) {
|
|
5636
|
-
optimisticState.delete(snapshot.key);
|
|
5637
|
-
continue;
|
|
5638
|
-
}
|
|
5639
|
-
if (outcome === "rollback") {
|
|
5640
|
-
stack.layers = stack.layers.filter((layer) => layer !== snapshot.layer);
|
|
5641
|
-
} else {
|
|
5642
|
-
snapshot.layer.committed = true;
|
|
5643
|
-
if (outcome === "invalidate") stack.invalidatedAt = Date.now();
|
|
5644
|
-
}
|
|
5645
|
-
while (stack.layers[0]?.committed) {
|
|
5646
|
-
stack.entry = applyOptimisticLayer(stack.entry, stack.layers.shift());
|
|
5647
|
-
}
|
|
5648
|
-
renderOptimisticStack(cacheState, snapshot.key, stack);
|
|
5649
|
-
if (stack.layers.length === 0) optimisticState.delete(snapshot.key);
|
|
5650
|
-
settledKeys.push(snapshot.key);
|
|
5651
|
-
}
|
|
5652
|
-
return settledKeys;
|
|
5653
|
-
}, "settleOptimisticUpdates");
|
|
5654
5701
|
const fetchClient = /* @__PURE__ */ __name(async (path4, requestOptions, defaultHeaders, cancellation) => {
|
|
5655
5702
|
const url = resolveFarmAPIRequestURL(path4, baseURL);
|
|
5656
5703
|
const method = String(requestOptions.method || "GET").toUpperCase();
|
|
@@ -5883,6 +5930,9 @@ function createAPIClientRuntime(options = {}, transport) {
|
|
|
5883
5930
|
const executeNetwork = /* @__PURE__ */ __name(async (opts) => {
|
|
5884
5931
|
const release = cancellation.hold();
|
|
5885
5932
|
let unsubscribeInvalidation;
|
|
5933
|
+
let readOwners;
|
|
5934
|
+
let readOwner;
|
|
5935
|
+
const resolvedCacheKey = cacheState.resolveKey(cacheKey);
|
|
5886
5936
|
try {
|
|
5887
5937
|
const dedupeMs = cacheOptions?.dedupeMs ?? 0;
|
|
5888
5938
|
const inflight = inflightState.get(cacheKey);
|
|
@@ -5906,6 +5956,9 @@ function createAPIClientRuntime(options = {}, transport) {
|
|
|
5906
5956
|
}
|
|
5907
5957
|
let invalidatedDuringRequest = false;
|
|
5908
5958
|
if (isCacheEnabled) {
|
|
5959
|
+
readOwners = getCacheReadOwners(cacheState);
|
|
5960
|
+
readOwner = {};
|
|
5961
|
+
readOwners.set(resolvedCacheKey, readOwner);
|
|
5909
5962
|
unsubscribeInvalidation = cacheState.subscribe(cacheKey, (event) => {
|
|
5910
5963
|
if (event === "invalidate") invalidatedDuringRequest = true;
|
|
5911
5964
|
});
|
|
@@ -6013,15 +6066,27 @@ function createAPIClientRuntime(options = {}, transport) {
|
|
|
6013
6066
|
inflightState.set(cacheKey, inflightEntry);
|
|
6014
6067
|
try {
|
|
6015
6068
|
const result2 = await promise;
|
|
6016
|
-
if (inflightState.get(cacheKey) === inflightEntry && !invalidatedDuringRequest && !result2.error && isCacheEnabled && !isFarmAPIStream(result2.data)) {
|
|
6069
|
+
if (inflightState.get(cacheKey) === inflightEntry && readOwners?.get(resolvedCacheKey) === readOwner && !invalidatedDuringRequest && !result2.error && isCacheEnabled && !isFarmAPIStream(result2.data)) {
|
|
6017
6070
|
const updatedAt = Date.now();
|
|
6018
|
-
|
|
6071
|
+
const cached = {
|
|
6019
6072
|
data: result2.data,
|
|
6020
6073
|
updatedAt,
|
|
6021
6074
|
staleAt: updatedAt + staleTime,
|
|
6022
6075
|
gcAt: getGcAt(updatedAt, cacheOptions?.gcTime),
|
|
6023
|
-
invalidatedAt: void 0
|
|
6024
|
-
|
|
6076
|
+
invalidatedAt: void 0,
|
|
6077
|
+
persist: cacheOptions?.persist === true ? true : void 0,
|
|
6078
|
+
[API_CACHE_REFETCH]: createCacheRefetch(
|
|
6079
|
+
request,
|
|
6080
|
+
path4,
|
|
6081
|
+
method,
|
|
6082
|
+
input,
|
|
6083
|
+
cacheKey,
|
|
6084
|
+
cacheOptions,
|
|
6085
|
+
clientOptions,
|
|
6086
|
+
options.onError
|
|
6087
|
+
)
|
|
6088
|
+
};
|
|
6089
|
+
cacheState.set(cacheKey, cached);
|
|
6025
6090
|
}
|
|
6026
6091
|
if (result2.error) {
|
|
6027
6092
|
emitStatus("error", { error: result2.error, isBackground: opts?.isBackground });
|
|
@@ -6049,6 +6114,9 @@ function createAPIClientRuntime(options = {}, transport) {
|
|
|
6049
6114
|
}
|
|
6050
6115
|
}
|
|
6051
6116
|
} finally {
|
|
6117
|
+
if (readOwner && readOwners?.get(resolvedCacheKey) === readOwner) {
|
|
6118
|
+
readOwners.delete(resolvedCacheKey);
|
|
6119
|
+
}
|
|
6052
6120
|
unsubscribeInvalidation?.();
|
|
6053
6121
|
release();
|
|
6054
6122
|
}
|
|
@@ -6059,6 +6127,7 @@ function createAPIClientRuntime(options = {}, transport) {
|
|
|
6059
6127
|
targets: clientOptions.invalidate.targets,
|
|
6060
6128
|
refetch: clientOptions.invalidate.refetch ?? false
|
|
6061
6129
|
};
|
|
6130
|
+
const refetches = /* @__PURE__ */ new Set();
|
|
6062
6131
|
for (const target of invalidateOptions.targets) {
|
|
6063
6132
|
const targetKey = resolveTargetKey(
|
|
6064
6133
|
routeMeta,
|
|
@@ -6070,20 +6139,22 @@ function createAPIClientRuntime(options = {}, transport) {
|
|
|
6070
6139
|
);
|
|
6071
6140
|
if (!targetKey) continue;
|
|
6072
6141
|
const existing = cacheState.get(targetKey);
|
|
6142
|
+
const invalidatedAt = Date.now();
|
|
6143
|
+
cacheState.invalidate(targetKey, invalidatedAt);
|
|
6073
6144
|
if (existing) {
|
|
6074
|
-
const invalidatedAt = Date.now();
|
|
6075
6145
|
const stack = optimisticState.get(targetKey);
|
|
6076
|
-
cacheState.invalidate(targetKey, invalidatedAt);
|
|
6077
6146
|
if (stack?.renderedEntry === existing) {
|
|
6078
6147
|
stack.invalidatedAt = invalidatedAt;
|
|
6079
6148
|
stack.renderedEntry = cacheState.get(targetKey);
|
|
6080
6149
|
}
|
|
6081
6150
|
}
|
|
6082
6151
|
emitStatus("invalidated", { key: targetKey });
|
|
6083
|
-
|
|
6084
|
-
|
|
6152
|
+
const refetch = existing?.[API_CACHE_REFETCH];
|
|
6153
|
+
if (invalidateOptions.refetch && refetch) {
|
|
6154
|
+
refetches.add(refetch);
|
|
6085
6155
|
}
|
|
6086
6156
|
}
|
|
6157
|
+
for (const refetch of refetches) refetch();
|
|
6087
6158
|
}, "invalidateTargets");
|
|
6088
6159
|
const optimisticSnapshots = requestContextError ? [] : applyOptimisticUpdates();
|
|
6089
6160
|
if (isCacheEnabled && !requestContextError && !cancellation.signal?.aborted) {
|
|
@@ -6317,7 +6388,31 @@ function createServerAPIClient(endpoints, options = {}) {
|
|
|
6317
6388
|
return endpoints;
|
|
6318
6389
|
}
|
|
6319
6390
|
__name(createServerAPIClient, "createServerAPIClient");
|
|
6391
|
+
var API_CACHE_REFETCH = /* @__PURE__ */ Symbol.for("farm.api.cache-refetch");
|
|
6392
|
+
function createCacheRefetch(request, path4, method, input, key, cache, options, onError) {
|
|
6393
|
+
const readOptions = {
|
|
6394
|
+
cache: { ...cache, key, policy: "network-only", dedupeMs: 0 },
|
|
6395
|
+
retry: options?.retry,
|
|
6396
|
+
timeoutMs: options?.timeoutMs
|
|
6397
|
+
};
|
|
6398
|
+
return () => {
|
|
6399
|
+
void request(path4, method, input, readOptions).catch((error) => {
|
|
6400
|
+
notifyClientObserver(onError, [normalizeError(error)]);
|
|
6401
|
+
});
|
|
6402
|
+
};
|
|
6403
|
+
}
|
|
6404
|
+
__name(createCacheRefetch, "createCacheRefetch");
|
|
6320
6405
|
var optimisticStates = /* @__PURE__ */ new WeakMap();
|
|
6406
|
+
var cacheReadOwners = /* @__PURE__ */ new WeakMap();
|
|
6407
|
+
function getCacheReadOwners(cache) {
|
|
6408
|
+
let owners = cacheReadOwners.get(cache);
|
|
6409
|
+
if (!owners) {
|
|
6410
|
+
owners = /* @__PURE__ */ new Map();
|
|
6411
|
+
cacheReadOwners.set(cache, owners);
|
|
6412
|
+
}
|
|
6413
|
+
return owners;
|
|
6414
|
+
}
|
|
6415
|
+
__name(getCacheReadOwners, "getCacheReadOwners");
|
|
6321
6416
|
function getOptimisticState(cache) {
|
|
6322
6417
|
let state = optimisticStates.get(cache);
|
|
6323
6418
|
if (!state) {
|
|
@@ -6327,6 +6422,151 @@ function getOptimisticState(cache) {
|
|
|
6327
6422
|
return state;
|
|
6328
6423
|
}
|
|
6329
6424
|
__name(getOptimisticState, "getOptimisticState");
|
|
6425
|
+
function applyOptimisticLayer(entry, layer) {
|
|
6426
|
+
let data = entry?.data;
|
|
6427
|
+
for (const updater of layer.updaters) data = updater(data);
|
|
6428
|
+
return {
|
|
6429
|
+
data,
|
|
6430
|
+
updatedAt: layer.updatedAt,
|
|
6431
|
+
staleAt: entry?.staleAt ?? layer.staleAt,
|
|
6432
|
+
gcAt: entry?.gcAt ?? layer.gcAt,
|
|
6433
|
+
invalidatedAt: entry?.invalidatedAt,
|
|
6434
|
+
[API_CACHE_REFETCH]: entry?.[API_CACHE_REFETCH]
|
|
6435
|
+
};
|
|
6436
|
+
}
|
|
6437
|
+
__name(applyOptimisticLayer, "applyOptimisticLayer");
|
|
6438
|
+
function storeOptimisticEntry(cacheState, key, stack, entry) {
|
|
6439
|
+
if (!entry) {
|
|
6440
|
+
cacheState.delete(key);
|
|
6441
|
+
stack.renderedEntry = void 0;
|
|
6442
|
+
return;
|
|
6443
|
+
}
|
|
6444
|
+
cacheState.set(key, entry);
|
|
6445
|
+
if (stack.invalidatedAt !== void 0) {
|
|
6446
|
+
cacheState.invalidate(key, stack.invalidatedAt);
|
|
6447
|
+
}
|
|
6448
|
+
stack.renderedEntry = cacheState.get(key);
|
|
6449
|
+
}
|
|
6450
|
+
__name(storeOptimisticEntry, "storeOptimisticEntry");
|
|
6451
|
+
function reconcileOptimisticInvalidation(cacheState, key, stack) {
|
|
6452
|
+
const current = cacheState.get(key);
|
|
6453
|
+
const rendered = stack.renderedEntry;
|
|
6454
|
+
if (current === rendered) return true;
|
|
6455
|
+
if (!current || !rendered || current.data !== rendered.data || current.updatedAt !== rendered.updatedAt || current.gcAt !== rendered.gcAt || current.status !== rendered.status || current.error !== rendered.error || current.fetching !== rendered.fetching || current.staleAt !== 0 || current.invalidatedAt === void 0) {
|
|
6456
|
+
return false;
|
|
6457
|
+
}
|
|
6458
|
+
stack.invalidatedAt = current.invalidatedAt;
|
|
6459
|
+
stack.renderedEntry = current;
|
|
6460
|
+
return true;
|
|
6461
|
+
}
|
|
6462
|
+
__name(reconcileOptimisticInvalidation, "reconcileOptimisticInvalidation");
|
|
6463
|
+
function renderOptimisticStack(cacheState, key, stack) {
|
|
6464
|
+
let entry = stack.entry ? { ...stack.entry } : void 0;
|
|
6465
|
+
for (const layer of stack.layers) entry = applyOptimisticLayer(entry, layer);
|
|
6466
|
+
storeOptimisticEntry(cacheState, key, stack, entry);
|
|
6467
|
+
}
|
|
6468
|
+
__name(renderOptimisticStack, "renderOptimisticStack");
|
|
6469
|
+
function settleOptimisticUpdates(cacheState, optimisticState, snapshots, outcome) {
|
|
6470
|
+
const settledKeys = [];
|
|
6471
|
+
for (const snapshot of snapshots) {
|
|
6472
|
+
const stack = optimisticState.get(snapshot.key);
|
|
6473
|
+
if (stack !== snapshot.stack) continue;
|
|
6474
|
+
if (!reconcileOptimisticInvalidation(cacheState, snapshot.key, stack)) {
|
|
6475
|
+
optimisticState.delete(snapshot.key);
|
|
6476
|
+
continue;
|
|
6477
|
+
}
|
|
6478
|
+
if (outcome === "rollback") {
|
|
6479
|
+
stack.layers = stack.layers.filter((layer) => layer !== snapshot.layer);
|
|
6480
|
+
} else {
|
|
6481
|
+
snapshot.layer.committed = true;
|
|
6482
|
+
if (outcome === "invalidate") stack.invalidatedAt = Date.now();
|
|
6483
|
+
}
|
|
6484
|
+
while (stack.layers[0]?.committed) {
|
|
6485
|
+
stack.entry = applyOptimisticLayer(stack.entry, stack.layers.shift());
|
|
6486
|
+
}
|
|
6487
|
+
renderOptimisticStack(cacheState, snapshot.key, stack);
|
|
6488
|
+
if (stack.layers.length === 0) optimisticState.delete(snapshot.key);
|
|
6489
|
+
settledKeys.push(snapshot.key);
|
|
6490
|
+
}
|
|
6491
|
+
return settledKeys;
|
|
6492
|
+
}
|
|
6493
|
+
__name(settleOptimisticUpdates, "settleOptimisticUpdates");
|
|
6494
|
+
function applyServerFnOptimisticUpdates(updates, now = Date.now()) {
|
|
6495
|
+
const cacheState = getFarmClientDataCache();
|
|
6496
|
+
const optimisticState = getOptimisticState(cacheState);
|
|
6497
|
+
const snapshots = /* @__PURE__ */ new Map();
|
|
6498
|
+
for (const update of updates) {
|
|
6499
|
+
if (update.length !== 2) continue;
|
|
6500
|
+
const [target, updater] = update;
|
|
6501
|
+
if (typeof updater !== "function") continue;
|
|
6502
|
+
const targetKey = typeof target === "string" || Array.isArray(target) ? normalizeFarmClientCacheKey(target) : null;
|
|
6503
|
+
if (!targetKey) continue;
|
|
6504
|
+
const targetEntry = getValidCacheEntry(cacheState, targetKey, now);
|
|
6505
|
+
const currentEntry = cacheState.get(targetKey);
|
|
6506
|
+
let stack = optimisticState.get(targetKey);
|
|
6507
|
+
if (stack && !reconcileOptimisticInvalidation(cacheState, targetKey, stack)) {
|
|
6508
|
+
stack = void 0;
|
|
6509
|
+
}
|
|
6510
|
+
if (!stack) {
|
|
6511
|
+
stack = {
|
|
6512
|
+
entry: targetEntry ? { ...targetEntry } : void 0,
|
|
6513
|
+
layers: [],
|
|
6514
|
+
renderedEntry: currentEntry
|
|
6515
|
+
};
|
|
6516
|
+
optimisticState.set(targetKey, stack);
|
|
6517
|
+
}
|
|
6518
|
+
let snapshot = snapshots.get(targetKey);
|
|
6519
|
+
if (!snapshot) {
|
|
6520
|
+
const previousEntry = stack.layers.length === 0 ? stack.entry : stack.renderedEntry;
|
|
6521
|
+
const layer = {
|
|
6522
|
+
updaters: [],
|
|
6523
|
+
updatedAt: now,
|
|
6524
|
+
// A server function has no cache policy of its own; preserve the
|
|
6525
|
+
// target read's freshness metadata when it exists.
|
|
6526
|
+
staleAt: targetEntry?.staleAt ?? now,
|
|
6527
|
+
gcAt: targetEntry?.gcAt
|
|
6528
|
+
};
|
|
6529
|
+
stack.layers.push(layer);
|
|
6530
|
+
snapshot = { key: targetKey, stack, layer };
|
|
6531
|
+
snapshots.set(targetKey, snapshot);
|
|
6532
|
+
snapshot.layer.updaters.push(updater);
|
|
6533
|
+
const nextEntry2 = applyOptimisticLayer(previousEntry, {
|
|
6534
|
+
...snapshot.layer,
|
|
6535
|
+
updaters: [updater]
|
|
6536
|
+
});
|
|
6537
|
+
storeOptimisticEntry(cacheState, targetKey, stack, nextEntry2);
|
|
6538
|
+
continue;
|
|
6539
|
+
}
|
|
6540
|
+
snapshot.layer.updaters.push(updater);
|
|
6541
|
+
const nextEntry = applyOptimisticLayer(stack.renderedEntry, {
|
|
6542
|
+
...snapshot.layer,
|
|
6543
|
+
updaters: [updater]
|
|
6544
|
+
});
|
|
6545
|
+
storeOptimisticEntry(cacheState, targetKey, stack, nextEntry);
|
|
6546
|
+
}
|
|
6547
|
+
return Array.from(snapshots.values());
|
|
6548
|
+
}
|
|
6549
|
+
__name(applyServerFnOptimisticUpdates, "applyServerFnOptimisticUpdates");
|
|
6550
|
+
function settleServerFnOptimisticUpdates(snapshots, outcome) {
|
|
6551
|
+
if (snapshots.length === 0) return;
|
|
6552
|
+
const cacheState = getFarmClientDataCache();
|
|
6553
|
+
settleOptimisticUpdates(cacheState, getOptimisticState(cacheState), snapshots, outcome);
|
|
6554
|
+
}
|
|
6555
|
+
__name(settleServerFnOptimisticUpdates, "settleServerFnOptimisticUpdates");
|
|
6556
|
+
function resolveServerFnInvalidateTargets(invalidate2) {
|
|
6557
|
+
const targets = Array.isArray(invalidate2) ? invalidate2 : invalidate2.targets;
|
|
6558
|
+
const keys = [];
|
|
6559
|
+
for (const target of targets) {
|
|
6560
|
+
if (typeof target === "string" || Array.isArray(target)) {
|
|
6561
|
+
if (Array.isArray(target) && typeof target[0] === "function") continue;
|
|
6562
|
+
keys.push(normalizeFarmClientCacheKey(target));
|
|
6563
|
+
} else if (target && typeof target === "object" && "key" in target) {
|
|
6564
|
+
keys.push(normalizeFarmClientCacheKey(target.key));
|
|
6565
|
+
}
|
|
6566
|
+
}
|
|
6567
|
+
return keys;
|
|
6568
|
+
}
|
|
6569
|
+
__name(resolveServerFnInvalidateTargets, "resolveServerFnInvalidateTargets");
|
|
6330
6570
|
function buildCacheKey(method, path4, input, baseURL, defaultHeaders) {
|
|
6331
6571
|
const keyInput = input && typeof input === "object" ? {
|
|
6332
6572
|
query: input.query,
|
|
@@ -7286,6 +7526,7 @@ __name(farmApiPlugin, "farmApiPlugin");
|
|
|
7286
7526
|
POST,
|
|
7287
7527
|
PUT,
|
|
7288
7528
|
QUERY,
|
|
7529
|
+
applyServerFnOptimisticUpdates,
|
|
7289
7530
|
createAPIClient,
|
|
7290
7531
|
createApiClients,
|
|
7291
7532
|
createEndpoint,
|
|
@@ -7314,6 +7555,8 @@ __name(farmApiPlugin, "farmApiPlugin");
|
|
|
7314
7555
|
resolveFarmAPIRequestURL,
|
|
7315
7556
|
resolveFarmAPIServerBasePath,
|
|
7316
7557
|
resolvePluginRoutes,
|
|
7558
|
+
resolveServerFnInvalidateTargets,
|
|
7559
|
+
settleServerFnOptimisticUpdates,
|
|
7317
7560
|
toFormData
|
|
7318
7561
|
});
|
|
7319
7562
|
//# sourceMappingURL=api.cjs.map
|