@rebask/core 0.3.0 → 0.4.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/components/image.d.ts +16 -3
- package/dist/components/image.d.ts.map +1 -1
- package/dist/components/image.js +50 -68
- package/dist/components/link.d.ts.map +1 -1
- package/dist/components/link.js +6 -2
- package/dist/lib/image-optimization/fetch-remote-image.d.ts +17 -0
- package/dist/lib/image-optimization/fetch-remote-image.d.ts.map +1 -0
- package/dist/lib/image-optimization/fetch-remote-image.js +157 -0
- package/dist/lib/image-optimization/get-img-props.d.ts +3 -5
- package/dist/lib/image-optimization/get-img-props.d.ts.map +1 -1
- package/dist/lib/image-optimization/get-img-props.js +66 -40
- package/dist/lib/image-optimization/handler.d.ts +0 -3
- package/dist/lib/image-optimization/handler.d.ts.map +1 -1
- package/dist/lib/image-optimization/handler.js +339 -124
- package/dist/lib/image-optimization/image-config.d.ts +31 -4
- package/dist/lib/image-optimization/image-config.d.ts.map +1 -1
- package/dist/lib/image-optimization/image-config.js +6 -0
- package/dist/lib/image-optimization/image-error.d.ts +8 -0
- package/dist/lib/image-optimization/image-error.d.ts.map +1 -0
- package/dist/lib/image-optimization/image-error.js +10 -0
- package/dist/lib/image-optimization/image-plugin.d.ts.map +1 -1
- package/dist/lib/image-optimization/image-plugin.js +27 -14
- package/dist/lib/image-optimization/is-private-ip.d.ts +2 -0
- package/dist/lib/image-optimization/is-private-ip.d.ts.map +1 -0
- package/dist/lib/image-optimization/is-private-ip.js +43 -0
- package/dist/lib/image-optimization/match-patterns.d.ts +4 -0
- package/dist/lib/image-optimization/match-patterns.d.ts.map +1 -0
- package/dist/lib/image-optimization/match-patterns.js +39 -0
- package/dist/lib/image-optimization/read-body.d.ts +2 -0
- package/dist/lib/image-optimization/read-body.d.ts.map +1 -0
- package/dist/lib/image-optimization/read-body.js +27 -0
- package/dist/lib/image-optimization/static-image-loader.d.ts +2 -0
- package/dist/lib/image-optimization/static-image-loader.d.ts.map +1 -0
- package/dist/lib/image-optimization/static-image-loader.js +60 -0
- package/dist/lib/server-router/build-entries.d.ts.map +1 -1
- package/dist/lib/server-router/route-entries.js +1 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +12 -4
- package/package.json +2 -1
- package/dist/__type_probe__.d.ts +0 -2
- package/dist/__type_probe__.d.ts.map +0 -1
- package/dist/__type_probe__.js +0 -4
- package/dist/components/error-boundary-client.d.ts +0 -49
- package/dist/components/error-boundary-client.d.ts.map +0 -1
- package/dist/components/error-boundary-client.js +0 -71
- package/dist/components/error-boundary.browser.d.ts +0 -8
- package/dist/components/error-boundary.browser.d.ts.map +0 -1
- package/dist/components/error-boundary.browser.js +0 -6
- package/dist/components/error.d.ts +0 -2
- package/dist/components/error.d.ts.map +0 -1
- package/dist/components/error.js +0 -5
- package/dist/components/not-found-activator.d.ts +0 -11
- package/dist/components/not-found-activator.d.ts.map +0 -1
- package/dist/components/not-found-activator.js +0 -26
- package/dist/components/not-found-boundary-client.d.ts +0 -3
- package/dist/components/not-found-boundary-client.d.ts.map +0 -1
- package/dist/components/not-found-boundary-client.js +0 -20
- package/dist/components/not-found-boundary.browser.d.ts +0 -8
- package/dist/components/not-found-boundary.browser.d.ts.map +0 -1
- package/dist/components/not-found-boundary.browser.js +0 -4
- package/dist/components/not-found-boundary.d.ts +0 -8
- package/dist/components/not-found-boundary.d.ts.map +0 -1
- package/dist/components/not-found-boundary.js +0 -9
- package/dist/components/not-found-thrower.d.ts +0 -2
- package/dist/components/not-found-thrower.d.ts.map +0 -1
- package/dist/components/not-found-thrower.js +0 -7
- package/dist/components/not-found.d.ts +0 -2
- package/dist/components/not-found.d.ts.map +0 -1
- package/dist/components/not-found.js +0 -5
- package/dist/components/status-page.d.ts +0 -6
- package/dist/components/status-page.d.ts.map +0 -1
- package/dist/components/status-page.js +0 -61
- package/dist/handler.d.ts +0 -12
- package/dist/handler.d.ts.map +0 -1
- package/dist/handler.js +0 -21
- package/dist/handlers/rsc/constants.d.ts +0 -3
- package/dist/handlers/rsc/constants.d.ts.map +0 -1
- package/dist/handlers/rsc/constants.js +0 -2
- package/dist/handlers/rsc/create-response.d.ts +0 -3
- package/dist/handlers/rsc/create-response.d.ts.map +0 -1
- package/dist/handlers/rsc/create-response.js +0 -378
- package/dist/handlers/rsc/render-with-retries.d.ts +0 -4
- package/dist/handlers/rsc/render-with-retries.d.ts.map +0 -1
- package/dist/handlers/rsc/render-with-retries.js +0 -154
- package/dist/handlers/rsc/retry-loop.d.ts +0 -3
- package/dist/handlers/rsc/retry-loop.d.ts.map +0 -1
- package/dist/handlers/rsc/retry-loop.js +0 -145
- package/dist/handlers/rsc/stream-rsc-payload.d.ts +0 -9
- package/dist/handlers/rsc/stream-rsc-payload.d.ts.map +0 -1
- package/dist/handlers/rsc/stream-rsc-payload.js +0 -20
- package/dist/handlers/rsc/types.d.ts +0 -26
- package/dist/handlers/rsc/types.d.ts.map +0 -1
- package/dist/handlers/rsc/types.js +0 -7
- package/dist/handlers/rsc.d.ts +0 -20
- package/dist/handlers/rsc.d.ts.map +0 -1
- package/dist/handlers/rsc.js +0 -872
- package/dist/integration.d.ts +0 -14
- package/dist/integration.d.ts.map +0 -1
- package/dist/integration.js +0 -9
- package/dist/lib/dev-module-load-race.d.ts +0 -8
- package/dist/lib/dev-module-load-race.d.ts.map +0 -1
- package/dist/lib/dev-module-load-race.js +0 -31
- package/dist/lib/dev-page-exports.d.ts +0 -5
- package/dist/lib/dev-page-exports.d.ts.map +0 -1
- package/dist/lib/dev-page-exports.js +0 -14
- package/dist/lib/environment-names.d.ts +0 -11
- package/dist/lib/environment-names.d.ts.map +0 -1
- package/dist/lib/environment-names.js +0 -10
- package/dist/lib/initial-hash-scroll.d.ts.map +0 -1
- package/dist/lib/not-found.d.ts +0 -5
- package/dist/lib/not-found.d.ts.map +0 -1
- package/dist/lib/not-found.js +0 -7
- package/dist/lib/page-exports.d.ts +0 -9
- package/dist/lib/page-exports.d.ts.map +0 -1
- package/dist/lib/page-exports.js +0 -47
- package/dist/lib/pattern-segments.d.ts +0 -8
- package/dist/lib/pattern-segments.d.ts.map +0 -1
- package/dist/lib/pattern-segments.js +0 -22
- package/dist/lib/ppr/cache-status.d.ts +0 -3
- package/dist/lib/ppr/cache-status.d.ts.map +0 -1
- package/dist/lib/ppr/cache-status.js +0 -5
- package/dist/lib/server-router-contract.d.ts +0 -42
- package/dist/lib/server-router-contract.d.ts.map +0 -1
- package/dist/lib/server-router-contract.js +0 -6
- package/dist/lib/server-router-loader.d.ts +0 -10
- package/dist/lib/server-router-loader.d.ts.map +0 -1
- package/dist/lib/server-router-loader.js +0 -180
- package/dist/lib/server-router.d.ts +0 -8
- package/dist/lib/server-router.d.ts.map +0 -1
- package/dist/lib/server-router.js +0 -173
- package/dist/plugins/ppr-upgrade.d.ts +0 -36
- package/dist/plugins/ppr-upgrade.d.ts.map +0 -1
- package/dist/plugins/ppr-upgrade.js +0 -32
- package/dist/plugins/server-router-fallback.d.ts +0 -15
- package/dist/plugins/server-router-fallback.d.ts.map +0 -1
- package/dist/plugins/server-router-fallback.js +0 -30
- package/dist/server.d.ts +0 -10
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -57
package/dist/integration.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { handleApp, handleProxy } from "./entry.rsc.js";
|
|
2
|
-
export interface LoadHandlersOptions {
|
|
3
|
-
/** Vite build output directory. */
|
|
4
|
-
root: string | URL;
|
|
5
|
-
}
|
|
6
|
-
export interface RebaskHandlers {
|
|
7
|
-
/** Runs the proxy routes. Returns `null` when none answered the request. */
|
|
8
|
-
handleProxy: typeof handleProxy;
|
|
9
|
-
/** Runs the app routes, without the proxy. */
|
|
10
|
-
handleApp: typeof handleApp;
|
|
11
|
-
}
|
|
12
|
-
/** Load Rebask's built proxy and app handlers into your server. */
|
|
13
|
-
export declare function loadHandlers(options: LoadHandlersOptions): Promise<RebaskHandlers>;
|
|
14
|
-
//# sourceMappingURL=integration.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5D,MAAM,WAAW,mBAAmB;IACnC,mCAAmC;IACnC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC9B,4EAA4E;IAC5E,WAAW,EAAE,OAAO,WAAW,CAAA;IAC/B,8CAA8C;IAC9C,SAAS,EAAE,OAAO,SAAS,CAAA;CAC3B;AAED,mEAAmE;AACnE,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CASxF"}
|
package/dist/integration.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { join, resolve } from "node:path";
|
|
2
|
-
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
|
-
/** Load Rebask's built proxy and app handlers into your server. */
|
|
4
|
-
export async function loadHandlers(options) {
|
|
5
|
-
const root = options.root instanceof URL ? fileURLToPath(options.root) : resolve(options.root);
|
|
6
|
-
process.env.REBASK_BUILD_DIR = join(root, ".rebask");
|
|
7
|
-
const entry = (await import(pathToFileURL(join(root, "rsc", "index.js")).href));
|
|
8
|
-
return { handleProxy: entry.handleProxy, handleApp: entry.handleApp };
|
|
9
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Detect Vite cold-start races where soft-nav imports fail because optimizeDeps
|
|
3
|
-
* rewrote hashes mid-request (504 Outdated Optimize Dep). These are not user bugs.
|
|
4
|
-
*/
|
|
5
|
-
export declare function isDevModuleLoadRace(error: unknown): boolean;
|
|
6
|
-
/** Soft-recover by full reload once; returns true when recovery was triggered. */
|
|
7
|
-
export declare function reloadForDevModuleLoadRace(error: unknown): boolean;
|
|
8
|
-
//# sourceMappingURL=dev-module-load-race.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev-module-load-race.d.ts","sourceRoot":"","sources":["../../src/lib/dev-module-load-race.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAkB3D;AAED,kFAAkF;AAClF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CASlE"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Detect Vite cold-start races where soft-nav imports fail because optimizeDeps
|
|
3
|
-
* rewrote hashes mid-request (504 Outdated Optimize Dep). These are not user bugs.
|
|
4
|
-
*/
|
|
5
|
-
export function isDevModuleLoadRace(error) {
|
|
6
|
-
if (!import.meta.env.DEV || typeof window === "undefined")
|
|
7
|
-
return false;
|
|
8
|
-
const message = error instanceof Error
|
|
9
|
-
? error.message
|
|
10
|
-
: typeof error === "string"
|
|
11
|
-
? error
|
|
12
|
-
: error && typeof error === "object" && "message" in error
|
|
13
|
-
? String(error.message)
|
|
14
|
-
: "";
|
|
15
|
-
return (message.includes("Failed to fetch dynamically imported module") ||
|
|
16
|
-
message.includes("error loading dynamically imported module") ||
|
|
17
|
-
message.includes("Outdated Optimize Dep") ||
|
|
18
|
-
message.includes("Importing a module script failed"));
|
|
19
|
-
}
|
|
20
|
-
/** Soft-recover by full reload once; returns true when recovery was triggered. */
|
|
21
|
-
export function reloadForDevModuleLoadRace(error) {
|
|
22
|
-
if (!isDevModuleLoadRace(error))
|
|
23
|
-
return false;
|
|
24
|
-
const key = "__rebask_dev_module_load_reload__";
|
|
25
|
-
const w = window;
|
|
26
|
-
if (w[key])
|
|
27
|
-
return true;
|
|
28
|
-
w[key] = true;
|
|
29
|
-
window.location.reload();
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { PageExports } from "./page-exports.js";
|
|
2
|
-
export declare function getDevPageExports(filePath: string): any;
|
|
3
|
-
export declare function setDevPageExports(filePath: string, exports: PageExports): void;
|
|
4
|
-
export declare function clearDevPageExports(): void;
|
|
5
|
-
//# sourceMappingURL=dev-page-exports.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev-page-exports.d.ts","sourceRoot":"","sources":["../../src/lib/dev-page-exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAWpD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,OAEjD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,QAEvE;AAED,wBAAgB,mBAAmB,SAElC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
const CACHE_KEY = "__rebaskDevPageExports";
|
|
2
|
-
const globalVar = globalThis;
|
|
3
|
-
function cache() {
|
|
4
|
-
return (globalVar[CACHE_KEY] ??= new Map());
|
|
5
|
-
}
|
|
6
|
-
export function getDevPageExports(filePath) {
|
|
7
|
-
return cache().get(filePath);
|
|
8
|
-
}
|
|
9
|
-
export function setDevPageExports(filePath, exports) {
|
|
10
|
-
cache().set(filePath, exports);
|
|
11
|
-
}
|
|
12
|
-
export function clearDevPageExports() {
|
|
13
|
-
cache().clear();
|
|
14
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The name of the Vite environment that builds and serves Rebask's RSC output. Server
|
|
3
|
-
* integrations (like `rebask-nitro`) that provide their own routing to this environment (e.g.
|
|
4
|
-
* via `fetchViteEnv`) should use this constant instead of hardcoding `"rsc"`.
|
|
5
|
-
*
|
|
6
|
-
* Kept in its own dependency-free module (rather than alongside the rest of `vite.ts`'s exports)
|
|
7
|
-
* so runtime code — not just Vite config code — can import it without pulling in Rebask's Vite
|
|
8
|
-
* plugin and its build-time-only dependencies.
|
|
9
|
-
*/
|
|
10
|
-
export declare const REBASK_RSC_ENVIRONMENT_NAME = "rsc";
|
|
11
|
-
//# sourceMappingURL=environment-names.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"environment-names.d.ts","sourceRoot":"","sources":["../../src/lib/environment-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,QAAQ,CAAA"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The name of the Vite environment that builds and serves Rebask's RSC output. Server
|
|
3
|
-
* integrations (like `rebask-nitro`) that provide their own routing to this environment (e.g.
|
|
4
|
-
* via `fetchViteEnv`) should use this constant instead of hardcoding `"rsc"`.
|
|
5
|
-
*
|
|
6
|
-
* Kept in its own dependency-free module (rather than alongside the rest of `vite.ts`'s exports)
|
|
7
|
-
* so runtime code — not just Vite config code — can import it without pulling in Rebask's Vite
|
|
8
|
-
* plugin and its build-time-only dependencies.
|
|
9
|
-
*/
|
|
10
|
-
export const REBASK_RSC_ENVIRONMENT_NAME = "rsc";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"initial-hash-scroll.d.ts","sourceRoot":"","sources":["../../src/lib/initial-hash-scroll.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,kwCAiCnC,CAAA"}
|
package/dist/lib/not-found.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"not-found.d.ts","sourceRoot":"","sources":["../../src/lib/not-found.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,QAAQ,IAAI,KAAK,CAEhC"}
|
package/dist/lib/not-found.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-exports.d.ts","sourceRoot":"","sources":["../../src/lib/page-exports.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM;;;GAiDrD"}
|
package/dist/lib/page-exports.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
|
-
import { parseSync } from "vite";
|
|
3
|
-
export async function readPageExports(filePath) {
|
|
4
|
-
const source = await readFile(filePath, "utf8");
|
|
5
|
-
const { program } = parseSync(filePath, source);
|
|
6
|
-
let hasDefault = false;
|
|
7
|
-
let hasNotFound = false;
|
|
8
|
-
for (const statement of program.body) {
|
|
9
|
-
if (statement.type === "ExportDefaultDeclaration") {
|
|
10
|
-
hasDefault = true;
|
|
11
|
-
continue;
|
|
12
|
-
}
|
|
13
|
-
if (statement.type === "ExportAllDeclaration") {
|
|
14
|
-
const exported = statement.exported;
|
|
15
|
-
if (exported?.type === "Identifier" && exported.name === "default") {
|
|
16
|
-
hasDefault = true;
|
|
17
|
-
}
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
if (statement.type !== "ExportNamedDeclaration")
|
|
21
|
-
continue;
|
|
22
|
-
const declaration = statement.declaration;
|
|
23
|
-
if (declaration?.type === "VariableDeclaration") {
|
|
24
|
-
for (const declarator of declaration.declarations) {
|
|
25
|
-
if (declarator.id.type !== "Identifier")
|
|
26
|
-
continue;
|
|
27
|
-
if (declarator.id.name === "notFound") {
|
|
28
|
-
let init = declarator.init;
|
|
29
|
-
while (init &&
|
|
30
|
-
(init.type === "TSAsExpression" ||
|
|
31
|
-
init.type === "TSSatisfiesExpression" ||
|
|
32
|
-
init.type === "ParenthesizedExpression")) {
|
|
33
|
-
init = init.expression;
|
|
34
|
-
}
|
|
35
|
-
hasNotFound = init?.type === "Literal" && init.value === true;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
for (const specifier of statement.specifiers ?? []) {
|
|
40
|
-
if (specifier.exported.type !== "Identifier")
|
|
41
|
-
continue;
|
|
42
|
-
if (specifier.exported.name === "default")
|
|
43
|
-
hasDefault = true;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return { default: hasDefault, notFound: hasNotFound };
|
|
47
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { RouteSegment } from "./route-matcher.js";
|
|
2
|
-
/**
|
|
3
|
-
* Parse a pattern string (e.g. `"/blog/:slug"`, `"/admin/*"`) into route segments.
|
|
4
|
-
*
|
|
5
|
-
* Used to convert proxy and image path patterns into `RouteSegment[]`, expected by `createMatcher`.
|
|
6
|
-
*/
|
|
7
|
-
export declare function parsePatternToSegments(pattern: string): RouteSegment[];
|
|
8
|
-
//# sourceMappingURL=pattern-segments.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pattern-segments.d.ts","sourceRoot":"","sources":["../../src/lib/pattern-segments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,CAgBtE"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parse a pattern string (e.g. `"/blog/:slug"`, `"/admin/*"`) into route segments.
|
|
3
|
-
*
|
|
4
|
-
* Used to convert proxy and image path patterns into `RouteSegment[]`, expected by `createMatcher`.
|
|
5
|
-
*/
|
|
6
|
-
export function parsePatternToSegments(pattern) {
|
|
7
|
-
const segments = [];
|
|
8
|
-
for (const part of pattern.split("/")) {
|
|
9
|
-
if (part === "")
|
|
10
|
-
continue;
|
|
11
|
-
if (part === "*") {
|
|
12
|
-
segments.push({ type: "catch-all", name: "*" });
|
|
13
|
-
}
|
|
14
|
-
else if (part.startsWith(":")) {
|
|
15
|
-
segments.push({ type: "dynamic", name: part.slice(1) });
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
segments.push({ type: "static", value: part });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return segments;
|
|
22
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache-status.d.ts","sourceRoot":"","sources":["../../../src/lib/ppr/cache-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE1E,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExF"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { ProxyHandler } from "../proxy.js";
|
|
2
|
-
import type { HttpMethod, LayoutRoute, Route, RouteHandlerRoute } from "./route-matcher.js";
|
|
3
|
-
export declare enum RouteType {
|
|
4
|
-
APP = 0,
|
|
5
|
-
PROXY = 1,
|
|
6
|
-
IMAGE = 2
|
|
7
|
-
}
|
|
8
|
-
type Handler = (request: Request, params: Record<string, string | string[]>) => Promise<Response>;
|
|
9
|
-
type RequestHandler = (request: Request) => Promise<Response>;
|
|
10
|
-
type AppEntry<T> = {
|
|
11
|
-
methods: HttpMethod[];
|
|
12
|
-
type: RouteType.APP;
|
|
13
|
-
route: T;
|
|
14
|
-
handler: Handler;
|
|
15
|
-
};
|
|
16
|
-
type PageRouteEntry = AppEntry<Route>;
|
|
17
|
-
type RouteHandlerEntry = AppEntry<RouteHandlerRoute>;
|
|
18
|
-
type LayoutRSCEntry = AppEntry<LayoutRoute>;
|
|
19
|
-
type ProxyEntry = {
|
|
20
|
-
type: RouteType.PROXY;
|
|
21
|
-
methods: HttpMethod[];
|
|
22
|
-
pattern: string;
|
|
23
|
-
handler: ProxyHandler;
|
|
24
|
-
};
|
|
25
|
-
type ImageEntry = {
|
|
26
|
-
type: RouteType.IMAGE;
|
|
27
|
-
methods: HttpMethod[];
|
|
28
|
-
pattern: string;
|
|
29
|
-
handler: Handler;
|
|
30
|
-
};
|
|
31
|
-
export type RouteMatchEntry = PageRouteEntry | RouteHandlerEntry | LayoutRSCEntry | ProxyEntry | ImageEntry;
|
|
32
|
-
/** A compiled route matcher that finds the best matching route for a given method + URL. */
|
|
33
|
-
export interface RouteMatcher {
|
|
34
|
-
find(method: string, url: string): RequestHandler | null;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* A router plugin provides an implementation of this function via the
|
|
38
|
-
* `virtual:rebask/server-router` virtual module.
|
|
39
|
-
*/
|
|
40
|
-
export type CreateMatcherFn = (entries: RouteMatchEntry[]) => RouteMatcher;
|
|
41
|
-
export {};
|
|
42
|
-
//# sourceMappingURL=server-router-contract.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-router-contract.d.ts","sourceRoot":"","sources":["../../src/lib/server-router-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAE3F,oBAAY,SAAS;IACpB,GAAG,IAAA;IACH,KAAK,IAAA;IACL,KAAK,IAAA;CACL;AAED,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAEjG,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE7D,KAAK,QAAQ,CAAC,CAAC,IAAI;IAClB,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,IAAI,EAAE,SAAS,CAAC,GAAG,CAAA;IACnB,KAAK,EAAE,CAAC,CAAA;IACR,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,KAAK,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;AACrC,KAAK,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAA;AACpD,KAAK,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;AAE3C,KAAK,UAAU,GAAG;IACjB,IAAI,EAAE,SAAS,CAAC,KAAK,CAAA;IACrB,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,YAAY,CAAA;CACrB,CAAA;AAED,KAAK,UAAU,GAAG;IACjB,IAAI,EAAE,SAAS,CAAC,KAAK,CAAA;IACrB,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,eAAe,GACxB,cAAc,GACd,iBAAiB,GACjB,cAAc,GACd,UAAU,GACV,UAAU,CAAA;AAEb,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC5B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAA;CACxD;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,CAAA"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
type RequestHandler = (request: Request) => Promise<Response>;
|
|
2
|
-
export interface RebaskRouter {
|
|
3
|
-
find: (request: Request) => RequestHandler;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Get the compiled server router for route matching.
|
|
7
|
-
*/
|
|
8
|
-
export declare function getRouter(): Promise<RebaskRouter>;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=server-router-loader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-router-loader.d.ts","sourceRoot":"","sources":["../../src/lib/server-router-loader.ts"],"names":[],"mappings":"AA6BA,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE7D,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,cAAc,CAAA;CAC1C;AA+MD;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAkBvD"}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { layoutRoutes as configLayoutRoutes, routeHandlerRoutes as configRouteHandlerRoutes, routes as configRoutes, } from "virtual:rebask/config";
|
|
2
|
-
import { imageConfig } from "virtual:rebask/image-config";
|
|
3
|
-
import { loadImageHandler } from "virtual:rebask/image-handler";
|
|
4
|
-
import { proxyRouter } from "virtual:rebask/proxy-router";
|
|
5
|
-
import { createMatcher } from "virtual:rebask/server-router";
|
|
6
|
-
import { applyCookies, getSetCookieValues } from "../cookies.js";
|
|
7
|
-
import { handleImageRequest } from "../handlers/image.js";
|
|
8
|
-
import { handleRouteHandler } from "../handlers/route-handler.js";
|
|
9
|
-
import { handlePageRoute } from "../handlers/rsc/index.js";
|
|
10
|
-
import { handleLayoutRouteRequest } from "../handlers/segment.js";
|
|
11
|
-
import { getDevServer } from "./dev-server.js";
|
|
12
|
-
import { reinjectFlightHeaders, sanitizeForProxy } from "./flight-headers.js";
|
|
13
|
-
import { parsePatternToSegments } from "./pattern-segments.js";
|
|
14
|
-
import { buildProxy } from "./proxy/build-proxy.js";
|
|
15
|
-
import { proxyExternal } from "./proxy/proxy-external.js";
|
|
16
|
-
import { REWRITE_HEADER, rewriteHeaders } from "./proxy/rewrite.js";
|
|
17
|
-
import { assertNoPageRouteHandlerConflicts, buildLayoutRoutes, buildRouteHandlerRoutes, buildRoutes, } from "./route-builder.js";
|
|
18
|
-
const LAYOUT_PREFIX_SEGMENTS = [
|
|
19
|
-
{ type: "static", value: "_rebask" },
|
|
20
|
-
{ type: "static", value: "1" },
|
|
21
|
-
];
|
|
22
|
-
function filterGroups(segments) {
|
|
23
|
-
return segments.filter((s) => s.type !== "group");
|
|
24
|
-
}
|
|
25
|
-
function buildMainEntries(pageRoutes, routeHandlerRoutes, layoutRoutes) {
|
|
26
|
-
const entries = [];
|
|
27
|
-
// Image optimization route
|
|
28
|
-
if (imageConfig !== null && loadImageHandler !== undefined) {
|
|
29
|
-
entries.push({
|
|
30
|
-
method: "GET",
|
|
31
|
-
segments: parsePatternToSegments(imageConfig.path),
|
|
32
|
-
data: { dispatch: (req) => handleImageRequest(req) },
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
// Page routes — registered for GET and POST:
|
|
36
|
-
// - GET: page loads, RSC requests, segment requests
|
|
37
|
-
// - POST: server actions, form submissions, PPR resume
|
|
38
|
-
for (const route of pageRoutes) {
|
|
39
|
-
const segments = filterGroups(route.segments);
|
|
40
|
-
const dispatch = (req, params) => handlePageRoute(req, route, params);
|
|
41
|
-
const hasOptionalCatchAll = route.segments.some((s) => s.type === "optional-catch-all");
|
|
42
|
-
if (hasOptionalCatchAll) {
|
|
43
|
-
const catchAllSegment = route.segments.find((s) => s.type === "optional-catch-all");
|
|
44
|
-
const catchAllName = catchAllSegment.name;
|
|
45
|
-
const baseSegments = segments.filter((s) => s.type !== "optional-catch-all");
|
|
46
|
-
const baseDispatch = (req, params) => handlePageRoute(req, route, { ...params, [catchAllName]: [] });
|
|
47
|
-
entries.push({ method: "GET", segments: baseSegments, data: { dispatch: baseDispatch } });
|
|
48
|
-
entries.push({ method: "GET", segments, data: { dispatch } });
|
|
49
|
-
entries.push({ method: "POST", segments: baseSegments, data: { dispatch: baseDispatch } });
|
|
50
|
-
entries.push({ method: "POST", segments, data: { dispatch } });
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
entries.push({ method: "GET", segments, data: { dispatch } });
|
|
54
|
-
entries.push({ method: "POST", segments, data: { dispatch } });
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
// Route handlers — registered for all methods so they can return 405
|
|
58
|
-
// when the path exists but a specific method is not implemented.
|
|
59
|
-
for (const route of routeHandlerRoutes) {
|
|
60
|
-
const segments = filterGroups(route.segments);
|
|
61
|
-
const dispatch = (req, params) => handleRouteHandler(req, route, params);
|
|
62
|
-
entries.push({ method: undefined, segments, data: { dispatch } });
|
|
63
|
-
}
|
|
64
|
-
// Layout routes — registered under /_rebask/1/{path}
|
|
65
|
-
for (const route of layoutRoutes) {
|
|
66
|
-
const segments = [...LAYOUT_PREFIX_SEGMENTS, ...route.segments];
|
|
67
|
-
const dispatch = (req, params) => handleLayoutRouteRequest(req, route, params);
|
|
68
|
-
entries.push({ method: "GET", segments, data: { dispatch } });
|
|
69
|
-
}
|
|
70
|
-
return entries;
|
|
71
|
-
}
|
|
72
|
-
function buildMainRouter(pageRoutes, routeHandlerRoutes, layoutRoutes) {
|
|
73
|
-
const entries = buildMainEntries(pageRoutes, routeHandlerRoutes, layoutRoutes);
|
|
74
|
-
const matcher = createMatcher(entries);
|
|
75
|
-
return {
|
|
76
|
-
find(request) {
|
|
77
|
-
const match = matcher.find(request.method, request.url);
|
|
78
|
-
if (!match)
|
|
79
|
-
return notFoundHandler;
|
|
80
|
-
return (req) => match.data.dispatch(req, match.params);
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
async function notFoundHandler() {
|
|
85
|
-
return new Response("Not Found", { status: 404 });
|
|
86
|
-
}
|
|
87
|
-
function createRouter(pageRoutes, routeHandlerRoutes, layoutRoutes, resolvedProxyRouter = proxyRouter) {
|
|
88
|
-
const mainRouter = buildMainRouter(pageRoutes, routeHandlerRoutes, layoutRoutes);
|
|
89
|
-
if (!resolvedProxyRouter)
|
|
90
|
-
return mainRouter;
|
|
91
|
-
// Compose proxy + main router
|
|
92
|
-
return {
|
|
93
|
-
find(request) {
|
|
94
|
-
const proxyHandler = resolvedProxyRouter.find(request);
|
|
95
|
-
if (proxyHandler) {
|
|
96
|
-
return async (req) => {
|
|
97
|
-
const { sanitized, stashed } = sanitizeForProxy(req);
|
|
98
|
-
const result = await proxyHandler(sanitized);
|
|
99
|
-
if (result) {
|
|
100
|
-
const rewriteUrl = result.headers.get(REWRITE_HEADER);
|
|
101
|
-
if (rewriteUrl) {
|
|
102
|
-
const rewrittenUrl = new URL(rewriteUrl, req.url);
|
|
103
|
-
const reqOrigin = new URL(req.url).origin;
|
|
104
|
-
let response;
|
|
105
|
-
if (rewrittenUrl.origin !== reqOrigin) {
|
|
106
|
-
response = await proxyExternal(rewrittenUrl, req, result, stashed);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
const mergedHeaders = new Headers(rewriteHeaders.get(result) ?? req.headers);
|
|
110
|
-
reinjectFlightHeaders(mergedHeaders, stashed);
|
|
111
|
-
// Always restore the `accept` header from the original request. The proxy must not
|
|
112
|
-
// be able to change whether a request is treated as HTML or RSC.
|
|
113
|
-
const accept = req.headers.get("accept");
|
|
114
|
-
if (accept)
|
|
115
|
-
mergedHeaders.set("accept", accept);
|
|
116
|
-
// Build from URL string instead of `new Request(req, init)`. undici's Request uses
|
|
117
|
-
// a private `#state` field, and `new Request` reads it from the existing request,
|
|
118
|
-
// which fails when that request was created by a different undici module instance.
|
|
119
|
-
const init = { headers: mergedHeaders, method: req.method };
|
|
120
|
-
// Only pass the body for methods that support one, passing a stream for GET/HEAD
|
|
121
|
-
// throws and would lock the original body.
|
|
122
|
-
if (req.body && req.method !== "GET" && req.method !== "HEAD") {
|
|
123
|
-
init.body = req.body;
|
|
124
|
-
// @ts-expect-error - required for streaming body in Node.js
|
|
125
|
-
init.duplex = "half";
|
|
126
|
-
}
|
|
127
|
-
const rewrittenReq = new Request(rewrittenUrl, init);
|
|
128
|
-
const mainHandler = mainRouter.find(rewrittenReq);
|
|
129
|
-
response = await mainHandler(rewrittenReq);
|
|
130
|
-
}
|
|
131
|
-
for (const cookie of getSetCookieValues(result.headers)) {
|
|
132
|
-
response.headers.append("set-cookie", cookie);
|
|
133
|
-
}
|
|
134
|
-
return response;
|
|
135
|
-
}
|
|
136
|
-
return applyCookies(result);
|
|
137
|
-
}
|
|
138
|
-
// Fall through with the original request.
|
|
139
|
-
const mainHandler = mainRouter.find(req);
|
|
140
|
-
return mainHandler(req);
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
return mainRouter.find(request);
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
// In production, build the router at module load time
|
|
148
|
-
const router = import.meta.env.PROD
|
|
149
|
-
? createRouter(configRoutes, configRouteHandlerRoutes, configLayoutRoutes)
|
|
150
|
-
: null;
|
|
151
|
-
/**
|
|
152
|
-
* Imports app manifest files through the dev server, without this our HMR tests for the proxy
|
|
153
|
-
* don't work.
|
|
154
|
-
*/
|
|
155
|
-
async function loadAppManifest() {
|
|
156
|
-
const devServer = getDevServer();
|
|
157
|
-
if (devServer) {
|
|
158
|
-
const appManifest = await devServer.ssrLoadModule(new URL("./app-manifest.js", import.meta.url).pathname);
|
|
159
|
-
return appManifest;
|
|
160
|
-
}
|
|
161
|
-
return await import("./app-manifest.js");
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Get the compiled server router for route matching.
|
|
165
|
-
*/
|
|
166
|
-
export async function getRouter() {
|
|
167
|
-
if (router)
|
|
168
|
-
return router;
|
|
169
|
-
// Development: build routes from module manifest
|
|
170
|
-
const { layoutModules, pageModules, proxyModules, routeHandlerModules } = await loadAppManifest();
|
|
171
|
-
const layouts = Object.keys(layoutModules);
|
|
172
|
-
const pages = Object.keys(pageModules);
|
|
173
|
-
assertNoPageRouteHandlerConflicts(pages, Object.keys(routeHandlerModules));
|
|
174
|
-
const routes = buildRoutes(layouts, pages);
|
|
175
|
-
const routeHandlerRoutes = buildRouteHandlerRoutes(Object.keys(routeHandlerModules));
|
|
176
|
-
const layoutRoutes = buildLayoutRoutes(layouts);
|
|
177
|
-
const proxyModule = await Object.values(proxyModules)[0]?.();
|
|
178
|
-
const proxyRouterInDev = proxyModule && buildProxy(proxyModule.default);
|
|
179
|
-
return createRouter(routes, routeHandlerRoutes, layoutRoutes, proxyRouterInDev);
|
|
180
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
type RequestHandler = (request: Request) => Promise<Response>;
|
|
2
|
-
export interface RebaskRouter {
|
|
3
|
-
find: (request: Request) => RequestHandler;
|
|
4
|
-
}
|
|
5
|
-
/** Get the compiled server router for route matching. */
|
|
6
|
-
export declare function getRouter(): Promise<RebaskRouter>;
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=server-router.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server-router.d.ts","sourceRoot":"","sources":["../../src/lib/server-router.ts"],"names":[],"mappings":"AAkCA,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE7D,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,cAAc,CAAA;CAC1C;AAuLD,yDAAyD;AACzD,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAiBvD"}
|