@reckona/mreact-router 0.0.153 → 0.0.154
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/build.d.ts.map +1 -1
- package/dist/build.js +66 -2
- package/dist/build.js.map +1 -1
- package/dist/module-runner.d.ts +6 -0
- package/dist/module-runner.d.ts.map +1 -1
- package/dist/module-runner.js +71 -0
- package/dist/module-runner.js.map +1 -1
- package/dist/render.d.ts +6 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +40 -6
- package/dist/render.js.map +1 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +1 -0
- package/dist/vite.js.map +1 -1
- package/package.json +11 -11
- package/src/build.ts +99 -1
- package/src/module-runner.ts +91 -0
- package/src/render.ts +71 -6
- package/src/vite.ts +1 -0
package/src/render.ts
CHANGED
|
@@ -185,6 +185,9 @@ export interface RenderAppRequestOptions {
|
|
|
185
185
|
routes?: readonly AppRoute[] | undefined;
|
|
186
186
|
serverModules?: ReadonlyMap<string, BuiltServerModuleArtifact> | undefined;
|
|
187
187
|
serverModuleCacheVersion?: string | undefined;
|
|
188
|
+
// True when serving through a dev server: request-time server transforms
|
|
189
|
+
// are expected there and must not trigger the production prebuild warning.
|
|
190
|
+
dev?: boolean | undefined;
|
|
188
191
|
serverSourceFiles?: ReadonlyMap<string, string> | undefined;
|
|
189
192
|
serverActions?: AppRouterServerActionOptions | undefined;
|
|
190
193
|
serverActionReferencesByFile?:
|
|
@@ -479,7 +482,7 @@ type StreamModuleExports = Record<string, unknown> & {
|
|
|
479
482
|
|
|
480
483
|
const serverTransformCache = new Map<string, TransformOutput>();
|
|
481
484
|
const serverTransformCacheCounters = createRouterRuntimeCacheCounters();
|
|
482
|
-
|
|
485
|
+
const productionDynamicServerTransformWarned = new Set<string>();
|
|
483
486
|
const serverSourceFileCache = new Map<string, Promise<string>>();
|
|
484
487
|
const serverSourceFileCacheCounters = createRouterRuntimeCacheCounters();
|
|
485
488
|
const routeSourceAnalysisCache = new Map<string, Promise<RouteSourceAnalysis>>();
|
|
@@ -766,6 +769,7 @@ export async function resolveAppRouterMiddleware(options: {
|
|
|
766
769
|
}
|
|
767
770
|
|
|
768
771
|
async function renderAppRequestInternal(options: RenderAppRequestOptions): Promise<Response> {
|
|
772
|
+
warnProductionRenderWithoutPrebuiltModules(options);
|
|
769
773
|
const timing = createRenderTiming(options.logger);
|
|
770
774
|
const clientRouteInferenceCache =
|
|
771
775
|
options.clientRouteInferenceCache ?? createClientRouteInferenceCache();
|
|
@@ -2643,7 +2647,22 @@ function transformServerModule(options: {
|
|
|
2643
2647
|
return cached;
|
|
2644
2648
|
}
|
|
2645
2649
|
|
|
2646
|
-
|
|
2650
|
+
// Only renders that were handed a prebuild map can have a prebuild gap;
|
|
2651
|
+
// dev servers pass no serverModules and transform at request time by design.
|
|
2652
|
+
if (options.serverModules !== undefined) {
|
|
2653
|
+
warnProductionDynamicServerTransform(
|
|
2654
|
+
options.filename,
|
|
2655
|
+
options.serverOutput,
|
|
2656
|
+
artifact === undefined
|
|
2657
|
+
? "no prebuilt server module for this output mode"
|
|
2658
|
+
: !prebuiltServerModuleOutputOptionsMatch(
|
|
2659
|
+
artifact,
|
|
2660
|
+
options.serverAwaitHydration === true ? { serverAwaitHydration: true } : {},
|
|
2661
|
+
)
|
|
2662
|
+
? `serverAwaitHydration mismatch (artifact=${artifact.metadata?.serverAwaitHydration === true}, requested=${options.serverAwaitHydration === true})`
|
|
2663
|
+
: "stale prebuilt server module (source hash changed)",
|
|
2664
|
+
);
|
|
2665
|
+
}
|
|
2647
2666
|
|
|
2648
2667
|
const output = transform({
|
|
2649
2668
|
code: options.code,
|
|
@@ -2674,14 +2693,60 @@ function transformServerModule(options: {
|
|
|
2674
2693
|
|
|
2675
2694
|
export const __transformServerModuleForTesting = transformServerModule;
|
|
2676
2695
|
|
|
2677
|
-
|
|
2678
|
-
|
|
2696
|
+
let productionRenderWithoutPrebuiltModulesWarned = false;
|
|
2697
|
+
|
|
2698
|
+
export function __resetProductionRenderWarningsForTesting(): void {
|
|
2699
|
+
productionRenderWithoutPrebuiltModulesWarned = false;
|
|
2700
|
+
productionDynamicServerTransformWarned.clear();
|
|
2701
|
+
}
|
|
2702
|
+
|
|
2703
|
+
// Covers the deployment that forgot prebuilt modules entirely; per-module
|
|
2704
|
+
// gaps inside a provided prebuild map are reported by
|
|
2705
|
+
// warnProductionDynamicServerTransform with the affected file instead.
|
|
2706
|
+
export function __warnProductionRenderWithoutPrebuiltModulesForTesting(options: {
|
|
2707
|
+
dev?: boolean | undefined;
|
|
2708
|
+
serverModules?: ReadonlyMap<string, BuiltServerModuleArtifact> | undefined;
|
|
2709
|
+
}): void {
|
|
2710
|
+
warnProductionRenderWithoutPrebuiltModules(options);
|
|
2711
|
+
}
|
|
2712
|
+
|
|
2713
|
+
function warnProductionRenderWithoutPrebuiltModules(options: {
|
|
2714
|
+
dev?: boolean | undefined;
|
|
2715
|
+
serverModules?: ReadonlyMap<string, BuiltServerModuleArtifact> | undefined;
|
|
2716
|
+
}): void {
|
|
2717
|
+
if (
|
|
2718
|
+
process.env.NODE_ENV !== "production" ||
|
|
2719
|
+
options.dev === true ||
|
|
2720
|
+
options.serverModules !== undefined ||
|
|
2721
|
+
productionRenderWithoutPrebuiltModulesWarned
|
|
2722
|
+
) {
|
|
2723
|
+
return;
|
|
2724
|
+
}
|
|
2725
|
+
|
|
2726
|
+
productionRenderWithoutPrebuiltModulesWarned = true;
|
|
2727
|
+
console.warn(
|
|
2728
|
+
"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).",
|
|
2729
|
+
);
|
|
2730
|
+
}
|
|
2731
|
+
|
|
2732
|
+
function warnProductionDynamicServerTransform(
|
|
2733
|
+
filename: string,
|
|
2734
|
+
serverOutput: ServerOutputMode,
|
|
2735
|
+
reason: string,
|
|
2736
|
+
): void {
|
|
2737
|
+
if (process.env.NODE_ENV !== "production") {
|
|
2738
|
+
return;
|
|
2739
|
+
}
|
|
2740
|
+
|
|
2741
|
+
const warnedKey = `${filename}\0${serverOutput}`;
|
|
2742
|
+
|
|
2743
|
+
if (productionDynamicServerTransformWarned.has(warnedKey)) {
|
|
2679
2744
|
return;
|
|
2680
2745
|
}
|
|
2681
2746
|
|
|
2682
|
-
productionDynamicServerTransformWarned
|
|
2747
|
+
productionDynamicServerTransformWarned.add(warnedKey);
|
|
2683
2748
|
console.warn(
|
|
2684
|
-
|
|
2749
|
+
`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.`,
|
|
2685
2750
|
);
|
|
2686
2751
|
}
|
|
2687
2752
|
|
package/src/vite.ts
CHANGED