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

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-TWN6IBIL.mjs → chunk-ENS436YL.mjs} +2 -2
  8. package/dist/{chunk-IIKQBOGZ.mjs → chunk-MV5WATSI.mjs} +2 -2
  9. package/dist/{chunk-IIKQBOGZ.mjs.map → chunk-MV5WATSI.mjs.map} +1 -1
  10. package/dist/{chunk-S6FO7OXA.mjs → chunk-NN6KJF7I.mjs} +52 -7
  11. package/dist/chunk-NN6KJF7I.mjs.map +1 -0
  12. package/dist/{chunk-DKD7DGTE.mjs → chunk-OL7GH5ZC.mjs} +2 -2
  13. package/dist/{chunk-UGK7TW2V.mjs → chunk-P57PPOQL.mjs} +18 -6
  14. package/dist/chunk-P57PPOQL.mjs.map +1 -0
  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 +75 -11
  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 +58 -6
  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 +51 -6
  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 +68 -11
  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 +51 -6
  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-TWN6IBIL.mjs.map → chunk-ENS436YL.mjs.map} +0 -0
  57. /package/dist/{chunk-DKD7DGTE.mjs.map → chunk-OL7GH5ZC.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-ENS436YL.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-MV5WATSI.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.76";
15781
15806
  }
15782
15807
  });
15783
15808
 
@@ -16139,6 +16164,7 @@ var init_renderer2 = __esm({
16139
16164
  fs4 = __toESM(require("fs"));
16140
16165
  path12 = __toESM(require("path"));
16141
16166
  init_utils();
16167
+ init_dev_styles();
16142
16168
  init_full_document();
16143
16169
  init_client_component();
16144
16170
  import_stream = require("stream");
@@ -16256,6 +16282,18 @@ var init_renderer2 = __esm({
16256
16282
  pageElement
16257
16283
  );
16258
16284
  }
16285
+ /// Stylesheets the app imported through JS (fontsource packages, component
16286
+ /// CSS) that the document must link alongside globals.css — see #658.
16287
+ collectDevStyleHrefs() {
16288
+ const graph = this.viteServer?.moduleGraph;
16289
+ if (!graph) return [];
16290
+ return collectDevStylesheetUrls(graph.idToModuleMap.values());
16291
+ }
16292
+ collectDevStyleLinks() {
16293
+ return this.collectDevStyleHrefs().map(
16294
+ (href) => `<link rel="stylesheet" href="${escapeHtmlAttribute2(href)}">`
16295
+ );
16296
+ }
16259
16297
  createLayoutBoundary(pattern, layoutElement) {
16260
16298
  return this.rendererRuntime.createElement(
16261
16299
  "div",
@@ -17470,7 +17508,11 @@ var init_renderer2 = __esm({
17470
17508
  {
17471
17509
  tag: "link",
17472
17510
  attrs: { rel: "stylesheet", href: "/src/app/globals.css" }
17473
- }
17511
+ },
17512
+ ...this.collectDevStyleHrefs().map((href) => ({
17513
+ tag: "link",
17514
+ attrs: { rel: "stylesheet", href }
17515
+ }))
17474
17516
  ]
17475
17517
  };
17476
17518
  for (const routeEntry of manifest.routes) {
@@ -17566,6 +17608,7 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
17566
17608
  rendererHead,
17567
17609
  renderFarmFontDevHead(this.config.root || process.cwd()),
17568
17610
  `<link rel="stylesheet" href="/src/app/globals.css">`,
17611
+ ...this.collectDevStyleLinks(),
17569
17612
  `<script type="module" src="/@vite/client"></script>`,
17570
17613
  rendererHydrationScript,
17571
17614
  bootstrapScript
@@ -17584,7 +17627,8 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
17584
17627
  ${documentTitleTag}${metaTags}${alternateTags}${rendererHead ? `
17585
17628
  ${rendererHead}` : ""}
17586
17629
  ${renderFarmFontDevHead(this.config.root || process.cwd())}
17587
- <link rel="stylesheet" href="/src/app/globals.css">
17630
+ <link rel="stylesheet" href="/src/app/globals.css">${this.collectDevStyleLinks().map((l) => `
17631
+ ${l}`).join("")}
17588
17632
  <script type="module" src="/@vite/client"></script>
17589
17633
  ${rendererHydrationScript}
17590
17634
  ${bootstrapScript}
@@ -17649,7 +17693,11 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
17649
17693
  {
17650
17694
  tag: "link",
17651
17695
  attrs: { rel: "stylesheet", href: "/src/app/globals.css" }
17652
- }
17696
+ },
17697
+ ...this.collectDevStyleHrefs().map((href) => ({
17698
+ tag: "link",
17699
+ attrs: { rel: "stylesheet", href }
17700
+ }))
17653
17701
  ]
17654
17702
  };
17655
17703
  for (const routeEntry of manifest.routes) {
@@ -17736,6 +17784,7 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
17736
17784
  { style: { display: "contents" } },
17737
17785
  element
17738
17786
  );
17787
+ const devStyleLinks = this.collectDevStyleLinks();
17739
17788
  const { pipe } = renderToPipeableStream2(streamRoot, {
17740
17789
  onShellReady() {
17741
17790
  const shellReadyMs = Date.now() - streamStartTime;
@@ -17757,7 +17806,8 @@ ${getFarmI18nClientSnapshot() ? `window.__FARM_I18N__ = ${serializeInlineValue2(
17757
17806
  ${hasFavicon ? "" : '<link rel="icon" href="data:,">'}
17758
17807
  <title>${title}</title>${metaTags}${i18nAlternateTags}
17759
17808
  ${fontHead}
17760
- <link rel="stylesheet" href="/src/app/globals.css" />
17809
+ <link rel="stylesheet" href="/src/app/globals.css" />${devStyleLinks.map((l) => `
17810
+ ${l}`).join("")}
17761
17811
  <script type="module" src="/@vite/client"></script>
17762
17812
  ${propsScript}
17763
17813
  ${hydrationClickQueueScript}
@@ -17984,6 +18034,7 @@ ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue2(i18nSnapshot)};
17984
18034
  alternateLinks,
17985
18035
  fontHead,
17986
18036
  `<link rel="stylesheet" href="/src/app/globals.css" />`,
18037
+ ...this.collectDevStyleLinks(),
17987
18038
  `<script type="module" src="/@vite/client"></script>`,
17988
18039
  rendererHydrationScript,
17989
18040
  integrationManifestScript
@@ -18001,7 +18052,8 @@ ${i18nSnapshot ? `window.__FARM_I18N__ = ${serializeInlineValue2(i18nSnapshot)};
18001
18052
  <link rel="icon" href="data:,">
18002
18053
  <title>${escapeHtmlAttribute2(documentTitle)}</title>${alternateLinks}
18003
18054
  ${fontHead}
18004
- <link rel="stylesheet" href="/src/app/globals.css" />
18055
+ <link rel="stylesheet" href="/src/app/globals.css" />${this.collectDevStyleLinks().map((l) => `
18056
+ ${l}`).join("")}
18005
18057
  <script type="module" src="/@vite/client"></script>
18006
18058
  ${rendererHydrationScript}
18007
18059
  ${integrationManifestScript}
@@ -36257,17 +36309,18 @@ function selectEncoding(header) {
36257
36309
  return brotli >= gzip ? "br" : "gzip";
36258
36310
  }
36259
36311
  __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")) {
36312
+ function isCompressionEligible(request, response) {
36313
+ 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
36314
  return false;
36263
36315
  }
36264
36316
  const contentType = response.headers.get("content-type")?.toLowerCase() ?? "";
36265
36317
  return contentType !== "text/event-stream";
36266
36318
  }
36267
- __name(canCompress, "canCompress");
36319
+ __name(isCompressionEligible, "isCompressionEligible");
36268
36320
  function appendVary(headers2, value) {
36269
36321
  const current = headers2.get("vary");
36270
36322
  const values = current ? current.split(",").map((item) => item.trim()).filter(Boolean) : [];
36323
+ if (values.includes("*")) return;
36271
36324
  if (!values.some((item) => item.toLowerCase() === value.toLowerCase())) {
36272
36325
  values.push(value);
36273
36326
  }
@@ -36293,6 +36346,16 @@ function compressResponse(response, encoding) {
36293
36346
  });
36294
36347
  }
36295
36348
  __name(compressResponse, "compressResponse");
36349
+ function varyIdentityResponse(response) {
36350
+ const headers2 = new Headers(response.headers);
36351
+ appendVary(headers2, "Accept-Encoding");
36352
+ return new Response(response.body, {
36353
+ status: response.status,
36354
+ statusText: response.statusText,
36355
+ headers: headers2
36356
+ });
36357
+ }
36358
+ __name(varyIdentityResponse, "varyIdentityResponse");
36296
36359
  function createCompressionPlugin({
36297
36360
  beforeRequest: overrideBeforeRequest,
36298
36361
  afterResponse: overrideAfterResponse
@@ -36302,9 +36365,10 @@ function createCompressionPlugin({
36302
36365
  enforce: "post",
36303
36366
  runtime: {
36304
36367
  after({ request, response, isProd }) {
36305
- if (!isProd || !canCompress(request, response)) return;
36368
+ if (!isProd || !isCompressionEligible(request, response)) return;
36369
+ if (request.method === "HEAD") return varyIdentityResponse(response);
36306
36370
  const encoding = selectEncoding(request.headers.get("accept-encoding") ?? "");
36307
- if (!encoding) return;
36371
+ if (!encoding) return varyIdentityResponse(response);
36308
36372
  return compressResponse(response, encoding);
36309
36373
  }
36310
36374
  },