@farm.js/core 0.1.0-beta.11 → 0.1.0-beta.13

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.
Files changed (237) hide show
  1. package/dist/{chunk-5EVQFRL2.mjs → chunk-3WIRO3N7.mjs} +2 -2
  2. package/dist/chunk-3WIRO3N7.mjs.map +1 -0
  3. package/dist/chunk-53MVSX3R.mjs +168 -0
  4. package/dist/chunk-53MVSX3R.mjs.map +1 -0
  5. package/dist/{chunk-AW6I64AP.mjs → chunk-6ZXIQSXE.mjs} +16 -1
  6. package/dist/chunk-6ZXIQSXE.mjs.map +1 -0
  7. package/dist/chunk-7ZVN3YZI.mjs +333 -0
  8. package/dist/chunk-7ZVN3YZI.mjs.map +1 -0
  9. package/dist/{chunk-7N62DNSO.mjs → chunk-H3TE3LOV.mjs} +2 -2
  10. package/dist/{chunk-QTZZ2ISQ.mjs → chunk-KLA67WKG.mjs} +1 -1
  11. package/dist/chunk-KLA67WKG.mjs.map +1 -0
  12. package/dist/{chunk-K5ZTUF22.mjs → chunk-L2PE36GQ.mjs} +7 -3
  13. package/dist/chunk-L2PE36GQ.mjs.map +1 -0
  14. package/dist/{chunk-4LND3PXF.mjs → chunk-OPHK6OJN.mjs} +513 -48
  15. package/dist/chunk-OPHK6OJN.mjs.map +1 -0
  16. package/dist/chunk-USLFXFFH.mjs +46 -0
  17. package/dist/chunk-USLFXFFH.mjs.map +1 -0
  18. package/dist/{chunk-4677KXB7.mjs → chunk-VSDZEB5M.mjs} +368 -103
  19. package/dist/chunk-VSDZEB5M.mjs.map +1 -0
  20. package/dist/{chunk-77BOAQHI.mjs → chunk-Z3YG4OZT.mjs} +725 -147
  21. package/dist/chunk-Z3YG4OZT.mjs.map +1 -0
  22. package/dist/client.cjs.map +1 -1
  23. package/dist/client.mjs +1 -1
  24. package/dist/{devtools-A22KUJZT.mjs → devtools-GAZ7F3KL.mjs} +4 -3
  25. package/dist/{devtools-A22KUJZT.mjs.map → devtools-GAZ7F3KL.mjs.map} +1 -1
  26. package/dist/docs.cjs +622 -124
  27. package/dist/docs.cjs.map +1 -1
  28. package/dist/docs.mjs +5 -3
  29. package/dist/font.cjs +19 -2
  30. package/dist/font.cjs.map +1 -1
  31. package/dist/font.mjs +7 -3
  32. package/dist/index.cjs +2206 -680
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.mjs +27 -19
  35. package/dist/index.mjs.map +1 -1
  36. package/dist/internal/build-runtime.cjs +2033 -516
  37. package/dist/internal/build-runtime.cjs.map +1 -1
  38. package/dist/internal/build-runtime.mjs +13 -10
  39. package/dist/internal/client-runtime.cjs +169 -2
  40. package/dist/internal/client-runtime.cjs.map +1 -1
  41. package/dist/internal/client-runtime.mjs +170 -2
  42. package/dist/internal/client-runtime.mjs.map +1 -1
  43. package/dist/internal/config-runtime.cjs +22 -0
  44. package/dist/internal/config-runtime.cjs.map +1 -1
  45. package/dist/internal/config-runtime.mjs +3 -2
  46. package/dist/internal/metadata-image-runtime.cjs +199 -0
  47. package/dist/internal/metadata-image-runtime.cjs.map +1 -0
  48. package/dist/internal/metadata-image-runtime.mjs +8 -0
  49. package/dist/internal/metadata-image-runtime.mjs.map +1 -0
  50. package/dist/internal/production-runtime.cjs +310 -0
  51. package/dist/internal/production-runtime.cjs.map +1 -1
  52. package/dist/internal/production-runtime.mjs +10 -0
  53. package/dist/internal/production-runtime.mjs.map +1 -1
  54. package/dist/navigation.cjs.map +1 -1
  55. package/dist/navigation.mjs +2 -2
  56. package/dist/plugin.cjs +1521 -339
  57. package/dist/plugin.cjs.map +1 -1
  58. package/dist/plugin.mjs +9 -5
  59. package/dist/server.cjs +1634 -410
  60. package/dist/server.cjs.map +1 -1
  61. package/dist/server.mjs +17 -19
  62. package/dist/server.mjs.map +1 -1
  63. package/dist/version.cjs +1 -1
  64. package/dist/version.cjs.map +1 -1
  65. package/dist/version.mjs +1 -1
  66. package/dist/vite.cjs +1575 -349
  67. package/dist/vite.cjs.map +1 -1
  68. package/dist/vite.mjs +9 -5
  69. package/package.json +10 -1
  70. package/dist/after.d.mts +0 -25
  71. package/dist/after.d.ts +0 -25
  72. package/dist/agent-runtime.d.mts +0 -94
  73. package/dist/agent-runtime.d.ts +0 -94
  74. package/dist/api/route-manager.d.mts +0 -66
  75. package/dist/api/route-manager.d.ts +0 -66
  76. package/dist/api/runtime.d.mts +0 -3
  77. package/dist/api/runtime.d.ts +0 -3
  78. package/dist/api.d.mts +0 -48
  79. package/dist/api.d.ts +0 -48
  80. package/dist/app-BNE2FoZ4.d.mts +0 -302
  81. package/dist/app-DRGUmJ3s.d.ts +0 -302
  82. package/dist/app-markdown.d.mts +0 -22
  83. package/dist/app-markdown.d.ts +0 -22
  84. package/dist/cache.d.mts +0 -192
  85. package/dist/cache.d.ts +0 -192
  86. package/dist/chunk-4677KXB7.mjs.map +0 -1
  87. package/dist/chunk-4LND3PXF.mjs.map +0 -1
  88. package/dist/chunk-5EVQFRL2.mjs.map +0 -1
  89. package/dist/chunk-77BOAQHI.mjs.map +0 -1
  90. package/dist/chunk-AW6I64AP.mjs.map +0 -1
  91. package/dist/chunk-K5ZTUF22.mjs.map +0 -1
  92. package/dist/chunk-QM746KUO.mjs +0 -56
  93. package/dist/chunk-QM746KUO.mjs.map +0 -1
  94. package/dist/chunk-QTZZ2ISQ.mjs.map +0 -1
  95. package/dist/client-BT1mFQas.d.mts +0 -447
  96. package/dist/client-Nn0q4eO4.d.ts +0 -447
  97. package/dist/client-cache-CIlyBlmx.d.ts +0 -6
  98. package/dist/client-cache-D-EZ7XVW.d.mts +0 -6
  99. package/dist/client-plugins-Bc5jHcNr.d.ts +0 -1927
  100. package/dist/client-plugins-jsk-ZLzJ.d.mts +0 -1927
  101. package/dist/client-plugins.d.mts +0 -22
  102. package/dist/client-plugins.d.ts +0 -22
  103. package/dist/client.d.mts +0 -447
  104. package/dist/client.d.ts +0 -447
  105. package/dist/config.d.mts +0 -29
  106. package/dist/config.d.ts +0 -29
  107. package/dist/cron.d.mts +0 -78
  108. package/dist/cron.d.ts +0 -78
  109. package/dist/deferred.d.mts +0 -42
  110. package/dist/deferred.d.ts +0 -42
  111. package/dist/deployment.d.mts +0 -34
  112. package/dist/deployment.d.ts +0 -34
  113. package/dist/docs.d.mts +0 -69
  114. package/dist/docs.d.ts +0 -69
  115. package/dist/env-types.d.mts +0 -12
  116. package/dist/env-types.d.ts +0 -12
  117. package/dist/env.d.mts +0 -45
  118. package/dist/env.d.ts +0 -45
  119. package/dist/environment/vite.d.mts +0 -22
  120. package/dist/environment/vite.d.ts +0 -22
  121. package/dist/environment.d.mts +0 -18
  122. package/dist/environment.d.ts +0 -18
  123. package/dist/font.d.mts +0 -70
  124. package/dist/font.d.ts +0 -70
  125. package/dist/headers.d.mts +0 -22
  126. package/dist/headers.d.ts +0 -22
  127. package/dist/i18n/client.d.mts +0 -32
  128. package/dist/i18n/client.d.ts +0 -32
  129. package/dist/i18n/index.d.mts +0 -20
  130. package/dist/i18n/index.d.ts +0 -20
  131. package/dist/i18n/server.d.mts +0 -30
  132. package/dist/i18n/server.d.ts +0 -30
  133. package/dist/image/server.d.mts +0 -37
  134. package/dist/image/server.d.ts +0 -37
  135. package/dist/image/sharp.d.mts +0 -7
  136. package/dist/image/sharp.d.ts +0 -7
  137. package/dist/image-config-Duob7wER.d.mts +0 -50
  138. package/dist/image-config-Duob7wER.d.ts +0 -50
  139. package/dist/image.d.mts +0 -39
  140. package/dist/image.d.ts +0 -39
  141. package/dist/index.d.mts +0 -455
  142. package/dist/index.d.ts +0 -455
  143. package/dist/integration-api-CHT2OKAf.d.mts +0 -93
  144. package/dist/integration-api-CHT2OKAf.d.ts +0 -93
  145. package/dist/integrations.d.mts +0 -22
  146. package/dist/integrations.d.ts +0 -22
  147. package/dist/internal/build-runtime.d.mts +0 -39
  148. package/dist/internal/build-runtime.d.ts +0 -39
  149. package/dist/internal/client-runtime.d.mts +0 -2
  150. package/dist/internal/client-runtime.d.ts +0 -2
  151. package/dist/internal/config-runtime.d.mts +0 -39
  152. package/dist/internal/config-runtime.d.ts +0 -39
  153. package/dist/internal/production-node-env.d.mts +0 -12
  154. package/dist/internal/production-node-env.d.ts +0 -12
  155. package/dist/internal/production-runtime.d.mts +0 -41
  156. package/dist/internal/production-runtime.d.ts +0 -41
  157. package/dist/markdown.d.mts +0 -60
  158. package/dist/markdown.d.ts +0 -60
  159. package/dist/metadata-7ffpT3jr.d.mts +0 -22
  160. package/dist/metadata-JHn-8eht.d.ts +0 -22
  161. package/dist/middleware.d.mts +0 -164
  162. package/dist/middleware.d.ts +0 -164
  163. package/dist/navigation-errors-Dvwpzaer.d.mts +0 -13
  164. package/dist/navigation-errors-Dvwpzaer.d.ts +0 -13
  165. package/dist/navigation.d.mts +0 -14
  166. package/dist/navigation.d.ts +0 -14
  167. package/dist/observability.d.mts +0 -335
  168. package/dist/observability.d.ts +0 -335
  169. package/dist/params-BALtrRim.d.ts +0 -15
  170. package/dist/params-ry-lxqmy.d.mts +0 -15
  171. package/dist/plugin-BJDf43dc.d.mts +0 -165
  172. package/dist/plugin-BJDf43dc.d.ts +0 -165
  173. package/dist/plugin.d.mts +0 -22
  174. package/dist/plugin.d.ts +0 -22
  175. package/dist/production-runtime-9KG7GuvW.d.ts +0 -79
  176. package/dist/production-runtime-B-fweKts.d.mts +0 -79
  177. package/dist/production-runtime-C_B79w2P.d.mts +0 -28
  178. package/dist/production-runtime-DDEM1D2q.d.ts +0 -28
  179. package/dist/query/client.d.mts +0 -61
  180. package/dist/query/client.d.ts +0 -61
  181. package/dist/query/index.d.mts +0 -90
  182. package/dist/query/index.d.ts +0 -90
  183. package/dist/query/parsers.d.mts +0 -25
  184. package/dist/query/parsers.d.ts +0 -25
  185. package/dist/query/server.d.mts +0 -55
  186. package/dist/query/server.d.ts +0 -55
  187. package/dist/request-Dsq4kGW0.d.mts +0 -6
  188. package/dist/request-udtobOLv.d.ts +0 -6
  189. package/dist/request.d.mts +0 -2
  190. package/dist/request.d.ts +0 -2
  191. package/dist/resolver-DJqjLMg_.d.mts +0 -14
  192. package/dist/resolver-IH4RmPEl.d.ts +0 -14
  193. package/dist/route-runtime-DoOHzCAD.d.mts +0 -38
  194. package/dist/route-runtime-DoOHzCAD.d.ts +0 -38
  195. package/dist/router.d.mts +0 -36
  196. package/dist/router.d.ts +0 -36
  197. package/dist/routes.d.mts +0 -224
  198. package/dist/routes.d.ts +0 -224
  199. package/dist/runtime-9nQjVM7X.d.mts +0 -206
  200. package/dist/runtime-Cxpq6xZN.d.mts +0 -27
  201. package/dist/runtime-DgeS2skB.d.ts +0 -206
  202. package/dist/runtime-bv63eUiO.d.ts +0 -27
  203. package/dist/server-action-security.d.mts +0 -43
  204. package/dist/server-action-security.d.ts +0 -43
  205. package/dist/server-fn-client.d.mts +0 -32
  206. package/dist/server-fn-client.d.ts +0 -32
  207. package/dist/server-fn.d.mts +0 -93
  208. package/dist/server-fn.d.ts +0 -93
  209. package/dist/server-plugins.d.mts +0 -55
  210. package/dist/server-plugins.d.ts +0 -55
  211. package/dist/server-query-client.d.mts +0 -50
  212. package/dist/server-query-client.d.ts +0 -50
  213. package/dist/server-query.d.mts +0 -36
  214. package/dist/server-query.d.ts +0 -36
  215. package/dist/server.d.mts +0 -48
  216. package/dist/server.d.ts +0 -48
  217. package/dist/storage.d.mts +0 -52
  218. package/dist/storage.d.ts +0 -52
  219. package/dist/testing.d.mts +0 -101
  220. package/dist/testing.d.ts +0 -101
  221. package/dist/transport-BmbGTXA5.d.mts +0 -49
  222. package/dist/transport-BmbGTXA5.d.ts +0 -49
  223. package/dist/types-BMxWr97v.d.mts +0 -81
  224. package/dist/types-BMxWr97v.d.ts +0 -81
  225. package/dist/types-C9N-nk5R.d.mts +0 -53
  226. package/dist/types-C9N-nk5R.d.ts +0 -53
  227. package/dist/types-D1A6-XvH.d.mts +0 -73
  228. package/dist/types-D1A6-XvH.d.ts +0 -73
  229. package/dist/utils-CA0z0c-2.d.ts +0 -23
  230. package/dist/utils-mYVkSOt2.d.mts +0 -23
  231. package/dist/version.d.mts +0 -3
  232. package/dist/version.d.ts +0 -3
  233. package/dist/vite.d.mts +0 -22
  234. package/dist/vite.d.ts +0 -22
  235. package/dist/workflows.d.mts +0 -110
  236. package/dist/workflows.d.ts +0 -110
  237. /package/dist/{chunk-7N62DNSO.mjs.map → chunk-H3TE3LOV.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../../src/client/island-runtime.ts"],"sourcesContent":["\"use client\";\n\nimport type { FarmIslandStrategy } from \"../island\";\n\nexport interface ScheduleFarmIslandHydrationOptions<T> {\n container: Element;\n strategy?: FarmIslandStrategy | null;\n signal?: AbortSignal;\n hydrate: () => T | Promise<T>;\n}\n\ninterface FarmQueuedClick {\n target?: EventTarget | null;\n}\n\nfunction getPreHydrationClickQueue(): FarmQueuedClick[] | null {\n const windowWithQueue = window as typeof window & {\n __FARM_PREHYDRATION_CLICK_QUEUE__?: FarmQueuedClick[];\n };\n return Array.isArray(windowWithQueue.__FARM_PREHYDRATION_CLICK_QUEUE__)\n ? windowWithQueue.__FARM_PREHYDRATION_CLICK_QUEUE__\n : null;\n}\n\nfunction findQueuedTarget(container: Element): Element | null {\n const queue = getPreHydrationClickQueue();\n if (!queue) return null;\n for (const item of queue) {\n if (item?.target instanceof Element && container.contains(item.target)) return item.target;\n }\n return null;\n}\n\nfunction takeQueuedTargets(container: Element): Element[] {\n const queue = getPreHydrationClickQueue();\n if (!queue) return [];\n\n const targets: Element[] = [];\n for (let index = queue.length - 1; index >= 0; index--) {\n const target = queue[index]?.target;\n if (!(target instanceof Element) || !container.contains(target)) continue;\n queue.splice(index, 1);\n targets.unshift(target);\n }\n return targets;\n}\n\nfunction runWhenIdle(callback: () => void): () => void {\n const windowWithIdleCallback = window as typeof window & {\n requestIdleCallback?: (callback: () => void, options?: { timeout?: number }) => number;\n cancelIdleCallback?: (handle: number) => void;\n };\n\n if (typeof windowWithIdleCallback.requestIdleCallback === \"function\") {\n const handle = windowWithIdleCallback.requestIdleCallback(callback, { timeout: 2_000 });\n return () => windowWithIdleCallback.cancelIdleCallback?.(handle);\n }\n\n const handle = window.setTimeout(callback, 1);\n return () => window.clearTimeout(handle);\n}\n\nfunction replayClick(target: Element): void {\n const clickable = target as Element & { click?: () => void };\n if (typeof clickable.click === \"function\") {\n clickable.click();\n return;\n }\n target.dispatchEvent(new MouseEvent(\"click\", { bubbles: true, cancelable: true }));\n}\n\nfunction finishIslandHydration(container: Element, activatingTarget?: Element | null): void {\n container.setAttribute(\"data-farm-island-hydrated\", \"true\");\n\n const targets = new Set<Element>();\n if (activatingTarget?.isConnected) targets.add(activatingTarget);\n for (const target of takeQueuedTargets(container)) if (target.isConnected) targets.add(target);\n\n for (const target of targets) window.setTimeout(() => replayClick(target), 0);\n}\n\n/**\n * Defer importing and hydrating a server-rendered client boundary until its\n * configured trigger. The returned promise resolves with the hydration result.\n */\nexport function scheduleFarmIslandHydration<T>({\n container,\n strategy,\n signal,\n hydrate,\n}: ScheduleFarmIslandHydrationOptions<T>): Promise<T | undefined> {\n const resolvedStrategy = strategy ?? \"load\";\n if (signal?.aborted) return Promise.resolve(undefined);\n\n if (resolvedStrategy === \"load\") {\n return Promise.resolve()\n .then(() => (signal?.aborted ? undefined : hydrate()))\n .then((value) => {\n if (!signal?.aborted) finishIslandHydration(container);\n return value;\n });\n }\n\n return new Promise<T | undefined>((resolve, reject) => {\n let started = false;\n let cancelled = false;\n let queuedClickTarget: Element | null = null;\n const triggerCleanups = new Set<() => void>();\n let removeAbortListener: (() => void) | null = null;\n\n const cleanupTriggers = () => {\n for (const dispose of triggerCleanups) dispose();\n triggerCleanups.clear();\n };\n const cleanup = () => {\n cleanupTriggers();\n removeAbortListener?.();\n removeAbortListener = null;\n };\n\n const start = () => {\n if (started || cancelled) return;\n started = true;\n cleanupTriggers();\n Promise.resolve()\n .then(hydrate)\n .then(\n (value) => {\n cleanup();\n if (cancelled || signal?.aborted) return;\n const target = queuedClickTarget;\n queuedClickTarget = null;\n finishIslandHydration(container, target);\n resolve(value);\n },\n (error) => {\n cleanup();\n reject(error);\n },\n );\n };\n\n if (signal) {\n const abort = () => {\n cancelled = true;\n cleanup();\n takeQueuedTargets(container);\n resolve(undefined);\n };\n signal.addEventListener(\"abort\", abort, { once: true });\n removeAbortListener = () => signal.removeEventListener(\"abort\", abort);\n }\n\n if (resolvedStrategy === \"idle\") {\n triggerCleanups.add(runWhenIdle(start));\n return;\n }\n\n if (resolvedStrategy === \"visible\") {\n if (typeof IntersectionObserver !== \"function\") {\n start();\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) start();\n },\n { rootMargin: \"200px\" },\n );\n observer.observe(container);\n triggerCleanups.add(() => observer.disconnect());\n return;\n }\n\n const queueActivatingClick = (event: MouseEvent) => {\n const target =\n event.target instanceof Element\n ? event.target.closest(\n 'button,[role=\"button\"],input[type=\"button\"],input[type=\"submit\"],input[type=\"reset\"]',\n )\n : null;\n if (\n !target ||\n !container.contains(target) ||\n target.closest(\"a[href]\") ||\n event.button !== 0 ||\n event.metaKey ||\n event.altKey ||\n event.ctrlKey ||\n event.shiftKey\n ) {\n return;\n }\n queuedClickTarget ??= target;\n event.preventDefault();\n event.stopImmediatePropagation();\n start();\n };\n const activateFromQueuedClick = (event: Event) => {\n const target = (event as CustomEvent<{ target?: EventTarget | null }>).detail?.target;\n if (!(target instanceof Element) || !container.contains(target)) return;\n\n queuedClickTarget ??= target;\n start();\n };\n\n document.addEventListener(\"click\", queueActivatingClick, true);\n triggerCleanups.add(() => document.removeEventListener(\"click\", queueActivatingClick, true));\n document.addEventListener(\"farm:island-interaction\", activateFromQueuedClick);\n triggerCleanups.add(() =>\n document.removeEventListener(\"farm:island-interaction\", activateFromQueuedClick),\n );\n\n const queuedTarget = findQueuedTarget(container);\n if (queuedTarget) {\n queuedClickTarget = queuedTarget;\n start();\n }\n });\n}\n"],"mappings":"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","names":["handle"]}
@@ -3796,6 +3796,27 @@ function validateFarmAuthConfig(config) {
3796
3796
  }
3797
3797
  __name(validateFarmAuthConfig, "validateFarmAuthConfig");
3798
3798
 
3799
+ // src/preload.ts
3800
+ var DEFAULT_PRELOAD_CONFIG = {
3801
+ mode: "enforce",
3802
+ maxImages: 1,
3803
+ maxFonts: 2
3804
+ };
3805
+ function resolveFarmPerformanceConfig(config) {
3806
+ return {
3807
+ preload: {
3808
+ mode: config?.preload?.mode === "warn" ? "warn" : "enforce",
3809
+ maxImages: normalizeBudget(config?.preload?.maxImages, DEFAULT_PRELOAD_CONFIG.maxImages),
3810
+ maxFonts: normalizeBudget(config?.preload?.maxFonts, DEFAULT_PRELOAD_CONFIG.maxFonts)
3811
+ }
3812
+ };
3813
+ }
3814
+ __name(resolveFarmPerformanceConfig, "resolveFarmPerformanceConfig");
3815
+ function normalizeBudget(value, fallback) {
3816
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : fallback;
3817
+ }
3818
+ __name(normalizeBudget, "normalizeBudget");
3819
+
3799
3820
  // src/config.ts
3800
3821
  var FARM_RESOLVED_CUSTOM_CONTEXT = /* @__PURE__ */ Symbol.for("farm.resolvedCustomContext");
3801
3822
  function normalizeDeployTarget(target) {
@@ -4129,6 +4150,7 @@ async function resolveConfig(userConfig, mode) {
4129
4150
  headers: /* @__PURE__ */ __name(() => [...headers, ...routeRuleHeaders], "headers"),
4130
4151
  routeRules,
4131
4152
  images: resolveFarmImageConfig(userConfig.images),
4153
+ performance: resolveFarmPerformanceConfig(userConfig.performance),
4132
4154
  publicDir: userConfig.publicDir || "public",
4133
4155
  i18n: resolveFarmI18nConfig(userConfig.i18n, { root, mode }),
4134
4156
  openapi: {