@farm.js/core 0.1.0-beta.10 → 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.
- package/dist/{chunk-3QDB3IA6.mjs → chunk-3WIRO3N7.mjs} +2 -2
- package/dist/chunk-3WIRO3N7.mjs.map +1 -0
- package/dist/chunk-53MVSX3R.mjs +168 -0
- package/dist/chunk-53MVSX3R.mjs.map +1 -0
- package/dist/{chunk-AW6I64AP.mjs → chunk-6ZXIQSXE.mjs} +16 -1
- package/dist/chunk-6ZXIQSXE.mjs.map +1 -0
- package/dist/chunk-7ZVN3YZI.mjs +333 -0
- package/dist/chunk-7ZVN3YZI.mjs.map +1 -0
- package/dist/{chunk-7N62DNSO.mjs → chunk-H3TE3LOV.mjs} +2 -2
- package/dist/{chunk-QTZZ2ISQ.mjs → chunk-KLA67WKG.mjs} +1 -1
- package/dist/chunk-KLA67WKG.mjs.map +1 -0
- package/dist/{chunk-K5ZTUF22.mjs → chunk-L2PE36GQ.mjs} +7 -3
- package/dist/chunk-L2PE36GQ.mjs.map +1 -0
- package/dist/{chunk-4LND3PXF.mjs → chunk-OPHK6OJN.mjs} +513 -48
- package/dist/chunk-OPHK6OJN.mjs.map +1 -0
- package/dist/chunk-USLFXFFH.mjs +46 -0
- package/dist/chunk-USLFXFFH.mjs.map +1 -0
- package/dist/{chunk-DTOWEQRV.mjs → chunk-VSDZEB5M.mjs} +368 -103
- package/dist/chunk-VSDZEB5M.mjs.map +1 -0
- package/dist/{chunk-E2AI2CW7.mjs → chunk-Z3YG4OZT.mjs} +727 -148
- package/dist/chunk-Z3YG4OZT.mjs.map +1 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.mjs +1 -1
- package/dist/{devtools-A22KUJZT.mjs → devtools-GAZ7F3KL.mjs} +4 -3
- package/dist/{devtools-A22KUJZT.mjs.map → devtools-GAZ7F3KL.mjs.map} +1 -1
- package/dist/docs.cjs +622 -124
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.mjs +5 -3
- package/dist/font.cjs +19 -2
- package/dist/font.cjs.map +1 -1
- package/dist/font.mjs +7 -3
- package/dist/index.cjs +2208 -681
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +27 -19
- package/dist/index.mjs.map +1 -1
- package/dist/internal/build-runtime.cjs +2035 -517
- package/dist/internal/build-runtime.cjs.map +1 -1
- package/dist/internal/build-runtime.mjs +13 -10
- package/dist/internal/client-runtime.cjs +169 -2
- package/dist/internal/client-runtime.cjs.map +1 -1
- package/dist/internal/client-runtime.mjs +170 -2
- package/dist/internal/client-runtime.mjs.map +1 -1
- package/dist/internal/config-runtime.cjs +22 -0
- package/dist/internal/config-runtime.cjs.map +1 -1
- package/dist/internal/config-runtime.mjs +3 -2
- package/dist/internal/metadata-image-runtime.cjs +199 -0
- package/dist/internal/metadata-image-runtime.cjs.map +1 -0
- package/dist/internal/metadata-image-runtime.mjs +8 -0
- package/dist/internal/metadata-image-runtime.mjs.map +1 -0
- package/dist/internal/production-runtime.cjs +310 -0
- package/dist/internal/production-runtime.cjs.map +1 -1
- package/dist/internal/production-runtime.mjs +10 -0
- package/dist/internal/production-runtime.mjs.map +1 -1
- package/dist/navigation.cjs.map +1 -1
- package/dist/navigation.mjs +2 -2
- package/dist/plugin.cjs +1523 -340
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.mjs +9 -5
- package/dist/server.cjs +1636 -411
- package/dist/server.cjs.map +1 -1
- package/dist/server.mjs +17 -19
- package/dist/server.mjs.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.mjs +1 -1
- package/dist/vite.cjs +1577 -350
- package/dist/vite.cjs.map +1 -1
- package/dist/vite.mjs +9 -5
- package/package.json +10 -1
- package/dist/chunk-3QDB3IA6.mjs.map +0 -1
- package/dist/chunk-4LND3PXF.mjs.map +0 -1
- package/dist/chunk-AW6I64AP.mjs.map +0 -1
- package/dist/chunk-DTOWEQRV.mjs.map +0 -1
- package/dist/chunk-E2AI2CW7.mjs.map +0 -1
- package/dist/chunk-K5ZTUF22.mjs.map +0 -1
- package/dist/chunk-QM746KUO.mjs +0 -56
- package/dist/chunk-QM746KUO.mjs.map +0 -1
- package/dist/chunk-QTZZ2ISQ.mjs.map +0 -1
- /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: {
|