@farm.js/core 0.1.0-beta.22 → 0.1.0-beta.23
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/agent-runtime.d.mts +2 -1
- package/dist/agent-runtime.d.ts +2 -1
- package/dist/{app-BB8GCH1g.d.ts → app-CTFnOJaI.d.ts} +5 -3
- package/dist/{app-DwsTpyNZ.d.mts → app-DA6ospIq.d.mts} +5 -3
- package/dist/app-markdown.d.mts +2 -1
- package/dist/app-markdown.d.ts +2 -1
- package/dist/chunk-4IVNW5QD.mjs +82 -0
- package/dist/chunk-4IVNW5QD.mjs.map +1 -0
- package/dist/{chunk-DAUR3WUZ.mjs → chunk-5NOVWCFL.mjs} +2 -2
- package/dist/chunk-5NOVWCFL.mjs.map +1 -0
- package/dist/chunk-D42BNPZH.mjs +79 -0
- package/dist/chunk-D42BNPZH.mjs.map +1 -0
- package/dist/{chunk-LLPN5SEZ.mjs → chunk-DVPRBMU2.mjs} +2 -2
- package/dist/{chunk-ZP73P4VR.mjs → chunk-FJGTYLCO.mjs} +67 -20
- package/dist/chunk-FJGTYLCO.mjs.map +1 -0
- package/dist/chunk-GQVQESLY.mjs +25 -0
- package/dist/chunk-GQVQESLY.mjs.map +1 -0
- package/dist/chunk-H53KVQUU.mjs +48 -0
- package/dist/chunk-H53KVQUU.mjs.map +1 -0
- package/dist/chunk-HCGQYYHI.mjs +1 -0
- package/dist/chunk-HCGQYYHI.mjs.map +1 -0
- package/dist/{chunk-UCYWGN2P.mjs → chunk-OHNSROHS.mjs} +1 -1
- package/dist/{chunk-FRPWCMMG.mjs → chunk-SBWOTAX4.mjs} +63 -2
- package/dist/chunk-SBWOTAX4.mjs.map +1 -0
- package/dist/{chunk-XBKXKJX5.mjs → chunk-TX54PXAJ.mjs} +81 -25
- package/dist/chunk-TX54PXAJ.mjs.map +1 -0
- package/dist/{chunk-CEVMYGDL.mjs → chunk-YD5IRKVS.mjs} +13 -9
- package/dist/chunk-YD5IRKVS.mjs.map +1 -0
- package/dist/{client-plugins-QQntVkrv.d.mts → client-plugins-CCilIb_G.d.mts} +6 -2
- package/dist/{client-plugins-CbRum1fj.d.ts → client-plugins-DuuleQKk.d.ts} +6 -2
- package/dist/client-plugins.d.mts +2 -1
- package/dist/client-plugins.d.ts +2 -1
- package/dist/client.cjs +122 -35
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.mts +2 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.mjs +13 -2
- package/dist/config.d.mts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/{devtools-52FYXIEK.mjs → devtools-326RBQCN.mjs} +7 -6
- package/dist/{devtools-52FYXIEK.mjs.map → devtools-326RBQCN.mjs.map} +1 -1
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.mjs +6 -5
- package/dist/index.cjs +431 -55
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +10 -7
- package/dist/index.d.ts +10 -7
- package/dist/index.mjs +66 -49
- 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 +337 -34
- 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 +15 -12
- package/dist/internal/config-runtime.cjs +41 -0
- 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 +5 -4
- package/dist/internal/production-runtime.cjs +178 -0
- package/dist/internal/production-runtime.cjs.map +1 -1
- package/dist/internal/production-runtime.d.mts +20 -6
- package/dist/internal/production-runtime.d.ts +20 -6
- package/dist/internal/production-runtime.mjs +13 -1
- package/dist/internal/production-runtime.mjs.map +1 -1
- package/dist/{metadata-B5jBJHq1.d.ts → metadata-DyPRG0wX.d.ts} +1 -1
- package/dist/{metadata-BxOJ4FJl.d.mts → metadata-_GHcAySx.d.mts} +1 -1
- package/dist/middleware.d.mts +4 -3
- package/dist/middleware.d.ts +4 -3
- package/dist/plugin.cjs +219 -14
- 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 +11 -8
- package/dist/{production-runtime-Bxua86uR.d.mts → production-runtime-C4cO3esK.d.mts} +1 -1
- package/dist/{production-runtime-CZqXjRVi.d.ts → production-runtime-DrEy8kBO.d.ts} +1 -1
- package/dist/{request-7V0GaZK_.d.mts → request-B2PpOxYK.d.mts} +1 -1
- package/dist/{request-B5XYBv5a.d.ts → request-D40lt6aN.d.ts} +1 -1
- package/dist/request.d.mts +3 -2
- package/dist/request.d.ts +3 -2
- package/dist/routes.d.mts +2 -1
- package/dist/routes.d.ts +2 -1
- package/dist/server-plugins.d.mts +3 -2
- package/dist/server-plugins.d.ts +3 -2
- package/dist/server.cjs +241 -19
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.mts +8 -6
- package/dist/server.d.ts +8 -6
- package/dist/server.mjs +20 -11
- package/dist/server.mjs.map +1 -1
- package/dist/testing.d.mts +2 -1
- package/dist/testing.d.ts +2 -1
- package/dist/theme/client.cjs +115 -0
- package/dist/theme/client.cjs.map +1 -0
- package/dist/theme/client.d.mts +17 -0
- package/dist/theme/client.d.ts +17 -0
- package/dist/theme/client.mjs +16 -0
- package/dist/theme/client.mjs.map +1 -0
- package/dist/theme/index.cjs +71 -0
- package/dist/theme/index.cjs.map +1 -0
- package/dist/theme/index.d.mts +6 -0
- package/dist/theme/index.d.ts +6 -0
- package/dist/theme/index.mjs +9 -0
- package/dist/theme/index.mjs.map +1 -0
- package/dist/theme/server.cjs +191 -0
- package/dist/theme/server.cjs.map +1 -0
- package/dist/theme/server.d.mts +8 -0
- package/dist/theme/server.d.ts +8 -0
- package/dist/theme/server.mjs +18 -0
- package/dist/theme/server.mjs.map +1 -0
- package/dist/types-CsR8fpgF.d.mts +30 -0
- package/dist/types-CsR8fpgF.d.ts +30 -0
- package/dist/{utils-xTFxzu47.d.ts → utils-3sQgfkya.d.ts} +1 -1
- package/dist/{utils-s9pN0Yep.d.mts → utils-Bop7bly-.d.mts} +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 +242 -15
- 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 +11 -8
- package/package.json +25 -1
- package/dist/chunk-CEVMYGDL.mjs.map +0 -1
- package/dist/chunk-DAUR3WUZ.mjs.map +0 -1
- package/dist/chunk-FRPWCMMG.mjs.map +0 -1
- package/dist/chunk-XBKXKJX5.mjs.map +0 -1
- package/dist/chunk-ZP73P4VR.mjs.map +0 -1
- /package/dist/{chunk-LLPN5SEZ.mjs.map → chunk-DVPRBMU2.mjs.map} +0 -0
- /package/dist/{chunk-UCYWGN2P.mjs.map → chunk-OHNSROHS.mjs.map} +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./chunk-CGILA3WO.mjs";
|
|
4
|
+
|
|
5
|
+
// src/theme/bridge.ts
|
|
6
|
+
var FALLBACK_SERVER_SNAPSHOT = Object.freeze({
|
|
7
|
+
theme: "system",
|
|
8
|
+
resolvedTheme: void 0,
|
|
9
|
+
mounted: false
|
|
10
|
+
});
|
|
11
|
+
var FARM_THEME_SERVER_SNAPSHOT_RESOLVER = /* @__PURE__ */ Symbol.for("farm.js.theme.server-snapshot-resolver");
|
|
12
|
+
function _setFarmThemeServerSnapshotResolver(resolver) {
|
|
13
|
+
globalThis[FARM_THEME_SERVER_SNAPSHOT_RESOLVER] = resolver;
|
|
14
|
+
}
|
|
15
|
+
__name(_setFarmThemeServerSnapshotResolver, "_setFarmThemeServerSnapshotResolver");
|
|
16
|
+
function getFarmThemeServerSnapshot() {
|
|
17
|
+
return globalThis[FARM_THEME_SERVER_SNAPSHOT_RESOLVER]?.() ?? FALLBACK_SERVER_SNAPSHOT;
|
|
18
|
+
}
|
|
19
|
+
__name(getFarmThemeServerSnapshot, "getFarmThemeServerSnapshot");
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
_setFarmThemeServerSnapshotResolver,
|
|
23
|
+
getFarmThemeServerSnapshot
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-GQVQESLY.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme/bridge.ts"],"sourcesContent":["import type { FarmThemeSnapshot } from \"./types\";\n\nconst FALLBACK_SERVER_SNAPSHOT: FarmThemeSnapshot = Object.freeze({\n theme: \"system\",\n resolvedTheme: undefined,\n mounted: false,\n});\n\nconst FARM_THEME_SERVER_SNAPSHOT_RESOLVER = Symbol.for(\"farm.js.theme.server-snapshot-resolver\");\n\ntype FarmThemeBridgeGlobal = typeof globalThis & {\n [FARM_THEME_SERVER_SNAPSHOT_RESOLVER]?: () => FarmThemeSnapshot;\n};\n\nexport function _setFarmThemeServerSnapshotResolver(resolver: () => FarmThemeSnapshot): void {\n (globalThis as FarmThemeBridgeGlobal)[FARM_THEME_SERVER_SNAPSHOT_RESOLVER] = resolver;\n}\n\nexport function getFarmThemeServerSnapshot(): FarmThemeSnapshot {\n return (\n (globalThis as FarmThemeBridgeGlobal)[FARM_THEME_SERVER_SNAPSHOT_RESOLVER]?.() ??\n FALLBACK_SERVER_SNAPSHOT\n );\n}\n"],"mappings":";;;;;AAEA,IAAM,2BAA8C,OAAO,OAAO;AAAA,EAChE,OAAO;AAAA,EACP,eAAe;AAAA,EACf,SAAS;AACX,CAAC;AAED,IAAM,sCAAsC,uBAAO,IAAI,wCAAwC;AAMxF,SAAS,oCAAoC,UAAyC;AAC3F,EAAC,WAAqC,mCAAmC,IAAI;AAC/E;AAFgB;AAIT,SAAS,6BAAgD;AAC9D,SACG,WAAqC,mCAAmC,IAAI,KAC7E;AAEJ;AALgB;","names":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./chunk-CGILA3WO.mjs";
|
|
4
|
+
|
|
5
|
+
// src/theme/config.ts
|
|
6
|
+
var DEFAULT_FARM_THEME_STORAGE_KEY = "farm-theme";
|
|
7
|
+
var STORAGE_KEY_PATTERN = /^[A-Za-z0-9._-]+$/;
|
|
8
|
+
function resolveFarmThemeConfig(config, basePath = "/") {
|
|
9
|
+
if (config && "enabled" in config) {
|
|
10
|
+
return config;
|
|
11
|
+
}
|
|
12
|
+
if (!config) {
|
|
13
|
+
return {
|
|
14
|
+
enabled: false,
|
|
15
|
+
default: "system",
|
|
16
|
+
storageKey: DEFAULT_FARM_THEME_STORAGE_KEY,
|
|
17
|
+
cookiePath: normalizeCookiePath(basePath)
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const storageKey = config.storageKey?.trim() || DEFAULT_FARM_THEME_STORAGE_KEY;
|
|
21
|
+
if (!STORAGE_KEY_PATTERN.test(storageKey)) {
|
|
22
|
+
throw new Error(
|
|
23
|
+
"theme.storageKey may only contain letters, numbers, dots, underscores, and hyphens."
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
const defaultTheme = config.default ?? "system";
|
|
27
|
+
if (defaultTheme !== "light" && defaultTheme !== "dark" && defaultTheme !== "system") {
|
|
28
|
+
throw new Error('theme.default must be "light", "dark", or "system".');
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
enabled: true,
|
|
32
|
+
default: defaultTheme,
|
|
33
|
+
storageKey,
|
|
34
|
+
cookiePath: normalizeCookiePath(basePath)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
__name(resolveFarmThemeConfig, "resolveFarmThemeConfig");
|
|
38
|
+
function normalizeCookiePath(basePath) {
|
|
39
|
+
const normalized = `/${basePath}`.replace(/\/{2,}/g, "/");
|
|
40
|
+
if (normalized === "/") return normalized;
|
|
41
|
+
return normalized.replace(/\/$/, "");
|
|
42
|
+
}
|
|
43
|
+
__name(normalizeCookiePath, "normalizeCookiePath");
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
resolveFarmThemeConfig
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=chunk-H53KVQUU.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme/config.ts"],"sourcesContent":["import type { FarmThemeConfig, ResolvedFarmThemeConfig } from \"./types\";\n\nexport const DEFAULT_FARM_THEME_STORAGE_KEY = \"farm-theme\";\n\nconst STORAGE_KEY_PATTERN = /^[A-Za-z0-9._-]+$/;\n\nexport function resolveFarmThemeConfig(\n config: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n basePath = \"/\",\n): ResolvedFarmThemeConfig {\n if (config && \"enabled\" in config) {\n return config;\n }\n\n if (!config) {\n return {\n enabled: false,\n default: \"system\",\n storageKey: DEFAULT_FARM_THEME_STORAGE_KEY,\n cookiePath: normalizeCookiePath(basePath),\n };\n }\n\n const storageKey = config.storageKey?.trim() || DEFAULT_FARM_THEME_STORAGE_KEY;\n if (!STORAGE_KEY_PATTERN.test(storageKey)) {\n throw new Error(\n \"theme.storageKey may only contain letters, numbers, dots, underscores, and hyphens.\",\n );\n }\n\n const defaultTheme = config.default ?? \"system\";\n if (defaultTheme !== \"light\" && defaultTheme !== \"dark\" && defaultTheme !== \"system\") {\n throw new Error('theme.default must be \"light\", \"dark\", or \"system\".');\n }\n\n return {\n enabled: true,\n default: defaultTheme,\n storageKey,\n cookiePath: normalizeCookiePath(basePath),\n };\n}\n\nfunction normalizeCookiePath(basePath: string): string {\n const normalized = `/${basePath}`.replace(/\\/{2,}/g, \"/\");\n if (normalized === \"/\") return normalized;\n return normalized.replace(/\\/$/, \"\");\n}\n"],"mappings":";;;;;AAEO,IAAM,iCAAiC;AAE9C,IAAM,sBAAsB;AAErB,SAAS,uBACd,QACA,WAAW,KACc;AACzB,MAAI,UAAU,aAAa,QAAQ;AACjC,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,MACL,SAAS;AAAA,MACT,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,YAAY,oBAAoB,QAAQ;AAAA,IAC1C;AAAA,EACF;AAEA,QAAM,aAAa,OAAO,YAAY,KAAK,KAAK;AAChD,MAAI,CAAC,oBAAoB,KAAK,UAAU,GAAG;AACzC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAe,OAAO,WAAW;AACvC,MAAI,iBAAiB,WAAW,iBAAiB,UAAU,iBAAiB,UAAU;AACpF,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,SAAS;AAAA,IACT;AAAA,IACA,YAAY,oBAAoB,QAAQ;AAAA,EAC1C;AACF;AAnCgB;AAqChB,SAAS,oBAAoB,UAA0B;AACrD,QAAM,aAAa,IAAI,QAAQ,GAAG,QAAQ,WAAW,GAAG;AACxD,MAAI,eAAe,IAAK,QAAO;AAC/B,SAAO,WAAW,QAAQ,OAAO,EAAE;AACrC;AAJS;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-HCGQYYHI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveFarmThemeConfig
|
|
3
|
+
} from "./chunk-H53KVQUU.mjs";
|
|
1
4
|
import {
|
|
2
5
|
__name
|
|
3
6
|
} from "./chunk-CGILA3WO.mjs";
|
|
@@ -291,9 +294,67 @@ function escapeAttribute(value) {
|
|
|
291
294
|
}
|
|
292
295
|
__name(escapeAttribute, "escapeAttribute");
|
|
293
296
|
|
|
297
|
+
// src/theme/server-runtime.ts
|
|
298
|
+
var THEME_SCRIPT_ID = "farm-theme-script";
|
|
299
|
+
var THEME_STYLE_ID = "farm-theme-style";
|
|
300
|
+
function createFarmThemeDocumentParts(input, basePath = "/", serverTheme) {
|
|
301
|
+
const config = resolveFarmThemeConfig(input, basePath);
|
|
302
|
+
if (!config.enabled) return { attributes: "", head: "" };
|
|
303
|
+
const hydrationTheme = serverTheme ?? config.default;
|
|
304
|
+
const initialTheme = hydrationTheme === "system" ? "light" : hydrationTheme;
|
|
305
|
+
const script = createFarmThemeBootstrapScript(config, hydrationTheme);
|
|
306
|
+
return {
|
|
307
|
+
attributes: ` data-theme="${initialTheme}"`,
|
|
308
|
+
head: `<style id="${THEME_STYLE_ID}">:root[data-theme="light"]{color-scheme:light}:root[data-theme="dark"]{color-scheme:dark}</style><script id="${THEME_SCRIPT_ID}">${script}</script>`
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
__name(createFarmThemeDocumentParts, "createFarmThemeDocumentParts");
|
|
312
|
+
function createFarmThemeBootstrapScript(config, serverTheme = config.default) {
|
|
313
|
+
return `(function(config,serverTheme){
|
|
314
|
+
var isTheme=function(value){return value==="light"||value==="dark"||value==="system";};
|
|
315
|
+
var decode=function(value){try{return decodeURIComponent(value);}catch(_error){return value;}};
|
|
316
|
+
var readCookie=function(){var entries=document.cookie.split(";");for(var index=0;index<entries.length;index++){var entry=entries[index];var separator=entry.indexOf("=");if(separator<0)continue;if(decode(entry.slice(0,separator).trim())===config.storageKey)return decode(entry.slice(separator+1).trim());}};
|
|
317
|
+
var media=window.matchMedia("(prefers-color-scheme: dark)");
|
|
318
|
+
var resolveTheme=function(theme){return theme==="system"?(media.matches?"dark":"light"):theme;};
|
|
319
|
+
var storedTheme=readCookie();
|
|
320
|
+
var preference=isTheme(storedTheme)?storedTheme:config.default;
|
|
321
|
+
var serverSnapshot={theme:serverTheme,resolvedTheme:serverTheme==="system"?undefined:serverTheme,mounted:false};
|
|
322
|
+
var apply=function(){var resolvedTheme=resolveTheme(preference);document.documentElement.dataset.theme=resolvedTheme;var snapshot={theme:preference,resolvedTheme:resolvedTheme,mounted:true};if(window.__FARM_THEME__)window.__FARM_THEME__.snapshot=snapshot;return snapshot;};
|
|
323
|
+
var emit=function(){var snapshot=apply();window.dispatchEvent(new CustomEvent("farm:themechange",{detail:snapshot}));};
|
|
324
|
+
var persist=function(theme){var secure=window.location.protocol==="https:"?"; Secure":"";document.cookie=encodeURIComponent(config.storageKey)+"="+encodeURIComponent(theme)+"; Path="+config.cookiePath+"; Max-Age=31536000; SameSite=Lax"+secure;try{localStorage.setItem(config.storageKey,theme);}catch(_error){}};
|
|
325
|
+
var setTheme=function(theme){if(!isTheme(theme))throw new TypeError("Unknown FARMJS theme: "+String(theme));preference=theme;persist(theme);emit();};
|
|
326
|
+
var initialSnapshot={theme:preference,resolvedTheme:resolveTheme(preference),mounted:true};
|
|
327
|
+
window.__FARM_THEME__={config:config,serverSnapshot:serverSnapshot,snapshot:initialSnapshot,setTheme:setTheme};
|
|
328
|
+
document.documentElement.dataset.theme=initialSnapshot.resolvedTheme;
|
|
329
|
+
var handleSystemChange=function(){if(preference==="system")emit();};
|
|
330
|
+
if(typeof media.addEventListener==="function")media.addEventListener("change",handleSystemChange);else if(typeof media.addListener==="function")media.addListener(handleSystemChange);
|
|
331
|
+
window.addEventListener("storage",function(event){if(event.key!==config.storageKey||!isTheme(event.newValue))return;preference=event.newValue;persist(preference);emit();});
|
|
332
|
+
})(${serializeInlineValue(config)},${serializeInlineValue(serverTheme)});`;
|
|
333
|
+
}
|
|
334
|
+
__name(createFarmThemeBootstrapScript, "createFarmThemeBootstrapScript");
|
|
335
|
+
function applyFarmThemeDocument(html, input, basePath = "/", serverTheme) {
|
|
336
|
+
const parts = createFarmThemeDocumentParts(input, basePath, serverTheme);
|
|
337
|
+
if (!parts.head) return html;
|
|
338
|
+
let output = html.replace(/<html([^>]*)>/i, (_match, attributes) => {
|
|
339
|
+
const nextAttributes = attributes.replace(/\sdata-theme=(?:"[^"]*"|'[^']*'|[^\s>]+)/i, "");
|
|
340
|
+
return `<html${nextAttributes}${parts.attributes}>`;
|
|
341
|
+
});
|
|
342
|
+
if (!output.includes(`id="${THEME_SCRIPT_ID}"`)) {
|
|
343
|
+
output = output.replace(/<head([^>]*)>/i, `<head$1>${parts.head}`);
|
|
344
|
+
}
|
|
345
|
+
return output;
|
|
346
|
+
}
|
|
347
|
+
__name(applyFarmThemeDocument, "applyFarmThemeDocument");
|
|
348
|
+
function serializeInlineValue(value) {
|
|
349
|
+
return JSON.stringify(value).replace(/</g, "\\u003c").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
|
|
350
|
+
}
|
|
351
|
+
__name(serializeInlineValue, "serializeInlineValue");
|
|
352
|
+
|
|
294
353
|
export {
|
|
295
354
|
mergeMetadata,
|
|
296
355
|
addMetadataImageReference,
|
|
297
|
-
renderMetadataHead
|
|
356
|
+
renderMetadataHead,
|
|
357
|
+
createFarmThemeDocumentParts,
|
|
358
|
+
applyFarmThemeDocument
|
|
298
359
|
};
|
|
299
|
-
//# sourceMappingURL=chunk-
|
|
360
|
+
//# sourceMappingURL=chunk-SBWOTAX4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/metadata.ts","../src/theme/server-runtime.ts"],"sourcesContent":["import type { Metadata } from \"./types\";\n\nexport type MetadataImageKind = \"opengraph\" | \"twitter\";\n\nexport interface FarmMetadataImageReference {\n kind: MetadataImageKind;\n href: string;\n alt?: string;\n width?: number;\n height?: number;\n contentType?: string;\n}\n\nexport interface RenderedMetadataHead {\n title: string;\n tags: string;\n hasFavicon: boolean;\n}\n\ntype MetadataRecord = Metadata & Record<string, any>;\n\nexport function mergeMetadata(\n base: MetadataRecord | undefined,\n next: MetadataRecord | undefined,\n): MetadataRecord {\n if (!base) return next ? { ...next } : {};\n if (!next) return { ...base };\n\n return {\n ...base,\n ...next,\n openGraph: mergeNestedMetadata(base.openGraph, next.openGraph),\n twitter: mergeNestedMetadata(base.twitter, next.twitter),\n alternates: mergeNestedMetadata((base as any).alternates, (next as any).alternates),\n icons: mergeNestedMetadata((base as any).icons, (next as any).icons),\n };\n}\n\nexport function addMetadataImageReference(\n metadata: MetadataRecord,\n reference: FarmMetadataImageReference,\n): MetadataRecord {\n if (reference.kind === \"opengraph\") {\n const openGraph = { ...metadata.openGraph };\n if (!hasMetadataImages(openGraph.images) && !hasMetadataImages((openGraph as any).image)) {\n openGraph.images = [\n {\n url: reference.href,\n width: reference.width,\n height: reference.height,\n alt: reference.alt,\n type: reference.contentType,\n },\n ];\n }\n\n return {\n ...metadata,\n openGraph,\n };\n }\n\n const twitter = { ...metadata.twitter };\n if (!hasMetadataImages(twitter.images)) {\n twitter.images = [reference.href];\n twitter.card = twitter.card || \"summary_large_image\";\n }\n\n return {\n ...metadata,\n twitter,\n };\n}\n\nexport function renderMetadataHead(metadata: MetadataRecord | undefined): RenderedMetadataHead {\n const resolvedMetadata = metadata || {};\n const metadataBase = resolveMetadataBase(resolvedMetadata);\n const title = resolveMetadataTitle(resolvedMetadata.title) || \"Farm.js App\";\n const tags: string[] = [];\n\n appendMetaName(tags, \"description\", resolvedMetadata.description);\n appendMetaName(tags, \"keywords\", normalizeKeywords(resolvedMetadata.keywords));\n appendMetaName(tags, \"author\", (resolvedMetadata as any).author);\n\n if (Array.isArray(resolvedMetadata.authors)) {\n for (const author of resolvedMetadata.authors) {\n appendMetaName(tags, \"author\", author?.name);\n if (author?.url) {\n appendLink(tags, \"author\", resolveMetadataUrl(author.url, metadataBase));\n }\n }\n }\n\n appendMetaName(tags, \"creator\", resolvedMetadata.creator);\n appendMetaName(tags, \"publisher\", resolvedMetadata.publisher);\n appendMetaName(tags, \"robots\", normalizeRobots(resolvedMetadata.robots));\n\n const alternates = (resolvedMetadata as any).alternates;\n if (isRecord(alternates)) {\n appendLink(tags, \"canonical\", resolveMetadataUrl(alternates.canonical, metadataBase));\n\n if (isRecord(alternates.languages)) {\n for (const [language, href] of Object.entries(alternates.languages)) {\n appendLink(tags, \"alternate\", resolveMetadataUrl(href, metadataBase), {\n hreflang: language,\n });\n }\n }\n }\n\n const hasFavicon = appendIcons(tags, (resolvedMetadata as any).icons, metadataBase);\n\n if ((resolvedMetadata as any).manifest) {\n appendLink(\n tags,\n \"manifest\",\n resolveMetadataUrl((resolvedMetadata as any).manifest, metadataBase),\n );\n }\n\n appendOpenGraph(tags, resolvedMetadata.openGraph, metadataBase);\n appendTwitter(tags, resolvedMetadata.twitter, metadataBase);\n\n return {\n title: escapeText(title),\n tags: tags.length > 0 ? `\\n ${tags.join(\"\\n \")}` : \"\",\n hasFavicon,\n };\n}\n\nfunction mergeNestedMetadata(base: unknown, next: unknown): any {\n if (isRecord(base) && isRecord(next)) {\n return {\n ...base,\n ...next,\n };\n }\n\n return next ?? base;\n}\n\nfunction appendOpenGraph(tags: string[], openGraph: Metadata[\"openGraph\"], metadataBase?: string) {\n if (!isRecord(openGraph)) return;\n\n appendMetaProperty(tags, \"og:title\", openGraph.title);\n appendMetaProperty(tags, \"og:description\", openGraph.description);\n appendMetaProperty(tags, \"og:url\", resolveMetadataUrl(openGraph.url, metadataBase));\n appendMetaProperty(tags, \"og:site_name\", openGraph.siteName);\n appendMetaProperty(tags, \"og:type\", openGraph.type);\n appendMetaProperty(tags, \"og:locale\", (openGraph as any).locale);\n\n const images = normalizeMetadataImages(\n openGraph.images ?? (openGraph as any).image,\n metadataBase,\n );\n for (const image of images) {\n appendMetaProperty(tags, \"og:image\", image.url);\n appendMetaProperty(tags, \"og:image:width\", image.width);\n appendMetaProperty(tags, \"og:image:height\", image.height);\n appendMetaProperty(tags, \"og:image:alt\", image.alt);\n appendMetaProperty(tags, \"og:image:type\", image.type);\n }\n}\n\nfunction appendTwitter(tags: string[], twitter: Metadata[\"twitter\"], metadataBase?: string) {\n if (!isRecord(twitter)) return;\n\n appendMetaName(tags, \"twitter:card\", twitter.card);\n appendMetaName(tags, \"twitter:site\", twitter.site);\n appendMetaName(tags, \"twitter:creator\", twitter.creator);\n appendMetaName(tags, \"twitter:title\", twitter.title);\n appendMetaName(tags, \"twitter:description\", twitter.description);\n\n for (const image of normalizeMetadataImages(twitter.images, metadataBase)) {\n appendMetaName(tags, \"twitter:image\", image.url);\n appendMetaName(tags, \"twitter:image:alt\", image.alt);\n }\n}\n\nfunction appendIcons(tags: string[], icons: unknown, metadataBase?: string): boolean {\n if (!icons) return false;\n\n if (typeof icons === \"string\") {\n const initialTagCount = tags.length;\n appendLink(tags, \"icon\", resolveMetadataUrl(icons, metadataBase));\n return tags.length > initialTagCount;\n }\n\n if (!isRecord(icons)) return false;\n\n const initialTagCount = tags.length;\n appendIconList(tags, \"icon\", icons.icon, metadataBase);\n appendIconList(tags, \"shortcut icon\", icons.shortcut, metadataBase);\n const hasFavicon = tags.length > initialTagCount;\n appendIconList(tags, \"apple-touch-icon\", icons.apple, metadataBase);\n return hasFavicon;\n}\n\nfunction appendIconList(tags: string[], rel: string, value: unknown, metadataBase?: string) {\n for (const icon of normalizeArray(value)) {\n if (typeof icon === \"string\") {\n appendLink(tags, rel, resolveMetadataUrl(icon, metadataBase));\n continue;\n }\n\n if (!isRecord(icon)) continue;\n appendLink(tags, rel, resolveMetadataUrl(icon.url, metadataBase), {\n sizes: icon.sizes,\n type: icon.type,\n });\n }\n}\n\nfunction appendMetaName(tags: string[], name: string, content: unknown) {\n const normalized = normalizeContent(content);\n if (!normalized) return;\n tags.push(`<meta name=\"${escapeAttribute(name)}\" content=\"${escapeAttribute(normalized)}\">`);\n}\n\nfunction appendMetaProperty(tags: string[], property: string, content: unknown) {\n const normalized = normalizeContent(content);\n if (!normalized) return;\n tags.push(\n `<meta property=\"${escapeAttribute(property)}\" content=\"${escapeAttribute(normalized)}\">`,\n );\n}\n\nfunction appendLink(\n tags: string[],\n rel: string,\n href: unknown,\n attrs: Record<string, unknown> = {},\n) {\n const normalizedHref = normalizeContent(href);\n if (!normalizedHref) return;\n\n const attrText = Object.entries(attrs)\n .map(([key, value]) => {\n const normalized = normalizeContent(value);\n return normalized ? ` ${key}=\"${escapeAttribute(normalized)}\"` : \"\";\n })\n .join(\"\");\n\n tags.push(\n `<link rel=\"${escapeAttribute(rel)}\" href=\"${escapeAttribute(normalizedHref)}\"${attrText}>`,\n );\n}\n\nfunction normalizeMetadataImages(\n value: unknown,\n metadataBase?: string,\n): Array<{\n url: string;\n width?: number;\n height?: number;\n alt?: string;\n type?: string;\n}> {\n return normalizeArray(value)\n .map((item) => {\n if (typeof item === \"string\") {\n return { url: resolveMetadataUrl(item, metadataBase) || item };\n }\n\n if (!isRecord(item)) return null;\n const rawUrl = item.url || item.src;\n const url = resolveMetadataUrl(rawUrl, metadataBase);\n if (!url) return null;\n\n return {\n url,\n width: normalizeNumber(item.width),\n height: normalizeNumber(item.height),\n alt: typeof item.alt === \"string\" ? item.alt : undefined,\n type: typeof item.type === \"string\" ? item.type : undefined,\n };\n })\n .filter((item): item is NonNullable<typeof item> => item !== null);\n}\n\nfunction normalizeArray(value: unknown): unknown[] {\n if (value == null) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction hasMetadataImages(value: unknown): boolean {\n return normalizeMetadataImages(value).length > 0;\n}\n\nfunction resolveMetadataTitle(title: Metadata[\"title\"]): string | undefined {\n if (typeof title === \"string\") return title;\n if (isRecord(title)) {\n return normalizeContent(title.default);\n }\n return undefined;\n}\n\nfunction normalizeKeywords(keywords: Metadata[\"keywords\"]): string | undefined {\n if (Array.isArray(keywords)) return keywords.filter(Boolean).join(\", \");\n return keywords;\n}\n\nfunction normalizeRobots(robots: Metadata[\"robots\"]): string | undefined {\n if (typeof robots === \"string\") return robots;\n if (!isRecord(robots)) return undefined;\n\n const values: string[] = [];\n if (typeof robots.index === \"boolean\") values.push(robots.index ? \"index\" : \"noindex\");\n if (typeof robots.follow === \"boolean\") values.push(robots.follow ? \"follow\" : \"nofollow\");\n return values.join(\", \") || undefined;\n}\n\nfunction resolveMetadataBase(metadata: MetadataRecord): string | undefined {\n const base = metadata.metadataBase;\n if (!base) return undefined;\n return String(base);\n}\n\nfunction resolveMetadataUrl(value: unknown, metadataBase?: string): string | undefined {\n const normalized = normalizeContent(value);\n if (!normalized) return undefined;\n if (!metadataBase) return normalized;\n\n try {\n return new URL(normalized, metadataBase).toString();\n } catch {\n return normalized;\n }\n}\n\nfunction normalizeNumber(value: unknown): number | undefined {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\") {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n}\n\nfunction normalizeContent(value: unknown): string | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value instanceof URL) return value.toString();\n return undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, any> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction escapeText(value: string): string {\n return value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replace(/\"/g, \""\");\n}\n","import { resolveFarmThemeConfig } from \"./config\";\nimport type {\n FarmThemeConfig,\n FarmThemePreference,\n FarmThemeRuntime,\n ResolvedFarmThemeConfig,\n} from \"./types\";\n\nconst THEME_SCRIPT_ID = \"farm-theme-script\";\nconst THEME_STYLE_ID = \"farm-theme-style\";\n\ndeclare global {\n interface Window {\n __FARM_THEME__?: FarmThemeRuntime;\n }\n}\n\nexport interface FarmThemeDocumentParts {\n attributes: string;\n head: string;\n}\n\nexport function createFarmThemeDocumentParts(\n input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n basePath = \"/\",\n serverTheme?: FarmThemePreference,\n): FarmThemeDocumentParts {\n const config = resolveFarmThemeConfig(input, basePath);\n if (!config.enabled) return { attributes: \"\", head: \"\" };\n\n const hydrationTheme = serverTheme ?? config.default;\n const initialTheme = hydrationTheme === \"system\" ? \"light\" : hydrationTheme;\n const script = createFarmThemeBootstrapScript(config, hydrationTheme);\n\n return {\n attributes: ` data-theme=\"${initialTheme}\"`,\n head: `<style id=\"${THEME_STYLE_ID}\">:root[data-theme=\"light\"]{color-scheme:light}:root[data-theme=\"dark\"]{color-scheme:dark}</style><script id=\"${THEME_SCRIPT_ID}\">${script}</script>`,\n };\n}\n\nexport function createFarmThemeBootstrapScript(\n config: ResolvedFarmThemeConfig,\n serverTheme: FarmThemePreference = config.default,\n): string {\n return `(function(config,serverTheme){\nvar isTheme=function(value){return value===\"light\"||value===\"dark\"||value===\"system\";};\nvar decode=function(value){try{return decodeURIComponent(value);}catch(_error){return value;}};\nvar readCookie=function(){var entries=document.cookie.split(\";\");for(var index=0;index<entries.length;index++){var entry=entries[index];var separator=entry.indexOf(\"=\");if(separator<0)continue;if(decode(entry.slice(0,separator).trim())===config.storageKey)return decode(entry.slice(separator+1).trim());}};\nvar media=window.matchMedia(\"(prefers-color-scheme: dark)\");\nvar resolveTheme=function(theme){return theme===\"system\"?(media.matches?\"dark\":\"light\"):theme;};\nvar storedTheme=readCookie();\nvar preference=isTheme(storedTheme)?storedTheme:config.default;\nvar serverSnapshot={theme:serverTheme,resolvedTheme:serverTheme===\"system\"?undefined:serverTheme,mounted:false};\nvar apply=function(){var resolvedTheme=resolveTheme(preference);document.documentElement.dataset.theme=resolvedTheme;var snapshot={theme:preference,resolvedTheme:resolvedTheme,mounted:true};if(window.__FARM_THEME__)window.__FARM_THEME__.snapshot=snapshot;return snapshot;};\nvar emit=function(){var snapshot=apply();window.dispatchEvent(new CustomEvent(\"farm:themechange\",{detail:snapshot}));};\nvar persist=function(theme){var secure=window.location.protocol===\"https:\"?\"; Secure\":\"\";document.cookie=encodeURIComponent(config.storageKey)+\"=\"+encodeURIComponent(theme)+\"; Path=\"+config.cookiePath+\"; Max-Age=31536000; SameSite=Lax\"+secure;try{localStorage.setItem(config.storageKey,theme);}catch(_error){}};\nvar setTheme=function(theme){if(!isTheme(theme))throw new TypeError(\"Unknown FARMJS theme: \"+String(theme));preference=theme;persist(theme);emit();};\nvar initialSnapshot={theme:preference,resolvedTheme:resolveTheme(preference),mounted:true};\nwindow.__FARM_THEME__={config:config,serverSnapshot:serverSnapshot,snapshot:initialSnapshot,setTheme:setTheme};\ndocument.documentElement.dataset.theme=initialSnapshot.resolvedTheme;\nvar handleSystemChange=function(){if(preference===\"system\")emit();};\nif(typeof media.addEventListener===\"function\")media.addEventListener(\"change\",handleSystemChange);else if(typeof media.addListener===\"function\")media.addListener(handleSystemChange);\nwindow.addEventListener(\"storage\",function(event){if(event.key!==config.storageKey||!isTheme(event.newValue))return;preference=event.newValue;persist(preference);emit();});\n})(${serializeInlineValue(config)},${serializeInlineValue(serverTheme)});`;\n}\n\nexport function applyFarmThemeDocument(\n html: string,\n input: FarmThemeConfig | ResolvedFarmThemeConfig | false | undefined,\n basePath = \"/\",\n serverTheme?: FarmThemePreference,\n): string {\n const parts = createFarmThemeDocumentParts(input, basePath, serverTheme);\n if (!parts.head) return html;\n\n let output = html.replace(/<html([^>]*)>/i, (_match, attributes: string) => {\n const nextAttributes = attributes.replace(/\\sdata-theme=(?:\"[^\"]*\"|'[^']*'|[^\\s>]+)/i, \"\");\n return `<html${nextAttributes}${parts.attributes}>`;\n });\n\n if (!output.includes(`id=\"${THEME_SCRIPT_ID}\"`)) {\n output = output.replace(/<head([^>]*)>/i, `<head$1>${parts.head}`);\n }\n\n return output;\n}\n\nfunction serializeInlineValue(value: unknown): string {\n return JSON.stringify(value)\n .replace(/</g, \"\\\\u003c\")\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n"],"mappings":"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","names":["initialTagCount"]}
|
|
@@ -1,23 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
APITypeGenerator
|
|
3
3
|
} from "./chunk-LGHEOHBU.mjs";
|
|
4
|
-
import {
|
|
5
|
-
addMetadataImageReference,
|
|
6
|
-
mergeMetadata,
|
|
7
|
-
renderMetadataHead
|
|
8
|
-
} from "./chunk-FRPWCMMG.mjs";
|
|
9
4
|
import {
|
|
10
5
|
createFarmMetadataImageResponse
|
|
11
6
|
} from "./chunk-53MVSX3R.mjs";
|
|
12
|
-
import {
|
|
13
|
-
resolveFarmLayoutFonts
|
|
14
|
-
} from "./chunk-6ZXIQSXE.mjs";
|
|
15
|
-
import {
|
|
16
|
-
farmEnvironmentFunctionsPlugin
|
|
17
|
-
} from "./chunk-V6WE6JSZ.mjs";
|
|
18
7
|
import {
|
|
19
8
|
createFarmImageHandler
|
|
20
9
|
} from "./chunk-3XNTL3FQ.mjs";
|
|
10
|
+
import {
|
|
11
|
+
addMetadataImageReference,
|
|
12
|
+
createFarmThemeDocumentParts,
|
|
13
|
+
mergeMetadata,
|
|
14
|
+
renderMetadataHead
|
|
15
|
+
} from "./chunk-SBWOTAX4.mjs";
|
|
21
16
|
import {
|
|
22
17
|
createEnvTypeDeclarations,
|
|
23
18
|
generateEnvTypes
|
|
@@ -25,11 +20,21 @@ import {
|
|
|
25
20
|
import {
|
|
26
21
|
writeFileIfChanged
|
|
27
22
|
} from "./chunk-USWZZUEH.mjs";
|
|
23
|
+
import {
|
|
24
|
+
resolveFarmLayoutFonts
|
|
25
|
+
} from "./chunk-6ZXIQSXE.mjs";
|
|
26
|
+
import {
|
|
27
|
+
farmEnvironmentFunctionsPlugin
|
|
28
|
+
} from "./chunk-V6WE6JSZ.mjs";
|
|
28
29
|
import {
|
|
29
30
|
getFarmRedirectError,
|
|
30
31
|
isFarmNotFoundError,
|
|
31
32
|
isFarmRedirectError
|
|
32
33
|
} from "./chunk-7HO6AEOP.mjs";
|
|
34
|
+
import {
|
|
35
|
+
_setDefaultFarmThemeConfig,
|
|
36
|
+
getTheme
|
|
37
|
+
} from "./chunk-4IVNW5QD.mjs";
|
|
33
38
|
import {
|
|
34
39
|
resolveFarmDocsFontAssets,
|
|
35
40
|
toFarmDocsPublicFontAssets
|
|
@@ -51,16 +56,25 @@ import {
|
|
|
51
56
|
getFarmLayerAliases,
|
|
52
57
|
getFarmSourceRoots
|
|
53
58
|
} from "./chunk-74YTBPTY.mjs";
|
|
54
|
-
import {
|
|
55
|
-
resolveFarmPerformanceConfig
|
|
56
|
-
} from "./chunk-7ZVN3YZI.mjs";
|
|
57
59
|
import {
|
|
58
60
|
getPublicFarmImageConfig,
|
|
59
61
|
resolveFarmImageConfig
|
|
60
62
|
} from "./chunk-GY2STC2S.mjs";
|
|
63
|
+
import {
|
|
64
|
+
resolveFarmPerformanceConfig
|
|
65
|
+
} from "./chunk-7ZVN3YZI.mjs";
|
|
66
|
+
import {
|
|
67
|
+
resolveWorkflowsConfig
|
|
68
|
+
} from "./chunk-4E6VRJ6P.mjs";
|
|
69
|
+
import {
|
|
70
|
+
resolveCronConfig
|
|
71
|
+
} from "./chunk-GXASWWJU.mjs";
|
|
61
72
|
import {
|
|
62
73
|
resolveServerActionsConfig
|
|
63
74
|
} from "./chunk-WORFTBLU.mjs";
|
|
75
|
+
import {
|
|
76
|
+
resolveFarmThemeConfig
|
|
77
|
+
} from "./chunk-H53KVQUU.mjs";
|
|
64
78
|
import {
|
|
65
79
|
createFarmMarkdownRouteModuleFromFile,
|
|
66
80
|
createFarmMarkdownSourceResponse,
|
|
@@ -73,12 +87,6 @@ import {
|
|
|
73
87
|
resolveMarkdownConfig,
|
|
74
88
|
resolveMarkdownMirrorTarget
|
|
75
89
|
} from "./chunk-7FBJLMQH.mjs";
|
|
76
|
-
import {
|
|
77
|
-
resolveWorkflowsConfig
|
|
78
|
-
} from "./chunk-4E6VRJ6P.mjs";
|
|
79
|
-
import {
|
|
80
|
-
resolveCronConfig
|
|
81
|
-
} from "./chunk-GXASWWJU.mjs";
|
|
82
90
|
import {
|
|
83
91
|
dispatchIntegrationRequest,
|
|
84
92
|
getFarmIntegrationPluginOwner,
|
|
@@ -170,7 +178,7 @@ import {
|
|
|
170
178
|
} from "./chunk-RHIFZZUI.mjs";
|
|
171
179
|
import {
|
|
172
180
|
FARM_VERSION
|
|
173
|
-
} from "./chunk-
|
|
181
|
+
} from "./chunk-5NOVWCFL.mjs";
|
|
174
182
|
import {
|
|
175
183
|
FARM_DEPLOYMENT_ID_HEADER,
|
|
176
184
|
createFarmDeploymentCookie,
|
|
@@ -4905,6 +4913,11 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(g
|
|
|
4905
4913
|
const i18nSnapshot = getFarmI18nClientSnapshot();
|
|
4906
4914
|
const i18nAlternateTags = i18nSnapshot ? renderI18nAlternateLinks(req.__FARM_ROUTE__ || req.url || "/", i18nSnapshot) : "";
|
|
4907
4915
|
const fontHead = renderFarmFontDevHead(this.config.root || process.cwd());
|
|
4916
|
+
const themeDocument = createFarmThemeDocumentParts(
|
|
4917
|
+
this.config.theme,
|
|
4918
|
+
this.config.basePath,
|
|
4919
|
+
getTheme()
|
|
4920
|
+
);
|
|
4908
4921
|
const streamRoot = React.createElement("div", { style: { display: "contents" } }, element);
|
|
4909
4922
|
const { pipe } = renderToPipeableStream(streamRoot, {
|
|
4910
4923
|
onShellReady() {
|
|
@@ -4918,8 +4931,9 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(g
|
|
|
4918
4931
|
console.log(`[FARM STREAM] onShellReady at ${shellReadyMs}ms`);
|
|
4919
4932
|
}
|
|
4920
4933
|
const shell = `<!DOCTYPE html>
|
|
4921
|
-
<html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}>
|
|
4934
|
+
<html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}${themeDocument.attributes}>
|
|
4922
4935
|
<head>
|
|
4936
|
+
${themeDocument.head}
|
|
4923
4937
|
<meta charset="utf-8">
|
|
4924
4938
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
4925
4939
|
<meta name="farm-deployment-id" content="${escapeHtmlAttribute2(deploymentId)}">
|
|
@@ -5127,9 +5141,15 @@ ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue(i18nSnapshot)};`
|
|
|
5127
5141
|
</script>`;
|
|
5128
5142
|
const alternateLinks = i18nSnapshot ? renderI18nAlternateLinks(requestPath, i18nSnapshot) : "";
|
|
5129
5143
|
const fontHead = renderFarmFontDevHead(this.config.root || process.cwd());
|
|
5144
|
+
const themeDocument = createFarmThemeDocumentParts(
|
|
5145
|
+
this.config.theme,
|
|
5146
|
+
this.config.basePath,
|
|
5147
|
+
getTheme()
|
|
5148
|
+
);
|
|
5130
5149
|
return `<!DOCTYPE html>
|
|
5131
|
-
<html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}>
|
|
5150
|
+
<html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}${themeDocument.attributes}>
|
|
5132
5151
|
<head>
|
|
5152
|
+
${themeDocument.head}
|
|
5133
5153
|
<meta charset="utf-8">
|
|
5134
5154
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
5135
5155
|
<meta name="farm-deployment-id" content="${escapeHtmlAttribute2(this.getDeploymentId())}">
|
|
@@ -5184,6 +5204,7 @@ var _FarmApp = class _FarmApp {
|
|
|
5184
5204
|
constructor(config = {}, viteServer) {
|
|
5185
5205
|
this.config = this.normalizeConfig(config);
|
|
5186
5206
|
configureFarmObservability(this.config.observability);
|
|
5207
|
+
_setDefaultFarmThemeConfig(this.config.theme);
|
|
5187
5208
|
this.i18nRuntime = createFarmI18nRuntime(this.config.i18n);
|
|
5188
5209
|
_setDefaultFarmI18nRuntime(this.i18nRuntime);
|
|
5189
5210
|
this.viteServer = viteServer;
|
|
@@ -5242,6 +5263,7 @@ var _FarmApp = class _FarmApp {
|
|
|
5242
5263
|
security: resolveFarmSecurityConfig(config.security),
|
|
5243
5264
|
images: resolveFarmImageConfig(config.images),
|
|
5244
5265
|
performance: resolveFarmPerformanceConfig(config.performance),
|
|
5266
|
+
theme: resolveFarmThemeConfig(config.theme, config.basePath || "/"),
|
|
5245
5267
|
i18n: isResolvedI18nConfig(config.i18n) ? config.i18n : resolveFarmI18nConfig(config.i18n, {
|
|
5246
5268
|
root,
|
|
5247
5269
|
mode: process.env.NODE_ENV === "production" ? "production" : "development"
|
|
@@ -6193,6 +6215,29 @@ function mergeFarmViteConfig(farmConfig, userConfig = {}) {
|
|
|
6193
6215
|
}
|
|
6194
6216
|
__name(mergeFarmViteConfig, "mergeFarmViteConfig");
|
|
6195
6217
|
|
|
6218
|
+
// src/theme/vite.ts
|
|
6219
|
+
var FARM_DARK_VARIANT = '@custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));';
|
|
6220
|
+
function createFarmThemeCssPlugin(input, basePath = "/") {
|
|
6221
|
+
const config = resolveFarmThemeConfig(input, basePath);
|
|
6222
|
+
return {
|
|
6223
|
+
name: "farm:theme-css",
|
|
6224
|
+
enforce: "pre",
|
|
6225
|
+
transform(code, id) {
|
|
6226
|
+
if (!config.enabled || !/\.css(?:\?.*)?$/.test(id) || !/@import\s+["']tailwindcss["']/.test(code) || /@custom-variant\s+dark\b/.test(code)) {
|
|
6227
|
+
return null;
|
|
6228
|
+
}
|
|
6229
|
+
return {
|
|
6230
|
+
code: `${code.trimEnd()}
|
|
6231
|
+
|
|
6232
|
+
${FARM_DARK_VARIANT}
|
|
6233
|
+
`,
|
|
6234
|
+
map: null
|
|
6235
|
+
};
|
|
6236
|
+
}
|
|
6237
|
+
};
|
|
6238
|
+
}
|
|
6239
|
+
__name(createFarmThemeCssPlugin, "createFarmThemeCssPlugin");
|
|
6240
|
+
|
|
6196
6241
|
// src/vite.ts
|
|
6197
6242
|
var ALL_TYPE_ARTIFACTS = {
|
|
6198
6243
|
routes: true,
|
|
@@ -6235,7 +6280,7 @@ function loadFarmWorkflowsDevRuntime() {
|
|
|
6235
6280
|
}
|
|
6236
6281
|
__name(loadFarmWorkflowsDevRuntime, "loadFarmWorkflowsDevRuntime");
|
|
6237
6282
|
function loadFarmDevtoolsSnapshotRuntime() {
|
|
6238
|
-
return import("./devtools-
|
|
6283
|
+
return import("./devtools-326RBQCN.mjs");
|
|
6239
6284
|
}
|
|
6240
6285
|
__name(loadFarmDevtoolsSnapshotRuntime, "loadFarmDevtoolsSnapshotRuntime");
|
|
6241
6286
|
function loadFarmDevtoolsUIRuntime() {
|
|
@@ -9580,14 +9625,22 @@ async function renderPage(pageData) {
|
|
|
9580
9625
|
if (!doc.documentElement || !doc.body) return false;
|
|
9581
9626
|
|
|
9582
9627
|
resetReactRoots();
|
|
9628
|
+
const activeFarmTheme =
|
|
9629
|
+
window.__FARM_THEME__?.snapshot?.resolvedTheme ||
|
|
9630
|
+
document.documentElement.getAttribute('data-theme');
|
|
9583
9631
|
Array.from(document.documentElement.attributes).forEach(function(attr) {
|
|
9632
|
+
if (attr.name === 'data-theme') return;
|
|
9584
9633
|
if (!doc.documentElement.hasAttribute(attr.name)) {
|
|
9585
9634
|
document.documentElement.removeAttribute(attr.name);
|
|
9586
9635
|
}
|
|
9587
9636
|
});
|
|
9588
9637
|
Array.from(doc.documentElement.attributes).forEach(function(attr) {
|
|
9638
|
+
if (attr.name === 'data-theme') return;
|
|
9589
9639
|
document.documentElement.setAttribute(attr.name, attr.value);
|
|
9590
9640
|
});
|
|
9641
|
+
if (activeFarmTheme) {
|
|
9642
|
+
document.documentElement.setAttribute('data-theme', activeFarmTheme);
|
|
9643
|
+
}
|
|
9591
9644
|
|
|
9592
9645
|
document.head.innerHTML = doc.head ? doc.head.innerHTML : '';
|
|
9593
9646
|
document.body.innerHTML = doc.body.innerHTML;
|
|
@@ -9596,6 +9649,7 @@ async function renderPage(pageData) {
|
|
|
9596
9649
|
|
|
9597
9650
|
setTimeout(function() {
|
|
9598
9651
|
Array.from(document.querySelectorAll('script')).forEach(function(script) {
|
|
9652
|
+
if (script.id === 'farm-theme-script') return;
|
|
9599
9653
|
const freshScript = document.createElement('script');
|
|
9600
9654
|
Array.from(script.attributes).forEach(function(attr) {
|
|
9601
9655
|
freshScript.setAttribute(attr.name, attr.value);
|
|
@@ -10093,6 +10147,7 @@ async function defineConfig(config = {}) {
|
|
|
10093
10147
|
};
|
|
10094
10148
|
return {
|
|
10095
10149
|
plugins: [
|
|
10150
|
+
createFarmThemeCssPlugin(config.theme, config.basePath),
|
|
10096
10151
|
tailwindcss(),
|
|
10097
10152
|
viteBrowserExternalPlugin,
|
|
10098
10153
|
farmI18nClientBridgePlugin(),
|
|
@@ -10196,9 +10251,10 @@ export {
|
|
|
10196
10251
|
createFarmClientOptimizeDepsConfig,
|
|
10197
10252
|
createFarmSourceAlias,
|
|
10198
10253
|
mergeFarmViteConfig,
|
|
10254
|
+
createFarmThemeCssPlugin,
|
|
10199
10255
|
farmI18nClientBridgePlugin,
|
|
10200
10256
|
rewriteEarlySsrRelativeImports,
|
|
10201
10257
|
farmPlugin,
|
|
10202
10258
|
defineConfig
|
|
10203
10259
|
};
|
|
10204
|
-
//# sourceMappingURL=chunk-
|
|
10260
|
+
//# sourceMappingURL=chunk-TX54PXAJ.mjs.map
|