@farm.js/core 0.1.0-beta.1 → 0.1.0-beta.4
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/README.md +1 -1
- package/dist/agent-runtime.d.mts +2 -1
- package/dist/agent-runtime.d.ts +2 -1
- package/dist/api/route-manager.cjs +410 -15
- package/dist/api/route-manager.cjs.map +1 -1
- package/dist/api/route-manager.d.mts +4 -2
- package/dist/api/route-manager.d.ts +4 -2
- package/dist/api/route-manager.mjs +9 -8
- package/dist/api/runtime.cjs +748 -9
- package/dist/api/runtime.cjs.map +1 -1
- package/dist/api/runtime.d.mts +3 -16
- package/dist/api/runtime.d.ts +3 -16
- package/dist/api/runtime.mjs +8 -1
- package/dist/api.cjs +1243 -342
- package/dist/api.cjs.map +1 -1
- package/dist/api.d.mts +5 -147
- package/dist/api.d.ts +5 -147
- package/dist/api.mjs +51 -21
- package/dist/{app-CFRNJXP1.d.ts → app-BjN-da13.d.ts} +38 -3
- package/dist/{app-BiX4qb-d.d.mts → app-CakAr8Be.d.mts} +38 -3
- package/dist/app-markdown.cjs +1 -1
- package/dist/app-markdown.cjs.map +1 -1
- package/dist/app-markdown.d.mts +2 -1
- package/dist/app-markdown.d.ts +2 -1
- package/dist/app-markdown.mjs +1 -1
- package/dist/cache.cjs +414 -12
- package/dist/cache.cjs.map +1 -1
- package/dist/cache.d.mts +120 -6
- package/dist/cache.d.ts +120 -6
- package/dist/cache.mjs +11 -3
- package/dist/{chunk-Y7A27276.mjs → chunk-2CUKEMVR.mjs} +349 -15
- package/dist/chunk-2CUKEMVR.mjs.map +1 -0
- package/dist/{chunk-QF4PHCMA.mjs → chunk-2ED5Q2GH.mjs} +3 -3
- package/dist/chunk-2ED5Q2GH.mjs.map +1 -0
- package/dist/{chunk-GZP5W4K3.mjs → chunk-32W4QEJP.mjs} +1 -1
- package/dist/chunk-32W4QEJP.mjs.map +1 -0
- package/dist/{chunk-TRORP7E4.mjs → chunk-3U3ZUQAQ.mjs} +2 -2
- package/dist/{chunk-25D7G34K.mjs → chunk-65A7QIKI.mjs} +5 -5
- package/dist/{chunk-25D7G34K.mjs.map → chunk-65A7QIKI.mjs.map} +1 -1
- package/dist/{chunk-G3B5BRDY.mjs → chunk-AJWRO5WE.mjs} +539 -61
- package/dist/chunk-AJWRO5WE.mjs.map +1 -0
- package/dist/chunk-ALCLXXTY.mjs +187 -0
- package/dist/chunk-ALCLXXTY.mjs.map +1 -0
- package/dist/{chunk-CHFHNEMO.mjs → chunk-AOBXKNS5.mjs} +627 -84
- package/dist/chunk-AOBXKNS5.mjs.map +1 -0
- package/dist/{chunk-B6N4ZB2H.mjs → chunk-C2ROET2V.mjs} +3 -3
- package/dist/{chunk-JN3UU635.mjs → chunk-EJ7T4TPB.mjs} +2 -2
- package/dist/chunk-EJ7T4TPB.mjs.map +1 -0
- package/dist/{chunk-ZJQNATYV.mjs → chunk-FRPWCMMG.mjs} +3 -3
- package/dist/chunk-FRPWCMMG.mjs.map +1 -0
- package/dist/{chunk-QM6VV26B.mjs → chunk-GQVGIUSN.mjs} +3 -3
- package/dist/{chunk-QM6VV26B.mjs.map → chunk-GQVGIUSN.mjs.map} +1 -1
- package/dist/{chunk-UREJA4GZ.mjs → chunk-GXASWWJU.mjs} +1 -1
- package/dist/{chunk-UREJA4GZ.mjs.map → chunk-GXASWWJU.mjs.map} +1 -1
- package/dist/{chunk-3QJO55ZF.mjs → chunk-HNIQFZKB.mjs} +5 -3
- package/dist/{chunk-3QJO55ZF.mjs.map → chunk-HNIQFZKB.mjs.map} +1 -1
- package/dist/{chunk-PRNYWD7K.mjs → chunk-JDEOUK5V.mjs} +67 -239
- package/dist/chunk-JDEOUK5V.mjs.map +1 -0
- package/dist/{chunk-O3HADRW6.mjs → chunk-MIUW47JX.mjs} +2 -2
- package/dist/{chunk-O3HADRW6.mjs.map → chunk-MIUW47JX.mjs.map} +1 -1
- package/dist/{chunk-UHE2TTLK.mjs → chunk-NM3CRAAL.mjs} +9 -8
- package/dist/chunk-NM3CRAAL.mjs.map +1 -0
- package/dist/chunk-PFE6GMNE.mjs +603 -0
- package/dist/chunk-PFE6GMNE.mjs.map +1 -0
- package/dist/{chunk-S2XHZS7W.mjs → chunk-QGQX7SFC.mjs} +2 -2
- package/dist/chunk-QGQX7SFC.mjs.map +1 -0
- package/dist/{chunk-RKI6TN3A.mjs → chunk-QM746KUO.mjs} +9 -2
- package/dist/chunk-QM746KUO.mjs.map +1 -0
- package/dist/chunk-RBRLLZL5.mjs +81 -0
- package/dist/chunk-RBRLLZL5.mjs.map +1 -0
- package/dist/{chunk-HXP3ZSPC.mjs → chunk-SADGIRS2.mjs} +3 -3
- package/dist/{chunk-6XDUHOEM.mjs → chunk-TQAEEJB4.mjs} +3 -3
- package/dist/{chunk-AGS7UJ52.mjs → chunk-UB5UOSHB.mjs} +24 -12
- package/dist/chunk-UB5UOSHB.mjs.map +1 -0
- package/dist/{chunk-SXZTEK3V.mjs → chunk-UXUAWNO5.mjs} +2 -2
- package/dist/chunk-V3XURYJO.mjs +756 -0
- package/dist/chunk-V3XURYJO.mjs.map +1 -0
- package/dist/{chunk-TU4YJICB.mjs → chunk-VVKWFZAH.mjs} +41 -16
- package/dist/chunk-VVKWFZAH.mjs.map +1 -0
- package/dist/{chunk-JLWMCADZ.mjs → chunk-VY2UYN5R.mjs} +24 -4
- package/dist/chunk-VY2UYN5R.mjs.map +1 -0
- package/dist/{chunk-QFQRHRZS.mjs → chunk-W2CRQFF6.mjs} +151 -23
- package/dist/chunk-W2CRQFF6.mjs.map +1 -0
- package/dist/chunk-W4UIVMVI.mjs +10 -0
- package/dist/chunk-W4UIVMVI.mjs.map +1 -0
- package/dist/{chunk-Y2OJJD7R.mjs → chunk-XIVV5IWN.mjs} +7 -9
- package/dist/chunk-XIVV5IWN.mjs.map +1 -0
- package/dist/{chunk-OYXO65LI.mjs → chunk-YW7OBE6Q.mjs} +4 -4
- package/dist/chunk-YW7OBE6Q.mjs.map +1 -0
- package/dist/{chunk-YHU7SS6L.mjs → chunk-Z5CQMP54.mjs} +11 -11
- package/dist/{chunk-SOU3Q3ZA.mjs → chunk-ZZ57EH5Z.mjs} +1 -1
- package/dist/chunk-ZZ57EH5Z.mjs.map +1 -0
- package/dist/{client-D_yUjVhe.d.mts → client-BT1mFQas.d.mts} +55 -10
- package/dist/{client-Dkc03WP8.d.ts → client-Nn0q4eO4.d.ts} +55 -10
- package/dist/{client-plugins-BZnpeTGA.d.ts → client-plugins-Cw4qUGsw.d.ts} +7 -0
- package/dist/{client-plugins-g4bzuCmo.d.mts → client-plugins-DQQ1adXM.d.mts} +7 -0
- package/dist/client-plugins.d.mts +2 -1
- package/dist/client-plugins.d.ts +2 -1
- package/dist/client.cjs +922 -91
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.mts +121 -3
- package/dist/client.d.ts +121 -3
- package/dist/client.mjs +23 -16
- package/dist/config.d.mts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/cron.cjs.map +1 -1
- package/dist/cron.mjs +1 -1
- package/dist/{devtools-AE4RVXCM.mjs → devtools-LVC3VB5P.mjs} +10 -10
- package/dist/{devtools-client-6WPY2AQU.mjs → devtools-client-3XRTBND5.mjs} +2 -11
- package/dist/devtools-client-3XRTBND5.mjs.map +1 -0
- package/dist/docs.cjs +14 -2
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.mjs +10 -10
- package/dist/i18n/server.cjs +2 -2
- package/dist/i18n/server.cjs.map +1 -1
- package/dist/i18n/server.mjs +1 -1
- package/dist/index.cjs +2852 -463
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +13 -12
- package/dist/index.d.ts +13 -12
- package/dist/index.mjs +152 -109
- package/dist/index.mjs.map +1 -1
- package/dist/integrations.d.mts +2 -1
- package/dist/integrations.d.ts +2 -1
- package/dist/internal/build-runtime.cjs +1616 -149
- package/dist/internal/build-runtime.cjs.map +1 -1
- package/dist/internal/build-runtime.d.mts +4 -3
- package/dist/internal/build-runtime.d.ts +4 -3
- package/dist/internal/build-runtime.mjs +27 -25
- package/dist/internal/client-runtime.cjs.map +1 -1
- package/dist/internal/client-runtime.mjs +1 -1
- package/dist/internal/config-runtime.cjs +13 -2
- package/dist/internal/config-runtime.cjs.map +1 -1
- package/dist/internal/config-runtime.d.mts +3 -2
- package/dist/internal/config-runtime.d.ts +3 -2
- package/dist/internal/config-runtime.mjs +9 -9
- package/dist/internal/production-runtime.cjs +285 -9
- package/dist/internal/production-runtime.cjs.map +1 -1
- package/dist/internal/production-runtime.d.mts +4 -4
- package/dist/internal/production-runtime.d.ts +4 -4
- package/dist/internal/production-runtime.mjs +10 -8
- package/dist/{metadata-DAXRaOHx.d.ts → metadata-BAPg_Nmo.d.ts} +1 -1
- package/dist/{metadata-C9NZxMDW.d.mts → metadata-_6i9oFG3.d.mts} +1 -1
- package/dist/middleware.cjs +2 -2
- package/dist/middleware.cjs.map +1 -1
- package/dist/middleware.d.mts +4 -3
- package/dist/middleware.d.ts +4 -3
- package/dist/middleware.mjs +3 -3
- package/dist/navigation.cjs +40 -15
- package/dist/navigation.cjs.map +1 -1
- package/dist/navigation.mjs +3 -3
- package/dist/{nitro-KME62MWG.mjs → nitro-QO5LV6QK.mjs} +11 -13
- package/dist/{nitro-KME62MWG.mjs.map → nitro-QO5LV6QK.mjs.map} +1 -1
- package/dist/plugin.cjs +1032 -92
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.mts +2 -1
- package/dist/plugin.d.ts +2 -1
- package/dist/plugin.mjs +23 -21
- package/dist/{production-runtime-DRkCHUvJ.d.ts → production-runtime-BoJDc5mc.d.ts} +1 -1
- package/dist/{production-runtime-flrjp_nC.d.mts → production-runtime-DPfgMV9Y.d.mts} +1 -1
- package/dist/routes.cjs +276 -6
- package/dist/routes.cjs.map +1 -1
- package/dist/routes.d.mts +1 -1
- package/dist/routes.d.ts +1 -1
- package/dist/routes.mjs +4 -4
- package/dist/runtime-9nQjVM7X.d.mts +206 -0
- package/dist/runtime-DgeS2skB.d.ts +206 -0
- package/dist/server-action-security.cjs +28 -10
- package/dist/server-action-security.cjs.map +1 -1
- package/dist/server-action-security.d.mts +2 -1
- package/dist/server-action-security.d.ts +2 -1
- package/dist/server-action-security.mjs +2 -2
- package/dist/server-fn-client.cjs.map +1 -1
- package/dist/server-fn-client.d.mts +1 -0
- package/dist/server-fn-client.d.ts +1 -0
- package/dist/server-fn-client.mjs +1 -1
- package/dist/server-fn.cjs +785 -3
- package/dist/server-fn.cjs.map +1 -1
- package/dist/server-fn.d.mts +10 -1
- package/dist/server-fn.d.ts +10 -1
- package/dist/server-fn.mjs +6 -3
- package/dist/server-plugins.d.mts +3 -2
- package/dist/server-plugins.d.ts +3 -2
- package/dist/server-query-client.cjs +278 -7
- package/dist/server-query-client.cjs.map +1 -1
- package/dist/server-query-client.mjs +4 -4
- package/dist/server-query.cjs +381 -10
- package/dist/server-query.cjs.map +1 -1
- package/dist/server-query.mjs +5 -5
- package/dist/server.cjs +1233 -118
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.mts +8 -7
- package/dist/server.d.ts +8 -7
- package/dist/server.mjs +53 -33
- package/dist/server.mjs.map +1 -1
- package/dist/testing.cjs +436 -25
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.mts +4 -3
- package/dist/testing.d.ts +4 -3
- package/dist/testing.mjs +19 -18
- package/dist/testing.mjs.map +1 -1
- package/dist/transport-BmbGTXA5.d.mts +49 -0
- package/dist/transport-BmbGTXA5.d.ts +49 -0
- package/dist/{utils-DOXXivjL.d.mts → utils-CHXlMDkg.d.mts} +1 -1
- package/dist/{utils-DA1yo54_.d.ts → utils-Drsyz1Vj.d.ts} +1 -1
- package/dist/version.cjs +36 -0
- package/dist/version.cjs.map +1 -0
- package/dist/version.d.mts +3 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.mjs +8 -0
- package/dist/version.mjs.map +1 -0
- package/dist/vite.cjs +1039 -93
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.d.mts +2 -1
- package/dist/vite.d.ts +2 -1
- package/dist/vite.mjs +23 -21
- package/dist/workflows.cjs +6 -8
- package/dist/workflows.cjs.map +1 -1
- package/dist/workflows.mjs +1 -1
- package/package.json +12 -5
- package/types/api.d.ts +44 -0
- package/types/client.d.ts +220 -16
- package/dist/chunk-4PTK6KT4.mjs +0 -364
- package/dist/chunk-4PTK6KT4.mjs.map +0 -1
- package/dist/chunk-AGS7UJ52.mjs.map +0 -1
- package/dist/chunk-CHFHNEMO.mjs.map +0 -1
- package/dist/chunk-EVGBEZDF.mjs +0 -215
- package/dist/chunk-EVGBEZDF.mjs.map +0 -1
- package/dist/chunk-G3B5BRDY.mjs.map +0 -1
- package/dist/chunk-GZP5W4K3.mjs.map +0 -1
- package/dist/chunk-JLWMCADZ.mjs.map +0 -1
- package/dist/chunk-JN3UU635.mjs.map +0 -1
- package/dist/chunk-OYXO65LI.mjs.map +0 -1
- package/dist/chunk-PRNYWD7K.mjs.map +0 -1
- package/dist/chunk-QF4PHCMA.mjs.map +0 -1
- package/dist/chunk-QFQRHRZS.mjs.map +0 -1
- package/dist/chunk-RKI6TN3A.mjs.map +0 -1
- package/dist/chunk-S2XHZS7W.mjs.map +0 -1
- package/dist/chunk-SOU3Q3ZA.mjs.map +0 -1
- package/dist/chunk-TU4YJICB.mjs.map +0 -1
- package/dist/chunk-TXCFGOHW.mjs +0 -42
- package/dist/chunk-TXCFGOHW.mjs.map +0 -1
- package/dist/chunk-UHE2TTLK.mjs.map +0 -1
- package/dist/chunk-Y2OJJD7R.mjs.map +0 -1
- package/dist/chunk-Y7A27276.mjs.map +0 -1
- package/dist/chunk-ZJQNATYV.mjs.map +0 -1
- package/dist/devtools-client-6WPY2AQU.mjs.map +0 -1
- /package/dist/{chunk-TRORP7E4.mjs.map → chunk-3U3ZUQAQ.mjs.map} +0 -0
- /package/dist/{chunk-B6N4ZB2H.mjs.map → chunk-C2ROET2V.mjs.map} +0 -0
- /package/dist/{chunk-HXP3ZSPC.mjs.map → chunk-SADGIRS2.mjs.map} +0 -0
- /package/dist/{chunk-6XDUHOEM.mjs.map → chunk-TQAEEJB4.mjs.map} +0 -0
- /package/dist/{chunk-SXZTEK3V.mjs.map → chunk-UXUAWNO5.mjs.map} +0 -0
- /package/dist/{chunk-YHU7SS6L.mjs.map → chunk-Z5CQMP54.mjs.map} +0 -0
- /package/dist/{devtools-AE4RVXCM.mjs.map → devtools-LVC3VB5P.mjs.map} +0 -0
|
@@ -162,7 +162,11 @@ async function prepareFarmWorkflowsForNitro(config) {
|
|
|
162
162
|
};
|
|
163
163
|
}
|
|
164
164
|
const handlerPath = path.join(generatedDir, "http-handler.mjs");
|
|
165
|
-
await fs.writeFile(
|
|
165
|
+
await fs.writeFile(
|
|
166
|
+
handlerPath,
|
|
167
|
+
createNitroWorkflowHTTPHandler(workflowConfig, workflows),
|
|
168
|
+
"utf8"
|
|
169
|
+
);
|
|
166
170
|
const manifestPath = path.join(generatedDir, "manifest.json");
|
|
167
171
|
await fs.writeFile(
|
|
168
172
|
manifestPath,
|
|
@@ -244,13 +248,7 @@ function normalizeSchedule(schedule) {
|
|
|
244
248
|
}
|
|
245
249
|
__name(normalizeSchedule, "normalizeSchedule");
|
|
246
250
|
function resolveWorkflowDefinition(module) {
|
|
247
|
-
const candidates = [
|
|
248
|
-
module.default,
|
|
249
|
-
module.workflow,
|
|
250
|
-
module.cron,
|
|
251
|
-
module.task,
|
|
252
|
-
module.job
|
|
253
|
-
];
|
|
251
|
+
const candidates = [module.default, module.workflow, module.cron, module.task, module.job];
|
|
254
252
|
for (const candidate of candidates) {
|
|
255
253
|
if (candidate && typeof candidate === "object" && typeof candidate.run === "function") {
|
|
256
254
|
return candidate;
|
|
@@ -540,4 +538,4 @@ export {
|
|
|
540
538
|
createFarmWorkflowVercelCrons,
|
|
541
539
|
applyFarmWorkflowVercelCrons
|
|
542
540
|
};
|
|
543
|
-
//# sourceMappingURL=chunk-
|
|
541
|
+
//# sourceMappingURL=chunk-XIVV5IWN.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/workflows.ts"],"sourcesContent":["export type FarmWorkflowSchedule = string | string[];\n\nexport interface FarmWorkflowsUserConfig {\n /** Enable or disable Farm workflow discovery. Enabled by default. */\n enabled?: boolean;\n /** Directory or directories to scan for workflow modules. */\n dir?: string | string[];\n /** Alias for dir. */\n dirs?: string[];\n /** HTTP route used for manual and URL-based cron invocation. */\n route?: string;\n /** Environment variable that stores the optional runner secret. */\n secretEnv?: string;\n /** Inline runner secret. Prefer secretEnv for deployed apps. */\n secret?: string;\n}\n\nexport interface FarmWorkflowsResolvedConfig {\n enabled: boolean;\n dirs: string[];\n route: string;\n secretEnv: string;\n secret?: string;\n}\n\nexport interface FarmWorkflowLogger {\n info: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n}\n\nexport interface FarmWorkflowRunContext<TPayload = unknown> {\n id: string;\n name: string;\n payload: TPayload;\n scheduledTime?: number | string;\n request?: Request;\n event?: unknown;\n env: Record<string, string | undefined>;\n data: Map<string, unknown>;\n log: FarmWorkflowLogger;\n}\n\nexport interface FarmWorkflowDefinition<TPayload = unknown, TResult = unknown> {\n kind?: \"farm-workflow\";\n id?: string;\n description?: string;\n schedule?: FarmWorkflowSchedule;\n timezone?: string;\n run: (ctx: FarmWorkflowRunContext<TPayload>) => TResult | Promise<TResult>;\n}\n\nexport interface FarmCronDefinition<\n TPayload = unknown,\n TResult = unknown,\n> extends FarmWorkflowDefinition<TPayload, TResult> {\n schedule: FarmWorkflowSchedule;\n}\n\nexport interface FarmDiscoveredWorkflow {\n id: string;\n filePath: string;\n description?: string;\n schedule: string[];\n timezone?: string;\n routePath: string;\n}\n\nexport interface PreparedFarmWorkflows {\n workflows: FarmDiscoveredWorkflow[];\n tasks: Record<string, { handler: string; description: string }>;\n scheduledTasks: Record<string, string | string[]>;\n handlerPath?: string;\n manifestPath?: string;\n}\n\nexport interface FarmWorkflowHTTPHandlerOptions {\n workflows: FarmDiscoveredWorkflow[];\n config: FarmWorkflowsResolvedConfig;\n loadModule: (workflow: FarmDiscoveredWorkflow) => Promise<Record<string, any>>;\n}\n\nexport const DEFAULT_FARM_WORKFLOW_DIRS = [\"src/jobs\", \"src/workflows\", \"src/cron\"];\nexport const DEFAULT_FARM_WORKFLOW_ROUTE = \"/api/_farm/workflows\";\nexport const DEFAULT_FARM_WORKFLOW_SECRET_ENV = \"CRON_SECRET\";\n\nexport function defineWorkflow<const TPayload = unknown, TResult = unknown>(\n definition: FarmWorkflowDefinition<TPayload, TResult>,\n): FarmWorkflowDefinition<TPayload, TResult> {\n return {\n ...definition,\n kind: \"farm-workflow\",\n };\n}\n\nexport function defineTask<const TPayload = unknown, TResult = unknown>(\n definition: FarmWorkflowDefinition<TPayload, TResult>,\n): FarmWorkflowDefinition<TPayload, TResult> {\n return defineWorkflow(definition);\n}\n\n/**\n * @deprecated Configure `cron` in `farm.config.ts` and point it at an API route.\n */\nexport function defineCron<const TPayload = unknown, TResult = unknown>(\n definition: FarmCronDefinition<TPayload, TResult>,\n): FarmCronDefinition<TPayload, TResult> {\n return {\n ...definition,\n kind: \"farm-workflow\",\n };\n}\n\nexport function resolveWorkflowsConfig(\n workflows: FarmWorkflowsUserConfig | boolean | undefined,\n): FarmWorkflowsResolvedConfig {\n if (workflows === false) {\n return {\n enabled: false,\n dirs: [...DEFAULT_FARM_WORKFLOW_DIRS],\n route: DEFAULT_FARM_WORKFLOW_ROUTE,\n secretEnv: DEFAULT_FARM_WORKFLOW_SECRET_ENV,\n };\n }\n\n const options = workflows && typeof workflows === \"object\" ? workflows : {};\n const dirs = normalizeWorkflowDirs(options);\n\n return {\n enabled: options.enabled ?? true,\n dirs,\n route: normalizeWorkflowRoute(options.route || DEFAULT_FARM_WORKFLOW_ROUTE),\n secretEnv: options.secretEnv || DEFAULT_FARM_WORKFLOW_SECRET_ENV,\n secret: options.secret,\n };\n}\n\nexport async function discoverFarmWorkflows(\n config: {\n root?: string;\n workflows?: FarmWorkflowsResolvedConfig | FarmWorkflowsUserConfig | boolean;\n },\n options: {\n loadModule?: (filePath: string) => Promise<Record<string, any>>;\n } = {},\n): Promise<FarmDiscoveredWorkflow[]> {\n const workflowConfig = isResolvedWorkflowConfig(config.workflows)\n ? config.workflows\n : resolveWorkflowsConfig(config.workflows);\n if (!workflowConfig.enabled) return [];\n\n const root = config.root || process.cwd();\n const files = await findWorkflowFiles(root, workflowConfig.dirs);\n const workflows: FarmDiscoveredWorkflow[] = [];\n const seenIds = new Map<string, string>();\n\n for (const filePath of files) {\n const module = options.loadModule\n ? await options.loadModule(filePath)\n : await loadWorkflowModule(filePath, root);\n const definition = resolveWorkflowDefinition(module);\n if (!definition) continue;\n\n const id = normalizeWorkflowId(definition.id || workflowIdFromFile(root, filePath));\n const previousPath = seenIds.get(id);\n if (previousPath) {\n throw new Error(\n `Duplicate Farm workflow id \"${id}\" found in ${relativePath(root, previousPath)} and ${relativePath(root, filePath)}.`,\n );\n }\n seenIds.set(id, filePath);\n\n workflows.push({\n id,\n filePath,\n description: definition.description,\n schedule: normalizeSchedule(definition.schedule),\n timezone: definition.timezone,\n routePath: joinRoute(workflowConfig.route, encodeURIComponent(id)),\n });\n }\n\n return workflows;\n}\n\nexport function createFarmWorkflowRequestHandler(options: FarmWorkflowHTTPHandlerOptions) {\n const workflowsById = new Map(options.workflows.map((workflow) => [workflow.id, workflow]));\n\n return async function handleFarmWorkflowRequest(request: Request): Promise<Response | null> {\n const url = new URL(request.url);\n const route = normalizeWorkflowRoute(options.config.route);\n if (url.pathname !== route && !url.pathname.startsWith(`${route}/`)) {\n return null;\n }\n\n if (url.pathname === route) {\n const secretError = verifyWorkflowSecret(request, options.config);\n if (secretError) return secretError;\n\n return Response.json({\n workflows: options.workflows.map(toWorkflowMetadata),\n });\n }\n\n const id = decodeURIComponent(url.pathname.slice(route.length + 1));\n const workflow = workflowsById.get(id);\n if (!workflow) {\n return Response.json({ error: `Workflow \"${id}\" was not found.` }, { status: 404 });\n }\n\n const secretError = verifyWorkflowSecret(request, options.config);\n if (secretError) return secretError;\n\n const payload = await readWorkflowPayload(request);\n const module = await options.loadModule(workflow);\n const result = await runFarmWorkflowModule(module, {\n id: workflow.id,\n name: workflow.id,\n payload,\n request,\n scheduledTime: readScheduledTime(payload),\n });\n\n return Response.json({\n id: workflow.id,\n ok: true,\n result: result ?? null,\n });\n };\n}\n\nexport async function runFarmWorkflowModule(\n module: Record<string, any>,\n context: {\n id: string;\n name?: string;\n payload?: unknown;\n scheduledTime?: number | string;\n request?: Request;\n event?: unknown;\n env?: Record<string, string | undefined>;\n },\n): Promise<unknown> {\n const definition = resolveWorkflowDefinition(module);\n if (!definition) {\n throw new Error(`Farm workflow \"${context.id}\" does not export a workflow definition.`);\n }\n\n return await definition.run({\n id: context.id,\n name: context.name || context.id,\n payload: context.payload,\n scheduledTime: context.scheduledTime,\n request: context.request,\n event: context.event,\n env: context.env || process.env,\n data: new Map<string, unknown>(),\n log: console,\n });\n}\n\nexport async function prepareFarmWorkflowsForNitro(config: {\n root?: string;\n distDir?: string;\n workflows?: FarmWorkflowsResolvedConfig | FarmWorkflowsUserConfig | boolean;\n}): Promise<PreparedFarmWorkflows> {\n const workflowConfig = isResolvedWorkflowConfig(config.workflows)\n ? config.workflows\n : resolveWorkflowsConfig(config.workflows);\n const workflows = await discoverFarmWorkflows({\n root: config.root,\n workflows: workflowConfig,\n });\n\n if (workflows.length === 0) {\n return {\n workflows,\n tasks: {},\n scheduledTasks: {},\n };\n }\n\n const root = config.root || process.cwd();\n const distDir = config.distDir || \".farm\";\n const fs = await import(\"fs/promises\");\n const path = await import(\"path\");\n const generatedDir = path.join(root, distDir, \".nitro\", \"farm-workflows\");\n await fs.mkdir(generatedDir, { recursive: true });\n\n const tasks: PreparedFarmWorkflows[\"tasks\"] = {};\n const scheduledTasks = createScheduledTasks(workflows);\n\n for (const workflow of workflows) {\n const wrapperPath = path.join(generatedDir, `${safeFileName(workflow.id)}.mjs`);\n await fs.writeFile(wrapperPath, createNitroTaskWrapper(workflow), \"utf8\");\n tasks[workflow.id] = {\n handler: wrapperPath,\n description: workflow.description || `Farm workflow ${workflow.id}`,\n };\n }\n\n const handlerPath = path.join(generatedDir, \"http-handler.mjs\");\n await fs.writeFile(\n handlerPath,\n createNitroWorkflowHTTPHandler(workflowConfig, workflows),\n \"utf8\",\n );\n\n const manifestPath = path.join(generatedDir, \"manifest.json\");\n await fs.writeFile(\n manifestPath,\n JSON.stringify(\n {\n route: workflowConfig.route,\n secretEnv: workflowConfig.secretEnv,\n trigger: {\n method: \"GET\",\n authorization: `Bearer $${workflowConfig.secretEnv}`,\n },\n workflows: workflows.map(toWorkflowMetadata),\n },\n null,\n 2,\n ),\n \"utf8\",\n );\n\n return {\n workflows,\n tasks,\n scheduledTasks,\n handlerPath,\n manifestPath,\n };\n}\n\nexport function createFarmWorkflowVercelCrons(\n workflows: FarmDiscoveredWorkflow[],\n): Array<{ path: string; schedule: string }> {\n return workflows.flatMap((workflow) =>\n workflow.schedule.map((schedule) => ({\n path: workflow.routePath,\n schedule,\n })),\n );\n}\n\nexport function applyFarmWorkflowVercelCrons(\n vercelConfig: Record<string, any>,\n workflows: FarmDiscoveredWorkflow[],\n): Record<string, any> {\n const crons = createFarmWorkflowVercelCrons(workflows);\n if (crons.length === 0) return vercelConfig;\n\n const existingCrons = Array.isArray(vercelConfig.crons) ? vercelConfig.crons : [];\n const seen = new Set(existingCrons.map((cron) => `${cron.path}:${cron.schedule}`));\n const nextCrons = [...existingCrons];\n for (const cron of crons) {\n const key = `${cron.path}:${cron.schedule}`;\n if (seen.has(key)) continue;\n seen.add(key);\n nextCrons.push(cron);\n }\n return {\n ...vercelConfig,\n crons: nextCrons,\n };\n}\n\nfunction isResolvedWorkflowConfig(value: unknown): value is FarmWorkflowsResolvedConfig {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"dirs\" in value &&\n Array.isArray((value as FarmWorkflowsResolvedConfig).dirs) &&\n typeof (value as FarmWorkflowsResolvedConfig).route === \"string\"\n );\n}\n\nfunction normalizeWorkflowDirs(options: FarmWorkflowsUserConfig): string[] {\n const rawDirs =\n options.dirs ||\n (Array.isArray(options.dir) ? options.dir : options.dir ? [options.dir] : undefined);\n const dirs = rawDirs && rawDirs.length > 0 ? rawDirs : DEFAULT_FARM_WORKFLOW_DIRS;\n return [...new Set(dirs.map((dir) => trimSlashes(dir)).filter(Boolean))];\n}\n\nfunction normalizeWorkflowRoute(route: string): string {\n const trimmed = route.trim();\n if (!trimmed || trimmed === \"/\") return DEFAULT_FARM_WORKFLOW_ROUTE;\n return `/${trimSlashes(trimmed)}`;\n}\n\nfunction normalizeWorkflowId(id: string): string {\n const normalized = id\n .replace(/\\\\/g, \"/\")\n .replace(/\\.(tsx?|jsx?|mjs|cjs)$/, \"\")\n .replace(/\\/index$/, \"\")\n .replace(/[^a-zA-Z0-9._/-]+/g, \"-\")\n .replace(/^\\/+|\\/+$/g, \"\")\n .replace(/\\/+/g, \"/\");\n return normalized || \"workflow\";\n}\n\nfunction normalizeSchedule(schedule: FarmWorkflowSchedule | undefined): string[] {\n if (!schedule) return [];\n return (Array.isArray(schedule) ? schedule : [schedule])\n .map((value) => value.trim())\n .filter(Boolean);\n}\n\nfunction resolveWorkflowDefinition(\n module: Record<string, any>,\n): FarmWorkflowDefinition | FarmCronDefinition | null {\n const candidates = [module.default, module.workflow, module.cron, module.task, module.job];\n for (const candidate of candidates) {\n if (candidate && typeof candidate === \"object\" && typeof candidate.run === \"function\") {\n return candidate as FarmWorkflowDefinition;\n }\n }\n return null;\n}\n\nasync function findWorkflowFiles(root: string, dirs: string[]): Promise<string[]> {\n const fs = await import(\"fs/promises\");\n const path = await import(\"path\");\n const files: string[] = [];\n\n for (const dir of dirs) {\n const absoluteDir = path.isAbsolute(dir) ? dir : path.join(root, dir);\n if (!(await pathExists(absoluteDir))) continue;\n await walkWorkflowDir(absoluteDir, files);\n }\n\n return files.sort();\n}\n\nasync function walkWorkflowDir(dir: string, files: string[]): Promise<void> {\n const fs = await import(\"fs/promises\");\n const path = await import(\"path\");\n const entries = await fs.readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const filePath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (entry.name === \"node_modules\" || entry.name.startsWith(\".\")) continue;\n await walkWorkflowDir(filePath, files);\n continue;\n }\n if (isWorkflowFile(entry.name)) {\n files.push(filePath);\n }\n }\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n const fs = await import(\"fs/promises\");\n return fs\n .access(filePath)\n .then(() => true)\n .catch(() => false);\n}\n\nfunction isWorkflowFile(fileName: string): boolean {\n return /\\.(?:ts|tsx|js|jsx|mjs|cjs)$/.test(fileName) && !/\\.d\\.[cm]?ts$/.test(fileName);\n}\n\nasync function loadWorkflowModule(filePath: string, root: string): Promise<Record<string, any>> {\n const fs = await import(\"fs/promises\");\n const path = await import(\"path\");\n const { pathToFileURL } = await import(\"url\");\n const { build } = await import(\"esbuild\");\n const outDir = path.join(root, \".farm\", \".workflow-loader\");\n await fs.mkdir(outDir, { recursive: true });\n const outfile = path.join(\n outDir,\n `workflow-${Date.now()}-${Math.random().toString(36).slice(2)}.mjs`,\n );\n\n await build({\n absWorkingDir: root,\n entryPoints: [filePath],\n outfile,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: `node${process.versions.node.split(\".\")[0]}`,\n packages: \"external\",\n external: [\"@farm.js/core\", \"@farm.js/core/*\", \"nitro\", \"nitro/*\"],\n jsx: \"automatic\",\n logLevel: \"silent\",\n sourcemap: \"inline\",\n });\n\n try {\n return await import(/* @vite-ignore */ `${pathToFileURL(outfile).href}?t=${Date.now()}`);\n } finally {\n await fs.unlink(outfile).catch(() => undefined);\n }\n}\n\nfunction workflowIdFromFile(root: string, filePath: string): string {\n const normalizedRoot = root.replace(/\\\\/g, \"/\");\n const normalizedFile = filePath.replace(/\\\\/g, \"/\");\n const relative = normalizedFile.startsWith(`${normalizedRoot}/`)\n ? normalizedFile.slice(normalizedRoot.length + 1)\n : normalizedFile;\n return normalizeWorkflowId(\n relative.replace(/^src\\/(?:jobs|workflows|cron)\\//, \"\").replace(/\\.(tsx?|jsx?|mjs|cjs)$/, \"\"),\n );\n}\n\nfunction createScheduledTasks(\n workflows: FarmDiscoveredWorkflow[],\n): Record<string, string | string[]> {\n const scheduleMap = new Map<string, string[]>();\n for (const workflow of workflows) {\n for (const schedule of workflow.schedule) {\n const taskIds = scheduleMap.get(schedule) || [];\n taskIds.push(workflow.id);\n scheduleMap.set(schedule, taskIds);\n }\n }\n\n return Object.fromEntries(\n [...scheduleMap.entries()].map(([schedule, taskIds]) => [\n schedule,\n taskIds.length === 1 ? taskIds[0] : taskIds,\n ]),\n );\n}\n\nfunction createNitroTaskWrapper(workflow: FarmDiscoveredWorkflow): string {\n const normalizedPath = workflow.filePath.replace(/\\\\/g, \"/\");\n return `\nimport { defineTask } from \"nitro/runtime\";\nimport { runFarmWorkflowModule } from \"@farm.js/core/workflows\";\nimport * as workflowModule from ${JSON.stringify(normalizedPath)};\n\nexport default defineTask({\n meta: {\n description: ${JSON.stringify(workflow.description || `Farm workflow ${workflow.id}`)}\n },\n async run(event) {\n const payload = event?.payload || {};\n const env = event?.context?.cloudflare?.env || event?.context?.env || process.env;\n return await runFarmWorkflowModule(workflowModule, {\n id: ${JSON.stringify(workflow.id)},\n name: event?.name || ${JSON.stringify(workflow.id)},\n payload,\n scheduledTime: payload.scheduledTime,\n request: event?.context?.request,\n event,\n env\n });\n }\n});\n`.trim();\n}\n\nfunction createNitroWorkflowHTTPHandler(\n config: FarmWorkflowsResolvedConfig,\n workflows: FarmDiscoveredWorkflow[],\n): string {\n return `\nimport { H3 } from \"h3\";\nimport { runTask } from \"nitro/runtime\";\n\nconst route = ${JSON.stringify(config.route)};\nconst secretEnv = ${JSON.stringify(config.secretEnv)};\nconst inlineSecret = ${JSON.stringify(config.secret || \"\")};\nconst workflows = ${JSON.stringify(workflows.map(toWorkflowMetadata))};\nconst workflowIds = new Set(workflows.map((workflow) => workflow.id));\n\nfunction json(value, status = 200) {\n return new Response(JSON.stringify(value), {\n status,\n headers: { \"content-type\": \"application/json\" }\n });\n}\n\nfunction getHeader(event, name) {\n return event.req.headers.get(name);\n}\n\nfunction getSecret() {\n return inlineSecret || process.env[secretEnv] || \"\";\n}\n\nfunction verifySecret(event) {\n const secret = getSecret();\n if (!secret) return null;\n const authorization = getHeader(event, \"authorization\") || \"\";\n const headerSecret = getHeader(event, \"x-farm-workflow-secret\") || \"\";\n const querySecret = event.url.searchParams.get(\"secret\") || \"\";\n const bearer = authorization.startsWith(\"Bearer \") ? authorization.slice(7) : \"\";\n if (headerSecret === secret || querySecret === secret || bearer === secret) return null;\n return json({ error: \"Unauthorized workflow request.\" }, 401);\n}\n\nasync function readPayload(event) {\n if (event.req.method === \"GET\" || event.req.method === \"HEAD\") {\n const payload = Object.fromEntries(event.url.searchParams.entries());\n delete payload.secret;\n return payload;\n }\n return await event.req.json().catch(() => ({}));\n}\n\nexport default new H3()\n .get(route, (event) => {\n const unauthorized = verifySecret(event);\n if (unauthorized) return unauthorized;\n return { workflows };\n })\n .all(route + \"/:id\", async (event) => {\n const id = decodeURIComponent(event.context.params?.id || \"\");\n if (!workflowIds.has(id)) {\n return json({ error: \"Workflow \" + id + \" was not found.\" }, 404);\n }\n\n const unauthorized = verifySecret(event);\n if (unauthorized) return unauthorized;\n\n const payload = await readPayload(event);\n const result = await runTask(id, {\n payload,\n context: {\n source: \"http\",\n request: event.req,\n route,\n url: event.url.href,\n method: event.req.method\n }\n });\n return {\n id,\n ok: true,\n result: result ?? null\n };\n });\n`.trim();\n}\n\nfunction toWorkflowMetadata(workflow: FarmDiscoveredWorkflow) {\n return {\n id: workflow.id,\n description: workflow.description || null,\n schedule: workflow.schedule,\n timezone: workflow.timezone || null,\n path: workflow.routePath,\n };\n}\n\nasync function readWorkflowPayload(request: Request): Promise<unknown> {\n const url = new URL(request.url);\n if (request.method === \"GET\" || request.method === \"HEAD\") {\n const payload = Object.fromEntries(url.searchParams.entries());\n delete payload.secret;\n return payload;\n }\n\n const contentType = request.headers.get(\"content-type\") || \"\";\n if (contentType.includes(\"application/json\")) {\n return await request.json().catch(() => ({}));\n }\n\n const text = await request.text().catch(() => \"\");\n return text ? { text } : {};\n}\n\nfunction readScheduledTime(payload: unknown): number | string | undefined {\n return payload && typeof payload === \"object\" && \"scheduledTime\" in payload\n ? (payload as { scheduledTime?: number | string }).scheduledTime\n : undefined;\n}\n\nfunction verifyWorkflowSecret(\n request: Request,\n config: FarmWorkflowsResolvedConfig,\n): Response | null {\n const secret = config.secret || process.env[config.secretEnv] || \"\";\n if (!secret) return null;\n\n const url = new URL(request.url);\n const authorization = request.headers.get(\"authorization\") || \"\";\n const bearer = authorization.startsWith(\"Bearer \") ? authorization.slice(7) : \"\";\n const headerSecret = request.headers.get(\"x-farm-workflow-secret\") || \"\";\n const querySecret = url.searchParams.get(\"secret\") || \"\";\n if (bearer === secret || headerSecret === secret || querySecret === secret) return null;\n\n return Response.json({ error: \"Unauthorized workflow request.\" }, { status: 401 });\n}\n\nfunction joinRoute(...parts: string[]): string {\n return `/${parts\n .map((part) => trimSlashes(part))\n .filter(Boolean)\n .join(\"/\")}`;\n}\n\nfunction trimSlashes(value: string): string {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction safeFileName(value: string): string {\n return value.replace(/[^a-zA-Z0-9._-]+/g, \"-\") || \"workflow\";\n}\n\nfunction relativePath(root: string, filePath: string): string {\n return filePath.replace(/\\\\/g, \"/\").replace(`${root.replace(/\\\\/g, \"/\")}/`, \"\");\n}\n"],"mappings":"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","names":["secretError"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeFarmRouteRuntimeConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-GQVGIUSN.mjs";
|
|
4
4
|
import {
|
|
5
5
|
__name
|
|
6
6
|
} from "./chunk-CGILA3WO.mjs";
|
|
@@ -39,7 +39,7 @@ function routeRulesToHeaders(routeRules) {
|
|
|
39
39
|
for (const [source, rule] of Object.entries(routeRules)) {
|
|
40
40
|
const headers = {
|
|
41
41
|
...normalizeCorsHeaders(rule.cors),
|
|
42
|
-
...rule.headers
|
|
42
|
+
...rule.headers
|
|
43
43
|
};
|
|
44
44
|
const entries = Object.entries(headers);
|
|
45
45
|
if (entries.length === 0) continue;
|
|
@@ -70,7 +70,7 @@ function routeRulesToNitroRouteRules(routeRules) {
|
|
|
70
70
|
nitroRule.cors = true;
|
|
71
71
|
nitroRule.headers = {
|
|
72
72
|
...normalizeCorsHeaders(rule.cors),
|
|
73
|
-
...rule.headers
|
|
73
|
+
...rule.headers
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
delete nitroRule.render;
|
|
@@ -116,4 +116,4 @@ export {
|
|
|
116
116
|
routeRulesToHeaders,
|
|
117
117
|
routeRulesToNitroRouteRules
|
|
118
118
|
};
|
|
119
|
-
//# sourceMappingURL=chunk-
|
|
119
|
+
//# sourceMappingURL=chunk-YW7OBE6Q.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/route-rules.ts"],"sourcesContent":["import type { HeaderConfig, RedirectConfig } from \"./config\";\nimport type { FarmRouteRuntimeConfig } from \"./route-runtime\";\nimport { normalizeFarmRouteRuntimeConfig } from \"./route-runtime\";\n\nexport type FarmRouteRuleRenderMode = \"static\" | \"dynamic\";\n\nexport type FarmRouteRuleRedirect =\n | string\n | {\n to: string;\n statusCode?: number;\n permanent?: boolean;\n };\n\nexport type FarmRouteRuleCors =\n | boolean\n | {\n origin?: string;\n methods?: string | readonly string[];\n headers?: string | readonly string[];\n };\n\nexport interface FarmRouteRule extends FarmRouteRuntimeConfig {\n prerender?: boolean;\n render?: FarmRouteRuleRenderMode;\n ssr?: boolean;\n swr?: boolean | number;\n isr?: boolean | number;\n cors?: FarmRouteRuleCors;\n headers?: Record<string, string>;\n redirect?: FarmRouteRuleRedirect;\n}\n\nexport type FarmRouteRules = Record<string, FarmRouteRule>;\n\nexport function normalizeRouteRules(routeRules: FarmRouteRules | undefined): FarmRouteRules {\n if (!routeRules) return {};\n\n const normalized: FarmRouteRules = {};\n for (const [source, rule] of Object.entries(routeRules)) {\n if (!source || !rule) continue;\n const normalizedSource = normalizeRuleSource(source);\n normalized[normalizedSource] = {\n ...rule,\n ...normalizeFarmRouteRuntimeConfig(rule, `Route rule \"${normalizedSource}\"`),\n };\n }\n return normalized;\n}\n\nexport function routeRulesToRedirects(routeRules: FarmRouteRules): RedirectConfig[] {\n return Object.entries(routeRules)\n .filter((entry): entry is [string, FarmRouteRule & { redirect: FarmRouteRuleRedirect }] =>\n Boolean(entry[1].redirect),\n )\n .map(([source, rule]) => {\n const redirect = typeof rule.redirect === \"string\" ? { to: rule.redirect } : rule.redirect;\n return {\n source,\n destination: redirect.to,\n permanent: redirect.permanent,\n statusCode: redirect.statusCode ?? (redirect.permanent === true ? 308 : undefined),\n };\n });\n}\n\nexport function routeRulesToHeaders(routeRules: FarmRouteRules): HeaderConfig[] {\n const configs: HeaderConfig[] = [];\n\n for (const [source, rule] of Object.entries(routeRules)) {\n const headers = {\n ...normalizeCorsHeaders(rule.cors),\n ...rule.headers,\n };\n\n const entries = Object.entries(headers);\n if (entries.length === 0) continue;\n\n configs.push({\n source,\n headers: entries.map(([key, value]) => ({ key, value })),\n });\n }\n\n return configs;\n}\n\nexport function routeRulesToNitroRouteRules(routeRules: FarmRouteRules): Record<string, any> {\n const nitroRules: Record<string, any> = {};\n\n for (const [source, rule] of Object.entries(routeRules)) {\n const nitroRule: Record<string, any> = { ...rule };\n\n if (rule.render === \"static\") {\n nitroRule.prerender = true;\n } else if (rule.render === \"dynamic\") {\n nitroRule.prerender = false;\n }\n\n if (rule.redirect && typeof rule.redirect !== \"string\") {\n nitroRule.redirect = rule.redirect.to;\n if (rule.redirect.statusCode) {\n nitroRule.statusCode = rule.redirect.statusCode;\n }\n }\n\n if (rule.cors) {\n nitroRule.cors = true;\n nitroRule.headers = {\n ...normalizeCorsHeaders(rule.cors),\n ...rule.headers,\n };\n }\n\n delete nitroRule.render;\n delete nitroRule.runtime;\n delete nitroRule.regions;\n delete nitroRule.maxDuration;\n nitroRules[source] = nitroRule;\n }\n\n return nitroRules;\n}\n\nfunction normalizeCorsHeaders(cors: FarmRouteRuleCors | undefined): Record<string, string> {\n if (!cors) return {};\n\n if (cors === true) {\n return {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"*\",\n \"Access-Control-Allow-Headers\": \"*\",\n };\n }\n\n return {\n \"Access-Control-Allow-Origin\": cors.origin ?? \"*\",\n \"Access-Control-Allow-Methods\": normalizeList(cors.methods) ?? \"*\",\n \"Access-Control-Allow-Headers\": normalizeList(cors.headers) ?? \"*\",\n };\n}\n\nfunction normalizeList(value: string | readonly string[] | undefined): string | undefined {\n if (!value || typeof value === \"string\") return value;\n return value.join(\", \");\n}\n\nfunction normalizeRuleSource(source: string): string {\n const trimmed = source.trim();\n if (!trimmed) return \"/\";\n return trimmed.startsWith(\"/\") ? trimmed : `/${trimmed}`;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import {
|
|
2
2
|
_runWithFarmI18nRequest
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import {
|
|
5
|
-
logger
|
|
6
|
-
} from "./chunk-J4FNJ5IU.mjs";
|
|
7
|
-
import {
|
|
8
|
-
invokeAPIRouteEndpoint,
|
|
9
|
-
matchAPIRoute
|
|
10
|
-
} from "./chunk-EVGBEZDF.mjs";
|
|
3
|
+
} from "./chunk-2ED5Q2GH.mjs";
|
|
11
4
|
import {
|
|
12
5
|
PROGRAMMATIC_ROUTE_FILE_NAMES,
|
|
13
6
|
createProgrammaticRouteModuleId,
|
|
14
7
|
getProgrammaticRouteManifest,
|
|
15
8
|
scanProgrammaticPagePaths
|
|
16
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-C2ROET2V.mjs";
|
|
17
10
|
import {
|
|
18
11
|
getFarmRouteRuntimeConfig,
|
|
19
12
|
normalizeFarmRouteRuntimeConfig
|
|
20
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-GQVGIUSN.mjs";
|
|
14
|
+
import {
|
|
15
|
+
logger
|
|
16
|
+
} from "./chunk-J4FNJ5IU.mjs";
|
|
17
|
+
import {
|
|
18
|
+
invokeAPIRouteEndpoint,
|
|
19
|
+
matchAPIRoute
|
|
20
|
+
} from "./chunk-PFE6GMNE.mjs";
|
|
21
21
|
import {
|
|
22
22
|
__name
|
|
23
23
|
} from "./chunk-CGILA3WO.mjs";
|
|
@@ -362,4 +362,4 @@ export {
|
|
|
362
362
|
API_ROUTE_METHODS,
|
|
363
363
|
APIRouteManager
|
|
364
364
|
};
|
|
365
|
-
//# sourceMappingURL=chunk-
|
|
365
|
+
//# sourceMappingURL=chunk-Z5CQMP54.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client/chunk-recovery.ts"],"sourcesContent":["\"use client\";\n\nexport interface FarmChunkRecoveryOptions {\n /**\n * How long a page is considered already recovered before another chunk\n * failure may trigger a reload. Defaults to 30 seconds.\n */\n maxAgeMs?: number;\n /**\n * Override the storage key. Mostly useful for tests and embedded runtimes.\n */\n storageKey?: string;\n /**\n * Called right before Farm reloads the page.\n */\n onRecover?: (error: unknown) => void;\n /**\n * Test hooks for browser globals.\n */\n reload?: () => void;\n storage?: Pick<Storage, \"getItem\" | \"setItem\" | \"removeItem\"> | null;\n location?: Pick<Location, \"pathname\" | \"search\" | \"reload\">;\n now?: () => number;\n}\n\nconst DEFAULT_MAX_AGE_MS = 30_000;\nconst STORAGE_KEY_PREFIX = \"farm:chunk-recovery:\";\nconst CHUNK_ERROR_PATTERNS = [\n /ChunkLoadError/i,\n /Loading chunk [\\w-]+ failed/i,\n /Loading CSS chunk [\\w-]+ failed/i,\n /CSS_CHUNK_LOAD_FAILED/i,\n /failed to fetch dynamically imported module/i,\n /error loading dynamically imported module/i,\n /importing a module script failed/i,\n /unable to preload CSS/i,\n /module script failed/i,\n];\n\nexport function isChunkLoadError(errorLike: unknown): boolean {\n const values = collectErrorText(errorLike);\n if (values.some((value) => CHUNK_ERROR_PATTERNS.some((pattern) => pattern.test(value)))) {\n return true;\n }\n\n const targetUrl = getEventTargetAssetUrl(errorLike);\n return Boolean(targetUrl && /\\.(?:m?js|css)(?:[?#].*)?$/i.test(targetUrl));\n}\n\nexport function installChunkErrorRecovery(options: FarmChunkRecoveryOptions = {}): () => void {\n if (typeof window === \"undefined\") {\n return () => {};\n }\n\n const recover = (errorLike: unknown) => {\n if (!isChunkLoadError(errorLike)) {\n return;\n }\n if (!markRecovered(options)) {\n return;\n }\n\n options.onRecover?.(errorLike);\n getReload(options)();\n };\n\n const onError = (event: Event | ErrorEvent) => {\n recover(getErrorEventPayload(event));\n };\n const onUnhandledRejection = (event: PromiseRejectionEvent) => {\n recover(event.reason);\n };\n\n window.addEventListener(\"error\", onError, true);\n window.addEventListener(\"unhandledrejection\", onUnhandledRejection);\n\n return () => {\n window.removeEventListener(\"error\", onError, true);\n window.removeEventListener(\"unhandledrejection\", onUnhandledRejection);\n };\n}\n\nfunction markRecovered(options: FarmChunkRecoveryOptions): boolean {\n const now = getNow(options);\n const maxAgeMs = options.maxAgeMs ?? DEFAULT_MAX_AGE_MS;\n const storage = getStorage(options);\n const key = getStorageKey(options);\n\n if (!storage) {\n return true;\n }\n\n try {\n const previous = Number(storage.getItem(key));\n if (Number.isFinite(previous) && previous > 0 && now - previous < maxAgeMs) {\n return false;\n }\n storage.setItem(key, String(now));\n return true;\n } catch {\n return true;\n }\n}\n\nfunction getErrorEventPayload(event: Event | ErrorEvent): unknown {\n if (\"error\" in event && event.error) {\n return event.error;\n }\n if (\"message\" in event && event.message) {\n return event.message;\n }\n return event;\n}\n\nfunction collectErrorText(value: unknown, seen = new Set<unknown>()): string[] {\n if (value == null || seen.has(value)) {\n return [];\n }\n seen.add(value);\n\n if (typeof value === \"string\") {\n return [value];\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return [String(value)];\n }\n if (typeof value !== \"object\") {\n return [];\n }\n\n const record = value as Record<string, unknown>;\n const output: string[] = [];\n\n for (const key of [\"name\", \"message\", \"code\", \"type\", \"request\", \"src\", \"href\"]) {\n const candidate = record[key];\n if (typeof candidate === \"string\") {\n output.push(candidate);\n }\n }\n\n if (\"reason\" in record) {\n output.push(...collectErrorText(record.reason, seen));\n }\n if (\"error\" in record) {\n output.push(...collectErrorText(record.error, seen));\n }\n\n return output;\n}\n\nfunction getEventTargetAssetUrl(value: unknown): string | undefined {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n const target = (value as Event).target as\n | (EventTarget & { src?: string; href?: string; tagName?: string })\n | null\n | undefined;\n if (!target || typeof target !== \"object\") {\n return undefined;\n }\n\n const tagName = typeof target.tagName === \"string\" ? target.tagName.toLowerCase() : \"\";\n if (tagName !== \"script\" && tagName !== \"link\") {\n return undefined;\n }\n\n return typeof target.src === \"string\" && target.src\n ? target.src\n : typeof target.href === \"string\" && target.href\n ? target.href\n : undefined;\n}\n\nfunction getStorage(options: FarmChunkRecoveryOptions) {\n if (\"storage\" in options) {\n return options.storage;\n }\n\n try {\n return window.sessionStorage;\n } catch {\n return null;\n }\n}\n\nfunction getStorageKey(options: FarmChunkRecoveryOptions): string {\n if (options.storageKey) {\n return options.storageKey;\n }\n\n const location = getLocation(options);\n return `${STORAGE_KEY_PREFIX}${location.pathname}${location.search}`;\n}\n\nfunction getLocation(options: FarmChunkRecoveryOptions) {\n return options.location ?? window.location;\n}\n\nfunction getReload(options: FarmChunkRecoveryOptions): () => void {\n if (options.reload) {\n return options.reload;\n }\n\n const location = getLocation(options);\n return () => location.reload();\n}\n\nfunction getNow(options: FarmChunkRecoveryOptions): number {\n return options.now ? options.now() : Date.now();\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { F as FarmIntegrationAPI, a as FarmIntegrationAPIOperation } from './integration-api-CHT2OKAf.mjs';
|
|
2
2
|
import { F as FarmClientCacheKey } from './client-cache-D-EZ7XVW.mjs';
|
|
3
|
+
import { DefinedCacheKey, RouteDataCacheKey, InferCacheKeyData } from './cache.mjs';
|
|
4
|
+
import { F as FarmAPIStream } from './transport-BmbGTXA5.mjs';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Small per-call integration metadata. When sent from a browser, values are
|
|
@@ -165,6 +167,14 @@ declare function integrationClients<TSources extends Record<string, any>>(source
|
|
|
165
167
|
integrations: TSources;
|
|
166
168
|
}, clientOptions?: IntegrationClientOptions, serverOptions?: Omit<IntegrationServerClientOptions, "isServer">): IntegrationClients<TSources>;
|
|
167
169
|
|
|
170
|
+
declare const FARM_API_ROUTE_REF_SYMBOL: unique symbol;
|
|
171
|
+
declare const FARM_API_ROUTE_META_SYMBOL: unique symbol;
|
|
172
|
+
type APIRouteRefMetadata = {
|
|
173
|
+
path: string;
|
|
174
|
+
method: string;
|
|
175
|
+
baseURL: string;
|
|
176
|
+
sameOrigin: boolean;
|
|
177
|
+
};
|
|
168
178
|
type APIClientOptions = {
|
|
169
179
|
baseURL?: string;
|
|
170
180
|
headers?: Record<string, string>;
|
|
@@ -201,6 +211,18 @@ type APIResult<TData = unknown, TError = Error> = {
|
|
|
201
211
|
error: TError | null;
|
|
202
212
|
key: CacheKey<TData>;
|
|
203
213
|
};
|
|
214
|
+
declare class APIClientError<TCode extends string = string, TData = unknown, TStatus extends number = number> extends Error {
|
|
215
|
+
readonly code: TCode;
|
|
216
|
+
readonly data: TData;
|
|
217
|
+
readonly status: TStatus;
|
|
218
|
+
readonly response?: Response;
|
|
219
|
+
constructor(code: TCode, data: TData, options: {
|
|
220
|
+
status: TStatus;
|
|
221
|
+
message: string;
|
|
222
|
+
response?: Response;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
type APIClientSystemError = APIClientError<"http_error", unknown, number> | APIClientError<"network_error", unknown, 0>;
|
|
204
226
|
type RequestEvent = {
|
|
205
227
|
requestId: string;
|
|
206
228
|
method: StatusEvent["method"];
|
|
@@ -236,7 +258,7 @@ type RetryOptions = {
|
|
|
236
258
|
count?: number;
|
|
237
259
|
delay?: number | ((attempt: number) => number);
|
|
238
260
|
};
|
|
239
|
-
type InvalidateTarget =
|
|
261
|
+
type InvalidateTarget = FarmClientCacheKey | {
|
|
240
262
|
key: FarmClientCacheKey;
|
|
241
263
|
} | {
|
|
242
264
|
path: string;
|
|
@@ -247,7 +269,7 @@ type InvalidateOptions = InvalidateTarget[] | {
|
|
|
247
269
|
targets: InvalidateTarget[];
|
|
248
270
|
refetch?: boolean;
|
|
249
271
|
};
|
|
250
|
-
type OptimisticUpdate = [CallableRouteRef<any>, unknown, (prev: any) => any] | [CacheKey<any> | string, (prev: any) => any];
|
|
272
|
+
type OptimisticUpdate = [CallableRouteRef<any>, unknown, (prev: any) => any] | [CacheKey<any> | DefinedCacheKey<any> | string, (prev: any) => any];
|
|
251
273
|
type OptimisticOptions<TUpdates extends readonly unknown[] = readonly OptimisticUpdate[]> = {
|
|
252
274
|
update: TUpdates & NormalizeOptimisticUpdates<TUpdates>;
|
|
253
275
|
rollbackOnError?: boolean;
|
|
@@ -285,7 +307,7 @@ type NormalizeOptimisticUpdate<TUpdate> = TUpdate extends readonly [
|
|
|
285
307
|
TRoute,
|
|
286
308
|
InferRouteInput<TRoute> | undefined,
|
|
287
309
|
(prev: InferRouteData<TRoute> | undefined) => InferRouteData<TRoute>
|
|
288
|
-
] : never : TUpdate extends readonly [infer TKey, (prev: any) => any] ? TKey extends CacheKey<infer TData> ? [TKey, (prev: TData | undefined) => TData] : TKey extends string ? [TKey, (prev: unknown) => unknown] : never : never;
|
|
310
|
+
] : never : TUpdate extends readonly [infer TKey, (prev: any) => any] ? TKey extends DefinedCacheKey<any, RouteDataCacheKey> ? [TKey, (prev: InferCacheKeyData<TKey> | undefined) => InferCacheKeyData<TKey>] : TKey extends CacheKey<infer TData> ? [TKey, (prev: TData | undefined) => TData] : TKey extends string ? [TKey, (prev: unknown) => unknown] : never : never;
|
|
289
311
|
type NormalizeOptimisticUpdates<TUpdates extends readonly unknown[]> = {
|
|
290
312
|
[K in keyof TUpdates]: NormalizeOptimisticUpdate<TUpdates[K]>;
|
|
291
313
|
};
|
|
@@ -294,6 +316,7 @@ type TypedEndpointLike = {
|
|
|
294
316
|
body: any;
|
|
295
317
|
query: any;
|
|
296
318
|
response: any;
|
|
319
|
+
errors?: any;
|
|
297
320
|
};
|
|
298
321
|
};
|
|
299
322
|
type Simplify<T> = {
|
|
@@ -321,24 +344,44 @@ type QueryInputProp<TValue> = IsNever<TValue> extends true ? {} : IsAny<TValue>
|
|
|
321
344
|
query: TValue;
|
|
322
345
|
};
|
|
323
346
|
type HasRequiredKeys<T> = RequiredKeys<T> extends never ? false : true;
|
|
324
|
-
type
|
|
347
|
+
type InferEndpointBody<T> = T extends {
|
|
348
|
+
__types: {
|
|
349
|
+
inputBody: infer TInputBody;
|
|
350
|
+
};
|
|
351
|
+
} ? TInputBody : T extends {
|
|
325
352
|
__types: {
|
|
326
353
|
body: infer TBody;
|
|
354
|
+
};
|
|
355
|
+
} ? TBody : never;
|
|
356
|
+
type InferEndpointInput<T> = T extends {
|
|
357
|
+
__types: {
|
|
327
358
|
query: infer TQuery;
|
|
328
359
|
};
|
|
329
|
-
} ? Simplify<BodyInputProp<
|
|
360
|
+
} ? Simplify<BodyInputProp<InferEndpointBody<T>> & QueryInputProp<TQuery>> : {};
|
|
330
361
|
type InferEndpointOutput<T> = T extends {
|
|
331
362
|
__types: {
|
|
332
363
|
response: infer R;
|
|
333
364
|
};
|
|
334
|
-
} ? R
|
|
365
|
+
} ? R extends {
|
|
366
|
+
readonly __farmStreamItem: infer TItem;
|
|
367
|
+
} ? FarmAPIStream<TItem> : R : any;
|
|
368
|
+
type InferEndpointError<T> = T extends {
|
|
369
|
+
__types: {
|
|
370
|
+
errors: infer TErrors;
|
|
371
|
+
};
|
|
372
|
+
} ? keyof TErrors extends never ? Error : {
|
|
373
|
+
[TCode in keyof TErrors]: TErrors[TCode] extends {
|
|
374
|
+
data: infer TData;
|
|
375
|
+
status: infer TStatus extends number;
|
|
376
|
+
} ? APIClientError<TCode & string, TData, TStatus> : never;
|
|
377
|
+
}[keyof TErrors] | APIClientSystemError : Error;
|
|
335
378
|
type EndpointMethod<T = any> = (<TUpdates extends readonly unknown[] = readonly OptimisticUpdate[]>(...args: HasRequiredKeys<InferEndpointInput<T>> extends true ? [
|
|
336
379
|
options: InferEndpointInput<T>,
|
|
337
|
-
clientOptions?: ClientOptions<InferEndpointOutput<T>,
|
|
380
|
+
clientOptions?: ClientOptions<InferEndpointOutput<T>, InferEndpointError<T>, TUpdates>
|
|
338
381
|
] : [
|
|
339
382
|
options?: InferEndpointInput<T>,
|
|
340
|
-
clientOptions?: ClientOptions<InferEndpointOutput<T>,
|
|
341
|
-
]) => Promise<APIResult<InferEndpointOutput<T>,
|
|
383
|
+
clientOptions?: ClientOptions<InferEndpointOutput<T>, InferEndpointError<T>, TUpdates>
|
|
384
|
+
]) => Promise<APIResult<InferEndpointOutput<T>, InferEndpointError<T>>>) & RouteRef<InferEndpointOutput<T>, InferEndpointInput<T>>;
|
|
342
385
|
type RouterToClient<T> = {
|
|
343
386
|
[K in keyof T]: T[K] extends TypedEndpointLike ? EndpointMethod<T[K]> : T[K] extends Record<string, any> ? RouterToClient<T[K]> : EndpointMethod<T[K]>;
|
|
344
387
|
};
|
|
@@ -380,6 +423,8 @@ type ServerAPIClient<TEndpoints extends Record<string, any>, TIntegrations exten
|
|
|
380
423
|
*/
|
|
381
424
|
declare function createAPIClient<TRouter extends Record<string, any>>(options: APIClientWithoutIntegrationsOptions): RouteAPIClient<TRouter>;
|
|
382
425
|
declare function createAPIClient<TRouter extends Record<string, any>, TIntegrations extends Record<string, any> = {}>(options?: APIClientOptions): APIClient<TRouter, TIntegrations>;
|
|
426
|
+
declare function isAPIRouteRef(value: unknown): value is CallableRouteRef;
|
|
427
|
+
declare function getAPIRouteRefMetadata(value: unknown): APIRouteRefMetadata | null;
|
|
383
428
|
/**
|
|
384
429
|
* Server-side API client that calls endpoints directly as functions
|
|
385
430
|
* No HTTP overhead for app endpoints, and registered integration routes can be exposed at
|
|
@@ -399,4 +444,4 @@ declare function createServerAPIClient<TEndpoints extends Record<string, any>>(e
|
|
|
399
444
|
declare function createServerAPIClient<TEndpoints extends Record<string, any>>(endpoints: TEndpoints, options: ServerAPIClientWithoutIntegrationsOptions): TEndpoints;
|
|
400
445
|
declare function createServerAPIClient<TEndpoints extends Record<string, any>, TIntegrations extends Record<string, any> = {}>(endpoints: TEndpoints, options?: ServerAPIClientOptions): ServerAPIClient<TEndpoints, TIntegrations>;
|
|
401
446
|
|
|
402
|
-
export { type
|
|
447
|
+
export { type IntegrationServerClientAliases as $, type APIRouteRefMetadata as A, createIntegrationClients as B, type CacheKey as C, createIntegrations as D, createIntegrationServerClient as E, FARM_API_ROUTE_REF_SYMBOL as F, getIntegrationAPIManifest as G, integrationClients as H, type InvalidateTarget as I, integrationsClient as J, integrationsServer as K, type IntegrationClient as L, type IntegrationClientAliases as M, type IntegrationClientRoot as N, type OptimisticUpdate as O, type IntegrationClientOptions as P, type IntegrationClientRequestOptions as Q, type RequestEvent as R, type ServerAPIClientOptions as S, type IntegrationAPI as T, type IntegrationClients as U, type IntegrationClientData as V, type IntegrationOperationResult as W, type InferIntegrationOperationBody as X, type InferIntegrationOperationQuery as Y, type InferIntegrationOperationResponse as Z, type IntegrationServerClient as _, FARM_API_ROUTE_META_SYMBOL as a, type IntegrationServerClientOptions as a0, type IntegrationServerClientRequestOptions as a1, type IntegrationServerClientRoot as a2, type IntegrationServerRequestLike as a3, type APIClientOptions as b, type APIClientWithoutIntegrationsOptions as c, type ServerAPIClientWithoutIntegrationsOptions as d, type StatusPhase as e, type StatusEvent as f, type APIResult as g, APIClientError as h, type APIClientSystemError as i, type ResponseEvent as j, type CachePolicy as k, type CacheOptions as l, type RetryOptions as m, type InvalidateOptions as n, type OptimisticOptions as o, type ClientOptions as p, type RouteAPIClient as q, type APIClient as r, type ServerAPIClient as s, createAPIClient as t, isAPIRouteRef as u, getAPIRouteRefMetadata as v, createServerAPIClient as w, createIntegrationClient as x, IntegrationClientError as y, createIntegrationApi as z };
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { F as FarmIntegrationAPI, a as FarmIntegrationAPIOperation } from './integration-api-CHT2OKAf.js';
|
|
2
2
|
import { F as FarmClientCacheKey } from './client-cache-CIlyBlmx.js';
|
|
3
|
+
import { DefinedCacheKey, RouteDataCacheKey, InferCacheKeyData } from './cache.js';
|
|
4
|
+
import { F as FarmAPIStream } from './transport-BmbGTXA5.js';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Small per-call integration metadata. When sent from a browser, values are
|
|
@@ -165,6 +167,14 @@ declare function integrationClients<TSources extends Record<string, any>>(source
|
|
|
165
167
|
integrations: TSources;
|
|
166
168
|
}, clientOptions?: IntegrationClientOptions, serverOptions?: Omit<IntegrationServerClientOptions, "isServer">): IntegrationClients<TSources>;
|
|
167
169
|
|
|
170
|
+
declare const FARM_API_ROUTE_REF_SYMBOL: unique symbol;
|
|
171
|
+
declare const FARM_API_ROUTE_META_SYMBOL: unique symbol;
|
|
172
|
+
type APIRouteRefMetadata = {
|
|
173
|
+
path: string;
|
|
174
|
+
method: string;
|
|
175
|
+
baseURL: string;
|
|
176
|
+
sameOrigin: boolean;
|
|
177
|
+
};
|
|
168
178
|
type APIClientOptions = {
|
|
169
179
|
baseURL?: string;
|
|
170
180
|
headers?: Record<string, string>;
|
|
@@ -201,6 +211,18 @@ type APIResult<TData = unknown, TError = Error> = {
|
|
|
201
211
|
error: TError | null;
|
|
202
212
|
key: CacheKey<TData>;
|
|
203
213
|
};
|
|
214
|
+
declare class APIClientError<TCode extends string = string, TData = unknown, TStatus extends number = number> extends Error {
|
|
215
|
+
readonly code: TCode;
|
|
216
|
+
readonly data: TData;
|
|
217
|
+
readonly status: TStatus;
|
|
218
|
+
readonly response?: Response;
|
|
219
|
+
constructor(code: TCode, data: TData, options: {
|
|
220
|
+
status: TStatus;
|
|
221
|
+
message: string;
|
|
222
|
+
response?: Response;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
type APIClientSystemError = APIClientError<"http_error", unknown, number> | APIClientError<"network_error", unknown, 0>;
|
|
204
226
|
type RequestEvent = {
|
|
205
227
|
requestId: string;
|
|
206
228
|
method: StatusEvent["method"];
|
|
@@ -236,7 +258,7 @@ type RetryOptions = {
|
|
|
236
258
|
count?: number;
|
|
237
259
|
delay?: number | ((attempt: number) => number);
|
|
238
260
|
};
|
|
239
|
-
type InvalidateTarget =
|
|
261
|
+
type InvalidateTarget = FarmClientCacheKey | {
|
|
240
262
|
key: FarmClientCacheKey;
|
|
241
263
|
} | {
|
|
242
264
|
path: string;
|
|
@@ -247,7 +269,7 @@ type InvalidateOptions = InvalidateTarget[] | {
|
|
|
247
269
|
targets: InvalidateTarget[];
|
|
248
270
|
refetch?: boolean;
|
|
249
271
|
};
|
|
250
|
-
type OptimisticUpdate = [CallableRouteRef<any>, unknown, (prev: any) => any] | [CacheKey<any> | string, (prev: any) => any];
|
|
272
|
+
type OptimisticUpdate = [CallableRouteRef<any>, unknown, (prev: any) => any] | [CacheKey<any> | DefinedCacheKey<any> | string, (prev: any) => any];
|
|
251
273
|
type OptimisticOptions<TUpdates extends readonly unknown[] = readonly OptimisticUpdate[]> = {
|
|
252
274
|
update: TUpdates & NormalizeOptimisticUpdates<TUpdates>;
|
|
253
275
|
rollbackOnError?: boolean;
|
|
@@ -285,7 +307,7 @@ type NormalizeOptimisticUpdate<TUpdate> = TUpdate extends readonly [
|
|
|
285
307
|
TRoute,
|
|
286
308
|
InferRouteInput<TRoute> | undefined,
|
|
287
309
|
(prev: InferRouteData<TRoute> | undefined) => InferRouteData<TRoute>
|
|
288
|
-
] : never : TUpdate extends readonly [infer TKey, (prev: any) => any] ? TKey extends CacheKey<infer TData> ? [TKey, (prev: TData | undefined) => TData] : TKey extends string ? [TKey, (prev: unknown) => unknown] : never : never;
|
|
310
|
+
] : never : TUpdate extends readonly [infer TKey, (prev: any) => any] ? TKey extends DefinedCacheKey<any, RouteDataCacheKey> ? [TKey, (prev: InferCacheKeyData<TKey> | undefined) => InferCacheKeyData<TKey>] : TKey extends CacheKey<infer TData> ? [TKey, (prev: TData | undefined) => TData] : TKey extends string ? [TKey, (prev: unknown) => unknown] : never : never;
|
|
289
311
|
type NormalizeOptimisticUpdates<TUpdates extends readonly unknown[]> = {
|
|
290
312
|
[K in keyof TUpdates]: NormalizeOptimisticUpdate<TUpdates[K]>;
|
|
291
313
|
};
|
|
@@ -294,6 +316,7 @@ type TypedEndpointLike = {
|
|
|
294
316
|
body: any;
|
|
295
317
|
query: any;
|
|
296
318
|
response: any;
|
|
319
|
+
errors?: any;
|
|
297
320
|
};
|
|
298
321
|
};
|
|
299
322
|
type Simplify<T> = {
|
|
@@ -321,24 +344,44 @@ type QueryInputProp<TValue> = IsNever<TValue> extends true ? {} : IsAny<TValue>
|
|
|
321
344
|
query: TValue;
|
|
322
345
|
};
|
|
323
346
|
type HasRequiredKeys<T> = RequiredKeys<T> extends never ? false : true;
|
|
324
|
-
type
|
|
347
|
+
type InferEndpointBody<T> = T extends {
|
|
348
|
+
__types: {
|
|
349
|
+
inputBody: infer TInputBody;
|
|
350
|
+
};
|
|
351
|
+
} ? TInputBody : T extends {
|
|
325
352
|
__types: {
|
|
326
353
|
body: infer TBody;
|
|
354
|
+
};
|
|
355
|
+
} ? TBody : never;
|
|
356
|
+
type InferEndpointInput<T> = T extends {
|
|
357
|
+
__types: {
|
|
327
358
|
query: infer TQuery;
|
|
328
359
|
};
|
|
329
|
-
} ? Simplify<BodyInputProp<
|
|
360
|
+
} ? Simplify<BodyInputProp<InferEndpointBody<T>> & QueryInputProp<TQuery>> : {};
|
|
330
361
|
type InferEndpointOutput<T> = T extends {
|
|
331
362
|
__types: {
|
|
332
363
|
response: infer R;
|
|
333
364
|
};
|
|
334
|
-
} ? R
|
|
365
|
+
} ? R extends {
|
|
366
|
+
readonly __farmStreamItem: infer TItem;
|
|
367
|
+
} ? FarmAPIStream<TItem> : R : any;
|
|
368
|
+
type InferEndpointError<T> = T extends {
|
|
369
|
+
__types: {
|
|
370
|
+
errors: infer TErrors;
|
|
371
|
+
};
|
|
372
|
+
} ? keyof TErrors extends never ? Error : {
|
|
373
|
+
[TCode in keyof TErrors]: TErrors[TCode] extends {
|
|
374
|
+
data: infer TData;
|
|
375
|
+
status: infer TStatus extends number;
|
|
376
|
+
} ? APIClientError<TCode & string, TData, TStatus> : never;
|
|
377
|
+
}[keyof TErrors] | APIClientSystemError : Error;
|
|
335
378
|
type EndpointMethod<T = any> = (<TUpdates extends readonly unknown[] = readonly OptimisticUpdate[]>(...args: HasRequiredKeys<InferEndpointInput<T>> extends true ? [
|
|
336
379
|
options: InferEndpointInput<T>,
|
|
337
|
-
clientOptions?: ClientOptions<InferEndpointOutput<T>,
|
|
380
|
+
clientOptions?: ClientOptions<InferEndpointOutput<T>, InferEndpointError<T>, TUpdates>
|
|
338
381
|
] : [
|
|
339
382
|
options?: InferEndpointInput<T>,
|
|
340
|
-
clientOptions?: ClientOptions<InferEndpointOutput<T>,
|
|
341
|
-
]) => Promise<APIResult<InferEndpointOutput<T>,
|
|
383
|
+
clientOptions?: ClientOptions<InferEndpointOutput<T>, InferEndpointError<T>, TUpdates>
|
|
384
|
+
]) => Promise<APIResult<InferEndpointOutput<T>, InferEndpointError<T>>>) & RouteRef<InferEndpointOutput<T>, InferEndpointInput<T>>;
|
|
342
385
|
type RouterToClient<T> = {
|
|
343
386
|
[K in keyof T]: T[K] extends TypedEndpointLike ? EndpointMethod<T[K]> : T[K] extends Record<string, any> ? RouterToClient<T[K]> : EndpointMethod<T[K]>;
|
|
344
387
|
};
|
|
@@ -380,6 +423,8 @@ type ServerAPIClient<TEndpoints extends Record<string, any>, TIntegrations exten
|
|
|
380
423
|
*/
|
|
381
424
|
declare function createAPIClient<TRouter extends Record<string, any>>(options: APIClientWithoutIntegrationsOptions): RouteAPIClient<TRouter>;
|
|
382
425
|
declare function createAPIClient<TRouter extends Record<string, any>, TIntegrations extends Record<string, any> = {}>(options?: APIClientOptions): APIClient<TRouter, TIntegrations>;
|
|
426
|
+
declare function isAPIRouteRef(value: unknown): value is CallableRouteRef;
|
|
427
|
+
declare function getAPIRouteRefMetadata(value: unknown): APIRouteRefMetadata | null;
|
|
383
428
|
/**
|
|
384
429
|
* Server-side API client that calls endpoints directly as functions
|
|
385
430
|
* No HTTP overhead for app endpoints, and registered integration routes can be exposed at
|
|
@@ -399,4 +444,4 @@ declare function createServerAPIClient<TEndpoints extends Record<string, any>>(e
|
|
|
399
444
|
declare function createServerAPIClient<TEndpoints extends Record<string, any>>(endpoints: TEndpoints, options: ServerAPIClientWithoutIntegrationsOptions): TEndpoints;
|
|
400
445
|
declare function createServerAPIClient<TEndpoints extends Record<string, any>, TIntegrations extends Record<string, any> = {}>(endpoints: TEndpoints, options?: ServerAPIClientOptions): ServerAPIClient<TEndpoints, TIntegrations>;
|
|
401
446
|
|
|
402
|
-
export { type
|
|
447
|
+
export { type IntegrationServerClientAliases as $, type APIRouteRefMetadata as A, createIntegrationClients as B, type CacheKey as C, createIntegrations as D, createIntegrationServerClient as E, FARM_API_ROUTE_REF_SYMBOL as F, getIntegrationAPIManifest as G, integrationClients as H, type InvalidateTarget as I, integrationsClient as J, integrationsServer as K, type IntegrationClient as L, type IntegrationClientAliases as M, type IntegrationClientRoot as N, type OptimisticUpdate as O, type IntegrationClientOptions as P, type IntegrationClientRequestOptions as Q, type RequestEvent as R, type ServerAPIClientOptions as S, type IntegrationAPI as T, type IntegrationClients as U, type IntegrationClientData as V, type IntegrationOperationResult as W, type InferIntegrationOperationBody as X, type InferIntegrationOperationQuery as Y, type InferIntegrationOperationResponse as Z, type IntegrationServerClient as _, FARM_API_ROUTE_META_SYMBOL as a, type IntegrationServerClientOptions as a0, type IntegrationServerClientRequestOptions as a1, type IntegrationServerClientRoot as a2, type IntegrationServerRequestLike as a3, type APIClientOptions as b, type APIClientWithoutIntegrationsOptions as c, type ServerAPIClientWithoutIntegrationsOptions as d, type StatusPhase as e, type StatusEvent as f, type APIResult as g, APIClientError as h, type APIClientSystemError as i, type ResponseEvent as j, type CachePolicy as k, type CacheOptions as l, type RetryOptions as m, type InvalidateOptions as n, type OptimisticOptions as o, type ClientOptions as p, type RouteAPIClient as q, type APIClient as r, type ServerAPIClient as s, createAPIClient as t, isAPIRouteRef as u, getAPIRouteRefMetadata as v, createServerAPIClient as w, createIntegrationClient as x, IntegrationClientError as y, createIntegrationApi as z };
|
|
@@ -15,6 +15,7 @@ import { FarmEnvConfig, ResolvedFarmEnv } from './env.js';
|
|
|
15
15
|
import { FarmServerActionsConfig, ResolvedFarmServerActionsConfig } from './server-action-security.js';
|
|
16
16
|
import { F as FarmImageConfig, R as ResolvedFarmImageConfig } from './image-config-Duob7wER.js';
|
|
17
17
|
import { k as FarmI18nUserConfig, R as ResolvedFarmI18nConfig } from './types-BH1lhg5G.js';
|
|
18
|
+
import { FarmCacheUserConfig } from './cache.js';
|
|
18
19
|
import { F as FarmRouteRuntimeConfig, a as FarmRouteRuntime, b as FarmRouteRegions, c as FarmRouteMaxDuration } from './route-runtime-DoOHzCAD.js';
|
|
19
20
|
|
|
20
21
|
type RuntimeClientFactory<TClient> = () => TClient | Promise<TClient>;
|
|
@@ -486,6 +487,8 @@ interface FarmUserConfig extends Omit<FarmConfig, "vite" | "docs" | "env" | "lay
|
|
|
486
487
|
extends?: readonly FarmLayerEntry[];
|
|
487
488
|
plugins?: FarmPlugin[];
|
|
488
489
|
integrations?: FarmIntegrationsUserConfig;
|
|
490
|
+
/** Shared application data, route, ISR, and PPR cache. */
|
|
491
|
+
cache?: FarmCacheUserConfig;
|
|
489
492
|
migrations?: FarmMigrationsUserConfig;
|
|
490
493
|
/** Map portable cron schedules to ordinary GET API routes. */
|
|
491
494
|
cron?: FarmCronUserConfig | FarmCronResolvedConfig | false;
|
|
@@ -548,6 +551,7 @@ interface ResolvedFarmConfig extends Required<Omit<FarmUserConfig, "extends" | "
|
|
|
548
551
|
devtools: ResolvedFarmDevtoolsConfig;
|
|
549
552
|
images: ResolvedFarmImageConfig;
|
|
550
553
|
i18n: ResolvedFarmI18nConfig;
|
|
554
|
+
routeRules: FarmRouteRules;
|
|
551
555
|
}
|
|
552
556
|
type FarmLayerConfig = Omit<FarmUserConfig, "root" | "outDir" | "distDir" | "deploy" | "output" | "preset" | "publicDir" | "generateBuildId" | "deploymentId">;
|
|
553
557
|
|
|
@@ -1408,6 +1412,7 @@ interface FarmAppContext {
|
|
|
1408
1412
|
}
|
|
1409
1413
|
interface FarmConfig {
|
|
1410
1414
|
root?: string;
|
|
1415
|
+
/** App source directory. @default "src" */
|
|
1411
1416
|
srcDir?: string;
|
|
1412
1417
|
extends?: readonly FarmLayerEntry[];
|
|
1413
1418
|
/** Resolved layer graph. Populated by config resolution. */
|
|
@@ -1437,6 +1442,8 @@ interface FarmConfig {
|
|
|
1437
1442
|
};
|
|
1438
1443
|
};
|
|
1439
1444
|
storage?: FarmStorageUserConfig;
|
|
1445
|
+
/** Shared application data, route, ISR, and PPR cache. */
|
|
1446
|
+
cache?: FarmCacheUserConfig;
|
|
1440
1447
|
integrations?: FarmIntegrationsUserConfig;
|
|
1441
1448
|
plugins?: FarmPlugin[];
|
|
1442
1449
|
migrations?: FarmMigrationsUserConfig;
|
|
@@ -15,6 +15,7 @@ import { FarmEnvConfig, ResolvedFarmEnv } from './env.mjs';
|
|
|
15
15
|
import { FarmServerActionsConfig, ResolvedFarmServerActionsConfig } from './server-action-security.mjs';
|
|
16
16
|
import { F as FarmImageConfig, R as ResolvedFarmImageConfig } from './image-config-Duob7wER.mjs';
|
|
17
17
|
import { k as FarmI18nUserConfig, R as ResolvedFarmI18nConfig } from './types-BH1lhg5G.mjs';
|
|
18
|
+
import { FarmCacheUserConfig } from './cache.mjs';
|
|
18
19
|
import { F as FarmRouteRuntimeConfig, a as FarmRouteRuntime, b as FarmRouteRegions, c as FarmRouteMaxDuration } from './route-runtime-DoOHzCAD.mjs';
|
|
19
20
|
|
|
20
21
|
type RuntimeClientFactory<TClient> = () => TClient | Promise<TClient>;
|
|
@@ -486,6 +487,8 @@ interface FarmUserConfig extends Omit<FarmConfig, "vite" | "docs" | "env" | "lay
|
|
|
486
487
|
extends?: readonly FarmLayerEntry[];
|
|
487
488
|
plugins?: FarmPlugin[];
|
|
488
489
|
integrations?: FarmIntegrationsUserConfig;
|
|
490
|
+
/** Shared application data, route, ISR, and PPR cache. */
|
|
491
|
+
cache?: FarmCacheUserConfig;
|
|
489
492
|
migrations?: FarmMigrationsUserConfig;
|
|
490
493
|
/** Map portable cron schedules to ordinary GET API routes. */
|
|
491
494
|
cron?: FarmCronUserConfig | FarmCronResolvedConfig | false;
|
|
@@ -548,6 +551,7 @@ interface ResolvedFarmConfig extends Required<Omit<FarmUserConfig, "extends" | "
|
|
|
548
551
|
devtools: ResolvedFarmDevtoolsConfig;
|
|
549
552
|
images: ResolvedFarmImageConfig;
|
|
550
553
|
i18n: ResolvedFarmI18nConfig;
|
|
554
|
+
routeRules: FarmRouteRules;
|
|
551
555
|
}
|
|
552
556
|
type FarmLayerConfig = Omit<FarmUserConfig, "root" | "outDir" | "distDir" | "deploy" | "output" | "preset" | "publicDir" | "generateBuildId" | "deploymentId">;
|
|
553
557
|
|
|
@@ -1408,6 +1412,7 @@ interface FarmAppContext {
|
|
|
1408
1412
|
}
|
|
1409
1413
|
interface FarmConfig {
|
|
1410
1414
|
root?: string;
|
|
1415
|
+
/** App source directory. @default "src" */
|
|
1411
1416
|
srcDir?: string;
|
|
1412
1417
|
extends?: readonly FarmLayerEntry[];
|
|
1413
1418
|
/** Resolved layer graph. Populated by config resolution. */
|
|
@@ -1437,6 +1442,8 @@ interface FarmConfig {
|
|
|
1437
1442
|
};
|
|
1438
1443
|
};
|
|
1439
1444
|
storage?: FarmStorageUserConfig;
|
|
1445
|
+
/** Shared application data, route, ISR, and PPR cache. */
|
|
1446
|
+
cache?: FarmCacheUserConfig;
|
|
1440
1447
|
integrations?: FarmIntegrationsUserConfig;
|
|
1441
1448
|
plugins?: FarmPlugin[];
|
|
1442
1449
|
migrations?: FarmMigrationsUserConfig;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { a as FarmClientHydrationCompleteEvent, b as FarmClientHydrationEvent, d as FarmClientHydrationMode, e as FarmClientHydrationSession, f as FarmClientLocation, g as FarmClientNavigationAction, h as FarmClientNavigationErrorEvent, i as FarmClientNavigationEvent, j as FarmClientNavigationLoadedEvent, k as FarmClientNavigationResolvedEvent, l as FarmClientNavigationSession, m as FarmClientPerformanceEvent, n as FarmClientPlugin, o as FarmClientPluginCloseEvent, p as FarmClientPluginEnforce, q as FarmClientPluginErrorEvent, r as FarmClientPluginErrorPhase, F as FarmClientPluginManager, s as FarmClientPluginManagerOptions, t as FarmClientPluginMetadata, u as FarmClientPluginRegistration, v as FarmClientPluginRouter, w as FarmClientPluginSetupEvent, x as FarmClientPluginStateEvent, c as createClientPluginManager } from './plugin-BJDf43dc.mjs';
|
|
2
|
-
export { V as FarmPlugin, ad as FarmPluginContext, ae as FarmRequestPluginContext, af as FarmRequestStore } from './client-plugins-
|
|
2
|
+
export { V as FarmPlugin, ad as FarmPluginContext, ae as FarmRequestPluginContext, af as FarmRequestStore } from './client-plugins-DQQ1adXM.mjs';
|
|
3
3
|
import 'react';
|
|
4
4
|
import 'http';
|
|
5
5
|
import './types-D1A6-XvH.mjs';
|
|
@@ -18,4 +18,5 @@ import './env.mjs';
|
|
|
18
18
|
import './server-action-security.mjs';
|
|
19
19
|
import './image-config-Duob7wER.mjs';
|
|
20
20
|
import './types-BH1lhg5G.mjs';
|
|
21
|
+
import './cache.mjs';
|
|
21
22
|
import './route-runtime-DoOHzCAD.mjs';
|