@rangojs/router 0.0.0-experimental.111 → 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.
Files changed (49) hide show
  1. package/dist/bin/rango.js +41 -37
  2. package/dist/vite/index.js +144 -191
  3. package/package.json +3 -1
  4. package/src/browser/action-coordinator.ts +53 -36
  5. package/src/browser/event-controller.ts +42 -66
  6. package/src/browser/navigation-bridge.ts +4 -0
  7. package/src/browser/navigation-client.ts +12 -15
  8. package/src/browser/navigation-store.ts +7 -8
  9. package/src/browser/navigation-transaction.ts +7 -21
  10. package/src/browser/partial-update.ts +8 -16
  11. package/src/browser/react/NavigationProvider.tsx +29 -40
  12. package/src/browser/react/use-params.ts +3 -4
  13. package/src/browser/response-adapter.ts +25 -0
  14. package/src/browser/rsc-router.tsx +16 -2
  15. package/src/browser/server-action-bridge.ts +23 -30
  16. package/src/browser/types.ts +2 -0
  17. package/src/build/generate-manifest.ts +29 -31
  18. package/src/build/generate-route-types.ts +2 -0
  19. package/src/build/route-types/router-processing.ts +37 -9
  20. package/src/build/runtime-discovery.ts +9 -20
  21. package/src/decode-loader-results.ts +36 -0
  22. package/src/errors.ts +11 -0
  23. package/src/response-utils.ts +9 -0
  24. package/src/route-content-wrapper.tsx +6 -28
  25. package/src/router/content-negotiation.ts +15 -2
  26. package/src/router/intercept-resolution.ts +4 -18
  27. package/src/router/match-result.ts +32 -30
  28. package/src/router/middleware.ts +46 -78
  29. package/src/router/preview-match.ts +3 -1
  30. package/src/router/request-classification.ts +4 -28
  31. package/src/rsc/handler.ts +20 -65
  32. package/src/rsc/helpers.ts +3 -2
  33. package/src/rsc/origin-guard.ts +28 -10
  34. package/src/rsc/response-route-handler.ts +32 -52
  35. package/src/rsc/rsc-rendering.ts +27 -53
  36. package/src/rsc/runtime-warnings.ts +9 -10
  37. package/src/rsc/server-action.ts +13 -37
  38. package/src/rsc/ssr-setup.ts +16 -0
  39. package/src/segment-system.tsx +5 -39
  40. package/src/vite/discovery/discover-routers.ts +10 -22
  41. package/src/vite/discovery/route-types-writer.ts +38 -82
  42. package/src/vite/plugins/cjs-to-esm.ts +3 -7
  43. package/src/vite/plugins/expose-ids/handler-transform.ts +8 -61
  44. package/src/vite/plugins/expose-ids/loader-transform.ts +3 -5
  45. package/src/vite/plugins/expose-internal-ids.ts +34 -62
  46. package/src/vite/plugins/version-injector.ts +2 -12
  47. package/src/vite/router-discovery.ts +71 -26
  48. package/src/vite/utils/shared-utils.ts +13 -1
  49. 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, basename2) {
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] = basename2;
772
- } else if (basename2.endsWith("/") && pattern.startsWith("/")) {
773
- prefixed[name] = basename2 + pattern.slice(1);
771
+ prefixed[name] = basename;
772
+ } else if (basename.endsWith("/") && pattern.startsWith("/")) {
773
+ prefixed[name] = basename + pattern.slice(1);
774
774
  } else {
775
- prefixed[name] = basename2 + pattern;
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 basename2 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
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 (basename2) {
818
- result = applyBasenameToRoutes(result, basename2);
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 routerBasename = pathBasename(routerFilePath).replace(
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 { dirname as dirname3, join as join3, basename, resolve as resolve3 } from "node:path";
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
- if (!routeSearchSchemas || Object.keys(routeSearchSchemas).length === 0) {
1407
- const staticParsed = buildCombinedRouteMapForRouterFile(sourceFile);
1408
- if (Object.keys(staticParsed.searchSchemas).length > 0) {
1409
- const filtered = {};
1410
- for (const name of Object.keys(routeManifest)) {
1411
- const schema = staticParsed.searchSchemas[name];
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 dirname4 } from "node:path";
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 = dirname4(resolve4(fromPath));
1530
- while (dir !== dirname4(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 = dirname4(dir);
1538
+ dir = dirname3(dir);
1535
1539
  }
1536
1540
  return process.cwd();
1537
1541
  }