@farm.js/core 0.1.0-beta.75 → 0.1.0-beta.77

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 (57) hide show
  1. package/dist/agent-runtime.cjs +7 -0
  2. package/dist/agent-runtime.cjs.map +1 -1
  3. package/dist/agent-runtime.mjs +7 -0
  4. package/dist/agent-runtime.mjs.map +1 -1
  5. package/dist/{app-BkCh7H09.d.mts → app-Bq-Tr90H.d.mts} +2 -0
  6. package/dist/{app-CZIEOZIa.d.ts → app-CQ6uhLEj.d.ts} +2 -0
  7. package/dist/{chunk-S6FO7OXA.mjs → chunk-BF47GPQF.mjs} +59 -8
  8. package/dist/chunk-BF47GPQF.mjs.map +1 -0
  9. package/dist/{chunk-DKD7DGTE.mjs → chunk-KDKXMAIQ.mjs} +2 -2
  10. package/dist/{chunk-UGK7TW2V.mjs → chunk-P57PPOQL.mjs} +18 -6
  11. package/dist/chunk-P57PPOQL.mjs.map +1 -0
  12. package/dist/{chunk-IIKQBOGZ.mjs → chunk-PZLBMD63.mjs} +2 -2
  13. package/dist/{chunk-IIKQBOGZ.mjs.map → chunk-PZLBMD63.mjs.map} +1 -1
  14. package/dist/{chunk-TWN6IBIL.mjs → chunk-UBDJMY7B.mjs} +2 -2
  15. package/dist/client/lifecycle.mjs +2 -2
  16. package/dist/client-plugins.cjs +1 -1
  17. package/dist/client-plugins.cjs.map +1 -1
  18. package/dist/client-plugins.mjs +2 -2
  19. package/dist/client.cjs +1 -1
  20. package/dist/client.cjs.map +1 -1
  21. package/dist/client.mjs +2 -2
  22. package/dist/index.cjs +82 -12
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.mts +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.mjs +5 -5
  27. package/dist/internal/build-runtime.cjs +65 -7
  28. package/dist/internal/build-runtime.cjs.map +1 -1
  29. package/dist/internal/build-runtime.mjs +3 -3
  30. package/dist/internal/client-runtime.cjs +1 -1
  31. package/dist/internal/client-runtime.cjs.map +1 -1
  32. package/dist/internal/client-runtime.mjs +2 -2
  33. package/dist/internal/product-telemetry-runtime.cjs +1 -1
  34. package/dist/internal/product-telemetry-runtime.cjs.map +1 -1
  35. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  36. package/dist/plugin.cjs +58 -7
  37. package/dist/plugin.cjs.map +1 -1
  38. package/dist/plugin.mjs +2 -2
  39. package/dist/server-plugins.cjs +17 -5
  40. package/dist/server-plugins.cjs.map +1 -1
  41. package/dist/server-plugins.mjs +1 -1
  42. package/dist/server.cjs +75 -12
  43. package/dist/server.cjs.map +1 -1
  44. package/dist/server.d.mts +1 -1
  45. package/dist/server.d.ts +1 -1
  46. package/dist/server.mjs +3 -3
  47. package/dist/version.cjs +1 -1
  48. package/dist/version.cjs.map +1 -1
  49. package/dist/version.mjs +1 -1
  50. package/dist/vite.cjs +58 -7
  51. package/dist/vite.cjs.map +1 -1
  52. package/dist/vite.mjs +2 -2
  53. package/package.json +1 -1
  54. package/dist/chunk-S6FO7OXA.mjs.map +0 -1
  55. package/dist/chunk-UGK7TW2V.mjs.map +0 -1
  56. /package/dist/{chunk-DKD7DGTE.mjs.map → chunk-KDKXMAIQ.mjs.map} +0 -0
  57. /package/dist/{chunk-TWN6IBIL.mjs.map → chunk-UBDJMY7B.mjs.map} +0 -0
package/dist/client.mjs CHANGED
@@ -62,7 +62,7 @@ import {
62
62
  createClientPluginManager,
63
63
  installChunkErrorRecovery,
64
64
  isChunkLoadError
65
- } from "./chunk-TWN6IBIL.mjs";
65
+ } from "./chunk-UBDJMY7B.mjs";
66
66
  import "./chunk-RCNUKRBF.mjs";
67
67
  import "./chunk-GQVQESLY.mjs";
68
68
  import {
@@ -82,7 +82,7 @@ import "./chunk-RBRLLZL5.mjs";
82
82
  import "./chunk-WZ5QFROO.mjs";
83
83
  import "./chunk-ZRBCBOEX.mjs";
84
84
  import "./chunk-FXG2PS27.mjs";
85
- import "./chunk-IIKQBOGZ.mjs";
85
+ import "./chunk-PZLBMD63.mjs";
86
86
  import "./chunk-44ZCFSKE.mjs";
87
87
  import "./chunk-CGILA3WO.mjs";
88
88
  export {
package/dist/index.cjs CHANGED
@@ -11661,6 +11661,31 @@ var init_route_manager = __esm({
11661
11661
  }
11662
11662
  });
11663
11663
 
11664
+ // src/server/dev-styles.ts
11665
+ function collectDevStylesheetUrls(modules) {
11666
+ const seen = /* @__PURE__ */ new Set();
11667
+ for (const mod of modules) {
11668
+ const id = mod.id ?? mod.file ?? "";
11669
+ if (!STYLE_EXTENSIONS.test(id)) continue;
11670
+ if (id.includes(".module.")) continue;
11671
+ const url = mod.url;
11672
+ if (!url || !url.startsWith("/")) continue;
11673
+ const bare = url.split("?")[0];
11674
+ if (bare === ALREADY_LINKED) continue;
11675
+ seen.add(bare);
11676
+ }
11677
+ return [...seen].sort();
11678
+ }
11679
+ var STYLE_EXTENSIONS, ALREADY_LINKED;
11680
+ var init_dev_styles = __esm({
11681
+ "src/server/dev-styles.ts"() {
11682
+ "use strict";
11683
+ STYLE_EXTENSIONS = /\.(css|scss|sass|less|styl|stylus)(?:$|\?)/;
11684
+ ALREADY_LINKED = "/src/app/globals.css";
11685
+ __name(collectDevStylesheetUrls, "collectDevStylesheetUrls");
11686
+ }
11687
+ });
11688
+
11664
11689
  // src/server/full-document.ts
11665
11690
  function stripContentsWrappers(markup) {
11666
11691
  let out = markup.replace(/^\s+/, "");
@@ -15777,7 +15802,7 @@ var init_server3 = __esm({
15777
15802
  var version;
15778
15803
  var init_package = __esm({
15779
15804
  "package.json"() {
15780
- version = "0.1.0-beta.75";
15805
+ version = "0.1.0-beta.77";
15781
15806
  }
15782
15807
  });
15783
15808
 
@@ -15942,6 +15967,11 @@ var init_server4 = __esm({
15942
15967
  });
15943
15968
 
15944
15969
  // src/server/renderer.ts
15970
+ function shouldServePrerenderedPage(nodeEnv, method) {
15971
+ if (nodeEnv !== "production") return false;
15972
+ const normalizedMethod = (method || "GET").toUpperCase();
15973
+ return normalizedMethod === "GET" || normalizedMethod === "HEAD";
15974
+ }
15945
15975
  function formatSSGManifestError(error) {
15946
15976
  return error instanceof Error ? error.message : String(error);
15947
15977
  }
@@ -16139,6 +16169,7 @@ var init_renderer2 = __esm({
16139
16169
  fs4 = __toESM(require("fs"));
16140
16170
  path12 = __toESM(require("path"));
16141
16171
  init_utils();
16172
+ init_dev_styles();
16142
16173
  init_full_document();
16143
16174
  init_client_component();
16144
16175
  import_stream = require("stream");
@@ -16175,6 +16206,7 @@ var init_renderer2 = __esm({
16175
16206
  init_error_diagnostics();
16176
16207
  cachedClerkProvider = null;
16177
16208
  importRuntimeModule = new Function("specifier", "return import(specifier);");
16209
+ __name(shouldServePrerenderedPage, "shouldServePrerenderedPage");
16178
16210
  __name(formatSSGManifestError, "formatSSGManifestError");
16179
16211
  __name(parseSSGManifest, "parseSSGManifest");
16180
16212
  warnedSuppressedAsyncHydrationModules = /* @__PURE__ */ new Set();
@@ -16256,6 +16288,18 @@ var init_renderer2 = __esm({
16256
16288
  pageElement
16257
16289
  );
16258
16290
  }
16291
+ /// Stylesheets the app imported through JS (fontsource packages, component
16292
+ /// CSS) that the document must link alongside globals.css — see #658.
16293
+ collectDevStyleHrefs() {
16294
+ const graph = this.viteServer?.moduleGraph;
16295
+ if (!graph) return [];
16296
+ return collectDevStylesheetUrls(graph.idToModuleMap.values());
16297
+ }
16298
+ collectDevStyleLinks() {
16299
+ return this.collectDevStyleHrefs().map(
16300
+ (href) => `<link rel="stylesheet" href="${escapeHtmlAttribute2(href)}">`
16301
+ );
16302
+ }
16259
16303
  createLayoutBoundary(pattern, layoutElement) {
16260
16304
  return this.rendererRuntime.createElement(
16261
16305
  "div",
@@ -16688,7 +16732,7 @@ var init_renderer2 = __esm({
16688
16732
  return;
16689
16733
  }
16690
16734
  }
16691
- if (process.env.NODE_ENV === "production") {
16735
+ if (shouldServePrerenderedPage(process.env.NODE_ENV, req.method)) {
16692
16736
  const ssgPage = await this.shouldServeSSG(pathname);
16693
16737
  if (ssgPage) {
16694
16738
  const served = await this.serveSSGPage(req, res, ssgPage);
@@ -17470,7 +17514,11 @@ var init_renderer2 = __esm({
17470
17514
  {
17471
17515
  tag: "link",
17472
17516
  attrs: { rel: "stylesheet", href: "/src/app/globals.css" }
17473
- }
17517
+ },
17518
+ ...this.collectDevStyleHrefs().map((href) => ({
17519
+ tag: "link",
17520
+ attrs: { rel: "stylesheet", href }
17521
+ }))
17474
17522
  ]
17475
17523
  };
17476
17524
  for (const routeEntry of manifest.routes) {
@@ -17566,6 +17614,7 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
17566
17614
  rendererHead,
17567
17615
  renderFarmFontDevHead(this.config.root || process.cwd()),
17568
17616
  `<link rel="stylesheet" href="/src/app/globals.css">`,
17617
+ ...this.collectDevStyleLinks(),
17569
17618
  `<script type="module" src="/@vite/client"></script>`,
17570
17619
  rendererHydrationScript,
17571
17620
  bootstrapScript
@@ -17584,7 +17633,8 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
17584
17633
  ${documentTitleTag}${metaTags}${alternateTags}${rendererHead ? `
17585
17634
  ${rendererHead}` : ""}
17586
17635
  ${renderFarmFontDevHead(this.config.root || process.cwd())}
17587
- <link rel="stylesheet" href="/src/app/globals.css">
17636
+ <link rel="stylesheet" href="/src/app/globals.css">${this.collectDevStyleLinks().map((l) => `
17637
+ ${l}`).join("")}
17588
17638
  <script type="module" src="/@vite/client"></script>
17589
17639
  ${rendererHydrationScript}
17590
17640
  ${bootstrapScript}
@@ -17649,7 +17699,11 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
17649
17699
  {
17650
17700
  tag: "link",
17651
17701
  attrs: { rel: "stylesheet", href: "/src/app/globals.css" }
17652
- }
17702
+ },
17703
+ ...this.collectDevStyleHrefs().map((href) => ({
17704
+ tag: "link",
17705
+ attrs: { rel: "stylesheet", href }
17706
+ }))
17653
17707
  ]
17654
17708
  };
17655
17709
  for (const routeEntry of manifest.routes) {
@@ -17736,6 +17790,7 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
17736
17790
  { style: { display: "contents" } },
17737
17791
  element
17738
17792
  );
17793
+ const devStyleLinks = this.collectDevStyleLinks();
17739
17794
  const { pipe } = renderToPipeableStream2(streamRoot, {
17740
17795
  onShellReady() {
17741
17796
  const shellReadyMs = Date.now() - streamStartTime;
@@ -17757,7 +17812,8 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
17757
17812
  ${hasFavicon ? "" : '<link rel="icon" href="data:,">'}
17758
17813
  <title>${title}</title>${metaTags}${i18nAlternateTags}
17759
17814
  ${fontHead}
17760
- <link rel="stylesheet" href="/src/app/globals.css" />
17815
+ <link rel="stylesheet" href="/src/app/globals.css" />${devStyleLinks.map((l) => `
17816
+ ${l}`).join("")}
17761
17817
  <script type="module" src="/@vite/client"></script>
17762
17818
  ${propsScript}
17763
17819
  ${hydrationClickQueueScript}
@@ -17984,6 +18040,7 @@ ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue2(i18nSnapshot)};
17984
18040
  alternateLinks,
17985
18041
  fontHead,
17986
18042
  `<link rel="stylesheet" href="/src/app/globals.css" />`,
18043
+ ...this.collectDevStyleLinks(),
17987
18044
  `<script type="module" src="/@vite/client"></script>`,
17988
18045
  rendererHydrationScript,
17989
18046
  integrationManifestScript
@@ -18001,7 +18058,8 @@ ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue2(i18nSnapshot)};
18001
18058
  <link rel="icon" href="data:,">
18002
18059
  <title>${escapeHtmlAttribute2(documentTitle)}</title>${alternateLinks}
18003
18060
  ${fontHead}
18004
- <link rel="stylesheet" href="/src/app/globals.css" />
18061
+ <link rel="stylesheet" href="/src/app/globals.css" />${this.collectDevStyleLinks().map((l) => `
18062
+ ${l}`).join("")}
18005
18063
  <script type="module" src="/@vite/client"></script>
18006
18064
  ${rendererHydrationScript}
18007
18065
  ${integrationManifestScript}
@@ -36257,17 +36315,18 @@ function selectEncoding(header) {
36257
36315
  return brotli >= gzip ? "br" : "gzip";
36258
36316
  }
36259
36317
  __name(selectEncoding, "selectEncoding");
36260
- function canCompress(request, response) {
36261
- if (request.method === "HEAD" || !response.body || response.status === 204 || response.status === 205 || response.status === 304 || response.headers.has("content-encoding") || response.headers.has("content-range") || response.headers.get("cache-control")?.toLowerCase().includes("no-transform")) {
36318
+ function isCompressionEligible(request, response) {
36319
+ if (request.method !== "HEAD" && !response.body || response.status === 204 || response.status === 205 || response.status === 304 || response.headers.has("content-encoding") || response.headers.has("content-range") || response.headers.get("cache-control")?.toLowerCase().includes("no-transform")) {
36262
36320
  return false;
36263
36321
  }
36264
36322
  const contentType = response.headers.get("content-type")?.toLowerCase() ?? "";
36265
36323
  return contentType !== "text/event-stream";
36266
36324
  }
36267
- __name(canCompress, "canCompress");
36325
+ __name(isCompressionEligible, "isCompressionEligible");
36268
36326
  function appendVary(headers2, value) {
36269
36327
  const current = headers2.get("vary");
36270
36328
  const values = current ? current.split(",").map((item) => item.trim()).filter(Boolean) : [];
36329
+ if (values.includes("*")) return;
36271
36330
  if (!values.some((item) => item.toLowerCase() === value.toLowerCase())) {
36272
36331
  values.push(value);
36273
36332
  }
@@ -36293,6 +36352,16 @@ function compressResponse(response, encoding) {
36293
36352
  });
36294
36353
  }
36295
36354
  __name(compressResponse, "compressResponse");
36355
+ function varyIdentityResponse(response) {
36356
+ const headers2 = new Headers(response.headers);
36357
+ appendVary(headers2, "Accept-Encoding");
36358
+ return new Response(response.body, {
36359
+ status: response.status,
36360
+ statusText: response.statusText,
36361
+ headers: headers2
36362
+ });
36363
+ }
36364
+ __name(varyIdentityResponse, "varyIdentityResponse");
36296
36365
  function createCompressionPlugin({
36297
36366
  beforeRequest: overrideBeforeRequest,
36298
36367
  afterResponse: overrideAfterResponse
@@ -36302,9 +36371,10 @@ function createCompressionPlugin({
36302
36371
  enforce: "post",
36303
36372
  runtime: {
36304
36373
  after({ request, response, isProd }) {
36305
- if (!isProd || !canCompress(request, response)) return;
36374
+ if (!isProd || !isCompressionEligible(request, response)) return;
36375
+ if (request.method === "HEAD") return varyIdentityResponse(response);
36306
36376
  const encoding = selectEncoding(request.headers.get("accept-encoding") ?? "");
36307
- if (!encoding) return;
36377
+ if (!encoding) return varyIdentityResponse(response);
36308
36378
  return compressResponse(response, encoding);
36309
36379
  }
36310
36380
  },