@farm.js/core 0.1.0-beta.21 → 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.
Files changed (266) hide show
  1. package/dist/after.d.mts +25 -0
  2. package/dist/after.d.ts +25 -0
  3. package/dist/agent-runtime.d.mts +97 -0
  4. package/dist/agent-runtime.d.ts +97 -0
  5. package/dist/api/route-manager.d.mts +68 -0
  6. package/dist/api/route-manager.d.ts +68 -0
  7. package/dist/api/runtime.d.mts +3 -0
  8. package/dist/api/runtime.d.ts +3 -0
  9. package/dist/api.cjs +22 -19
  10. package/dist/api.cjs.map +1 -1
  11. package/dist/api.d.mts +50 -0
  12. package/dist/api.d.ts +50 -0
  13. package/dist/api.mjs +2 -1
  14. package/dist/app-CTFnOJaI.d.ts +308 -0
  15. package/dist/app-DA6ospIq.d.mts +308 -0
  16. package/dist/app-markdown.d.mts +25 -0
  17. package/dist/app-markdown.d.ts +25 -0
  18. package/dist/cache.d.mts +192 -0
  19. package/dist/cache.d.ts +192 -0
  20. package/dist/{chunk-MIUW47JX.mjs → chunk-2PEJGY5V.mjs} +15 -20
  21. package/dist/chunk-2PEJGY5V.mjs.map +1 -0
  22. package/dist/{chunk-RIXKJPGI.mjs → chunk-42325TLU.mjs} +2 -2
  23. package/dist/chunk-4IVNW5QD.mjs +82 -0
  24. package/dist/chunk-4IVNW5QD.mjs.map +1 -0
  25. package/dist/{chunk-I3UWA2P2.mjs → chunk-5NOVWCFL.mjs} +2 -2
  26. package/dist/chunk-5NOVWCFL.mjs.map +1 -0
  27. package/dist/chunk-D42BNPZH.mjs +79 -0
  28. package/dist/chunk-D42BNPZH.mjs.map +1 -0
  29. package/dist/{chunk-LLPN5SEZ.mjs → chunk-DVPRBMU2.mjs} +2 -2
  30. package/dist/{chunk-VIC7NJ77.mjs → chunk-FJGTYLCO.mjs} +67 -20
  31. package/dist/chunk-FJGTYLCO.mjs.map +1 -0
  32. package/dist/chunk-GIELMNBG.mjs +15 -0
  33. package/dist/chunk-GIELMNBG.mjs.map +1 -0
  34. package/dist/chunk-GQVQESLY.mjs +25 -0
  35. package/dist/chunk-GQVQESLY.mjs.map +1 -0
  36. package/dist/chunk-H53KVQUU.mjs +48 -0
  37. package/dist/chunk-H53KVQUU.mjs.map +1 -0
  38. package/dist/chunk-HCGQYYHI.mjs +1 -0
  39. package/dist/chunk-HCGQYYHI.mjs.map +1 -0
  40. package/dist/{chunk-4EATUJFO.mjs → chunk-ICTGDDV4.mjs} +20 -22
  41. package/dist/chunk-ICTGDDV4.mjs.map +1 -0
  42. package/dist/{chunk-UCYWGN2P.mjs → chunk-OHNSROHS.mjs} +1 -1
  43. package/dist/{chunk-FRPWCMMG.mjs → chunk-SBWOTAX4.mjs} +63 -2
  44. package/dist/chunk-SBWOTAX4.mjs.map +1 -0
  45. package/dist/{chunk-FKKM7HVF.mjs → chunk-TX54PXAJ.mjs} +109 -58
  46. package/dist/chunk-TX54PXAJ.mjs.map +1 -0
  47. package/dist/{chunk-CEVMYGDL.mjs → chunk-YD5IRKVS.mjs} +13 -9
  48. package/dist/chunk-YD5IRKVS.mjs.map +1 -0
  49. package/dist/chunk-recovery-lnQFzcQP.d.mts +26 -0
  50. package/dist/chunk-recovery-lnQFzcQP.d.ts +26 -0
  51. package/dist/client-BT1mFQas.d.mts +447 -0
  52. package/dist/client-Nn0q4eO4.d.ts +447 -0
  53. package/dist/client-cache-CIlyBlmx.d.ts +6 -0
  54. package/dist/client-cache-D-EZ7XVW.d.mts +6 -0
  55. package/dist/client-plugins-CCilIb_G.d.mts +2092 -0
  56. package/dist/client-plugins-DuuleQKk.d.ts +2092 -0
  57. package/dist/client-plugins.d.mts +25 -0
  58. package/dist/client-plugins.d.ts +25 -0
  59. package/dist/client.cjs +122 -35
  60. package/dist/client.cjs.map +1 -1
  61. package/dist/client.d.mts +454 -0
  62. package/dist/client.d.ts +454 -0
  63. package/dist/client.mjs +13 -2
  64. package/dist/config.d.mts +32 -0
  65. package/dist/config.d.ts +32 -0
  66. package/dist/cron.d.mts +78 -0
  67. package/dist/cron.d.ts +78 -0
  68. package/dist/deferred.d.mts +42 -0
  69. package/dist/deferred.d.ts +42 -0
  70. package/dist/deployment.d.mts +36 -0
  71. package/dist/deployment.d.ts +36 -0
  72. package/dist/{devtools-52FYXIEK.mjs → devtools-326RBQCN.mjs} +7 -6
  73. package/dist/{devtools-52FYXIEK.mjs.map → devtools-326RBQCN.mjs.map} +1 -1
  74. package/dist/docs.cjs.map +1 -1
  75. package/dist/docs.d.mts +80 -0
  76. package/dist/docs.d.ts +80 -0
  77. package/dist/docs.mjs +6 -5
  78. package/dist/env-types.d.mts +12 -0
  79. package/dist/env-types.d.ts +12 -0
  80. package/dist/env.d.mts +45 -0
  81. package/dist/env.d.ts +45 -0
  82. package/dist/environment/vite.d.mts +22 -0
  83. package/dist/environment/vite.d.ts +22 -0
  84. package/dist/environment.d.mts +18 -0
  85. package/dist/environment.d.ts +18 -0
  86. package/dist/font.d.mts +95 -0
  87. package/dist/font.d.ts +95 -0
  88. package/dist/headers.d.mts +22 -0
  89. package/dist/headers.d.ts +22 -0
  90. package/dist/i18n/client.d.mts +32 -0
  91. package/dist/i18n/client.d.ts +32 -0
  92. package/dist/i18n/index.d.mts +20 -0
  93. package/dist/i18n/index.d.ts +20 -0
  94. package/dist/i18n/server.d.mts +30 -0
  95. package/dist/i18n/server.d.ts +30 -0
  96. package/dist/image/server.d.mts +37 -0
  97. package/dist/image/server.d.ts +37 -0
  98. package/dist/image/sharp.d.mts +7 -0
  99. package/dist/image/sharp.d.ts +7 -0
  100. package/dist/image-config-Duob7wER.d.mts +50 -0
  101. package/dist/image-config-Duob7wER.d.ts +50 -0
  102. package/dist/image.d.mts +39 -0
  103. package/dist/image.d.ts +39 -0
  104. package/dist/index.cjs +496 -123
  105. package/dist/index.cjs.map +1 -1
  106. package/dist/index.d.mts +480 -0
  107. package/dist/index.d.ts +480 -0
  108. package/dist/index.mjs +70 -52
  109. package/dist/index.mjs.map +1 -1
  110. package/dist/integration-api-CHT2OKAf.d.mts +93 -0
  111. package/dist/integration-api-CHT2OKAf.d.ts +93 -0
  112. package/dist/integrations.d.mts +25 -0
  113. package/dist/integrations.d.ts +25 -0
  114. package/dist/internal/build-runtime.cjs +386 -83
  115. package/dist/internal/build-runtime.cjs.map +1 -1
  116. package/dist/internal/build-runtime.d.mts +42 -0
  117. package/dist/internal/build-runtime.d.ts +42 -0
  118. package/dist/internal/build-runtime.mjs +17 -13
  119. package/dist/internal/client-runtime.d.mts +17 -0
  120. package/dist/internal/client-runtime.d.ts +17 -0
  121. package/dist/internal/config-runtime.cjs +41 -0
  122. package/dist/internal/config-runtime.cjs.map +1 -1
  123. package/dist/internal/config-runtime.d.mts +42 -0
  124. package/dist/internal/config-runtime.d.ts +42 -0
  125. package/dist/internal/config-runtime.mjs +5 -4
  126. package/dist/internal/metadata-image-runtime.d.mts +25 -0
  127. package/dist/internal/metadata-image-runtime.d.ts +25 -0
  128. package/dist/internal/production-node-env.d.mts +12 -0
  129. package/dist/internal/production-node-env.d.ts +12 -0
  130. package/dist/internal/production-runtime.cjs +178 -0
  131. package/dist/internal/production-runtime.cjs.map +1 -1
  132. package/dist/internal/production-runtime.d.mts +80 -0
  133. package/dist/internal/production-runtime.d.ts +80 -0
  134. package/dist/internal/production-runtime.mjs +13 -1
  135. package/dist/internal/production-runtime.mjs.map +1 -1
  136. package/dist/island-CfGru1MO.d.mts +9 -0
  137. package/dist/island-CfGru1MO.d.ts +9 -0
  138. package/dist/markdown.d.mts +60 -0
  139. package/dist/markdown.d.ts +60 -0
  140. package/dist/metadata-DyPRG0wX.d.ts +22 -0
  141. package/dist/metadata-_GHcAySx.d.mts +22 -0
  142. package/dist/middleware.cjs +17 -17
  143. package/dist/middleware.cjs.map +1 -1
  144. package/dist/middleware.d.mts +172 -0
  145. package/dist/middleware.d.ts +172 -0
  146. package/dist/middleware.mjs +3 -2
  147. package/dist/navigation-errors-Dvwpzaer.d.mts +13 -0
  148. package/dist/navigation-errors-Dvwpzaer.d.ts +13 -0
  149. package/dist/navigation.d.mts +14 -0
  150. package/dist/navigation.d.ts +14 -0
  151. package/dist/observability.d.mts +335 -0
  152. package/dist/observability.d.ts +335 -0
  153. package/dist/params-BALtrRim.d.ts +15 -0
  154. package/dist/params-ry-lxqmy.d.mts +15 -0
  155. package/dist/plugin-BJDf43dc.d.mts +165 -0
  156. package/dist/plugin-BJDf43dc.d.ts +165 -0
  157. package/dist/plugin.cjs +261 -62
  158. package/dist/plugin.cjs.map +1 -1
  159. package/dist/plugin.d.mts +25 -0
  160. package/dist/plugin.d.ts +25 -0
  161. package/dist/plugin.mjs +13 -9
  162. package/dist/production-runtime-C4cO3esK.d.mts +81 -0
  163. package/dist/production-runtime-DrEy8kBO.d.ts +81 -0
  164. package/dist/query/client.d.mts +61 -0
  165. package/dist/query/client.d.ts +61 -0
  166. package/dist/query/index.d.mts +90 -0
  167. package/dist/query/index.d.ts +90 -0
  168. package/dist/query/parsers.d.mts +25 -0
  169. package/dist/query/parsers.d.ts +25 -0
  170. package/dist/query/server.d.mts +55 -0
  171. package/dist/query/server.d.ts +55 -0
  172. package/dist/request-B2PpOxYK.d.mts +6 -0
  173. package/dist/request-D40lt6aN.d.ts +6 -0
  174. package/dist/request.d.mts +26 -0
  175. package/dist/request.d.ts +26 -0
  176. package/dist/resolver-DJqjLMg_.d.mts +14 -0
  177. package/dist/resolver-IH4RmPEl.d.ts +14 -0
  178. package/dist/route-runtime-DoOHzCAD.d.mts +38 -0
  179. package/dist/route-runtime-DoOHzCAD.d.ts +38 -0
  180. package/dist/router.d.mts +36 -0
  181. package/dist/router.d.ts +36 -0
  182. package/dist/routes.d.mts +227 -0
  183. package/dist/routes.d.ts +227 -0
  184. package/dist/runtime-Bpp-c28k.d.ts +231 -0
  185. package/dist/runtime-Cxpq6xZN.d.mts +27 -0
  186. package/dist/runtime-Q3u74Nbq.d.mts +231 -0
  187. package/dist/runtime-bv63eUiO.d.ts +27 -0
  188. package/dist/server-action-security.d.mts +45 -0
  189. package/dist/server-action-security.d.ts +45 -0
  190. package/dist/server-fn-client.d.mts +33 -0
  191. package/dist/server-fn-client.d.ts +33 -0
  192. package/dist/server-fn-error-DDh14a0V.d.mts +26 -0
  193. package/dist/server-fn-error-DDh14a0V.d.ts +26 -0
  194. package/dist/server-fn.d.mts +121 -0
  195. package/dist/server-fn.d.ts +121 -0
  196. package/dist/server-plugins.d.mts +58 -0
  197. package/dist/server-plugins.d.ts +58 -0
  198. package/dist/server-query-client.d.mts +51 -0
  199. package/dist/server-query-client.d.ts +51 -0
  200. package/dist/server-query.d.mts +37 -0
  201. package/dist/server-query.d.ts +37 -0
  202. package/dist/server.cjs +285 -85
  203. package/dist/server.cjs.map +1 -1
  204. package/dist/server.d.mts +53 -0
  205. package/dist/server.d.ts +53 -0
  206. package/dist/server.mjs +26 -31
  207. package/dist/server.mjs.map +1 -1
  208. package/dist/storage.d.mts +52 -0
  209. package/dist/storage.d.ts +52 -0
  210. package/dist/testing.d.mts +104 -0
  211. package/dist/testing.d.ts +104 -0
  212. package/dist/theme/client.cjs +115 -0
  213. package/dist/theme/client.cjs.map +1 -0
  214. package/dist/theme/client.d.mts +17 -0
  215. package/dist/theme/client.d.ts +17 -0
  216. package/dist/theme/client.mjs +16 -0
  217. package/dist/theme/client.mjs.map +1 -0
  218. package/dist/theme/index.cjs +71 -0
  219. package/dist/theme/index.cjs.map +1 -0
  220. package/dist/theme/index.d.mts +6 -0
  221. package/dist/theme/index.d.ts +6 -0
  222. package/dist/theme/index.mjs +9 -0
  223. package/dist/theme/index.mjs.map +1 -0
  224. package/dist/theme/server.cjs +191 -0
  225. package/dist/theme/server.cjs.map +1 -0
  226. package/dist/theme/server.d.mts +8 -0
  227. package/dist/theme/server.d.ts +8 -0
  228. package/dist/theme/server.mjs +18 -0
  229. package/dist/theme/server.mjs.map +1 -0
  230. package/dist/transport-BmbGTXA5.d.mts +49 -0
  231. package/dist/transport-BmbGTXA5.d.ts +49 -0
  232. package/dist/types-BMxWr97v.d.mts +81 -0
  233. package/dist/types-BMxWr97v.d.ts +81 -0
  234. package/dist/types-CsR8fpgF.d.mts +30 -0
  235. package/dist/types-CsR8fpgF.d.ts +30 -0
  236. package/dist/types-D1A6-XvH.d.mts +73 -0
  237. package/dist/types-D1A6-XvH.d.ts +73 -0
  238. package/dist/types-DTzm4TCl.d.mts +78 -0
  239. package/dist/types-DTzm4TCl.d.ts +78 -0
  240. package/dist/utils-3sQgfkya.d.ts +23 -0
  241. package/dist/utils-Bop7bly-.d.mts +23 -0
  242. package/dist/version.cjs +1 -1
  243. package/dist/version.cjs.map +1 -1
  244. package/dist/version.d.mts +3 -0
  245. package/dist/version.d.ts +3 -0
  246. package/dist/version.mjs +1 -1
  247. package/dist/vite.cjs +285 -64
  248. package/dist/vite.cjs.map +1 -1
  249. package/dist/vite.d.mts +25 -0
  250. package/dist/vite.d.ts +25 -0
  251. package/dist/vite.mjs +13 -9
  252. package/dist/workflows-CusFV6mn.d.mts +153 -0
  253. package/dist/workflows-CusFV6mn.d.ts +153 -0
  254. package/dist/workflows.d.mts +1 -0
  255. package/dist/workflows.d.ts +1 -0
  256. package/package.json +25 -1
  257. package/dist/chunk-4EATUJFO.mjs.map +0 -1
  258. package/dist/chunk-CEVMYGDL.mjs.map +0 -1
  259. package/dist/chunk-FKKM7HVF.mjs.map +0 -1
  260. package/dist/chunk-FRPWCMMG.mjs.map +0 -1
  261. package/dist/chunk-I3UWA2P2.mjs.map +0 -1
  262. package/dist/chunk-MIUW47JX.mjs.map +0 -1
  263. package/dist/chunk-VIC7NJ77.mjs.map +0 -1
  264. /package/dist/{chunk-RIXKJPGI.mjs.map → chunk-42325TLU.mjs.map} +0 -0
  265. /package/dist/{chunk-LLPN5SEZ.mjs.map → chunk-DVPRBMU2.mjs.map} +0 -0
  266. /package/dist/{chunk-UCYWGN2P.mjs.map → chunk-OHNSROHS.mjs.map} +0 -0
package/dist/vite.cjs CHANGED
@@ -4444,6 +4444,52 @@ var init_config = __esm({
4444
4444
  }
4445
4445
  });
4446
4446
 
4447
+ // src/theme/config.ts
4448
+ function resolveFarmThemeConfig(config, basePath = "/") {
4449
+ if (config && "enabled" in config) {
4450
+ return config;
4451
+ }
4452
+ if (!config) {
4453
+ return {
4454
+ enabled: false,
4455
+ default: "system",
4456
+ storageKey: DEFAULT_FARM_THEME_STORAGE_KEY,
4457
+ cookiePath: normalizeCookiePath(basePath)
4458
+ };
4459
+ }
4460
+ const storageKey = config.storageKey?.trim() || DEFAULT_FARM_THEME_STORAGE_KEY;
4461
+ if (!STORAGE_KEY_PATTERN.test(storageKey)) {
4462
+ throw new Error(
4463
+ "theme.storageKey may only contain letters, numbers, dots, underscores, and hyphens."
4464
+ );
4465
+ }
4466
+ const defaultTheme = config.default ?? "system";
4467
+ if (defaultTheme !== "light" && defaultTheme !== "dark" && defaultTheme !== "system") {
4468
+ throw new Error('theme.default must be "light", "dark", or "system".');
4469
+ }
4470
+ return {
4471
+ enabled: true,
4472
+ default: defaultTheme,
4473
+ storageKey,
4474
+ cookiePath: normalizeCookiePath(basePath)
4475
+ };
4476
+ }
4477
+ function normalizeCookiePath(basePath) {
4478
+ const normalized = `/${basePath}`.replace(/\/{2,}/g, "/");
4479
+ if (normalized === "/") return normalized;
4480
+ return normalized.replace(/\/$/, "");
4481
+ }
4482
+ var DEFAULT_FARM_THEME_STORAGE_KEY, STORAGE_KEY_PATTERN;
4483
+ var init_config2 = __esm({
4484
+ "src/theme/config.ts"() {
4485
+ "use strict";
4486
+ DEFAULT_FARM_THEME_STORAGE_KEY = "farm-theme";
4487
+ STORAGE_KEY_PATTERN = /^[A-Za-z0-9._-]+$/;
4488
+ __name(resolveFarmThemeConfig, "resolveFarmThemeConfig");
4489
+ __name(normalizeCookiePath, "normalizeCookiePath");
4490
+ }
4491
+ });
4492
+
4447
4493
  // src/devtools-config.ts
4448
4494
  function resolveFarmDevtoolsConfig(config, mode = "development") {
4449
4495
  if (mode !== "development" || config === false) {
@@ -9336,7 +9382,7 @@ async function resolveDocsConfig(userDocs, options = {}) {
9336
9382
  };
9337
9383
  }
9338
9384
  var import_path9, DOCS_CONFIG_FILENAMES;
9339
- var init_config2 = __esm({
9385
+ var init_config3 = __esm({
9340
9386
  "src/config.ts"() {
9341
9387
  "use strict";
9342
9388
  init_integrations();
@@ -9357,6 +9403,7 @@ var init_config2 = __esm({
9357
9403
  init_auth_config();
9358
9404
  init_preload();
9359
9405
  init_security();
9406
+ init_config2();
9360
9407
  init_config_entry();
9361
9408
  __name(getDeployTargetForPreset, "getDeployTargetForPreset");
9362
9409
  DOCS_CONFIG_FILENAMES = [
@@ -9851,7 +9898,7 @@ var init_api = __esm({
9851
9898
  "src/docs/api.ts"() {
9852
9899
  "use strict";
9853
9900
  import_docs2 = require("@farming-labs/docs");
9854
- init_config2();
9901
+ init_config3();
9855
9902
  init_handler();
9856
9903
  __name(isRecord4, "isRecord");
9857
9904
  __name(isResolvedDocsConfig2, "isResolvedDocsConfig");
@@ -10836,7 +10883,7 @@ var init_devtools = __esm({
10836
10883
  "src/devtools.ts"() {
10837
10884
  "use strict";
10838
10885
  import_node_path14 = __toESM(require("path"));
10839
- init_config2();
10886
+ init_config3();
10840
10887
  init_cron();
10841
10888
  init_route_runtime();
10842
10889
  __name(normalizePath, "normalizePath");
@@ -16504,6 +16551,16 @@ async function _runWithCurrentRequest(request, fn) {
16504
16551
  return requestStore.run(request, fn);
16505
16552
  }
16506
16553
  __name(_runWithCurrentRequest, "_runWithCurrentRequest");
16554
+ function getCurrentRequest() {
16555
+ const request = requestStore.getStore();
16556
+ if (!request) {
16557
+ throw new Error(
16558
+ "No current request is available. getCurrentRequest() can only be used during server rendering."
16559
+ );
16560
+ }
16561
+ return request;
16562
+ }
16563
+ __name(getCurrentRequest, "getCurrentRequest");
16507
16564
 
16508
16565
  // src/client/router.ts
16509
16566
  var import_react3 = require("react");
@@ -18910,6 +18967,125 @@ function DefaultNotFoundPage(_props) {
18910
18967
  }
18911
18968
  __name(DefaultNotFoundPage, "DefaultNotFoundPage");
18912
18969
 
18970
+ // src/theme/server-runtime.ts
18971
+ init_config2();
18972
+ var THEME_SCRIPT_ID = "farm-theme-script";
18973
+ var THEME_STYLE_ID = "farm-theme-style";
18974
+ function createFarmThemeDocumentParts(input, basePath = "/", serverTheme) {
18975
+ const config = resolveFarmThemeConfig(input, basePath);
18976
+ if (!config.enabled) return { attributes: "", head: "" };
18977
+ const hydrationTheme = serverTheme ?? config.default;
18978
+ const initialTheme = hydrationTheme === "system" ? "light" : hydrationTheme;
18979
+ const script = createFarmThemeBootstrapScript(config, hydrationTheme);
18980
+ return {
18981
+ attributes: ` data-theme="${initialTheme}"`,
18982
+ 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>`
18983
+ };
18984
+ }
18985
+ __name(createFarmThemeDocumentParts, "createFarmThemeDocumentParts");
18986
+ function createFarmThemeBootstrapScript(config, serverTheme = config.default) {
18987
+ return `(function(config,serverTheme){
18988
+ var isTheme=function(value){return value==="light"||value==="dark"||value==="system";};
18989
+ var decode=function(value){try{return decodeURIComponent(value);}catch(_error){return value;}};
18990
+ 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());}};
18991
+ var media=window.matchMedia("(prefers-color-scheme: dark)");
18992
+ var resolveTheme=function(theme){return theme==="system"?(media.matches?"dark":"light"):theme;};
18993
+ var storedTheme=readCookie();
18994
+ var preference=isTheme(storedTheme)?storedTheme:config.default;
18995
+ var serverSnapshot={theme:serverTheme,resolvedTheme:serverTheme==="system"?undefined:serverTheme,mounted:false};
18996
+ 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;};
18997
+ var emit=function(){var snapshot=apply();window.dispatchEvent(new CustomEvent("farm:themechange",{detail:snapshot}));};
18998
+ 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){}};
18999
+ var setTheme=function(theme){if(!isTheme(theme))throw new TypeError("Unknown FARMJS theme: "+String(theme));preference=theme;persist(theme);emit();};
19000
+ var initialSnapshot={theme:preference,resolvedTheme:resolveTheme(preference),mounted:true};
19001
+ window.__FARM_THEME__={config:config,serverSnapshot:serverSnapshot,snapshot:initialSnapshot,setTheme:setTheme};
19002
+ document.documentElement.dataset.theme=initialSnapshot.resolvedTheme;
19003
+ var handleSystemChange=function(){if(preference==="system")emit();};
19004
+ if(typeof media.addEventListener==="function")media.addEventListener("change",handleSystemChange);else if(typeof media.addListener==="function")media.addListener(handleSystemChange);
19005
+ window.addEventListener("storage",function(event){if(event.key!==config.storageKey||!isTheme(event.newValue))return;preference=event.newValue;persist(preference);emit();});
19006
+ })(${serializeInlineValue(config)},${serializeInlineValue(serverTheme)});`;
19007
+ }
19008
+ __name(createFarmThemeBootstrapScript, "createFarmThemeBootstrapScript");
19009
+ function serializeInlineValue(value) {
19010
+ return JSON.stringify(value).replace(/</g, "\\u003c").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
19011
+ }
19012
+ __name(serializeInlineValue, "serializeInlineValue");
19013
+
19014
+ // src/theme/bridge.ts
19015
+ var FALLBACK_SERVER_SNAPSHOT = Object.freeze({
19016
+ theme: "system",
19017
+ resolvedTheme: void 0,
19018
+ mounted: false
19019
+ });
19020
+ var FARM_THEME_SERVER_SNAPSHOT_RESOLVER = /* @__PURE__ */ Symbol.for("farm.js.theme.server-snapshot-resolver");
19021
+ function _setFarmThemeServerSnapshotResolver(resolver) {
19022
+ globalThis[FARM_THEME_SERVER_SNAPSHOT_RESOLVER] = resolver;
19023
+ }
19024
+ __name(_setFarmThemeServerSnapshotResolver, "_setFarmThemeServerSnapshotResolver");
19025
+
19026
+ // src/theme/server.ts
19027
+ init_config2();
19028
+ var defaultThemeConfig = resolveFarmThemeConfig(void 0);
19029
+ function _setDefaultFarmThemeConfig(config, basePath = "/") {
19030
+ defaultThemeConfig = resolveFarmThemeConfig(config, basePath);
19031
+ }
19032
+ __name(_setDefaultFarmThemeConfig, "_setDefaultFarmThemeConfig");
19033
+ function getTheme(request = getCurrentRequest()) {
19034
+ return readFarmThemePreference(request, defaultThemeConfig);
19035
+ }
19036
+ __name(getTheme, "getTheme");
19037
+ function getThemeSnapshot(request = getCurrentRequest()) {
19038
+ const theme = readFarmThemePreference(request, defaultThemeConfig);
19039
+ return {
19040
+ theme,
19041
+ resolvedTheme: theme === "system" ? void 0 : theme,
19042
+ mounted: false
19043
+ };
19044
+ }
19045
+ __name(getThemeSnapshot, "getThemeSnapshot");
19046
+ function readFarmThemePreference(request, config) {
19047
+ if (!config.enabled) return config.default;
19048
+ const stored = readCookie3(request.headers.get("cookie"), config.storageKey);
19049
+ return isFarmThemePreference(stored) ? stored : config.default;
19050
+ }
19051
+ __name(readFarmThemePreference, "readFarmThemePreference");
19052
+ function readCookie3(cookieHeader, name) {
19053
+ if (!cookieHeader) return void 0;
19054
+ for (const entry of cookieHeader.split(";")) {
19055
+ const separator = entry.indexOf("=");
19056
+ if (separator < 0) continue;
19057
+ const key = decodeCookieValue(entry.slice(0, separator).trim());
19058
+ if (key !== name) continue;
19059
+ return decodeCookieValue(entry.slice(separator + 1).trim());
19060
+ }
19061
+ return void 0;
19062
+ }
19063
+ __name(readCookie3, "readCookie");
19064
+ function decodeCookieValue(value) {
19065
+ try {
19066
+ return decodeURIComponent(value);
19067
+ } catch {
19068
+ return value;
19069
+ }
19070
+ }
19071
+ __name(decodeCookieValue, "decodeCookieValue");
19072
+ function isFarmThemePreference(value) {
19073
+ return value === "light" || value === "dark" || value === "system";
19074
+ }
19075
+ __name(isFarmThemePreference, "isFarmThemePreference");
19076
+ _setFarmThemeServerSnapshotResolver(() => {
19077
+ try {
19078
+ return getThemeSnapshot();
19079
+ } catch {
19080
+ const theme = defaultThemeConfig.default;
19081
+ return {
19082
+ theme,
19083
+ resolvedTheme: theme === "system" ? void 0 : theme,
19084
+ mounted: false
19085
+ };
19086
+ }
19087
+ });
19088
+
18913
19089
  // src/server/renderer.ts
18914
19090
  var cachedClerkProvider = null;
18915
19091
  var importRuntimeModule = new Function("specifier", "return import(specifier);");
@@ -18918,10 +19094,10 @@ function hasRequestHeader(req, name) {
18918
19094
  return Array.isArray(value) ? value.length > 0 : Boolean(value);
18919
19095
  }
18920
19096
  __name(hasRequestHeader, "hasRequestHeader");
18921
- function serializeInlineValue(value) {
19097
+ function serializeInlineValue2(value) {
18922
19098
  return JSON.stringify(value).replace(/</g, "\\u003c").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
18923
19099
  }
18924
- __name(serializeInlineValue, "serializeInlineValue");
19100
+ __name(serializeInlineValue2, "serializeInlineValue");
18925
19101
  function escapeHtmlAttribute2(value) {
18926
19102
  return value.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
18927
19103
  }
@@ -19015,7 +19191,7 @@ function createDocumentFooter(options) {
19015
19191
  __name(createDocumentFooter, "createDocumentFooter");
19016
19192
  function createDeferredHydrationScript(records) {
19017
19193
  if (records.length === 0) return "";
19018
- return `<script>window.__FARM_DEFERRED_DATA__=${serializeInlineValue(
19194
+ return `<script>window.__FARM_DEFERRED_DATA__=${serializeInlineValue2(
19019
19195
  snapshotDeferredData(records)
19020
19196
  )};</script>`;
19021
19197
  }
@@ -20156,9 +20332,9 @@ var _ServerRenderer = class _ServerRenderer {
20156
20332
  slots: routeSlotPayload
20157
20333
  });
20158
20334
  const propsScript = `<script>
20159
- window.__FARM_PROPS__ = ${serializeInlineValue(deferredProps.data.page)};
20160
- window.__FARM_ROUTE_SLOTS__ = ${serializeInlineValue(deferredProps.data.slots)};
20161
- window.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue(deploymentId)};
20335
+ window.__FARM_PROPS__ = ${serializeInlineValue2(deferredProps.data.page)};
20336
+ window.__FARM_ROUTE_SLOTS__ = ${serializeInlineValue2(deferredProps.data.slots)};
20337
+ window.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue2(deploymentId)};
20162
20338
  window.__FARM_PATH__ = ${JSON.stringify(req.__FARM_ROUTE__ || req.url || "/")};
20163
20339
  window.__FARM_IS_CLIENT__ = ${JSON.stringify(isClientComponent)};
20164
20340
  window.__FARM_PAGE_SHOULD_HYDRATE__ = ${JSON.stringify(
@@ -20176,7 +20352,7 @@ window.__FARM_LOADING_MODULE__ = ${JSON.stringify(
20176
20352
  )};
20177
20353
  window.__FARM_MANIFEST__ = ${JSON.stringify(clientManifest)};
20178
20354
  window.__FARM_INTEGRATION_API_MANIFEST__ = ${JSON.stringify(getRegisteredIntegrationAPIManifest())};
20179
- ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(getFarmI18nClientSnapshot())};` : ""}
20355
+ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(getFarmI18nClientSnapshot())};` : ""}
20180
20356
  </script>`;
20181
20357
  const hydrationClickQueueScript = isClientComponent || req.__FARM_SHOULD_HYDRATE__ === true || req.__FARM_HAS_HYDRATABLE_ROUTE_SLOTS__ === true ? createPreHydrationClickQueueScript() : "";
20182
20358
  const {
@@ -20187,6 +20363,11 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(g
20187
20363
  const i18nSnapshot = getFarmI18nClientSnapshot();
20188
20364
  const i18nAlternateTags = i18nSnapshot ? renderI18nAlternateLinks(req.__FARM_ROUTE__ || req.url || "/", i18nSnapshot) : "";
20189
20365
  const fontHead = renderFarmFontDevHead(this.config.root || process.cwd());
20366
+ const themeDocument = createFarmThemeDocumentParts(
20367
+ this.config.theme,
20368
+ this.config.basePath,
20369
+ getTheme()
20370
+ );
20190
20371
  const streamRoot = import_react5.default.createElement("div", { style: { display: "contents" } }, element);
20191
20372
  const { pipe } = (0, import_server2.renderToPipeableStream)(streamRoot, {
20192
20373
  onShellReady() {
@@ -20200,8 +20381,9 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(g
20200
20381
  console.log(`[FARM STREAM] onShellReady at ${shellReadyMs}ms`);
20201
20382
  }
20202
20383
  const shell = `<!DOCTYPE html>
20203
- <html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}>
20384
+ <html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}${themeDocument.attributes}>
20204
20385
  <head>
20386
+ ${themeDocument.head}
20205
20387
  <meta charset="utf-8">
20206
20388
  <meta name="viewport" content="width=device-width, initial-scale=1">
20207
20389
  <meta name="farm-deployment-id" content="${escapeHtmlAttribute2(deploymentId)}">
@@ -20403,15 +20585,21 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(g
20403
20585
  const i18nSnapshot = getFarmI18nClientSnapshot();
20404
20586
  const clientScript = isClientComponent ? ` <script type="module" src="/@farm/client.js"></script>` : "";
20405
20587
  const integrationManifestScript = `<script>
20406
- window.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue(this.getDeploymentId())};
20588
+ window.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue2(this.getDeploymentId())};
20407
20589
  window.__FARM_INTEGRATION_API_MANIFEST__ = ${JSON.stringify(getRegisteredIntegrationAPIManifest())};
20408
- ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue(i18nSnapshot)};` : ""}
20590
+ ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue2(i18nSnapshot)};` : ""}
20409
20591
  </script>`;
20410
20592
  const alternateLinks = i18nSnapshot ? renderI18nAlternateLinks(requestPath, i18nSnapshot) : "";
20411
20593
  const fontHead = renderFarmFontDevHead(this.config.root || process.cwd());
20594
+ const themeDocument = createFarmThemeDocumentParts(
20595
+ this.config.theme,
20596
+ this.config.basePath,
20597
+ getTheme()
20598
+ );
20412
20599
  return `<!DOCTYPE html>
20413
- <html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}>
20600
+ <html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}${themeDocument.attributes}>
20414
20601
  <head>
20602
+ ${themeDocument.head}
20415
20603
  <meta charset="utf-8">
20416
20604
  <meta name="viewport" content="width=device-width, initial-scale=1">
20417
20605
  <meta name="farm-deployment-id" content="${escapeHtmlAttribute2(this.getDeploymentId())}">
@@ -20458,6 +20646,7 @@ init_config();
20458
20646
  init_auth_config();
20459
20647
  init_preload();
20460
20648
  init_security();
20649
+ init_config2();
20461
20650
  var defaultDocsConfig = {
20462
20651
  enabled: false,
20463
20652
  entry: "/docs",
@@ -20471,6 +20660,7 @@ var _FarmApp = class _FarmApp {
20471
20660
  constructor(config = {}, viteServer) {
20472
20661
  this.config = this.normalizeConfig(config);
20473
20662
  configureFarmObservability(this.config.observability);
20663
+ _setDefaultFarmThemeConfig(this.config.theme);
20474
20664
  this.i18nRuntime = createFarmI18nRuntime(this.config.i18n);
20475
20665
  _setDefaultFarmI18nRuntime(this.i18nRuntime);
20476
20666
  this.viteServer = viteServer;
@@ -20529,6 +20719,7 @@ var _FarmApp = class _FarmApp {
20529
20719
  security: resolveFarmSecurityConfig(config.security),
20530
20720
  images: resolveFarmImageConfig(config.images),
20531
20721
  performance: resolveFarmPerformanceConfig(config.performance),
20722
+ theme: resolveFarmThemeConfig(config.theme, config.basePath || "/"),
20532
20723
  i18n: isResolvedI18nConfig(config.i18n) ? config.i18n : resolveFarmI18nConfig(config.i18n, {
20533
20724
  root,
20534
20725
  mode: process.env.NODE_ENV === "production" ? "production" : "development"
@@ -21729,6 +21920,15 @@ __name(normalizeMiddlewareModule, "normalizeMiddlewareModule");
21729
21920
 
21730
21921
  // src/middleware/manager.ts
21731
21922
  init_response();
21923
+
21924
+ // src/cli-colors.ts
21925
+ var import_picocolors = __toESM(require("picocolors"));
21926
+ function createCliColors(interactive = process.stdout.isTTY === true) {
21927
+ return import_picocolors.default.createColors(interactive);
21928
+ }
21929
+ __name(createCliColors, "createCliColors");
21930
+
21931
+ // src/middleware/manager.ts
21732
21932
  function isMiddlewareResponse(value) {
21733
21933
  return value instanceof Response;
21734
21934
  }
@@ -21885,23 +22085,16 @@ var _MiddlewareManager = class _MiddlewareManager {
21885
22085
  if (applicable.length === 0) {
21886
22086
  return false;
21887
22087
  }
21888
- try {
21889
- const pc = require("picocolors");
21890
- const middlewarePaths = applicable.map(({ mw }) => mw.path).join(", ");
21891
- const log = [
21892
- pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
21893
- pc.dim("[") + pc.bold(pc.magenta("MIDDLEWARE")) + pc.dim("]"),
21894
- pc.dim("[") + pc.bold(pc.white(method.padEnd(3))) + pc.dim("]"),
21895
- pc.gray("Executing middleware: "),
21896
- pc.gray(pathname),
21897
- pc.dim(` (${(Date.now() - startTime).toFixed(2)}ms)`)
21898
- ].join(" ");
21899
- console.log(log);
21900
- } catch {
21901
- console.log(
21902
- `[FARM] [MIDDLEWARE] [${method}] Executing ${pathname} (${applicable.length} middleware)`
21903
- );
21904
- }
22088
+ const pc = createCliColors();
22089
+ const log = [
22090
+ pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
22091
+ pc.dim("[") + pc.bold(pc.magenta("MIDDLEWARE")) + pc.dim("]"),
22092
+ pc.dim("[") + pc.bold(pc.white(method.padEnd(3))) + pc.dim("]"),
22093
+ pc.gray("Executing middleware: "),
22094
+ pc.gray(pathname),
22095
+ pc.dim(` (${(Date.now() - startTime).toFixed(2)}ms)`)
22096
+ ].join(" ");
22097
+ console.log(log);
21905
22098
  for (const entry of applicable) {
21906
22099
  const { mw, routeMatch } = entry;
21907
22100
  const configMatch = mw.config ? this.matchesConfig(routePathname, mw.config, ctx) : { matched: true };
@@ -23137,7 +23330,7 @@ function transformError(id, message) {
23137
23330
  __name(transformError, "transformError");
23138
23331
 
23139
23332
  // package.json
23140
- var version = "0.1.0-beta.21";
23333
+ var version = "0.1.0-beta.23";
23141
23334
 
23142
23335
  // src/version.ts
23143
23336
  var FARM_VERSION = version;
@@ -23383,6 +23576,32 @@ __name(createFarmSourceAlias, "createFarmSourceAlias");
23383
23576
  // src/vite.ts
23384
23577
  init_fonts();
23385
23578
  init_server_http();
23579
+
23580
+ // src/theme/vite.ts
23581
+ init_config2();
23582
+ var FARM_DARK_VARIANT = '@custom-variant dark (&:where([data-theme="dark"], [data-theme="dark"] *));';
23583
+ function createFarmThemeCssPlugin(input, basePath = "/") {
23584
+ const config = resolveFarmThemeConfig(input, basePath);
23585
+ return {
23586
+ name: "farm:theme-css",
23587
+ enforce: "pre",
23588
+ transform(code, id) {
23589
+ if (!config.enabled || !/\.css(?:\?.*)?$/.test(id) || !/@import\s+["']tailwindcss["']/.test(code) || /@custom-variant\s+dark\b/.test(code)) {
23590
+ return null;
23591
+ }
23592
+ return {
23593
+ code: `${code.trimEnd()}
23594
+
23595
+ ${FARM_DARK_VARIANT}
23596
+ `,
23597
+ map: null
23598
+ };
23599
+ }
23600
+ };
23601
+ }
23602
+ __name(createFarmThemeCssPlugin, "createFarmThemeCssPlugin");
23603
+
23604
+ // src/vite.ts
23386
23605
  var ALL_TYPE_ARTIFACTS = {
23387
23606
  routes: true,
23388
23607
  api: true,
@@ -23687,18 +23906,14 @@ function farmPlugin(options = {}, initialPluginManager) {
23687
23906
  let refreshRouteDiscovery = null;
23688
23907
  let workflowHandler = null;
23689
23908
  const logUpdate = /* @__PURE__ */ __name((tag, message) => {
23690
- try {
23691
- const pc = require("picocolors");
23692
- const log = [
23693
- pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
23694
- pc.dim("[") + pc.bold(pc.cyan(tag)) + pc.dim("]"),
23695
- pc.dim("[") + pc.bold(pc.yellow("UPDATE")) + pc.dim("]"),
23696
- pc.gray(message)
23697
- ].join(" ");
23698
- console.log(log);
23699
- } catch {
23700
- console.log(`[FARM] [${tag}] [UPDATE] ${message}`);
23701
- }
23909
+ const pc = createCliColors();
23910
+ const log = [
23911
+ pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
23912
+ pc.dim("[") + pc.bold(pc.cyan(tag)) + pc.dim("]"),
23913
+ pc.dim("[") + pc.bold(pc.yellow("UPDATE")) + pc.dim("]"),
23914
+ pc.gray(message)
23915
+ ].join(" ");
23916
+ console.log(log);
23702
23917
  }, "logUpdate");
23703
23918
  return {
23704
23919
  name: "farm",
@@ -24139,25 +24354,21 @@ window.__FARM_MANIFEST__ = ${inlineValue({
24139
24354
  return;
24140
24355
  }
24141
24356
  logResponse.__last = { key: dedupeKey, ts: now };
24142
- try {
24143
- const pc = require("picocolors");
24144
- let statusColor = pc.green;
24145
- if (status >= 500) statusColor = pc.red;
24146
- else if (status >= 400) statusColor = pc.yellow;
24147
- else if (status >= 300) statusColor = pc.cyan;
24148
- const log = [
24149
- pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
24150
- pc.dim("[") + pc.bold(pc.cyan(tag)) + pc.dim("]"),
24151
- pc.dim("[") + pc.bold(pc.white(method.padEnd(3))) + pc.dim("]"),
24152
- pc.gray(urlPath),
24153
- pc.dim("-"),
24154
- statusColor(status.toString()),
24155
- pc.dim(`(${duration}ms)`)
24156
- ].join(" ");
24157
- console.log(log);
24158
- } catch {
24159
- console.log(`[FARM] [${tag}] [${method}] ${urlPath} - ${status} (${duration}ms)`);
24160
- }
24357
+ const pc = createCliColors();
24358
+ let statusColor = pc.green;
24359
+ if (status >= 500) statusColor = pc.red;
24360
+ else if (status >= 400) statusColor = pc.yellow;
24361
+ else if (status >= 300) statusColor = pc.cyan;
24362
+ const log = [
24363
+ pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
24364
+ pc.dim("[") + pc.bold(pc.cyan(tag)) + pc.dim("]"),
24365
+ pc.dim("[") + pc.bold(pc.white(method.padEnd(3))) + pc.dim("]"),
24366
+ pc.gray(urlPath),
24367
+ pc.dim("-"),
24368
+ statusColor(status.toString()),
24369
+ pc.dim(`(${duration}ms)`)
24370
+ ].join(" ");
24371
+ console.log(log);
24161
24372
  }, "logResponse");
24162
24373
  server.middlewares.use(
24163
24374
  _withAfterNodeMiddleware(async (req, res, next) => {
@@ -26777,14 +26988,22 @@ async function renderPage(pageData) {
26777
26988
  if (!doc.documentElement || !doc.body) return false;
26778
26989
 
26779
26990
  resetReactRoots();
26991
+ const activeFarmTheme =
26992
+ window.__FARM_THEME__?.snapshot?.resolvedTheme ||
26993
+ document.documentElement.getAttribute('data-theme');
26780
26994
  Array.from(document.documentElement.attributes).forEach(function(attr) {
26995
+ if (attr.name === 'data-theme') return;
26781
26996
  if (!doc.documentElement.hasAttribute(attr.name)) {
26782
26997
  document.documentElement.removeAttribute(attr.name);
26783
26998
  }
26784
26999
  });
26785
27000
  Array.from(doc.documentElement.attributes).forEach(function(attr) {
27001
+ if (attr.name === 'data-theme') return;
26786
27002
  document.documentElement.setAttribute(attr.name, attr.value);
26787
27003
  });
27004
+ if (activeFarmTheme) {
27005
+ document.documentElement.setAttribute('data-theme', activeFarmTheme);
27006
+ }
26788
27007
 
26789
27008
  document.head.innerHTML = doc.head ? doc.head.innerHTML : '';
26790
27009
  document.body.innerHTML = doc.body.innerHTML;
@@ -26793,6 +27012,7 @@ async function renderPage(pageData) {
26793
27012
 
26794
27013
  setTimeout(function() {
26795
27014
  Array.from(document.querySelectorAll('script')).forEach(function(script) {
27015
+ if (script.id === 'farm-theme-script') return;
26796
27016
  const freshScript = document.createElement('script');
26797
27017
  Array.from(script.attributes).forEach(function(attr) {
26798
27018
  freshScript.setAttribute(attr.name, attr.value);
@@ -27223,7 +27443,7 @@ async function defineConfig2(config = {}) {
27223
27443
  return null;
27224
27444
  }
27225
27445
  };
27226
- const pc = await import("picocolors").then((m) => m.default);
27446
+ const pc = createCliColors();
27227
27447
  let serverStarted = false;
27228
27448
  let startTime = Date.now();
27229
27449
  const farmLogger = {
@@ -27290,6 +27510,7 @@ async function defineConfig2(config = {}) {
27290
27510
  };
27291
27511
  return {
27292
27512
  plugins: [
27513
+ createFarmThemeCssPlugin(config.theme, config.basePath),
27293
27514
  tailwindcss(),
27294
27515
  viteBrowserExternalPlugin,
27295
27516
  farmI18nClientBridgePlugin(),