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