@rebask/core 0.1.2 → 0.1.3
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/handlers/rsc/index.d.ts.map +1 -1
- package/dist/handlers/rsc/index.js +2 -1
- package/dist/lib/errors.d.ts +3 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +5 -0
- package/dist/lib/ppr/headers.d.ts +1 -1
- package/dist/lib/ppr/headers.d.ts.map +1 -1
- package/dist/lib/ppr/headers.js +1 -1
- package/dist/observe-navigations.d.ts.map +1 -1
- package/dist/observe-navigations.js +29 -13
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +11 -5
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/handlers/rsc/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/handlers/rsc/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAsBzE,MAAM,MAAM,kBAAkB,GAAG;IAChC,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACrE;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,gEAAgE;IAChE,QAAQ,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,WAAW,sBAAsB;IACtC,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAA;IACzD,wFAAwF;IACxF,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACpC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,EACnB,aAAa,CAAC,EAAE,sBAAsB,GACpC,OAAO,CAAC,QAAQ,CAAC,CAqLnB"}
|
|
@@ -3,7 +3,7 @@ import { STATIC } from "../../lib/cache-storage.js";
|
|
|
3
3
|
import { getDeploymentIdHeader } from "../../lib/deployment-id.js";
|
|
4
4
|
import { resetDevOverlayReady } from "../../lib/dev-server.js";
|
|
5
5
|
import { pageChannel } from "../../lib/devtools-channels.js";
|
|
6
|
-
import { getCacheControlHeader, REBASK_HTML_VARY_HEADER, REBASK_SHELL_HEADER, REBASK_TAIL_HEADER, } from "../../lib/ppr/headers.js";
|
|
6
|
+
import { getCacheControlHeader, REBASK_HTML_VARY_HEADER, REBASK_SHELL_HEADER, REBASK_TAIL_HEADER, REBASK_TREE_HEADER, } from "../../lib/ppr/headers.js";
|
|
7
7
|
import { parseResumeState } from "../../lib/ppr/postponed-state.js";
|
|
8
8
|
import { prerenderPaths } from "../../lib/prerender-paths.js";
|
|
9
9
|
import {} from "../../lib/route-matcher.js";
|
|
@@ -62,6 +62,7 @@ export async function handlePageRoute(request, route, params, handleOptions) {
|
|
|
62
62
|
return respond(new Response(JSON.stringify(payload), {
|
|
63
63
|
headers: {
|
|
64
64
|
"content-type": "application/json",
|
|
65
|
+
[REBASK_TREE_HEADER]: "1",
|
|
65
66
|
"cache-control": getCacheControlHeader({ revalidate: STATIC }),
|
|
66
67
|
vary: REBASK_HTML_VARY_HEADER,
|
|
67
68
|
...getDeploymentIdHeader(),
|
package/dist/lib/errors.d.ts
CHANGED
|
@@ -25,6 +25,9 @@ export declare class DeploymentMismatchError extends Error {
|
|
|
25
25
|
readonly event: DeploymentMismatchEvent;
|
|
26
26
|
constructor(event: DeploymentMismatchEvent);
|
|
27
27
|
}
|
|
28
|
+
export declare class DocumentNavigation extends Error {
|
|
29
|
+
constructor();
|
|
30
|
+
}
|
|
28
31
|
export declare class ServerFunctionError extends Error {
|
|
29
32
|
readonly status: number;
|
|
30
33
|
constructor(message: string, status: number);
|
package/dist/lib/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAM/D,eAAO,MAAM,0BAA0B,+BAA+B,CAAA;AActE;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,4BAAyB;IAExC,YAAY,UAAU,EAAE,MAAM,EAE7B;CACD;AAED,yFAAyF;AACzF,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,4BAAyB;IAExC,cAGC;CACD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,kCAAyB;IAExC,YAAY,OAAO,EAAE,MAAM,EAK1B;CACD;AAED,8EAA8E;AAC9E,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,kCAAyB;IAExC,YAAY,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAExC;CACD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACrC,QAAQ,CAAC,KAAK,EAAE,uBAAuB;IAAnD,YAAqB,KAAK,EAAE,uBAAuB,EAElD;CACD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAG5C,QAAQ,CAAC,MAAM,EAAE,MAAM;IAFxB,YACC,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM,EAIvB;CACD;AAED,sEAAsE;AACtE,qBAAa,yBAA0B,SAAQ,KAAK;IACvC,QAAQ,CAAC,KAAK,EAAE,uBAAuB;IAAnD,YAAqB,KAAK,EAAE,uBAAuB,EAElD;CACD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG3D"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAM/D,eAAO,MAAM,0BAA0B,+BAA+B,CAAA;AActE;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,4BAAyB;IAExC,YAAY,UAAU,EAAE,MAAM,EAE7B;CACD;AAED,yFAAyF;AACzF,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,4BAAyB;IAExC,cAGC;CACD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,kCAAyB;IAExC,YAAY,OAAO,EAAE,MAAM,EAK1B;CACD;AAED,8EAA8E;AAC9E,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,kCAAyB;IAExC,YAAY,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAExC;CACD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACrC,QAAQ,CAAC,KAAK,EAAE,uBAAuB;IAAnD,YAAqB,KAAK,EAAE,uBAAuB,EAElD;CACD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,cAEC;CACD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAG5C,QAAQ,CAAC,MAAM,EAAE,MAAM;IAFxB,YACC,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM,EAIvB;CACD;AAED,sEAAsE;AACtE,qBAAa,yBAA0B,SAAQ,KAAK;IACvC,QAAQ,CAAC,KAAK,EAAE,uBAAuB;IAAnD,YAAqB,KAAK,EAAE,uBAAuB,EAElD;CACD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAElF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG3D"}
|
package/dist/lib/errors.js
CHANGED
|
@@ -52,6 +52,11 @@ export class DeploymentMismatchError extends Error {
|
|
|
52
52
|
this.event = event;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
+
export class DocumentNavigation extends Error {
|
|
56
|
+
constructor() {
|
|
57
|
+
super("document navigation required");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
55
60
|
export class ServerFunctionError extends Error {
|
|
56
61
|
status;
|
|
57
62
|
constructor(message, status) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CacheControl } from "./types.js";
|
|
2
2
|
/** Header used for RSC server functions. */
|
|
3
3
|
export declare const REBASK_ACTION_HEADER = "x-rsc-action";
|
|
4
|
-
/**
|
|
4
|
+
/** Requests the route tree. Page routes echo it to identify the response as a route tree. */
|
|
5
5
|
export declare const REBASK_TREE_HEADER = "x-rebask-tree";
|
|
6
6
|
/** Header set to "1" when requesting a page segment's Flight shell. */
|
|
7
7
|
export declare const REBASK_SHELL_HEADER = "x-rebask-shell";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/lib/ppr/headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,4CAA4C;AAC5C,eAAO,MAAM,oBAAoB,iBAAiB,CAAA;AAElD,
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/lib/ppr/headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,4CAA4C;AAC5C,eAAO,MAAM,oBAAoB,iBAAiB,CAAA;AAElD,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,kBAAkB,CAAA;AAEjD,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AAEnD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,kBAAkB,CAAA;AAEjD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,uBAAuB,CAAA;AAE3D,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AAEnD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,qBAAqB,CAAA;AAEvD,eAAO,MAAM,uBAAuB,0BAAkC,CAAA;AAEtE,eAAO,MAAM,sBAAsB,yDAAiF,CAAA;AAEpH,oBAAY,iBAAiB;IAC5B,mCAAmC;IACnC,GAAG,QAAQ;IACX,wEAAwE;IACxE,KAAK,UAAU;IACf,8BAA8B;IAC9B,IAAI,SAAS;CACb;AAED,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,UAAQ,GAAG,MAAM,CAoBtF;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAO/E"}
|
package/dist/lib/ppr/headers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Header used for RSC server functions. */
|
|
2
2
|
export const REBASK_ACTION_HEADER = "x-rsc-action";
|
|
3
|
-
/**
|
|
3
|
+
/** Requests the route tree. Page routes echo it to identify the response as a route tree. */
|
|
4
4
|
export const REBASK_TREE_HEADER = "x-rebask-tree";
|
|
5
5
|
/** Header set to "1" when requesting a page segment's Flight shell. */
|
|
6
6
|
export const REBASK_SHELL_HEADER = "x-rebask-shell";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-navigations.d.ts","sourceRoot":"","sources":["../src/observe-navigations.tsx"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAgB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"observe-navigations.d.ts","sourceRoot":"","sources":["../src/observe-navigations.tsx"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAgB,kBAAkB,SAqGjC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useEffect } from "react";
|
|
2
2
|
import { useRouterCache } from "./components/cache-slot.js";
|
|
3
3
|
import { reloadForDeploymentMismatch } from "./lib/deployment-reload.js";
|
|
4
|
-
import { HandledDeploymentMismatch } from "./lib/errors.js";
|
|
4
|
+
import { DocumentNavigation, HandledDeploymentMismatch } from "./lib/errors.js";
|
|
5
5
|
import { beginNavigation, createNavigationIntent, isCurrentNavigation, pendingScrollAtom, } from "./lib/scroll.js";
|
|
6
6
|
import { useRouter } from "./router.js";
|
|
7
7
|
/**
|
|
@@ -18,43 +18,59 @@ export function ObserveNavigations() {
|
|
|
18
18
|
cache.shellError = false;
|
|
19
19
|
router.refresh(window.location.href).catch(() => { });
|
|
20
20
|
}
|
|
21
|
-
function onNavigation(intent, scrollIntent) {
|
|
22
|
-
cache.pathnameAtom.set(window.location.pathname);
|
|
21
|
+
function onNavigation(intent, scrollIntent, url, commitHistory, onDocument) {
|
|
23
22
|
const isCurrent = cache.captureRouteTransaction();
|
|
23
|
+
let committed = false;
|
|
24
|
+
const commit = () => {
|
|
25
|
+
if (committed)
|
|
26
|
+
return;
|
|
27
|
+
committed = true;
|
|
28
|
+
// A same-document entry followed by a document reload breaks back/forward for non-page responses.
|
|
29
|
+
commitHistory?.();
|
|
30
|
+
cache.pathnameAtom.set(window.location.pathname);
|
|
31
|
+
};
|
|
24
32
|
const activate = (routeTreeResponse, complete = false) => {
|
|
25
33
|
if (!isCurrentNavigation(intent) || !isCurrent())
|
|
26
34
|
return;
|
|
35
|
+
commit();
|
|
27
36
|
router.activate(routeTreeResponse);
|
|
28
37
|
if (scrollIntent && (complete || scrollIntent.type !== "hash")) {
|
|
29
38
|
pendingScrollAtom.set(scrollIntent);
|
|
30
39
|
}
|
|
31
40
|
};
|
|
32
41
|
router
|
|
33
|
-
.prefetch(
|
|
42
|
+
.prefetch(url, { onRouteTree: activate })
|
|
34
43
|
.then((response) => activate(response, true))
|
|
35
44
|
// React receives rendering failures separately. This catch prevents a duplicate unhandled rejection.
|
|
36
45
|
.catch((error) => {
|
|
46
|
+
if (error instanceof DocumentNavigation) {
|
|
47
|
+
if (!isCurrentNavigation(intent) || !isCurrent())
|
|
48
|
+
return;
|
|
49
|
+
onDocument?.();
|
|
50
|
+
}
|
|
37
51
|
if (error instanceof HandledDeploymentMismatch) {
|
|
52
|
+
if (!isCurrentNavigation(intent) || !isCurrent())
|
|
53
|
+
return;
|
|
54
|
+
commit();
|
|
38
55
|
reloadForDeploymentMismatch(error.event);
|
|
39
56
|
}
|
|
40
57
|
});
|
|
41
58
|
}
|
|
42
59
|
function onPopstate() {
|
|
43
|
-
|
|
60
|
+
const url = window.location.href;
|
|
61
|
+
onNavigation(beginNavigation(), null, url, undefined, () => window.location.replace(url));
|
|
44
62
|
}
|
|
45
63
|
const { pushState, replaceState } = window.history;
|
|
46
64
|
window.addEventListener("popstate", onPopstate);
|
|
47
65
|
window.history.pushState = function (...args) {
|
|
48
|
-
const
|
|
49
|
-
const intent = createNavigationIntent(
|
|
50
|
-
onNavigation(intent, intent);
|
|
51
|
-
return res;
|
|
66
|
+
const url = new URL(args[2] || window.location.href, window.location.href).href;
|
|
67
|
+
const intent = createNavigationIntent(url);
|
|
68
|
+
onNavigation(intent, intent, url, () => pushState.apply(this, args), () => window.location.assign(url));
|
|
52
69
|
};
|
|
53
70
|
window.history.replaceState = function (...args) {
|
|
54
|
-
const
|
|
55
|
-
const intent = createNavigationIntent(
|
|
56
|
-
onNavigation(intent, intent);
|
|
57
|
-
return res;
|
|
71
|
+
const url = new URL(args[2] || window.location.href, window.location.href).href;
|
|
72
|
+
const intent = createNavigationIntent(url);
|
|
73
|
+
onNavigation(intent, intent, url, () => replaceState.apply(this, args), () => window.location.replace(url));
|
|
58
74
|
};
|
|
59
75
|
return () => {
|
|
60
76
|
window.removeEventListener("popstate", onPopstate);
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAcrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.tsx"],"names":[],"mappings":"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"}
|
package/dist/router.js
CHANGED
|
@@ -9,7 +9,7 @@ import { denyRoutePrediction, getRoutePathInfo, learnedPredictions, learnRoutePr
|
|
|
9
9
|
import { captureClientTraceData, getClientTraceHeaders } from "./lib/client-trace.js";
|
|
10
10
|
import { getDeploymentIdHeader } from "./lib/deployment-id.js";
|
|
11
11
|
import { reloadForDeploymentMismatch } from "./lib/deployment-reload.js";
|
|
12
|
-
import { HandledDeploymentMismatch, DeploymentMismatchError } from "./lib/errors.js";
|
|
12
|
+
import { DocumentNavigation, HandledDeploymentMismatch, DeploymentMismatchError, } from "./lib/errors.js";
|
|
13
13
|
import { extractSegmentHints } from "./lib/extract-segment-hints.js";
|
|
14
14
|
import { REBASK_SHELL_HEADER, REBASK_TAIL_HEADER, REBASK_TRAILER_HEADER, REBASK_TREE_HEADER, } from "./lib/ppr/headers.js";
|
|
15
15
|
import { getRouteTreeUrl, } from "./lib/route-prediction.js";
|
|
@@ -243,6 +243,11 @@ class Router {
|
|
|
243
243
|
})
|
|
244
244
|
.then(async (response) => {
|
|
245
245
|
captureClientTraceData(response);
|
|
246
|
+
if (response.headers.get(REBASK_TREE_HEADER) !== "1") {
|
|
247
|
+
if (response.body)
|
|
248
|
+
await response.body.cancel();
|
|
249
|
+
throw new DocumentNavigation();
|
|
250
|
+
}
|
|
246
251
|
this.cache.handleDeploymentMismatch(response, url, "tree");
|
|
247
252
|
const [tree, routePrediction] = (await response.json());
|
|
248
253
|
return { tree, routePrediction, url: getUrl(url).href };
|
|
@@ -574,10 +579,10 @@ class Router {
|
|
|
574
579
|
this.cache.registerRouteTree(predicted);
|
|
575
580
|
return predicted;
|
|
576
581
|
}
|
|
577
|
-
if (inflightSiblingTree) {
|
|
582
|
+
if (inflightSiblingTree && isCurrentNavigation(inflightSiblingTree.navigation)) {
|
|
578
583
|
// An in-flight fetch under the same parent teaches this route's prediction, so the
|
|
579
584
|
// retry can avoid a second tree request.
|
|
580
|
-
await inflightSiblingTree.catch(() => { });
|
|
585
|
+
await inflightSiblingTree.response.catch(() => { });
|
|
581
586
|
return isCurrent()
|
|
582
587
|
? this.prefetchRouteTree(url, cache, dedupe)
|
|
583
588
|
: this.fetchRouteTree(url, dedupe);
|
|
@@ -591,11 +596,12 @@ class Router {
|
|
|
591
596
|
return routeTreeResponse;
|
|
592
597
|
});
|
|
593
598
|
if (cache) {
|
|
594
|
-
|
|
599
|
+
const inflight = { response: routeTreeRequest, navigation: captureNavigationIntent() };
|
|
600
|
+
inflightRouteTreeByParent.set(parentPathname, inflight);
|
|
595
601
|
routeTreeRequest
|
|
596
602
|
.catch(() => { })
|
|
597
603
|
.finally(() => {
|
|
598
|
-
if (inflightRouteTreeByParent.get(parentPathname) ===
|
|
604
|
+
if (inflightRouteTreeByParent.get(parentPathname) === inflight) {
|
|
599
605
|
inflightRouteTreeByParent.delete(parentPathname);
|
|
600
606
|
}
|
|
601
607
|
});
|