@farm.js/core 0.1.0-beta.22 → 0.1.0-beta.24

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 (132) hide show
  1. package/dist/agent-runtime.d.mts +2 -1
  2. package/dist/agent-runtime.d.ts +2 -1
  3. package/dist/{app-DwsTpyNZ.d.mts → app-DrFCUMHY.d.mts} +6 -3
  4. package/dist/app-markdown.d.mts +2 -1
  5. package/dist/app-markdown.d.ts +2 -1
  6. package/dist/{app-BB8GCH1g.d.ts → app-pwvKG2B1.d.ts} +6 -3
  7. package/dist/chunk-4IVNW5QD.mjs +82 -0
  8. package/dist/chunk-4IVNW5QD.mjs.map +1 -0
  9. package/dist/chunk-D42BNPZH.mjs +79 -0
  10. package/dist/chunk-D42BNPZH.mjs.map +1 -0
  11. package/dist/{chunk-LLPN5SEZ.mjs → chunk-DVPRBMU2.mjs} +2 -2
  12. package/dist/chunk-GQVQESLY.mjs +25 -0
  13. package/dist/chunk-GQVQESLY.mjs.map +1 -0
  14. package/dist/chunk-H53KVQUU.mjs +48 -0
  15. package/dist/chunk-H53KVQUU.mjs.map +1 -0
  16. package/dist/chunk-HCGQYYHI.mjs +1 -0
  17. package/dist/chunk-HCGQYYHI.mjs.map +1 -0
  18. package/dist/{chunk-XBKXKJX5.mjs → chunk-HVJHNKSP.mjs} +220 -63
  19. package/dist/chunk-HVJHNKSP.mjs.map +1 -0
  20. package/dist/{chunk-ZP73P4VR.mjs → chunk-HXE4VGH2.mjs} +79 -20
  21. package/dist/chunk-HXE4VGH2.mjs.map +1 -0
  22. package/dist/{chunk-UCYWGN2P.mjs → chunk-OHNSROHS.mjs} +1 -1
  23. package/dist/{chunk-FRPWCMMG.mjs → chunk-SBWOTAX4.mjs} +63 -2
  24. package/dist/chunk-SBWOTAX4.mjs.map +1 -0
  25. package/dist/{chunk-DAUR3WUZ.mjs → chunk-WO466YX5.mjs} +2 -2
  26. package/dist/chunk-WO466YX5.mjs.map +1 -0
  27. package/dist/{chunk-CEVMYGDL.mjs → chunk-YD5IRKVS.mjs} +13 -9
  28. package/dist/chunk-YD5IRKVS.mjs.map +1 -0
  29. package/dist/{client-plugins-QQntVkrv.d.mts → client-plugins-CCilIb_G.d.mts} +6 -2
  30. package/dist/{client-plugins-CbRum1fj.d.ts → client-plugins-DuuleQKk.d.ts} +6 -2
  31. package/dist/client-plugins.d.mts +2 -1
  32. package/dist/client-plugins.d.ts +2 -1
  33. package/dist/client.cjs +122 -35
  34. package/dist/client.cjs.map +1 -1
  35. package/dist/client.d.mts +2 -0
  36. package/dist/client.d.ts +2 -0
  37. package/dist/client.mjs +13 -2
  38. package/dist/config.d.mts +2 -1
  39. package/dist/config.d.ts +2 -1
  40. package/dist/{devtools-52FYXIEK.mjs → devtools-326RBQCN.mjs} +7 -6
  41. package/dist/{devtools-52FYXIEK.mjs.map → devtools-326RBQCN.mjs.map} +1 -1
  42. package/dist/docs.cjs.map +1 -1
  43. package/dist/docs.mjs +6 -5
  44. package/dist/index.cjs +910 -414
  45. package/dist/index.cjs.map +1 -1
  46. package/dist/index.d.mts +10 -7
  47. package/dist/index.d.ts +10 -7
  48. package/dist/index.mjs +66 -49
  49. package/dist/index.mjs.map +1 -1
  50. package/dist/integrations.d.mts +2 -1
  51. package/dist/integrations.d.ts +2 -1
  52. package/dist/internal/build-runtime.cjs +720 -297
  53. package/dist/internal/build-runtime.cjs.map +1 -1
  54. package/dist/internal/build-runtime.d.mts +4 -3
  55. package/dist/internal/build-runtime.d.ts +4 -3
  56. package/dist/internal/build-runtime.mjs +15 -12
  57. package/dist/internal/config-runtime.cjs +41 -0
  58. package/dist/internal/config-runtime.cjs.map +1 -1
  59. package/dist/internal/config-runtime.d.mts +3 -2
  60. package/dist/internal/config-runtime.d.ts +3 -2
  61. package/dist/internal/config-runtime.mjs +5 -4
  62. package/dist/internal/production-runtime.cjs +178 -0
  63. package/dist/internal/production-runtime.cjs.map +1 -1
  64. package/dist/internal/production-runtime.d.mts +20 -6
  65. package/dist/internal/production-runtime.d.ts +20 -6
  66. package/dist/internal/production-runtime.mjs +13 -1
  67. package/dist/internal/production-runtime.mjs.map +1 -1
  68. package/dist/{metadata-B5jBJHq1.d.ts → metadata-DyPRG0wX.d.ts} +1 -1
  69. package/dist/{metadata-BxOJ4FJl.d.mts → metadata-_GHcAySx.d.mts} +1 -1
  70. package/dist/middleware.d.mts +4 -3
  71. package/dist/middleware.d.ts +4 -3
  72. package/dist/plugin.cjs +461 -155
  73. package/dist/plugin.cjs.map +1 -1
  74. package/dist/plugin.d.mts +2 -1
  75. package/dist/plugin.d.ts +2 -1
  76. package/dist/plugin.mjs +11 -8
  77. package/dist/{production-runtime-Bxua86uR.d.mts → production-runtime-C4cO3esK.d.mts} +1 -1
  78. package/dist/{production-runtime-CZqXjRVi.d.ts → production-runtime-DrEy8kBO.d.ts} +1 -1
  79. package/dist/{request-7V0GaZK_.d.mts → request-B2PpOxYK.d.mts} +1 -1
  80. package/dist/{request-B5XYBv5a.d.ts → request-D40lt6aN.d.ts} +1 -1
  81. package/dist/request.d.mts +3 -2
  82. package/dist/request.d.ts +3 -2
  83. package/dist/routes.d.mts +2 -1
  84. package/dist/routes.d.ts +2 -1
  85. package/dist/server-plugins.d.mts +3 -2
  86. package/dist/server-plugins.d.ts +3 -2
  87. package/dist/server.cjs +490 -167
  88. package/dist/server.cjs.map +1 -1
  89. package/dist/server.d.mts +8 -6
  90. package/dist/server.d.ts +8 -6
  91. package/dist/server.mjs +20 -11
  92. package/dist/server.mjs.map +1 -1
  93. package/dist/testing.d.mts +2 -1
  94. package/dist/testing.d.ts +2 -1
  95. package/dist/theme/client.cjs +115 -0
  96. package/dist/theme/client.cjs.map +1 -0
  97. package/dist/theme/client.d.mts +17 -0
  98. package/dist/theme/client.d.ts +17 -0
  99. package/dist/theme/client.mjs +16 -0
  100. package/dist/theme/client.mjs.map +1 -0
  101. package/dist/theme/index.cjs +71 -0
  102. package/dist/theme/index.cjs.map +1 -0
  103. package/dist/theme/index.d.mts +6 -0
  104. package/dist/theme/index.d.ts +6 -0
  105. package/dist/theme/index.mjs +9 -0
  106. package/dist/theme/index.mjs.map +1 -0
  107. package/dist/theme/server.cjs +191 -0
  108. package/dist/theme/server.cjs.map +1 -0
  109. package/dist/theme/server.d.mts +8 -0
  110. package/dist/theme/server.d.ts +8 -0
  111. package/dist/theme/server.mjs +18 -0
  112. package/dist/theme/server.mjs.map +1 -0
  113. package/dist/types-CsR8fpgF.d.mts +30 -0
  114. package/dist/types-CsR8fpgF.d.ts +30 -0
  115. package/dist/{utils-xTFxzu47.d.ts → utils-3sQgfkya.d.ts} +1 -1
  116. package/dist/{utils-s9pN0Yep.d.mts → utils-Bop7bly-.d.mts} +1 -1
  117. package/dist/version.cjs +1 -1
  118. package/dist/version.cjs.map +1 -1
  119. package/dist/version.mjs +1 -1
  120. package/dist/vite.cjs +485 -157
  121. package/dist/vite.cjs.map +1 -1
  122. package/dist/vite.d.mts +2 -1
  123. package/dist/vite.d.ts +2 -1
  124. package/dist/vite.mjs +11 -8
  125. package/package.json +25 -1
  126. package/dist/chunk-CEVMYGDL.mjs.map +0 -1
  127. package/dist/chunk-DAUR3WUZ.mjs.map +0 -1
  128. package/dist/chunk-FRPWCMMG.mjs.map +0 -1
  129. package/dist/chunk-XBKXKJX5.mjs.map +0 -1
  130. package/dist/chunk-ZP73P4VR.mjs.map +0 -1
  131. /package/dist/{chunk-LLPN5SEZ.mjs.map → chunk-DVPRBMU2.mjs.map} +0 -0
  132. /package/dist/{chunk-UCYWGN2P.mjs.map → chunk-OHNSROHS.mjs.map} +0 -0
@@ -1,15 +1,15 @@
1
- import {
2
- withProductionNodeEnv
3
- } from "./chunk-4S3ORGFA.mjs";
4
1
  import {
5
2
  canUseRolldownForRouteDiscovery,
6
3
  loadFarmProductionVite
7
4
  } from "./chunk-SL6HTIOK.mjs";
5
+ import {
6
+ withProductionNodeEnv
7
+ } from "./chunk-4S3ORGFA.mjs";
8
8
  import {
9
9
  FARM_DOCS_LAST_MODIFIED_MANIFEST,
10
10
  createFarmDocsLastModifiedManifest,
11
11
  getFarmDocsRouteTypeEntries
12
- } from "./chunk-LLPN5SEZ.mjs";
12
+ } from "./chunk-DVPRBMU2.mjs";
13
13
  import {
14
14
  generateFarmDocsSearchClientRuntime,
15
15
  isFarmDocsSearchEnabled,
@@ -18,7 +18,7 @@ import {
18
18
  import {
19
19
  hasCustomFarmRouteContext,
20
20
  resolveDeployOutputPath
21
- } from "./chunk-CEVMYGDL.mjs";
21
+ } from "./chunk-YD5IRKVS.mjs";
22
22
  import {
23
23
  PluginManager
24
24
  } from "./chunk-A53LP5QG.mjs";
@@ -26,6 +26,7 @@ import {
26
26
  DEFAULT_NOT_FOUND_STYLES,
27
27
  createFarmApp,
28
28
  createFarmSourceAlias,
29
+ createFarmThemeCssPlugin,
29
30
  farmFontImportsPlugin,
30
31
  generateFarmClientPluginEntryCode,
31
32
  generateFarmTypeArtifacts,
@@ -33,7 +34,7 @@ import {
33
34
  mergeFarmFontCss,
34
35
  mergeFarmViteConfig,
35
36
  resolveRouteRenderingConfigFromFile
36
- } from "./chunk-XBKXKJX5.mjs";
37
+ } from "./chunk-HVJHNKSP.mjs";
37
38
  import {
38
39
  farmEnvironmentFunctionsPlugin
39
40
  } from "./chunk-V6WE6JSZ.mjs";
@@ -47,9 +48,6 @@ import {
47
48
  import {
48
49
  getFarmAppDirectories
49
50
  } from "./chunk-74YTBPTY.mjs";
50
- import {
51
- isFarmMarkdownPageFile
52
- } from "./chunk-ZVWA4ZQ3.mjs";
53
51
  import {
54
52
  applyFarmWorkflowVercelCrons,
55
53
  prepareFarmWorkflowsForNitro
@@ -60,6 +58,9 @@ import {
60
58
  mergeScheduledTasks,
61
59
  prepareFarmCronForNitro
62
60
  } from "./chunk-GXASWWJU.mjs";
61
+ import {
62
+ isFarmMarkdownPageFile
63
+ } from "./chunk-ZVWA4ZQ3.mjs";
63
64
  import {
64
65
  getFarmIntegrationPluginServerRuntime
65
66
  } from "./chunk-CRN3AH35.mjs";
@@ -1256,6 +1257,11 @@ async function buildClient(productionVite, config, root, srcDir, outputDir, page
1256
1257
  const applicableClientLayouts = clientLayouts.filter(
1257
1258
  (layout) => layout.shouldHydrate && layoutAppliesToRoute(layout.pattern, route.pattern)
1258
1259
  );
1260
+ if (metadata.suppressedAsyncHydration) {
1261
+ logger.warn(
1262
+ `\u26A0\uFE0F ${route.pattern} is an async server component that imports client components; React cannot hydrate async components, so the route stays server-rendered and its client imports are not interactive.`
1263
+ );
1264
+ }
1259
1265
  if (metadata.shouldHydrate || applicableClientLayouts.length > 0) {
1260
1266
  const relativePath = route.modulePath.replace(root, "").replace(/^\//, "");
1261
1267
  const hydrationStrategies = [
@@ -1410,6 +1416,7 @@ async function buildClient(productionVite, config, root, srcDir, outputDir, page
1410
1416
  }
1411
1417
  },
1412
1418
  plugins: [
1419
+ createFarmThemeCssPlugin(config.theme, config.basePath),
1413
1420
  ...tailwindVitePlugin ? [tailwindVitePlugin] : [],
1414
1421
  // Plugin to redirect @farm.js/core imports to client-only exports
1415
1422
  {
@@ -2132,6 +2139,13 @@ async function createMatchedHydrationElement(matched, pathname, searchParams) {
2132
2139
  if (matched.route.pageShouldHydrate) {
2133
2140
  const Component = await loadRouteComponent(matched.route);
2134
2141
  if (!Component) return null;
2142
+ if (typeof Component === "function" && Component.constructor && Component.constructor.name === "AsyncFunction") {
2143
+ console.warn(
2144
+ "[Farm.js] Skipping hydration for " + pathname +
2145
+ ": async server components cannot run in the browser. Server-rendered HTML is preserved."
2146
+ );
2147
+ return null;
2148
+ }
2135
2149
  const props = { params: params, searchParams: Promise.resolve(searchParams) };
2136
2150
  pageElement = React.createElement(Component, props);
2137
2151
  } else if (hydrateLayouts) {
@@ -3028,6 +3042,7 @@ async function buildSSRInMemory(productionVite, config, root, routeManager, apiR
3028
3042
  __FARM_PUBLIC_ENV__: JSON.stringify(config.env?.public || {})
3029
3043
  },
3030
3044
  plugins: [
3045
+ createFarmThemeCssPlugin(config.theme, config.basePath),
3031
3046
  ...tailwindVitePlugin ? [tailwindVitePlugin] : [],
3032
3047
  ...!useExternalMetadataImageRuntime && metadataImageRoutes.some((image) => image.sourceType === "module") ? [createMetadataImageWasmPlugin()] : [],
3033
3048
  {
@@ -3241,15 +3256,19 @@ function generateVirtualEntryCode(apiRoutes, pageRoutes, layoutRoutes, routeSlot
3241
3256
  _runWithCurrentRequest,
3242
3257
  _runWithMiddlewareContext,
3243
3258
  _runWithMiddlewareData,
3259
+ _setDefaultFarmThemeConfig,
3244
3260
  addMetadataImageReference,
3261
+ applyFarmThemeDocument,
3245
3262
  appendFarmLinkHeader,
3246
3263
  applyProductionMiddlewareHeaders,
3247
3264
  configureFarmCache,
3248
3265
  configureFarmObservability,
3249
3266
  createFarmCacheKey,
3267
+ createFarmThemeDocumentParts,
3250
3268
  createFarmLocaleCookie,
3251
3269
  createFarmProductionLifecycle,
3252
3270
  createProductionMiddlewareRunner,
3271
+ getTheme as getFarmTheme,
3253
3272
  emitFarmEvent,
3254
3273
  getFarmDataCache,
3255
3274
  getFarmLocaleVaryHeaders,
@@ -3444,6 +3463,8 @@ configureFarmObservability(farmObservabilityConfig);
3444
3463
  configureFarmCache(farmResolvedRuntimeConfig.cache);
3445
3464
  const farmI18nConfig = ${JSON.stringify(config.i18n)};
3446
3465
  const farmServerConfig = ${JSON.stringify(config.server)};
3466
+ const farmThemeConfig = ${JSON.stringify(config.theme)};
3467
+ _setDefaultFarmThemeConfig(farmThemeConfig);
3447
3468
  export const farmProductionLifecycle = createFarmProductionLifecycle({
3448
3469
  server: farmServerConfig,
3449
3470
  start: () => farmPluginRuntime?.startRuntime(),
@@ -5280,7 +5301,13 @@ async function handleFarmRequestInContext(
5280
5301
  !farmI18nSnapshot &&
5281
5302
  !pprCacheKey
5282
5303
  ) {
5304
+ const farmThemeDocument = createFarmThemeDocumentParts(
5305
+ farmThemeConfig,
5306
+ farmResolvedRuntimeConfig.basePath,
5307
+ getFarmTheme(request)
5308
+ );
5283
5309
  const streamPrefix = '<!DOCTYPE html>\\n<html lang="en">\\n<head>\\n' +
5310
+ farmThemeDocument.head + '\\n' +
5284
5311
  ' <meta charset="utf-8">\\n' +
5285
5312
  ' <meta name="viewport" content="width=device-width, initial-scale=1">\\n' +
5286
5313
  (hasFavicon ? '' : ' <link rel="icon" href="data:,">\\n') +
@@ -5296,9 +5323,13 @@ async function handleFarmRequestInContext(
5296
5323
  ) + '\\n' +
5297
5324
  ' <script type="module" src="/farm-client.js"></script>\\n' +
5298
5325
  '</body>\\n</html>';
5326
+ const themedStreamPrefix = streamPrefix.replace(
5327
+ '<html lang="en">',
5328
+ '<html lang="en"' + farmThemeDocument.attributes + '>'
5329
+ );
5299
5330
  const streamedDocument = createFarmDocumentStream(
5300
5331
  renderedPage.stream,
5301
- streamPrefix,
5332
+ themedStreamPrefix,
5302
5333
  streamSuffix,
5303
5334
  function() {
5304
5335
  if (pprBypassReason === "refresh") {
@@ -5381,6 +5412,12 @@ async function handleFarmRequestInContext(
5381
5412
  </html>\`;
5382
5413
  }
5383
5414
  fullHtml = applyFarmI18nDocument(fullHtml, pathname, farmI18nSnapshot);
5415
+ fullHtml = applyFarmThemeDocument(
5416
+ fullHtml,
5417
+ farmThemeConfig,
5418
+ farmResolvedRuntimeConfig.basePath,
5419
+ getFarmTheme(request)
5420
+ );
5384
5421
 
5385
5422
  if (pageStatus === 200 && pprCacheKey && request.method.toUpperCase() !== "HEAD") {
5386
5423
  await pprShellCache.setAsync(
@@ -5507,10 +5544,15 @@ async function handleFarmRequestInContext(
5507
5544
  const errorHtml = ${hasMiddlewareRuntime ? `await _runWithMiddlewareData(middlewareData, () =>
5508
5545
  _runWithMiddlewareContext(middlewareContext, renderErrorElement)
5509
5546
  )` : "await renderErrorElement()"};
5510
- const errorDocument = applyFarmI18nDocument(
5511
- createFarmErrorDocument(errorHtml, "Application Error"),
5512
- pathname,
5513
- getFarmI18nSnapshot()
5547
+ const errorDocument = applyFarmThemeDocument(
5548
+ applyFarmI18nDocument(
5549
+ createFarmErrorDocument(errorHtml, "Application Error"),
5550
+ pathname,
5551
+ getFarmI18nSnapshot()
5552
+ ),
5553
+ farmThemeConfig,
5554
+ farmResolvedRuntimeConfig.basePath,
5555
+ getFarmTheme(request)
5514
5556
  );
5515
5557
  emitFarmEvent({
5516
5558
  type: "render.complete",
@@ -5535,10 +5577,15 @@ async function handleFarmRequestInContext(
5535
5577
  const errorMessage = "Internal Server Error";
5536
5578
  const fallbackHtml = '<main><h1>Application Error</h1><p>' +
5537
5579
  escapeFarmHtmlAttribute(errorMessage) + '</p></main>';
5538
- const fallbackDocument = applyFarmI18nDocument(
5539
- createFarmErrorDocument(fallbackHtml, "Application Error"),
5540
- pathname,
5541
- getFarmI18nSnapshot()
5580
+ const fallbackDocument = applyFarmThemeDocument(
5581
+ applyFarmI18nDocument(
5582
+ createFarmErrorDocument(fallbackHtml, "Application Error"),
5583
+ pathname,
5584
+ getFarmI18nSnapshot()
5585
+ ),
5586
+ farmThemeConfig,
5587
+ farmResolvedRuntimeConfig.basePath,
5588
+ getFarmTheme(request)
5542
5589
  );
5543
5590
  return applyProductionMiddlewareHeaders(new Response(
5544
5591
  fallbackDocument,
@@ -5636,6 +5683,12 @@ async function handleFarmRequestInContext(
5636
5683
  </html>\`;
5637
5684
  }
5638
5685
  fullHtml = applyFarmI18nDocument(fullHtml, pathname, getFarmI18nSnapshot());
5686
+ fullHtml = applyFarmThemeDocument(
5687
+ fullHtml,
5688
+ farmThemeConfig,
5689
+ farmResolvedRuntimeConfig.basePath,
5690
+ getFarmTheme(request)
5691
+ );
5639
5692
 
5640
5693
  emitFarmEvent({
5641
5694
  type: "render.complete",
@@ -5654,8 +5707,14 @@ async function handleFarmRequestInContext(
5654
5707
  }), middlewareHeaders);
5655
5708
  } catch (error) {
5656
5709
  console.error("404 render error:", error);
5657
- return applyProductionMiddlewareHeaders(new Response(
5710
+ const fallbackDocument = applyFarmThemeDocument(
5658
5711
  \`<!DOCTYPE html><html><head><title>404</title></head><body><h1>404 - Page Not Found</h1><p>The page \${pathname} doesn't exist.</p><a href="/">Go Home</a></body></html>\`,
5712
+ farmThemeConfig,
5713
+ farmResolvedRuntimeConfig.basePath,
5714
+ getFarmTheme(request)
5715
+ );
5716
+ return applyProductionMiddlewareHeaders(new Response(
5717
+ fallbackDocument,
5659
5718
  {
5660
5719
  status: 404,
5661
5720
  headers: { "Content-Type": "text/html", "x-farm-preload-buffered": "1" },
@@ -6992,4 +7051,4 @@ __name(buildNitro, "buildNitro");
6992
7051
  export {
6993
7052
  build
6994
7053
  };
6995
- //# sourceMappingURL=chunk-ZP73P4VR.mjs.map
7054
+ //# sourceMappingURL=chunk-HXE4VGH2.mjs.map