@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
|
@@ -101,7 +101,13 @@ function recordFarmEventTrace(event) {
|
|
|
101
101
|
activeSpan.addEvent(event.type, toEventAttributes(event), event.timestamp);
|
|
102
102
|
}
|
|
103
103
|
const error = event.type === "request.error" ? void 0 : getEventError(event);
|
|
104
|
-
if (error !== void 0)
|
|
104
|
+
if (error !== void 0) {
|
|
105
|
+
if (event.type === "render.error") {
|
|
106
|
+
recordSpanException(activeSpan, error);
|
|
107
|
+
} else {
|
|
108
|
+
recordSpanError(activeSpan, error);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
105
111
|
}
|
|
106
112
|
const completedTraceContext = recordCompletedEventSpan(event, activeContext);
|
|
107
113
|
return traceContext ?? completedTraceContext;
|
|
@@ -198,12 +204,26 @@ function getCompletedSpanDescriptor(event) {
|
|
|
198
204
|
}
|
|
199
205
|
}
|
|
200
206
|
__name(getCompletedSpanDescriptor, "getCompletedSpanDescriptor");
|
|
207
|
+
function hashFarmCacheKey(value) {
|
|
208
|
+
let hash = 2166136261;
|
|
209
|
+
for (let index = 0; index < value.length; index++) {
|
|
210
|
+
hash ^= value.charCodeAt(index);
|
|
211
|
+
hash = Math.imul(hash, 16777619);
|
|
212
|
+
}
|
|
213
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
214
|
+
}
|
|
215
|
+
__name(hashFarmCacheKey, "hashFarmCacheKey");
|
|
201
216
|
function toEventAttributes(event) {
|
|
202
217
|
const attributes = {};
|
|
218
|
+
const redactKey = typeof event.type === "string" && event.type.startsWith("cache.");
|
|
203
219
|
for (const [key, value] of Object.entries(event)) {
|
|
204
220
|
if (key === "timestamp" || key === "level" || key === "error" || key === "traceId" || key === "spanId" || key === "traceSampled" || value === void 0) {
|
|
205
221
|
continue;
|
|
206
222
|
}
|
|
223
|
+
if (redactKey && key === "key" && typeof value === "string") {
|
|
224
|
+
attributes["farm.key_hash"] = hashFarmCacheKey(value);
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
207
227
|
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
208
228
|
attributes[`farm.${key}`] = value;
|
|
209
229
|
} else if (Array.isArray(value)) {
|
|
@@ -223,9 +243,14 @@ function getEventError(event) {
|
|
|
223
243
|
return "error" in event ? event.error : void 0;
|
|
224
244
|
}
|
|
225
245
|
__name(getEventError, "getEventError");
|
|
226
|
-
function
|
|
246
|
+
function recordSpanException(span, error) {
|
|
227
247
|
const normalized = error instanceof Error ? error : new Error(String(error));
|
|
228
248
|
span.recordException(normalized);
|
|
249
|
+
return normalized;
|
|
250
|
+
}
|
|
251
|
+
__name(recordSpanException, "recordSpanException");
|
|
252
|
+
function recordSpanError(span, error) {
|
|
253
|
+
const normalized = recordSpanException(span, error);
|
|
229
254
|
span.setStatus({ code: import_api.SpanStatusCode.ERROR, message: normalized.message });
|
|
230
255
|
}
|
|
231
256
|
__name(recordSpanError, "recordSpanError");
|
|
@@ -1037,6 +1062,31 @@ function stableSerialize(value, seen = /* @__PURE__ */ new WeakSet()) {
|
|
|
1037
1062
|
__name(stableSerialize, "stableSerialize");
|
|
1038
1063
|
|
|
1039
1064
|
// src/client-cache.ts
|
|
1065
|
+
var invalidationTrackers = /* @__PURE__ */ new WeakMap();
|
|
1066
|
+
function trackFarmClientCacheInvalidations(cache) {
|
|
1067
|
+
let trackers = invalidationTrackers.get(cache);
|
|
1068
|
+
if (!trackers) {
|
|
1069
|
+
trackers = /* @__PURE__ */ new Set();
|
|
1070
|
+
invalidationTrackers.set(cache, trackers);
|
|
1071
|
+
}
|
|
1072
|
+
const keys = /* @__PURE__ */ new Set();
|
|
1073
|
+
trackers.add(keys);
|
|
1074
|
+
return {
|
|
1075
|
+
has(key) {
|
|
1076
|
+
const resolved = cache.resolveKey(key);
|
|
1077
|
+
for (const invalidated of keys) {
|
|
1078
|
+
if (cache.resolveKey(invalidated) === resolved) return true;
|
|
1079
|
+
}
|
|
1080
|
+
return false;
|
|
1081
|
+
},
|
|
1082
|
+
dispose() {
|
|
1083
|
+
if (!trackers.delete(keys)) return;
|
|
1084
|
+
keys.clear();
|
|
1085
|
+
if (trackers.size === 0) invalidationTrackers.delete(cache);
|
|
1086
|
+
}
|
|
1087
|
+
};
|
|
1088
|
+
}
|
|
1089
|
+
__name(trackFarmClientCacheInvalidations, "trackFarmClientCacheInvalidations");
|
|
1040
1090
|
var cacheFinalizer = typeof FinalizationRegistry === "function" ? new FinalizationRegistry((unsubscribe) => unsubscribe()) : void 0;
|
|
1041
1091
|
function subscribeWeakCache(reference) {
|
|
1042
1092
|
const unsubscribe = subscribeFarmCacheInvalidation((key) => {
|
|
@@ -1052,6 +1102,7 @@ function subscribeWeakCache(reference) {
|
|
|
1052
1102
|
return dispose;
|
|
1053
1103
|
}
|
|
1054
1104
|
__name(subscribeWeakCache, "subscribeWeakCache");
|
|
1105
|
+
var DEFAULT_GC_SWEEP_INTERVAL_MS = 3e4;
|
|
1055
1106
|
var _FarmClientDataCache = class _FarmClientDataCache {
|
|
1056
1107
|
constructor(options = {}) {
|
|
1057
1108
|
this.entries = /* @__PURE__ */ new Map();
|
|
@@ -1059,6 +1110,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
1059
1110
|
this.invalidatedAt = /* @__PURE__ */ new Map();
|
|
1060
1111
|
this.listeners = /* @__PURE__ */ new Map();
|
|
1061
1112
|
this.inflight = /* @__PURE__ */ new Map();
|
|
1113
|
+
this.gcSweepIntervalMs = options.gcSweepIntervalMs ?? DEFAULT_GC_SWEEP_INTERVAL_MS;
|
|
1062
1114
|
if (options.subscribeToInvalidation !== false) {
|
|
1063
1115
|
if (typeof WeakRef === "function") {
|
|
1064
1116
|
const reference = new WeakRef(this);
|
|
@@ -1075,6 +1127,10 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
1075
1127
|
get size() {
|
|
1076
1128
|
return this.entries.size;
|
|
1077
1129
|
}
|
|
1130
|
+
/** @internal Attach or detach the persistence engine's observation sink. */
|
|
1131
|
+
attachPersistence(sink) {
|
|
1132
|
+
this.persistence = sink;
|
|
1133
|
+
}
|
|
1078
1134
|
resolveKey(key) {
|
|
1079
1135
|
let resolved = key;
|
|
1080
1136
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -1090,6 +1146,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
1090
1146
|
if (!entry) return void 0;
|
|
1091
1147
|
if (entry.gcAt !== void 0 && now >= entry.gcAt) {
|
|
1092
1148
|
this.entries.delete(resolved);
|
|
1149
|
+
this.persistence?.onDelete(resolved);
|
|
1093
1150
|
this.emit(resolved);
|
|
1094
1151
|
return void 0;
|
|
1095
1152
|
}
|
|
@@ -1103,6 +1160,8 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
1103
1160
|
this.invalidatedAt.delete(resolved);
|
|
1104
1161
|
}
|
|
1105
1162
|
this.entries.set(resolved, nextEntry);
|
|
1163
|
+
if (nextEntry.gcAt !== void 0) this.scheduleGcSweep();
|
|
1164
|
+
this.persistence?.onSet(resolved, nextEntry);
|
|
1106
1165
|
this.emit(resolved);
|
|
1107
1166
|
return this;
|
|
1108
1167
|
}
|
|
@@ -1110,6 +1169,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
1110
1169
|
const resolved = this.resolveKey(key);
|
|
1111
1170
|
const deleted = this.entries.delete(resolved);
|
|
1112
1171
|
this.inflight.delete(resolved);
|
|
1172
|
+
if (deleted) this.persistence?.onDelete(resolved);
|
|
1113
1173
|
this.emit(resolved);
|
|
1114
1174
|
return deleted;
|
|
1115
1175
|
}
|
|
@@ -1119,11 +1179,16 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
1119
1179
|
this.aliases.clear();
|
|
1120
1180
|
this.invalidatedAt.clear();
|
|
1121
1181
|
this.inflight.clear();
|
|
1182
|
+
this.persistence?.onClear();
|
|
1122
1183
|
for (const key of keys) this.emit(key);
|
|
1123
1184
|
}
|
|
1124
1185
|
dispose() {
|
|
1125
1186
|
this.unsubscribeInvalidation?.();
|
|
1126
1187
|
this.unsubscribeInvalidation = void 0;
|
|
1188
|
+
if (this.gcTimer !== void 0) {
|
|
1189
|
+
clearTimeout(this.gcTimer);
|
|
1190
|
+
this.gcTimer = void 0;
|
|
1191
|
+
}
|
|
1127
1192
|
this.clear();
|
|
1128
1193
|
}
|
|
1129
1194
|
isStale(key, now = Date.now()) {
|
|
@@ -1132,6 +1197,7 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
1132
1197
|
}
|
|
1133
1198
|
invalidate(key, now = Date.now()) {
|
|
1134
1199
|
const resolved = this.resolveKey(key);
|
|
1200
|
+
for (const keys of invalidationTrackers.get(this) ?? []) keys.add(resolved);
|
|
1135
1201
|
this.invalidatedAt.set(resolved, now);
|
|
1136
1202
|
const entry = this.entries.get(resolved);
|
|
1137
1203
|
if (entry) {
|
|
@@ -1151,8 +1217,9 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
1151
1217
|
const resolvedInvalidatedAt = this.invalidatedAt.get(resolved);
|
|
1152
1218
|
if (aliasEntry && !this.entries.has(resolved)) {
|
|
1153
1219
|
this.entries.set(resolved, aliasEntry);
|
|
1220
|
+
this.persistence?.onSet(resolved, aliasEntry);
|
|
1154
1221
|
}
|
|
1155
|
-
this.entries.delete(alias);
|
|
1222
|
+
if (this.entries.delete(alias)) this.persistence?.onDelete(alias);
|
|
1156
1223
|
this.invalidatedAt.delete(alias);
|
|
1157
1224
|
const invalidatedAt = [aliasInvalidatedAt, resolvedInvalidatedAt].reduce(
|
|
1158
1225
|
(latest, value) => value === void 0 ? latest : latest === void 0 ? value : Math.max(latest, value),
|
|
@@ -1192,7 +1259,9 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
1192
1259
|
listeners.add(listener);
|
|
1193
1260
|
return () => {
|
|
1194
1261
|
listeners.delete(listener);
|
|
1195
|
-
if (listeners.size === 0
|
|
1262
|
+
if (listeners.size === 0 && this.listeners.get(key) === listeners) {
|
|
1263
|
+
this.listeners.delete(key);
|
|
1264
|
+
}
|
|
1196
1265
|
};
|
|
1197
1266
|
}
|
|
1198
1267
|
getInflight(key) {
|
|
@@ -1204,6 +1273,30 @@ var _FarmClientDataCache = class _FarmClientDataCache {
|
|
|
1204
1273
|
deleteInflight(key) {
|
|
1205
1274
|
this.inflight.delete(this.resolveKey(key));
|
|
1206
1275
|
}
|
|
1276
|
+
scheduleGcSweep() {
|
|
1277
|
+
if (this.gcSweepIntervalMs === false || this.gcTimer !== void 0) return;
|
|
1278
|
+
const timer = setTimeout(() => {
|
|
1279
|
+
this.gcTimer = void 0;
|
|
1280
|
+
this.sweepExpiredEntries();
|
|
1281
|
+
}, this.gcSweepIntervalMs);
|
|
1282
|
+
timer.unref?.();
|
|
1283
|
+
this.gcTimer = timer;
|
|
1284
|
+
}
|
|
1285
|
+
sweepExpiredEntries(now = Date.now()) {
|
|
1286
|
+
const watched = /* @__PURE__ */ new Set();
|
|
1287
|
+
for (const key of this.listeners.keys()) watched.add(this.resolveKey(key));
|
|
1288
|
+
let remaining = false;
|
|
1289
|
+
for (const [key, entry] of this.entries) {
|
|
1290
|
+
if (entry.gcAt === void 0) continue;
|
|
1291
|
+
if (now < entry.gcAt || entry.fetching || this.inflight.has(key) || watched.has(key)) {
|
|
1292
|
+
remaining = true;
|
|
1293
|
+
continue;
|
|
1294
|
+
}
|
|
1295
|
+
this.entries.delete(key);
|
|
1296
|
+
this.persistence?.onDelete(key);
|
|
1297
|
+
}
|
|
1298
|
+
if (remaining) this.scheduleGcSweep();
|
|
1299
|
+
}
|
|
1207
1300
|
emit(key, event) {
|
|
1208
1301
|
this.notifyListeners(key, event);
|
|
1209
1302
|
for (const [alias, target] of this.aliases) {
|
|
@@ -1228,6 +1321,21 @@ function getFarmClientDataCache() {
|
|
|
1228
1321
|
}
|
|
1229
1322
|
__name(getFarmClientDataCache, "getFarmClientDataCache");
|
|
1230
1323
|
|
|
1324
|
+
// src/client-revalidation.ts
|
|
1325
|
+
function attachRevalidationListeners(refresh, options = {}) {
|
|
1326
|
+
if (typeof window === "undefined") return () => {
|
|
1327
|
+
};
|
|
1328
|
+
const onFocus = options.refetchOnWindowFocus === false ? void 0 : refresh;
|
|
1329
|
+
const onOnline = options.refetchOnReconnect === false ? void 0 : refresh;
|
|
1330
|
+
if (onFocus) window.addEventListener("focus", onFocus);
|
|
1331
|
+
if (onOnline) window.addEventListener("online", onOnline);
|
|
1332
|
+
return () => {
|
|
1333
|
+
if (onFocus) window.removeEventListener("focus", onFocus);
|
|
1334
|
+
if (onOnline) window.removeEventListener("online", onOnline);
|
|
1335
|
+
};
|
|
1336
|
+
}
|
|
1337
|
+
__name(attachRevalidationListeners, "attachRevalidationListeners");
|
|
1338
|
+
|
|
1231
1339
|
// src/server-query-protocol.ts
|
|
1232
1340
|
var FARM_SERVER_QUERY_RESULT_VERSION = 1;
|
|
1233
1341
|
function isFarmServerQueryResult(value) {
|
|
@@ -1244,9 +1352,30 @@ var serverQueryClientState = serverQueryClientGlobal[FARM_SERVER_QUERY_CLIENT_ST
|
|
|
1244
1352
|
functionIds: /* @__PURE__ */ new WeakMap(),
|
|
1245
1353
|
nextFunctionId: 0,
|
|
1246
1354
|
active: [],
|
|
1247
|
-
latestOwners: /* @__PURE__ */ new Map()
|
|
1355
|
+
latestOwners: /* @__PURE__ */ new Map(),
|
|
1356
|
+
owners: /* @__PURE__ */ new Set()
|
|
1248
1357
|
});
|
|
1249
1358
|
serverQueryClientState.latestOwners ?? (serverQueryClientState.latestOwners = /* @__PURE__ */ new Map());
|
|
1359
|
+
serverQueryClientState.owners ?? (serverQueryClientState.owners = /* @__PURE__ */ new Set());
|
|
1360
|
+
function isServerQueryOwnerSuperseded(owner, key) {
|
|
1361
|
+
const cache = getFarmClientDataCache();
|
|
1362
|
+
const resolved = cache.resolveKey(key);
|
|
1363
|
+
for (const superseded of owner.supersededKeys ?? []) {
|
|
1364
|
+
if (cache.resolveKey(superseded) === resolved) return true;
|
|
1365
|
+
}
|
|
1366
|
+
return false;
|
|
1367
|
+
}
|
|
1368
|
+
__name(isServerQueryOwnerSuperseded, "isServerQueryOwnerSuperseded");
|
|
1369
|
+
function claimServerQueryKey(owner, key) {
|
|
1370
|
+
if (isServerQueryOwnerSuperseded(owner, key)) return false;
|
|
1371
|
+
const resolved = getFarmClientDataCache().resolveKey(key);
|
|
1372
|
+
for (const older of serverQueryClientState.owners) {
|
|
1373
|
+
if (older === owner) break;
|
|
1374
|
+
older.supersededKeys.add(resolved);
|
|
1375
|
+
}
|
|
1376
|
+
return true;
|
|
1377
|
+
}
|
|
1378
|
+
__name(claimServerQueryKey, "claimServerQueryKey");
|
|
1250
1379
|
var RAW_SERVER_QUERY_SYMBOL = /* @__PURE__ */ Symbol.for("farm.server-query");
|
|
1251
1380
|
function assertNotRawServerQueryInBrowser(query) {
|
|
1252
1381
|
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
@@ -1280,22 +1409,34 @@ function completeFarmServerQueryAction(invocation, value) {
|
|
|
1280
1409
|
if (invocation.provisionalKey) {
|
|
1281
1410
|
cache.alias(invocation.provisionalKey, metadata.key);
|
|
1282
1411
|
}
|
|
1412
|
+
const owner = invocation.owner;
|
|
1413
|
+
if (owner && serverQueryClientState.owners.has(owner) && !claimServerQueryKey(owner, metadata.key)) {
|
|
1414
|
+
return value.data;
|
|
1415
|
+
}
|
|
1416
|
+
const invalidated = invocation.owner?.invalidations?.has(
|
|
1417
|
+
metadata.key
|
|
1418
|
+
);
|
|
1283
1419
|
cache.set(metadata.key, {
|
|
1284
1420
|
data: value.data,
|
|
1285
1421
|
updatedAt: metadata.updatedAt,
|
|
1286
|
-
staleAt: metadata.staleTime === false ? Number.POSITIVE_INFINITY : metadata.updatedAt + metadata.staleTime,
|
|
1422
|
+
staleAt: invalidated ? 0 : metadata.staleTime === false ? Number.POSITIVE_INFINITY : metadata.updatedAt + metadata.staleTime,
|
|
1287
1423
|
status: "success",
|
|
1288
1424
|
error: null,
|
|
1289
|
-
fetching: false
|
|
1425
|
+
fetching: false,
|
|
1426
|
+
persist: metadata.persist === true ? true : void 0
|
|
1290
1427
|
});
|
|
1291
1428
|
return value.data;
|
|
1292
1429
|
}
|
|
1293
1430
|
__name(completeFarmServerQueryAction, "completeFarmServerQueryAction");
|
|
1294
1431
|
function shouldApplyFarmServerQueryActionResult(invocation) {
|
|
1295
1432
|
if (!invocation.provisionalKey || !invocation.owner) return true;
|
|
1296
|
-
return
|
|
1433
|
+
return isCurrentServerQueryOwner(invocation.provisionalKey, invocation.owner);
|
|
1297
1434
|
}
|
|
1298
1435
|
__name(shouldApplyFarmServerQueryActionResult, "shouldApplyFarmServerQueryActionResult");
|
|
1436
|
+
function isCurrentServerQueryOwner(provisionalKey, owner) {
|
|
1437
|
+
return serverQueryClientState.latestOwners.get(provisionalKey) === owner && !isServerQueryOwnerSuperseded(owner, provisionalKey);
|
|
1438
|
+
}
|
|
1439
|
+
__name(isCurrentServerQueryOwner, "isCurrentServerQueryOwner");
|
|
1299
1440
|
function createServerQueryCallKey(query, input) {
|
|
1300
1441
|
let id = serverQueryClientState.functionIds.get(query);
|
|
1301
1442
|
if (!id) {
|
|
@@ -1311,12 +1452,14 @@ async function fetchServerQuery(query, input, options = {}) {
|
|
|
1311
1452
|
const entry = cache.get(provisionalKey);
|
|
1312
1453
|
const stale = cache.isStale(provisionalKey);
|
|
1313
1454
|
const inflight = cache.getInflight(provisionalKey);
|
|
1314
|
-
if (
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1455
|
+
if (!options.force && entry && stale && (entry.status !== "pending" || entry.updatedAt !== 0) && entry.status !== "error" && (options.swr ?? true)) {
|
|
1456
|
+
if (!inflight) {
|
|
1457
|
+
void executeServerQuery(query, input, provisionalKey, options).catch(() => void 0);
|
|
1458
|
+
}
|
|
1318
1459
|
return entry.data;
|
|
1319
1460
|
}
|
|
1461
|
+
if (inflight && !options.force) return inflight;
|
|
1462
|
+
if (!options.force && entry && !stale && entry.status !== "error") return entry.data;
|
|
1320
1463
|
return executeServerQuery(query, input, provisionalKey, options);
|
|
1321
1464
|
}
|
|
1322
1465
|
__name(fetchServerQuery, "fetchServerQuery");
|
|
@@ -1329,8 +1472,13 @@ async function executeServerQuery(query, input, provisionalKey, options) {
|
|
|
1329
1472
|
const cache = getFarmClientDataCache();
|
|
1330
1473
|
const inflight = cache.getInflight(provisionalKey);
|
|
1331
1474
|
if (inflight && !options.force) return inflight;
|
|
1332
|
-
const owner = {
|
|
1475
|
+
const owner = {
|
|
1476
|
+
invalidations: trackFarmClientCacheInvalidations(cache),
|
|
1477
|
+
supersededKeys: /* @__PURE__ */ new Set()
|
|
1478
|
+
};
|
|
1333
1479
|
serverQueryClientState.latestOwners.set(provisionalKey, owner);
|
|
1480
|
+
serverQueryClientState.owners.add(owner);
|
|
1481
|
+
claimServerQueryKey(owner, provisionalKey);
|
|
1334
1482
|
const previous = cache.get(provisionalKey);
|
|
1335
1483
|
cache.set(provisionalKey, {
|
|
1336
1484
|
data: previous?.data,
|
|
@@ -1355,12 +1503,12 @@ async function executeServerQuery(query, input, provisionalKey, options) {
|
|
|
1355
1503
|
}
|
|
1356
1504
|
const data = await pending;
|
|
1357
1505
|
const transported = cache.get(provisionalKey);
|
|
1358
|
-
if (
|
|
1506
|
+
if (isCurrentServerQueryOwner(provisionalKey, owner) && (!transported || transported.fetching)) {
|
|
1359
1507
|
const updatedAt = Date.now();
|
|
1360
1508
|
cache.set(provisionalKey, {
|
|
1361
1509
|
data,
|
|
1362
1510
|
updatedAt,
|
|
1363
|
-
staleAt: options.staleTime === false ? Number.POSITIVE_INFINITY : updatedAt + (options.staleTime ?? 0),
|
|
1511
|
+
staleAt: owner.invalidations.has(provisionalKey) ? 0 : options.staleTime === false ? Number.POSITIVE_INFINITY : updatedAt + (options.staleTime ?? 0),
|
|
1364
1512
|
status: "success",
|
|
1365
1513
|
error: null,
|
|
1366
1514
|
fetching: false
|
|
@@ -1369,7 +1517,7 @@ async function executeServerQuery(query, input, provisionalKey, options) {
|
|
|
1369
1517
|
return data;
|
|
1370
1518
|
} catch (cause) {
|
|
1371
1519
|
const error = normalizeServerQueryError(cause);
|
|
1372
|
-
if (
|
|
1520
|
+
if (isCurrentServerQueryOwner(provisionalKey, owner)) {
|
|
1373
1521
|
const current = cache.get(provisionalKey);
|
|
1374
1522
|
cache.set(provisionalKey, {
|
|
1375
1523
|
data: current?.data,
|
|
@@ -1384,12 +1532,17 @@ async function executeServerQuery(query, input, provisionalKey, options) {
|
|
|
1384
1532
|
}
|
|
1385
1533
|
throw error;
|
|
1386
1534
|
} finally {
|
|
1535
|
+
const invalidated = isCurrentServerQueryOwner(provisionalKey, owner) && owner.invalidations.has(provisionalKey);
|
|
1536
|
+
owner.invalidations.dispose();
|
|
1537
|
+
serverQueryClientState.owners.delete(owner);
|
|
1538
|
+
owner.supersededKeys.clear();
|
|
1387
1539
|
if (cache.getInflight(provisionalKey) === promise) {
|
|
1388
1540
|
cache.deleteInflight(provisionalKey);
|
|
1389
1541
|
}
|
|
1390
1542
|
if (serverQueryClientState.latestOwners.get(provisionalKey) === owner) {
|
|
1391
1543
|
serverQueryClientState.latestOwners.delete(provisionalKey);
|
|
1392
1544
|
}
|
|
1545
|
+
if (invalidated) cache.invalidate(provisionalKey);
|
|
1393
1546
|
}
|
|
1394
1547
|
})();
|
|
1395
1548
|
cache.setInflight(provisionalKey, promise);
|
|
@@ -1411,19 +1564,29 @@ function useServerQuery(query, input, options = {}) {
|
|
|
1411
1564
|
const inputRef = (0, import_react.useRef)(input);
|
|
1412
1565
|
const optionsRef = (0, import_react.useRef)(options);
|
|
1413
1566
|
const mountedKeyRef = (0, import_react.useRef)(void 0);
|
|
1567
|
+
const pendingInvalidationRef = (0, import_react.useRef)(false);
|
|
1414
1568
|
inputRef.current = input;
|
|
1415
1569
|
optionsRef.current = options;
|
|
1416
1570
|
const subscribe = (0, import_react.useCallback)(
|
|
1417
|
-
(listener) => cache.subscribe(key,
|
|
1571
|
+
(listener) => cache.subscribe(key, (event) => {
|
|
1572
|
+
if (event === "invalidate") pendingInvalidationRef.current = true;
|
|
1573
|
+
else if (cache.get(key)?.fetching) {
|
|
1574
|
+
pendingInvalidationRef.current = false;
|
|
1575
|
+
}
|
|
1576
|
+
listener();
|
|
1577
|
+
}),
|
|
1418
1578
|
[cache, key]
|
|
1419
1579
|
);
|
|
1420
1580
|
const getSnapshot = (0, import_react.useCallback)(() => cache.get(key), [cache, key]);
|
|
1421
1581
|
const entry = (0, import_react.useSyncExternalStore)(subscribe, getSnapshot, () => void 0);
|
|
1422
1582
|
const run = (0, import_react.useCallback)(
|
|
1423
|
-
(force = false) =>
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1583
|
+
(force = false) => {
|
|
1584
|
+
pendingInvalidationRef.current = false;
|
|
1585
|
+
return fetchServerQuery(query, inputRef.current, {
|
|
1586
|
+
...optionsRef.current,
|
|
1587
|
+
force
|
|
1588
|
+
});
|
|
1589
|
+
},
|
|
1427
1590
|
[query]
|
|
1428
1591
|
);
|
|
1429
1592
|
(0, import_react.useEffect)(() => {
|
|
@@ -1433,23 +1596,21 @@ function useServerQuery(query, input, options = {}) {
|
|
|
1433
1596
|
}
|
|
1434
1597
|
const firstReadForKey = mountedKeyRef.current !== key;
|
|
1435
1598
|
if (firstReadForKey) mountedKeyRef.current = key;
|
|
1436
|
-
if (firstReadForKey && (!entry || cache.isStale(key)) || entry?.invalidatedAt !== void 0 && !entry.fetching) {
|
|
1599
|
+
if (firstReadForKey && (!entry || cache.isStale(key)) || pendingInvalidationRef.current && entry?.invalidatedAt !== void 0 && !entry.fetching) {
|
|
1437
1600
|
void run().catch(() => void 0);
|
|
1438
1601
|
}
|
|
1439
1602
|
}, [cache, entry, key, options.enabled, run]);
|
|
1440
1603
|
(0, import_react.useEffect)(() => {
|
|
1441
|
-
if (options.enabled === false
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
if (onOnline) window.removeEventListener("online", onOnline);
|
|
1452
|
-
};
|
|
1604
|
+
if (options.enabled === false) return;
|
|
1605
|
+
return attachRevalidationListeners(
|
|
1606
|
+
() => {
|
|
1607
|
+
if (cache.isStale(key)) void run().catch(() => void 0);
|
|
1608
|
+
},
|
|
1609
|
+
{
|
|
1610
|
+
refetchOnWindowFocus: options.refetchOnWindowFocus,
|
|
1611
|
+
refetchOnReconnect: options.refetchOnReconnect
|
|
1612
|
+
}
|
|
1613
|
+
);
|
|
1453
1614
|
}, [cache, key, options.enabled, options.refetchOnReconnect, options.refetchOnWindowFocus, run]);
|
|
1454
1615
|
const status = entry?.status ?? (entry ? "success" : "idle");
|
|
1455
1616
|
const fetching = entry?.fetching ?? false;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { F as FarmClientCacheStatus } from './client-cache-
|
|
1
|
+
import { F as FarmClientCacheStatus } from './client-cache-CCK-fCe0.mjs';
|
|
2
2
|
import { ServerQuery } from './server-query.mjs';
|
|
3
|
-
import { S as ServerQueryFetchOptions } from './server-query-runtime-
|
|
4
|
-
export { F as FarmServerQueryActionInvocation, b as beginFarmServerQueryAction, c as completeFarmServerQueryAction, f as fetchServerQuery, p as prefetchServerQuery, s as shouldApplyFarmServerQueryActionResult } from './server-query-runtime-
|
|
3
|
+
import { S as ServerQueryFetchOptions } from './server-query-runtime-aP52iuL5.mjs';
|
|
4
|
+
export { F as FarmServerQueryActionInvocation, b as beginFarmServerQueryAction, c as completeFarmServerQueryAction, f as fetchServerQuery, p as prefetchServerQuery, s as shouldApplyFarmServerQueryActionResult } from './server-query-runtime-aP52iuL5.mjs';
|
|
5
5
|
import './cache.mjs';
|
|
6
6
|
import './server-fn.mjs';
|
|
7
7
|
import './server-fn-error-DDh14a0V.mjs';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { F as FarmClientCacheStatus } from './client-cache-
|
|
1
|
+
import { F as FarmClientCacheStatus } from './client-cache-BMxuFqwH.js';
|
|
2
2
|
import { ServerQuery } from './server-query.js';
|
|
3
|
-
import { S as ServerQueryFetchOptions } from './server-query-runtime-
|
|
4
|
-
export { F as FarmServerQueryActionInvocation, b as beginFarmServerQueryAction, c as completeFarmServerQueryAction, f as fetchServerQuery, p as prefetchServerQuery, s as shouldApplyFarmServerQueryActionResult } from './server-query-runtime-
|
|
3
|
+
import { S as ServerQueryFetchOptions } from './server-query-runtime-DXRNhX_3.js';
|
|
4
|
+
export { F as FarmServerQueryActionInvocation, b as beginFarmServerQueryAction, c as completeFarmServerQueryAction, f as fetchServerQuery, p as prefetchServerQuery, s as shouldApplyFarmServerQueryActionResult } from './server-query-runtime-DXRNhX_3.js';
|
|
5
5
|
import './cache.js';
|
|
6
6
|
import './server-fn.js';
|
|
7
7
|
import './server-fn-error-DDh14a0V.js';
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
useServerQuery
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-52BR7LTX.mjs";
|
|
5
5
|
import {
|
|
6
6
|
beginFarmServerQueryAction,
|
|
7
7
|
completeFarmServerQueryAction,
|
|
8
8
|
fetchServerQuery,
|
|
9
9
|
prefetchServerQuery,
|
|
10
10
|
shouldApplyFarmServerQueryActionResult
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-WD2EBM3I.mjs";
|
|
12
|
+
import "./chunk-WMJGA32P.mjs";
|
|
13
|
+
import "./chunk-EHTUKVSW.mjs";
|
|
14
|
+
import "./chunk-2HDOV47R.mjs";
|
|
15
|
+
import "./chunk-34IAPZBG.mjs";
|
|
16
16
|
import "./chunk-WZ5QFROO.mjs";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-N2FY2QZ7.mjs";
|
|
18
18
|
import "./chunk-CGILA3WO.mjs";
|
|
19
19
|
export {
|
|
20
20
|
beginFarmServerQueryAction,
|
package/dist/server-query.cjs
CHANGED
|
@@ -95,7 +95,13 @@ function recordFarmEventTrace(event) {
|
|
|
95
95
|
activeSpan.addEvent(event.type, toEventAttributes(event), event.timestamp);
|
|
96
96
|
}
|
|
97
97
|
const error = event.type === "request.error" ? void 0 : getEventError(event);
|
|
98
|
-
if (error !== void 0)
|
|
98
|
+
if (error !== void 0) {
|
|
99
|
+
if (event.type === "render.error") {
|
|
100
|
+
recordSpanException(activeSpan, error);
|
|
101
|
+
} else {
|
|
102
|
+
recordSpanError(activeSpan, error);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
99
105
|
}
|
|
100
106
|
const completedTraceContext = recordCompletedEventSpan(event, activeContext);
|
|
101
107
|
return traceContext ?? completedTraceContext;
|
|
@@ -192,12 +198,26 @@ function getCompletedSpanDescriptor(event) {
|
|
|
192
198
|
}
|
|
193
199
|
}
|
|
194
200
|
__name(getCompletedSpanDescriptor, "getCompletedSpanDescriptor");
|
|
201
|
+
function hashFarmCacheKey(value) {
|
|
202
|
+
let hash = 2166136261;
|
|
203
|
+
for (let index = 0; index < value.length; index++) {
|
|
204
|
+
hash ^= value.charCodeAt(index);
|
|
205
|
+
hash = Math.imul(hash, 16777619);
|
|
206
|
+
}
|
|
207
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
208
|
+
}
|
|
209
|
+
__name(hashFarmCacheKey, "hashFarmCacheKey");
|
|
195
210
|
function toEventAttributes(event) {
|
|
196
211
|
const attributes = {};
|
|
212
|
+
const redactKey = typeof event.type === "string" && event.type.startsWith("cache.");
|
|
197
213
|
for (const [key, value] of Object.entries(event)) {
|
|
198
214
|
if (key === "timestamp" || key === "level" || key === "error" || key === "traceId" || key === "spanId" || key === "traceSampled" || value === void 0) {
|
|
199
215
|
continue;
|
|
200
216
|
}
|
|
217
|
+
if (redactKey && key === "key" && typeof value === "string") {
|
|
218
|
+
attributes["farm.key_hash"] = hashFarmCacheKey(value);
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
201
221
|
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
202
222
|
attributes[`farm.${key}`] = value;
|
|
203
223
|
} else if (Array.isArray(value)) {
|
|
@@ -217,9 +237,14 @@ function getEventError(event) {
|
|
|
217
237
|
return "error" in event ? event.error : void 0;
|
|
218
238
|
}
|
|
219
239
|
__name(getEventError, "getEventError");
|
|
220
|
-
function
|
|
240
|
+
function recordSpanException(span, error) {
|
|
221
241
|
const normalized = error instanceof Error ? error : new Error(String(error));
|
|
222
242
|
span.recordException(normalized);
|
|
243
|
+
return normalized;
|
|
244
|
+
}
|
|
245
|
+
__name(recordSpanException, "recordSpanException");
|
|
246
|
+
function recordSpanError(span, error) {
|
|
247
|
+
const normalized = recordSpanException(span, error);
|
|
223
248
|
span.setStatus({ code: import_api.SpanStatusCode.ERROR, message: normalized.message });
|
|
224
249
|
}
|
|
225
250
|
__name(recordSpanError, "recordSpanError");
|
|
@@ -378,16 +403,29 @@ function getFarmCacheInvalidationState() {
|
|
|
378
403
|
});
|
|
379
404
|
}
|
|
380
405
|
__name(getFarmCacheInvalidationState, "getFarmCacheInvalidationState");
|
|
406
|
+
function warnFarmCacheListenerError(scope, error) {
|
|
407
|
+
const detail = error instanceof Error ? error.stack ?? error.message : String(error);
|
|
408
|
+
console.warn(`[farm:cache] ${scope} listener failed: ${detail}`);
|
|
409
|
+
}
|
|
410
|
+
__name(warnFarmCacheListenerError, "warnFarmCacheListenerError");
|
|
381
411
|
function notifyFarmCacheInvalidation(key) {
|
|
382
412
|
if (typeof key !== "string" || key.length === 0) return;
|
|
383
413
|
for (const listener of getFarmCacheInvalidationState().listeners) {
|
|
384
|
-
|
|
414
|
+
try {
|
|
415
|
+
listener(key);
|
|
416
|
+
} catch (error) {
|
|
417
|
+
warnFarmCacheListenerError("invalidation", error);
|
|
418
|
+
}
|
|
385
419
|
}
|
|
386
420
|
}
|
|
387
421
|
__name(notifyFarmCacheInvalidation, "notifyFarmCacheInvalidation");
|
|
388
422
|
function notifyFarmCacheTask(task) {
|
|
389
423
|
for (const listener of getFarmCacheInvalidationState().taskListeners) {
|
|
390
|
-
|
|
424
|
+
try {
|
|
425
|
+
listener(task);
|
|
426
|
+
} catch (error) {
|
|
427
|
+
warnFarmCacheListenerError("task", error);
|
|
428
|
+
}
|
|
391
429
|
}
|
|
392
430
|
}
|
|
393
431
|
__name(notifyFarmCacheTask, "notifyFarmCacheTask");
|
|
@@ -1507,7 +1545,8 @@ function createServerQuery(options) {
|
|
|
1507
1545
|
return createFarmServerQueryResult(data, {
|
|
1508
1546
|
key: clientKey,
|
|
1509
1547
|
staleTime,
|
|
1510
|
-
updatedAt
|
|
1548
|
+
updatedAt,
|
|
1549
|
+
...options.persist === true ? { persist: true } : {}
|
|
1511
1550
|
});
|
|
1512
1551
|
}, "handler")
|
|
1513
1552
|
});
|
package/dist/server-query.d.mts
CHANGED
|
@@ -12,6 +12,8 @@ type ServerQueryOptions<TSchema extends ServerFnSchema | undefined, TResult, TMi
|
|
|
12
12
|
key: ServerQueryKey<TSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TSchema> : unknown, ServerFnMiddlewareContext<TMiddlewares>>;
|
|
13
13
|
/** Milliseconds, a duration string such as "30s", or false for no expiry. */
|
|
14
14
|
staleTime?: ServerQueryStaleTime;
|
|
15
|
+
/** Allow the configured client cache persistence adapter to store results on the device. */
|
|
16
|
+
persist?: boolean;
|
|
15
17
|
handler: ServerFnHandler<TSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TSchema> : unknown, TResult, ServerFnMiddlewareContext<TMiddlewares>>;
|
|
16
18
|
};
|
|
17
19
|
type ServerQueryOutputOptions<TInputSchema extends ServerFnSchema | undefined, TOutputSchema extends ServerFnSchema, TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly []> = {
|
|
@@ -21,6 +23,8 @@ type ServerQueryOutputOptions<TInputSchema extends ServerFnSchema | undefined, T
|
|
|
21
23
|
key: ServerQueryKey<TInputSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TInputSchema> : unknown, ServerFnMiddlewareContext<TMiddlewares>>;
|
|
22
24
|
/** Milliseconds, a duration string such as "30s", or false for no expiry. */
|
|
23
25
|
staleTime?: ServerQueryStaleTime;
|
|
26
|
+
/** Allow the configured client cache persistence adapter to store results on the device. */
|
|
27
|
+
persist?: boolean;
|
|
24
28
|
handler: ServerFnHandler<TInputSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TInputSchema> : unknown, unknown, ServerFnMiddlewareContext<TMiddlewares>>;
|
|
25
29
|
};
|
|
26
30
|
type ServerQuery<TInput, TResult> = ([unknown] extends [TInput] ? (input?: TInput) => Promise<TResult> : (input: TInput) => Promise<TResult>) & {
|
package/dist/server-query.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ type ServerQueryOptions<TSchema extends ServerFnSchema | undefined, TResult, TMi
|
|
|
12
12
|
key: ServerQueryKey<TSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TSchema> : unknown, ServerFnMiddlewareContext<TMiddlewares>>;
|
|
13
13
|
/** Milliseconds, a duration string such as "30s", or false for no expiry. */
|
|
14
14
|
staleTime?: ServerQueryStaleTime;
|
|
15
|
+
/** Allow the configured client cache persistence adapter to store results on the device. */
|
|
16
|
+
persist?: boolean;
|
|
15
17
|
handler: ServerFnHandler<TSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TSchema> : unknown, TResult, ServerFnMiddlewareContext<TMiddlewares>>;
|
|
16
18
|
};
|
|
17
19
|
type ServerQueryOutputOptions<TInputSchema extends ServerFnSchema | undefined, TOutputSchema extends ServerFnSchema, TMiddlewares extends readonly AnyServerFnMiddleware[] = readonly []> = {
|
|
@@ -21,6 +23,8 @@ type ServerQueryOutputOptions<TInputSchema extends ServerFnSchema | undefined, T
|
|
|
21
23
|
key: ServerQueryKey<TInputSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TInputSchema> : unknown, ServerFnMiddlewareContext<TMiddlewares>>;
|
|
22
24
|
/** Milliseconds, a duration string such as "30s", or false for no expiry. */
|
|
23
25
|
staleTime?: ServerQueryStaleTime;
|
|
26
|
+
/** Allow the configured client cache persistence adapter to store results on the device. */
|
|
27
|
+
persist?: boolean;
|
|
24
28
|
handler: ServerFnHandler<TInputSchema extends ServerFnSchema ? InferServerFnSchemaOutput<TInputSchema> : unknown, unknown, ServerFnMiddlewareContext<TMiddlewares>>;
|
|
25
29
|
};
|
|
26
30
|
type ServerQuery<TInput, TResult> = ([unknown] extends [TInput] ? (input?: TInput) => Promise<TResult> : (input: TInput) => Promise<TResult>) & {
|