@reckona/mreact-router 0.0.146 → 0.0.148
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/README.md +4 -0
- package/dist/build.d.ts +12 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +45 -35
- package/dist/build.js.map +1 -1
- package/dist/cli.js +118 -12
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +34 -2
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +2 -1
- package/dist/vite.js.map +1 -1
- package/package.json +11 -11
- package/src/build.ts +67 -40
- package/src/cli.ts +144 -12
- package/src/client.ts +34 -2
- package/src/index.ts +1 -0
- package/src/vite.ts +2 -1
package/README.md
CHANGED
|
@@ -43,6 +43,8 @@ export default defineConfig({
|
|
|
43
43
|
|
|
44
44
|
`mreact-router build` reads this config. Pass `--target=node` for plain Node/container output, `--target=aws-lambda` for Lambda artifacts with a generated handler and import policy, or `--target=cloudflare` for Workers artifacts with a generated Worker module. Configure `buildTargets: ["aws-lambda"]`, `["cloudflare"]`, or another explicit target list in `mreactRouter()` when one deployment target should be the project default. Without an explicit target, build output includes only the Node-compatible server/client artifacts; Cloudflare and Lambda artifacts are opt-in. The legacy `appDir` shortcut remains available for tests and older direct programmatic usage, but it is deprecated. Use `projectRoot` + `routesDir` for new code. The shortcut is planned for removal after `0.1.0`.
|
|
45
45
|
|
|
46
|
+
Production builds print compact progress by default, including route discovery, server output, client output, artifact writing, and the final route count with total duration. Programmatic builds can pass `onBuildProgress` to receive the same coarse phase events without parsing CLI output.
|
|
47
|
+
|
|
46
48
|
Production client source maps are disabled by default. Set `clientSourceMaps: "linked"` to emit public `.js.map` files beside route scripts and include `sourceMappingURL` comments, or set `clientSourceMaps: "hidden"` to emit upload-only maps under `.mreact/source-maps/client/` without exposing them in the client manifest. The CLI accepts the same modes with `mreact-router build --client-source-maps=hidden`, `linked`, or `none`.
|
|
47
49
|
|
|
48
50
|
Production client route bundles can drop selected browser logging calls with `production.dropClientConsole`. Set it to `true` to remove `console.debug`, `console.info`, and `console.log` while preserving `console.warn` and `console.error`, or pass an array such as `["log"]` to choose specific methods.
|
|
@@ -302,6 +304,8 @@ Built Node output binds to `127.0.0.1` by default. Use `mreact-router start .mre
|
|
|
302
304
|
|
|
303
305
|
Use `mreact-router --help`, `mreact-router help build`, or command-level help such as `mreact-router build --help` to inspect supported commands, build targets, and generated artifacts.
|
|
304
306
|
|
|
307
|
+
Build progress output is always limited to coarse phases and does not include request data. Use `--log=requests` only when you want request summaries from `dev` or `start`.
|
|
308
|
+
|
|
305
309
|
Server-only pages get the lightweight navigation runtime automatically — without becoming hydrated client routes — whenever they render a `Link` (from `@reckona/mreact-router/link`) anywhere in their server-rendered tree, including through nested components and layouts:
|
|
306
310
|
|
|
307
311
|
```tsx
|
package/dist/build.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { RouteCachePolicy } from "./cache.js";
|
|
|
5
5
|
import { type AppRouterImportPolicy } from "./import-policy.js";
|
|
6
6
|
import type { PluginOption, UserConfig } from "vite";
|
|
7
7
|
export interface BuildAppOptions extends AppRouterProjectOptions {
|
|
8
|
+
onBuildProgress?: ((event: BuildAppProgressEvent) => void) | undefined;
|
|
8
9
|
onBuildPhaseTiming?: ((timing: BuildAppPhaseTiming) => void) | undefined;
|
|
9
10
|
outDir: string;
|
|
10
11
|
targets?: readonly AppRouterBuildTarget[] | undefined;
|
|
@@ -15,6 +16,17 @@ export interface BuildAppPhaseTiming {
|
|
|
15
16
|
ms: number;
|
|
16
17
|
phase: BuildAppPhase;
|
|
17
18
|
}
|
|
19
|
+
export type BuildAppProgressEvent = {
|
|
20
|
+
kind: "phase-start";
|
|
21
|
+
phase: BuildAppPhase;
|
|
22
|
+
} | {
|
|
23
|
+
kind: "phase-end";
|
|
24
|
+
ms: number;
|
|
25
|
+
phase: BuildAppPhase;
|
|
26
|
+
} | {
|
|
27
|
+
count: number;
|
|
28
|
+
kind: "routes-discovered";
|
|
29
|
+
};
|
|
18
30
|
export interface BuildAppResult {
|
|
19
31
|
routes: AppRoute[];
|
|
20
32
|
}
|
package/dist/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
package/dist/build.js
CHANGED
|
@@ -62,25 +62,28 @@ async function collectBuildMiddlewareIds(appDir) {
|
|
|
62
62
|
}
|
|
63
63
|
export async function buildApp(options) {
|
|
64
64
|
const timingSink = options.onBuildPhaseTiming;
|
|
65
|
+
const progressSink = options.onBuildProgress;
|
|
66
|
+
const shouldTrackBuildPhases = timingSink !== undefined || progressSink !== undefined;
|
|
65
67
|
const project = resolveAppRouterProjectOptions(options);
|
|
66
68
|
const buildTargets = resolveBuildTargets(options.targets ?? project.buildTargets);
|
|
67
69
|
const shouldBuildCloudflare = buildTargets.includes("cloudflare");
|
|
68
70
|
const shouldBuildAwsLambda = buildTargets.includes("aws-lambda");
|
|
69
|
-
const routes =
|
|
71
|
+
const routes = shouldTrackBuildPhases === false
|
|
70
72
|
? await scanAppRoutes({ appDir: project.routesDir })
|
|
71
|
-
: await timeBuildPhase(timingSink, "scan", () => scanAppRoutes({ appDir: project.routesDir }));
|
|
73
|
+
: await timeBuildPhase(timingSink, progressSink, "scan", () => scanAppRoutes({ appDir: project.routesDir }));
|
|
74
|
+
progressSink?.({ count: routes.length, kind: "routes-discovered" });
|
|
72
75
|
await validateBuildMiddlewareControls(project.routesDir, routes);
|
|
73
76
|
const viteDefine = options.viteConfig?.define;
|
|
74
77
|
const vitePlugins = options.viteConfig?.plugins;
|
|
75
|
-
const files =
|
|
78
|
+
const files = shouldTrackBuildPhases === false
|
|
76
79
|
? await collectBuildFiles(project.projectRoot, project.allowedSourceDirs, project.routesDir)
|
|
77
|
-
: await timeBuildPhase(timingSink, "collectFiles", () => collectBuildFiles(project.projectRoot, project.allowedSourceDirs, project.routesDir));
|
|
80
|
+
: await timeBuildPhase(timingSink, progressSink, "collectFiles", () => collectBuildFiles(project.projectRoot, project.allowedSourceDirs, project.routesDir));
|
|
78
81
|
const serverClientRouteInferenceCache = createClientRouteInferenceCache();
|
|
79
82
|
const serverTransformCache = new Map();
|
|
80
83
|
const serverDir = join(options.outDir, "server");
|
|
81
84
|
const clientDir = join(options.outDir, "client");
|
|
82
85
|
const cloudflareDir = join(options.outDir, "cloudflare");
|
|
83
|
-
const sourceAnalysis =
|
|
86
|
+
const sourceAnalysis = shouldTrackBuildPhases === false
|
|
84
87
|
? await analyzeBuildRouteSources({
|
|
85
88
|
clientRouteInferenceCache: serverClientRouteInferenceCache,
|
|
86
89
|
files,
|
|
@@ -89,7 +92,7 @@ export async function buildApp(options) {
|
|
|
89
92
|
routes,
|
|
90
93
|
vitePlugins,
|
|
91
94
|
})
|
|
92
|
-
: await timeBuildPhase(timingSink, "analyzeSources", () => analyzeBuildRouteSources({
|
|
95
|
+
: await timeBuildPhase(timingSink, progressSink, "analyzeSources", () => analyzeBuildRouteSources({
|
|
93
96
|
clientRouteInferenceCache: serverClientRouteInferenceCache,
|
|
94
97
|
files,
|
|
95
98
|
project,
|
|
@@ -97,7 +100,7 @@ export async function buildApp(options) {
|
|
|
97
100
|
routes,
|
|
98
101
|
vitePlugins,
|
|
99
102
|
}));
|
|
100
|
-
if (
|
|
103
|
+
if (shouldTrackBuildPhases === false) {
|
|
101
104
|
await validateProductionRoutes({
|
|
102
105
|
clientRouteInferenceCache: serverClientRouteInferenceCache,
|
|
103
106
|
files,
|
|
@@ -110,7 +113,7 @@ export async function buildApp(options) {
|
|
|
110
113
|
});
|
|
111
114
|
}
|
|
112
115
|
else {
|
|
113
|
-
await timeBuildPhase(timingSink, "validate", () => validateProductionRoutes({
|
|
116
|
+
await timeBuildPhase(timingSink, progressSink, "validate", () => validateProductionRoutes({
|
|
114
117
|
clientRouteInferenceCache: serverClientRouteInferenceCache,
|
|
115
118
|
files,
|
|
116
119
|
project,
|
|
@@ -121,7 +124,7 @@ export async function buildApp(options) {
|
|
|
121
124
|
vitePlugins,
|
|
122
125
|
}));
|
|
123
126
|
}
|
|
124
|
-
if (
|
|
127
|
+
if (shouldTrackBuildPhases === false) {
|
|
125
128
|
await rm(options.outDir, { force: true, recursive: true });
|
|
126
129
|
await Promise.all([
|
|
127
130
|
mkdir(serverDir, { recursive: true }),
|
|
@@ -132,7 +135,7 @@ export async function buildApp(options) {
|
|
|
132
135
|
]);
|
|
133
136
|
}
|
|
134
137
|
else {
|
|
135
|
-
await timeBuildPhase(timingSink, "prepareOutput", async () => {
|
|
138
|
+
await timeBuildPhase(timingSink, progressSink, "prepareOutput", async () => {
|
|
136
139
|
await rm(options.outDir, { force: true, recursive: true });
|
|
137
140
|
await Promise.all([
|
|
138
141
|
mkdir(serverDir, { recursive: true }),
|
|
@@ -143,25 +146,25 @@ export async function buildApp(options) {
|
|
|
143
146
|
]);
|
|
144
147
|
});
|
|
145
148
|
}
|
|
146
|
-
const publicAssets =
|
|
149
|
+
const publicAssets = shouldTrackBuildPhases === false
|
|
147
150
|
? await buildPublicAssetManifest(project, clientDir)
|
|
148
|
-
: await timeBuildPhase(timingSink, "publicAssets", () => buildPublicAssetManifest(project, clientDir));
|
|
151
|
+
: await timeBuildPhase(timingSink, progressSink, "publicAssets", () => buildPublicAssetManifest(project, clientDir));
|
|
149
152
|
const clientRouteInferenceCache = createClientRouteInferenceCache();
|
|
150
153
|
const [serverActionManifest, serverModules, generatedImportPolicy] = await Promise.all([
|
|
151
|
-
|
|
154
|
+
shouldTrackBuildPhases === false
|
|
152
155
|
? collectBuildServerActionManifest({
|
|
153
156
|
files,
|
|
154
157
|
projectRoot: project.projectRoot,
|
|
155
158
|
routes,
|
|
156
159
|
routesDir: project.routesDir,
|
|
157
160
|
})
|
|
158
|
-
: timeBuildPhase(timingSink, "serverActionManifest", () => collectBuildServerActionManifest({
|
|
161
|
+
: timeBuildPhase(timingSink, progressSink, "serverActionManifest", () => collectBuildServerActionManifest({
|
|
159
162
|
files,
|
|
160
163
|
projectRoot: project.projectRoot,
|
|
161
164
|
routes,
|
|
162
165
|
routesDir: project.routesDir,
|
|
163
166
|
})),
|
|
164
|
-
|
|
167
|
+
shouldTrackBuildPhases === false
|
|
165
168
|
? buildServerModuleArtifacts({
|
|
166
169
|
bundleCache: new Map(),
|
|
167
170
|
clientRouteInferenceCache: serverClientRouteInferenceCache,
|
|
@@ -175,7 +178,7 @@ export async function buildApp(options) {
|
|
|
175
178
|
serverTransformCache,
|
|
176
179
|
vitePlugins,
|
|
177
180
|
})
|
|
178
|
-
: timeBuildPhase(timingSink, "serverModules", () => buildServerModuleArtifacts({
|
|
181
|
+
: timeBuildPhase(timingSink, progressSink, "serverModules", () => buildServerModuleArtifacts({
|
|
179
182
|
bundleCache: new Map(),
|
|
180
183
|
clientRouteInferenceCache: serverClientRouteInferenceCache,
|
|
181
184
|
define: viteDefine,
|
|
@@ -188,14 +191,14 @@ export async function buildApp(options) {
|
|
|
188
191
|
serverTransformCache,
|
|
189
192
|
vitePlugins,
|
|
190
193
|
})),
|
|
191
|
-
|
|
194
|
+
shouldTrackBuildPhases === false
|
|
192
195
|
? buildGeneratedImportPolicy({
|
|
193
196
|
files,
|
|
194
197
|
projectRoot: project.projectRoot,
|
|
195
198
|
routes,
|
|
196
199
|
routesDir: project.routesDir,
|
|
197
200
|
})
|
|
198
|
-
: timeBuildPhase(timingSink, "importPolicy", () => buildGeneratedImportPolicy({
|
|
201
|
+
: timeBuildPhase(timingSink, progressSink, "importPolicy", () => buildGeneratedImportPolicy({
|
|
199
202
|
files,
|
|
200
203
|
projectRoot: project.projectRoot,
|
|
201
204
|
routes,
|
|
@@ -207,10 +210,10 @@ export async function buildApp(options) {
|
|
|
207
210
|
file: relative(project.projectRoot, route.file),
|
|
208
211
|
}));
|
|
209
212
|
const [serverModuleArtifacts, clientBundle] = await Promise.all([
|
|
210
|
-
|
|
213
|
+
shouldTrackBuildPhases === false
|
|
211
214
|
? writeServerModuleArtifactFiles(serverDir, serverModules, generatedImportPolicy.runtimePackages)
|
|
212
|
-
: timeBuildPhase(timingSink, "serverModuleArtifacts", () => writeServerModuleArtifactFiles(serverDir, serverModules, generatedImportPolicy.runtimePackages)),
|
|
213
|
-
|
|
215
|
+
: timeBuildPhase(timingSink, progressSink, "serverModuleArtifacts", () => writeServerModuleArtifactFiles(serverDir, serverModules, generatedImportPolicy.runtimePackages)),
|
|
216
|
+
shouldTrackBuildPhases === false
|
|
214
217
|
? writeClientRouteBundles({
|
|
215
218
|
appDir: project.routesDir,
|
|
216
219
|
assetBaseUrl: project.assetBaseUrl,
|
|
@@ -224,7 +227,7 @@ export async function buildApp(options) {
|
|
|
224
227
|
sourceMaps: project.clientSourceMaps,
|
|
225
228
|
vitePlugins,
|
|
226
229
|
})
|
|
227
|
-
: timeBuildPhase(timingSink, "clientBundles", () => writeClientRouteBundles({
|
|
230
|
+
: timeBuildPhase(timingSink, progressSink, "clientBundles", () => writeClientRouteBundles({
|
|
228
231
|
appDir: project.routesDir,
|
|
229
232
|
assetBaseUrl: project.assetBaseUrl,
|
|
230
233
|
clientDir,
|
|
@@ -240,9 +243,9 @@ export async function buildApp(options) {
|
|
|
240
243
|
]);
|
|
241
244
|
const clientRoutes = clientBundle.routes;
|
|
242
245
|
const navigationRuntimeScript = clientRoutes.some((route) => route.navigation === true && !route.client)
|
|
243
|
-
?
|
|
246
|
+
? shouldTrackBuildPhases === false
|
|
244
247
|
? await writeNavigationRuntimeBundle(clientDir, project.clientConsolePureFunctions)
|
|
245
|
-
: await timeBuildPhase(timingSink, "navigationRuntime", () => writeNavigationRuntimeBundle(clientDir, project.clientConsolePureFunctions))
|
|
248
|
+
: await timeBuildPhase(timingSink, progressSink, "navigationRuntime", () => writeNavigationRuntimeBundle(clientDir, project.clientConsolePureFunctions))
|
|
246
249
|
: undefined;
|
|
247
250
|
const clientManifestRoutes = navigationRuntimeScript === undefined
|
|
248
251
|
? clientRoutes
|
|
@@ -254,7 +257,7 @@ export async function buildApp(options) {
|
|
|
254
257
|
...clientBundle.styles.flatMap((style) => style.css),
|
|
255
258
|
...(navigationRuntimeScript === undefined ? [] : [navigationRuntimeScript]),
|
|
256
259
|
])).sort();
|
|
257
|
-
const prerenderedRoutes =
|
|
260
|
+
const prerenderedRoutes = shouldTrackBuildPhases === false
|
|
258
261
|
? await prerenderStaticRoutes({
|
|
259
262
|
appDir: project.routesDir,
|
|
260
263
|
assetBaseUrl: project.assetBaseUrl,
|
|
@@ -266,7 +269,7 @@ export async function buildApp(options) {
|
|
|
266
269
|
sourceAnalysis,
|
|
267
270
|
vitePlugins,
|
|
268
271
|
})
|
|
269
|
-
: await timeBuildPhase(timingSink, "prerender", () => prerenderStaticRoutes({
|
|
272
|
+
: await timeBuildPhase(timingSink, progressSink, "prerender", () => prerenderStaticRoutes({
|
|
270
273
|
appDir: project.routesDir,
|
|
271
274
|
assetBaseUrl: project.assetBaseUrl,
|
|
272
275
|
clientRoutes: clientManifestRoutes,
|
|
@@ -280,7 +283,7 @@ export async function buildApp(options) {
|
|
|
280
283
|
let cloudflareRouteModules;
|
|
281
284
|
if (shouldBuildCloudflare) {
|
|
282
285
|
cloudflareRouteModules =
|
|
283
|
-
|
|
286
|
+
shouldTrackBuildPhases === false
|
|
284
287
|
? await writeCloudflareRouteModules({
|
|
285
288
|
cloudflareDir,
|
|
286
289
|
define: viteDefine,
|
|
@@ -293,7 +296,7 @@ export async function buildApp(options) {
|
|
|
293
296
|
sourceAnalysis,
|
|
294
297
|
vitePlugins,
|
|
295
298
|
})
|
|
296
|
-
: await timeBuildPhase(timingSink, "cloudflare", () => writeCloudflareRouteModules({
|
|
299
|
+
: await timeBuildPhase(timingSink, progressSink, "cloudflare", () => writeCloudflareRouteModules({
|
|
297
300
|
cloudflareDir,
|
|
298
301
|
define: viteDefine,
|
|
299
302
|
files,
|
|
@@ -349,13 +352,13 @@ export async function buildApp(options) {
|
|
|
349
352
|
writeFile(join(clientDir, ".vite", "manifest.json"), JSON.stringify(viteManifestFromClientRoutes(clientManifestRoutes), null, 2)),
|
|
350
353
|
]);
|
|
351
354
|
};
|
|
352
|
-
if (
|
|
355
|
+
if (shouldTrackBuildPhases === false) {
|
|
353
356
|
await writeManifestFiles();
|
|
354
357
|
}
|
|
355
358
|
else {
|
|
356
|
-
await timeBuildPhase(timingSink, "writeManifests", writeManifestFiles);
|
|
359
|
+
await timeBuildPhase(timingSink, progressSink, "writeManifests", writeManifestFiles);
|
|
357
360
|
}
|
|
358
|
-
if (
|
|
361
|
+
if (shouldTrackBuildPhases === false) {
|
|
359
362
|
await Promise.all([
|
|
360
363
|
...(shouldBuildAwsLambda ? [writeAwsLambdaHandlerArtifact(options.outDir)] : []),
|
|
361
364
|
...(shouldBuildCloudflare
|
|
@@ -371,7 +374,7 @@ export async function buildApp(options) {
|
|
|
371
374
|
]);
|
|
372
375
|
}
|
|
373
376
|
else {
|
|
374
|
-
await timeBuildPhase(timingSink, "adapterArtifacts", async () => {
|
|
377
|
+
await timeBuildPhase(timingSink, progressSink, "adapterArtifacts", async () => {
|
|
375
378
|
await Promise.all([
|
|
376
379
|
...(shouldBuildAwsLambda ? [writeAwsLambdaHandlerArtifact(options.outDir)] : []),
|
|
377
380
|
...(shouldBuildCloudflare
|
|
@@ -415,14 +418,21 @@ function typedRoutesDeclaration(routes) {
|
|
|
415
418
|
``,
|
|
416
419
|
].join("\n");
|
|
417
420
|
}
|
|
418
|
-
async function timeBuildPhase(
|
|
421
|
+
async function timeBuildPhase(timingSink, progressSink, phase, run) {
|
|
422
|
+
progressSink?.({ kind: "phase-start", phase });
|
|
419
423
|
const startedAt = performance.now();
|
|
420
424
|
try {
|
|
421
425
|
return await run();
|
|
422
426
|
}
|
|
423
427
|
finally {
|
|
424
|
-
|
|
425
|
-
|
|
428
|
+
const ms = roundBuildPhaseMs(performance.now() - startedAt);
|
|
429
|
+
timingSink?.({
|
|
430
|
+
ms,
|
|
431
|
+
phase,
|
|
432
|
+
});
|
|
433
|
+
progressSink?.({
|
|
434
|
+
kind: "phase-end",
|
|
435
|
+
ms,
|
|
426
436
|
phase,
|
|
427
437
|
});
|
|
428
438
|
}
|