@tanstack/router-vite-plugin 1.1.8

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 (156) hide show
  1. package/LICENSE +21 -0
  2. package/build/cjs/_virtual/_commonjsHelpers.js +16 -0
  3. package/build/cjs/_virtual/_commonjsHelpers.js.map +1 -0
  4. package/build/cjs/_virtual/index.js +16 -0
  5. package/build/cjs/_virtual/index.js.map +1 -0
  6. package/build/cjs/_virtual/make-dir.js +16 -0
  7. package/build/cjs/_virtual/make-dir.js.map +1 -0
  8. package/build/cjs/_virtual/utils.js +16 -0
  9. package/build/cjs/_virtual/utils.js.map +1 -0
  10. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/copy-sync.js +188 -0
  11. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/copy-sync.js.map +1 -0
  12. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/copy.js +255 -0
  13. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/copy.js.map +1 -0
  14. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/index.js +24 -0
  15. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/copy/index.js.map +1 -0
  16. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/empty/index.js +59 -0
  17. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/empty/index.js.map +1 -0
  18. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/file.js +87 -0
  19. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/file.js.map +1 -0
  20. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/index.js +40 -0
  21. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/index.js.map +1 -0
  22. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/link.js +84 -0
  23. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/link.js.map +1 -0
  24. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink-paths.js +116 -0
  25. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink-paths.js.map +1 -0
  26. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink-type.js +46 -0
  27. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink-type.js.map +1 -0
  28. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink.js +105 -0
  29. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/ensure/symlink.js.map +1 -0
  30. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/fs/index.js +146 -0
  31. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/fs/index.js.map +1 -0
  32. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/index.js +41 -0
  33. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/index.js.map +1 -0
  34. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/index.js +34 -0
  35. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/index.js.map +1 -0
  36. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/jsonfile.js +26 -0
  37. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/jsonfile.js.map +1 -0
  38. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/output-json-sync.js +28 -0
  39. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/output-json-sync.js.map +1 -0
  40. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/output-json.js +28 -0
  41. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/json/output-json.js.map +1 -0
  42. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/mkdirs/index.js +32 -0
  43. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/mkdirs/index.js.map +1 -0
  44. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/mkdirs/make-dir.js +49 -0
  45. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/mkdirs/make-dir.js.map +1 -0
  46. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/mkdirs/utils.js +35 -0
  47. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/mkdirs/utils.js.map +1 -0
  48. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/index.js +24 -0
  49. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/index.js.map +1 -0
  50. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/move-sync.js +74 -0
  51. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/move-sync.js.map +1 -0
  52. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/move.js +96 -0
  53. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/move/move.js.map +1 -0
  54. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/output-file/index.js +59 -0
  55. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/output-file/index.js.map +1 -0
  56. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/path-exists/index.js +30 -0
  57. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/path-exists/index.js.map +1 -0
  58. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/remove/index.js +39 -0
  59. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/remove/index.js.map +1 -0
  60. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/remove/rimraf.js +319 -0
  61. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/remove/rimraf.js.map +1 -0
  62. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/util/stat.js +172 -0
  63. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/util/stat.js.map +1 -0
  64. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/util/utimes.js +41 -0
  65. package/build/cjs/node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/util/utimes.js.map +1 -0
  66. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.10/node_modules/graceful-fs/clone.js +36 -0
  67. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.10/node_modules/graceful-fs/clone.js.map +1 -0
  68. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.10/node_modules/graceful-fs/graceful-fs.js +469 -0
  69. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.10/node_modules/graceful-fs/graceful-fs.js.map +1 -0
  70. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.10/node_modules/graceful-fs/legacy-streams.js +135 -0
  71. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.10/node_modules/graceful-fs/legacy-streams.js.map +1 -0
  72. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.10/node_modules/graceful-fs/polyfills.js +372 -0
  73. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.10/node_modules/graceful-fs/polyfills.js.map +1 -0
  74. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/clone.js +45 -0
  75. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/clone.js.map +1 -0
  76. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/graceful-fs.js +479 -0
  77. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/graceful-fs.js.map +1 -0
  78. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/legacy-streams.js +143 -0
  79. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/legacy-streams.js.map +1 -0
  80. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/polyfills.js +380 -0
  81. package/build/cjs/node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/polyfills.js.map +1 -0
  82. package/build/cjs/node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/index.js +108 -0
  83. package/build/cjs/node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/index.js.map +1 -0
  84. package/build/cjs/node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/utils.js +29 -0
  85. package/build/cjs/node_modules/.pnpm/jsonfile@6.1.0/node_modules/jsonfile/utils.js.map +1 -0
  86. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/doc.js +1286 -0
  87. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/doc.js.map +1 -0
  88. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/index.js +21292 -0
  89. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/index.js.map +1 -0
  90. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/internal/internal.js +6513 -0
  91. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/internal/internal.js.map +1 -0
  92. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/acorn.js +31 -0
  93. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/acorn.js.map +1 -0
  94. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/angular.js +20 -0
  95. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/angular.js.map +1 -0
  96. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/babel.js +34 -0
  97. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/babel.js.map +1 -0
  98. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/estree.js +55 -0
  99. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/estree.js.map +1 -0
  100. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/flow.js +39 -0
  101. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/flow.js.map +1 -0
  102. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/glimmer.js +50 -0
  103. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/glimmer.js.map +1 -0
  104. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/graphql.js +50 -0
  105. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/graphql.js.map +1 -0
  106. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/html.js +40 -0
  107. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/html.js.map +1 -0
  108. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/markdown.js +80 -0
  109. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/markdown.js.map +1 -0
  110. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/meriyah.js +23 -0
  111. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/meriyah.js.map +1 -0
  112. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/postcss.js +73 -0
  113. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/postcss.js.map +1 -0
  114. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/typescript.js +43 -0
  115. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/typescript.js.map +1 -0
  116. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/yaml.js +182 -0
  117. package/build/cjs/node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/plugins/yaml.js.map +1 -0
  118. package/build/cjs/node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/index.js +4071 -0
  119. package/build/cjs/node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/index.js.map +1 -0
  120. package/build/cjs/packages/router-cli/src/config.js +30 -0
  121. package/build/cjs/packages/router-cli/src/config.js.map +1 -0
  122. package/build/cjs/packages/router-cli/src/generator.js +291 -0
  123. package/build/cjs/packages/router-cli/src/generator.js.map +1 -0
  124. package/build/cjs/packages/router-vite-plugin/src/index.js +67 -0
  125. package/build/cjs/packages/router-vite-plugin/src/index.js.map +1 -0
  126. package/build/esm/acorn-cRrhQtA6.js +26 -0
  127. package/build/esm/acorn-cRrhQtA6.js.map +1 -0
  128. package/build/esm/angular-HROv_CFe.js +15 -0
  129. package/build/esm/angular-HROv_CFe.js.map +1 -0
  130. package/build/esm/babel-WUIEfgoi.js +29 -0
  131. package/build/esm/babel-WUIEfgoi.js.map +1 -0
  132. package/build/esm/estree-XSgQYP4a.js +48 -0
  133. package/build/esm/estree-XSgQYP4a.js.map +1 -0
  134. package/build/esm/flow-RpbLwlct.js +34 -0
  135. package/build/esm/flow-RpbLwlct.js.map +1 -0
  136. package/build/esm/glimmer-nYL0saZ4.js +43 -0
  137. package/build/esm/glimmer-nYL0saZ4.js.map +1 -0
  138. package/build/esm/graphql-w_qkTZIK.js +42 -0
  139. package/build/esm/graphql-w_qkTZIK.js.map +1 -0
  140. package/build/esm/html-4mPGSUFL.js +32 -0
  141. package/build/esm/html-4mPGSUFL.js.map +1 -0
  142. package/build/esm/index.js +33321 -0
  143. package/build/esm/index.js.map +1 -0
  144. package/build/esm/markdown-MvZ6UzH9.js +72 -0
  145. package/build/esm/markdown-MvZ6UzH9.js.map +1 -0
  146. package/build/esm/meriyah-kfEfGGMB.js +18 -0
  147. package/build/esm/meriyah-kfEfGGMB.js.map +1 -0
  148. package/build/esm/postcss-yu5rIF8w.js +65 -0
  149. package/build/esm/postcss-yu5rIF8w.js.map +1 -0
  150. package/build/esm/typescript-CETgxtB5.js +38 -0
  151. package/build/esm/typescript-CETgxtB5.js.map +1 -0
  152. package/build/esm/yaml-_aqeuMai.js +174 -0
  153. package/build/esm/yaml-_aqeuMai.js.map +1 -0
  154. package/build/types/index.d.ts +17 -0
  155. package/package.json +44 -0
  156. package/src/index.ts +58 -0
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @tanstack/router-vite-plugin/src/index.ts
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ var path = require('path');
14
+ require('fs');
15
+ var index = require('../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/index.js');
16
+
17
+ const configSchema = index.default.object({
18
+ routeFilePrefix: index.default.string().optional(),
19
+ routeFileIgnorePrefix: index.default.string().optional().default('-'),
20
+ routesDirectory: index.default.string(),
21
+ generatedRouteTree: index.default.string(),
22
+ quoteStyle: index.default.enum(['single', 'double']).optional().default('single'),
23
+ future: index.default.object({
24
+ unstable_codeSplitting: index.default.boolean().optional()
25
+ }).optional()
26
+ });
27
+ path.resolve(process.cwd(), 'tsr.config.json');
28
+
29
+ exports.configSchema = configSchema;
30
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sources":["../../../../../../router-cli/src/config.ts"],"sourcesContent":["import path from 'path'\nimport { readFileSync } from 'fs'\nimport { z } from 'zod'\n\nexport const configSchema = z.object({\n routeFilePrefix: z.string().optional(),\n routeFileIgnorePrefix: z.string().optional().default('-'),\n routesDirectory: z.string(),\n generatedRouteTree: z.string(),\n quoteStyle: z.enum(['single', 'double']).optional().default('single'),\n future: z\n .object({\n unstable_codeSplitting: z.boolean().optional(),\n })\n .optional(),\n})\n\nexport type Config = z.infer<typeof configSchema>\n\nconst configFilePathJson = path.resolve(process.cwd(), 'tsr.config.json')\n\nexport async function getConfig(): Promise<Config> {\n return configSchema.parse(\n JSON.parse(readFileSync(configFilePathJson, 'utf-8')),\n )\n}\n"],"names":["configSchema","z","object","routeFilePrefix","string","optional","routeFileIgnorePrefix","default","routesDirectory","generatedRouteTree","quoteStyle","enum","future","unstable_codeSplitting","boolean","path","resolve","process","cwd"],"mappings":";;;;;;;;;;;;;;;;MAIaA,YAAY,GAAGC,aAAC,CAACC,MAAM,CAAC;EACnCC,eAAe,EAAEF,aAAC,CAACG,MAAM,EAAE,CAACC,QAAQ,EAAE;AACtCC,EAAAA,qBAAqB,EAAEL,aAAC,CAACG,MAAM,EAAE,CAACC,QAAQ,EAAE,CAACE,OAAO,CAAC,GAAG,CAAC;AACzDC,EAAAA,eAAe,EAAEP,aAAC,CAACG,MAAM,EAAE;AAC3BK,EAAAA,kBAAkB,EAAER,aAAC,CAACG,MAAM,EAAE;AAC9BM,EAAAA,UAAU,EAAET,aAAC,CAACU,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAACN,QAAQ,EAAE,CAACE,OAAO,CAAC,QAAQ,CAAC;AACrEK,EAAAA,MAAM,EAAEX,aAAC,CACNC,MAAM,CAAC;IACNW,sBAAsB,EAAEZ,aAAC,CAACa,OAAO,EAAE,CAACT,QAAQ,EAAC;GAC9C,CAAC,CACDA,QAAQ,EAAC;AACd,CAAC,EAAC;AAIyBU,IAAI,CAACC,OAAO,CAACC,OAAO,CAACC,GAAG,EAAE,EAAE,iBAAiB;;;;"}
@@ -0,0 +1,291 @@
1
+ /**
2
+ * @tanstack/router-vite-plugin/src/index.ts
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ var path = require('path');
14
+ var index$1 = require('../../../node_modules/.pnpm/fs-extra@10.1.0/node_modules/fs-extra/lib/index.js');
15
+ var index = require('../../../node_modules/.pnpm/prettier@3.0.2/node_modules/prettier/index.js');
16
+ var reactRouter = require('@tanstack/react-router');
17
+
18
+ let latestTask = 0;
19
+ const rootPathId = '__root';
20
+ const fileRouteRegex = /new\s+FileRoute\(([^)]*)\)/g;
21
+ async function getRouteNodes(config) {
22
+ const {
23
+ routeFilePrefix,
24
+ routeFileIgnorePrefix
25
+ } = config;
26
+ let routeNodes = [];
27
+ async function recurse(dir) {
28
+ const fullDir = path.resolve(config.routesDirectory, dir);
29
+ let dirList = await index$1.lib.readdir(fullDir);
30
+ dirList = dirList.filter(d => {
31
+ if (d.startsWith('.') || routeFileIgnorePrefix && d.startsWith(routeFileIgnorePrefix)) {
32
+ return false;
33
+ }
34
+ if (routeFilePrefix) {
35
+ return d.startsWith(routeFilePrefix);
36
+ }
37
+ return true;
38
+ });
39
+ await Promise.all(dirList.map(async fileName => {
40
+ const fullPath = path.join(fullDir, fileName);
41
+ const relativePath = path.join(dir, fileName);
42
+ const stat = await index$1.lib.stat(fullPath);
43
+ if (stat.isDirectory()) {
44
+ await recurse(relativePath);
45
+ } else {
46
+ const filePath = path.join(dir, fileName);
47
+ const filePathNoExt = removeExt(filePath);
48
+ let routePath = replaceBackslash(reactRouter.cleanPath(`/${filePathNoExt.split('.').join('/')}`)) ?? '';
49
+ const variableName = fileToVariable(routePath);
50
+
51
+ // Remove the index from the route path and
52
+ // if the route path is empty, use `/'
53
+ if (routePath === 'index') {
54
+ routePath = '/';
55
+ } else if (routePath.endsWith('/index')) {
56
+ routePath = routePath.replace(/\/index$/, '/');
57
+ }
58
+ routeNodes.push({
59
+ filePath,
60
+ fullPath,
61
+ routePath,
62
+ variableName
63
+ });
64
+ }
65
+ }));
66
+ return routeNodes;
67
+ }
68
+ await recurse('./');
69
+ return routeNodes;
70
+ }
71
+ let first = false;
72
+ let skipMessage = false;
73
+ async function generator(config) {
74
+ console.log();
75
+ if (!first) {
76
+ console.log('🔄 Generating routes...');
77
+ first = true;
78
+ } else if (skipMessage) {
79
+ skipMessage = false;
80
+ } else {
81
+ console.log('♻️ Regenerating routes...');
82
+ }
83
+ const taskId = latestTask + 1;
84
+ latestTask = taskId;
85
+ const checkLatest = () => {
86
+ if (latestTask !== taskId) {
87
+ skipMessage = true;
88
+ return false;
89
+ }
90
+ return true;
91
+ };
92
+ const start = Date.now();
93
+ const routePathIdPrefix = config.routeFilePrefix ?? '';
94
+ let preRouteNodes = await getRouteNodes(config);
95
+ const sortRouteNodes = nodes => {
96
+ return multiSortBy(nodes, [d => d.routePath === '/' ? -1 : 1, d => d.routePath?.split('/').length, d => d.filePath?.match(/[./]index[.]/) ? 1 : -1, d => d.filePath?.match(/[./]route[.]/) ? -1 : 1, d => d.routePath?.endsWith('/') ? -1 : 1, d => d.routePath]).filter(d => d.routePath !== `/${routePathIdPrefix + rootPathId}`);
97
+ };
98
+ preRouteNodes = sortRouteNodes(preRouteNodes);
99
+ const routeTree = [];
100
+ const routePiecesByPath = {};
101
+
102
+ // Loop over the flat list of routeNodes and
103
+ // build up a tree based on the routeNodes' routePath
104
+ let routeNodes = [];
105
+ const handleNode = node => {
106
+ if (config.future?.unstable_codeSplitting) {
107
+ node.isRoute = node.routePath?.endsWith('/route');
108
+ node.isComponent = node.routePath?.endsWith('/component');
109
+ node.isLoader = node.routePath?.endsWith('/loader');
110
+ if (node.isComponent || node.isLoader || node.isRoute) {
111
+ node.routePath = node.routePath?.replace(/\/(component|loader|route)$/, '');
112
+ }
113
+ }
114
+ const parentRoute = hasParentRoute(routeNodes, node.routePath);
115
+ if (parentRoute) node.parent = parentRoute;
116
+ node.path = node.parent ? node.routePath?.replace(node.parent.routePath, '') || '/' : node.routePath;
117
+ const trimmedPath = reactRouter.trimPathLeft(node.path ?? '');
118
+ const split = trimmedPath?.split('/') ?? [];
119
+ let first = split[0] ?? trimmedPath ?? '';
120
+ node.isNonPath = first.startsWith('_');
121
+ node.isNonLayout = first.endsWith('_');
122
+ node.cleanedPath = removeUnderscores(node.path) ?? '';
123
+ if (config.future?.unstable_codeSplitting) {
124
+ if (node.isLoader || node.isComponent) {
125
+ routePiecesByPath[node.routePath] = routePiecesByPath[node.routePath] || {};
126
+ routePiecesByPath[node.routePath][node.isLoader ? 'loader' : 'component'] = node;
127
+ const anchorRoute = routeNodes.find(d => d.routePath === node.routePath);
128
+ if (!anchorRoute) {
129
+ handleNode({
130
+ ...node,
131
+ isVirtual: true
132
+ });
133
+ }
134
+ // if (!node.parent) {
135
+ // }
136
+
137
+ // componentOrLoader.isVirtual = true
138
+ // handleNode(componentOrLoader)
139
+ return;
140
+ }
141
+ }
142
+ if (node.parent) {
143
+ node.parent.children = node.parent.children ?? [];
144
+ node.parent.children.push(node);
145
+ } else {
146
+ routeTree.push(node);
147
+ }
148
+ routeNodes.push(node);
149
+ };
150
+ preRouteNodes.forEach(node => handleNode(node));
151
+ async function buildRouteConfig(nodes, depth = 1) {
152
+ const children = nodes.map(async node => {
153
+ const routeCode = await index$1.lib.readFile(node.fullPath, 'utf-8');
154
+
155
+ // Ensure the boilerplate for the route exists
156
+ if (node.isRoot) {
157
+ return;
158
+ }
159
+
160
+ // Ensure that new FileRoute(anything?) is replaced with FileRoute(${node.routePath})
161
+ // routePath can contain $ characters, which have special meaning when used in replace
162
+ // so we have to escape it by turning all $ into $$. But since we do it through a replace call
163
+ // we have to double escape it into $$$$. For more information, see
164
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement
165
+ const escapedRoutePath = node.routePath?.replaceAll('$', '$$$$') ?? '';
166
+ const quote = config.quoteStyle === 'single' ? `'` : `"`;
167
+ const replaced = routeCode.replace(fileRouteRegex, `new FileRoute(${quote}${escapedRoutePath}${quote})`);
168
+ if (replaced !== routeCode) {
169
+ await index$1.lib.writeFile(node.fullPath, replaced);
170
+ }
171
+ const route = `${node.variableName}Route`;
172
+ if (node.children?.length) {
173
+ const childConfigs = await buildRouteConfig(node.children, depth + 1);
174
+ return `${route}.addChildren([${spaces(depth * 4)}${childConfigs}])`;
175
+ }
176
+ return route;
177
+ });
178
+ return (await Promise.all(children)).filter(Boolean).join(`,`);
179
+ }
180
+ const routeConfigChildrenText = await buildRouteConfig(routeTree);
181
+ const sortedRouteNodes = multiSortBy(routeNodes, [d => d.routePath?.includes(`/${routePathIdPrefix + rootPathId}`) ? -1 : 1, d => d.routePath?.split('/').length, d => d.routePath?.endsWith("index'") ? -1 : 1, d => d]);
182
+ const imports = Object.entries({
183
+ FileRoute: sortedRouteNodes.some(d => d.isVirtual),
184
+ lazyFn: sortedRouteNodes.some(node => routePiecesByPath[node.routePath]?.loader),
185
+ lazyRouteComponent: sortedRouteNodes.some(node => routePiecesByPath[node.routePath]?.component)
186
+ }).filter(d => d[1]).map(d => d[0]);
187
+ const routeImports = [imports.length ? `import { ${imports.join(', ')} } from '@tanstack/react-router'\n` : '', `import { Route as rootRoute } from './${sanitize(path.relative(path.dirname(config.generatedRouteTree), path.resolve(config.routesDirectory, routePathIdPrefix + rootPathId)))}'`, ...sortedRouteNodes.filter(d => !d.isVirtual).map(node => {
188
+ return `import { Route as ${node.variableName}Import } from './${sanitize(removeExt(path.relative(path.dirname(config.generatedRouteTree), path.resolve(config.routesDirectory, node.filePath))))}'`;
189
+ }), '\n', sortedRouteNodes.filter(d => d.isVirtual).map(node => {
190
+ return `const ${node.variableName}Import = new FileRoute('${node.routePath}').createRoute()`;
191
+ }).join('\n'), '\n', sortedRouteNodes.map(node => {
192
+ const loaderNode = routePiecesByPath[node.routePath]?.loader;
193
+ const componentNode = routePiecesByPath[node.routePath]?.component;
194
+ return [`const ${node.variableName}Route = ${node.variableName}Import.update({
195
+ ${[node.isNonPath ? `id: '${node.path}'` : `path: '${node.cleanedPath}'`, `getParentRoute: () => ${node.parent?.variableName ?? 'root'}Route`].filter(Boolean).join(',')}
196
+ } as any)`, loaderNode ? `.updateLoader({ loader: lazyFn(() => import('./${sanitize(removeExt(path.relative(path.dirname(config.generatedRouteTree), path.resolve(config.routesDirectory, loaderNode.filePath))))}'), 'loader') })` : '', componentNode ? `.update({ component: lazyRouteComponent(() => import('./${sanitize(removeExt(path.relative(path.dirname(config.generatedRouteTree), path.resolve(config.routesDirectory, componentNode.filePath))))}'), 'component') })` : ''].join('');
197
+ }).join('\n\n'), `declare module '@tanstack/react-router' {
198
+ interface FileRoutesByPath {
199
+ ${routeNodes.map(routeNode => {
200
+ return `'${routeNode.routePath}': {
201
+ preLoaderRoute: typeof ${routeNode.variableName}Import
202
+ parentRoute: typeof ${routeNode.parent?.variableName ? `${routeNode.parent?.variableName}Import` : 'rootRoute'}
203
+ }`;
204
+ }).join('\n')}
205
+ }
206
+ }`, `export const routeTree = rootRoute.addChildren([${routeConfigChildrenText}])`].join('\n');
207
+ const routeConfigFileContent = await index.format(routeImports, {
208
+ semi: false,
209
+ parser: 'typescript'
210
+ });
211
+ const routeTreeContent = await index$1.lib.readFile(path.resolve(config.generatedRouteTree), 'utf-8').catch(err => {
212
+ if (err.code === 'ENOENT') {
213
+ return undefined;
214
+ }
215
+ throw err;
216
+ });
217
+ if (!checkLatest()) return;
218
+ if (routeTreeContent !== routeConfigFileContent) {
219
+ await index$1.lib.ensureDir(path.dirname(path.resolve(config.generatedRouteTree)));
220
+ if (!checkLatest()) return;
221
+ await index$1.lib.writeFile(path.resolve(config.generatedRouteTree), routeConfigFileContent);
222
+ }
223
+ console.log(`🌲 Processed ${routeNodes.length} routes in ${Date.now() - start}ms`);
224
+ }
225
+ function fileToVariable(d) {
226
+ return removeUnderscores(d)?.replace(/\$/g, '')?.split(/[/-]/g).map((d, i) => i > 0 ? capitalize(d) : d).join('').replace(/([^a-zA-Z0-9]|[\.])/gm, '') ?? '';
227
+ }
228
+ function removeExt(d) {
229
+ return d.substring(0, d.lastIndexOf('.')) || d;
230
+ }
231
+ function spaces(d) {
232
+ return Array.from({
233
+ length: d
234
+ }).map(() => ' ').join('');
235
+ }
236
+ function multiSortBy(arr, accessors = [d => d]) {
237
+ return arr.map((d, i) => [d, i]).sort(([a, ai], [b, bi]) => {
238
+ for (const accessor of accessors) {
239
+ const ao = accessor(a);
240
+ const bo = accessor(b);
241
+ if (typeof ao === 'undefined') {
242
+ if (typeof bo === 'undefined') {
243
+ continue;
244
+ }
245
+ return 1;
246
+ }
247
+ if (ao === bo) {
248
+ continue;
249
+ }
250
+ return ao > bo ? 1 : -1;
251
+ }
252
+ return ai - bi;
253
+ }).map(([d]) => d);
254
+ }
255
+ function capitalize(s) {
256
+ if (typeof s !== 'string') return '';
257
+ return s.charAt(0).toUpperCase() + s.slice(1);
258
+ }
259
+ function sanitize(s) {
260
+ return replaceBackslash(s?.replace(/\\index/gi, ''));
261
+ }
262
+ function removeUnderscores(s) {
263
+ return s?.replace(/(^_|_$)/, '').replace(/(\/_|_\/)/, '/');
264
+ }
265
+ function replaceBackslash(s) {
266
+ return s?.replace(/\\/gi, '/');
267
+ }
268
+ function hasParentRoute(routes, routePathToCheck) {
269
+ if (!routePathToCheck || routePathToCheck === '/') {
270
+ return null;
271
+ }
272
+ const sortedNodes = multiSortBy(routes, [d => d.routePath.length * -1, d => d.variableName]).filter(d => d.routePath !== `/${rootPathId}`);
273
+ for (const route of sortedNodes) {
274
+ if (route.routePath === '/') continue;
275
+ if (routePathToCheck.startsWith(`${route.routePath}/`) && route.routePath !== routePathToCheck) {
276
+ return route;
277
+ }
278
+ }
279
+ const segments = routePathToCheck.split('/');
280
+ segments.pop(); // Remove the last segment
281
+ const parentRoutePath = segments.join('/');
282
+ return hasParentRoute(routes, parentRoutePath);
283
+ }
284
+
285
+ exports.fileRouteRegex = fileRouteRegex;
286
+ exports.generator = generator;
287
+ exports.hasParentRoute = hasParentRoute;
288
+ exports.multiSortBy = multiSortBy;
289
+ exports.removeExt = removeExt;
290
+ exports.rootPathId = rootPathId;
291
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sources":["../../../../../../router-cli/src/generator.ts"],"sourcesContent":["import path from 'path'\nimport * as fs from 'fs-extra'\nimport * as prettier from 'prettier'\nimport { Config } from './config'\nimport { cleanPath, trimPathLeft } from '@tanstack/react-router'\n\nlet latestTask = 0\nexport const rootPathId = '__root'\nexport const fileRouteRegex = /new\\s+FileRoute\\(([^)]*)\\)/g\n\nexport type RouteNode = {\n filePath: string\n fullPath: string\n variableName: string\n routePath?: string\n cleanedPath?: string\n path?: string\n isNonPath?: boolean\n isNonLayout?: boolean\n isRoute?: boolean\n isLoader?: boolean\n isComponent?: boolean\n isVirtual?: boolean\n isRoot?: boolean\n children?: RouteNode[]\n parent?: RouteNode\n}\n\nasync function getRouteNodes(config: Config) {\n const { routeFilePrefix, routeFileIgnorePrefix } = config\n\n let routeNodes: RouteNode[] = []\n\n async function recurse(dir: string) {\n const fullDir = path.resolve(config.routesDirectory, dir)\n let dirList = await fs.readdir(fullDir)\n\n dirList = dirList.filter((d) => {\n if (\n d.startsWith('.') ||\n (routeFileIgnorePrefix && d.startsWith(routeFileIgnorePrefix))\n ) {\n return false\n }\n\n if (routeFilePrefix) {\n return d.startsWith(routeFilePrefix)\n }\n\n return true\n })\n\n await Promise.all(\n dirList.map(async (fileName) => {\n const fullPath = path.join(fullDir, fileName)\n const relativePath = path.join(dir, fileName)\n const stat = await fs.stat(fullPath)\n\n if (stat.isDirectory()) {\n await recurse(relativePath)\n } else {\n const filePath = path.join(dir, fileName)\n const filePathNoExt = removeExt(filePath)\n let routePath =\n replaceBackslash(\n cleanPath(`/${filePathNoExt.split('.').join('/')}`),\n ) ?? ''\n const variableName = fileToVariable(routePath)\n\n // Remove the index from the route path and\n // if the route path is empty, use `/'\n if (routePath === 'index') {\n routePath = '/'\n } else if (routePath.endsWith('/index')) {\n routePath = routePath.replace(/\\/index$/, '/')\n }\n\n routeNodes.push({\n filePath,\n fullPath,\n routePath,\n variableName,\n })\n }\n }),\n )\n\n return routeNodes\n }\n\n await recurse('./')\n\n return routeNodes\n}\n\nlet first = false\nlet skipMessage = false\n\ntype RouteSubNode = {\n component?: RouteNode\n loader?: RouteNode\n}\n\nexport async function generator(config: Config) {\n console.log()\n\n if (!first) {\n console.log('🔄 Generating routes...')\n first = true\n } else if (skipMessage) {\n skipMessage = false\n } else {\n console.log('♻️ Regenerating routes...')\n }\n\n const taskId = latestTask + 1\n latestTask = taskId\n\n const checkLatest = () => {\n if (latestTask !== taskId) {\n skipMessage = true\n return false\n }\n\n return true\n }\n\n const start = Date.now()\n const routePathIdPrefix = config.routeFilePrefix ?? ''\n\n let preRouteNodes = await getRouteNodes(config)\n\n const sortRouteNodes = (nodes: RouteNode[]): RouteNode[] => {\n return multiSortBy(nodes, [\n (d) => (d.routePath === '/' ? -1 : 1),\n (d) => d.routePath?.split('/').length,\n (d) => (d.filePath?.match(/[./]index[.]/) ? 1 : -1),\n (d) => (d.filePath?.match(/[./]route[.]/) ? -1 : 1),\n (d) => (d.routePath?.endsWith('/') ? -1 : 1),\n (d) => d.routePath,\n ]).filter((d) => d.routePath !== `/${routePathIdPrefix + rootPathId}`)\n }\n\n preRouteNodes = sortRouteNodes(preRouteNodes)\n\n const routeTree: RouteNode[] = []\n const routePiecesByPath: Record<string, RouteSubNode> = {}\n\n // Loop over the flat list of routeNodes and\n // build up a tree based on the routeNodes' routePath\n let routeNodes: RouteNode[] = []\n\n const handleNode = (node: RouteNode) => {\n if (config.future?.unstable_codeSplitting) {\n node.isRoute = node.routePath?.endsWith('/route')\n node.isComponent = node.routePath?.endsWith('/component')\n node.isLoader = node.routePath?.endsWith('/loader')\n\n if (node.isComponent || node.isLoader || node.isRoute) {\n node.routePath = node.routePath?.replace(\n /\\/(component|loader|route)$/,\n '',\n )\n }\n }\n\n const parentRoute = hasParentRoute(routeNodes, node.routePath)\n if (parentRoute) node.parent = parentRoute\n\n node.path = node.parent\n ? node.routePath?.replace(node.parent.routePath!, '') || '/'\n : node.routePath\n\n const trimmedPath = trimPathLeft(node.path ?? '')\n\n const split = trimmedPath?.split('/') ?? []\n let first = split[0] ?? trimmedPath ?? ''\n\n node.isNonPath = first.startsWith('_')\n node.isNonLayout = first.endsWith('_')\n\n node.cleanedPath = removeUnderscores(node.path) ?? ''\n\n if (config.future?.unstable_codeSplitting) {\n if (node.isLoader || node.isComponent) {\n routePiecesByPath[node.routePath!] =\n routePiecesByPath[node.routePath!] || {}\n\n routePiecesByPath[node.routePath!]![\n node.isLoader ? 'loader' : 'component'\n ] = node\n\n const anchorRoute = routeNodes.find(\n (d) => d.routePath === node.routePath,\n )\n if (!anchorRoute) {\n handleNode({\n ...node,\n isVirtual: true,\n })\n }\n // if (!node.parent) {\n // }\n\n // componentOrLoader.isVirtual = true\n // handleNode(componentOrLoader)\n return\n }\n }\n\n if (node.parent) {\n node.parent.children = node.parent.children ?? []\n node.parent.children.push(node)\n } else {\n routeTree.push(node)\n }\n\n routeNodes.push(node)\n }\n\n preRouteNodes.forEach((node) => handleNode(node))\n\n async function buildRouteConfig(\n nodes: RouteNode[],\n depth = 1,\n ): Promise<string> {\n const children = nodes.map(async (node) => {\n const routeCode = await fs.readFile(node.fullPath, 'utf-8')\n\n // Ensure the boilerplate for the route exists\n if (node.isRoot) {\n return\n }\n\n // Ensure that new FileRoute(anything?) is replaced with FileRoute(${node.routePath})\n // routePath can contain $ characters, which have special meaning when used in replace\n // so we have to escape it by turning all $ into $$. But since we do it through a replace call\n // we have to double escape it into $$$$. For more information, see\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement\n const escapedRoutePath = node.routePath?.replaceAll('$', '$$$$') ?? ''\n const quote = config.quoteStyle === 'single' ? `'` : `\"`\n const replaced = routeCode.replace(\n fileRouteRegex,\n `new FileRoute(${quote}${escapedRoutePath}${quote})`,\n )\n\n if (replaced !== routeCode) {\n await fs.writeFile(node.fullPath, replaced)\n }\n\n const route = `${node.variableName}Route`\n\n if (node.children?.length) {\n const childConfigs = await buildRouteConfig(node.children, depth + 1)\n return `${route}.addChildren([${spaces(depth * 4)}${childConfigs}])`\n }\n\n return route\n })\n\n return (await Promise.all(children)).filter(Boolean).join(`,`)\n }\n\n const routeConfigChildrenText = await buildRouteConfig(routeTree)\n\n const sortedRouteNodes = multiSortBy(routeNodes, [\n (d) =>\n d.routePath?.includes(`/${routePathIdPrefix + rootPathId}`) ? -1 : 1,\n (d) => d.routePath?.split('/').length,\n (d) => (d.routePath?.endsWith(\"index'\") ? -1 : 1),\n (d) => d,\n ])\n\n const imports = Object.entries({\n FileRoute: sortedRouteNodes.some((d) => d.isVirtual),\n lazyFn: sortedRouteNodes.some(\n (node) => routePiecesByPath[node.routePath!]?.loader,\n ),\n lazyRouteComponent: sortedRouteNodes.some(\n (node) => routePiecesByPath[node.routePath!]?.component,\n ),\n })\n .filter((d) => d[1])\n .map((d) => d[0])\n\n const routeImports = [\n imports.length\n ? `import { ${imports.join(', ')} } from '@tanstack/react-router'\\n`\n : '',\n `import { Route as rootRoute } from './${sanitize(\n path.relative(\n path.dirname(config.generatedRouteTree),\n path.resolve(config.routesDirectory, routePathIdPrefix + rootPathId),\n ),\n )}'`,\n ...sortedRouteNodes\n .filter((d) => !d.isVirtual)\n .map((node) => {\n return `import { Route as ${\n node.variableName\n }Import } from './${sanitize(\n removeExt(\n path.relative(\n path.dirname(config.generatedRouteTree),\n path.resolve(config.routesDirectory, node.filePath),\n ),\n ),\n )}'`\n }),\n '\\n',\n sortedRouteNodes\n .filter((d) => d.isVirtual)\n .map((node) => {\n return `const ${node.variableName}Import = new FileRoute('${node.routePath}').createRoute()`\n })\n .join('\\n'),\n '\\n',\n sortedRouteNodes\n .map((node) => {\n const loaderNode = routePiecesByPath[node.routePath!]?.loader\n const componentNode = routePiecesByPath[node.routePath!]?.component\n\n return [\n `const ${node.variableName}Route = ${node.variableName}Import.update({\n ${[\n node.isNonPath\n ? `id: '${node.path}'`\n : `path: '${node.cleanedPath}'`,\n `getParentRoute: () => ${node.parent?.variableName ?? 'root'}Route`,\n ]\n .filter(Boolean)\n .join(',')}\n } as any)`,\n loaderNode\n ? `.updateLoader({ loader: lazyFn(() => import('./${sanitize(\n removeExt(\n path.relative(\n path.dirname(config.generatedRouteTree),\n path.resolve(config.routesDirectory, loaderNode.filePath),\n ),\n ),\n )}'), 'loader') })`\n : '',\n componentNode\n ? `.update({ component: lazyRouteComponent(() => import('./${sanitize(\n removeExt(\n path.relative(\n path.dirname(config.generatedRouteTree),\n path.resolve(\n config.routesDirectory,\n componentNode.filePath,\n ),\n ),\n ),\n )}'), 'component') })`\n : '',\n ].join('')\n })\n .join('\\n\\n'),\n `declare module '@tanstack/react-router' {\n interface FileRoutesByPath {\n ${routeNodes\n .map((routeNode) => {\n return `'${routeNode.routePath}': {\n preLoaderRoute: typeof ${routeNode.variableName}Import\n parentRoute: typeof ${\n routeNode.parent?.variableName\n ? `${routeNode.parent?.variableName}Import`\n : 'rootRoute'\n }\n }`\n })\n .join('\\n')}\n }\n}`,\n `export const routeTree = rootRoute.addChildren([${routeConfigChildrenText}])`,\n ].join('\\n')\n\n const routeConfigFileContent = await prettier.format(routeImports, {\n semi: false,\n parser: 'typescript',\n })\n\n const routeTreeContent = await fs\n .readFile(path.resolve(config.generatedRouteTree), 'utf-8')\n .catch((err: any) => {\n if (err.code === 'ENOENT') {\n return undefined\n }\n throw err\n })\n\n if (!checkLatest()) return\n\n if (routeTreeContent !== routeConfigFileContent) {\n await fs.ensureDir(path.dirname(path.resolve(config.generatedRouteTree)))\n if (!checkLatest()) return\n await fs.writeFile(\n path.resolve(config.generatedRouteTree),\n routeConfigFileContent,\n )\n }\n\n console.log(\n `🌲 Processed ${routeNodes.length} routes in ${Date.now() - start}ms`,\n )\n}\n\nfunction fileToVariable(d: string): string {\n return (\n removeUnderscores(d)\n ?.replace(/\\$/g, '')\n ?.split(/[/-]/g)\n .map((d, i) => (i > 0 ? capitalize(d) : d))\n .join('')\n .replace(/([^a-zA-Z0-9]|[\\.])/gm, '') ?? ''\n )\n}\n\nexport function removeExt(d: string) {\n return d.substring(0, d.lastIndexOf('.')) || d\n}\n\nfunction spaces(d: number): string {\n return Array.from({ length: d })\n .map(() => ' ')\n .join('')\n}\n\nexport function multiSortBy<T>(\n arr: T[],\n accessors: ((item: T) => any)[] = [(d) => d],\n): T[] {\n return arr\n .map((d, i) => [d, i] as const)\n .sort(([a, ai], [b, bi]) => {\n for (const accessor of accessors) {\n const ao = accessor(a)\n const bo = accessor(b)\n\n if (typeof ao === 'undefined') {\n if (typeof bo === 'undefined') {\n continue\n }\n return 1\n }\n\n if (ao === bo) {\n continue\n }\n\n return ao > bo ? 1 : -1\n }\n\n return ai - bi\n })\n .map(([d]) => d)\n}\n\nfunction capitalize(s: string) {\n if (typeof s !== 'string') return ''\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nfunction sanitize(s?: string) {\n return replaceBackslash(s?.replace(/\\\\index/gi, ''))\n}\n\nfunction removeUnderscores(s?: string) {\n return s?.replace(/(^_|_$)/, '').replace(/(\\/_|_\\/)/, '/')\n}\n\nfunction replaceBackslash(s?: string) {\n return s?.replace(/\\\\/gi, '/')\n}\n\nexport function hasParentRoute(\n routes: RouteNode[],\n routePathToCheck: string | undefined,\n): RouteNode | null {\n if (!routePathToCheck || routePathToCheck === '/') {\n return null\n }\n\n const sortedNodes = multiSortBy(routes, [\n (d) => d.routePath!.length * -1,\n (d) => d.variableName,\n ]).filter((d) => d.routePath !== `/${rootPathId}`)\n\n for (const route of sortedNodes) {\n if (route.routePath === '/') continue\n\n if (\n routePathToCheck.startsWith(`${route.routePath}/`) &&\n route.routePath !== routePathToCheck\n ) {\n return route\n }\n }\n const segments = routePathToCheck.split('/')\n segments.pop() // Remove the last segment\n const parentRoutePath = segments.join('/')\n\n return hasParentRoute(routes, parentRoutePath)\n}\n"],"names":["latestTask","rootPathId","fileRouteRegex","getRouteNodes","config","routeFilePrefix","routeFileIgnorePrefix","routeNodes","recurse","dir","fullDir","path","resolve","routesDirectory","dirList","fs","filter","d","startsWith","Promise","all","map","fileName","fullPath","join","relativePath","stat","isDirectory","filePath","filePathNoExt","removeExt","routePath","replaceBackslash","cleanPath","split","variableName","fileToVariable","endsWith","replace","push","first","skipMessage","generator","console","log","taskId","checkLatest","start","Date","now","routePathIdPrefix","preRouteNodes","sortRouteNodes","nodes","multiSortBy","length","match","routeTree","routePiecesByPath","handleNode","node","future","unstable_codeSplitting","isRoute","isComponent","isLoader","parentRoute","hasParentRoute","parent","trimmedPath","trimPathLeft","isNonPath","isNonLayout","cleanedPath","removeUnderscores","anchorRoute","find","isVirtual","children","forEach","buildRouteConfig","depth","routeCode","isRoot","escapedRoutePath","replaceAll","quote","quoteStyle","replaced","route","childConfigs","spaces","Boolean","routeConfigChildrenText","sortedRouteNodes","includes","imports","Object","entries","FileRoute","some","lazyFn","loader","lazyRouteComponent","component","routeImports","sanitize","relative","dirname","generatedRouteTree","loaderNode","componentNode","routeNode","routeConfigFileContent","prettier","semi","parser","routeTreeContent","catch","err","code","undefined","i","capitalize","substring","lastIndexOf","Array","from","arr","accessors","sort","a","ai","b","bi","accessor","ao","bo","s","charAt","toUpperCase","slice","routes","routePathToCheck","sortedNodes","segments","pop","parentRoutePath"],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @tanstack/router-vite-plugin/src/index.ts
3
+ *
4
+ * Copyright (c) TanStack
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ 'use strict';
12
+
13
+ var path = require('path');
14
+ var fs = require('fs/promises');
15
+ var config = require('../../router-cli/src/config.js');
16
+ var generator = require('../../router-cli/src/generator.js');
17
+
18
+ const CONFIG_FILE_NAME = 'tsr.config.json';
19
+ async function readConfigFile(path) {
20
+ try {
21
+ const raw = await fs.readFile(path, 'utf-8');
22
+ return JSON.parse(raw);
23
+ } catch {
24
+ return {};
25
+ }
26
+ }
27
+ async function buildConfig(config$1, root) {
28
+ const fileConfig = await readConfigFile(path.join(root, CONFIG_FILE_NAME));
29
+ return config.configSchema.parse({
30
+ ...fileConfig,
31
+ ...config$1
32
+ });
33
+ }
34
+ function TanStackRouterVite(inlineConfig = {}) {
35
+ let ROOT;
36
+ let userConfig;
37
+ const generate = async () => {
38
+ try {
39
+ await generator.generator(userConfig);
40
+ } catch (err) {
41
+ console.error(err);
42
+ console.info();
43
+ }
44
+ };
45
+ return {
46
+ name: 'vite-plugin-tanstack-router',
47
+ configResolved: async vite => {
48
+ ROOT = vite.root;
49
+ userConfig = await buildConfig(inlineConfig, ROOT);
50
+ await generate();
51
+ },
52
+ handleHotUpdate: async ({
53
+ file
54
+ }) => {
55
+ if (file === path.join(ROOT, CONFIG_FILE_NAME)) {
56
+ userConfig = await buildConfig(inlineConfig, ROOT);
57
+ return;
58
+ }
59
+ if (file.startsWith(path.join(ROOT, userConfig.routesDirectory))) {
60
+ await generate();
61
+ }
62
+ }
63
+ };
64
+ }
65
+
66
+ exports.TanStackRouterVite = TanStackRouterVite;
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/index.ts"],"sourcesContent":["import { Plugin } from 'vite'\nimport { join } from 'path'\nimport { readFile } from 'fs/promises'\nimport { Config, configSchema } from '@tanstack/router-cli/src/config'\nimport { generator } from '@tanstack/router-cli/src/generator'\n\nconst CONFIG_FILE_NAME = 'tsr.config.json'\n\ntype UserConfig = Partial<Config>\n\nasync function readConfigFile(path: string): Promise<UserConfig> {\n try {\n const raw = await readFile(path, 'utf-8')\n return JSON.parse(raw) as UserConfig\n } catch {\n return {} as UserConfig\n }\n}\n\nasync function buildConfig(config: UserConfig, root: string): Promise<Config> {\n const fileConfig = await readConfigFile(join(root, CONFIG_FILE_NAME))\n return configSchema.parse({\n ...fileConfig,\n ...config,\n })\n}\n\nexport function TanStackRouterVite(inlineConfig: UserConfig = {}): Plugin {\n let ROOT: string\n let userConfig: Config\n\n const generate = async () => {\n try {\n await generator(userConfig)\n } catch (err) {\n console.error(err)\n console.info()\n }\n }\n\n return {\n name: 'vite-plugin-tanstack-router',\n configResolved: async (vite) => {\n ROOT = vite.root\n userConfig = await buildConfig(inlineConfig, ROOT)\n await generate()\n },\n handleHotUpdate: async ({ file }) => {\n if (file === join(ROOT, CONFIG_FILE_NAME)) {\n userConfig = await buildConfig(inlineConfig, ROOT)\n return\n }\n if (file.startsWith(join(ROOT, userConfig.routesDirectory))) {\n await generate()\n }\n },\n }\n}\n"],"names":["CONFIG_FILE_NAME","readConfigFile","path","raw","readFile","JSON","parse","buildConfig","config","root","fileConfig","join","configSchema","TanStackRouterVite","inlineConfig","ROOT","userConfig","generate","generator","err","console","error","info","name","configResolved","vite","handleHotUpdate","file","startsWith","routesDirectory"],"mappings":";;;;;;;;;;;;;;;;;AAMA,MAAMA,gBAAgB,GAAG,iBAAiB,CAAA;AAI1C,eAAeC,cAAcA,CAACC,IAAY,EAAuB;EAC/D,IAAI;IACF,MAAMC,GAAG,GAAG,MAAMC,WAAQ,CAACF,IAAI,EAAE,OAAO,CAAC,CAAA;AACzC,IAAA,OAAOG,IAAI,CAACC,KAAK,CAACH,GAAG,CAAC,CAAA;AACxB,GAAC,CAAC,MAAM;AACN,IAAA,OAAO,EAAE,CAAA;AACX,GAAA;AACF,CAAA;AAEA,eAAeI,WAAWA,CAACC,QAAkB,EAAEC,IAAY,EAAmB;EAC5E,MAAMC,UAAU,GAAG,MAAMT,cAAc,CAACU,SAAI,CAACF,IAAI,EAAET,gBAAgB,CAAC,CAAC,CAAA;EACrE,OAAOY,mBAAY,CAACN,KAAK,CAAC;AACxB,IAAA,GAAGI,UAAU;IACb,GAAGF,QAAAA;AACL,GAAC,CAAC,CAAA;AACJ,CAAA;AAEO,SAASK,kBAAkBA,CAACC,YAAwB,GAAG,EAAE,EAAU;AACxE,EAAA,IAAIC,IAAY,CAAA;AAChB,EAAA,IAAIC,UAAkB,CAAA;AAEtB,EAAA,MAAMC,QAAQ,GAAG,YAAY;IAC3B,IAAI;MACF,MAAMC,mBAAS,CAACF,UAAU,CAAC,CAAA;KAC5B,CAAC,OAAOG,GAAG,EAAE;AACZC,MAAAA,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC,CAAA;MAClBC,OAAO,CAACE,IAAI,EAAE,CAAA;AAChB,KAAA;GACD,CAAA;EAED,OAAO;AACLC,IAAAA,IAAI,EAAE,6BAA6B;IACnCC,cAAc,EAAE,MAAOC,IAAI,IAAK;MAC9BV,IAAI,GAAGU,IAAI,CAAChB,IAAI,CAAA;AAChBO,MAAAA,UAAU,GAAG,MAAMT,WAAW,CAACO,YAAY,EAAEC,IAAI,CAAC,CAAA;MAClD,MAAME,QAAQ,EAAE,CAAA;KACjB;IACDS,eAAe,EAAE,OAAO;AAAEC,MAAAA,IAAAA;AAAK,KAAC,KAAK;MACnC,IAAIA,IAAI,KAAKhB,SAAI,CAACI,IAAI,EAAEf,gBAAgB,CAAC,EAAE;AACzCgB,QAAAA,UAAU,GAAG,MAAMT,WAAW,CAACO,YAAY,EAAEC,IAAI,CAAC,CAAA;AAClD,QAAA,OAAA;AACF,OAAA;AACA,MAAA,IAAIY,IAAI,CAACC,UAAU,CAACjB,SAAI,CAACI,IAAI,EAAEC,UAAU,CAACa,eAAe,CAAC,CAAC,EAAE;QAC3D,MAAMZ,QAAQ,EAAE,CAAA;AAClB,OAAA;AACF,KAAA;GACD,CAAA;AACH;;;;"}