reroute-js 0.45.11 → 0.45.12-beta.1
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/cli/bin.js +227 -126
- package/cli/bin.js.map +9 -8
- package/cli/index.js +2 -2
- package/cli/index.js.map +1 -1
- package/cli/src/commands/gen.d.ts.map +1 -1
- package/core/index.js +166 -81
- package/core/index.js.map +8 -7
- package/core/src/og/discovery.d.ts.map +1 -1
- package/core/src/ssr/lib/compute/index.d.ts.map +1 -1
- package/core/src/ssr/lib/data.d.ts.map +1 -1
- package/core/src/ssr/lib/index.d.ts +1 -0
- package/core/src/ssr/lib/index.d.ts.map +1 -1
- package/core/src/ssr/lib/route-match.d.ts +20 -0
- package/core/src/ssr/lib/route-match.d.ts.map +1 -0
- package/elysia/index.js +206 -105
- package/elysia/index.js.map +9 -8
- package/elysia/src/routes/og.d.ts.map +1 -1
- package/package.json +1 -1
- package/react/index.js +6 -2
- package/react/index.js.map +2 -2
- package/telemetry/react.js +6 -2
- package/telemetry/react.js.map +2 -2
- package/telemetry/server.js +6 -3
- package/telemetry/server.js.map +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/og/discovery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/og/discovery.ts"],"names":[],"mappings":"AAmFA;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBxB;AAED;;GAEG;AAEH,wBAAsB,oBAAoB,CACzC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,OAAO,gBAcpB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuBxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/ssr/lib/compute/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/src/ssr/lib/compute/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAKnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAkB5B,iBAAe,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,OAAO,GAClB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAgBrB;AAwBD;;;GAGG;AACH,wBAAsB,cAAc,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,OAAO,EACpB,OAAO,GAAE,cAAmB,EAC5B,YAAY,CAAC,EAAE,eAAe,GAC5B,OAAO,CAAC,aAAa,CAAC,CAyFxB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAWpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/ssr/lib/data.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/ssr/lib/data.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,SAAS,CAAC;AAyJvD,wBAAsB,qBAAqB,CAC1C,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,OAAO,CAAC,CA0ClB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/ssr/lib/index.ts"],"names":[],"mappings":"AAGA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAE1B,cAAc,eAAe,CAAC;AAE9B,cAAc,eAAe,CAAC;AAE9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAE/C,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/ssr/lib/index.ts"],"names":[],"mappings":"AAGA,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAE1B,cAAc,eAAe,CAAC;AAE9B,cAAc,eAAe,CAAC;AAE9B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAE/C,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAE9B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AAEvB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* reroute-js v0.45.11
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2026 stewones <hi@stewan.io>
|
|
6
|
+
* @see https://github.com/stewones/reroute
|
|
7
|
+
*
|
|
8
|
+
* Built with Bun <3
|
|
9
|
+
*/
|
|
10
|
+
type MatchableRoute = {
|
|
11
|
+
pattern: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function compareRouteSpecificity(a: MatchableRoute, b: MatchableRoute): number;
|
|
14
|
+
export declare function matchRoutePattern(pattern: string, pathname: string): Record<string, string> | null;
|
|
15
|
+
export declare function matchRoutes<T extends MatchableRoute>(routes: readonly T[], pathname: string): {
|
|
16
|
+
route: T;
|
|
17
|
+
params: Record<string, string>;
|
|
18
|
+
} | null;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=route-match.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-match.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/ssr/lib/route-match.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AA8BF,wBAAgB,uBAAuB,CACtC,CAAC,EAAE,cAAc,EACjB,CAAC,EAAE,cAAc,GACf,MAAM,CAwBR;AAsED,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CA0B/B;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,cAAc,EACnD,MAAM,EAAE,SAAS,CAAC,EAAE,EACpB,QAAQ,EAAE,MAAM,GACd;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CASrD"}
|
package/elysia/index.js
CHANGED
|
@@ -9,13 +9,17 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { createRequire } from "node:module";
|
|
11
11
|
var __defProp = Object.defineProperty;
|
|
12
|
+
var __returnValue = (v) => v;
|
|
13
|
+
function __exportSetter(name, newValue) {
|
|
14
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
15
|
+
}
|
|
12
16
|
var __export = (target, all) => {
|
|
13
17
|
for (var name in all)
|
|
14
18
|
__defProp(target, name, {
|
|
15
19
|
get: all[name],
|
|
16
20
|
enumerable: true,
|
|
17
21
|
configurable: true,
|
|
18
|
-
set: (
|
|
22
|
+
set: __exportSetter.bind(all, name)
|
|
19
23
|
});
|
|
20
24
|
};
|
|
21
25
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
@@ -790,6 +794,103 @@ function compressStreamIfAccepted(stream, contentType, _acceptEncoding) {
|
|
|
790
794
|
}
|
|
791
795
|
var init_compression = () => {};
|
|
792
796
|
|
|
797
|
+
// packages/core/src/ssr/lib/route-match.ts
|
|
798
|
+
function getPatternParts(pattern) {
|
|
799
|
+
return pattern.split("/").filter(Boolean);
|
|
800
|
+
}
|
|
801
|
+
function isDynamicPatternPart(patternPart) {
|
|
802
|
+
return patternPart.startsWith(":");
|
|
803
|
+
}
|
|
804
|
+
function isCatchAllPatternPart(patternPart) {
|
|
805
|
+
return patternPart.startsWith(":...");
|
|
806
|
+
}
|
|
807
|
+
function isCatchAllParamName(paramName) {
|
|
808
|
+
return paramName.startsWith("...");
|
|
809
|
+
}
|
|
810
|
+
function getPatternPartSpecificity(patternPart) {
|
|
811
|
+
if (isCatchAllPatternPart(patternPart)) {
|
|
812
|
+
return 2;
|
|
813
|
+
}
|
|
814
|
+
if (isDynamicPatternPart(patternPart)) {
|
|
815
|
+
return 1;
|
|
816
|
+
}
|
|
817
|
+
return 0;
|
|
818
|
+
}
|
|
819
|
+
function compareRouteSpecificity(a, b) {
|
|
820
|
+
const aPatternParts = getPatternParts(a.pattern);
|
|
821
|
+
const bPatternParts = getPatternParts(b.pattern);
|
|
822
|
+
const aDepth = aPatternParts.length;
|
|
823
|
+
const bDepth = bPatternParts.length;
|
|
824
|
+
if (aDepth !== bDepth) {
|
|
825
|
+
return bDepth - aDepth;
|
|
826
|
+
}
|
|
827
|
+
for (let i = 0;i < aPatternParts.length; i++) {
|
|
828
|
+
const aSpecificity = getPatternPartSpecificity(aPatternParts[i]);
|
|
829
|
+
const bSpecificity = getPatternPartSpecificity(bPatternParts[i]);
|
|
830
|
+
if (aSpecificity !== bSpecificity) {
|
|
831
|
+
return aSpecificity - bSpecificity;
|
|
832
|
+
}
|
|
833
|
+
if (aSpecificity === 0 && aPatternParts[i] !== bPatternParts[i]) {
|
|
834
|
+
return aPatternParts[i].localeCompare(bPatternParts[i]);
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
return a.pattern.localeCompare(b.pattern);
|
|
838
|
+
}
|
|
839
|
+
function matchCatchAllParam(paramName, patternIndex, patternLength, pathnameParts, pathnameIndex, params) {
|
|
840
|
+
if (patternIndex !== patternLength - 1 || pathnameIndex >= pathnameParts.length) {
|
|
841
|
+
return false;
|
|
842
|
+
}
|
|
843
|
+
params[paramName.slice(3)] = pathnameParts.slice(pathnameIndex).join("/");
|
|
844
|
+
return true;
|
|
845
|
+
}
|
|
846
|
+
function matchDynamicParam(paramName, pathnameParts, pathnameIndex, params) {
|
|
847
|
+
const pathnamePart = pathnameParts[pathnameIndex];
|
|
848
|
+
if (pathnamePart === undefined) {
|
|
849
|
+
return null;
|
|
850
|
+
}
|
|
851
|
+
params[paramName] = pathnamePart;
|
|
852
|
+
return pathnameIndex + 1;
|
|
853
|
+
}
|
|
854
|
+
function matchPatternPart(patternPart, patternIndex, patternLength, pathnameParts, pathnameIndex, params) {
|
|
855
|
+
if (isDynamicPatternPart(patternPart)) {
|
|
856
|
+
const paramName = patternPart.slice(1);
|
|
857
|
+
if (isCatchAllParamName(paramName)) {
|
|
858
|
+
return matchCatchAllParam(paramName, patternIndex, patternLength, pathnameParts, pathnameIndex, params) ? "catch-all" : null;
|
|
859
|
+
}
|
|
860
|
+
return matchDynamicParam(paramName, pathnameParts, pathnameIndex, params);
|
|
861
|
+
}
|
|
862
|
+
if (patternPart !== pathnameParts[pathnameIndex]) {
|
|
863
|
+
return null;
|
|
864
|
+
}
|
|
865
|
+
return pathnameIndex + 1;
|
|
866
|
+
}
|
|
867
|
+
function matchRoutePattern(pattern, pathname) {
|
|
868
|
+
const patternParts = getPatternParts(pattern);
|
|
869
|
+
const pathnameParts = pathname.split("/").filter(Boolean);
|
|
870
|
+
const params = {};
|
|
871
|
+
let pathnameIndex = 0;
|
|
872
|
+
for (let i = 0;i < patternParts.length; i++) {
|
|
873
|
+
const nextPathnameIndex = matchPatternPart(patternParts[i], i, patternParts.length, pathnameParts, pathnameIndex, params);
|
|
874
|
+
if (nextPathnameIndex === null) {
|
|
875
|
+
return null;
|
|
876
|
+
}
|
|
877
|
+
if (nextPathnameIndex === "catch-all") {
|
|
878
|
+
return params;
|
|
879
|
+
}
|
|
880
|
+
pathnameIndex = nextPathnameIndex;
|
|
881
|
+
}
|
|
882
|
+
return pathnameIndex === pathnameParts.length ? params : null;
|
|
883
|
+
}
|
|
884
|
+
function matchRoutes(routes, pathname) {
|
|
885
|
+
for (const route of routes) {
|
|
886
|
+
const params = matchRoutePattern(route.pattern, pathname);
|
|
887
|
+
if (params) {
|
|
888
|
+
return { route, params };
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
return null;
|
|
892
|
+
}
|
|
893
|
+
|
|
793
894
|
// packages/core/src/ssr/lib/compute/content.ts
|
|
794
895
|
function checkStatusCache(statusCacheKey, maxAgeMs) {
|
|
795
896
|
if (maxAgeMs <= 0)
|
|
@@ -1256,40 +1357,13 @@ var init_routes = __esm(() => {
|
|
|
1256
1357
|
});
|
|
1257
1358
|
|
|
1258
1359
|
// packages/core/src/ssr/lib/compute/index.ts
|
|
1259
|
-
function matchPatternUtil(pattern, pathname) {
|
|
1260
|
-
const patternParts = pattern.split("/").filter(Boolean);
|
|
1261
|
-
const pathnameParts = pathname.split("/").filter(Boolean);
|
|
1262
|
-
if (patternParts.length !== pathnameParts.length) {
|
|
1263
|
-
return null;
|
|
1264
|
-
}
|
|
1265
|
-
const params = {};
|
|
1266
|
-
for (let i = 0;i < patternParts.length; i++) {
|
|
1267
|
-
const patternPart = patternParts[i];
|
|
1268
|
-
const pathnamePart = pathnameParts[i];
|
|
1269
|
-
if (patternPart.startsWith(":")) {
|
|
1270
|
-
params[patternPart.slice(1)] = pathnamePart;
|
|
1271
|
-
} else if (patternPart !== pathnamePart) {
|
|
1272
|
-
return null;
|
|
1273
|
-
}
|
|
1274
|
-
}
|
|
1275
|
-
return params;
|
|
1276
|
-
}
|
|
1277
1360
|
function createBundledRoutesModule(bundledRoutes, bundledLayouts) {
|
|
1278
1361
|
const bundledNotFoundRoutes = globalThis.__REROUTE_NOT_FOUND_ROUTES__;
|
|
1279
1362
|
return {
|
|
1280
1363
|
routes: bundledRoutes,
|
|
1281
1364
|
layouts: bundledLayouts,
|
|
1282
1365
|
notFoundRoutes: bundledNotFoundRoutes,
|
|
1283
|
-
matchRoute: (pathname) =>
|
|
1284
|
-
for (const route of bundledRoutes) {
|
|
1285
|
-
const pattern = String(route?.pattern || "");
|
|
1286
|
-
const match = matchPatternUtil(pattern, pathname);
|
|
1287
|
-
if (match) {
|
|
1288
|
-
return { route, params: match };
|
|
1289
|
-
}
|
|
1290
|
-
}
|
|
1291
|
-
return null;
|
|
1292
|
-
}
|
|
1366
|
+
matchRoute: (pathname) => matchRoutes(bundledRoutes, pathname)
|
|
1293
1367
|
};
|
|
1294
1368
|
}
|
|
1295
1369
|
async function loadRoutesModule(cwd, isWatchMode) {
|
|
@@ -1522,24 +1596,6 @@ var init_seed = __esm(() => {
|
|
|
1522
1596
|
});
|
|
1523
1597
|
|
|
1524
1598
|
// packages/core/src/ssr/lib/data.ts
|
|
1525
|
-
function matchPattern(pattern, pathname) {
|
|
1526
|
-
const patternParts = pattern.split("/").filter(Boolean);
|
|
1527
|
-
const pathnameParts = pathname.split("/").filter(Boolean);
|
|
1528
|
-
if (patternParts.length !== pathnameParts.length) {
|
|
1529
|
-
return null;
|
|
1530
|
-
}
|
|
1531
|
-
const params = {};
|
|
1532
|
-
for (let i = 0;i < patternParts.length; i++) {
|
|
1533
|
-
const patternPart = patternParts[i];
|
|
1534
|
-
const pathnamePart = pathnameParts[i];
|
|
1535
|
-
if (patternPart.startsWith(":")) {
|
|
1536
|
-
params[patternPart.slice(1)] = pathnamePart;
|
|
1537
|
-
} else if (patternPart !== pathnamePart) {
|
|
1538
|
-
return null;
|
|
1539
|
-
}
|
|
1540
|
-
}
|
|
1541
|
-
return params;
|
|
1542
|
-
}
|
|
1543
1599
|
function loadContentData(pathname, searchParams) {
|
|
1544
1600
|
try {
|
|
1545
1601
|
const parts = pathname.split("/").filter(Boolean);
|
|
@@ -1574,16 +1630,7 @@ async function loadRouteDataInternal(pathname, clientDir, cwd, isWatchMode, sear
|
|
|
1574
1630
|
routes = m?.routes;
|
|
1575
1631
|
matchRouteFn = m?.matchRoute;
|
|
1576
1632
|
} else {
|
|
1577
|
-
matchRouteFn = (pathname2) =>
|
|
1578
|
-
for (const route of routes || []) {
|
|
1579
|
-
const pattern = String(route?.pattern || "");
|
|
1580
|
-
const match2 = matchPattern(pattern, pathname2);
|
|
1581
|
-
if (match2) {
|
|
1582
|
-
return { route, params: match2 };
|
|
1583
|
-
}
|
|
1584
|
-
}
|
|
1585
|
-
return null;
|
|
1586
|
-
};
|
|
1633
|
+
matchRouteFn = (pathname2) => matchRoutes(routes || [], pathname2);
|
|
1587
1634
|
}
|
|
1588
1635
|
const pathnameOnly = pathname.split("?")[0];
|
|
1589
1636
|
const match = typeof matchRouteFn === "function" ? matchRouteFn(pathnameOnly) : null;
|
|
@@ -1924,18 +1971,53 @@ function replaceAppRoot(html, appHtml, appId) {
|
|
|
1924
1971
|
var init_html = () => {};
|
|
1925
1972
|
|
|
1926
1973
|
// packages/core/src/og/discovery.ts
|
|
1974
|
+
import { readdir as readdir3 } from "node:fs/promises";
|
|
1927
1975
|
import { pathToFileURL as pathToFileURL4 } from "node:url";
|
|
1976
|
+
function isCatchAllRouteDirectory(name) {
|
|
1977
|
+
return CATCH_ALL_ROUTE_DIRECTORY.test(name);
|
|
1978
|
+
}
|
|
1979
|
+
async function listDynamicRouteDirectories(baseDir) {
|
|
1980
|
+
try {
|
|
1981
|
+
const entries = await readdir3(baseDir, { withFileTypes: true });
|
|
1982
|
+
return entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name).filter((name) => DYNAMIC_ROUTE_DIRECTORY.test(name)).sort((a, b) => {
|
|
1983
|
+
const aIsCatchAll = isCatchAllRouteDirectory(a);
|
|
1984
|
+
const bIsCatchAll = isCatchAllRouteDirectory(b);
|
|
1985
|
+
if (aIsCatchAll !== bIsCatchAll) {
|
|
1986
|
+
return Number(aIsCatchAll) - Number(bIsCatchAll);
|
|
1987
|
+
}
|
|
1988
|
+
return a.localeCompare(b);
|
|
1989
|
+
});
|
|
1990
|
+
} catch {
|
|
1991
|
+
return [];
|
|
1992
|
+
}
|
|
1993
|
+
}
|
|
1994
|
+
async function collectOGCandidatePaths(currentDir, parts, depth, pathsToTry, allowPartialFallback) {
|
|
1995
|
+
if (depth === parts.length) {
|
|
1996
|
+
pathsToTry.push(join(currentDir, "[og].tsx"));
|
|
1997
|
+
return;
|
|
1998
|
+
}
|
|
1999
|
+
const literalDir = join(currentDir, parts[depth]);
|
|
2000
|
+
try {
|
|
2001
|
+
await readdir3(literalDir);
|
|
2002
|
+
await collectOGCandidatePaths(literalDir, parts, depth + 1, pathsToTry, true);
|
|
2003
|
+
} catch {}
|
|
2004
|
+
const dynamicDirs = await listDynamicRouteDirectories(currentDir);
|
|
2005
|
+
for (const dynamicDir of dynamicDirs) {
|
|
2006
|
+
if (isCatchAllRouteDirectory(dynamicDir)) {
|
|
2007
|
+
pathsToTry.push(join(currentDir, dynamicDir, "[og].tsx"));
|
|
2008
|
+
continue;
|
|
2009
|
+
}
|
|
2010
|
+
await collectOGCandidatePaths(join(currentDir, dynamicDir), parts, depth + 1, pathsToTry, false);
|
|
2011
|
+
}
|
|
2012
|
+
if (allowPartialFallback) {
|
|
2013
|
+
pathsToTry.push(join(currentDir, "[og].tsx"));
|
|
2014
|
+
}
|
|
2015
|
+
}
|
|
1928
2016
|
async function findOGImageForPath(pathname, clientDir) {
|
|
1929
2017
|
const parts = pathname.split("/").filter(Boolean).filter((p) => !p.startsWith("__reroute"));
|
|
1930
2018
|
const routesDir = join(clientDir, "routes");
|
|
1931
2019
|
const pathsToTry = [];
|
|
1932
|
-
|
|
1933
|
-
for (let i = parts.length;i > 0; i--) {
|
|
1934
|
-
const dirPath = join(routesDir, ...parts.slice(0, i), "[og].tsx");
|
|
1935
|
-
pathsToTry.push(dirPath);
|
|
1936
|
-
}
|
|
1937
|
-
}
|
|
1938
|
-
pathsToTry.push(join(routesDir, "[og].tsx"));
|
|
2020
|
+
await collectOGCandidatePaths(routesDir, parts, 0, pathsToTry, true);
|
|
1939
2021
|
const uniquePaths = [...new Set(pathsToTry)];
|
|
1940
2022
|
for (const path of uniquePaths) {
|
|
1941
2023
|
try {
|
|
@@ -1959,28 +2041,28 @@ async function loadOGImageComponent(ogPath, isWatchMode) {
|
|
|
1959
2041
|
function extractParamsFromPath(pathname, ogPath, clientDir) {
|
|
1960
2042
|
const params = {};
|
|
1961
2043
|
const ogDir = ogPath.replace(/\/\[og\]\.tsx$/, "");
|
|
1962
|
-
const
|
|
1963
|
-
const relativePath = ogDir.replace(
|
|
2044
|
+
const routesDir = join(clientDir, "routes");
|
|
2045
|
+
const relativePath = ogDir.replace(routesDir, "").split("/").filter(Boolean);
|
|
1964
2046
|
const pathnameParts = pathname.split("/").filter(Boolean);
|
|
1965
2047
|
for (let i = 0;i < relativePath.length && i < pathnameParts.length; i++) {
|
|
1966
2048
|
const part = relativePath[i];
|
|
1967
|
-
const
|
|
1968
|
-
if (
|
|
1969
|
-
|
|
1970
|
-
|
|
2049
|
+
const catchAllMatch = part.match(/^\[\.\.\.([^\]]+)\]$/);
|
|
2050
|
+
if (catchAllMatch) {
|
|
2051
|
+
params[catchAllMatch[1]] = pathnameParts.slice(i).join("/");
|
|
2052
|
+
break;
|
|
1971
2053
|
}
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
const match = lastRelativePart.match(/^\[([^\]]+)\]$/);
|
|
1976
|
-
if (match) {
|
|
1977
|
-
const paramName = match[1];
|
|
1978
|
-
params[paramName] = pathnameParts[relativePath.length - 1];
|
|
2054
|
+
const dynamicMatch = part.match(/^\[([^\]]+)\]$/);
|
|
2055
|
+
if (dynamicMatch) {
|
|
2056
|
+
params[dynamicMatch[1]] = pathnameParts[i];
|
|
1979
2057
|
}
|
|
1980
2058
|
}
|
|
1981
2059
|
return params;
|
|
1982
2060
|
}
|
|
1983
|
-
var
|
|
2061
|
+
var CATCH_ALL_ROUTE_DIRECTORY, DYNAMIC_ROUTE_DIRECTORY;
|
|
2062
|
+
var init_discovery2 = __esm(() => {
|
|
2063
|
+
CATCH_ALL_ROUTE_DIRECTORY = /^\[\.\.\.([^\]]+)\]$/;
|
|
2064
|
+
DYNAMIC_ROUTE_DIRECTORY = /^\[(?:\.\.\.)?[^\]]+\]$/;
|
|
2065
|
+
});
|
|
1984
2066
|
|
|
1985
2067
|
// packages/core/src/og/meta.ts
|
|
1986
2068
|
async function generateOGImageMetaTags(pathname, clientDir, ogConfig) {
|
|
@@ -2427,7 +2509,7 @@ var init_metadata2 = __esm(() => {
|
|
|
2427
2509
|
});
|
|
2428
2510
|
|
|
2429
2511
|
// packages/core/src/ssr/lib/preload.ts
|
|
2430
|
-
import { readdir as
|
|
2512
|
+
import { readdir as readdir4, stat as stat4 } from "node:fs/promises";
|
|
2431
2513
|
async function preloadContentModule(pathname, clientDir, cwd, isWatchMode) {
|
|
2432
2514
|
let extraHead = "";
|
|
2433
2515
|
let hydrationScript = "";
|
|
@@ -2503,7 +2585,7 @@ async function findContentModulePath(collection, name, clientDir, cwd, isWatchMo
|
|
|
2503
2585
|
} catch {}
|
|
2504
2586
|
try {
|
|
2505
2587
|
const chunkDir = join(cwd, ".reroute", "chunks", collection);
|
|
2506
|
-
const files = await
|
|
2588
|
+
const files = await readdir4(chunkDir);
|
|
2507
2589
|
const candidates = files.filter((n) => n.startsWith(`${name}.`) && n.endsWith(".js"));
|
|
2508
2590
|
if (candidates.length) {
|
|
2509
2591
|
const latest = await findLatestCandidate(chunkDir, candidates);
|
|
@@ -5600,6 +5682,8 @@ __export(exports_core, {
|
|
|
5600
5682
|
preloadContentModule: () => preloadContentModule,
|
|
5601
5683
|
performSSRSetup: () => performSSRSetup,
|
|
5602
5684
|
mergeLayoutData: () => mergeLayoutData,
|
|
5685
|
+
matchRoutes: () => matchRoutes,
|
|
5686
|
+
matchRoutePattern: () => matchRoutePattern,
|
|
5603
5687
|
loadRoutesModule: () => loadRoutesModule,
|
|
5604
5688
|
loadOGImageComponent: () => loadOGImageComponent,
|
|
5605
5689
|
loadIndexHtml: () => loadIndexHtml,
|
|
@@ -5669,6 +5753,7 @@ __export(exports_core, {
|
|
|
5669
5753
|
computeLayoutData: () => computeLayoutData,
|
|
5670
5754
|
computeContentData: () => computeContentData,
|
|
5671
5755
|
compressStreamIfAccepted: () => compressStreamIfAccepted,
|
|
5756
|
+
compareRouteSpecificity: () => compareRouteSpecificity,
|
|
5672
5757
|
cleanupPathScopedSSRData: () => cleanupPathScopedSSRData,
|
|
5673
5758
|
buildHeadFromMeta: () => buildHeadFromMeta,
|
|
5674
5759
|
blockSearchCrawlers: () => blockSearchCrawlers,
|
|
@@ -7213,44 +7298,60 @@ async function loadContentMeta(clientDir, collection, slug, isWatchMode, meta) {
|
|
|
7213
7298
|
return;
|
|
7214
7299
|
}
|
|
7215
7300
|
}
|
|
7216
|
-
async function
|
|
7301
|
+
async function loadMatchedRouteModule(clientDir, routePath, isWatchMode) {
|
|
7302
|
+
const { existsSync: existsSync3 } = await import("node:fs");
|
|
7303
|
+
const { pathToFileURL: pathToFileURL8 } = await import("node:url");
|
|
7304
|
+
const normalizedRoutePath = routePath === "" ? "index" : routePath;
|
|
7305
|
+
const possiblePaths = [
|
|
7306
|
+
`${clientDir}/routes/${normalizedRoutePath}.tsx`,
|
|
7307
|
+
`${clientDir}/routes/${normalizedRoutePath}/index.tsx`,
|
|
7308
|
+
`${clientDir}/routes/${normalizedRoutePath}.ts`,
|
|
7309
|
+
`${clientDir}/routes/${normalizedRoutePath}/index.ts`,
|
|
7310
|
+
`${clientDir}/routes/${normalizedRoutePath}.mdx`,
|
|
7311
|
+
`${clientDir}/routes/${normalizedRoutePath}/index.mdx`,
|
|
7312
|
+
`${clientDir}/routes/${normalizedRoutePath}.md`,
|
|
7313
|
+
`${clientDir}/routes/${normalizedRoutePath}/index.md`
|
|
7314
|
+
];
|
|
7315
|
+
for (const possiblePath of possiblePaths) {
|
|
7316
|
+
if (existsSync3(possiblePath)) {
|
|
7317
|
+
return await import(pathToFileURL8(possiblePath).href + (isWatchMode ? `?t=${Date.now()}` : ""));
|
|
7318
|
+
}
|
|
7319
|
+
}
|
|
7320
|
+
return null;
|
|
7321
|
+
}
|
|
7322
|
+
async function loadOgImageFromRoute(cwd, clientDir, pathname, isWatchMode) {
|
|
7217
7323
|
try {
|
|
7324
|
+
const pathnameOnly = pathname.split("?")[0];
|
|
7218
7325
|
const routesGlobal = globalThis.__REROUTE_ROUTES__;
|
|
7219
7326
|
if (routesGlobal && Array.isArray(routesGlobal)) {
|
|
7220
|
-
const
|
|
7221
|
-
|
|
7222
|
-
const pattern = r.pattern.replace(/:[^/]+/g, "[^/]+");
|
|
7223
|
-
const regex = new RegExp(`^${pattern}$`);
|
|
7224
|
-
return regex.test(pathname);
|
|
7225
|
-
}
|
|
7226
|
-
return r.pattern === pathname;
|
|
7227
|
-
});
|
|
7228
|
-
if (matchedRoute) {
|
|
7327
|
+
const matchedRoute2 = matchRoutes(routesGlobal, pathnameOnly)?.route;
|
|
7328
|
+
if (matchedRoute2) {
|
|
7229
7329
|
return {
|
|
7230
|
-
meta:
|
|
7231
|
-
ogImage:
|
|
7330
|
+
meta: matchedRoute2.meta,
|
|
7331
|
+
ogImage: matchedRoute2.ssr?.ogImage
|
|
7232
7332
|
};
|
|
7233
7333
|
}
|
|
7234
7334
|
}
|
|
7235
7335
|
const { pathToFileURL: pathToFileURL8 } = await import("node:url");
|
|
7236
|
-
const
|
|
7237
|
-
const
|
|
7238
|
-
const
|
|
7239
|
-
const
|
|
7240
|
-
|
|
7241
|
-
|
|
7242
|
-
|
|
7243
|
-
`${clientDir}/routes/${cleanPath}/index.ts`
|
|
7244
|
-
];
|
|
7245
|
-
for (const routePath of possiblePaths) {
|
|
7246
|
-
if (existsSync3(routePath)) {
|
|
7247
|
-
const routeMod = await import(pathToFileURL8(routePath).href + (isWatchMode ? `?t=${Date.now()}` : ""));
|
|
7336
|
+
const routesPath = `${cwd}/.reroute/routes.ts`;
|
|
7337
|
+
const routesMod = await import(pathToFileURL8(routesPath).href + (isWatchMode ? `?t=${Date.now()}` : ""));
|
|
7338
|
+
const match = typeof routesMod.matchRoute === "function" ? routesMod.matchRoute(pathnameOnly) : Array.isArray(routesMod.routes) ? matchRoutes(routesMod.routes, pathnameOnly) : null;
|
|
7339
|
+
const matchedRoute = match?.route;
|
|
7340
|
+
if (matchedRoute && typeof matchedRoute.path === "string") {
|
|
7341
|
+
const routeMod = await loadMatchedRouteModule(clientDir, String(matchedRoute.path), isWatchMode);
|
|
7342
|
+
if (routeMod) {
|
|
7248
7343
|
return {
|
|
7249
7344
|
meta: routeMod.meta,
|
|
7250
7345
|
ogImage: routeMod.ssr?.ogImage
|
|
7251
7346
|
};
|
|
7252
7347
|
}
|
|
7253
7348
|
}
|
|
7349
|
+
if (matchedRoute) {
|
|
7350
|
+
return {
|
|
7351
|
+
meta: matchedRoute.meta,
|
|
7352
|
+
ogImage: matchedRoute.ssr?.ogImage
|
|
7353
|
+
};
|
|
7354
|
+
}
|
|
7254
7355
|
} catch (error) {
|
|
7255
7356
|
console.warn("[reroute/og] Error loading route metadata:", error);
|
|
7256
7357
|
}
|
|
@@ -9012,4 +9113,4 @@ export {
|
|
|
9012
9113
|
reroute
|
|
9013
9114
|
};
|
|
9014
9115
|
|
|
9015
|
-
//# debugId=
|
|
9116
|
+
//# debugId=C4FE93DB6E1B24E664756E2164756E21
|