@rangojs/router 0.0.0-experimental.110 → 0.0.0-experimental.112
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/bin/rango.js +41 -37
- package/dist/vite/index.js +144 -191
- package/package.json +17 -14
- package/skills/handler-use/SKILL.md +1 -1
- package/skills/rango/SKILL.md +20 -0
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/event-controller.ts +42 -66
- package/src/browser/navigation-bridge.ts +4 -0
- package/src/browser/navigation-client.ts +12 -15
- package/src/browser/navigation-store.ts +7 -8
- package/src/browser/navigation-transaction.ts +7 -21
- package/src/browser/partial-update.ts +8 -16
- package/src/browser/react/NavigationProvider.tsx +29 -40
- package/src/browser/react/use-params.ts +3 -4
- package/src/browser/response-adapter.ts +25 -0
- package/src/browser/rsc-router.tsx +16 -2
- package/src/browser/server-action-bridge.ts +23 -30
- package/src/browser/types.ts +2 -0
- package/src/build/generate-manifest.ts +29 -31
- package/src/build/generate-route-types.ts +2 -0
- package/src/build/route-types/router-processing.ts +37 -9
- package/src/build/runtime-discovery.ts +9 -20
- package/src/decode-loader-results.ts +36 -0
- package/src/errors.ts +29 -0
- package/src/index.rsc.ts +1 -0
- package/src/index.ts +1 -0
- package/src/response-utils.ts +9 -0
- package/src/route-content-wrapper.tsx +6 -28
- package/src/route-definition/dsl-helpers.ts +231 -259
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-types.ts +19 -41
- package/src/router/content-negotiation.ts +15 -2
- package/src/router/intercept-resolution.ts +4 -18
- package/src/router/match-result.ts +32 -30
- package/src/router/middleware.ts +46 -78
- package/src/router/preview-match.ts +3 -1
- package/src/router/request-classification.ts +4 -28
- package/src/rsc/handler.ts +20 -65
- package/src/rsc/helpers.ts +3 -2
- package/src/rsc/origin-guard.ts +28 -10
- package/src/rsc/response-route-handler.ts +32 -52
- package/src/rsc/rsc-rendering.ts +27 -53
- package/src/rsc/runtime-warnings.ts +9 -10
- package/src/rsc/server-action.ts +13 -37
- package/src/rsc/ssr-setup.ts +16 -0
- package/src/segment-system.tsx +5 -39
- package/src/server/context.ts +76 -35
- package/src/urls/include-helper.ts +10 -53
- package/src/urls/index.ts +0 -3
- package/src/urls/path-helper.ts +17 -52
- package/src/urls/pattern-types.ts +2 -19
- package/src/urls/response-types.ts +20 -19
- package/src/urls/type-extraction.ts +20 -115
- package/src/urls/urls-function.ts +1 -5
- package/src/vite/discovery/discover-routers.ts +10 -22
- package/src/vite/discovery/route-types-writer.ts +38 -82
- package/src/vite/plugins/cjs-to-esm.ts +3 -7
- package/src/vite/plugins/expose-ids/handler-transform.ts +8 -61
- package/src/vite/plugins/expose-ids/loader-transform.ts +3 -5
- package/src/vite/plugins/expose-internal-ids.ts +34 -62
- package/src/vite/plugins/version-injector.ts +2 -12
- package/src/vite/router-discovery.ts +71 -26
- package/src/vite/utils/shared-utils.ts +13 -1
- package/src/browser/action-response-classifier.ts +0 -99
package/dist/bin/rango.js
CHANGED
|
@@ -764,19 +764,38 @@ function extractBasenameFromRouter(code) {
|
|
|
764
764
|
visit(sourceFile);
|
|
765
765
|
return result;
|
|
766
766
|
}
|
|
767
|
-
function applyBasenameToRoutes(result,
|
|
767
|
+
function applyBasenameToRoutes(result, basename) {
|
|
768
768
|
const prefixed = {};
|
|
769
769
|
for (const [name, pattern] of Object.entries(result.routes)) {
|
|
770
770
|
if (pattern === "/") {
|
|
771
|
-
prefixed[name] =
|
|
772
|
-
} else if (
|
|
773
|
-
prefixed[name] =
|
|
771
|
+
prefixed[name] = basename;
|
|
772
|
+
} else if (basename.endsWith("/") && pattern.startsWith("/")) {
|
|
773
|
+
prefixed[name] = basename + pattern.slice(1);
|
|
774
774
|
} else {
|
|
775
|
-
prefixed[name] =
|
|
775
|
+
prefixed[name] = basename + pattern;
|
|
776
776
|
}
|
|
777
777
|
}
|
|
778
778
|
return { routes: prefixed, searchSchemas: result.searchSchemas };
|
|
779
779
|
}
|
|
780
|
+
function genFileTsPath(sourceFile) {
|
|
781
|
+
const base = pathBasename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
782
|
+
return join2(dirname2(sourceFile), `${base}.named-routes.gen.ts`);
|
|
783
|
+
}
|
|
784
|
+
function resolveSearchSchemas(publicRouteNames, runtimeSchemas, sourceFile) {
|
|
785
|
+
if (runtimeSchemas && Object.keys(runtimeSchemas).length > 0) {
|
|
786
|
+
return runtimeSchemas;
|
|
787
|
+
}
|
|
788
|
+
const staticParsed = buildCombinedRouteMapForRouterFile(sourceFile);
|
|
789
|
+
if (Object.keys(staticParsed.searchSchemas).length === 0) {
|
|
790
|
+
return runtimeSchemas;
|
|
791
|
+
}
|
|
792
|
+
const filtered = {};
|
|
793
|
+
for (const name of publicRouteNames) {
|
|
794
|
+
const schema = staticParsed.searchSchemas[name];
|
|
795
|
+
if (schema) filtered[name] = schema;
|
|
796
|
+
}
|
|
797
|
+
return Object.keys(filtered).length > 0 ? filtered : runtimeSchemas;
|
|
798
|
+
}
|
|
780
799
|
function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
781
800
|
let routerSource;
|
|
782
801
|
try {
|
|
@@ -789,7 +808,7 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
|
789
808
|
return { routes: {}, searchSchemas: {} };
|
|
790
809
|
}
|
|
791
810
|
const rawBasename = extractBasenameFromRouter(routerSource);
|
|
792
|
-
const
|
|
811
|
+
const basename = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
|
|
793
812
|
let result;
|
|
794
813
|
if (extraction.kind === "inline") {
|
|
795
814
|
result = buildCombinedRouteMapWithSearch(
|
|
@@ -814,8 +833,8 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
|
814
833
|
result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
|
|
815
834
|
}
|
|
816
835
|
}
|
|
817
|
-
if (
|
|
818
|
-
result = applyBasenameToRoutes(result,
|
|
836
|
+
if (basename) {
|
|
837
|
+
result = applyBasenameToRoutes(result, basename);
|
|
819
838
|
}
|
|
820
839
|
return result;
|
|
821
840
|
}
|
|
@@ -919,18 +938,12 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
|
919
938
|
}
|
|
920
939
|
if (!extractUrlsFromRouter(routerSource)) continue;
|
|
921
940
|
}
|
|
922
|
-
const
|
|
923
|
-
/\.(tsx?|jsx?)$/,
|
|
924
|
-
""
|
|
925
|
-
);
|
|
926
|
-
const outPath = join2(
|
|
927
|
-
dirname2(routerFilePath),
|
|
928
|
-
`${routerBasename}.named-routes.gen.ts`
|
|
929
|
-
);
|
|
941
|
+
const outPath = genFileTsPath(routerFilePath);
|
|
930
942
|
const existing = existsSync3(outPath) ? readFileSync3(outPath, "utf-8") : null;
|
|
931
943
|
if (Object.keys(result.routes).length === 0) {
|
|
932
944
|
if (!existing) {
|
|
933
945
|
const emptySource = generateRouteTypesSource({});
|
|
946
|
+
opts?.onWrite?.(outPath, emptySource);
|
|
934
947
|
writeFileSync2(outPath, emptySource);
|
|
935
948
|
}
|
|
936
949
|
continue;
|
|
@@ -950,6 +963,7 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
|
950
963
|
continue;
|
|
951
964
|
}
|
|
952
965
|
}
|
|
966
|
+
opts?.onWrite?.(outPath, source);
|
|
953
967
|
writeFileSync2(outPath, source);
|
|
954
968
|
console.log(
|
|
955
969
|
`[rango] Generated route types (${Object.keys(result.routes).length} routes) -> ${outPath}`
|
|
@@ -1293,7 +1307,7 @@ var runtime_discovery_exports = {};
|
|
|
1293
1307
|
__export(runtime_discovery_exports, {
|
|
1294
1308
|
discoverAndWriteRouteTypes: () => discoverAndWriteRouteTypes
|
|
1295
1309
|
});
|
|
1296
|
-
import {
|
|
1310
|
+
import { resolve as resolve3 } from "node:path";
|
|
1297
1311
|
import { existsSync as existsSync4, readFileSync as readFileSync4, writeFileSync as writeFileSync3 } from "node:fs";
|
|
1298
1312
|
async function discoverAndWriteRouteTypes(opts) {
|
|
1299
1313
|
let createViteServer;
|
|
@@ -1403,22 +1417,12 @@ This means createRouter() stack trace parsing matched an internal frame.
|
|
|
1403
1417
|
Set an explicit \`id\` on createRouter() or check the call site.`
|
|
1404
1418
|
);
|
|
1405
1419
|
}
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
if (schema) filtered[name] = schema;
|
|
1413
|
-
}
|
|
1414
|
-
if (Object.keys(filtered).length > 0) {
|
|
1415
|
-
routeSearchSchemas = filtered;
|
|
1416
|
-
}
|
|
1417
|
-
}
|
|
1418
|
-
}
|
|
1419
|
-
const routerDir = dirname3(sourceFile);
|
|
1420
|
-
const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
1421
|
-
const outPath = join3(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
1420
|
+
routeSearchSchemas = resolveSearchSchemas(
|
|
1421
|
+
Object.keys(routeManifest),
|
|
1422
|
+
routeSearchSchemas,
|
|
1423
|
+
sourceFile
|
|
1424
|
+
);
|
|
1425
|
+
const outPath = genFileTsPath(sourceFile);
|
|
1422
1426
|
const source = generateRouteTypesSource(
|
|
1423
1427
|
routeManifest,
|
|
1424
1428
|
routeSearchSchemas && Object.keys(routeSearchSchemas).length > 0 ? routeSearchSchemas : void 0
|
|
@@ -1455,7 +1459,7 @@ var init_runtime_discovery = __esm({
|
|
|
1455
1459
|
|
|
1456
1460
|
// src/bin/rango.ts
|
|
1457
1461
|
init_generate_route_types();
|
|
1458
|
-
import { resolve as resolve4, dirname as
|
|
1462
|
+
import { resolve as resolve4, dirname as dirname3 } from "node:path";
|
|
1459
1463
|
import { readFileSync as readFileSync5, statSync, existsSync as existsSync5 } from "node:fs";
|
|
1460
1464
|
var [command, ...rawArgs] = process.argv.slice(2);
|
|
1461
1465
|
if (command === "generate") {
|
|
@@ -1526,12 +1530,12 @@ Examples:
|
|
|
1526
1530
|
);
|
|
1527
1531
|
}
|
|
1528
1532
|
function findProjectRoot(fromPath) {
|
|
1529
|
-
let dir =
|
|
1530
|
-
while (dir !==
|
|
1533
|
+
let dir = dirname3(resolve4(fromPath));
|
|
1534
|
+
while (dir !== dirname3(dir)) {
|
|
1531
1535
|
if (existsSync5(resolve4(dir, "package.json")) || existsSync5(resolve4(dir, "vite.config.ts")) || existsSync5(resolve4(dir, "vite.config.js"))) {
|
|
1532
1536
|
return dir;
|
|
1533
1537
|
}
|
|
1534
|
-
dir =
|
|
1538
|
+
dir = dirname3(dir);
|
|
1535
1539
|
}
|
|
1536
1540
|
return process.cwd();
|
|
1537
1541
|
}
|