@farm.js/core 0.1.0-beta.96 → 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 +6 -6
- 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 +4 -4
- package/dist/api.cjs +239 -70
- package/dist/api.d.mts +7 -6
- package/dist/api.d.ts +7 -6
- package/dist/api.mjs +17 -11
- 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-MM46HTX6.mjs → chunk-3TWQERDE.mjs} +4 -3
- package/dist/chunk-3TWQERDE.mjs.map +1 -0
- package/dist/{chunk-RWYRFCLG.mjs → chunk-4X57GXQA.mjs} +2 -2
- package/dist/{chunk-3I55IGXU.mjs → chunk-52BR7LTX.mjs} +14 -15
- package/dist/chunk-52BR7LTX.mjs.map +1 -0
- package/dist/{chunk-RAGSHKDC.mjs → chunk-6EJHNHH4.mjs} +38 -3
- 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-54XSGLKT.mjs → chunk-D7F7YZ7L.mjs} +93 -67
- package/dist/chunk-D7F7YZ7L.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-LZTGDH3H.mjs → chunk-EPDIF432.mjs} +424 -10
- package/dist/chunk-EPDIF432.mjs.map +1 -0
- package/dist/{chunk-GZHKWHCH.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-LKKMI7JG.mjs → chunk-IZBX2TEU.mjs} +153 -68
- package/dist/chunk-IZBX2TEU.mjs.map +1 -0
- package/dist/{chunk-74QPONAN.mjs → chunk-J3MPQ4MQ.mjs} +2 -2
- package/dist/{chunk-74QPONAN.mjs.map → chunk-J3MPQ4MQ.mjs.map} +1 -1
- package/dist/{chunk-ODJGAWDH.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-WMAYETRD.mjs → chunk-TT3E2JOF.mjs} +3 -3
- package/dist/{chunk-FVAM43KI.mjs → chunk-UMUWR5XA.mjs} +2 -2
- package/dist/{chunk-VOUJW4FL.mjs → chunk-WD2EBM3I.mjs} +70 -15
- package/dist/chunk-WD2EBM3I.mjs.map +1 -0
- package/dist/{chunk-ZPG6SNHH.mjs → chunk-WMJGA32P.mjs} +47 -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 +757 -104
- package/dist/client.d.mts +124 -16
- package/dist/client.d.ts +124 -16
- package/dist/client.mjs +28 -14
- 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-EOVDBPOI.mjs → devtools-client-Z7QQA3Q2.mjs} +2 -2
- 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 +1578 -772
- package/dist/index.d.mts +28 -20
- package/dist/index.d.ts +28 -20
- package/dist/index.mjs +53 -33
- 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 +710 -532
- package/dist/internal/build-runtime.d.mts +5 -4
- package/dist/internal/build-runtime.d.ts +5 -4
- package/dist/internal/build-runtime.mjs +15 -15
- 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 +474 -334
- package/dist/plugin.d.mts +3 -2
- package/dist/plugin.d.ts +3 -2
- package/dist/plugin.mjs +12 -12
- 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 +11 -3
- package/dist/query/client.mjs +12 -4
- 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 +140 -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 +34 -2
- package/dist/server-fn-client.d.mts +6 -0
- package/dist/server-fn-client.d.ts +6 -0
- package/dist/server-fn-client.mjs +1 -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 +146 -27
- 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 +499 -355
- package/dist/server.d.mts +11 -10
- package/dist/server.d.ts +11 -10
- package/dist/server.mjs +16 -16
- 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 +8 -8
- 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 +482 -338
- package/dist/vite.d.mts +3 -2
- package/dist/vite.d.ts +3 -2
- package/dist/vite.mjs +16 -12
- package/package.json +17 -17
- package/types/client.d.ts +87 -1
- 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-3I55IGXU.mjs.map +0 -1
- package/dist/chunk-54XSGLKT.mjs.map +0 -1
- package/dist/chunk-7MABZJIM.mjs.map +0 -1
- package/dist/chunk-AXVJCMVF.mjs.map +0 -1
- package/dist/chunk-GZHKWHCH.mjs.map +0 -1
- package/dist/chunk-HHZAOTQD.mjs.map +0 -1
- package/dist/chunk-LKKMI7JG.mjs.map +0 -1
- package/dist/chunk-LZTGDH3H.mjs.map +0 -1
- package/dist/chunk-MM46HTX6.mjs.map +0 -1
- package/dist/chunk-MRVJCLYQ.mjs.map +0 -1
- package/dist/chunk-Q7GPJZCO.mjs.map +0 -1
- package/dist/chunk-RAGSHKDC.mjs.map +0 -1
- package/dist/chunk-RBRLLZL5.mjs.map +0 -1
- package/dist/chunk-SCFX4UTD.mjs.map +0 -1
- package/dist/chunk-VOUJW4FL.mjs.map +0 -1
- package/dist/chunk-WB75GIX2.mjs.map +0 -1
- package/dist/chunk-ZFNK77WN.mjs.map +0 -1
- package/dist/chunk-ZPG6SNHH.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-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-ODJGAWDH.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-WMAYETRD.mjs.map → chunk-TT3E2JOF.mjs.map} +0 -0
- /package/dist/{chunk-FVAM43KI.mjs.map → chunk-UMUWR5XA.mjs.map} +0 -0
- /package/dist/{devtools-S52RRRMN.mjs.map → devtools-XWZX6CCL.mjs.map} +0 -0
- /package/dist/{devtools-client-EOVDBPOI.mjs.map → devtools-client-Z7QQA3Q2.mjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server-query-protocol.ts"],"sourcesContent":["export const FARM_SERVER_QUERY_RESULT_VERSION = 1 as const;\n\nexport type FarmServerQueryResult<TData> = {\n __farmServerQuery: {\n version: typeof FARM_SERVER_QUERY_RESULT_VERSION;\n key: string;\n staleTime: number | false;\n updatedAt: number;\n /** Declared by the query; allows the client persistence adapter to store the entry. */\n persist?: boolean;\n };\n data: TData;\n};\n\nexport function createFarmServerQueryResult<TData>(\n data: TData,\n metadata: Omit<FarmServerQueryResult<TData>[\"__farmServerQuery\"], \"version\">,\n): FarmServerQueryResult<TData> {\n return {\n __farmServerQuery: {\n version: FARM_SERVER_QUERY_RESULT_VERSION,\n ...metadata,\n },\n data,\n };\n}\n\nexport function isFarmServerQueryResult(value: unknown): value is FarmServerQueryResult<unknown> {\n if (!value || typeof value !== \"object\") return false;\n\n const metadata = (value as Partial<FarmServerQueryResult<unknown>>).__farmServerQuery;\n return (\n metadata?.version === FARM_SERVER_QUERY_RESULT_VERSION &&\n typeof metadata.key === \"string\" &&\n (metadata.staleTime === false || typeof metadata.staleTime === \"number\") &&\n typeof metadata.updatedAt === \"number\" &&\n \"data\" in value\n );\n}\n"],"mappings":";;;;;AAAO,IAAM,mCAAmC;AAczC,SAAS,4BACd,MACA,UAC8B;AAC9B,SAAO;AAAA,IACL,mBAAmB;AAAA,MACjB,SAAS;AAAA,MACT,GAAG;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAXgB;AAaT,SAAS,wBAAwB,OAAyD;AAC/F,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAEhD,QAAM,WAAY,MAAkD;AACpE,SACE,UAAU,YAAY,oCACtB,OAAO,SAAS,QAAQ,aACvB,SAAS,cAAc,SAAS,OAAO,SAAS,cAAc,aAC/D,OAAO,SAAS,cAAc,YAC9B,UAAU;AAEd;AAXgB;","names":[]}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
|
+
invokeMutationWithRetry
|
|
3
|
+
} from "./chunk-6EJHNHH4.mjs";
|
|
4
|
+
import {
|
|
5
|
+
applyServerFnOptimisticUpdates,
|
|
2
6
|
getAPIRouteRefMetadata,
|
|
3
|
-
isAPIRouteRef
|
|
4
|
-
|
|
7
|
+
isAPIRouteRef,
|
|
8
|
+
resolveServerFnInvalidateTargets,
|
|
9
|
+
settleServerFnOptimisticUpdates
|
|
10
|
+
} from "./chunk-IZBX2TEU.mjs";
|
|
5
11
|
import {
|
|
6
12
|
notifyClientObserver
|
|
7
13
|
} from "./chunk-DU3PKDVQ.mjs";
|
|
@@ -12,9 +18,18 @@ import {
|
|
|
12
18
|
isFarmLocaleChangeHref,
|
|
13
19
|
localizeActiveFarmHref
|
|
14
20
|
} from "./chunk-ULD4ENAH.mjs";
|
|
21
|
+
import {
|
|
22
|
+
getFarmClientDataCache
|
|
23
|
+
} from "./chunk-WMJGA32P.mjs";
|
|
15
24
|
import {
|
|
16
25
|
getFarmTrailingSlashPreference
|
|
17
26
|
} from "./chunk-RCNUKRBF.mjs";
|
|
27
|
+
import {
|
|
28
|
+
decodeFarmCacheInvalidations,
|
|
29
|
+
encodeFarmCacheInvalidations,
|
|
30
|
+
notifyFarmCacheInvalidation,
|
|
31
|
+
subscribeFarmCacheInvalidation
|
|
32
|
+
} from "./chunk-34IAPZBG.mjs";
|
|
18
33
|
import {
|
|
19
34
|
applyFarmBasePath,
|
|
20
35
|
getFarmBasePath,
|
|
@@ -26,6 +41,22 @@ import {
|
|
|
26
41
|
|
|
27
42
|
// src/mutation-client.ts
|
|
28
43
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
44
|
+
|
|
45
|
+
// src/client-network-status.ts
|
|
46
|
+
function isNavigatorOnline() {
|
|
47
|
+
if (typeof navigator === "undefined" || typeof navigator.onLine !== "boolean") return true;
|
|
48
|
+
return navigator.onLine;
|
|
49
|
+
}
|
|
50
|
+
__name(isNavigatorOnline, "isNavigatorOnline");
|
|
51
|
+
function subscribeOnline(listener) {
|
|
52
|
+
if (typeof window === "undefined") return () => {
|
|
53
|
+
};
|
|
54
|
+
window.addEventListener("online", listener);
|
|
55
|
+
return () => window.removeEventListener("online", listener);
|
|
56
|
+
}
|
|
57
|
+
__name(subscribeOnline, "subscribeOnline");
|
|
58
|
+
|
|
59
|
+
// src/mutation-client.ts
|
|
29
60
|
function useMutation(target, options = {}) {
|
|
30
61
|
return useMutationLifecycle(target, options).mutation;
|
|
31
62
|
}
|
|
@@ -38,12 +69,14 @@ function useMutationLifecycle(target, options = {}) {
|
|
|
38
69
|
const lastResetIdRef = useRef(0);
|
|
39
70
|
const initialState = {
|
|
40
71
|
pendingCount: 0,
|
|
72
|
+
pausedCount: 0,
|
|
41
73
|
status: "idle",
|
|
42
74
|
data: initialData,
|
|
43
75
|
error: null,
|
|
44
76
|
variables: void 0
|
|
45
77
|
};
|
|
46
78
|
const stateRef = useRef(initialState);
|
|
79
|
+
const resetWakersRef = useRef(/* @__PURE__ */ new Set());
|
|
47
80
|
const [state, setState] = useState(initialState);
|
|
48
81
|
optionsRef.current = options;
|
|
49
82
|
targetRef.current = target;
|
|
@@ -55,6 +88,31 @@ function useMutationLifecycle(target, options = {}) {
|
|
|
55
88
|
},
|
|
56
89
|
[]
|
|
57
90
|
);
|
|
91
|
+
const waitForReconnect = useCallback(
|
|
92
|
+
async (requestId) => {
|
|
93
|
+
while (!isNavigatorOnline()) {
|
|
94
|
+
if (requestId < lastResetIdRef.current) return;
|
|
95
|
+
setMutationState((current) => ({ ...current, pausedCount: current.pausedCount + 1 }));
|
|
96
|
+
try {
|
|
97
|
+
await new Promise((resolve) => {
|
|
98
|
+
const wake = /* @__PURE__ */ __name(() => {
|
|
99
|
+
unsubscribe();
|
|
100
|
+
resetWakersRef.current.delete(wake);
|
|
101
|
+
resolve();
|
|
102
|
+
}, "wake");
|
|
103
|
+
const unsubscribe = subscribeOnline(wake);
|
|
104
|
+
resetWakersRef.current.add(wake);
|
|
105
|
+
});
|
|
106
|
+
} finally {
|
|
107
|
+
setMutationState((current) => ({
|
|
108
|
+
...current,
|
|
109
|
+
pausedCount: Math.max(0, current.pausedCount - 1)
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
[setMutationState]
|
|
115
|
+
);
|
|
58
116
|
const mutatePreparedAsync = useCallback(
|
|
59
117
|
async (prepare) => {
|
|
60
118
|
const requestId = ++requestIdRef.current;
|
|
@@ -77,17 +135,49 @@ function useMutationLifecycle(target, options = {}) {
|
|
|
77
135
|
if (requestId !== requestIdRef.current) return { ...current, pendingCount };
|
|
78
136
|
return {
|
|
79
137
|
pendingCount,
|
|
138
|
+
pausedCount: current.pausedCount,
|
|
80
139
|
status: "pending",
|
|
81
140
|
data: hasOptimisticData ? optimisticData : currentOptions.resetOnMutate === false ? current.data : null,
|
|
82
141
|
error: null,
|
|
83
142
|
variables
|
|
84
143
|
};
|
|
85
144
|
});
|
|
145
|
+
const mutationTarget = targetRef.current;
|
|
146
|
+
const isAPITarget = isAPIRouteRef(mutationTarget);
|
|
147
|
+
const sharedOptimistic = !preparationFailed && !isAPITarget ? currentOptions.request?.optimistic : void 0;
|
|
148
|
+
const sharedSnapshots = sharedOptimistic?.update?.length ? applyServerFnOptimisticUpdates(sharedOptimistic.update) : [];
|
|
86
149
|
try {
|
|
87
150
|
if (preparationFailed) throw preparationError;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
151
|
+
let data;
|
|
152
|
+
while (true) {
|
|
153
|
+
if (currentOptions.networkMode === "online") {
|
|
154
|
+
await waitForReconnect(requestId);
|
|
155
|
+
if (requestId < lastResetIdRef.current) {
|
|
156
|
+
throw new Error("Mutation reset while waiting for reconnection");
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
const rawResult = isAPITarget ? await mutationTarget(variables, currentOptions.request) : await invokeMutationWithRetry(
|
|
161
|
+
() => targetRef.current(variables),
|
|
162
|
+
currentOptions.request?.retry,
|
|
163
|
+
// A reset disowns this submission; stop scheduling retries then.
|
|
164
|
+
() => requestId >= lastResetIdRef.current
|
|
165
|
+
);
|
|
166
|
+
data = unwrapMutationResult(rawResult, isAPITarget);
|
|
167
|
+
break;
|
|
168
|
+
} catch (cause) {
|
|
169
|
+
if (currentOptions.networkMode === "online" && !isNavigatorOnline() && requestId >= lastResetIdRef.current) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
throw cause;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
settleServerFnOptimisticUpdates(sharedSnapshots, "commit");
|
|
176
|
+
if (!isAPITarget && currentOptions.request?.invalidate) {
|
|
177
|
+
for (const key of resolveServerFnInvalidateTargets(currentOptions.request.invalidate)) {
|
|
178
|
+
notifyFarmCacheInvalidation(key);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
91
181
|
const isLatestRequest = requestId === requestIdRef.current;
|
|
92
182
|
setMutationState((current) => {
|
|
93
183
|
if (requestId < lastResetIdRef.current) return current;
|
|
@@ -100,6 +190,7 @@ function useMutationLifecycle(target, options = {}) {
|
|
|
100
190
|
}
|
|
101
191
|
return {
|
|
102
192
|
pendingCount,
|
|
193
|
+
pausedCount: current.pausedCount,
|
|
103
194
|
status: "success",
|
|
104
195
|
data,
|
|
105
196
|
error: null,
|
|
@@ -118,6 +209,10 @@ function useMutationLifecycle(target, options = {}) {
|
|
|
118
209
|
}
|
|
119
210
|
return data;
|
|
120
211
|
} catch (cause) {
|
|
212
|
+
settleServerFnOptimisticUpdates(
|
|
213
|
+
sharedSnapshots,
|
|
214
|
+
sharedOptimistic?.rollbackOnError ? "rollback" : "invalidate"
|
|
215
|
+
);
|
|
121
216
|
const error = normalizeMutationError(cause);
|
|
122
217
|
const isLatestRequest = requestId === requestIdRef.current;
|
|
123
218
|
setMutationState((current) => {
|
|
@@ -131,6 +226,7 @@ function useMutationLifecycle(target, options = {}) {
|
|
|
131
226
|
}
|
|
132
227
|
return {
|
|
133
228
|
pendingCount,
|
|
229
|
+
pausedCount: current.pausedCount,
|
|
134
230
|
status: "error",
|
|
135
231
|
data: hasOptimisticData && currentOptions.rollbackOnError ? previousData : currentOptions.resetOnMutate === false ? current.data : null,
|
|
136
232
|
error,
|
|
@@ -150,7 +246,7 @@ function useMutationLifecycle(target, options = {}) {
|
|
|
150
246
|
throw error;
|
|
151
247
|
}
|
|
152
248
|
},
|
|
153
|
-
[setMutationState]
|
|
249
|
+
[setMutationState, waitForReconnect]
|
|
154
250
|
);
|
|
155
251
|
const mutateAsync = useCallback(
|
|
156
252
|
(variables) => mutatePreparedAsync(() => variables),
|
|
@@ -167,15 +263,20 @@ function useMutationLifecycle(target, options = {}) {
|
|
|
167
263
|
lastResetIdRef.current = ++requestIdRef.current;
|
|
168
264
|
setMutationState({
|
|
169
265
|
pendingCount: 0,
|
|
266
|
+
pausedCount: 0,
|
|
170
267
|
status: "idle",
|
|
171
268
|
data: optionsRef.current.initialData ?? null,
|
|
172
269
|
error: null,
|
|
173
270
|
variables: void 0
|
|
174
271
|
});
|
|
272
|
+
const wakers = Array.from(resetWakersRef.current);
|
|
273
|
+
resetWakersRef.current.clear();
|
|
274
|
+
for (const wake of wakers) wake();
|
|
175
275
|
}, [setMutationState]);
|
|
176
276
|
const mutation = useMemo(
|
|
177
277
|
() => ({
|
|
178
278
|
pending: state.pendingCount > 0,
|
|
279
|
+
paused: state.pausedCount > 0,
|
|
179
280
|
status: state.status,
|
|
180
281
|
data: state.data,
|
|
181
282
|
error: state.error,
|
|
@@ -190,6 +291,7 @@ function useMutationLifecycle(target, options = {}) {
|
|
|
190
291
|
reset,
|
|
191
292
|
state.data,
|
|
192
293
|
state.error,
|
|
294
|
+
state.pausedCount,
|
|
193
295
|
state.pendingCount,
|
|
194
296
|
state.status,
|
|
195
297
|
state.variables
|
|
@@ -315,6 +417,7 @@ function useFetcher(target, options = {}) {
|
|
|
315
417
|
state: mutation.pending ? "submitting" : "idle",
|
|
316
418
|
status: mutation.status,
|
|
317
419
|
pending: mutation.pending,
|
|
420
|
+
paused: mutation.paused,
|
|
318
421
|
data: mutation.data,
|
|
319
422
|
error: mutation.error,
|
|
320
423
|
variables: mutation.variables,
|
|
@@ -329,6 +432,7 @@ function useFetcher(target, options = {}) {
|
|
|
329
432
|
formData,
|
|
330
433
|
mutation.data,
|
|
331
434
|
mutation.error,
|
|
435
|
+
mutation.paused,
|
|
332
436
|
mutation.pending,
|
|
333
437
|
mutation.status,
|
|
334
438
|
mutation.variables,
|
|
@@ -347,9 +451,18 @@ function mapFetcherFormData(target, formData, options) {
|
|
|
347
451
|
if (!isAPIRouteRef(target)) {
|
|
348
452
|
return formData;
|
|
349
453
|
}
|
|
350
|
-
const values = formDataToObject(formData);
|
|
351
454
|
const method = getAPIRouteRefMetadata(target)?.method;
|
|
352
|
-
|
|
455
|
+
const query = method === "GET" || method === "HEAD";
|
|
456
|
+
const encoding = context.submitter?.getAttribute("formenctype") ?? context.form?.enctype;
|
|
457
|
+
if (!query && (encoding?.toLowerCase() === "multipart/form-data" || Array.from(formData.values()).some((value) => typeof value !== "string"))) {
|
|
458
|
+
const body = new FormData();
|
|
459
|
+
for (const [key, value] of formData) {
|
|
460
|
+
if (!isUnsafeFormKey(key)) body.append(key, value);
|
|
461
|
+
}
|
|
462
|
+
return { body };
|
|
463
|
+
}
|
|
464
|
+
const values = formDataToObject(formData);
|
|
465
|
+
return query ? { query: values } : { body: values };
|
|
353
466
|
}
|
|
354
467
|
__name(mapFetcherFormData, "mapFetcherFormData");
|
|
355
468
|
function resolveFetcherFormAction(target, metadata) {
|
|
@@ -361,7 +474,7 @@ __name(resolveFetcherFormAction, "resolveFetcherFormAction");
|
|
|
361
474
|
function formDataToObject(formData) {
|
|
362
475
|
const output = /* @__PURE__ */ Object.create(null);
|
|
363
476
|
for (const [key, value] of formData.entries()) {
|
|
364
|
-
if (key
|
|
477
|
+
if (isUnsafeFormKey(key)) continue;
|
|
365
478
|
const current = output[key];
|
|
366
479
|
if (current === void 0) {
|
|
367
480
|
output[key] = value;
|
|
@@ -374,6 +487,10 @@ function formDataToObject(formData) {
|
|
|
374
487
|
return output;
|
|
375
488
|
}
|
|
376
489
|
__name(formDataToObject, "formDataToObject");
|
|
490
|
+
function isUnsafeFormKey(key) {
|
|
491
|
+
return key === "__proto__" || key === "constructor" || key === "prototype";
|
|
492
|
+
}
|
|
493
|
+
__name(isUnsafeFormKey, "isUnsafeFormKey");
|
|
377
494
|
function createSubmitterFormData(form, submitter) {
|
|
378
495
|
try {
|
|
379
496
|
return new FormData(form, submitter);
|
|
@@ -403,6 +520,296 @@ function isFormData(value) {
|
|
|
403
520
|
}
|
|
404
521
|
__name(isFormData, "isFormData");
|
|
405
522
|
|
|
523
|
+
// src/cache-invalidation-broadcast.ts
|
|
524
|
+
var FARM_CACHE_INVALIDATION_CHANNEL = "farm:cache-invalidation";
|
|
525
|
+
var activeBridge;
|
|
526
|
+
function enableCrossTabCacheInvalidation(options = {}) {
|
|
527
|
+
if (typeof BroadcastChannel !== "function") return () => {
|
|
528
|
+
};
|
|
529
|
+
const channelName = options.channelName ?? FARM_CACHE_INVALIDATION_CHANNEL;
|
|
530
|
+
if (activeBridge) {
|
|
531
|
+
if (activeBridge.channelName !== channelName) {
|
|
532
|
+
throw new Error(
|
|
533
|
+
`Cross-tab cache invalidation is already enabled on channel "${activeBridge.channelName}".`
|
|
534
|
+
);
|
|
535
|
+
}
|
|
536
|
+
activeBridge.refCount += 1;
|
|
537
|
+
} else {
|
|
538
|
+
activeBridge = createBridge(channelName);
|
|
539
|
+
}
|
|
540
|
+
let disposed = false;
|
|
541
|
+
return () => {
|
|
542
|
+
if (disposed || !activeBridge) return;
|
|
543
|
+
disposed = true;
|
|
544
|
+
activeBridge.refCount -= 1;
|
|
545
|
+
if (activeBridge.refCount === 0) {
|
|
546
|
+
activeBridge.teardown();
|
|
547
|
+
activeBridge = void 0;
|
|
548
|
+
}
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
__name(enableCrossTabCacheInvalidation, "enableCrossTabCacheInvalidation");
|
|
552
|
+
function createBridge(channelName) {
|
|
553
|
+
const channel = new BroadcastChannel(channelName);
|
|
554
|
+
let applyingRemote = false;
|
|
555
|
+
let pending = [];
|
|
556
|
+
let flushScheduled = false;
|
|
557
|
+
let closed = false;
|
|
558
|
+
const flush = /* @__PURE__ */ __name(() => {
|
|
559
|
+
flushScheduled = false;
|
|
560
|
+
if (closed || pending.length === 0) return;
|
|
561
|
+
const encoded = encodeFarmCacheInvalidations(pending);
|
|
562
|
+
pending = [];
|
|
563
|
+
if (encoded !== null) channel.postMessage(encoded);
|
|
564
|
+
}, "flush");
|
|
565
|
+
const unsubscribe = subscribeFarmCacheInvalidation((key) => {
|
|
566
|
+
if (applyingRemote || closed) return;
|
|
567
|
+
pending.push(key);
|
|
568
|
+
if (!flushScheduled) {
|
|
569
|
+
flushScheduled = true;
|
|
570
|
+
queueMicrotask(flush);
|
|
571
|
+
}
|
|
572
|
+
});
|
|
573
|
+
channel.onmessage = (event) => {
|
|
574
|
+
const keys = decodeFarmCacheInvalidations(
|
|
575
|
+
typeof event.data === "string" ? event.data : void 0
|
|
576
|
+
);
|
|
577
|
+
if (keys.length === 0) return;
|
|
578
|
+
applyingRemote = true;
|
|
579
|
+
try {
|
|
580
|
+
for (const key of keys) notifyFarmCacheInvalidation(key);
|
|
581
|
+
} finally {
|
|
582
|
+
applyingRemote = false;
|
|
583
|
+
}
|
|
584
|
+
};
|
|
585
|
+
return {
|
|
586
|
+
channelName,
|
|
587
|
+
refCount: 1,
|
|
588
|
+
teardown() {
|
|
589
|
+
closed = true;
|
|
590
|
+
pending = [];
|
|
591
|
+
unsubscribe();
|
|
592
|
+
channel.onmessage = null;
|
|
593
|
+
channel.close();
|
|
594
|
+
}
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
__name(createBridge, "createBridge");
|
|
598
|
+
|
|
599
|
+
// src/client-cache-persistence.ts
|
|
600
|
+
var FARM_CLIENT_CACHE_PERSIST_VERSION = "1";
|
|
601
|
+
function defineClientCacheAdapter(adapter) {
|
|
602
|
+
for (const method of ["keys", "get", "set", "delete", "clear"]) {
|
|
603
|
+
if (typeof adapter?.[method] !== "function") {
|
|
604
|
+
throw new TypeError(
|
|
605
|
+
`defineClientCacheAdapter expects a "${method}" method. Implement keys/get/set/delete/clear over your storage.`
|
|
606
|
+
);
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
return adapter;
|
|
610
|
+
}
|
|
611
|
+
__name(defineClientCacheAdapter, "defineClientCacheAdapter");
|
|
612
|
+
function storageClientCacheAdapter(storage, options = {}) {
|
|
613
|
+
if (!storage || typeof storage.getItem !== "function" || typeof storage.setItem !== "function" || typeof storage.removeItem !== "function") {
|
|
614
|
+
throw new TypeError("storageClientCacheAdapter expects a compatible key-value client.");
|
|
615
|
+
}
|
|
616
|
+
const base = options.base ?? "farm-client-cache";
|
|
617
|
+
const entryKey = /* @__PURE__ */ __name((key) => `${base}:${key}`, "entryKey");
|
|
618
|
+
const enumerate = storage.getKeys?.bind(storage) ?? storage.keys?.bind(storage);
|
|
619
|
+
return {
|
|
620
|
+
async keys() {
|
|
621
|
+
if (!enumerate) return [];
|
|
622
|
+
const keys = await enumerate(base);
|
|
623
|
+
const prefix = `${base}:`;
|
|
624
|
+
return keys.filter((key) => key.startsWith(prefix)).map((key) => key.slice(prefix.length));
|
|
625
|
+
},
|
|
626
|
+
async get(key) {
|
|
627
|
+
return await storage.getItem(entryKey(key)) ?? null;
|
|
628
|
+
},
|
|
629
|
+
async set(key, entry) {
|
|
630
|
+
await storage.setItem(entryKey(key), entry);
|
|
631
|
+
},
|
|
632
|
+
async delete(key) {
|
|
633
|
+
await storage.removeItem(entryKey(key));
|
|
634
|
+
},
|
|
635
|
+
async clear() {
|
|
636
|
+
if (storage.clear) {
|
|
637
|
+
await storage.clear(base);
|
|
638
|
+
return;
|
|
639
|
+
}
|
|
640
|
+
if (!enumerate) return;
|
|
641
|
+
const prefix = `${base}:`;
|
|
642
|
+
for (const key of await enumerate(base)) {
|
|
643
|
+
if (key.startsWith(prefix)) await storage.removeItem(key);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
};
|
|
647
|
+
}
|
|
648
|
+
__name(storageClientCacheAdapter, "storageClientCacheAdapter");
|
|
649
|
+
var activeEngine;
|
|
650
|
+
function reportPersistenceFailure(error) {
|
|
651
|
+
const report = typeof reportError === "function" ? reportError : console.error;
|
|
652
|
+
if (error instanceof Error) {
|
|
653
|
+
report(error);
|
|
654
|
+
return;
|
|
655
|
+
}
|
|
656
|
+
const normalized = new Error("Client cache persistence failed");
|
|
657
|
+
normalized.cause = error;
|
|
658
|
+
report(normalized);
|
|
659
|
+
}
|
|
660
|
+
__name(reportPersistenceFailure, "reportPersistenceFailure");
|
|
661
|
+
function disableEngine(engine, error) {
|
|
662
|
+
if (engine.disabled) return;
|
|
663
|
+
engine.disabled = true;
|
|
664
|
+
engine.pendingSets.clear();
|
|
665
|
+
engine.pendingDeletes.clear();
|
|
666
|
+
if (engine.flushTimer !== void 0) {
|
|
667
|
+
clearTimeout(engine.flushTimer);
|
|
668
|
+
engine.flushTimer = void 0;
|
|
669
|
+
}
|
|
670
|
+
reportPersistenceFailure(error);
|
|
671
|
+
}
|
|
672
|
+
__name(disableEngine, "disableEngine");
|
|
673
|
+
function scheduleFlush(engine) {
|
|
674
|
+
if (engine.disabled || engine.flushTimer !== void 0) return;
|
|
675
|
+
const timer = setTimeout(() => {
|
|
676
|
+
engine.flushTimer = void 0;
|
|
677
|
+
void flushEngine(engine);
|
|
678
|
+
}, engine.flushDelayMs);
|
|
679
|
+
timer.unref?.();
|
|
680
|
+
engine.flushTimer = timer;
|
|
681
|
+
}
|
|
682
|
+
__name(scheduleFlush, "scheduleFlush");
|
|
683
|
+
async function flushEngine(engine) {
|
|
684
|
+
if (engine.disabled) return;
|
|
685
|
+
const sets = Array.from(engine.pendingSets.entries());
|
|
686
|
+
const deletes = Array.from(engine.pendingDeletes);
|
|
687
|
+
engine.pendingSets.clear();
|
|
688
|
+
engine.pendingDeletes.clear();
|
|
689
|
+
try {
|
|
690
|
+
if (sets.length > 0) {
|
|
691
|
+
if (engine.adapter.setMany) await engine.adapter.setMany(sets);
|
|
692
|
+
else for (const [key, entry] of sets) await engine.adapter.set(key, entry);
|
|
693
|
+
}
|
|
694
|
+
for (const key of deletes) await engine.adapter.delete(key);
|
|
695
|
+
} catch (error) {
|
|
696
|
+
disableEngine(engine, error);
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
__name(flushEngine, "flushEngine");
|
|
700
|
+
async function hydrateEngine(engine) {
|
|
701
|
+
const now = Date.now();
|
|
702
|
+
const keys = await engine.adapter.keys();
|
|
703
|
+
if (keys.length === 0) return;
|
|
704
|
+
const persisted = engine.adapter.getMany ? await engine.adapter.getMany(keys) : await Promise.all(keys.map((key) => engine.adapter.get(key)));
|
|
705
|
+
engine.hydrating = true;
|
|
706
|
+
try {
|
|
707
|
+
for (let index = 0; index < keys.length; index += 1) {
|
|
708
|
+
const key = keys[index];
|
|
709
|
+
const entry = persisted[index];
|
|
710
|
+
if (engine.disabled) return;
|
|
711
|
+
if (!entry || entry.version !== engine.version || entry.gcAt !== void 0 && now >= entry.gcAt) {
|
|
712
|
+
engine.pendingDeletes.add(key);
|
|
713
|
+
continue;
|
|
714
|
+
}
|
|
715
|
+
if (engine.cache.get(key, now)) continue;
|
|
716
|
+
engine.cache.set(key, {
|
|
717
|
+
data: entry.data,
|
|
718
|
+
updatedAt: entry.updatedAt,
|
|
719
|
+
staleAt: 0,
|
|
720
|
+
gcAt: entry.gcAt,
|
|
721
|
+
status: "success",
|
|
722
|
+
error: null,
|
|
723
|
+
persist: true
|
|
724
|
+
});
|
|
725
|
+
}
|
|
726
|
+
} finally {
|
|
727
|
+
engine.hydrating = false;
|
|
728
|
+
}
|
|
729
|
+
if (engine.pendingDeletes.size > 0) scheduleFlush(engine);
|
|
730
|
+
}
|
|
731
|
+
__name(hydrateEngine, "hydrateEngine");
|
|
732
|
+
function createSink(engine) {
|
|
733
|
+
return {
|
|
734
|
+
onSet(key, entry) {
|
|
735
|
+
if (engine.disabled || engine.hydrating) return;
|
|
736
|
+
if (!entry.persist || entry.fetching || entry.error || entry.status === "pending") return;
|
|
737
|
+
if (engine.persistKey && !engine.persistKey(key)) return;
|
|
738
|
+
engine.pendingDeletes.delete(key);
|
|
739
|
+
engine.pendingSets.set(key, {
|
|
740
|
+
data: entry.data,
|
|
741
|
+
updatedAt: entry.updatedAt,
|
|
742
|
+
staleAt: entry.staleAt,
|
|
743
|
+
gcAt: entry.gcAt,
|
|
744
|
+
version: engine.version
|
|
745
|
+
});
|
|
746
|
+
scheduleFlush(engine);
|
|
747
|
+
},
|
|
748
|
+
onDelete(key) {
|
|
749
|
+
if (engine.disabled) return;
|
|
750
|
+
engine.pendingSets.delete(key);
|
|
751
|
+
engine.pendingDeletes.add(key);
|
|
752
|
+
scheduleFlush(engine);
|
|
753
|
+
},
|
|
754
|
+
onClear() {
|
|
755
|
+
if (engine.disabled) return;
|
|
756
|
+
engine.pendingSets.clear();
|
|
757
|
+
engine.pendingDeletes.clear();
|
|
758
|
+
void engine.adapter.clear().catch((error) => disableEngine(engine, error));
|
|
759
|
+
}
|
|
760
|
+
};
|
|
761
|
+
}
|
|
762
|
+
__name(createSink, "createSink");
|
|
763
|
+
function initPersistedClientCache(adapter, options = {}) {
|
|
764
|
+
defineClientCacheAdapter(adapter);
|
|
765
|
+
disposePersistedClientCache();
|
|
766
|
+
const engine = {
|
|
767
|
+
adapter,
|
|
768
|
+
cache: getFarmClientDataCache(),
|
|
769
|
+
version: options.version ? `${FARM_CLIENT_CACHE_PERSIST_VERSION}:${options.version}` : FARM_CLIENT_CACHE_PERSIST_VERSION,
|
|
770
|
+
persistKey: options.persistKey,
|
|
771
|
+
flushDelayMs: options.flushDelayMs ?? 300,
|
|
772
|
+
pendingSets: /* @__PURE__ */ new Map(),
|
|
773
|
+
pendingDeletes: /* @__PURE__ */ new Set(),
|
|
774
|
+
flushTimer: void 0,
|
|
775
|
+
hydrating: false,
|
|
776
|
+
disabled: false
|
|
777
|
+
};
|
|
778
|
+
activeEngine = engine;
|
|
779
|
+
engine.cache.attachPersistence(createSink(engine));
|
|
780
|
+
void hydrateEngine(engine).catch((error) => disableEngine(engine, error));
|
|
781
|
+
return () => {
|
|
782
|
+
if (activeEngine !== engine) return;
|
|
783
|
+
disposePersistedClientCache();
|
|
784
|
+
};
|
|
785
|
+
}
|
|
786
|
+
__name(initPersistedClientCache, "initPersistedClientCache");
|
|
787
|
+
function disposePersistedClientCache() {
|
|
788
|
+
const engine = activeEngine;
|
|
789
|
+
if (!engine) return;
|
|
790
|
+
activeEngine = void 0;
|
|
791
|
+
engine.cache.attachPersistence(void 0);
|
|
792
|
+
if (engine.flushTimer !== void 0) {
|
|
793
|
+
clearTimeout(engine.flushTimer);
|
|
794
|
+
engine.flushTimer = void 0;
|
|
795
|
+
}
|
|
796
|
+
engine.pendingSets.clear();
|
|
797
|
+
engine.pendingDeletes.clear();
|
|
798
|
+
}
|
|
799
|
+
__name(disposePersistedClientCache, "disposePersistedClientCache");
|
|
800
|
+
async function clearPersistedCache() {
|
|
801
|
+
const engine = activeEngine;
|
|
802
|
+
if (!engine) return;
|
|
803
|
+
engine.pendingSets.clear();
|
|
804
|
+
engine.pendingDeletes.clear();
|
|
805
|
+
try {
|
|
806
|
+
await engine.adapter.clear();
|
|
807
|
+
} catch (error) {
|
|
808
|
+
disableEngine(engine, error);
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
__name(clearPersistedCache, "clearPersistedCache");
|
|
812
|
+
|
|
406
813
|
// src/store.ts
|
|
407
814
|
import { useSyncExternalStore } from "react";
|
|
408
815
|
var RESERVED_STORE_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -966,7 +1373,14 @@ export {
|
|
|
966
1373
|
useMutation,
|
|
967
1374
|
FetcherInputError,
|
|
968
1375
|
useFetcher,
|
|
1376
|
+
FARM_CACHE_INVALIDATION_CHANNEL,
|
|
1377
|
+
enableCrossTabCacheInvalidation,
|
|
1378
|
+
FARM_CLIENT_CACHE_PERSIST_VERSION,
|
|
1379
|
+
defineClientCacheAdapter,
|
|
1380
|
+
storageClientCacheAdapter,
|
|
1381
|
+
initPersistedClientCache,
|
|
1382
|
+
clearPersistedCache,
|
|
969
1383
|
createStore,
|
|
970
1384
|
Link
|
|
971
1385
|
};
|
|
972
|
-
//# sourceMappingURL=chunk-
|
|
1386
|
+
//# sourceMappingURL=chunk-EPDIF432.mjs.map
|