@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/plugin.cjs CHANGED
@@ -4152,6 +4152,52 @@ var init_config = __esm({
4152
4152
  }
4153
4153
  });
4154
4154
 
4155
+ // src/theme/config.ts
4156
+ function resolveFarmThemeConfig(config, basePath = "/") {
4157
+ if (config && "enabled" in config) {
4158
+ return config;
4159
+ }
4160
+ if (!config) {
4161
+ return {
4162
+ enabled: false,
4163
+ default: "system",
4164
+ storageKey: DEFAULT_FARM_THEME_STORAGE_KEY,
4165
+ cookiePath: normalizeCookiePath(basePath)
4166
+ };
4167
+ }
4168
+ const storageKey = config.storageKey?.trim() || DEFAULT_FARM_THEME_STORAGE_KEY;
4169
+ if (!STORAGE_KEY_PATTERN.test(storageKey)) {
4170
+ throw new Error(
4171
+ "theme.storageKey may only contain letters, numbers, dots, underscores, and hyphens."
4172
+ );
4173
+ }
4174
+ const defaultTheme = config.default ?? "system";
4175
+ if (defaultTheme !== "light" && defaultTheme !== "dark" && defaultTheme !== "system") {
4176
+ throw new Error('theme.default must be "light", "dark", or "system".');
4177
+ }
4178
+ return {
4179
+ enabled: true,
4180
+ default: defaultTheme,
4181
+ storageKey,
4182
+ cookiePath: normalizeCookiePath(basePath)
4183
+ };
4184
+ }
4185
+ function normalizeCookiePath(basePath) {
4186
+ const normalized = `/${basePath}`.replace(/\/{2,}/g, "/");
4187
+ if (normalized === "/") return normalized;
4188
+ return normalized.replace(/\/$/, "");
4189
+ }
4190
+ var DEFAULT_FARM_THEME_STORAGE_KEY, STORAGE_KEY_PATTERN;
4191
+ var init_config2 = __esm({
4192
+ "src/theme/config.ts"() {
4193
+ "use strict";
4194
+ DEFAULT_FARM_THEME_STORAGE_KEY = "farm-theme";
4195
+ STORAGE_KEY_PATTERN = /^[A-Za-z0-9._-]+$/;
4196
+ __name(resolveFarmThemeConfig, "resolveFarmThemeConfig");
4197
+ __name(normalizeCookiePath, "normalizeCookiePath");
4198
+ }
4199
+ });
4200
+
4155
4201
  // src/devtools-config.ts
4156
4202
  function resolveFarmDevtoolsConfig(config, mode = "development") {
4157
4203
  if (mode !== "development" || config === false) {
@@ -8934,7 +8980,7 @@ async function resolveDocsConfig(userDocs, options = {}) {
8934
8980
  };
8935
8981
  }
8936
8982
  var import_path9, DOCS_CONFIG_FILENAMES;
8937
- var init_config2 = __esm({
8983
+ var init_config3 = __esm({
8938
8984
  "src/config.ts"() {
8939
8985
  "use strict";
8940
8986
  init_integrations();
@@ -8955,6 +9001,7 @@ var init_config2 = __esm({
8955
9001
  init_auth_config();
8956
9002
  init_preload();
8957
9003
  init_security();
9004
+ init_config2();
8958
9005
  init_config_entry();
8959
9006
  __name(getDeployTargetForPreset, "getDeployTargetForPreset");
8960
9007
  DOCS_CONFIG_FILENAMES = [
@@ -9449,7 +9496,7 @@ var init_api = __esm({
9449
9496
  "src/docs/api.ts"() {
9450
9497
  "use strict";
9451
9498
  import_docs2 = require("@farming-labs/docs");
9452
- init_config2();
9499
+ init_config3();
9453
9500
  init_handler();
9454
9501
  __name(isRecord4, "isRecord");
9455
9502
  __name(isResolvedDocsConfig2, "isResolvedDocsConfig");
@@ -10434,7 +10481,7 @@ var init_devtools = __esm({
10434
10481
  "src/devtools.ts"() {
10435
10482
  "use strict";
10436
10483
  import_node_path14 = __toESM(require("path"));
10437
- init_config2();
10484
+ init_config3();
10438
10485
  init_cron();
10439
10486
  init_route_runtime();
10440
10487
  __name(normalizePath, "normalizePath");
@@ -16105,6 +16152,16 @@ async function _runWithCurrentRequest(request, fn) {
16105
16152
  return requestStore.run(request, fn);
16106
16153
  }
16107
16154
  __name(_runWithCurrentRequest, "_runWithCurrentRequest");
16155
+ function getCurrentRequest() {
16156
+ const request = requestStore.getStore();
16157
+ if (!request) {
16158
+ throw new Error(
16159
+ "No current request is available. getCurrentRequest() can only be used during server rendering."
16160
+ );
16161
+ }
16162
+ return request;
16163
+ }
16164
+ __name(getCurrentRequest, "getCurrentRequest");
16108
16165
 
16109
16166
  // src/client/router.ts
16110
16167
  var import_react3 = require("react");
@@ -18511,6 +18568,125 @@ function DefaultNotFoundPage(_props) {
18511
18568
  }
18512
18569
  __name(DefaultNotFoundPage, "DefaultNotFoundPage");
18513
18570
 
18571
+ // src/theme/server-runtime.ts
18572
+ init_config2();
18573
+ var THEME_SCRIPT_ID = "farm-theme-script";
18574
+ var THEME_STYLE_ID = "farm-theme-style";
18575
+ function createFarmThemeDocumentParts(input, basePath = "/", serverTheme) {
18576
+ const config = resolveFarmThemeConfig(input, basePath);
18577
+ if (!config.enabled) return { attributes: "", head: "" };
18578
+ const hydrationTheme = serverTheme ?? config.default;
18579
+ const initialTheme = hydrationTheme === "system" ? "light" : hydrationTheme;
18580
+ const script = createFarmThemeBootstrapScript(config, hydrationTheme);
18581
+ return {
18582
+ attributes: ` data-theme="${initialTheme}"`,
18583
+ 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>`
18584
+ };
18585
+ }
18586
+ __name(createFarmThemeDocumentParts, "createFarmThemeDocumentParts");
18587
+ function createFarmThemeBootstrapScript(config, serverTheme = config.default) {
18588
+ return `(function(config,serverTheme){
18589
+ var isTheme=function(value){return value==="light"||value==="dark"||value==="system";};
18590
+ var decode=function(value){try{return decodeURIComponent(value);}catch(_error){return value;}};
18591
+ 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());}};
18592
+ var media=window.matchMedia("(prefers-color-scheme: dark)");
18593
+ var resolveTheme=function(theme){return theme==="system"?(media.matches?"dark":"light"):theme;};
18594
+ var storedTheme=readCookie();
18595
+ var preference=isTheme(storedTheme)?storedTheme:config.default;
18596
+ var serverSnapshot={theme:serverTheme,resolvedTheme:serverTheme==="system"?undefined:serverTheme,mounted:false};
18597
+ 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;};
18598
+ var emit=function(){var snapshot=apply();window.dispatchEvent(new CustomEvent("farm:themechange",{detail:snapshot}));};
18599
+ 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){}};
18600
+ var setTheme=function(theme){if(!isTheme(theme))throw new TypeError("Unknown FARMJS theme: "+String(theme));preference=theme;persist(theme);emit();};
18601
+ var initialSnapshot={theme:preference,resolvedTheme:resolveTheme(preference),mounted:true};
18602
+ window.__FARM_THEME__={config:config,serverSnapshot:serverSnapshot,snapshot:initialSnapshot,setTheme:setTheme};
18603
+ document.documentElement.dataset.theme=initialSnapshot.resolvedTheme;
18604
+ var handleSystemChange=function(){if(preference==="system")emit();};
18605
+ if(typeof media.addEventListener==="function")media.addEventListener("change",handleSystemChange);else if(typeof media.addListener==="function")media.addListener(handleSystemChange);
18606
+ window.addEventListener("storage",function(event){if(event.key!==config.storageKey||!isTheme(event.newValue))return;preference=event.newValue;persist(preference);emit();});
18607
+ })(${serializeInlineValue(config)},${serializeInlineValue(serverTheme)});`;
18608
+ }
18609
+ __name(createFarmThemeBootstrapScript, "createFarmThemeBootstrapScript");
18610
+ function serializeInlineValue(value) {
18611
+ return JSON.stringify(value).replace(/</g, "\\u003c").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
18612
+ }
18613
+ __name(serializeInlineValue, "serializeInlineValue");
18614
+
18615
+ // src/theme/bridge.ts
18616
+ var FALLBACK_SERVER_SNAPSHOT = Object.freeze({
18617
+ theme: "system",
18618
+ resolvedTheme: void 0,
18619
+ mounted: false
18620
+ });
18621
+ var FARM_THEME_SERVER_SNAPSHOT_RESOLVER = /* @__PURE__ */ Symbol.for("farm.js.theme.server-snapshot-resolver");
18622
+ function _setFarmThemeServerSnapshotResolver(resolver) {
18623
+ globalThis[FARM_THEME_SERVER_SNAPSHOT_RESOLVER] = resolver;
18624
+ }
18625
+ __name(_setFarmThemeServerSnapshotResolver, "_setFarmThemeServerSnapshotResolver");
18626
+
18627
+ // src/theme/server.ts
18628
+ init_config2();
18629
+ var defaultThemeConfig = resolveFarmThemeConfig(void 0);
18630
+ function _setDefaultFarmThemeConfig(config, basePath = "/") {
18631
+ defaultThemeConfig = resolveFarmThemeConfig(config, basePath);
18632
+ }
18633
+ __name(_setDefaultFarmThemeConfig, "_setDefaultFarmThemeConfig");
18634
+ function getTheme(request = getCurrentRequest()) {
18635
+ return readFarmThemePreference(request, defaultThemeConfig);
18636
+ }
18637
+ __name(getTheme, "getTheme");
18638
+ function getThemeSnapshot(request = getCurrentRequest()) {
18639
+ const theme = readFarmThemePreference(request, defaultThemeConfig);
18640
+ return {
18641
+ theme,
18642
+ resolvedTheme: theme === "system" ? void 0 : theme,
18643
+ mounted: false
18644
+ };
18645
+ }
18646
+ __name(getThemeSnapshot, "getThemeSnapshot");
18647
+ function readFarmThemePreference(request, config) {
18648
+ if (!config.enabled) return config.default;
18649
+ const stored = readCookie3(request.headers.get("cookie"), config.storageKey);
18650
+ return isFarmThemePreference(stored) ? stored : config.default;
18651
+ }
18652
+ __name(readFarmThemePreference, "readFarmThemePreference");
18653
+ function readCookie3(cookieHeader, name) {
18654
+ if (!cookieHeader) return void 0;
18655
+ for (const entry of cookieHeader.split(";")) {
18656
+ const separator = entry.indexOf("=");
18657
+ if (separator < 0) continue;
18658
+ const key = decodeCookieValue(entry.slice(0, separator).trim());
18659
+ if (key !== name) continue;
18660
+ return decodeCookieValue(entry.slice(separator + 1).trim());
18661
+ }
18662
+ return void 0;
18663
+ }
18664
+ __name(readCookie3, "readCookie");
18665
+ function decodeCookieValue(value) {
18666
+ try {
18667
+ return decodeURIComponent(value);
18668
+ } catch {
18669
+ return value;
18670
+ }
18671
+ }
18672
+ __name(decodeCookieValue, "decodeCookieValue");
18673
+ function isFarmThemePreference(value) {
18674
+ return value === "light" || value === "dark" || value === "system";
18675
+ }
18676
+ __name(isFarmThemePreference, "isFarmThemePreference");
18677
+ _setFarmThemeServerSnapshotResolver(() => {
18678
+ try {
18679
+ return getThemeSnapshot();
18680
+ } catch {
18681
+ const theme = defaultThemeConfig.default;
18682
+ return {
18683
+ theme,
18684
+ resolvedTheme: theme === "system" ? void 0 : theme,
18685
+ mounted: false
18686
+ };
18687
+ }
18688
+ });
18689
+
18514
18690
  // src/server/renderer.ts
18515
18691
  var cachedClerkProvider = null;
18516
18692
  var importRuntimeModule = new Function("specifier", "return import(specifier);");
@@ -18519,10 +18695,10 @@ function hasRequestHeader(req, name) {
18519
18695
  return Array.isArray(value) ? value.length > 0 : Boolean(value);
18520
18696
  }
18521
18697
  __name(hasRequestHeader, "hasRequestHeader");
18522
- function serializeInlineValue(value) {
18698
+ function serializeInlineValue2(value) {
18523
18699
  return JSON.stringify(value).replace(/</g, "\\u003c").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
18524
18700
  }
18525
- __name(serializeInlineValue, "serializeInlineValue");
18701
+ __name(serializeInlineValue2, "serializeInlineValue");
18526
18702
  function escapeHtmlAttribute2(value) {
18527
18703
  return value.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
18528
18704
  }
@@ -18616,7 +18792,7 @@ function createDocumentFooter(options) {
18616
18792
  __name(createDocumentFooter, "createDocumentFooter");
18617
18793
  function createDeferredHydrationScript(records) {
18618
18794
  if (records.length === 0) return "";
18619
- return `<script>window.__FARM_DEFERRED_DATA__=${serializeInlineValue(
18795
+ return `<script>window.__FARM_DEFERRED_DATA__=${serializeInlineValue2(
18620
18796
  snapshotDeferredData(records)
18621
18797
  )};</script>`;
18622
18798
  }
@@ -19757,9 +19933,9 @@ var _ServerRenderer = class _ServerRenderer {
19757
19933
  slots: routeSlotPayload
19758
19934
  });
19759
19935
  const propsScript = `<script>
19760
- window.__FARM_PROPS__ = ${serializeInlineValue(deferredProps.data.page)};
19761
- window.__FARM_ROUTE_SLOTS__ = ${serializeInlineValue(deferredProps.data.slots)};
19762
- window.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue(deploymentId)};
19936
+ window.__FARM_PROPS__ = ${serializeInlineValue2(deferredProps.data.page)};
19937
+ window.__FARM_ROUTE_SLOTS__ = ${serializeInlineValue2(deferredProps.data.slots)};
19938
+ window.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue2(deploymentId)};
19763
19939
  window.__FARM_PATH__ = ${JSON.stringify(req.__FARM_ROUTE__ || req.url || "/")};
19764
19940
  window.__FARM_IS_CLIENT__ = ${JSON.stringify(isClientComponent)};
19765
19941
  window.__FARM_PAGE_SHOULD_HYDRATE__ = ${JSON.stringify(
@@ -19777,7 +19953,7 @@ window.__FARM_LOADING_MODULE__ = ${JSON.stringify(
19777
19953
  )};
19778
19954
  window.__FARM_MANIFEST__ = ${JSON.stringify(clientManifest)};
19779
19955
  window.__FARM_INTEGRATION_API_MANIFEST__ = ${JSON.stringify(getRegisteredIntegrationAPIManifest())};
19780
- ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(getFarmI18nClientSnapshot())};` : ""}
19956
+ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(getFarmI18nClientSnapshot())};` : ""}
19781
19957
  </script>`;
19782
19958
  const hydrationClickQueueScript = isClientComponent || req.__FARM_SHOULD_HYDRATE__ === true || req.__FARM_HAS_HYDRATABLE_ROUTE_SLOTS__ === true ? createPreHydrationClickQueueScript() : "";
19783
19959
  const {
@@ -19788,6 +19964,11 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(g
19788
19964
  const i18nSnapshot = getFarmI18nClientSnapshot();
19789
19965
  const i18nAlternateTags = i18nSnapshot ? renderI18nAlternateLinks(req.__FARM_ROUTE__ || req.url || "/", i18nSnapshot) : "";
19790
19966
  const fontHead = renderFarmFontDevHead(this.config.root || process.cwd());
19967
+ const themeDocument = createFarmThemeDocumentParts(
19968
+ this.config.theme,
19969
+ this.config.basePath,
19970
+ getTheme()
19971
+ );
19791
19972
  const streamRoot = import_react5.default.createElement("div", { style: { display: "contents" } }, element);
19792
19973
  const { pipe } = (0, import_server2.renderToPipeableStream)(streamRoot, {
19793
19974
  onShellReady() {
@@ -19801,8 +19982,9 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(g
19801
19982
  console.log(`[FARM STREAM] onShellReady at ${shellReadyMs}ms`);
19802
19983
  }
19803
19984
  const shell = `<!DOCTYPE html>
19804
- <html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}>
19985
+ <html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}${themeDocument.attributes}>
19805
19986
  <head>
19987
+ ${themeDocument.head}
19806
19988
  <meta charset="utf-8">
19807
19989
  <meta name="viewport" content="width=device-width, initial-scale=1">
19808
19990
  <meta name="farm-deployment-id" content="${escapeHtmlAttribute2(deploymentId)}">
@@ -20004,15 +20186,21 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue(g
20004
20186
  const i18nSnapshot = getFarmI18nClientSnapshot();
20005
20187
  const clientScript = isClientComponent ? ` <script type="module" src="/@farm/client.js"></script>` : "";
20006
20188
  const integrationManifestScript = `<script>
20007
- window.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue(this.getDeploymentId())};
20189
+ window.__FARM_DEPLOYMENT_ID__ = ${serializeInlineValue2(this.getDeploymentId())};
20008
20190
  window.__FARM_INTEGRATION_API_MANIFEST__ = ${JSON.stringify(getRegisteredIntegrationAPIManifest())};
20009
- ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue(i18nSnapshot)};` : ""}
20191
+ ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue2(i18nSnapshot)};` : ""}
20010
20192
  </script>`;
20011
20193
  const alternateLinks = i18nSnapshot ? renderI18nAlternateLinks(requestPath, i18nSnapshot) : "";
20012
20194
  const fontHead = renderFarmFontDevHead(this.config.root || process.cwd());
20195
+ const themeDocument = createFarmThemeDocumentParts(
20196
+ this.config.theme,
20197
+ this.config.basePath,
20198
+ getTheme()
20199
+ );
20013
20200
  return `<!DOCTYPE html>
20014
- <html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}>
20201
+ <html lang="${escapeHtmlAttribute2(i18nSnapshot?.locale || "en")}"${i18nSnapshot ? ` dir="${i18nSnapshot.direction}"` : ""}${themeDocument.attributes}>
20015
20202
  <head>
20203
+ ${themeDocument.head}
20016
20204
  <meta charset="utf-8">
20017
20205
  <meta name="viewport" content="width=device-width, initial-scale=1">
20018
20206
  <meta name="farm-deployment-id" content="${escapeHtmlAttribute2(this.getDeploymentId())}">
@@ -20059,6 +20247,7 @@ init_config();
20059
20247
  init_auth_config();
20060
20248
  init_preload();
20061
20249
  init_security();
20250
+ init_config2();
20062
20251
  var defaultDocsConfig = {
20063
20252
  enabled: false,
20064
20253
  entry: "/docs",
@@ -20072,6 +20261,7 @@ var _FarmApp = class _FarmApp {
20072
20261
  constructor(config = {}, viteServer) {
20073
20262
  this.config = this.normalizeConfig(config);
20074
20263
  configureFarmObservability(this.config.observability);
20264
+ _setDefaultFarmThemeConfig(this.config.theme);
20075
20265
  this.i18nRuntime = createFarmI18nRuntime(this.config.i18n);
20076
20266
  _setDefaultFarmI18nRuntime(this.i18nRuntime);
20077
20267
  this.viteServer = viteServer;
@@ -20130,6 +20320,7 @@ var _FarmApp = class _FarmApp {
20130
20320
  security: resolveFarmSecurityConfig(config.security),
20131
20321
  images: resolveFarmImageConfig(config.images),
20132
20322
  performance: resolveFarmPerformanceConfig(config.performance),
20323
+ theme: resolveFarmThemeConfig(config.theme, config.basePath || "/"),
20133
20324
  i18n: isResolvedI18nConfig(config.i18n) ? config.i18n : resolveFarmI18nConfig(config.i18n, {
20134
20325
  root,
20135
20326
  mode: process.env.NODE_ENV === "production" ? "production" : "development"
@@ -21330,6 +21521,15 @@ __name(normalizeMiddlewareModule, "normalizeMiddlewareModule");
21330
21521
 
21331
21522
  // src/middleware/manager.ts
21332
21523
  init_response();
21524
+
21525
+ // src/cli-colors.ts
21526
+ var import_picocolors = __toESM(require("picocolors"));
21527
+ function createCliColors(interactive = process.stdout.isTTY === true) {
21528
+ return import_picocolors.default.createColors(interactive);
21529
+ }
21530
+ __name(createCliColors, "createCliColors");
21531
+
21532
+ // src/middleware/manager.ts
21333
21533
  function isMiddlewareResponse(value) {
21334
21534
  return value instanceof Response;
21335
21535
  }
@@ -21486,23 +21686,16 @@ var _MiddlewareManager = class _MiddlewareManager {
21486
21686
  if (applicable.length === 0) {
21487
21687
  return false;
21488
21688
  }
21489
- try {
21490
- const pc = require("picocolors");
21491
- const middlewarePaths = applicable.map(({ mw }) => mw.path).join(", ");
21492
- const log = [
21493
- pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
21494
- pc.dim("[") + pc.bold(pc.magenta("MIDDLEWARE")) + pc.dim("]"),
21495
- pc.dim("[") + pc.bold(pc.white(method.padEnd(3))) + pc.dim("]"),
21496
- pc.gray("Executing middleware: "),
21497
- pc.gray(pathname),
21498
- pc.dim(` (${(Date.now() - startTime).toFixed(2)}ms)`)
21499
- ].join(" ");
21500
- console.log(log);
21501
- } catch {
21502
- console.log(
21503
- `[FARM] [MIDDLEWARE] [${method}] Executing ${pathname} (${applicable.length} middleware)`
21504
- );
21505
- }
21689
+ const pc = createCliColors();
21690
+ const log = [
21691
+ pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
21692
+ pc.dim("[") + pc.bold(pc.magenta("MIDDLEWARE")) + pc.dim("]"),
21693
+ pc.dim("[") + pc.bold(pc.white(method.padEnd(3))) + pc.dim("]"),
21694
+ pc.gray("Executing middleware: "),
21695
+ pc.gray(pathname),
21696
+ pc.dim(` (${(Date.now() - startTime).toFixed(2)}ms)`)
21697
+ ].join(" ");
21698
+ console.log(log);
21506
21699
  for (const entry of applicable) {
21507
21700
  const { mw, routeMatch } = entry;
21508
21701
  const configMatch = mw.config ? this.matchesConfig(routePathname, mw.config, ctx) : { matched: true };
@@ -22588,6 +22781,11 @@ var import_node_path9 = __toESM(require("path"));
22588
22781
  // src/vite.ts
22589
22782
  init_fonts();
22590
22783
  init_server_http();
22784
+
22785
+ // src/theme/vite.ts
22786
+ init_config2();
22787
+
22788
+ // src/vite.ts
22591
22789
  var ALL_TYPE_ARTIFACTS = {
22592
22790
  routes: true,
22593
22791
  api: true,
@@ -22874,18 +23072,14 @@ function farmPlugin(options = {}, initialPluginManager) {
22874
23072
  let refreshRouteDiscovery = null;
22875
23073
  let workflowHandler = null;
22876
23074
  const logUpdate = /* @__PURE__ */ __name((tag, message) => {
22877
- try {
22878
- const pc = require("picocolors");
22879
- const log = [
22880
- pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
22881
- pc.dim("[") + pc.bold(pc.cyan(tag)) + pc.dim("]"),
22882
- pc.dim("[") + pc.bold(pc.yellow("UPDATE")) + pc.dim("]"),
22883
- pc.gray(message)
22884
- ].join(" ");
22885
- console.log(log);
22886
- } catch {
22887
- console.log(`[FARM] [${tag}] [UPDATE] ${message}`);
22888
- }
23075
+ const pc = createCliColors();
23076
+ const log = [
23077
+ pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
23078
+ pc.dim("[") + pc.bold(pc.cyan(tag)) + pc.dim("]"),
23079
+ pc.dim("[") + pc.bold(pc.yellow("UPDATE")) + pc.dim("]"),
23080
+ pc.gray(message)
23081
+ ].join(" ");
23082
+ console.log(log);
22889
23083
  }, "logUpdate");
22890
23084
  return {
22891
23085
  name: "farm",
@@ -23326,25 +23520,21 @@ window.__FARM_MANIFEST__ = ${inlineValue({
23326
23520
  return;
23327
23521
  }
23328
23522
  logResponse.__last = { key: dedupeKey, ts: now };
23329
- try {
23330
- const pc = require("picocolors");
23331
- let statusColor = pc.green;
23332
- if (status >= 500) statusColor = pc.red;
23333
- else if (status >= 400) statusColor = pc.yellow;
23334
- else if (status >= 300) statusColor = pc.cyan;
23335
- const log = [
23336
- pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
23337
- pc.dim("[") + pc.bold(pc.cyan(tag)) + pc.dim("]"),
23338
- pc.dim("[") + pc.bold(pc.white(method.padEnd(3))) + pc.dim("]"),
23339
- pc.gray(urlPath),
23340
- pc.dim("-"),
23341
- statusColor(status.toString()),
23342
- pc.dim(`(${duration}ms)`)
23343
- ].join(" ");
23344
- console.log(log);
23345
- } catch {
23346
- console.log(`[FARM] [${tag}] [${method}] ${urlPath} - ${status} (${duration}ms)`);
23347
- }
23523
+ const pc = createCliColors();
23524
+ let statusColor = pc.green;
23525
+ if (status >= 500) statusColor = pc.red;
23526
+ else if (status >= 400) statusColor = pc.yellow;
23527
+ else if (status >= 300) statusColor = pc.cyan;
23528
+ const log = [
23529
+ pc.dim("[") + pc.bold(pc.blue("FARM")) + pc.dim("]"),
23530
+ pc.dim("[") + pc.bold(pc.cyan(tag)) + pc.dim("]"),
23531
+ pc.dim("[") + pc.bold(pc.white(method.padEnd(3))) + pc.dim("]"),
23532
+ pc.gray(urlPath),
23533
+ pc.dim("-"),
23534
+ statusColor(status.toString()),
23535
+ pc.dim(`(${duration}ms)`)
23536
+ ].join(" ");
23537
+ console.log(log);
23348
23538
  }, "logResponse");
23349
23539
  server.middlewares.use(
23350
23540
  _withAfterNodeMiddleware(async (req, res, next) => {
@@ -25964,14 +26154,22 @@ async function renderPage(pageData) {
25964
26154
  if (!doc.documentElement || !doc.body) return false;
25965
26155
 
25966
26156
  resetReactRoots();
26157
+ const activeFarmTheme =
26158
+ window.__FARM_THEME__?.snapshot?.resolvedTheme ||
26159
+ document.documentElement.getAttribute('data-theme');
25967
26160
  Array.from(document.documentElement.attributes).forEach(function(attr) {
26161
+ if (attr.name === 'data-theme') return;
25968
26162
  if (!doc.documentElement.hasAttribute(attr.name)) {
25969
26163
  document.documentElement.removeAttribute(attr.name);
25970
26164
  }
25971
26165
  });
25972
26166
  Array.from(doc.documentElement.attributes).forEach(function(attr) {
26167
+ if (attr.name === 'data-theme') return;
25973
26168
  document.documentElement.setAttribute(attr.name, attr.value);
25974
26169
  });
26170
+ if (activeFarmTheme) {
26171
+ document.documentElement.setAttribute('data-theme', activeFarmTheme);
26172
+ }
25975
26173
 
25976
26174
  document.head.innerHTML = doc.head ? doc.head.innerHTML : '';
25977
26175
  document.body.innerHTML = doc.body.innerHTML;
@@ -25980,6 +26178,7 @@ async function renderPage(pageData) {
25980
26178
 
25981
26179
  setTimeout(function() {
25982
26180
  Array.from(document.querySelectorAll('script')).forEach(function(script) {
26181
+ if (script.id === 'farm-theme-script') return;
25983
26182
  const freshScript = document.createElement('script');
25984
26183
  Array.from(script.attributes).forEach(function(attr) {
25985
26184
  freshScript.setAttribute(attr.name, attr.value);