@cmj/juice 0.4.0 → 0.6.0
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/client/Link.d.ts +74 -0
- package/dist/client/Link.d.ts.map +1 -0
- package/dist/client/Link.js +132 -0
- package/dist/client/Link.js.map +1 -0
- package/dist/client/client.d.ts +1 -1
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +6 -34
- package/dist/client/client.js.map +1 -1
- package/dist/client/hooks.d.ts +85 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +82 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/nav.d.ts +40 -0
- package/dist/client/nav.d.ts.map +1 -0
- package/dist/client/nav.js +85 -0
- package/dist/client/nav.js.map +1 -0
- package/dist/compiler/dts.d.ts +33 -0
- package/dist/compiler/dts.d.ts.map +1 -0
- package/dist/compiler/dts.js +102 -0
- package/dist/compiler/dts.js.map +1 -0
- package/dist/compiler/plugin.d.ts.map +1 -1
- package/dist/compiler/plugin.js +42 -1
- package/dist/compiler/plugin.js.map +1 -1
- package/dist/runtime/actions.d.ts +6 -5
- package/dist/runtime/actions.d.ts.map +1 -1
- package/dist/runtime/actions.js +17 -7
- package/dist/runtime/actions.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/matcher.d.ts.map +1 -1
- package/dist/runtime/matcher.js +39 -13
- package/dist/runtime/matcher.js.map +1 -1
- package/dist/runtime/router.js +1 -1
- package/dist/runtime/router.js.map +1 -1
- package/dist/runtime/types.d.ts +48 -11
- package/dist/runtime/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// ── juice/client — shared navigation utilities ──────────────────
|
|
2
|
+
// Extracted from client.ts so they can be imported by Link.ts,
|
|
3
|
+
// hooks.ts, and tested without pulling in react-server-dom-webpack.
|
|
4
|
+
// ────────────────────────────────────────────────────────────────
|
|
5
|
+
/**
|
|
6
|
+
* The RSC content type used for payload negotiation.
|
|
7
|
+
* Must match the server's `RSC_CONTENT_TYPE` in `rsc.ts`.
|
|
8
|
+
*/
|
|
9
|
+
export const RSC_CONTENT_TYPE = 'text/x-component';
|
|
10
|
+
// ── Prefetch cache ────────────────────────────────────────────────
|
|
11
|
+
const prefetchCache = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Prefetch an RSC payload for a given URL. Idempotent — duplicate
|
|
14
|
+
* calls for the same URL are no-ops until the cache entry expires.
|
|
15
|
+
*
|
|
16
|
+
* Used internally by `initNavigation()` and exported for use by
|
|
17
|
+
* `<Link prefetch="hover">` and `useRouter().prefetch()`.
|
|
18
|
+
*/
|
|
19
|
+
export function prefetchRSC(url) {
|
|
20
|
+
if (prefetchCache.has(url))
|
|
21
|
+
return;
|
|
22
|
+
const promise = fetch(url, {
|
|
23
|
+
headers: { 'Accept': RSC_CONTENT_TYPE },
|
|
24
|
+
priority: 'low',
|
|
25
|
+
});
|
|
26
|
+
prefetchCache.set(url, promise);
|
|
27
|
+
// Expire after 30 seconds to avoid stale data
|
|
28
|
+
setTimeout(() => prefetchCache.delete(url), 30_000);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get a prefetched response from the cache, if available.
|
|
32
|
+
* Removes the entry from cache (one-time read).
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
export function _consumePrefetch(url) {
|
|
36
|
+
const cached = prefetchCache.get(url);
|
|
37
|
+
if (cached) {
|
|
38
|
+
prefetchCache.delete(url);
|
|
39
|
+
}
|
|
40
|
+
return cached;
|
|
41
|
+
}
|
|
42
|
+
// ── Helpers ───────────────────────────────────────────────────────
|
|
43
|
+
/** @internal */
|
|
44
|
+
export function isSameOrigin(href) {
|
|
45
|
+
try {
|
|
46
|
+
const url = new URL(href, location.href);
|
|
47
|
+
return url.origin === location.origin;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// ── Pathname subscription (useSyncExternalStore) ──────────────────
|
|
54
|
+
/**
|
|
55
|
+
* Subscribe to pathname changes via the Navigation API.
|
|
56
|
+
* Returns an unsubscribe function.
|
|
57
|
+
*
|
|
58
|
+
* For use with React's `useSyncExternalStore`.
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
export function _subscribeToPathname(callback) {
|
|
62
|
+
if (!('navigation' in globalThis)) {
|
|
63
|
+
// No Navigation API — pathname never changes client-side
|
|
64
|
+
return () => { };
|
|
65
|
+
}
|
|
66
|
+
const nav = globalThis.navigation;
|
|
67
|
+
// 'currententrychange' fires after a navigation completes
|
|
68
|
+
nav.addEventListener('currententrychange', callback);
|
|
69
|
+
return () => nav.removeEventListener('currententrychange', callback);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get the current pathname snapshot for `useSyncExternalStore`.
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
export function _getPathnameSnapshot() {
|
|
76
|
+
return globalThis.location?.pathname ?? '/';
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Server snapshot for SSR — always returns '/'.
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
export function _getServerPathnameSnapshot() {
|
|
83
|
+
return '/';
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=nav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav.js","sourceRoot":"","sources":["../../src/client/nav.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,+DAA+D;AAC/D,oEAAoE;AACpE,mEAAmE;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAEnD,qEAAqE;AAErE,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAEnC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE;QACzB,OAAO,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;QACvC,QAAQ,EAAE,KAAwB;KACnC,CAAC,CAAC;IAEH,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAEhC,8CAA8C;IAC9C,UAAU,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,qEAAqE;AAErE,gBAAgB;AAChB,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,qEAAqE;AAErE;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAoB;IACvD,IAAI,CAAC,CAAC,YAAY,IAAI,UAAU,CAAC,EAAE,CAAC;QAClC,yDAAyD;QACzD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAI,UAAkB,CAAC,UAAU,CAAC;IAE3C,0DAA0D;IAC1D,GAAG,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IACrD,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,UAAU,CAAC,QAAQ,EAAE,QAAQ,IAAI,GAAG,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate the contents of `juice-env.d.ts` from a set of route patterns.
|
|
3
|
+
*
|
|
4
|
+
* The emitted declaration file augments `@cmj/juice/runtime` with:
|
|
5
|
+
* - `RegisteredRoutes` — union of all route pattern literals
|
|
6
|
+
* - `RouteParams` — interface mapping each route to its extracted params
|
|
7
|
+
*
|
|
8
|
+
* @param routes - Object mapping route patterns to route entries.
|
|
9
|
+
* @returns The full `.d.ts` file contents as a string.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* _generateRouteTypes({ '/product/:id': { moduleId: '...' } });
|
|
14
|
+
* // → juice-env.d.ts with typed params
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function _generateRouteTypes(routes: Record<string, unknown>): string;
|
|
20
|
+
/**
|
|
21
|
+
* Extract `:param` names from a route pattern string.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* _extractParamNames('/product/:id') // → ['id']
|
|
26
|
+
* _extractParamNames('/user/:userId/post/:postId') // → ['userId', 'postId']
|
|
27
|
+
* _extractParamNames('/about') // → []
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
export declare function _extractParamNames(pattern: string): string[];
|
|
33
|
+
//# sourceMappingURL=dts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dts.d.ts","sourceRoot":"","sources":["../../src/compiler/dts.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAqCR;AAuBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAW5D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────
|
|
2
|
+
// @cmj/juice — Route Types DTS Generator
|
|
3
|
+
//
|
|
4
|
+
// Generates a `juice-env.d.ts` file that augments `@cmj/juice/runtime`
|
|
5
|
+
// with typed route params extracted from the project's route patterns.
|
|
6
|
+
//
|
|
7
|
+
// This is called by the Vite plugin at build time and during dev mode
|
|
8
|
+
// when routes are added/removed.
|
|
9
|
+
// ─────────────────────────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Generate the contents of `juice-env.d.ts` from a set of route patterns.
|
|
12
|
+
*
|
|
13
|
+
* The emitted declaration file augments `@cmj/juice/runtime` with:
|
|
14
|
+
* - `RegisteredRoutes` — union of all route pattern literals
|
|
15
|
+
* - `RouteParams` — interface mapping each route to its extracted params
|
|
16
|
+
*
|
|
17
|
+
* @param routes - Object mapping route patterns to route entries.
|
|
18
|
+
* @returns The full `.d.ts` file contents as a string.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* _generateRouteTypes({ '/product/:id': { moduleId: '...' } });
|
|
23
|
+
* // → juice-env.d.ts with typed params
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export function _generateRouteTypes(routes) {
|
|
29
|
+
const patterns = Object.keys(routes).sort();
|
|
30
|
+
if (patterns.length === 0) {
|
|
31
|
+
return _header() + _emptyBody();
|
|
32
|
+
}
|
|
33
|
+
const lines = [];
|
|
34
|
+
lines.push(_header());
|
|
35
|
+
lines.push(`declare module '@cmj/juice/runtime' {`);
|
|
36
|
+
lines.push(` /** All route patterns registered in this project. @generated */`);
|
|
37
|
+
// RegisteredRoutes union
|
|
38
|
+
const union = patterns.map((p) => ` | '${_escapeQuote(p)}'`).join('\n');
|
|
39
|
+
lines.push(` type RegisteredRoutes =`);
|
|
40
|
+
lines.push(union + ';');
|
|
41
|
+
lines.push('');
|
|
42
|
+
lines.push(` /** Typed params for each registered route. @generated */`);
|
|
43
|
+
lines.push(` interface RouteParams {`);
|
|
44
|
+
for (const pattern of patterns) {
|
|
45
|
+
const params = _extractParamNames(pattern);
|
|
46
|
+
if (params.length === 0) {
|
|
47
|
+
lines.push(` readonly '${_escapeQuote(pattern)}': {};`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const fields = params.map((p) => `readonly ${p}: string`).join('; ');
|
|
51
|
+
lines.push(` readonly '${_escapeQuote(pattern)}': { ${fields} };`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
lines.push(` }`);
|
|
55
|
+
lines.push(`}`);
|
|
56
|
+
lines.push('');
|
|
57
|
+
return lines.join('\n');
|
|
58
|
+
}
|
|
59
|
+
// ── Helpers ────────────────────────────────────────────────────────
|
|
60
|
+
function _header() {
|
|
61
|
+
return [
|
|
62
|
+
'// Auto-generated by @cmj/juice — DO NOT EDIT',
|
|
63
|
+
'// This file provides typed route params for your project.',
|
|
64
|
+
'// Re-generated on every build and when routes change in dev mode.',
|
|
65
|
+
'',
|
|
66
|
+
].join('\n');
|
|
67
|
+
}
|
|
68
|
+
function _emptyBody() {
|
|
69
|
+
return [
|
|
70
|
+
`declare module '@cmj/juice/runtime' {`,
|
|
71
|
+
` type RegisteredRoutes = never;`,
|
|
72
|
+
` interface RouteParams {}`,
|
|
73
|
+
`}`,
|
|
74
|
+
'',
|
|
75
|
+
].join('\n');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Extract `:param` names from a route pattern string.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* _extractParamNames('/product/:id') // → ['id']
|
|
83
|
+
* _extractParamNames('/user/:userId/post/:postId') // → ['userId', 'postId']
|
|
84
|
+
* _extractParamNames('/about') // → []
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
export function _extractParamNames(pattern) {
|
|
90
|
+
const params = [];
|
|
91
|
+
const segments = pattern.split('/');
|
|
92
|
+
for (const segment of segments) {
|
|
93
|
+
if (segment.startsWith(':')) {
|
|
94
|
+
params.push(segment.slice(1));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return params;
|
|
98
|
+
}
|
|
99
|
+
function _escapeQuote(s) {
|
|
100
|
+
return s.replace(/'/g, "\\'");
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=dts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dts.js","sourceRoot":"","sources":["../../src/compiler/dts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA0BrD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,GAAG,CA8X/D"}
|
package/dist/compiler/plugin.js
CHANGED
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
* });
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
|
-
import { relative } from 'node:path';
|
|
25
|
+
import { relative, join } from 'node:path';
|
|
26
|
+
import { writeFileSync } from 'node:fs';
|
|
26
27
|
import { JuiceExportError, JuiceMutualExclusionError, JuiceBarrelExportError, } from './errors.js';
|
|
27
28
|
import { _mayContainDirective, _detectDirective, } from './parse.js';
|
|
28
29
|
import { _generateProxyModule } from './proxy.js';
|
|
@@ -31,6 +32,7 @@ import { _buildManifest, _serializeManifest } from './manifest.js';
|
|
|
31
32
|
import { ClientModuleRegistry } from './registry.js';
|
|
32
33
|
import { ServerActionRegistry } from './server-action-registry.js';
|
|
33
34
|
import { _discoverRoutes } from './discover.js';
|
|
35
|
+
import { _generateRouteTypes } from './dts.js';
|
|
34
36
|
/**
|
|
35
37
|
* Virtual module prefix used to serve proxy modules for `'use client'`
|
|
36
38
|
* components during the server build.
|
|
@@ -110,6 +112,10 @@ export default function juice(options) {
|
|
|
110
112
|
routes = discovered;
|
|
111
113
|
}
|
|
112
114
|
}
|
|
115
|
+
// Emit typed route params — juice-env.d.ts
|
|
116
|
+
if (routes) {
|
|
117
|
+
_emitRouteTypes(config.root, routes);
|
|
118
|
+
}
|
|
113
119
|
},
|
|
114
120
|
// ------------------------------------------------------------------
|
|
115
121
|
// Dev server — SSR middleware for `vite dev` with HMR
|
|
@@ -117,6 +123,26 @@ export default function juice(options) {
|
|
|
117
123
|
configureServer(server) {
|
|
118
124
|
if (!routes)
|
|
119
125
|
return;
|
|
126
|
+
// Watch for route file changes to re-emit juice-env.d.ts
|
|
127
|
+
const routesDir = join(config.root, 'app', 'routes');
|
|
128
|
+
server.watcher.on('add', (file) => {
|
|
129
|
+
if (file.startsWith(routesDir)) {
|
|
130
|
+
const discovered = _discoverRoutes(config.root);
|
|
131
|
+
if (discovered) {
|
|
132
|
+
routes = discovered;
|
|
133
|
+
_emitRouteTypes(config.root, routes);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
server.watcher.on('unlink', (file) => {
|
|
138
|
+
if (file.startsWith(routesDir)) {
|
|
139
|
+
const discovered = _discoverRoutes(config.root);
|
|
140
|
+
if (discovered) {
|
|
141
|
+
routes = discovered;
|
|
142
|
+
_emitRouteTypes(config.root, routes);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
120
146
|
// Register middleware directly (not deferred) so it runs BEFORE
|
|
121
147
|
// Vite's built-in SPA fallback which returns 404 for missing index.html
|
|
122
148
|
server.middlewares.use(async (req, res, next) => {
|
|
@@ -360,4 +386,19 @@ function _chunkName(specifier) {
|
|
|
360
386
|
const meaningful = parts.slice(-2).join('_');
|
|
361
387
|
return meaningful || 'chunk';
|
|
362
388
|
}
|
|
389
|
+
/**
|
|
390
|
+
* Emit `juice-env.d.ts` to the project root with typed route params.
|
|
391
|
+
* Called on route discovery and when route files change in dev mode.
|
|
392
|
+
* @internal
|
|
393
|
+
*/
|
|
394
|
+
function _emitRouteTypes(projectRoot, routes) {
|
|
395
|
+
try {
|
|
396
|
+
const dts = _generateRouteTypes(routes);
|
|
397
|
+
const outPath = join(projectRoot, 'juice-env.d.ts');
|
|
398
|
+
writeFileSync(outPath, dts, 'utf-8');
|
|
399
|
+
}
|
|
400
|
+
catch {
|
|
401
|
+
// Non-fatal — don't break the build if DTS generation fails
|
|
402
|
+
}
|
|
403
|
+
}
|
|
363
404
|
//# sourceMappingURL=plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/compiler/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FlightManifest, RouterOptions, ParsedBody, ActionContext } from './types.js';
|
|
1
|
+
import type { FlightManifest, RouterOptions, ParsedBody, ActionContext, _CompiledRoute } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Extracts the server action ID from the request.
|
|
4
4
|
*
|
|
@@ -75,9 +75,10 @@ export declare function createActionContext(req: Request, params?: Readonly<Reco
|
|
|
75
75
|
* 7. Returns the result as a JSON response, or passes through
|
|
76
76
|
* a thrown `Response` directly.
|
|
77
77
|
*
|
|
78
|
-
* @param req
|
|
79
|
-
* @param manifest
|
|
80
|
-
* @param options
|
|
78
|
+
* @param req - The incoming POST `Request`.
|
|
79
|
+
* @param manifest - The flight manifest for action resolution.
|
|
80
|
+
* @param options - Router options (hooks).
|
|
81
|
+
* @param compiledRoutes - Pre-compiled routes for URL→params extraction.
|
|
81
82
|
* @returns A `Response` with the action result or error.
|
|
82
83
|
*
|
|
83
84
|
* @internal
|
|
@@ -85,5 +86,5 @@ export declare function createActionContext(req: Request, params?: Readonly<Reco
|
|
|
85
86
|
export declare function _serverActionPipeline(req: Request, manifest: FlightManifest, options: Required<Pick<RouterOptions, 'onError'>> & RouterOptions & {
|
|
86
87
|
isDev?: boolean;
|
|
87
88
|
hmrUrl?: string;
|
|
88
|
-
}): Promise<Response>;
|
|
89
|
+
}, compiledRoutes?: readonly _CompiledRoute[]): Promise<Response>;
|
|
89
90
|
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/runtime/actions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/runtime/actions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAK3G;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBxB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAelE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAavE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,MAAM,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,GAC5C,aAAa,CAkBf;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,GAAG,aAAa,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACxG,cAAc,CAAC,EAAE,SAAS,cAAc,EAAE,GACzC,OAAO,CAAC,QAAQ,CAAC,CAoInB"}
|
package/dist/runtime/actions.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { ActionNotFoundError, ModuleLoadError } from './errors.js';
|
|
6
6
|
import { _resolveModulePath } from './resolve.js';
|
|
7
7
|
import { _bustModuleCache } from './dev.js';
|
|
8
|
+
import { _matchRoute } from './matcher.js';
|
|
8
9
|
/**
|
|
9
10
|
* Extracts the server action ID from the request.
|
|
10
11
|
*
|
|
@@ -140,14 +141,15 @@ export function createActionContext(req, params = {}) {
|
|
|
140
141
|
* 7. Returns the result as a JSON response, or passes through
|
|
141
142
|
* a thrown `Response` directly.
|
|
142
143
|
*
|
|
143
|
-
* @param req
|
|
144
|
-
* @param manifest
|
|
145
|
-
* @param options
|
|
144
|
+
* @param req - The incoming POST `Request`.
|
|
145
|
+
* @param manifest - The flight manifest for action resolution.
|
|
146
|
+
* @param options - Router options (hooks).
|
|
147
|
+
* @param compiledRoutes - Pre-compiled routes for URL→params extraction.
|
|
146
148
|
* @returns A `Response` with the action result or error.
|
|
147
149
|
*
|
|
148
150
|
* @internal
|
|
149
151
|
*/
|
|
150
|
-
export async function _serverActionPipeline(req, manifest, options) {
|
|
152
|
+
export async function _serverActionPipeline(req, manifest, options, compiledRoutes) {
|
|
151
153
|
// ── 1. Extract action ID ─────────────────────────────────────
|
|
152
154
|
const actionId = await _extractActionId(req);
|
|
153
155
|
if (!actionId) {
|
|
@@ -162,7 +164,12 @@ export async function _serverActionPipeline(req, manifest, options) {
|
|
|
162
164
|
});
|
|
163
165
|
}
|
|
164
166
|
// ── 2. Lookup in manifest ────────────────────────────────
|
|
165
|
-
|
|
167
|
+
// SECURITY: Use Object.hasOwn() to prevent prototype pollution.
|
|
168
|
+
// Without this, action IDs like "constructor", "__proto__", "toString"
|
|
169
|
+
// would resolve to Object.prototype methods instead of returning 404.
|
|
170
|
+
const actionRef = Object.hasOwn(manifest.serverActions, actionId)
|
|
171
|
+
? manifest.serverActions[actionId]
|
|
172
|
+
: undefined;
|
|
166
173
|
if (!actionRef) {
|
|
167
174
|
// Return a clean 404 JSON response instead of throwing.
|
|
168
175
|
// Throwing would leak stack traces in production.
|
|
@@ -199,8 +206,11 @@ export async function _serverActionPipeline(req, manifest, options) {
|
|
|
199
206
|
}
|
|
200
207
|
// ── 4. Parse body into discriminated union ─────────────────
|
|
201
208
|
const parsed = await _parseBody(req);
|
|
202
|
-
// ── 5. Construct ActionContext
|
|
203
|
-
|
|
209
|
+
// ── 5. Construct ActionContext with route-matched params ───
|
|
210
|
+
// Match the POST URL against compiled routes to extract params
|
|
211
|
+
// (e.g., /product/42 → { id: '42' }). Falls back to {} if no match.
|
|
212
|
+
const routeMatch = compiledRoutes ? _matchRoute(req.url, compiledRoutes) : null;
|
|
213
|
+
const ctx = createActionContext(req, routeMatch?.params ?? {});
|
|
204
214
|
// ── 6. Execute with two arguments: (body, ctx) ────────────
|
|
205
215
|
// First arg: the parsed body (FormData, JSON, or text)
|
|
206
216
|
// → React 19 <form action={fn}> compatibility preserved
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/runtime/actions.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AACvE,uEAAuE;AAEvE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/runtime/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createRouter } from './router.js';
|
|
2
2
|
export { createActionContext } from './actions.js';
|
|
3
3
|
export { _isRSCRequest, _buildModuleMap, RSC_CONTENT_TYPE } from './rsc.js';
|
|
4
|
-
export type { FlightManifest, RouterOptions, ActionContext, ParsedBody } from './types.js';
|
|
4
|
+
export type { FlightManifest, RouterOptions, ActionContext, ParsedBody, ExtractRouteParams } from './types.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../src/runtime/matcher.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAmB1E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAC5C,QAAQ,EAAE,MAAM,GACf,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../src/runtime/matcher.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAmB1E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAC5C,QAAQ,EAAE,MAAM,GACf,cAAc,EAAE,CA8BlB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,SAAS,cAAc,EAAE,GAClC,WAAW,GAAG,IAAI,CAuCpB"}
|
package/dist/runtime/matcher.js
CHANGED
|
@@ -44,12 +44,13 @@ if (!('URLPattern' in globalThis)) {
|
|
|
44
44
|
export function _compileRoutes(routes, basePath) {
|
|
45
45
|
// Normalize: strip trailing slash from basePath (unless it IS '/')
|
|
46
46
|
const base = basePath === '/' ? '' : basePath.replace(/\/+$/, '');
|
|
47
|
-
|
|
47
|
+
const compiled = Object.entries(routes).map(([pattern, entry]) => {
|
|
48
48
|
const fullPattern = base + (pattern === '/' ? '/' : pattern);
|
|
49
49
|
try {
|
|
50
50
|
return {
|
|
51
51
|
pattern: new URLPattern({ pathname: fullPattern }),
|
|
52
52
|
entry,
|
|
53
|
+
_raw: pattern,
|
|
53
54
|
};
|
|
54
55
|
}
|
|
55
56
|
catch (cause) {
|
|
@@ -58,6 +59,14 @@ export function _compileRoutes(routes, basePath) {
|
|
|
58
59
|
`Check the route keys in your manifest`);
|
|
59
60
|
}
|
|
60
61
|
});
|
|
62
|
+
// Sort routes: static (no params/wildcards) before dynamic.
|
|
63
|
+
// This ensures "/product/featured" matches before "/product/:id".
|
|
64
|
+
compiled.sort((a, b) => {
|
|
65
|
+
const aDynamic = (a._raw.match(/[:\*]/g) ?? []).length;
|
|
66
|
+
const bDynamic = (b._raw.match(/[:\*]/g) ?? []).length;
|
|
67
|
+
return aDynamic - bDynamic;
|
|
68
|
+
});
|
|
69
|
+
return compiled;
|
|
61
70
|
}
|
|
62
71
|
/**
|
|
63
72
|
* Matches a full URL string against the compiled route table.
|
|
@@ -79,20 +88,37 @@ export function _compileRoutes(routes, basePath) {
|
|
|
79
88
|
* @internal
|
|
80
89
|
*/
|
|
81
90
|
export function _matchRoute(url, compiled) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
// Try matching the URL as-is first, then normalize trailing slashes.
|
|
92
|
+
// This ensures `/cart/` matches a route defined as `/cart` and vice versa.
|
|
93
|
+
const urlObj = new URL(url);
|
|
94
|
+
const pathname = urlObj.pathname;
|
|
95
|
+
const candidates = [url];
|
|
96
|
+
if (pathname !== '/' && pathname.endsWith('/')) {
|
|
97
|
+
// Try without trailing slash: /cart/ → /cart
|
|
98
|
+
urlObj.pathname = pathname.slice(0, -1);
|
|
99
|
+
candidates.push(urlObj.href);
|
|
100
|
+
}
|
|
101
|
+
else if (!pathname.endsWith('/')) {
|
|
102
|
+
// Try with trailing slash: /cart → /cart/
|
|
103
|
+
urlObj.pathname = pathname + '/';
|
|
104
|
+
candidates.push(urlObj.href);
|
|
105
|
+
}
|
|
106
|
+
for (const candidate of candidates) {
|
|
107
|
+
for (const route of compiled) {
|
|
108
|
+
const result = route.pattern.exec(candidate);
|
|
109
|
+
if (result) {
|
|
110
|
+
// URLPattern groups are Record<string, string | undefined>.
|
|
111
|
+
// Filter out undefined values for a clean params object.
|
|
112
|
+
const rawGroups = result.pathname.groups;
|
|
113
|
+
const params = {};
|
|
114
|
+
for (const key of Object.keys(rawGroups)) {
|
|
115
|
+
const value = rawGroups[key];
|
|
116
|
+
if (value !== undefined) {
|
|
117
|
+
params[key] = value;
|
|
118
|
+
}
|
|
93
119
|
}
|
|
120
|
+
return { entry: route.entry, params };
|
|
94
121
|
}
|
|
95
|
-
return { entry: route.entry, params };
|
|
96
122
|
}
|
|
97
123
|
}
|
|
98
124
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/runtime/matcher.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,oEAAoE;AACpE,iDAAiD;AACjD,EAAE;AACF,+DAA+D;AAC/D,6DAA6D;AAC7D,uEAAuE;AAGvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,qDAAqD;AACrD,IAAI,CAAC,CAAC,YAAY,IAAI,UAAU,CAAC,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,6DAA6D;QAC7D,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,kEAAkE;YAChE,yDAAyD;YACzD,uCAAuC;YACvC,gEAAgE;YAChE,4DAA4D,CAC/D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA4C,EAC5C,QAAgB;IAEhB,mEAAmE;IACnE,MAAM,IAAI,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAElE,
|
|
1
|
+
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/runtime/matcher.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,oEAAoE;AACpE,iDAAiD;AACjD,EAAE;AACF,+DAA+D;AAC/D,6DAA6D;AAC7D,uEAAuE;AAGvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,qDAAqD;AACrD,IAAI,CAAC,CAAC,YAAY,IAAI,UAAU,CAAC,EAAE,CAAC;IAClC,IAAI,CAAC;QACH,6DAA6D;QAC7D,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,kEAAkE;YAChE,yDAAyD;YACzD,uCAAuC;YACvC,gEAAgE;YAChE,4DAA4D,CAC/D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA4C,EAC5C,QAAgB;IAEhB,mEAAmE;IACnE,MAAM,IAAI,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAElE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE;QAC/D,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,IAAI,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;gBAClD,KAAK;gBACL,IAAI,EAAE,OAAO;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,IAAI,uBAAuB,CAC/B,0BAA0B,OAAO,mBAAmB,WAAW,MAAM;gBACnE,iCAAiC;gBACjC,uCAAuC,CAC1C,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4DAA4D;IAC5D,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACvD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACvD,OAAO,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CACzB,GAAW,EACX,QAAmC;IAEnC,qEAAqE;IACrE,2EAA2E;IAC3E,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;IAEzB,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,6CAA6C;QAC7C,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;SAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,0CAA0C;QAC1C,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;QACjC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE,CAAC;gBACX,4DAA4D;gBAC5D,yDAAyD;gBACzD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzC,MAAM,MAAM,GAA2B,EAAE,CAAC;gBAE1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBACzC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;oBAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBACtB,CAAC;gBACH,CAAC;gBAED,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/runtime/router.js
CHANGED
|
@@ -344,7 +344,7 @@ async function _handleRequestInner(req, compiledRoutes, manifest, resolvedOption
|
|
|
344
344
|
return response;
|
|
345
345
|
}
|
|
346
346
|
case 'POST': {
|
|
347
|
-
return _serverActionPipeline(req, manifest, resolvedOptions);
|
|
347
|
+
return _serverActionPipeline(req, manifest, resolvedOptions, compiledRoutes);
|
|
348
348
|
}
|
|
349
349
|
default: {
|
|
350
350
|
return new Response('Method Not Allowed', {
|