polen 0.8.0-next.8 → 0.8.0

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 (572) hide show
  1. package/README.md +25 -0
  2. package/build/api/api.d.ts +3 -3
  3. package/build/api/api.js +3 -3
  4. package/build/api/builder/builder.d.ts +1 -1
  5. package/build/api/builder/builder.d.ts.map +1 -1
  6. package/build/api/builder/builder.js +12 -4
  7. package/build/api/builder/builder.js.map +1 -1
  8. package/build/api/builder/index.d.ts +1 -1
  9. package/build/api/builder/index.js +1 -1
  10. package/build/api/config/config.d.ts +4 -4
  11. package/build/api/config/config.js +4 -4
  12. package/build/api/config/configurator.d.ts +21 -4
  13. package/build/api/config/configurator.d.ts.map +1 -1
  14. package/build/api/config/configurator.js +6 -2
  15. package/build/api/config/configurator.js.map +1 -1
  16. package/build/api/config/define.d.ts +1 -1
  17. package/build/api/config/index.d.ts +1 -1
  18. package/build/api/config/index.js +1 -1
  19. package/build/api/config/load.d.ts +1 -1
  20. package/build/api/config/load.d.ts.map +1 -1
  21. package/build/api/config/load.js +71 -19
  22. package/build/api/config/load.js.map +1 -1
  23. package/build/api/config/merge.d.ts +1 -1
  24. package/build/api/config/merge.js +1 -1
  25. package/build/api/config/merge.js.map +1 -1
  26. package/build/api/config-resolver/config-resolver.d.ts +2 -2
  27. package/build/api/config-resolver/config-resolver.js +2 -2
  28. package/build/api/config-resolver/index.d.ts +1 -1
  29. package/build/api/config-resolver/index.js +1 -1
  30. package/build/api/config-resolver/resolve.d.ts +3 -3
  31. package/build/api/config-resolver/resolve.d.ts.map +1 -1
  32. package/build/api/config-resolver/resolve.js +8 -5
  33. package/build/api/config-resolver/resolve.js.map +1 -1
  34. package/build/api/config-resolver/vite.d.ts +2 -2
  35. package/build/api/config-resolver/vite.d.ts.map +1 -1
  36. package/build/api/config-resolver/vite.js +2 -2
  37. package/build/api/config-resolver/vite.js.map +1 -1
  38. package/build/api/index.d.ts +1 -1
  39. package/build/api/index.js +1 -1
  40. package/build/api/schema/data-sources/data-sources.d.ts +3 -3
  41. package/build/api/schema/data-sources/data-sources.js +3 -3
  42. package/build/api/schema/data-sources/index.d.ts +1 -1
  43. package/build/api/schema/data-sources/index.js +1 -1
  44. package/build/api/schema/data-sources/memory/memory.d.ts +1 -1
  45. package/build/api/schema/data-sources/memory/memory.js +2 -2
  46. package/build/api/schema/data-sources/memory/memory.js.map +1 -1
  47. package/build/api/schema/data-sources/schema-directory/file-name-expression/index.d.ts +1 -1
  48. package/build/api/schema/data-sources/schema-directory/file-name-expression/index.js +1 -1
  49. package/build/api/schema/data-sources/schema-directory/schema-directory.d.ts +1 -1
  50. package/build/api/schema/data-sources/schema-directory/schema-directory.js +5 -5
  51. package/build/api/schema/data-sources/schema-directory/schema-directory.js.map +1 -1
  52. package/build/api/schema/data-sources/schema-file/schema-file.d.ts +1 -1
  53. package/build/api/schema/data-sources/schema-file/schema-file.js +2 -2
  54. package/build/api/schema/data-sources/schema-file/schema-file.js.map +1 -1
  55. package/build/api/schema/index.d.ts +1 -1
  56. package/build/api/schema/index.js +1 -1
  57. package/build/api/schema/read.d.ts +2 -2
  58. package/build/api/schema/read.js +1 -1
  59. package/build/api/schema/schema.d.ts +3 -3
  60. package/build/api/schema/schema.d.ts.map +1 -1
  61. package/build/api/schema/schema.js +2 -2
  62. package/build/api/schema-augmentation/augmentations/description.d.ts +2 -2
  63. package/build/api/schema-augmentation/augmentations/description.d.ts.map +1 -1
  64. package/build/api/schema-augmentation/augmentations/description.js +1 -1
  65. package/build/api/schema-augmentation/index.d.ts +1 -1
  66. package/build/api/schema-augmentation/index.js +1 -1
  67. package/build/api/schema-augmentation/schema-augmentation.d.ts +2 -2
  68. package/build/api/schema-augmentation/schema-augmentation.d.ts.map +1 -1
  69. package/build/api/schema-augmentation/schema-augmentation.js +1 -1
  70. package/build/api/schema-augmentation/target.d.ts +1 -1
  71. package/build/api/schema-augmentation/target.d.ts.map +1 -1
  72. package/build/api/schema-augmentation/target.js +1 -1
  73. package/build/api/schema-augmentation/target.js.map +1 -1
  74. package/build/api/singletons/markdown/index.d.ts +1 -1
  75. package/build/api/singletons/markdown/index.js +1 -1
  76. package/build/api/vite/log-filters.d.ts +1 -1
  77. package/build/api/vite/log-filters.d.ts.map +1 -1
  78. package/build/api/vite/log-filters.js +1 -1
  79. package/build/api/vite/log-filters.js.map +1 -1
  80. package/build/api/vite/logger.d.ts +1 -1
  81. package/build/api/vite/logger.d.ts.map +1 -1
  82. package/build/api/vite/logger.js +21 -7
  83. package/build/api/vite/logger.js.map +1 -1
  84. package/build/api/vite/plugins/build.d.ts +2 -2
  85. package/build/api/vite/plugins/build.d.ts.map +1 -1
  86. package/build/api/vite/plugins/build.js +14 -6
  87. package/build/api/vite/plugins/build.js.map +1 -1
  88. package/build/api/vite/plugins/core.d.ts +3 -3
  89. package/build/api/vite/plugins/core.d.ts.map +1 -1
  90. package/build/api/vite/plugins/core.js +155 -203
  91. package/build/api/vite/plugins/core.js.map +1 -1
  92. package/build/api/vite/plugins/main.d.ts +2 -2
  93. package/build/api/vite/plugins/main.d.ts.map +1 -1
  94. package/build/api/vite/plugins/main.js +22 -21
  95. package/build/api/vite/plugins/main.js.map +1 -1
  96. package/build/api/vite/plugins/pages-tree.d.ts +16 -0
  97. package/build/api/vite/plugins/pages-tree.d.ts.map +1 -0
  98. package/build/api/vite/plugins/pages-tree.js +152 -0
  99. package/build/api/vite/plugins/pages-tree.js.map +1 -0
  100. package/build/api/vite/plugins/serve.d.ts +2 -2
  101. package/build/api/vite/plugins/serve.d.ts.map +1 -1
  102. package/build/api/vite/plugins/serve.js +41 -26
  103. package/build/api/vite/plugins/serve.js.map +1 -1
  104. package/build/api/vite/vi.d.ts +2 -2
  105. package/build/api/vite/vi.d.ts.map +1 -1
  106. package/build/api/vite/vi.js +2 -2
  107. package/build/api/vite/vi.js.map +1 -1
  108. package/build/cli/_/self-contained-mode.d.ts +16 -0
  109. package/build/cli/_/self-contained-mode.d.ts.map +1 -0
  110. package/build/cli/_/self-contained-mode.js +58 -0
  111. package/build/cli/_/self-contained-mode.js.map +1 -0
  112. package/build/cli/commands/build.js +2 -2
  113. package/build/cli/commands/build.js.map +1 -1
  114. package/build/cli/commands/dev.js +3 -4
  115. package/build/cli/commands/dev.js.map +1 -1
  116. package/build/cli/commands/open.js +4 -4
  117. package/build/cli/commands/open.js.map +1 -1
  118. package/build/cli/index.js +1 -1
  119. package/build/dep/graphql-inspector/index.d.ts +1 -1
  120. package/build/dep/graphql-inspector/index.js +1 -1
  121. package/build/dep/hono/hono.d.ts +1 -1
  122. package/build/dep/hono/hono.js +1 -1
  123. package/build/dep/hono/index.d.ts +1 -1
  124. package/build/dep/hono/index.js +1 -1
  125. package/build/dep/superjson/index.d.ts +1 -1
  126. package/build/dep/superjson/index.js +1 -1
  127. package/build/dep/tiny-globby/index.d.ts +1 -1
  128. package/build/dep/tiny-globby/index.js +1 -1
  129. package/build/dep/vite/index.d.ts +1 -1
  130. package/build/dep/vite/index.js +1 -1
  131. package/build/exports/index.d.ts +1 -1
  132. package/build/exports/index.js +1 -1
  133. package/build/exports/polen.d.ts +3 -3
  134. package/build/exports/polen.d.ts.map +1 -1
  135. package/build/exports/polen.js +3 -3
  136. package/build/exports/polen.js.map +1 -1
  137. package/build/lib/apple-touch-icon/index.d.ts +1 -1
  138. package/build/lib/apple-touch-icon/index.js +1 -1
  139. package/build/lib/debug/debug.d.ts +3 -3
  140. package/build/lib/debug/debug.d.ts.map +1 -1
  141. package/build/lib/debug/debug.js +39 -10
  142. package/build/lib/debug/debug.js.map +1 -1
  143. package/build/lib/debug/environment-variable.d.ts +2 -1
  144. package/build/lib/debug/environment-variable.d.ts.map +1 -1
  145. package/build/lib/debug/environment-variable.js +27 -7
  146. package/build/lib/debug/environment-variable.js.map +1 -1
  147. package/build/lib/debug/index.d.ts +1 -1
  148. package/build/lib/debug/index.js +1 -1
  149. package/build/lib/errors/ContextualAggregateError.d.ts +1 -1
  150. package/build/lib/errors/ContextualAggregateError.js +1 -1
  151. package/build/lib/errors/ContextualError.d.ts +1 -1
  152. package/build/lib/errors/ErrorInternal.d.ts +2 -2
  153. package/build/lib/errors/ErrorInternal.js +1 -1
  154. package/build/lib/errors/errors.d.ts +4 -4
  155. package/build/lib/errors/errors.js +4 -4
  156. package/build/lib/errors/index.d.ts +1 -1
  157. package/build/lib/errors/index.js +1 -1
  158. package/build/lib/errors/types.d.ts +1 -1
  159. package/build/lib/favicon/index.d.ts +1 -1
  160. package/build/lib/favicon/index.js +1 -1
  161. package/build/lib/file-router/diagnostic-reporter.d.ts +3 -0
  162. package/build/lib/file-router/diagnostic-reporter.d.ts.map +1 -0
  163. package/build/lib/file-router/diagnostic-reporter.js +18 -0
  164. package/build/lib/file-router/diagnostic-reporter.js.map +1 -0
  165. package/build/lib/file-router/file-router.d.ts +5 -3
  166. package/build/lib/file-router/file-router.d.ts.map +1 -1
  167. package/build/lib/file-router/file-router.js +5 -3
  168. package/build/lib/file-router/file-router.js.map +1 -1
  169. package/build/lib/file-router/index.d.ts +1 -1
  170. package/build/lib/file-router/index.js +1 -1
  171. package/build/lib/file-router/linter.d.ts +25 -2
  172. package/build/lib/file-router/linter.d.ts.map +1 -1
  173. package/build/lib/file-router/linter.js +46 -5
  174. package/build/lib/file-router/linter.js.map +1 -1
  175. package/build/lib/file-router/route.d.ts +1 -0
  176. package/build/lib/file-router/route.d.ts.map +1 -1
  177. package/build/lib/file-router/route.js +1 -1
  178. package/build/lib/file-router/route.js.map +1 -1
  179. package/build/lib/file-router/scan-tree.d.ts +20 -0
  180. package/build/lib/file-router/scan-tree.d.ts.map +1 -0
  181. package/build/lib/file-router/scan-tree.js +158 -0
  182. package/build/lib/file-router/scan-tree.js.map +1 -0
  183. package/build/lib/file-router/scan.d.ts +2 -2
  184. package/build/lib/file-router/scan.d.ts.map +1 -1
  185. package/build/lib/file-router/scan.js +26 -10
  186. package/build/lib/file-router/scan.js.map +1 -1
  187. package/build/lib/file-router/sidebar/index.d.ts +3 -0
  188. package/build/lib/file-router/sidebar/index.d.ts.map +1 -0
  189. package/build/lib/file-router/sidebar/index.js +4 -0
  190. package/build/lib/file-router/sidebar/index.js.map +1 -0
  191. package/build/lib/file-router/sidebar/sidebar-tree.d.ts +9 -0
  192. package/build/lib/file-router/sidebar/sidebar-tree.d.ts.map +1 -0
  193. package/build/lib/file-router/sidebar/sidebar-tree.js +85 -0
  194. package/build/lib/file-router/sidebar/sidebar-tree.js.map +1 -0
  195. package/build/lib/file-router/sidebar/types.d.ts +17 -0
  196. package/build/lib/file-router/sidebar/types.d.ts.map +1 -0
  197. package/build/lib/file-router/sidebar/types.js +2 -0
  198. package/build/lib/file-router/sidebar/types.js.map +1 -0
  199. package/build/lib/grafaid/_Nodes.d.ts +1 -1
  200. package/build/lib/grafaid/_Nodes.js +1 -1
  201. package/build/lib/grafaid/document/OperationTypeNode.d.ts +1 -1
  202. package/build/lib/grafaid/document/OperationTypeNode.js +1 -1
  203. package/build/lib/grafaid/document/kind.d.ts +1 -1
  204. package/build/lib/grafaid/document/kind.js +1 -1
  205. package/build/lib/grafaid/document.d.ts +4 -4
  206. package/build/lib/grafaid/document.js +6 -6
  207. package/build/lib/grafaid/grafaid.d.ts +4 -4
  208. package/build/lib/grafaid/grafaid.js +4 -4
  209. package/build/lib/grafaid/graphql.d.ts +2 -2
  210. package/build/lib/grafaid/graphql.js +2 -2
  211. package/build/lib/grafaid/http/__.d.ts +1 -1
  212. package/build/lib/grafaid/http/__.js +1 -1
  213. package/build/lib/grafaid/http/http.js +1 -1
  214. package/build/lib/grafaid/index.d.ts +1 -1
  215. package/build/lib/grafaid/index.js +1 -1
  216. package/build/lib/grafaid/schema/KindMap/_.d.ts +3 -3
  217. package/build/lib/grafaid/schema/KindMap/_.js +4 -4
  218. package/build/lib/grafaid/schema/KindMap/__.d.ts +2 -2
  219. package/build/lib/grafaid/schema/KindMap/__.js +1 -1
  220. package/build/lib/grafaid/schema/OperationType/__.d.ts +2 -2
  221. package/build/lib/grafaid/schema/OperationType/__.js +1 -1
  222. package/build/lib/grafaid/schema/RootDetails.d.ts +3 -3
  223. package/build/lib/grafaid/schema/RootDetails.js +2 -2
  224. package/build/lib/grafaid/schema/RootTypeMap.d.ts +2 -2
  225. package/build/lib/grafaid/schema/RootTypeMap.js +2 -2
  226. package/build/lib/grafaid/schema/nodes-like.d.ts +1 -1
  227. package/build/lib/grafaid/schema/nodes-like.js +1 -1
  228. package/build/lib/grafaid/schema/schema.d.ts +14 -14
  229. package/build/lib/grafaid/schema/schema.js +15 -15
  230. package/build/lib/grafaid/schema/type-kind-name.d.ts +1 -1
  231. package/build/lib/grafaid/schema/type-kind-name.js +1 -1
  232. package/build/lib/grafaid/schema/type.d.ts +1 -1
  233. package/build/lib/grafaid/schema/typeGuards.js +1 -1
  234. package/build/lib/grafaid-old/grafaid.d.ts +1 -1
  235. package/build/lib/grafaid-old/grafaid.js +1 -1
  236. package/build/lib/grafaid-old/index.d.ts +1 -1
  237. package/build/lib/grafaid-old/index.js +1 -1
  238. package/build/lib/graphql-change/graphql-change.d.ts +2 -2
  239. package/build/lib/graphql-change/graphql-change.d.ts.map +1 -1
  240. package/build/lib/graphql-change/graphql-change.js +1 -1
  241. package/build/lib/graphql-change/graphql-change.js.map +1 -1
  242. package/build/lib/graphql-change/index.d.ts +1 -1
  243. package/build/lib/graphql-change/index.js +1 -1
  244. package/build/lib/graphql-changeset/graphql-changeset.d.ts +2 -2
  245. package/build/lib/graphql-changeset/graphql-changeset.d.ts.map +1 -1
  246. package/build/lib/graphql-changeset/index.d.ts +1 -1
  247. package/build/lib/graphql-changeset/index.js +1 -1
  248. package/build/lib/graphql-schema-loader/graphql-schema-loader.d.ts +1 -1
  249. package/build/lib/graphql-schema-loader/graphql-schema-loader.d.ts.map +1 -1
  250. package/build/lib/graphql-schema-loader/graphql-schema-loader.js +1 -1
  251. package/build/lib/graphql-schema-loader/graphql-schema-loader.js.map +1 -1
  252. package/build/lib/graphql-schema-loader/index.d.ts +1 -1
  253. package/build/lib/graphql-schema-loader/index.js +1 -1
  254. package/build/lib/hono-aid/hono-aid.d.ts +1 -1
  255. package/build/lib/hono-aid/hono-aid.d.ts.map +1 -1
  256. package/build/lib/hono-aid/index.d.ts +1 -1
  257. package/build/lib/hono-aid/index.js +1 -1
  258. package/build/lib/kit-temp.d.ts +6 -0
  259. package/build/lib/kit-temp.d.ts.map +1 -1
  260. package/build/lib/kit-temp.js +3 -0
  261. package/build/lib/kit-temp.js.map +1 -1
  262. package/build/lib/react-router-aid/get-paths-patterns.d.ts +1 -1
  263. package/build/lib/react-router-aid/get-paths-patterns.d.ts.map +1 -1
  264. package/build/lib/react-router-aid/index.d.ts +1 -1
  265. package/build/lib/react-router-aid/index.js +1 -1
  266. package/build/lib/react-router-aid/react-router-aid.d.ts +2 -2
  267. package/build/lib/react-router-aid/react-router-aid.d.ts.map +1 -1
  268. package/build/lib/react-router-aid/react-router-aid.js +1 -1
  269. package/build/lib/react-router-loader/react-router-loader.js +1 -1
  270. package/build/lib/stack-processor/index.d.ts +1 -1
  271. package/build/lib/stack-processor/index.js +1 -1
  272. package/build/lib/superjson-codec/codec.d.ts +1 -1
  273. package/build/lib/superjson-codec/codec.d.ts.map +1 -1
  274. package/build/lib/superjson-codec/codecs/graphql-schema.d.ts +2 -2
  275. package/build/lib/superjson-codec/codecs/graphql-schema.d.ts.map +1 -1
  276. package/build/lib/superjson-codec/codecs/graphql-schema.js +2 -2
  277. package/build/lib/superjson-codec/codecs/graphql-schema.js.map +1 -1
  278. package/build/lib/superjson-codec/exports.d.ts +2 -2
  279. package/build/lib/superjson-codec/exports.js +2 -2
  280. package/build/lib/superjson-codec/index.d.ts +1 -1
  281. package/build/lib/superjson-codec/index.js +1 -1
  282. package/build/lib/tree/index.d.ts +3 -0
  283. package/build/lib/tree/index.d.ts.map +1 -0
  284. package/build/lib/tree/index.js +2 -0
  285. package/build/lib/tree/index.js.map +1 -0
  286. package/build/lib/tree/tree.d.ts +62 -0
  287. package/build/lib/tree/tree.d.ts.map +1 -0
  288. package/build/lib/tree/tree.js +134 -0
  289. package/build/lib/tree/tree.js.map +1 -0
  290. package/build/lib/vite-plugin-config/vite-plugin-config.d.ts +1 -1
  291. package/build/lib/vite-plugin-config/vite-plugin-config.d.ts.map +1 -1
  292. package/build/lib/vite-plugin-mdx/index.d.ts +2 -0
  293. package/build/lib/vite-plugin-mdx/index.d.ts.map +1 -0
  294. package/build/lib/vite-plugin-mdx/index.js +2 -0
  295. package/build/lib/vite-plugin-mdx/index.js.map +1 -0
  296. package/build/lib/vite-plugin-mdx/vite-plugin-mdx.d.ts +24 -0
  297. package/build/lib/vite-plugin-mdx/vite-plugin-mdx.d.ts.map +1 -0
  298. package/build/lib/vite-plugin-mdx/vite-plugin-mdx.js +58 -0
  299. package/build/lib/vite-plugin-mdx/vite-plugin-mdx.js.map +1 -0
  300. package/build/lib/vite-plugins/index.d.ts +1 -1
  301. package/build/lib/vite-plugins/index.js +1 -1
  302. package/build/lib/vite-plugins/vite-plugins.d.ts +1 -2
  303. package/build/lib/vite-plugins/vite-plugins.d.ts.map +1 -1
  304. package/build/lib/vite-plugins/vite-plugins.js +1 -2
  305. package/build/lib/vite-plugins/vite-plugins.js.map +1 -1
  306. package/build/lib/vite-virtual/debug.d.ts +3 -0
  307. package/build/lib/vite-virtual/debug.d.ts.map +1 -0
  308. package/build/lib/vite-virtual/debug.js +3 -0
  309. package/build/lib/vite-virtual/debug.js.map +1 -0
  310. package/build/lib/vite-virtual/hooks.d.ts +1 -1
  311. package/build/lib/vite-virtual/hooks.d.ts.map +1 -1
  312. package/build/lib/vite-virtual/identified-loader.d.ts +3 -3
  313. package/build/lib/vite-virtual/identified-loader.d.ts.map +1 -1
  314. package/build/lib/vite-virtual/identified-loader.js +6 -2
  315. package/build/lib/vite-virtual/identified-loader.js.map +1 -1
  316. package/build/lib/vite-virtual/identifier.js +1 -1
  317. package/build/lib/vite-virtual/index.d.ts +1 -1
  318. package/build/lib/vite-virtual/index.js +1 -1
  319. package/build/lib/vite-virtual/vite-virtual.d.ts +3 -3
  320. package/build/lib/vite-virtual/vite-virtual.js +3 -3
  321. package/build/package-paths.d.ts +7 -0
  322. package/build/package-paths.d.ts.map +1 -1
  323. package/build/package-paths.js +12 -1
  324. package/build/package-paths.js.map +1 -1
  325. package/build/project-data.d.ts +4 -20
  326. package/build/project-data.d.ts.map +1 -1
  327. package/build/singletons/debug.d.ts +3 -0
  328. package/build/singletons/debug.d.ts.map +1 -0
  329. package/build/singletons/debug.js +3 -0
  330. package/build/singletons/debug.js.map +1 -0
  331. package/build/singletons/superjson.d.ts +1 -1
  332. package/build/singletons/superjson.d.ts.map +1 -1
  333. package/build/singletons/superjson.js +2 -2
  334. package/build/singletons/superjson.js.map +1 -1
  335. package/build/template/components/ArgumentListAnnotation.jsx +1 -1
  336. package/build/template/components/ArgumentListAnnotation.jsx.map +1 -1
  337. package/build/template/components/Changelog.d.ts +1 -1
  338. package/build/template/components/Changelog.jsx +2 -2
  339. package/build/template/components/Changelog.jsx.map +1 -1
  340. package/build/template/components/DeprecationReason.d.ts +1 -1
  341. package/build/template/components/DeprecationReason.d.ts.map +1 -1
  342. package/build/template/components/Description.d.ts +1 -1
  343. package/build/template/components/Description.d.ts.map +1 -1
  344. package/build/template/components/Field.d.ts +1 -1
  345. package/build/template/components/Field.d.ts.map +1 -1
  346. package/build/template/components/Field.jsx +1 -1
  347. package/build/template/components/Field.jsx.map +1 -1
  348. package/build/template/components/FieldList.d.ts +1 -1
  349. package/build/template/components/FieldList.d.ts.map +1 -1
  350. package/build/template/components/FieldList.jsx +1 -1
  351. package/build/template/components/FieldList.jsx.map +1 -1
  352. package/build/template/components/FieldListSection.jsx +1 -1
  353. package/build/template/components/FieldListSection.jsx.map +1 -1
  354. package/build/template/components/Markdown.jsx +1 -1
  355. package/build/template/components/Markdown.jsx.map +1 -1
  356. package/build/template/components/Sidebar.d.ts +2 -2
  357. package/build/template/components/Sidebar.d.ts.map +1 -1
  358. package/build/template/components/Sidebar.jsx +2 -2
  359. package/build/template/components/Sidebar.jsx.map +1 -1
  360. package/build/template/components/TypeIndex.jsx +1 -1
  361. package/build/template/components/TypeIndex.jsx.map +1 -1
  362. package/build/template/components/graphql/type-kind-icon.d.ts +2 -2
  363. package/build/template/components/graphql/type-kind-icon.d.ts.map +1 -1
  364. package/build/template/components/graphql/type-kind-icon.jsx +1 -1
  365. package/build/template/components/graphql/type-link.d.ts +1 -1
  366. package/build/template/components/graphql/type-link.d.ts.map +1 -1
  367. package/build/template/components/graphql/type-link.jsx +2 -2
  368. package/build/template/components/graphql/type-link.jsx.map +1 -1
  369. package/build/template/entry.client.jsx +1 -1
  370. package/build/template/entry.client.jsx.map +1 -1
  371. package/build/template/routes/changelog.d.ts +1 -1
  372. package/build/template/routes/changelog.jsx +2 -2
  373. package/build/template/routes/changelog.jsx.map +1 -1
  374. package/build/template/routes/index.d.ts +1 -1
  375. package/build/template/routes/index.d.ts.map +1 -1
  376. package/build/template/routes/index.jsx +1 -1
  377. package/build/template/routes/index.jsx.map +1 -1
  378. package/build/template/routes/reference.$type.$field.jsx +3 -3
  379. package/build/template/routes/reference.$type.$field.jsx.map +1 -1
  380. package/build/template/routes/reference.$type.jsx +2 -2
  381. package/build/template/routes/reference.$type.jsx.map +1 -1
  382. package/build/template/routes/reference.jsx +2 -2
  383. package/build/template/routes/reference.jsx.map +1 -1
  384. package/build/template/routes/root.d.ts +1 -1
  385. package/build/template/routes/root.d.ts.map +1 -1
  386. package/build/template/routes/root.jsx +3 -3
  387. package/build/template/routes/root.jsx.map +1 -1
  388. package/build/template/server/app.d.ts +1 -1
  389. package/build/template/server/app.d.ts.map +1 -1
  390. package/build/template/server/app.js +5 -4
  391. package/build/template/server/app.js.map +1 -1
  392. package/build/template/server/main.js +3 -3
  393. package/build/template/server/manifest.d.ts +1 -1
  394. package/build/template/server/manifest.d.ts.map +1 -1
  395. package/build/template/server/render-page.d.ts +1 -1
  396. package/build/template/server/render-page.d.ts.map +1 -1
  397. package/build/template/server/render-page.jsx +3 -3
  398. package/build/template/server/render-page.jsx.map +1 -1
  399. package/build/template/server/ssg/generate.d.ts +1 -1
  400. package/build/template/server/ssg/generate.d.ts.map +1 -1
  401. package/build/template/server/ssg/generate.js +3 -3
  402. package/build/template/server/ssg/generate.js.map +1 -1
  403. package/build/template/server/ssg/get-route-paths.js +2 -2
  404. package/build/template/server/ssg/get-route-paths.js.map +1 -1
  405. package/package.json +77 -56
  406. package/src/api/api.ts +3 -3
  407. package/src/api/builder/builder.ts +3 -3
  408. package/src/api/builder/index.ts +1 -1
  409. package/src/api/config/config.ts +4 -4
  410. package/src/api/config/configurator.ts +27 -5
  411. package/src/api/config/define.ts +1 -1
  412. package/src/api/config/index.ts +1 -1
  413. package/src/api/config/load.ts +74 -23
  414. package/src/api/config/merge.ts +2 -2
  415. package/src/api/config-resolver/config-resolver.ts +2 -2
  416. package/src/api/config-resolver/index.ts +1 -1
  417. package/src/api/config-resolver/resolve.ts +8 -5
  418. package/src/api/config-resolver/vite.ts +3 -3
  419. package/src/api/index.ts +1 -1
  420. package/src/api/schema/data-sources/data-sources.ts +3 -3
  421. package/src/api/schema/data-sources/index.ts +1 -1
  422. package/src/api/schema/data-sources/memory/memory.ts +4 -4
  423. package/src/api/schema/data-sources/schema-directory/file-name-expression/index.ts +1 -1
  424. package/src/api/schema/data-sources/schema-directory/schema-directory.ts +7 -7
  425. package/src/api/schema/data-sources/schema-file/schema-file.ts +4 -4
  426. package/src/api/schema/index.ts +1 -1
  427. package/src/api/schema/read.ts +2 -2
  428. package/src/api/schema/schema.ts +3 -3
  429. package/src/api/schema-augmentation/augmentations/description.ts +3 -3
  430. package/src/api/schema-augmentation/index.ts +1 -1
  431. package/src/api/schema-augmentation/schema-augmentation.ts +2 -2
  432. package/src/api/schema-augmentation/target.ts +1 -1
  433. package/src/api/singletons/markdown/index.ts +1 -1
  434. package/src/api/vite/log-filters.ts +1 -1
  435. package/src/api/vite/logger.ts +23 -7
  436. package/src/api/vite/plugins/build.ts +6 -6
  437. package/src/api/vite/plugins/core.ts +172 -240
  438. package/src/api/vite/plugins/main.ts +24 -23
  439. package/src/api/vite/plugins/pages-tree.ts +186 -0
  440. package/src/api/vite/plugins/serve.ts +52 -29
  441. package/src/api/vite/vi.ts +2 -2
  442. package/src/cli/_/self-contained-mode.ts +85 -0
  443. package/src/cli/commands/build.ts +2 -2
  444. package/src/cli/commands/dev.ts +3 -4
  445. package/src/cli/commands/open.ts +4 -4
  446. package/src/cli/index.ts +1 -1
  447. package/src/dep/graphql-inspector/index.ts +1 -1
  448. package/src/dep/hono/hono.ts +1 -1
  449. package/src/dep/hono/index.ts +1 -1
  450. package/src/dep/superjson/index.ts +1 -1
  451. package/src/dep/tiny-globby/index.ts +1 -1
  452. package/src/dep/vite/index.ts +1 -1
  453. package/src/exports/index.ts +1 -1
  454. package/src/exports/polen.ts +3 -3
  455. package/src/lib/apple-touch-icon/index.ts +1 -1
  456. package/src/lib/debug/debug.ts +45 -18
  457. package/src/lib/debug/environment-variable.ts +28 -7
  458. package/src/lib/debug/index.ts +1 -1
  459. package/src/lib/errors/ContextualAggregateError.ts +1 -1
  460. package/src/lib/errors/ContextualError.ts +1 -1
  461. package/src/lib/errors/ErrorInternal.ts +2 -2
  462. package/src/lib/errors/errors.ts +4 -4
  463. package/src/lib/errors/index.ts +1 -1
  464. package/src/lib/errors/types.ts +1 -1
  465. package/src/lib/favicon/index.ts +1 -1
  466. package/src/lib/file-router/diagnostic-reporter.ts +22 -0
  467. package/src/lib/file-router/file-router.ts +5 -3
  468. package/src/lib/file-router/index.test.ts +2 -2
  469. package/src/lib/file-router/index.ts +1 -1
  470. package/src/lib/file-router/linter.test.ts +115 -0
  471. package/src/lib/file-router/linter.ts +80 -6
  472. package/src/lib/file-router/route.ts +2 -1
  473. package/src/lib/file-router/scan-tree.test.ts +189 -0
  474. package/src/lib/file-router/scan-tree.ts +205 -0
  475. package/src/lib/file-router/scan.ts +27 -12
  476. package/src/lib/file-router/sidebar/index.ts +3 -0
  477. package/src/lib/file-router/sidebar/sidebar-tree.test.ts +123 -0
  478. package/src/lib/file-router/sidebar/sidebar-tree.ts +110 -0
  479. package/src/lib/file-router/sidebar/types.ts +19 -0
  480. package/src/lib/grafaid/_Nodes.ts +1 -1
  481. package/src/lib/grafaid/document/OperationTypeNode.ts +1 -1
  482. package/src/lib/grafaid/document/kind.ts +1 -1
  483. package/src/lib/grafaid/document.ts +6 -6
  484. package/src/lib/grafaid/grafaid.ts +4 -4
  485. package/src/lib/grafaid/graphql.ts +3 -3
  486. package/src/lib/grafaid/http/__.ts +1 -1
  487. package/src/lib/grafaid/http/http.ts +1 -1
  488. package/src/lib/grafaid/index.ts +1 -1
  489. package/src/lib/grafaid/schema/KindMap/_.ts +6 -6
  490. package/src/lib/grafaid/schema/KindMap/__.ts +2 -2
  491. package/src/lib/grafaid/schema/OperationType/__.ts +2 -2
  492. package/src/lib/grafaid/schema/RootDetails.ts +3 -3
  493. package/src/lib/grafaid/schema/RootTypeMap.ts +2 -2
  494. package/src/lib/grafaid/schema/nodes-like.ts +2 -2
  495. package/src/lib/grafaid/schema/schema.ts +15 -15
  496. package/src/lib/grafaid/schema/type-kind-name.ts +1 -1
  497. package/src/lib/grafaid/schema/type.ts +1 -1
  498. package/src/lib/grafaid/schema/typeGuards.ts +1 -1
  499. package/src/lib/grafaid-old/grafaid.ts +1 -1
  500. package/src/lib/grafaid-old/index.ts +1 -1
  501. package/src/lib/graphql-change/graphql-change.ts +2 -2
  502. package/src/lib/graphql-change/index.ts +1 -1
  503. package/src/lib/graphql-changeset/graphql-changeset.ts +2 -2
  504. package/src/lib/graphql-changeset/index.ts +1 -1
  505. package/src/lib/graphql-schema-loader/graphql-schema-loader.ts +1 -1
  506. package/src/lib/graphql-schema-loader/index.ts +1 -1
  507. package/src/lib/hono-aid/hono-aid.ts +1 -1
  508. package/src/lib/hono-aid/index.ts +1 -1
  509. package/src/lib/kit-temp.ts +10 -0
  510. package/src/lib/react-router-aid/get-paths-patterns.ts +1 -1
  511. package/src/lib/react-router-aid/index.ts +1 -1
  512. package/src/lib/react-router-aid/react-router-aid.ts +2 -2
  513. package/src/lib/react-router-loader/react-router-loader.ts +1 -1
  514. package/src/lib/stack-processor/index.ts +1 -1
  515. package/src/lib/superjson-codec/codec.ts +1 -1
  516. package/src/lib/superjson-codec/codecs/graphql-schema.ts +2 -2
  517. package/src/lib/superjson-codec/exports.ts +2 -2
  518. package/src/lib/superjson-codec/index.ts +1 -1
  519. package/src/lib/tree/index.ts +2 -0
  520. package/src/lib/tree/tree.test.ts +117 -0
  521. package/src/lib/tree/tree.ts +183 -0
  522. package/src/lib/vite-plugin-config/vite-plugin-config.ts +1 -1
  523. package/src/lib/vite-plugin-mdx/index.ts +1 -0
  524. package/src/lib/vite-plugin-mdx/vite-plugin-mdx.ts +91 -0
  525. package/src/lib/vite-plugins/index.ts +1 -1
  526. package/src/lib/vite-plugins/vite-plugins.ts +1 -2
  527. package/src/lib/vite-virtual/debug.ts +3 -0
  528. package/src/lib/vite-virtual/hooks.ts +1 -1
  529. package/src/lib/vite-virtual/identified-loader.ts +9 -5
  530. package/src/lib/vite-virtual/identifier.ts +1 -1
  531. package/src/lib/vite-virtual/index.ts +1 -1
  532. package/src/lib/vite-virtual/vite-virtual.ts +3 -3
  533. package/src/package-paths.ts +22 -1
  534. package/src/project-data.ts +4 -24
  535. package/src/singletons/debug.ts +3 -0
  536. package/src/singletons/superjson.ts +2 -2
  537. package/src/template/components/ArgumentListAnnotation.tsx +1 -1
  538. package/src/template/components/Changelog.tsx +6 -6
  539. package/src/template/components/DeprecationReason.tsx +1 -1
  540. package/src/template/components/Description.tsx +1 -1
  541. package/src/template/components/Field.tsx +1 -1
  542. package/src/template/components/FieldList.tsx +1 -1
  543. package/src/template/components/FieldListSection.tsx +1 -1
  544. package/src/template/components/Markdown.tsx +1 -1
  545. package/src/template/components/Sidebar.tsx +7 -6
  546. package/src/template/components/TypeIndex.tsx +1 -1
  547. package/src/template/components/graphql/type-kind-icon.tsx +3 -3
  548. package/src/template/components/graphql/type-kind-tokens.ts +1 -1
  549. package/src/template/components/graphql/type-link.tsx +2 -2
  550. package/src/template/entry.client.tsx +1 -1
  551. package/src/template/routes/changelog.tsx +2 -2
  552. package/src/template/routes/index.tsx +1 -1
  553. package/src/template/routes/reference.$type.$field.tsx +3 -3
  554. package/src/template/routes/reference.$type.tsx +2 -2
  555. package/src/template/routes/reference.tsx +2 -2
  556. package/src/template/routes/root.tsx +4 -5
  557. package/src/template/server/app.ts +6 -4
  558. package/src/template/server/main.ts +3 -3
  559. package/src/template/server/manifest.ts +1 -1
  560. package/src/template/server/render-page.tsx +5 -5
  561. package/src/template/server/ssg/generate.ts +4 -4
  562. package/src/template/server/ssg/get-route-paths.ts +2 -2
  563. package/build/lib/file-router/sidebar.d.ts +0 -2
  564. package/build/lib/file-router/sidebar.d.ts.map +0 -1
  565. package/build/lib/file-router/sidebar.js +0 -2
  566. package/build/lib/file-router/sidebar.js.map +0 -1
  567. package/build/lib/vite-plugins/output-logger.d.ts +0 -3
  568. package/build/lib/vite-plugins/output-logger.d.ts.map +0 -1
  569. package/build/lib/vite-plugins/output-logger.js +0 -13
  570. package/build/lib/vite-plugins/output-logger.js.map +0 -1
  571. package/src/lib/file-router/sidebar.ts +0 -0
  572. package/src/lib/vite-plugins/output-logger.ts +0 -14
@@ -0,0 +1,205 @@
1
+ import { TinyGlobby } from '#dep/tiny-globby/index'
2
+ import { Tree, type TreeNode } from '#lib/tree/index'
3
+ import { Path, Str } from '@wollybeard/kit'
4
+ import type { Diagnostic } from './linter.js'
5
+ import type { Route, RouteFile } from './route.js'
6
+
7
+ //
8
+ // Types
9
+ //
10
+
11
+ export type RouteTreeNodeType = 'directory' | 'file'
12
+
13
+ export interface RouteTreeNodeValue {
14
+ name: string
15
+ order?: number
16
+ type: RouteTreeNodeType
17
+ route?: Route // Only present for file nodes
18
+ }
19
+
20
+ export type RouteTreeNode = TreeNode<RouteTreeNodeValue>
21
+
22
+ export interface ScanTreeResult {
23
+ routeTree: RouteTreeNode
24
+ diagnostics: Diagnostic[]
25
+ }
26
+
27
+ //
28
+ // Constants
29
+ //
30
+
31
+ const conventions = {
32
+ index: {
33
+ name: `index`,
34
+ },
35
+ numberedPrefix: {
36
+ pattern: Str.pattern<{ groups: ['order', 'name'] }>(/^(?<order>\d+)[_-](?<name>.+)$/),
37
+ },
38
+ }
39
+
40
+ //
41
+ // Helpers
42
+ //
43
+
44
+ const parseSegment = (segment: string): { name: string; order?: number } => {
45
+ const match = Str.match(segment, conventions.numberedPrefix.pattern)
46
+ if (match) {
47
+ return {
48
+ name: match.groups.name,
49
+ order: parseInt(match.groups.order, 10),
50
+ }
51
+ }
52
+ return { name: segment }
53
+ }
54
+
55
+ const buildRouteTreeFromPaths = async (paths: string[], rootDir: string): Promise<RouteTreeNode> => {
56
+ // Root node (represents the pages directory itself)
57
+ const root = Tree.node<RouteTreeNodeValue>({
58
+ name: 'root',
59
+ type: 'directory',
60
+ })
61
+
62
+ // Process each file path
63
+ for (const filePath of paths) {
64
+ const relativePath = Path.relative(rootDir, filePath)
65
+
66
+ // Split the path into segments
67
+ const segments = relativePath.split(Path.sep).filter(s => s.length > 0)
68
+ if (segments.length === 0) continue // Skip root directory
69
+
70
+ // Navigate/create path in tree
71
+ let currentNode = root
72
+
73
+ for (let i = 0; i < segments.length; i++) {
74
+ const segment = segments[i]!
75
+ const isLast = i === segments.length - 1
76
+
77
+ // Parse segment for ordering
78
+ let segmentName = segment
79
+ // Strip extension for files
80
+ if (isLast && (segment.endsWith('.md') || segment.endsWith('.mdx'))) {
81
+ segmentName = segment.replace(/\.(md|mdx)$/, '')
82
+ }
83
+ const parsed = parseSegment(segmentName)
84
+
85
+ // Find existing child
86
+ const existingChildIndex = currentNode.children.findIndex(child => child.value.name === parsed.name)
87
+ let childNode = existingChildIndex >= 0 ? currentNode.children[existingChildIndex] : undefined
88
+
89
+ if (!childNode) {
90
+ // Create new node
91
+ if (isLast) {
92
+ // This is a file
93
+ const route = filePathToRoute(filePath, rootDir)
94
+ childNode = Tree.node<RouteTreeNodeValue>({
95
+ name: parsed.name,
96
+ order: parsed.order,
97
+ type: 'file',
98
+ route,
99
+ })
100
+ } else {
101
+ // This is a directory (implicit from file path)
102
+ childNode = Tree.node<RouteTreeNodeValue>({
103
+ name: parsed.name,
104
+ order: parsed.order,
105
+ type: 'directory',
106
+ })
107
+ }
108
+ currentNode.children.push(childNode)
109
+ } else if (isLast && childNode.value.type === 'file') {
110
+ // Handle collision for files with same name
111
+ // If new file has higher or equal order, replace the existing one (last wins for ties)
112
+ if (
113
+ parsed.order !== undefined
114
+ && (childNode.value.order === undefined || parsed.order >= childNode.value.order)
115
+ ) {
116
+ const route = filePathToRoute(filePath, rootDir)
117
+ const newNode = Tree.node<RouteTreeNodeValue>({
118
+ name: parsed.name,
119
+ order: parsed.order,
120
+ type: 'file',
121
+ route,
122
+ })
123
+ currentNode.children[existingChildIndex] = newNode
124
+ childNode = newNode
125
+ }
126
+ // Otherwise keep the existing node (when existing has higher order)
127
+ }
128
+
129
+ currentNode = childNode
130
+ }
131
+ }
132
+
133
+ // Sort the tree
134
+ return sortRouteTree(root)
135
+ }
136
+
137
+ const sortRouteTree = (tree: RouteTreeNode): RouteTreeNode => {
138
+ return Tree.sort(tree, (a, b) => {
139
+ // If both have orders, sort by order
140
+ if (a.order !== undefined && b.order !== undefined) {
141
+ return a.order - b.order
142
+ }
143
+ // If only one has order, it comes first
144
+ if (a.order !== undefined) return -1
145
+ if (b.order !== undefined) return 1
146
+ // Otherwise sort alphabetically
147
+ return a.name.localeCompare(b.name)
148
+ })
149
+ }
150
+
151
+ //
152
+ // Main scan function
153
+ //
154
+
155
+ export const scanTree = async (parameters: {
156
+ dir: string
157
+ glob?: string
158
+ }): Promise<ScanTreeResult> => {
159
+ const { dir, glob = `**/*` } = parameters
160
+
161
+ // Get all files
162
+ const filePaths = await TinyGlobby.glob(glob, {
163
+ absolute: true,
164
+ cwd: dir,
165
+ onlyFiles: true,
166
+ })
167
+
168
+ // Build tree structure (directories will be created implicitly)
169
+ const routeTree = await buildRouteTreeFromPaths(filePaths, dir)
170
+
171
+ // TODO: Implement tree-based linting
172
+ const diagnostics: Diagnostic[] = []
173
+
174
+ return {
175
+ routeTree,
176
+ diagnostics,
177
+ }
178
+ }
179
+
180
+ // Reuse existing route creation logic
181
+ const filePathToRoute = (filePathExpression: string, rootDir: string): Route => {
182
+ const file: RouteFile = {
183
+ path: {
184
+ absolute: Path.parse(filePathExpression),
185
+ relative: Path.parse(Path.relative(rootDir, filePathExpression)),
186
+ },
187
+ }
188
+
189
+ const dirPath = Str.split(Str.removeSurrounding(file.path.relative.dir, Path.sep), Path.sep)
190
+
191
+ // Parse numbered prefix from filename
192
+ const prefixMatch = file.path.relative.name.match(conventions.numberedPrefix.pattern)
193
+ const order = prefixMatch?.groups?.[`order`] ? parseInt(prefixMatch.groups[`order`], 10) : undefined
194
+ const nameWithoutPrefix = prefixMatch?.groups?.[`name`] ?? file.path.relative.name
195
+
196
+ const logical = {
197
+ path: nameWithoutPrefix === conventions.index.name ? dirPath : dirPath.concat(nameWithoutPrefix),
198
+ order,
199
+ }
200
+
201
+ return {
202
+ logical,
203
+ file,
204
+ }
205
+ }
@@ -1,7 +1,9 @@
1
- import { TinyGlobby } from '#dep/tiny-globby/index.js'
1
+ import { TinyGlobby } from '#dep/tiny-globby/index'
2
+ import { Tree } from '#lib/tree/index'
2
3
  import { Path, Str } from '@wollybeard/kit'
3
- import { type Diagnostic, lint } from './linter.js'
4
- import type { Route, RouteFile, RouteLogical } from './route.js'
4
+ import { type Diagnostic, lint } from './linter.ts'
5
+ import { type Route, type RouteFile, type RouteLogical, routeToPathExpression } from './route.ts'
6
+ import { scanTree } from './scan-tree.ts'
5
7
 
6
8
  //
7
9
  //
@@ -15,6 +17,9 @@ const conventions = {
15
17
  index: {
16
18
  name: `index`,
17
19
  },
20
+ numberedPrefix: {
21
+ pattern: Str.pattern<{ groups: ['order', 'name'] }>(/^(?<order>\d+)[_-](?<name>.+)$/),
22
+ },
18
23
  }
19
24
 
20
25
  //
@@ -42,18 +47,21 @@ export const scan = async (parameters: {
42
47
  dir: string
43
48
  glob?: string
44
49
  }): Promise<ScanResult> => {
45
- const { dir, glob = `**/*` } = parameters
50
+ // Use tree-based scanner
51
+ const treeResult = await scanTree(parameters)
46
52
 
47
- const filePathStrings = await TinyGlobby.glob(glob, {
48
- absolute: true,
49
- cwd: dir,
50
- onlyFiles: true,
53
+ // Flatten tree to get routes
54
+ const routes: Route[] = []
55
+ Tree.visit(treeResult.routeTree, (node) => {
56
+ if (node.value.type === 'file' && node.value.route) {
57
+ routes.push(node.value.route)
58
+ }
51
59
  })
52
60
 
53
- const routes: Route[] = filePathStrings.map(filePath => filePathToRoute(filePath, dir))
54
-
61
+ // Apply linting
55
62
  const lintResult = lint(routes)
56
63
 
64
+ // Routes are already sorted by the tree structure
57
65
  return lintResult
58
66
  }
59
67
 
@@ -75,15 +83,22 @@ export const filePathToRoute = (filePathExpression: string, rootDir: string): Ro
75
83
  export const filePathToRouteLogical = (filePath: Path.Parsed): RouteLogical => {
76
84
  const dirPath = Str.split(Str.removeSurrounding(filePath.dir, Path.sep), Path.sep)
77
85
 
78
- if (Str.isMatch(filePath.name, conventions.index.name)) {
86
+ // Parse numbered prefix from filename
87
+ const prefixMatch = Str.match(filePath.name, conventions.numberedPrefix.pattern)
88
+ const order = prefixMatch ? parseInt(prefixMatch.groups.order, 10) : undefined
89
+ const nameWithoutPrefix = prefixMatch?.groups.name ?? filePath.name
90
+
91
+ if (nameWithoutPrefix === conventions.index.name) {
79
92
  const path = dirPath
80
93
  return {
81
94
  path,
95
+ order,
82
96
  }
83
97
  }
84
98
 
85
- const path = dirPath.concat(filePath.name)
99
+ const path = dirPath.concat(nameWithoutPrefix)
86
100
  return {
87
101
  path,
102
+ order,
88
103
  }
89
104
  }
@@ -0,0 +1,3 @@
1
+ export * as SidebarTree from './sidebar-tree.ts'
2
+ // Re-export SidebarTree as Sidebar for backward compatibility
3
+ export * as Sidebar from './sidebar-tree.ts'
@@ -0,0 +1,123 @@
1
+ import { Tree } from '#lib/tree/index'
2
+ import { describe, expect, test } from 'vitest'
3
+ import type { RouteTreeNode, RouteTreeNodeValue } from '../scan-tree.ts'
4
+ import { buildFromTree } from './sidebar-tree.ts'
5
+
6
+ // Helper to create mock routes
7
+ const mockRoute = (path: string[]) => ({
8
+ logical: { path },
9
+ file: {
10
+ path: {
11
+ absolute: { root: '/', dir: '/', base: 'file.md', ext: '.md', name: 'file' },
12
+ relative: { root: '', dir: '', base: 'file.md', ext: '.md', name: 'file' },
13
+ },
14
+ },
15
+ })
16
+
17
+ // Helper to create file node
18
+ const fileNode = (name: string, route: any): RouteTreeNode =>
19
+ Tree.node<RouteTreeNodeValue>({ name, type: 'file', route })
20
+
21
+ // Helper to create directory node
22
+ const dirNode = (name: string, children: RouteTreeNode[] = []): RouteTreeNode =>
23
+ Tree.node<RouteTreeNodeValue>({ name, type: 'directory' }, children)
24
+
25
+ describe('sidebar-tree', () => {
26
+ test('builds sidebar from simple tree', () => {
27
+ const tree = dirNode('root', [
28
+ fileNode('getting-started', mockRoute(['getting-started'])),
29
+ dirNode('guide', [
30
+ fileNode('introduction', mockRoute(['guide', 'introduction'])),
31
+ fileNode('basics', mockRoute(['guide', 'basics'])),
32
+ ]),
33
+ ])
34
+
35
+ const sidebar = buildFromTree(tree, [])
36
+
37
+ expect(sidebar.items).toHaveLength(2)
38
+ expect(sidebar.items[0]).toMatchObject({
39
+ type: 'ItemLink',
40
+ pathExp: 'getting-started',
41
+ title: 'Getting Started',
42
+ })
43
+ const section = sidebar.items[1]
44
+ expect(section).toBeDefined()
45
+ expect(section!.type).toBe('ItemSection')
46
+ if (section!.type === 'ItemSection') {
47
+ expect(section).toMatchObject({
48
+ type: 'ItemSection',
49
+ title: 'Guide',
50
+ pathExp: 'guide',
51
+ isNavToo: false,
52
+ })
53
+ expect(section!.navs).toHaveLength(2)
54
+ }
55
+ })
56
+
57
+ test('handles index files correctly', () => {
58
+ const tree = dirNode('root', [
59
+ dirNode('guide', [
60
+ fileNode('index', mockRoute(['guide'])),
61
+ fileNode('introduction', mockRoute(['guide', 'introduction'])),
62
+ ]),
63
+ ])
64
+
65
+ const sidebar = buildFromTree(tree, [])
66
+
67
+ expect(sidebar.items).toHaveLength(1)
68
+ const section = sidebar.items[0]
69
+ expect(section).toBeDefined()
70
+ expect(section!.type).toBe('ItemSection')
71
+ if (section!.type === 'ItemSection') {
72
+ expect(section).toMatchObject({
73
+ type: 'ItemSection',
74
+ title: 'Guide',
75
+ pathExp: 'guide',
76
+ isNavToo: true, // Should be true because of index file
77
+ })
78
+ expect(section!.navs).toHaveLength(1) // Only introduction, not index
79
+ }
80
+ })
81
+
82
+ test('respects node ordering from tree', () => {
83
+ const tree = dirNode('root', [
84
+ Tree.node<RouteTreeNodeValue>({ name: 'quickstart', order: 5, type: 'file', route: mockRoute(['quickstart']) }),
85
+ Tree.node<RouteTreeNodeValue>({ name: 'guide', order: 10, type: 'file', route: mockRoute(['guide']) }),
86
+ fileNode('api', mockRoute(['api'])),
87
+ fileNode('troubleshooting', mockRoute(['troubleshooting'])),
88
+ ])
89
+
90
+ const sidebar = buildFromTree(tree, [])
91
+
92
+ // Tree should already be sorted, so sidebar should maintain that order
93
+ const titles = sidebar.items.map(item => item.title)
94
+ expect(titles).toEqual(['Quickstart', 'Guide', 'Api', 'Troubleshooting'])
95
+ })
96
+
97
+ test('handles nested directories', () => {
98
+ const tree = dirNode('root', [
99
+ dirNode('guide', [
100
+ fileNode('intro', mockRoute(['guide', 'intro'])),
101
+ dirNode('advanced', [
102
+ fileNode('performance', mockRoute(['guide', 'advanced', 'performance'])),
103
+ fileNode('optimization', mockRoute(['guide', 'advanced', 'optimization'])),
104
+ ]),
105
+ ]),
106
+ ])
107
+
108
+ const sidebar = buildFromTree(tree, [])
109
+
110
+ expect(sidebar.items).toHaveLength(1)
111
+ const guideSection = sidebar.items[0]
112
+ expect(guideSection).toBeDefined()
113
+ expect(guideSection!.type).toBe('ItemSection')
114
+ if (guideSection!.type === 'ItemSection') {
115
+ expect(guideSection!.navs).toHaveLength(3) // intro + 2 from advanced subdirectory
116
+
117
+ const navTitles = guideSection!.navs.map(nav => nav.title)
118
+ expect(navTitles).toContain('Intro')
119
+ expect(navTitles).toContain('Performance')
120
+ expect(navTitles).toContain('Optimization')
121
+ }
122
+ })
123
+ })
@@ -0,0 +1,110 @@
1
+ import { Tree } from '#lib/tree/index'
2
+ import { Str } from '@wollybeard/kit'
3
+ import * as FileRouter from '../file-router.ts'
4
+ import type { RouteTreeNode, RouteTreeNodeValue } from '../scan-tree.ts'
5
+ import type { ItemLink, ItemSection, Sidebar } from './types.ts'
6
+
7
+ export * from './types.ts'
8
+
9
+ /**
10
+ * Build sidebar from tree structure
11
+ */
12
+ export const buildFromTree = (routeTree: RouteTreeNode, basePath: FileRouter.Path): Sidebar => {
13
+ const navs: ItemLink[] = []
14
+ const sections: ItemSection[] = []
15
+
16
+ // Process only the children of the root node
17
+ for (const child of routeTree.children) {
18
+ processNode(child, basePath, [], navs, sections)
19
+ }
20
+
21
+ const items = [...navs, ...sections]
22
+
23
+ return {
24
+ items,
25
+ }
26
+ }
27
+
28
+ const processNode = (
29
+ node: RouteTreeNode,
30
+ basePath: FileRouter.Path,
31
+ parentPath: string[],
32
+ navs: ItemLink[],
33
+ sections: ItemSection[],
34
+ ): void => {
35
+ const currentPath = [...parentPath, node.value.name]
36
+
37
+ if (node.value.type === 'directory') {
38
+ // This is a directory - create a section
39
+ const sectionPath = [...basePath, ...currentPath]
40
+ const sectionPathExp = FileRouter.pathToExpression(sectionPath)
41
+ const sectionTitle = Str.titlizeSlug(node.value.name)
42
+
43
+ const section: ItemSection = {
44
+ type: `ItemSection`,
45
+ title: sectionTitle,
46
+ pathExp: sectionPathExp.startsWith('/') ? sectionPathExp.slice(1) : sectionPathExp,
47
+ isNavToo: false,
48
+ navs: [],
49
+ }
50
+
51
+ // Check if this directory has an index file
52
+ const indexChild = node.children.find(child => child.value.type === 'file' && child.value.name === 'index')
53
+ if (indexChild) {
54
+ section.isNavToo = true
55
+ }
56
+
57
+ // Process all non-index children as navs for this section
58
+ for (const child of node.children) {
59
+ if (child.value.type === 'file' && child.value.name !== 'index' && child.value.route) {
60
+ // Pass the parent path of the route, not the section path
61
+ const routeParentPath = child.value.route.logical.path.slice(0, -1)
62
+ section.navs.push(routeToItemLink(child.value.route, routeParentPath))
63
+ } else if (child.value.type === 'directory') {
64
+ // Recursively process subdirectories
65
+ // Note: This creates nested sections which the original implementation doesn't support
66
+ // For now, we'll just add the files from subdirectories to the parent section
67
+ collectFilesFromDirectory(child, child.value.route?.logical.path || [], section.navs)
68
+ }
69
+ }
70
+
71
+ sections.push(section)
72
+ } else if (node.value.type === 'file' && node.value.route) {
73
+ // This is a top-level file - add as nav
74
+ if (node.value.name !== 'index') {
75
+ navs.push(routeToItemLink(node.value.route, basePath))
76
+ }
77
+ }
78
+ }
79
+
80
+ const collectFilesFromDirectory = (
81
+ node: RouteTreeNode,
82
+ basePath: FileRouter.Path,
83
+ navs: ItemLink[],
84
+ ): void => {
85
+ Tree.visit(node, (n) => {
86
+ if (n.value.type === 'file' && n.value.route && n.value.name !== 'index') {
87
+ // Use the route's parent path for relative title generation
88
+ const routeParentPath = n.value.route.logical.path.slice(0, -1)
89
+ navs.push(routeToItemLink(n.value.route, routeParentPath))
90
+ }
91
+ })
92
+ }
93
+
94
+ const routeToItemLink = (route: FileRouter.Route, basePath: FileRouter.Path): ItemLink => {
95
+ const pagePathExp = FileRouter.routeToPathExpression(route)
96
+ const pageRelative = FileRouter.makeRelativeUnsafe(route, basePath)
97
+ const pageRelativePathExp = FileRouter.routeToPathExpression(pageRelative)
98
+
99
+ // Remove leading slash for title generation
100
+ const titlePath = pageRelativePathExp.startsWith('/') ? pageRelativePathExp.slice(1) : pageRelativePathExp
101
+
102
+ // Use only the last segment for the title
103
+ const titleSegment = pageRelative.logical.path[pageRelative.logical.path.length - 1] || titlePath
104
+
105
+ return {
106
+ type: `ItemLink`,
107
+ pathExp: pagePathExp.startsWith('/') ? pagePathExp.slice(1) : pagePathExp,
108
+ title: Str.titlizeSlug(titleSegment),
109
+ }
110
+ }
@@ -0,0 +1,19 @@
1
+ export interface Sidebar {
2
+ items: Item[]
3
+ }
4
+
5
+ export type Item = ItemLink | ItemSection
6
+
7
+ export interface ItemLink {
8
+ type: `ItemLink`
9
+ title: string
10
+ pathExp: string
11
+ }
12
+
13
+ export interface ItemSection {
14
+ type: `ItemSection`
15
+ title: string
16
+ pathExp: string
17
+ isNavToo: boolean
18
+ navs: ItemLink[]
19
+ }
@@ -1 +1 @@
1
- export * as Nodes from './document.js'
1
+ export * as Nodes from './document.ts'
@@ -5,4 +5,4 @@
5
5
  import type { OperationTypeNode as GraphQLOperationTypeNode } from 'graphql'
6
6
 
7
7
  export type OperationTypeNode = GraphQLOperationTypeNode
8
- export * as OperationTypeNode from './OperationTypeNodes.js'
8
+ export * as OperationTypeNode from './OperationTypeNodes.ts'
@@ -4,6 +4,6 @@
4
4
 
5
5
  import type { Kind as GraphQLKind } from 'graphql'
6
6
 
7
- export * as Kind from './kinds.js'
7
+ export * as Kind from './kinds.ts'
8
8
 
9
9
  export type Kind = GraphQLKind
@@ -24,10 +24,10 @@ import {
24
24
  type VariableNode,
25
25
  } from 'graphql'
26
26
  import type { HasRequiredKeys } from 'type-fest'
27
- import { Kind } from './document/kind.js'
28
- import { OperationTypeNode } from './document/OperationTypeNode.js'
29
- // import type { RequestDocumentNodeInput } from './request.js'
30
- export { OperationType } from './schema/OperationType/__.js'
27
+ import { Kind } from './document/kind.ts'
28
+ import { OperationTypeNode } from './document/OperationTypeNode.ts'
29
+ // import type { RequestDocumentNodeInput } from './request.ts'
30
+ export { OperationType } from './schema/OperationType/__.ts'
31
31
 
32
32
  export type {
33
33
  ArgumentNode,
@@ -55,9 +55,9 @@ export type {
55
55
  VariableNode,
56
56
  } from 'graphql'
57
57
 
58
- export { OperationTypeNode } from './document/OperationTypeNode.js'
58
+ export { OperationTypeNode } from './document/OperationTypeNode.ts'
59
59
 
60
- export { Kind } from './document/kind.js'
60
+ export { Kind } from './document/kind.ts'
61
61
 
62
62
  export type $Any =
63
63
  | DirectiveNode
@@ -1,4 +1,4 @@
1
- export * as Document from './document.js'
2
- export * from './graphql.js'
3
- export * as HTTP from './http/http.js'
4
- export * as Schema from './schema/schema.js'
1
+ export * as Document from './document.ts'
2
+ export * from './graphql.ts'
3
+ export * as HTTP from './http/http.ts'
4
+ export * as Schema from './schema/schema.ts'
@@ -1,8 +1,8 @@
1
1
  import { neverCase } from '@wollybeard/kit/language'
2
2
  import type { GraphQLNamedType, GraphQLScalarType } from 'graphql'
3
3
  import { isEnumType, isInputObjectType, isInterfaceType, isObjectType, isScalarType, isUnionType } from 'graphql'
4
- import type { KindMap } from './schema/schema.js'
5
- import { isScalarTypeCustom } from './schema/schema.js'
4
+ import type { KindMap } from './schema/schema.ts'
5
+ import { isScalarTypeCustom } from './schema/schema.ts'
6
6
 
7
7
  export {
8
8
  type ExecutionResult,
@@ -11,7 +11,7 @@ export {
11
11
  type GraphQLFormattedError as FormattedExecutionResultError,
12
12
  } from 'graphql'
13
13
 
14
- export * from './_Nodes.js'
14
+ export * from './_Nodes.ts'
15
15
 
16
16
  export const StandardScalarTypeNames = {
17
17
  String: `String`,
@@ -1 +1 @@
1
- export * as GraphQLHTTP from './http.js'
1
+ export * as GraphQLHTTP from './http.ts'
@@ -1,5 +1,5 @@
1
1
  import type { FormattedExecutionResult, GraphQLFormattedError } from 'graphql'
2
- // import { CONTENT_TYPE_GQL, CONTENT_TYPE_JSON } from '../../http.js'
2
+ // import { CONTENT_TYPE_GQL, CONTENT_TYPE_JSON } from '../../http.ts'
3
3
  import { Rec } from '@wollybeard/kit'
4
4
 
5
5
  export interface RequestConfig {
@@ -1 +1 @@
1
- export * as Grafaid from './grafaid.js'
1
+ export * as Grafaid from './grafaid.ts'
@@ -1,10 +1,10 @@
1
1
  import type { GraphQLInterfaceType } from 'graphql'
2
- import { getRootTypeMap } from '../RootTypeMap.js'
3
- import type { Schema } from '../schema.js'
4
- import * as Type from '../type.js'
5
- import { isRoot } from '../type.js'
6
- import { isScalarTypeCustom } from '../typeGuards.js'
7
- import type { KindMap } from './__.js'
2
+ import { getRootTypeMap } from '../RootTypeMap.ts'
3
+ import type { Schema } from '../schema.ts'
4
+ import * as Type from '../type.ts'
5
+ import { isRoot } from '../type.ts'
6
+ import { isScalarTypeCustom } from '../typeGuards.ts'
7
+ import type { KindMap } from './__.ts'
8
8
 
9
9
  export const Name = {
10
10
  Root: `Root`,
@@ -6,9 +6,9 @@ import type {
6
6
  GraphQLScalarType,
7
7
  GraphQLUnionType,
8
8
  } from 'graphql'
9
- import type { RootTypeMap } from '../RootTypeMap.js'
9
+ import type { RootTypeMap } from '../RootTypeMap.ts'
10
10
 
11
- export * as KindMap from './_.js'
11
+ export * as KindMap from './_.ts'
12
12
 
13
13
  export interface KindMap {
14
14
  root: RootTypeMap
@@ -1,4 +1,4 @@
1
- import type { OperationTypeMutation, OperationTypeQuery, OperationTypeSubscription } from './_.js'
1
+ import type { OperationTypeMutation, OperationTypeQuery, OperationTypeSubscription } from './_.ts'
2
2
 
3
- export * as OperationType from './_.js'
3
+ export * as OperationType from './_.ts'
4
4
  export type OperationType = OperationTypeQuery | OperationTypeMutation | OperationTypeSubscription