@reckona/mreact-router 0.0.153 → 0.0.155

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.
package/dist/render.js CHANGED
@@ -15,7 +15,7 @@ import { dispatchServerActionRequest, prepareRouteServerActions, } from "./actio
15
15
  import { serverActionCookie } from "./csrf.js";
16
16
  import { beginRouteCacheContext, cachedRouteResponse, cacheRouteResponse, routeCacheKey, routeCachePolicyFromSource, } from "./cache.js";
17
17
  import { resolveRouterCacheLimit } from "./cache-config.js";
18
- import { importAppRouterBuiltFileModule, importAppRouterFileModule, importAppRouterSourceModule, fileImportMetaUrlPlugin, } from "./module-runner.js";
18
+ import { importAppRouterBuiltFileModule, importAppRouterFileModule, importAppRouterSourceModule, fileImportMetaUrlPlugin, rewriteCompatVendorPlaceholderImportsForRunner, } from "./module-runner.js";
19
19
  import { bytesResponse, htmlResponse } from "./http.js";
20
20
  import { isNotFoundError, isRedirectError, rewriteLocation } from "./navigation.js";
21
21
  import { createAppRouterImportPolicyPlugin } from "./import-policy.js";
@@ -193,7 +193,7 @@ function assertNoFatalServerDiagnostics(filename, diagnostics) {
193
193
  }
194
194
  const serverTransformCache = new Map();
195
195
  const serverTransformCacheCounters = createRouterRuntimeCacheCounters();
196
- let productionDynamicServerTransformWarned = false;
196
+ const productionDynamicServerTransformWarned = new Set();
197
197
  const serverSourceFileCache = new Map();
198
198
  const serverSourceFileCacheCounters = createRouterRuntimeCacheCounters();
199
199
  const routeSourceAnalysisCache = new Map();
@@ -347,6 +347,7 @@ export async function resolveAppRouterMiddleware(options) {
347
347
  return { response: middlewareResponse, type: "response" };
348
348
  }
349
349
  async function renderAppRequestInternal(options) {
350
+ warnProductionRenderWithoutPrebuiltModules(options);
350
351
  const timing = createRenderTiming(options.logger);
351
352
  const clientRouteInferenceCache = options.clientRouteInferenceCache ?? createClientRouteInferenceCache();
352
353
  let phaseStartedAt = renderTimingPhaseStartedAt(timing);
@@ -1742,7 +1743,15 @@ function transformServerModule(options) {
1742
1743
  if (cached !== undefined) {
1743
1744
  return cached;
1744
1745
  }
1745
- warnProductionDynamicServerTransform();
1746
+ // Only renders that were handed a prebuild map can have a prebuild gap;
1747
+ // dev servers pass no serverModules and transform at request time by design.
1748
+ if (options.serverModules !== undefined) {
1749
+ warnProductionDynamicServerTransform(options.filename, options.serverOutput, artifact === undefined
1750
+ ? "no prebuilt server module for this output mode"
1751
+ : !prebuiltServerModuleOutputOptionsMatch(artifact, options.serverAwaitHydration === true ? { serverAwaitHydration: true } : {})
1752
+ ? `serverAwaitHydration mismatch (artifact=${artifact.metadata?.serverAwaitHydration === true}, requested=${options.serverAwaitHydration === true})`
1753
+ : "stale prebuilt server module (source hash changed)");
1754
+ }
1746
1755
  const output = transform({
1747
1756
  code: options.code,
1748
1757
  ...(options.clientBoundaryImports === undefined
@@ -1762,12 +1771,37 @@ function transformServerModule(options) {
1762
1771
  return output;
1763
1772
  }
1764
1773
  export const __transformServerModuleForTesting = transformServerModule;
1765
- function warnProductionDynamicServerTransform() {
1766
- if (process.env.NODE_ENV !== "production" || productionDynamicServerTransformWarned) {
1774
+ let productionRenderWithoutPrebuiltModulesWarned = false;
1775
+ export function __resetProductionRenderWarningsForTesting() {
1776
+ productionRenderWithoutPrebuiltModulesWarned = false;
1777
+ productionDynamicServerTransformWarned.clear();
1778
+ }
1779
+ // Covers the deployment that forgot prebuilt modules entirely; per-module
1780
+ // gaps inside a provided prebuild map are reported by
1781
+ // warnProductionDynamicServerTransform with the affected file instead.
1782
+ export function __warnProductionRenderWithoutPrebuiltModulesForTesting(options) {
1783
+ warnProductionRenderWithoutPrebuiltModules(options);
1784
+ }
1785
+ function warnProductionRenderWithoutPrebuiltModules(options) {
1786
+ if (process.env.NODE_ENV !== "production" ||
1787
+ options.dev === true ||
1788
+ options.serverModules !== undefined ||
1789
+ productionRenderWithoutPrebuiltModulesWarned) {
1790
+ return;
1791
+ }
1792
+ productionRenderWithoutPrebuiltModulesWarned = true;
1793
+ console.warn("mreact router: production render without prebuilt serverModules. Request-time transforms use development compiler settings; pass the build output's serverModules (or set dev: true for dev servers).");
1794
+ }
1795
+ function warnProductionDynamicServerTransform(filename, serverOutput, reason) {
1796
+ if (process.env.NODE_ENV !== "production") {
1797
+ return;
1798
+ }
1799
+ const warnedKey = `${filename}\0${serverOutput}`;
1800
+ if (productionDynamicServerTransformWarned.has(warnedKey)) {
1767
1801
  return;
1768
1802
  }
1769
- productionDynamicServerTransformWarned = true;
1770
- console.warn("mreact router: dynamic server transform path ran in production. Production deployments should provide prebuilt serverModules; otherwise request-time transforms use development compiler settings.");
1803
+ productionDynamicServerTransformWarned.add(warnedKey);
1804
+ console.warn(`mreact router: dynamic server transform path ran in production for ${filename} (serverOutput=${serverOutput}): ${reason}. Production deployments should provide prebuilt serverModules; otherwise request-time transforms use development compiler settings.`);
1771
1805
  }
1772
1806
  async function analyzeRouteSource(options) {
1773
1807
  const sourceHash = memoizedHashText(options.code);
@@ -1873,7 +1907,7 @@ async function loadServerModule(code, sourcefile, serverModules, serverModuleCac
1873
1907
  serverModuleCacheVersion,
1874
1908
  });
1875
1909
  }
1876
- const moduleCode = prebuiltCode ?? code;
1910
+ const moduleCode = prebuiltCode === undefined ? code : rewriteCompatVendorPlaceholderImportsForRunner(prebuiltCode);
1877
1911
  const cacheKey = serverModuleCacheVersion === undefined
1878
1912
  ? undefined
1879
1913
  : `server-component:${serverModuleCacheVersion}:${sourcefile}:${moduleCode === code ? codeHash : memoizedHashText(moduleCode)}:${importPolicyCacheKey(importPolicy)}:${viteDefineCacheKey(define)}:${vitePluginsCacheKey(vitePlugins)}`;
@@ -2198,7 +2232,7 @@ async function loadServerStreamModule(code, sourcefile, serverModules, serverMod
2198
2232
  serverModuleCacheVersion,
2199
2233
  });
2200
2234
  }
2201
- const moduleCode = prebuiltCode ?? code;
2235
+ const moduleCode = prebuiltCode === undefined ? code : rewriteCompatVendorPlaceholderImportsForRunner(prebuiltCode);
2202
2236
  const cacheKey = serverModuleCacheVersion === undefined
2203
2237
  ? undefined
2204
2238
  : `server-stream-component:${serverModuleCacheVersion}:${sourcefile}:${moduleCode === code ? codeHash : memoizedHashText(moduleCode)}:${importPolicyCacheKey(importPolicy)}:${viteDefineCacheKey(define)}:${vitePluginsCacheKey(vitePlugins)}`;