one 1.2.15 → 1.2.17

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 (126) hide show
  1. package/dist/cjs/cli/generateRoutes.cjs +20 -5
  2. package/dist/cjs/cli/generateRoutes.js +18 -3
  3. package/dist/cjs/cli/generateRoutes.js.map +1 -1
  4. package/dist/cjs/cli/generateRoutes.native.js +30 -5
  5. package/dist/cjs/cli/generateRoutes.native.js.map +1 -1
  6. package/dist/cjs/cli.cjs +4 -0
  7. package/dist/cjs/cli.js +4 -0
  8. package/dist/cjs/cli.js.map +1 -1
  9. package/dist/cjs/cli.native.js +4 -0
  10. package/dist/cjs/cli.native.js.map +1 -1
  11. package/dist/cjs/index.js.map +1 -1
  12. package/dist/cjs/index.native.js.map +1 -1
  13. package/dist/cjs/router/createRoute.cjs +12 -1
  14. package/dist/cjs/router/createRoute.js +12 -1
  15. package/dist/cjs/router/createRoute.js.map +1 -1
  16. package/dist/cjs/router/createRoute.native.js +13 -2
  17. package/dist/cjs/router/createRoute.native.js.map +1 -1
  18. package/dist/cjs/typed-routes/generateRouteTypes.cjs +14 -3
  19. package/dist/cjs/typed-routes/generateRouteTypes.js +12 -3
  20. package/dist/cjs/typed-routes/generateRouteTypes.js.map +1 -1
  21. package/dist/cjs/typed-routes/generateRouteTypes.native.js +29 -3
  22. package/dist/cjs/typed-routes/generateRouteTypes.native.js.map +1 -1
  23. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.cjs +39 -2
  24. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.js +38 -2
  25. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.js.map +1 -1
  26. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.native.js +40 -2
  27. package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.native.js.map +1 -1
  28. package/dist/cjs/typed-routes/injectRouteHelpers.cjs +136 -0
  29. package/dist/cjs/typed-routes/injectRouteHelpers.js +104 -0
  30. package/dist/cjs/typed-routes/injectRouteHelpers.js.map +6 -0
  31. package/dist/cjs/typed-routes/injectRouteHelpers.native.js +146 -0
  32. package/dist/cjs/typed-routes/injectRouteHelpers.native.js.map +1 -0
  33. package/dist/cjs/vite/loadConfig.cjs +18 -12
  34. package/dist/cjs/vite/loadConfig.js +20 -13
  35. package/dist/cjs/vite/loadConfig.js.map +1 -1
  36. package/dist/cjs/vite/loadConfig.native.js +18 -11
  37. package/dist/cjs/vite/loadConfig.native.js.map +1 -1
  38. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.cjs +3 -2
  39. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.js +13 -3
  40. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.js.map +1 -1
  41. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +9 -6
  42. package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
  43. package/dist/esm/cli/generateRoutes.js +19 -2
  44. package/dist/esm/cli/generateRoutes.js.map +1 -1
  45. package/dist/esm/cli/generateRoutes.mjs +19 -4
  46. package/dist/esm/cli/generateRoutes.mjs.map +1 -1
  47. package/dist/esm/cli/generateRoutes.native.js +29 -4
  48. package/dist/esm/cli/generateRoutes.native.js.map +1 -1
  49. package/dist/esm/cli.js +4 -0
  50. package/dist/esm/cli.js.map +1 -1
  51. package/dist/esm/cli.mjs +4 -0
  52. package/dist/esm/cli.mjs.map +1 -1
  53. package/dist/esm/cli.native.js +4 -0
  54. package/dist/esm/cli.native.js.map +1 -1
  55. package/dist/esm/index.js.map +1 -1
  56. package/dist/esm/index.mjs.map +1 -1
  57. package/dist/esm/index.native.js.map +1 -1
  58. package/dist/esm/router/createRoute.js +12 -1
  59. package/dist/esm/router/createRoute.js.map +1 -1
  60. package/dist/esm/router/createRoute.mjs +12 -1
  61. package/dist/esm/router/createRoute.mjs.map +1 -1
  62. package/dist/esm/router/createRoute.native.js +13 -2
  63. package/dist/esm/router/createRoute.native.js.map +1 -1
  64. package/dist/esm/typed-routes/generateRouteTypes.js +14 -3
  65. package/dist/esm/typed-routes/generateRouteTypes.js.map +1 -1
  66. package/dist/esm/typed-routes/generateRouteTypes.mjs +14 -3
  67. package/dist/esm/typed-routes/generateRouteTypes.mjs.map +1 -1
  68. package/dist/esm/typed-routes/generateRouteTypes.native.js +29 -3
  69. package/dist/esm/typed-routes/generateRouteTypes.native.js.map +1 -1
  70. package/dist/esm/typed-routes/getTypedRoutesDeclarationFile.js +38 -2
  71. package/dist/esm/typed-routes/getTypedRoutesDeclarationFile.js.map +1 -1
  72. package/dist/esm/typed-routes/getTypedRoutesDeclarationFile.mjs +39 -2
  73. package/dist/esm/typed-routes/getTypedRoutesDeclarationFile.mjs.map +1 -1
  74. package/dist/esm/typed-routes/getTypedRoutesDeclarationFile.native.js +40 -2
  75. package/dist/esm/typed-routes/getTypedRoutesDeclarationFile.native.js.map +1 -1
  76. package/dist/esm/typed-routes/injectRouteHelpers.js +89 -0
  77. package/dist/esm/typed-routes/injectRouteHelpers.js.map +6 -0
  78. package/dist/esm/typed-routes/injectRouteHelpers.mjs +113 -0
  79. package/dist/esm/typed-routes/injectRouteHelpers.mjs.map +1 -0
  80. package/dist/esm/typed-routes/injectRouteHelpers.native.js +120 -0
  81. package/dist/esm/typed-routes/injectRouteHelpers.native.js.map +1 -0
  82. package/dist/esm/vite/loadConfig.js +20 -13
  83. package/dist/esm/vite/loadConfig.js.map +1 -1
  84. package/dist/esm/vite/loadConfig.mjs +18 -12
  85. package/dist/esm/vite/loadConfig.mjs.map +1 -1
  86. package/dist/esm/vite/loadConfig.native.js +18 -11
  87. package/dist/esm/vite/loadConfig.native.js.map +1 -1
  88. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.js +13 -3
  89. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.js.map +1 -1
  90. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.mjs +3 -2
  91. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.mjs.map +1 -1
  92. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.native.js +9 -6
  93. package/dist/esm/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
  94. package/package.json +10 -10
  95. package/src/cli/generateRoutes.ts +52 -4
  96. package/src/cli.ts +5 -0
  97. package/src/index.ts +14 -1
  98. package/src/interfaces/router.ts +19 -0
  99. package/src/router/createRoute.ts +16 -3
  100. package/src/typed-routes/generateRouteTypes.ts +46 -2
  101. package/src/typed-routes/getTypedRoutesDeclarationFile.ts +70 -0
  102. package/src/typed-routes/injectRouteHelpers.ts +186 -0
  103. package/src/utils/redirect.ts +1 -1
  104. package/src/vite/loadConfig.ts +29 -17
  105. package/src/vite/plugins/generateFileSystemRouteTypesPlugin.tsx +14 -3
  106. package/src/vite/types.ts +26 -0
  107. package/types/cli/generateRoutes.d.ts +1 -0
  108. package/types/cli/generateRoutes.d.ts.map +1 -1
  109. package/types/index.d.ts +13 -3
  110. package/types/index.d.ts.map +1 -1
  111. package/types/interfaces/router.d.ts +16 -0
  112. package/types/interfaces/router.d.ts.map +1 -1
  113. package/types/router/createRoute.d.ts +28 -13
  114. package/types/router/createRoute.d.ts.map +1 -1
  115. package/types/typed-routes/generateRouteTypes.d.ts +1 -1
  116. package/types/typed-routes/generateRouteTypes.d.ts.map +1 -1
  117. package/types/typed-routes/getTypedRoutesDeclarationFile.d.ts.map +1 -1
  118. package/types/typed-routes/injectRouteHelpers.d.ts +12 -0
  119. package/types/typed-routes/injectRouteHelpers.d.ts.map +1 -0
  120. package/types/utils/redirect.d.ts +1 -3
  121. package/types/utils/redirect.d.ts.map +1 -1
  122. package/types/vite/loadConfig.d.ts +1 -1
  123. package/types/vite/loadConfig.d.ts.map +1 -1
  124. package/types/vite/plugins/generateFileSystemRouteTypesPlugin.d.ts.map +1 -1
  125. package/types/vite/types.d.ts +25 -0
  126. package/types/vite/types.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["useActiveParams","useParams","createRoute","createLoader","a","defaults","getProxy","Proxy"],"sources":["../../../src/router/createRoute.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,eAAA,EAAiBC,SAAA,QAA8B;AAGjD,SAASC,YAAA,EAAoB;EAIlC,OAAO;IACLD,SAAA,EAAW,SAAAA,CAAA,EAAM;MACjB,OAAAA,SAAiB;IACjB;IACFD,eAAA,WAAAA,CAAA;MACF,OAAAA,eAAA;IAEA;IAIKG,YAAA,WAAAA,CAAAC,CAAA;MACD,OAAAA,CAAA;IACE;EACE;AAIgB;AAClB,IACFC,QAAA,GAAAH,WAAA;EAAAI,QAAA,YAAAA,CAAA;IACF,OAEI,IAAAC,KAAc","ignoreList":[]}
1
+ {"version":3,"names":["useActiveParams","useParams","createRoute","createLoader","fn","defaults","getProxy","Proxy"],"sources":["../../../src/router/createRoute.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,eAAA,EAAiBC,SAAA,QAA8B;AAIjD,SAASC,YAAA,EAA4C;EAK1D,OAAO;IACLD,SAAA,EAAW,SAAAA,CAAA,EAAM;MACjB,OAAAA,SAAiB;IAA8B;IAAAD,eAAA,WAAAA,CAAA;MAAA,OAAAA,eAAA;IAAA;IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYU;AAE7D;AAEA;IAIKG,YAAA,WAAAA,CAAAC,EAAA;MACD,OAAAA,EAAA;IACE;EACE;AAIgB;AAClB,IACFC,QAAA,GAAAH,WAAA;EAAAI,QAAA,YAAAA,CAAA;IACF,OAEI,IAAAC,KAAc","ignoreList":[]}
@@ -1,18 +1,29 @@
1
1
  import { writeFile } from "node:fs/promises";
2
- import { dirname } from "node:path";
2
+ import { dirname, join } from "node:path";
3
3
  import FSExtra from "fs-extra";
4
4
  import micromatch from "micromatch";
5
5
  import { globbedRoutesToRouteContext } from "../router/useViteRoutes";
6
6
  import { globDir } from "../utils/globDir";
7
7
  import { getTypedRoutesDeclarationFile } from "./getTypedRoutesDeclarationFile";
8
- async function generateRouteTypes(outFile, routerRoot, ignoredRouteFiles) {
8
+ import { injectRouteHelpers } from "./injectRouteHelpers";
9
+ import { removeSupportedExtensions } from "../router/matchers";
10
+ async function generateRouteTypes(outFile, routerRoot, ignoredRouteFiles, typedRoutesMode) {
9
11
  let routePaths = globDir(routerRoot);
10
12
  ignoredRouteFiles && ignoredRouteFiles.length > 0 && (routePaths = micromatch.not(routePaths, ignoredRouteFiles, {
11
13
  // The path starts with './', such as './foo/bar/baz.test.tsx', and ignoredRouteFiles is like ['**/*.test.*'], so we need matchBase here.
12
14
  matchBase: !0
13
15
  }));
14
16
  const routes = routePaths.reduce((acc, cur) => (acc[cur] = {}, acc), {}), context = globbedRoutesToRouteContext(routes, routerRoot), declarations = getTypedRoutesDeclarationFile(context), outDir = dirname(outFile);
15
- await FSExtra.ensureDir(outDir), await writeFile(outFile, declarations);
17
+ if (await FSExtra.ensureDir(outDir), await writeFile(outFile, declarations), typedRoutesMode) {
18
+ const mode = typedRoutesMode === "type" ? "type" : "runtime";
19
+ for (const routePath of routePaths) {
20
+ if (routePath.includes("_layout") || routePath.includes("+api") || routePath.startsWith("_") || routePath.endsWith(".d.ts"))
21
+ continue;
22
+ const fullPath = join(process.cwd(), routerRoot, routePath), routeName = routePath.replace(/^\.\//, "").replace(/\+[^/]*$/, "").replace(/\/index$/, "").replace(/index$/, "");
23
+ let cleanRouteName = removeSupportedExtensions(routeName).replace(/\/?index$/, "");
24
+ cleanRouteName.startsWith("/") || (cleanRouteName = "/" + cleanRouteName), cleanRouteName.includes("[") && await injectRouteHelpers(fullPath, cleanRouteName, mode);
25
+ }
26
+ }
16
27
  }
17
28
  export {
18
29
  generateRouteTypes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/typed-routes/generateRouteTypes.ts"],
4
- "mappings": "AAAA,SAAS,iBAAiB;AAC1B,SAAS,eAAe;AACxB,OAAO,aAAa;AACpB,OAAO,gBAAgB;AACvB,SAAS,mCAAmC;AAC5C,SAAS,eAAe;AACxB,SAAS,qCAAqC;AAE9C,eAAsB,mBACpB,SACA,YACA,mBACA;AACA,MAAI,aAAa,QAAQ,UAAU;AACnC,EAAI,qBAAqB,kBAAkB,SAAS,MAClD,aAAa,WAAW,IAAI,YAAY,mBAAmB;AAAA;AAAA,IAEzD,WAAW;AAAA,EACb,CAAC;AAEH,QAAM,SAAS,WAAW,OAAO,CAAC,KAAK,SACrC,IAAI,GAAG,IAAI,CAAC,GACL,MACN,CAAC,CAAC,GACC,UAAU,4BAA4B,QAAQ,UAAU,GACxD,eAAe,8BAA8B,OAAO,GACpD,SAAS,QAAQ,OAAO;AAC9B,QAAM,QAAQ,UAAU,MAAM,GAC9B,MAAM,UAAU,SAAS,YAAY;AACvC;",
4
+ "mappings": "AAAA,SAAS,iBAAiB;AAC1B,SAAS,SAAS,YAAY;AAC9B,OAAO,aAAa;AACpB,OAAO,gBAAgB;AACvB,SAAS,mCAAmC;AAC5C,SAAS,eAAe;AAExB,SAAS,qCAAqC;AAC9C,SAAS,0BAA2C;AACpD,SAAS,iCAAiC;AAE1C,eAAsB,mBACpB,SACA,YACA,mBACA,iBACA;AACA,MAAI,aAAa,QAAQ,UAAU;AACnC,EAAI,qBAAqB,kBAAkB,SAAS,MAClD,aAAa,WAAW,IAAI,YAAY,mBAAmB;AAAA;AAAA,IAEzD,WAAW;AAAA,EACb,CAAC;AAEH,QAAM,SAAS,WAAW,OAAO,CAAC,KAAK,SACrC,IAAI,GAAG,IAAI,CAAC,GACL,MACN,CAAC,CAAC,GACC,UAAU,4BAA4B,QAAQ,UAAU,GACxD,eAAe,8BAA8B,OAAO,GACpD,SAAS,QAAQ,OAAO;AAK9B,MAJA,MAAM,QAAQ,UAAU,MAAM,GAC9B,MAAM,UAAU,SAAS,YAAY,GAGjC,iBAAiB;AACnB,UAAM,OAAmB,oBAAoB,SAAS,SAAS;AAG/D,eAAW,aAAa,YAAY;AAElC,UACE,UAAU,SAAS,SAAS,KAC5B,UAAU,SAAS,MAAM,KACzB,UAAU,WAAW,GAAG,KACxB,UAAU,SAAS,OAAO;AAE1B;AAKF,YAAM,WAAW,KAAK,QAAQ,IAAI,GAAG,YAAY,SAAS,GACpD,YAAY,UACf,QAAQ,SAAS,EAAE,EACnB,QAAQ,YAAY,EAAE,EACtB,QAAQ,YAAY,EAAE,EACtB,QAAQ,UAAU,EAAE;AACvB,UAAI,iBAAiB,0BAA0B,SAAS,EAAE,QAAQ,aAAa,EAAE;AAQjF,MALK,eAAe,WAAW,GAAG,MAChC,iBAAiB,MAAM,iBAIpB,eAAe,SAAS,GAAG,KAIhC,MAAM,mBAAmB,UAAU,gBAAgB,IAAI;AAAA,IACzD;AAAA,EACF;AACF;",
5
5
  "names": []
6
6
  }
@@ -1,11 +1,13 @@
1
1
  import { writeFile } from "node:fs/promises";
2
- import { dirname } from "node:path";
2
+ import { dirname, join } from "node:path";
3
3
  import FSExtra from "fs-extra";
4
4
  import micromatch from "micromatch";
5
5
  import { globbedRoutesToRouteContext } from "../router/useViteRoutes.mjs";
6
6
  import { globDir } from "../utils/globDir.mjs";
7
7
  import { getTypedRoutesDeclarationFile } from "./getTypedRoutesDeclarationFile.mjs";
8
- async function generateRouteTypes(outFile, routerRoot, ignoredRouteFiles) {
8
+ import { injectRouteHelpers } from "./injectRouteHelpers.mjs";
9
+ import { removeSupportedExtensions } from "../router/matchers.mjs";
10
+ async function generateRouteTypes(outFile, routerRoot, ignoredRouteFiles, typedRoutesMode) {
9
11
  let routePaths = globDir(routerRoot);
10
12
  ignoredRouteFiles && ignoredRouteFiles.length > 0 && (routePaths = micromatch.not(routePaths, ignoredRouteFiles, {
11
13
  // The path starts with './', such as './foo/bar/baz.test.tsx', and ignoredRouteFiles is like ['**/*.test.*'], so we need matchBase here.
@@ -15,7 +17,16 @@ async function generateRouteTypes(outFile, routerRoot, ignoredRouteFiles) {
15
17
  context = globbedRoutesToRouteContext(routes, routerRoot),
16
18
  declarations = getTypedRoutesDeclarationFile(context),
17
19
  outDir = dirname(outFile);
18
- await FSExtra.ensureDir(outDir), await writeFile(outFile, declarations);
20
+ if (await FSExtra.ensureDir(outDir), await writeFile(outFile, declarations), typedRoutesMode) {
21
+ const mode = typedRoutesMode === "type" ? "type" : "runtime";
22
+ for (const routePath of routePaths) {
23
+ if (routePath.includes("_layout") || routePath.includes("+api") || routePath.startsWith("_") || routePath.endsWith(".d.ts")) continue;
24
+ const fullPath = join(process.cwd(), routerRoot, routePath),
25
+ routeName = routePath.replace(/^\.\//, "").replace(/\+[^/]*$/, "").replace(/\/index$/, "").replace(/index$/, "");
26
+ let cleanRouteName = removeSupportedExtensions(routeName).replace(/\/?index$/, "");
27
+ cleanRouteName.startsWith("/") || (cleanRouteName = "/" + cleanRouteName), cleanRouteName.includes("[") && (await injectRouteHelpers(fullPath, cleanRouteName, mode));
28
+ }
29
+ }
19
30
  }
20
31
  export { generateRouteTypes };
21
32
  //# sourceMappingURL=generateRouteTypes.mjs.map
@@ -1 +1 @@
1
- {"version":3,"names":["writeFile","dirname","FSExtra","micromatch","globbedRoutesToRouteContext","globDir","getTypedRoutesDeclarationFile","generateRouteTypes","outFile","routerRoot","ignoredRouteFiles","routePaths","length","not","matchBase","routes","reduce","acc","cur","context","declarations","outDir","ensureDir"],"sources":["../../../src/typed-routes/generateRouteTypes.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAC1B,SAASC,OAAA,QAAe;AACxB,OAAOC,OAAA,MAAa;AACpB,OAAOC,UAAA,MAAgB;AACvB,SAASC,2BAAA,QAAmC;AAC5C,SAASC,OAAA,QAAe;AACxB,SAASC,6BAAA,QAAqC;AAE9C,eAAsBC,mBACpBC,OAAA,EACAC,UAAA,EACAC,iBAAA,EACA;EACA,IAAIC,UAAA,GAAaN,OAAA,CAAQI,UAAU;EAC/BC,iBAAA,IAAqBA,iBAAA,CAAkBE,MAAA,GAAS,MAClDD,UAAA,GAAaR,UAAA,CAAWU,GAAA,CAAIF,UAAA,EAAYD,iBAAA,EAAmB;IAAA;IAEzDI,SAAA,EAAW;EACb,CAAC;EAEH,MAAMC,MAAA,GAASJ,UAAA,CAAWK,MAAA,CAAO,CAACC,GAAA,EAAKC,GAAA,MACrCD,GAAA,CAAIC,GAAG,IAAI,CAAC,GACLD,GAAA,GACN,CAAC,CAAC;IACCE,OAAA,GAAUf,2BAAA,CAA4BW,MAAA,EAAQN,UAAU;IACxDW,YAAA,GAAed,6BAAA,CAA8Ba,OAAO;IACpDE,MAAA,GAASpB,OAAA,CAAQO,OAAO;EAC9B,MAAMN,OAAA,CAAQoB,SAAA,CAAUD,MAAM,GAC9B,MAAMrB,SAAA,CAAUQ,OAAA,EAASY,YAAY;AACvC","ignoreList":[]}
1
+ {"version":3,"names":["writeFile","dirname","join","FSExtra","micromatch","globbedRoutesToRouteContext","globDir","getTypedRoutesDeclarationFile","injectRouteHelpers","removeSupportedExtensions","generateRouteTypes","outFile","routerRoot","ignoredRouteFiles","typedRoutesMode","routePaths","length","not","matchBase","routes","reduce","acc","cur","context","declarations","outDir","ensureDir","mode","routePath","includes","startsWith","endsWith","fullPath","process","cwd","routeName","replace","cleanRouteName"],"sources":["../../../src/typed-routes/generateRouteTypes.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAC1B,SAASC,OAAA,EAASC,IAAA,QAAY;AAC9B,OAAOC,OAAA,MAAa;AACpB,OAAOC,UAAA,MAAgB;AACvB,SAASC,2BAAA,QAAmC;AAC5C,SAASC,OAAA,QAAe;AAExB,SAASC,6BAAA,QAAqC;AAC9C,SAASC,kBAAA,QAA2C;AACpD,SAASC,yBAAA,QAAiC;AAE1C,eAAsBC,mBACpBC,OAAA,EACAC,UAAA,EACAC,iBAAA,EACAC,eAAA,EACA;EACA,IAAIC,UAAA,GAAaT,OAAA,CAAQM,UAAU;EAC/BC,iBAAA,IAAqBA,iBAAA,CAAkBG,MAAA,GAAS,MAClDD,UAAA,GAAaX,UAAA,CAAWa,GAAA,CAAIF,UAAA,EAAYF,iBAAA,EAAmB;IAAA;IAEzDK,SAAA,EAAW;EACb,CAAC;EAEH,MAAMC,MAAA,GAASJ,UAAA,CAAWK,MAAA,CAAO,CAACC,GAAA,EAAKC,GAAA,MACrCD,GAAA,CAAIC,GAAG,IAAI,CAAC,GACLD,GAAA,GACN,CAAC,CAAC;IACCE,OAAA,GAAUlB,2BAAA,CAA4Bc,MAAA,EAAQP,UAAU;IACxDY,YAAA,GAAejB,6BAAA,CAA8BgB,OAAO;IACpDE,MAAA,GAASxB,OAAA,CAAQU,OAAO;EAK9B,IAJA,MAAMR,OAAA,CAAQuB,SAAA,CAAUD,MAAM,GAC9B,MAAMzB,SAAA,CAAUW,OAAA,EAASa,YAAY,GAGjCV,eAAA,EAAiB;IACnB,MAAMa,IAAA,GAAmBb,eAAA,KAAoB,SAAS,SAAS;IAG/D,WAAWc,SAAA,IAAab,UAAA,EAAY;MAElC,IACEa,SAAA,CAAUC,QAAA,CAAS,SAAS,KAC5BD,SAAA,CAAUC,QAAA,CAAS,MAAM,KACzBD,SAAA,CAAUE,UAAA,CAAW,GAAG,KACxBF,SAAA,CAAUG,QAAA,CAAS,OAAO,GAE1B;MAKF,MAAMC,QAAA,GAAW9B,IAAA,CAAK+B,OAAA,CAAQC,GAAA,CAAI,GAAGtB,UAAA,EAAYgB,SAAS;QACpDO,SAAA,GAAYP,SAAA,CACfQ,OAAA,CAAQ,SAAS,EAAE,EACnBA,OAAA,CAAQ,YAAY,EAAE,EACtBA,OAAA,CAAQ,YAAY,EAAE,EACtBA,OAAA,CAAQ,UAAU,EAAE;MACvB,IAAIC,cAAA,GAAiB5B,yBAAA,CAA0B0B,SAAS,EAAEC,OAAA,CAAQ,aAAa,EAAE;MAG5EC,cAAA,CAAeP,UAAA,CAAW,GAAG,MAChCO,cAAA,GAAiB,MAAMA,cAAA,GAIpBA,cAAA,CAAeR,QAAA,CAAS,GAAG,MAIhC,MAAMrB,kBAAA,CAAmBwB,QAAA,EAAUK,cAAA,EAAgBV,IAAI;IACzD;EACF;AACF","ignoreList":[]}
@@ -1,11 +1,13 @@
1
1
  import { writeFile } from "fs/promises";
2
- import { dirname } from "path";
2
+ import { dirname, join } from "path";
3
3
  import FSExtra from "fs-extra";
4
4
  import micromatch from "micromatch";
5
5
  import { globbedRoutesToRouteContext } from "../router/useViteRoutes.native.js";
6
6
  import { globDir } from "../utils/globDir.native.js";
7
7
  import { getTypedRoutesDeclarationFile } from "./getTypedRoutesDeclarationFile.native.js";
8
- async function generateRouteTypes(outFile, routerRoot, ignoredRouteFiles) {
8
+ import { injectRouteHelpers } from "./injectRouteHelpers.native.js";
9
+ import { removeSupportedExtensions } from "../router/matchers.native.js";
10
+ async function generateRouteTypes(outFile, routerRoot, ignoredRouteFiles, typedRoutesMode) {
9
11
  var routePaths = globDir(routerRoot);
10
12
  ignoredRouteFiles && ignoredRouteFiles.length > 0 && (routePaths = micromatch.not(routePaths, ignoredRouteFiles, {
11
13
  // The path starts with './', such as './foo/bar/baz.test.tsx', and ignoredRouteFiles is like ['**/*.test.*'], so we need matchBase here.
@@ -17,7 +19,31 @@ async function generateRouteTypes(outFile, routerRoot, ignoredRouteFiles) {
17
19
  context = globbedRoutesToRouteContext(routes, routerRoot),
18
20
  declarations = getTypedRoutesDeclarationFile(context),
19
21
  outDir = dirname(outFile);
20
- await FSExtra.ensureDir(outDir), await writeFile(outFile, declarations);
22
+ if (await FSExtra.ensureDir(outDir), await writeFile(outFile, declarations), typedRoutesMode) {
23
+ var mode = typedRoutesMode === "type" ? "type" : "runtime",
24
+ _iteratorNormalCompletion = !0,
25
+ _didIteratorError = !1,
26
+ _iteratorError = void 0;
27
+ try {
28
+ for (var _iterator = routePaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = !0) {
29
+ var routePath = _step.value;
30
+ if (!(routePath.includes("_layout") || routePath.includes("+api") || routePath.startsWith("_") || routePath.endsWith(".d.ts"))) {
31
+ var fullPath = join(process.cwd(), routerRoot, routePath),
32
+ routeName = routePath.replace(/^\.\//, "").replace(/\+[^/]*$/, "").replace(/\/index$/, "").replace(/index$/, ""),
33
+ cleanRouteName = removeSupportedExtensions(routeName).replace(/\/?index$/, "");
34
+ cleanRouteName.startsWith("/") || (cleanRouteName = "/" + cleanRouteName), cleanRouteName.includes("[") && (await injectRouteHelpers(fullPath, cleanRouteName, mode));
35
+ }
36
+ }
37
+ } catch (err) {
38
+ _didIteratorError = !0, _iteratorError = err;
39
+ } finally {
40
+ try {
41
+ !_iteratorNormalCompletion && _iterator.return != null && _iterator.return();
42
+ } finally {
43
+ if (_didIteratorError) throw _iteratorError;
44
+ }
45
+ }
46
+ }
21
47
  }
22
48
  export { generateRouteTypes };
23
49
  //# sourceMappingURL=generateRouteTypes.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["writeFile","dirname","FSExtra","micromatch","globbedRoutesToRouteContext","globDir","getTypedRoutesDeclarationFile","generateRouteTypes","outFile","routerRoot","ignoredRouteFiles","routePaths","length","not","matchBase","routes","reduce","acc","cur","context","declarations","outDir"],"sources":["../../../src/typed-routes/generateRouteTypes.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAC1B,SAASC,OAAA,QAAe;AACxB,OAAOC,OAAA,MAAa;AACpB,OAAOC,UAAA,MAAgB;AACvB,SAASC,2BAAA,QAAmC;AAC5C,SAASC,OAAA,QAAe;AACxB,SAASC,6BAAA,QAAqC;AAE9C,eAAsBC,mBACpBC,OAAA,EACAC,UAAA,EACAC,iBAAA,EACA;EACA,IAAIC,UAAA,GAAaN,OAAA,CAAQI,UAAU;EAC/BC,iBAAA,IAAqBA,iBAAA,CAAkBE,MAAA,GAAS,MAClDD,UAAA,GAAaR,UAAA,CAAWU,GAAA,CAAIF,UAAA,EAAYD,iBAAA,EAAmB;IAAA;IAEzDI,SAAA,EAAW;EACb,CAAC;EAEH,IAAAC,MAAM,GAAAJ,UAAS,CAAAK,MAAW,WAAaC,GAAA,EAAAC,GACrC;MAMF,OAAMD,GAAA,CAAAC,GAAQ,QAAUD,GAAA;IAE1B;IAAAE,OAAA,GAAAf,2BAAA,CAAAW,MAAA,EAAAN,UAAA;IAAAW,YAAA,GAAAd,6BAAA,CAAAa,OAAA;IAAAE,MAAA,GAAApB,OAAA,CAAAO,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["writeFile","dirname","join","FSExtra","micromatch","globbedRoutesToRouteContext","globDir","getTypedRoutesDeclarationFile","injectRouteHelpers","removeSupportedExtensions","generateRouteTypes","outFile","routerRoot","ignoredRouteFiles","typedRoutesMode","routePaths","length","not","matchBase","routes","reduce","acc","cur","context","declarations","outDir","ensureDir","mode","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","routePath","value","includes","startsWith","endsWith","fullPath","process","cwd","routeName","replace","cleanRouteName"],"sources":["../../../src/typed-routes/generateRouteTypes.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAC1B,SAASC,OAAA,EAASC,IAAA,QAAY;AAC9B,OAAOC,OAAA,MAAa;AACpB,OAAOC,UAAA,MAAgB;AACvB,SAASC,2BAAA,QAAmC;AAC5C,SAASC,OAAA,QAAe;AAExB,SAASC,6BAAA,QAAqC;AAC9C,SAASC,kBAAA,QAA2C;AACpD,SAASC,yBAAA,QAAiC;AAE1C,eAAsBC,mBACpBC,OAAA,EACAC,UAAA,EACAC,iBAAA,EACAC,eAAA,EACA;EACA,IAAIC,UAAA,GAAaT,OAAA,CAAQM,UAAU;EAC/BC,iBAAA,IAAqBA,iBAAA,CAAkBG,MAAA,GAAS,MAClDD,UAAA,GAAaX,UAAA,CAAWa,GAAA,CAAIF,UAAA,EAAYF,iBAAA,EAAmB;IAAA;IAEzDK,SAAA,EAAW;EACb,CAAC;EAEH,IAAAC,MAAM,GAAAJ,UAAS,CAAAK,MAAW,WAAaC,GAAA,EAAAC,GACrC;MAUF,OAJAD,GAAM,CAAAC,GAAA,IAAQ,IAAAD,GAAA;IAKZ;IAAME,OAAmB,GAAAlB,2BAA6B,CAAAc,MAAA,EAASP,UAAA;IAAAY,YAAA,GAAAjB,6BAAA,CAAAgB,OAAA;IAAAE,MAAA,GAAAxB,OAAA,CAAAU,OAAA;EAG/D,UAAAR,OAAW,CAAAuB,SAAa,CAAAD,MAAA,SAAYzB,SAAA,CAAAW,OAAA,EAAAa,YAAA,GAAAV,eAAA;IAElC,IAAAa,IACE,GAAAb,eAAmB,WAAS,GAC5B,SAAU,SAAS;MAAAc,yBACT,KAAW;MAAAC,iBACX;MAAAC,cAAgB;IAE1B;MAKF,SAAMC,SAAW,GAAAhB,UAAa,CAAAiB,MAAO,CAAAC,QAAA,EAAY,GAAAC,KAAA,EAAS,EACpDN,yBACH,IAAAM,KAAQ,GAAAH,SACR,CAAAI,IAAQ,IAAAC,IAAA,GAAAR,yBACY,GAAE,CACtB;QACH,IAAIS,SAAA,GAAAH,KAAiB,CAAAI,KAAA;QAGhB,MAAAD,SAAe,CAAAE,QAAW,UAC7B,KAAAF,SAAA,CAAAE,QAAuB,YAAAF,SAIpB,CAAAG,UAAe,SAASH,SAI7B,CAAAI,QAAM;UACR,IAAAC,QAAA,GAAAxC,IAAA,CAAAyC,OAAA,CAAAC,GAAA,IAAAhC,UAAA,EAAAyB,SAAA;YAAAQ,SAAA,GAAAR,SAAA,CAAAS,OAAA,cAAAA,OAAA,iBAAAA,OAAA,iBAAAA,OAAA;YAAAC,cAAA,GAAAtC,yBAAA,CAAAoC,SAAA,EAAAC,OAAA;UACFC,cAAA,CAAAP,UAAA,UAAAO,cAAA,SAAAA,cAAA,GAAAA,cAAA,CAAAR,QAAA,gBAAA/B,kBAAA,CAAAkC,QAAA,EAAAK,cAAA,EAAApB,IAAA;QACF","ignoreList":[]}
@@ -3,7 +3,7 @@ import { isTypedRoute, removeSupportedExtensions } from "../router/matchers";
3
3
  const CATCH_ALL = /\[\.\.\..+?\]/g, SLUG = /\[.+?\]/g;
4
4
  function getTypedRoutesDeclarationFile(ctx) {
5
5
  const staticRoutes = /* @__PURE__ */ new Set(), dynamicRoutes = /* @__PURE__ */ new Set(), dynamicRouteContextKeys = /* @__PURE__ */ new Set();
6
- return walkRouteNode(
6
+ walkRouteNode(
7
7
  getRoutes(ctx, {
8
8
  platformRoutes: !1,
9
9
  // We don't need to generate platform specific routes
@@ -15,7 +15,9 @@ function getTypedRoutesDeclarationFile(ctx) {
15
15
  staticRoutes,
16
16
  dynamicRoutes,
17
17
  dynamicRouteContextKeys
18
- ), `// deno-lint-ignore-file
18
+ );
19
+ const hasRoutes = dynamicRouteContextKeys.size > 0;
20
+ return `// deno-lint-ignore-file
19
21
  /* eslint-disable */
20
22
  // biome-ignore: needed import
21
23
  import type { OneRouter } from 'one'
@@ -27,11 +29,45 @@ declare module 'one' {
27
29
  DynamicRoutes: ${setToUnionType(dynamicRoutes)}
28
30
  DynamicRouteTemplate: ${setToUnionType(dynamicRouteContextKeys)}
29
31
  IsTyped: true
32
+ ${hasRoutes ? `RouteTypes: ${generateRouteTypesMap(dynamicRouteContextKeys)}` : ""}
30
33
  }
31
34
  }
32
35
  }
36
+ ${hasRoutes ? `
37
+ /**
38
+ * Helper type for route information
39
+ */
40
+ type RouteInfo<Params = Record<string, never>> = {
41
+ Params: Params
42
+ LoaderProps: { path: string; params: Params; request?: Request }
43
+ }` : ""}
33
44
  `.trim();
34
45
  }
46
+ function generateRouteTypesMap(dynamicRouteContextKeys) {
47
+ return dynamicRouteContextKeys.size === 0 ? "{}" : `{
48
+ ${[...dynamicRouteContextKeys].sort().map((routePath) => {
49
+ const params = extractParams(routePath), paramsType = params.length === 0 ? "{}" : generateInlineParamsType(params);
50
+ return ` '${routePath}': RouteInfo<${paramsType}>`;
51
+ }).join(`
52
+ `)}
53
+ }`;
54
+ }
55
+ function extractParams(routePath) {
56
+ const params = [], paramRegex = /\[(\.\.\.)?([\w]+)\]/g;
57
+ let match;
58
+ for (; (match = paramRegex.exec(routePath)) !== null; )
59
+ params.push({
60
+ name: match[2],
61
+ isCatchAll: match[1] === "..."
62
+ });
63
+ return params;
64
+ }
65
+ function generateInlineParamsType(params) {
66
+ return `{ ${params.map((p) => {
67
+ const type = p.isCatchAll ? "string[]" : "string";
68
+ return `${p.name}: ${type}`;
69
+ }).join("; ")} }`;
70
+ }
35
71
  function walkRouteNode(routeNode, parentRoutePath, staticRoutes, dynamicRoutes, dynamicRouteContextKeys) {
36
72
  if (routeNode) {
37
73
  addRouteNode(routeNode, parentRoutePath, staticRoutes, dynamicRoutes, dynamicRouteContextKeys), parentRoutePath = `${removeSupportedExtensions(`${parentRoutePath}/${routeNode.route}`).replace(/\/?index$/, "")}`;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/typed-routes/getTypedRoutesDeclarationFile.ts"],
4
- "mappings": "AAAA,SAAS,iBAAiB;AAC1B,SAAS,cAAc,iCAAiC;AAKxD,MAAM,YAAY,kBAEZ,OAAO;AAEN,SAAS,8BAA8B,KAAuB;AACnE,QAAM,eAAe,oBAAI,IAAY,GAC/B,gBAAgB,oBAAI,IAAY,GAChC,0BAA0B,oBAAI,IAAY;AAEhD;AAAA,IACE,UAAU,KAAK;AAAA,MACb,gBAAgB;AAAA;AAAA,MAChB,mBAAmB;AAAA,MACnB,qBAAqB;AAAA;AAAA,IAEvB,CAAC;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAQa,eAAe,YAAY,CAAC;AAAA,uBAC3B,eAAe,aAAa,CAAC;AAAA,8BACtB,eAAe,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnE,KAAK;AACP;AAKA,SAAS,cACP,WACA,iBACA,cACA,eACA,yBACA;AACA,MAAK,WAEL;AAAA,iBAAa,WAAW,iBAAiB,cAAc,eAAe,uBAAuB,GAE7F,kBAAkB,GAAG,0BAA0B,GAAG,eAAe,IAAI,UAAU,KAAK,EAAE,EAAE,QAAQ,aAAa,EAAE,CAAC;AAEhH,eAAW,SAAS,UAAU;AAC5B,oBAAc,OAAO,iBAAiB,cAAc,eAAe,uBAAuB;AAAA;AAE9F;AAMA,SAAS,aACP,WACA,iBACA,cACA,eACA,yBACA;AAEA,MADI,CAAC,WAAW,SACZ,CAAC,aAAa,UAAU,KAAK,EAAG;AAEpC,MAAI,YAAY,GAAG,eAAe,IAAI,0BAA0B,UAAU,KAAK,EAAE,QAAQ,aAAa,EAAE,CAAC;AAMzG,MAJK,UAAU,WAAW,GAAG,MAC3B,YAAY,IAAI,SAAS,KAGvB,UAAU;AACZ,eAAW,QAAQ,qBAAqB,SAAS;AAC/C,8BAAwB,IAAI,IAAI,GAChC,cAAc;AAAA;AAAA,QAEZ,GAAG,KAAK,WAAW,WAAW,WAAW,EAAE,WAAW,MAAM,iCAAiC,CAAC;AAAA,MAChG;AAAA;AAGF,eAAW,eAAe,qBAAqB,SAAS;AACtD,mBAAa,IAAI,WAAW;AAGlC;AAKA,MAAM,iBAAiB,CAAI,QAClB,IAAI,OAAO,IACd,CAAC,GAAG,GAAG,EACJ,KAAK,EACL,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,EACrB,KAAK,KAAK,IACb;AAGN,SAAS,qBAAqB,UAAU;AACtC,QAAM,SAAS,SAAS,MAAM,GAAG,EAAE,OAAO,CAAC,SAAS,KAAK,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,CAAC,GACxF,eAAyB,CAAC;AAEhC,WAAS,SAAS,cAAc,aAAa;AAC3C,QAAI,iBAAiB,OAAO,QAAQ;AAClC,mBAAa,KAAK,YAAY,QAAQ,WAAW,GAAG,CAAC;AACrD;AAAA,IACF;AAEA,UAAM,QAAQ,OAAO,YAAY,GAC3B,eAAe,YAAY,QAAQ,IAAI,KAAK,IAAI,EAAE;AACxD,aAAS,eAAe,GAAG,YAAY,GACvC,SAAS,eAAe,GAAG,WAAW;AAAA,EACxC;AAEA,kBAAS,GAAG,QAAQ,GACb;AACT;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -6,13 +6,15 @@ function getTypedRoutesDeclarationFile(ctx) {
6
6
  const staticRoutes = /* @__PURE__ */new Set(),
7
7
  dynamicRoutes = /* @__PURE__ */new Set(),
8
8
  dynamicRouteContextKeys = /* @__PURE__ */new Set();
9
- return walkRouteNode(getRoutes(ctx, {
9
+ walkRouteNode(getRoutes(ctx, {
10
10
  platformRoutes: !1,
11
11
  // We don't need to generate platform specific routes
12
12
  ignoreEntryPoints: !0,
13
13
  ignoreRequireErrors: !0
14
14
  // importMode: 'async',
15
- }), "", staticRoutes, dynamicRoutes, dynamicRouteContextKeys), `// deno-lint-ignore-file
15
+ }), "", staticRoutes, dynamicRoutes, dynamicRouteContextKeys);
16
+ const hasRoutes = dynamicRouteContextKeys.size > 0;
17
+ return `// deno-lint-ignore-file
16
18
  /* eslint-disable */
17
19
  // biome-ignore: needed import
18
20
  import type { OneRouter } from 'one'
@@ -24,11 +26,46 @@ declare module 'one' {
24
26
  DynamicRoutes: ${setToUnionType(dynamicRoutes)}
25
27
  DynamicRouteTemplate: ${setToUnionType(dynamicRouteContextKeys)}
26
28
  IsTyped: true
29
+ ${hasRoutes ? `RouteTypes: ${generateRouteTypesMap(dynamicRouteContextKeys)}` : ""}
27
30
  }
28
31
  }
29
32
  }
33
+ ${hasRoutes ? `
34
+ /**
35
+ * Helper type for route information
36
+ */
37
+ type RouteInfo<Params = Record<string, never>> = {
38
+ Params: Params
39
+ LoaderProps: { path: string; params: Params; request?: Request }
40
+ }` : ""}
30
41
  `.trim();
31
42
  }
43
+ function generateRouteTypesMap(dynamicRouteContextKeys) {
44
+ return dynamicRouteContextKeys.size === 0 ? "{}" : `{
45
+ ${[...dynamicRouteContextKeys].sort().map(routePath => {
46
+ const params = extractParams(routePath),
47
+ paramsType = params.length === 0 ? "{}" : generateInlineParamsType(params);
48
+ return ` '${routePath}': RouteInfo<${paramsType}>`;
49
+ }).join(`
50
+ `)}
51
+ }`;
52
+ }
53
+ function extractParams(routePath) {
54
+ const params = [],
55
+ paramRegex = /\[(\.\.\.)?([\w]+)\]/g;
56
+ let match;
57
+ for (; (match = paramRegex.exec(routePath)) !== null;) params.push({
58
+ name: match[2],
59
+ isCatchAll: match[1] === "..."
60
+ });
61
+ return params;
62
+ }
63
+ function generateInlineParamsType(params) {
64
+ return `{ ${params.map(p => {
65
+ const type = p.isCatchAll ? "string[]" : "string";
66
+ return `${p.name}: ${type}`;
67
+ }).join("; ")} }`;
68
+ }
32
69
  function walkRouteNode(routeNode, parentRoutePath, staticRoutes, dynamicRoutes, dynamicRouteContextKeys) {
33
70
  if (routeNode) {
34
71
  addRouteNode(routeNode, parentRoutePath, staticRoutes, dynamicRoutes, dynamicRouteContextKeys), parentRoutePath = `${removeSupportedExtensions(`${parentRoutePath}/${routeNode.route}`).replace(/\/?index$/, "")}`;
@@ -1 +1 @@
1
- {"version":3,"names":["getRoutes","isTypedRoute","removeSupportedExtensions","CATCH_ALL","SLUG","getTypedRoutesDeclarationFile","ctx","staticRoutes","Set","dynamicRoutes","dynamicRouteContextKeys","walkRouteNode","platformRoutes","ignoreEntryPoints","ignoreRequireErrors","setToUnionType","trim","routeNode","parentRoutePath","addRouteNode","route","replace","child","children","routePath","startsWith","dynamic","path","generateCombinations","add","replaceAll","combination","set","size","sort","map","s","join","pathname","groups","split","filter","part","endsWith","combinations","generate","currentIndex","currentPath","length","push","group","withoutGroup"],"sources":["../../../src/typed-routes/getTypedRoutesDeclarationFile.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getRoutes","isTypedRoute","removeSupportedExtensions","CATCH_ALL","SLUG","getTypedRoutesDeclarationFile","ctx","staticRoutes","Set","dynamicRoutes","dynamicRouteContextKeys","walkRouteNode","platformRoutes","ignoreEntryPoints","ignoreRequireErrors","hasRoutes","size","setToUnionType","generateRouteTypesMap","trim","sort","map","routePath","params","extractParams","paramsType","length","generateInlineParamsType","join","paramRegex","match","exec","push","name","isCatchAll","p","type","routeNode","parentRoutePath","addRouteNode","route","replace","child","children","startsWith","dynamic","path","generateCombinations","add","replaceAll","combination","set","s","pathname","groups","split","filter","part","endsWith","combinations","generate","currentIndex","currentPath","group","withoutGroup"],"sources":["../../../src/typed-routes/getTypedRoutesDeclarationFile.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -6,14 +6,16 @@ function getTypedRoutesDeclarationFile(ctx) {
6
6
  var staticRoutes = /* @__PURE__ */new Set(),
7
7
  dynamicRoutes = /* @__PURE__ */new Set(),
8
8
  dynamicRouteContextKeys = /* @__PURE__ */new Set();
9
- return walkRouteNode(getRoutes(ctx, {
9
+ walkRouteNode(getRoutes(ctx, {
10
10
  platformRoutes: !1,
11
11
  // We don't need to generate platform specific routes
12
12
  ignoreEntryPoints: !0,
13
13
  ignoreRequireErrors: !0
14
14
  }),
15
15
  // importMode: 'async',
16
- "", staticRoutes, dynamicRoutes, dynamicRouteContextKeys), `// deno-lint-ignore-file
16
+ "", staticRoutes, dynamicRoutes, dynamicRouteContextKeys);
17
+ var hasRoutes = dynamicRouteContextKeys.size > 0;
18
+ return `// deno-lint-ignore-file
17
19
  /* eslint-disable */
18
20
  // biome-ignore: needed import
19
21
  import type { OneRouter } from 'one'
@@ -25,11 +27,47 @@ declare module 'one' {
25
27
  DynamicRoutes: ${setToUnionType(dynamicRoutes)}
26
28
  DynamicRouteTemplate: ${setToUnionType(dynamicRouteContextKeys)}
27
29
  IsTyped: true
30
+ ${hasRoutes ? `RouteTypes: ${generateRouteTypesMap(dynamicRouteContextKeys)}` : ""}
28
31
  }
29
32
  }
30
33
  }
34
+ ${hasRoutes ? `
35
+ /**
36
+ * Helper type for route information
37
+ */
38
+ type RouteInfo<Params = Record<string, never>> = {
39
+ Params: Params
40
+ LoaderProps: { path: string; params: Params; request?: Request }
41
+ }` : ""}
31
42
  `.trim();
32
43
  }
44
+ function generateRouteTypesMap(dynamicRouteContextKeys) {
45
+ if (dynamicRouteContextKeys.size === 0) return "{}";
46
+ var routes = [...dynamicRouteContextKeys].sort(),
47
+ entries = routes.map(function (routePath) {
48
+ var params = extractParams(routePath),
49
+ paramsType = params.length === 0 ? "{}" : generateInlineParamsType(params);
50
+ return ` '${routePath}': RouteInfo<${paramsType}>`;
51
+ }).join(`
52
+ `);
53
+ return `{
54
+ ${entries}
55
+ }`;
56
+ }
57
+ function extractParams(routePath) {
58
+ for (var params = [], paramRegex = /\[(\.\.\.)?([\w]+)\]/g, match; (match = paramRegex.exec(routePath)) !== null;) params.push({
59
+ name: match[2],
60
+ isCatchAll: match[1] === "..."
61
+ });
62
+ return params;
63
+ }
64
+ function generateInlineParamsType(params) {
65
+ var entries = params.map(function (p) {
66
+ var type = p.isCatchAll ? "string[]" : "string";
67
+ return `${p.name}: ${type}`;
68
+ });
69
+ return `{ ${entries.join("; ")} }`;
70
+ }
33
71
  function walkRouteNode(routeNode, parentRoutePath, staticRoutes, dynamicRoutes, dynamicRouteContextKeys) {
34
72
  if (routeNode) {
35
73
  addRouteNode(routeNode, parentRoutePath, staticRoutes, dynamicRoutes, dynamicRouteContextKeys), parentRoutePath = `${removeSupportedExtensions(`${parentRoutePath}/${routeNode.route}`).replace(/\/?index$/, "")}`;
@@ -1 +1 @@
1
- {"version":3,"names":["getRoutes","isTypedRoute","removeSupportedExtensions","CATCH_ALL","SLUG","getTypedRoutesDeclarationFile","ctx","staticRoutes","Set","dynamicRoutes","dynamicRouteContextKeys","walkRouteNode","platformRoutes","ignoreEntryPoints","ignoreRequireErrors","setToUnionType","trim","routeNode","parentRoutePath","addRouteNode","route","replace","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","children","Symbol","iterator","_step","next","done","child","value","err","return","routePath","startsWith","dynamic","generateCombinations","path","add","replaceAll"],"sources":["../../../src/typed-routes/getTypedRoutesDeclarationFile.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAA,QAAiB;AAC1B,SAASC,YAAA,EAAcC,yBAAA,QAAiC;AAKxD,IAAAC,SAAM,mBAAY;EAAAC,IAEZ,aAAO;AAEN,SAASC,8BAA8BC,GAAA,EAAuB;EACnE,IAAAC,YAAM,kBAAe,IAAAC,GAAI;IAAYC,aAC/B,kBAAgB,IAAAD,GAAI;IAAYE,uBAChC,kBAA0B,IAAAF,GAAI;EAEpC,OAAAG,aAAA,CACEX,SAAA,CAAUM,GAAA,EAAK;IACbM,cAAA,EAAgB;IAAA;IAChBC,iBAAA,EAAmB;IACnBC,mBAAA,EAAqB;EAAA;EAEvB;EACA,IACAP,YAAA,EACAE,aAAA,EACAC,uBACF,GAEO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAQaK,cAAA,CAAeR,YAAY,CAAC;AAAA,uBAC3BQ,cAAA,CAAeN,aAAa,CAAC;AAAA,8BACtBM,cAAA,CAAeL,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnEM,IAAA,CAAK;AACP;AAKA,SAASL,cACPM,SAAA,EACAC,eAAA,EACAX,YAAA,EACAE,aAAA,EACAC,uBAAA,EACA;EACA,IAAKO,SAAA,EAEL;IAAAE,YAAA,CAAaF,SAAA,EAAWC,eAAA,EAAiBX,YAAA,EAAcE,aAAA,EAAeC,uBAAuB,GAE7FQ,eAAA,GAAkB,GAAGhB,yBAAA,CAA0B,GAAGgB,eAAe,IAAID,SAAA,CAAUG,KAAK,EAAE,EAAEC,OAAA,CAAQ,aAAa,EAAE,CAAC;IAEhH,IAAAC,yBAAoB,GAAU;MAAAC,iBAAA;MAAAC,cAAA;IAC5B;MAA0F,SAAAC,SAAA,GAAAR,SAAA,CAAAS,QAAA,CAAAC,MAAA,CAAAC,QAAA,KAAAC,KAAA,IAAAP,yBAAA,IAAAO,KAAA,GAAAJ,SAAA,CAAAK,IAAA,IAAAC,IAAA,GAAAT,yBAAA;QAE9F,IAAAU,KAAA,GAAAH,KAAA,CAAAI,KAAA;QAMAtB,aAAS,CACPqB,KAAA,EAAAd,eACA,EAAAX,YACA,EAAAE,aACA,EAAAC,uBACA;MAEI;IAGJ,EAAI,OAAAwB,GAAA,EAAY;MAEXX,iBAAU,IAAW,GAAGC,cAC3B,GAAAU,GAAY;IAIZ;MACE;QACc,CAAAZ,yBAAA,IAAAG,SAAA,CAAAU,MAAA,YAAAV,SAAA,CAAAU,MAAA;MAAA,UAEJ;QACV,IAAAZ,iBAAA,QAAAC,cAAA;MAGF;IACE;EAGN;AAKA;AASA,SAASL,aAAAF,SAAqB,EAAAC,eAAU,EAAAX,YAAA,EAAAE,aAAA,EAAAC,uBAAA;EACtC,IAAAO,SAAM,EAASG,KAAA,IAASnB,YAAW,CAAAgB,SAAQ,CAAAG,KAAS;IAGpD,IAAAgB,SAAS,GAAS,GAAAlB,eAAc,IAAAhB,yBAAa,CAAAe,SAAA,CAAAG,KAAA,EAAAC,OAAA;IAC3C,IAAIe,SAAA,CAAAC,UAAiB,IAAO,MAAAD,SAAQ,OAAAA,SAAA,KAAAnB,SAAA,CAAAqB,OAAA;MAClC,IAAAhB,yBAAkB,GAAY;QAAAC,iBAAuB;QAAAC,cAAA;MACrD;QACF,SAAAC,SAAA,GAAAc,oBAAA,CAAAH,SAAA,EAAAT,MAAA,CAAAC,QAAA,KAAAC,KAAA,IAAAP,yBAAA,IAAAO,KAAA,GAAAJ,SAAA,CAAAK,IAAA,IAAAC,IAAA,GAAAT,yBAAA;UAEM,IAAAkB,IAAQ,GAAAX,KAAO,CAAAI,KAAA;UAErBvB,uBAA2B,CAAA+B,GAAA,CAAAD,IAAA,CAAY,EAAA/B,aAC9B,CAAAgC,GAAA;UACX;UAEA,GAAAD,IAAS,CAAAE,UAAW,CAAAvC,SACb,eAAAuC,UAAA,CAAAtC,IAAA,sCACT","ignoreList":[]}
1
+ {"version":3,"names":["getRoutes","isTypedRoute","removeSupportedExtensions","CATCH_ALL","SLUG","getTypedRoutesDeclarationFile","ctx","staticRoutes","Set","dynamicRoutes","dynamicRouteContextKeys","walkRouteNode","platformRoutes","ignoreEntryPoints","ignoreRequireErrors","hasRoutes","size","setToUnionType","generateRouteTypesMap","trim","routes","sort","entries","map","routePath","params","extractParams","paramsType","length","generateInlineParamsType","join","paramRegex","match","exec","push","name","isCatchAll","p","type","routeNode","parentRoutePath","addRouteNode","route","replace","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","children","Symbol","iterator","_step","next","done","child","value","err","return","startsWith","dynamic","generateCombinations","path"],"sources":["../../../src/typed-routes/getTypedRoutesDeclarationFile.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,89 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { existsSync } from "node:fs";
3
+ async function injectRouteHelpers(filePath, routePath, mode) {
4
+ if (!existsSync(filePath))
5
+ return !1;
6
+ try {
7
+ let content = await readFile(filePath, "utf-8"), modified = !1;
8
+ const hasTypeRoute = /^type\s+Route\s*=/m.test(content), hasConstRoute = /^const\s+route\s*=/m.test(content);
9
+ if (mode === "runtime" && !hasConstRoute) {
10
+ const { updatedContent } = addCreateRouteImport(content);
11
+ content = updatedContent;
12
+ const routeDeclaration = `const route = createRoute<'${routePath}'>()`;
13
+ content = insertAfterImports(content, routeDeclaration), modified = !0;
14
+ }
15
+ if (mode === "type" && !hasTypeRoute) {
16
+ const { updatedContent } = addRouteTypeImport(content);
17
+ content = updatedContent;
18
+ const typeDeclaration = `type Route = RouteType<'${routePath}'>`;
19
+ content = insertAfterImports(content, typeDeclaration), modified = !0;
20
+ }
21
+ return modified ? (await writeFile(filePath, content, "utf-8"), !0) : !1;
22
+ } catch (error) {
23
+ return console.error(`Failed to inject route helpers into ${filePath}:`, error), !1;
24
+ }
25
+ }
26
+ function addCreateRouteImport(content) {
27
+ if (/import\s+[^'"]*createRoute[^'"]*from\s+['"]one['"]/m.test(content))
28
+ return { updatedContent: content, importAdded: !1 };
29
+ const oneImportRegex = /import\s+{([^}]*)}\s+from\s+['"]one['"]/m, match = content.match(oneImportRegex);
30
+ if (match) {
31
+ const existingImports = match[1].trim(), newImports = existingImports ? `${existingImports}, createRoute` : "createRoute";
32
+ return { updatedContent: content.replace(oneImportRegex, `import { ${newImports} } from 'one'`), importAdded: !0 };
33
+ }
34
+ const lastImportIndex = findLastImportIndex(content);
35
+ if (lastImportIndex >= 0) {
36
+ const lines = content.split(`
37
+ `);
38
+ return lines.splice(lastImportIndex + 1, 0, "import { createRoute } from 'one'"), { updatedContent: lines.join(`
39
+ `), importAdded: !0 };
40
+ }
41
+ return { updatedContent: `import { createRoute } from 'one'
42
+ ` + content, importAdded: !0 };
43
+ }
44
+ function addRouteTypeImport(content) {
45
+ if (/import\s+type\s+[^'"]*RouteType[^'"]*from\s+['"]one['"]/m.test(content))
46
+ return { updatedContent: content, importAdded: !1 };
47
+ const oneTypeImportRegex = /import\s+type\s+{([^}]*)}\s+from\s+['"]one['"]/m, match = content.match(oneTypeImportRegex);
48
+ if (match) {
49
+ const existingImports = match[1].trim(), newImports = existingImports ? `${existingImports}, RouteType` : "RouteType";
50
+ return { updatedContent: content.replace(
51
+ oneTypeImportRegex,
52
+ `import type { ${newImports} } from 'one'`
53
+ ), importAdded: !0 };
54
+ }
55
+ const lastImportIndex = findLastImportIndex(content);
56
+ if (lastImportIndex >= 0) {
57
+ const lines = content.split(`
58
+ `);
59
+ return lines.splice(lastImportIndex + 1, 0, "import type { RouteType } from 'one'"), { updatedContent: lines.join(`
60
+ `), importAdded: !0 };
61
+ }
62
+ return { updatedContent: `import type { RouteType } from 'one'
63
+ ` + content, importAdded: !0 };
64
+ }
65
+ function findLastImportIndex(content) {
66
+ const lines = content.split(`
67
+ `);
68
+ let lastImportIndex = -1;
69
+ for (let i = 0; i < lines.length; i++) {
70
+ const line = lines[i].trim();
71
+ if (line.startsWith("import ") || lastImportIndex >= 0 && (line.startsWith("from ") || line === "}"))
72
+ lastImportIndex = i;
73
+ else if (lastImportIndex >= 0 && line && !line.startsWith("//"))
74
+ break;
75
+ }
76
+ return lastImportIndex;
77
+ }
78
+ function insertAfterImports(content, codeToInsert) {
79
+ const lines = content.split(`
80
+ `), lastImportIndex = findLastImportIndex(content);
81
+ return lastImportIndex >= 0 ? (lines[lastImportIndex + 1] === "" ? lines.splice(lastImportIndex + 2, 0, codeToInsert, "") : lines.splice(lastImportIndex + 1, 0, "", codeToInsert, ""), lines.join(`
82
+ `)) : codeToInsert + `
83
+
84
+ ` + content;
85
+ }
86
+ export {
87
+ injectRouteHelpers
88
+ };
89
+ //# sourceMappingURL=injectRouteHelpers.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/typed-routes/injectRouteHelpers.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }