polen 0.10.0 → 0.11.0-next.1

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 (314) hide show
  1. package/build/api/api.d.ts +1 -0
  2. package/build/api/api.d.ts.map +1 -1
  3. package/build/api/api.js +1 -0
  4. package/build/api/api.js.map +1 -1
  5. package/build/api/config/configurator.d.ts +20 -3
  6. package/build/api/config/configurator.d.ts.map +1 -1
  7. package/build/api/config/configurator.js +27 -3
  8. package/build/api/config/configurator.js.map +1 -1
  9. package/build/api/schema/data-sources/memory/memory.d.ts +2 -2
  10. package/build/api/schema/data-sources/memory/memory.d.ts.map +1 -1
  11. package/build/api/schema/data-sources/memory/memory.js +1 -3
  12. package/build/api/schema/data-sources/memory/memory.js.map +1 -1
  13. package/build/api/schema/data-sources/schema-directory/file-name-expression/file-name-expression.d.ts +7 -3
  14. package/build/api/schema/data-sources/schema-directory/file-name-expression/file-name-expression.d.ts.map +1 -1
  15. package/build/api/schema/data-sources/schema-directory/file-name-expression/file-name-expression.js +15 -11
  16. package/build/api/schema/data-sources/schema-directory/file-name-expression/file-name-expression.js.map +1 -1
  17. package/build/api/schema/data-sources/schema-directory/schema-directory.d.ts +16 -7
  18. package/build/api/schema/data-sources/schema-directory/schema-directory.d.ts.map +1 -1
  19. package/build/api/schema/data-sources/schema-directory/schema-directory.js +26 -7
  20. package/build/api/schema/data-sources/schema-directory/schema-directory.js.map +1 -1
  21. package/build/api/schema/data-sources/schema-file/schema-file.d.ts +7 -2
  22. package/build/api/schema/data-sources/schema-file/schema-file.d.ts.map +1 -1
  23. package/build/api/schema/data-sources/schema-file/schema-file.js +13 -5
  24. package/build/api/schema/data-sources/schema-file/schema-file.js.map +1 -1
  25. package/build/api/schema/metadata.d.ts +8 -0
  26. package/build/api/schema/metadata.d.ts.map +1 -0
  27. package/build/api/schema/metadata.js +19 -0
  28. package/build/api/schema/metadata.js.map +1 -0
  29. package/build/api/schema/read.d.ts +3 -3
  30. package/build/api/schema/read.d.ts.map +1 -1
  31. package/build/api/schema/read.js.map +1 -1
  32. package/build/api/schema/schema.d.ts +33 -2
  33. package/build/api/schema/schema.d.ts.map +1 -1
  34. package/build/api/schema/schema.js +42 -0
  35. package/build/api/schema/schema.js.map +1 -1
  36. package/build/api/schema-source/index.d.ts +2 -0
  37. package/build/api/schema-source/index.d.ts.map +1 -0
  38. package/build/api/schema-source/index.js +2 -0
  39. package/build/api/schema-source/index.js.map +1 -0
  40. package/build/api/schema-source/schema-source.d.ts +33 -0
  41. package/build/api/schema-source/schema-source.d.ts.map +1 -0
  42. package/build/api/schema-source/schema-source.js +137 -0
  43. package/build/api/schema-source/schema-source.js.map +1 -0
  44. package/build/api/vite/plugins/core.d.ts +1 -0
  45. package/build/api/vite/plugins/core.d.ts.map +1 -1
  46. package/build/api/vite/plugins/core.js +21 -18
  47. package/build/api/vite/plugins/core.js.map +1 -1
  48. package/build/api/vite/plugins/schema-assets.d.ts +22 -0
  49. package/build/api/vite/plugins/schema-assets.d.ts.map +1 -0
  50. package/build/api/vite/plugins/schema-assets.js +269 -0
  51. package/build/api/vite/plugins/schema-assets.js.map +1 -0
  52. package/build/api/vite/plugins/serve.d.ts.map +1 -1
  53. package/build/api/vite/plugins/serve.js +11 -0
  54. package/build/api/vite/plugins/serve.js.map +1 -1
  55. package/build/lib/graphql-change/change-groups.d.ts +2 -0
  56. package/build/lib/graphql-change/change-groups.d.ts.map +1 -1
  57. package/build/lib/graphql-change/change-groups.js +54 -0
  58. package/build/lib/graphql-change/change-groups.js.map +1 -1
  59. package/build/lib/kit-temp.d.ts +9 -0
  60. package/build/lib/kit-temp.d.ts.map +1 -1
  61. package/build/lib/kit-temp.js +12 -0
  62. package/build/lib/kit-temp.js.map +1 -1
  63. package/build/lib/path-map/path-map.d.ts.map +1 -1
  64. package/build/lib/path-map/path-map.js +3 -1
  65. package/build/lib/path-map/path-map.js.map +1 -1
  66. package/build/project-data.d.ts +3 -11
  67. package/build/project-data.d.ts.map +1 -1
  68. package/build/template/components/Changelog.d.ts +3 -3
  69. package/build/template/components/Changelog.d.ts.map +1 -1
  70. package/build/template/components/Changelog.js +8 -84
  71. package/build/template/components/Changelog.js.map +1 -1
  72. package/build/template/components/CodeBlock.d.ts +2 -0
  73. package/build/template/components/CodeBlock.d.ts.map +1 -1
  74. package/build/template/components/CodeBlock.js +1 -4
  75. package/build/template/components/CodeBlock.js.map +1 -1
  76. package/build/template/components/ComponentDispatch.d.ts +34 -0
  77. package/build/template/components/ComponentDispatch.d.ts.map +1 -0
  78. package/build/template/components/ComponentDispatch.js +33 -0
  79. package/build/template/components/ComponentDispatch.js.map +1 -0
  80. package/build/template/components/ReferenceLink.d.ts +19 -0
  81. package/build/template/components/ReferenceLink.d.ts.map +1 -0
  82. package/build/template/components/ReferenceLink.js +19 -0
  83. package/build/template/components/ReferenceLink.js.map +1 -0
  84. package/build/template/components/TypeAnnotation.d.ts.map +1 -1
  85. package/build/template/components/TypeAnnotation.js +3 -3
  86. package/build/template/components/TypeAnnotation.js.map +1 -1
  87. package/build/template/components/TypeFieldsLinkList.d.ts.map +1 -1
  88. package/build/template/components/TypeFieldsLinkList.js +4 -4
  89. package/build/template/components/TypeFieldsLinkList.js.map +1 -1
  90. package/build/template/components/TypeIndex.js +2 -2
  91. package/build/template/components/TypeIndex.js.map +1 -1
  92. package/build/template/components/VersionSelector.d.ts +7 -0
  93. package/build/template/components/VersionSelector.d.ts.map +1 -0
  94. package/build/template/components/VersionSelector.js +30 -0
  95. package/build/template/components/VersionSelector.js.map +1 -0
  96. package/build/template/components/graphql/type-link.d.ts.map +1 -1
  97. package/build/template/components/graphql/type-link.js +2 -2
  98. package/build/template/components/graphql/type-link.js.map +1 -1
  99. package/build/template/hooks/useVersionPath.d.ts +6 -0
  100. package/build/template/hooks/useVersionPath.d.ts.map +1 -0
  101. package/build/template/hooks/useVersionPath.js +10 -0
  102. package/build/template/hooks/useVersionPath.js.map +1 -0
  103. package/build/template/layouts/ChangelogLayout.d.ts.map +1 -0
  104. package/build/template/{components → layouts}/ChangelogLayout.js +1 -1
  105. package/build/template/layouts/ChangelogLayout.js.map +1 -0
  106. package/build/template/layouts/index.d.ts +1 -0
  107. package/build/template/layouts/index.d.ts.map +1 -1
  108. package/build/template/layouts/index.js +1 -0
  109. package/build/template/layouts/index.js.map +1 -1
  110. package/build/template/lib/fetch-text.d.ts +8 -0
  111. package/build/template/lib/fetch-text.d.ts.map +1 -0
  112. package/build/template/lib/fetch-text.js +14 -0
  113. package/build/template/lib/fetch-text.js.map +1 -0
  114. package/build/template/lib/polen-url.d.ts +14 -0
  115. package/build/template/lib/polen-url.d.ts.map +1 -1
  116. package/build/template/lib/polen-url.js +16 -0
  117. package/build/template/lib/polen-url.js.map +1 -1
  118. package/build/template/lib/schema-utils/constants.d.ts +5 -0
  119. package/build/template/lib/schema-utils/constants.d.ts.map +1 -0
  120. package/build/template/lib/schema-utils/constants.js +5 -0
  121. package/build/template/lib/schema-utils/constants.js.map +1 -0
  122. package/build/template/lib/schema-utils/schema-utils.d.ts +15 -0
  123. package/build/template/lib/schema-utils/schema-utils.d.ts.map +1 -0
  124. package/build/template/lib/schema-utils/schema-utils.js +37 -0
  125. package/build/template/lib/schema-utils/schema-utils.js.map +1 -0
  126. package/build/template/routes/changelog.d.ts +4 -3
  127. package/build/template/routes/changelog.d.ts.map +1 -1
  128. package/build/template/routes/changelog.js +13 -7
  129. package/build/template/routes/changelog.js.map +1 -1
  130. package/build/template/routes/pages.d.ts +10 -0
  131. package/build/template/routes/pages.d.ts.map +1 -0
  132. package/build/template/routes/pages.js +76 -0
  133. package/build/template/routes/pages.js.map +1 -0
  134. package/build/template/routes/reference.$type.$field.js +1 -1
  135. package/build/template/routes/reference.$type.$field.js.map +1 -1
  136. package/build/template/routes/reference.$type.d.ts +4 -0
  137. package/build/template/routes/reference.$type.d.ts.map +1 -1
  138. package/build/template/routes/reference.$type.js +2 -0
  139. package/build/template/routes/reference.$type.js.map +1 -1
  140. package/build/template/routes/reference.d.ts +9 -3
  141. package/build/template/routes/reference.d.ts.map +1 -1
  142. package/build/template/routes/reference.js +30 -8
  143. package/build/template/routes/reference.js.map +1 -1
  144. package/build/template/routes/reference.version.$version.$type.$field.d.ts +6 -0
  145. package/build/template/routes/reference.version.$version.$type.$field.d.ts.map +1 -0
  146. package/build/template/routes/reference.version.$version.$type.$field.js +32 -0
  147. package/build/template/routes/reference.version.$version.$type.$field.js.map +1 -0
  148. package/build/template/routes/reference.version.$version.$type.d.ts +11 -0
  149. package/build/template/routes/reference.version.$version.$type.d.ts.map +1 -0
  150. package/build/template/routes/reference.version.$version.$type.js +26 -0
  151. package/build/template/routes/reference.version.$version.$type.js.map +1 -0
  152. package/build/template/routes/root.d.ts.map +1 -1
  153. package/build/template/routes/root.js +8 -72
  154. package/build/template/routes/root.js.map +1 -1
  155. package/build/template/server/app.d.ts +22 -1
  156. package/build/template/server/app.d.ts.map +1 -1
  157. package/build/template/server/app.js +19 -9
  158. package/build/template/server/app.js.map +1 -1
  159. package/build/template/server/main.js +9 -1
  160. package/build/template/server/main.js.map +1 -1
  161. package/build/template/server/ssg/generate.js +2 -2
  162. package/build/template/server/ssg/generate.js.map +1 -1
  163. package/build/template/server/ssg/get-route-paths.d.ts +1 -1
  164. package/build/template/server/ssg/get-route-paths.d.ts.map +1 -1
  165. package/build/template/server/ssg/get-route-paths.js +51 -27
  166. package/build/template/server/ssg/get-route-paths.js.map +1 -1
  167. package/build/template/sources/schema-source.d.ts +15 -0
  168. package/build/template/sources/schema-source.d.ts.map +1 -0
  169. package/build/template/sources/schema-source.js +63 -0
  170. package/build/template/sources/schema-source.js.map +1 -0
  171. package/package.json +1 -1
  172. package/src/api/api.ts +1 -0
  173. package/src/api/config/configurator.ts +51 -6
  174. package/src/api/schema/data-sources/memory/memory.ts +3 -5
  175. package/src/api/schema/data-sources/schema-directory/file-name-expression/file-name-expression.ts +29 -13
  176. package/src/api/schema/data-sources/schema-directory/schema-directory.ts +56 -16
  177. package/src/api/schema/data-sources/schema-file/schema-file.ts +16 -7
  178. package/src/api/schema/metadata.ts +23 -0
  179. package/src/api/schema/read.ts +3 -3
  180. package/src/api/schema/schema.ts +62 -2
  181. package/src/api/schema-source/index.ts +1 -0
  182. package/src/api/schema-source/schema-source.ts +189 -0
  183. package/src/api/vite/plugins/core.ts +23 -18
  184. package/src/api/vite/plugins/schema-assets.ts +317 -0
  185. package/src/api/vite/plugins/serve.ts +15 -8
  186. package/src/lib/graphql-change/change-groups.ts +57 -0
  187. package/src/lib/kit-temp.ts +13 -0
  188. package/src/lib/path-map/$.test.ts +22 -19
  189. package/src/lib/path-map/path-map.ts +3 -1
  190. package/src/project-data.ts +3 -11
  191. package/src/template/components/Changelog.tsx +16 -67
  192. package/src/template/components/CodeBlock.tsx +3 -5
  193. package/src/template/components/ComponentDispatch.tsx +42 -0
  194. package/src/template/components/ReferenceLink.tsx +34 -0
  195. package/src/template/components/TypeAnnotation.tsx +5 -7
  196. package/src/template/components/TypeFieldsLinkList.tsx +20 -23
  197. package/src/template/components/TypeIndex.tsx +10 -12
  198. package/src/template/components/VersionSelector.tsx +50 -0
  199. package/src/template/components/graphql/type-link.tsx +4 -3
  200. package/src/template/hooks/useVersionPath.ts +10 -0
  201. package/src/template/{components → layouts}/ChangelogLayout.tsx +1 -1
  202. package/src/template/layouts/index.ts +1 -0
  203. package/src/template/lib/fetch-text.ts +13 -0
  204. package/src/template/lib/polen-url.ts +20 -0
  205. package/src/template/lib/schema-utils/constants.ts +4 -0
  206. package/src/template/lib/schema-utils/schema-utils.ts +42 -0
  207. package/src/template/routes/changelog.tsx +17 -8
  208. package/src/template/routes/pages.tsx +109 -0
  209. package/src/template/routes/reference.$type.$field.tsx +1 -1
  210. package/src/template/routes/reference.$type.tsx +2 -0
  211. package/src/template/routes/reference.tsx +38 -6
  212. package/src/template/routes/reference.version.$version.$type.$field.tsx +35 -0
  213. package/src/template/routes/reference.version.$version.$type.tsx +30 -0
  214. package/src/template/routes/root.tsx +8 -109
  215. package/src/template/server/app.ts +47 -14
  216. package/src/template/server/main.ts +9 -1
  217. package/src/template/server/ssg/generate.ts +2 -2
  218. package/src/template/server/ssg/get-route-paths.ts +53 -27
  219. package/src/template/sources/schema-source.ts +68 -0
  220. package/build/lib/graphql-document/$$.d.ts +0 -5
  221. package/build/lib/graphql-document/$$.d.ts.map +0 -1
  222. package/build/lib/graphql-document/$$.js +0 -5
  223. package/build/lib/graphql-document/$$.js.map +0 -1
  224. package/build/lib/graphql-document/$.d.ts +0 -2
  225. package/build/lib/graphql-document/$.d.ts.map +0 -1
  226. package/build/lib/graphql-document/$.js +0 -2
  227. package/build/lib/graphql-document/$.js.map +0 -1
  228. package/build/lib/graphql-document/analysis.d.ts +0 -44
  229. package/build/lib/graphql-document/analysis.d.ts.map +0 -1
  230. package/build/lib/graphql-document/analysis.js +0 -361
  231. package/build/lib/graphql-document/analysis.js.map +0 -1
  232. package/build/lib/graphql-document/components/GraphQLDocument.d.ts +0 -38
  233. package/build/lib/graphql-document/components/GraphQLDocument.d.ts.map +0 -1
  234. package/build/lib/graphql-document/components/GraphQLDocument.js +0 -151
  235. package/build/lib/graphql-document/components/GraphQLDocument.js.map +0 -1
  236. package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.d.ts +0 -7
  237. package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.d.ts.map +0 -1
  238. package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.js +0 -27
  239. package/build/lib/graphql-document/components/GraphQLDocumentWithSchema.js.map +0 -1
  240. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.d.ts +0 -33
  241. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.d.ts.map +0 -1
  242. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.js +0 -50
  243. package/build/lib/graphql-document/components/GraphQLIdentifierPopover.js.map +0 -1
  244. package/build/lib/graphql-document/components/IdentifierLink.d.ts +0 -39
  245. package/build/lib/graphql-document/components/IdentifierLink.d.ts.map +0 -1
  246. package/build/lib/graphql-document/components/IdentifierLink.js +0 -75
  247. package/build/lib/graphql-document/components/IdentifierLink.js.map +0 -1
  248. package/build/lib/graphql-document/components/graphql-document-styles.d.ts +0 -5
  249. package/build/lib/graphql-document/components/graphql-document-styles.d.ts.map +0 -1
  250. package/build/lib/graphql-document/components/graphql-document-styles.js +0 -144
  251. package/build/lib/graphql-document/components/graphql-document-styles.js.map +0 -1
  252. package/build/lib/graphql-document/components/index.d.ts +0 -5
  253. package/build/lib/graphql-document/components/index.d.ts.map +0 -1
  254. package/build/lib/graphql-document/components/index.js +0 -5
  255. package/build/lib/graphql-document/components/index.js.map +0 -1
  256. package/build/lib/graphql-document/example.d.ts +0 -25
  257. package/build/lib/graphql-document/example.d.ts.map +0 -1
  258. package/build/lib/graphql-document/example.js +0 -140
  259. package/build/lib/graphql-document/example.js.map +0 -1
  260. package/build/lib/graphql-document/graphql-document.d.ts +0 -35
  261. package/build/lib/graphql-document/graphql-document.d.ts.map +0 -1
  262. package/build/lib/graphql-document/graphql-document.js +0 -36
  263. package/build/lib/graphql-document/graphql-document.js.map +0 -1
  264. package/build/lib/graphql-document/hooks/use-tooltip-state.d.ts +0 -43
  265. package/build/lib/graphql-document/hooks/use-tooltip-state.d.ts.map +0 -1
  266. package/build/lib/graphql-document/hooks/use-tooltip-state.js +0 -132
  267. package/build/lib/graphql-document/hooks/use-tooltip-state.js.map +0 -1
  268. package/build/lib/graphql-document/positioning-simple.d.ts +0 -63
  269. package/build/lib/graphql-document/positioning-simple.d.ts.map +0 -1
  270. package/build/lib/graphql-document/positioning-simple.js +0 -185
  271. package/build/lib/graphql-document/positioning-simple.js.map +0 -1
  272. package/build/lib/graphql-document/schema-context.d.ts +0 -8
  273. package/build/lib/graphql-document/schema-context.d.ts.map +0 -1
  274. package/build/lib/graphql-document/schema-context.js +0 -11
  275. package/build/lib/graphql-document/schema-context.js.map +0 -1
  276. package/build/lib/graphql-document/schema-integration.d.ts +0 -135
  277. package/build/lib/graphql-document/schema-integration.d.ts.map +0 -1
  278. package/build/lib/graphql-document/schema-integration.js +0 -328
  279. package/build/lib/graphql-document/schema-integration.js.map +0 -1
  280. package/build/lib/graphql-document/types.d.ts +0 -117
  281. package/build/lib/graphql-document/types.d.ts.map +0 -1
  282. package/build/lib/graphql-document/types.js +0 -2
  283. package/build/lib/graphql-document/types.js.map +0 -1
  284. package/build/template/components/ChangelogLayout.d.ts.map +0 -1
  285. package/build/template/components/ChangelogLayout.js.map +0 -1
  286. package/build/template/components/CodeHikePre.d.ts +0 -16
  287. package/build/template/components/CodeHikePre.d.ts.map +0 -1
  288. package/build/template/components/CodeHikePre.js +0 -37
  289. package/build/template/components/CodeHikePre.js.map +0 -1
  290. package/src/lib/graphql-document/$$.ts +0 -4
  291. package/src/lib/graphql-document/$.test.ts +0 -132
  292. package/src/lib/graphql-document/$.ts +0 -1
  293. package/src/lib/graphql-document/README.md +0 -102
  294. package/src/lib/graphql-document/analysis.ts +0 -415
  295. package/src/lib/graphql-document/components/GraphQLDocument.tsx +0 -265
  296. package/src/lib/graphql-document/components/GraphQLDocument.unit.test.ts +0 -188
  297. package/src/lib/graphql-document/components/GraphQLDocumentWithSchema.tsx +0 -46
  298. package/src/lib/graphql-document/components/GraphQLIdentifierPopover.tsx +0 -199
  299. package/src/lib/graphql-document/components/IdentifierLink.tsx +0 -160
  300. package/src/lib/graphql-document/components/graphql-document-styles.ts +0 -144
  301. package/src/lib/graphql-document/components/index.ts +0 -4
  302. package/src/lib/graphql-document/demo.md +0 -155
  303. package/src/lib/graphql-document/example.ts +0 -163
  304. package/src/lib/graphql-document/graphql-document.ts +0 -37
  305. package/src/lib/graphql-document/hooks/use-tooltip-state.test.ts +0 -76
  306. package/src/lib/graphql-document/hooks/use-tooltip-state.ts +0 -191
  307. package/src/lib/graphql-document/positioning-simple.test.ts +0 -248
  308. package/src/lib/graphql-document/positioning-simple.ts +0 -260
  309. package/src/lib/graphql-document/schema-context.tsx +0 -20
  310. package/src/lib/graphql-document/schema-integration.test.ts +0 -365
  311. package/src/lib/graphql-document/schema-integration.ts +0 -488
  312. package/src/lib/graphql-document/types.ts +0 -129
  313. package/src/template/components/CodeHikePre.tsx +0 -51
  314. /package/build/template/{components → layouts}/ChangelogLayout.d.ts +0 -0
@@ -33,3 +33,23 @@ export const polenUrlPath = (...segments: string[]): string => {
33
33
 
34
34
  return basePath + path
35
35
  }
36
+
37
+ /**
38
+ * Create a Polen URL path for assets.
39
+ *
40
+ * This is a convenience wrapper around `polenUrlPath` that automatically
41
+ * prepends the assets root path.
42
+ *
43
+ * @param segments - Path segments within the assets directory
44
+ * @returns Full URL path to the asset
45
+ *
46
+ * @example
47
+ * polenUrlPathAssets('schemas', 'latest.json') // '/demos/pokemon/assets/schemas/latest.json'
48
+ * polenUrlPathAssets('images/logo.png') // '/demos/pokemon/assets/images/logo.png'
49
+ */
50
+ export const polenUrlPathAssets = (...segments: string[]): string => {
51
+ return polenUrlPath(
52
+ PROJECT_DATA.server.routes.assets,
53
+ ...segments,
54
+ )
55
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Re-exports of schema constants for template usage
3
+ */
4
+ export { dateToVersionString, VERSION_LATEST } from '#api/schema/schema'
@@ -0,0 +1,42 @@
1
+ import { buildSchema, print } from 'graphql'
2
+ import type { DocumentNode, GraphQLSchema } from 'graphql'
3
+
4
+ /**
5
+ * Convert a GraphQL AST back to a GraphQL Schema object
6
+ */
7
+ export const astToSchema = (ast: DocumentNode): GraphQLSchema => {
8
+ // Convert AST back to SDL string
9
+ const sdl = print(ast)
10
+ // Build schema from SDL
11
+ return buildSchema(sdl)
12
+ }
13
+
14
+ /**
15
+ * Simple cache for loaded schemas to avoid repeated conversions
16
+ */
17
+ export const createSchemaCache = () => {
18
+ const cache = new Map<string, GraphQLSchema>()
19
+
20
+ return {
21
+ get(version: string): GraphQLSchema | undefined {
22
+ return cache.get(version)
23
+ },
24
+
25
+ set(version: string, schema: GraphQLSchema): void {
26
+ // Limit cache size to prevent memory issues
27
+ if (cache.size >= 10) {
28
+ const firstKey = cache.keys().next().value
29
+ if (firstKey) cache.delete(firstKey)
30
+ }
31
+ cache.set(version, schema)
32
+ },
33
+
34
+ has(version: string): boolean {
35
+ return cache.has(version)
36
+ },
37
+
38
+ clear(): void {
39
+ cache.clear()
40
+ },
41
+ }
42
+ }
@@ -1,25 +1,34 @@
1
+ import type { GraphqlChangeset } from '#lib/graphql-changeset/index'
1
2
  import { createRoute } from '#lib/react-router-aid/react-router-aid'
2
3
  import { createLoader, useLoaderData } from '#lib/react-router-loader/react-router-loader'
3
- import PROJECT_DATA from 'virtual:polen/project/data.jsonsuper'
4
4
  import { Changelog } from '../components/Changelog.js'
5
- import { ChangelogLayout } from '../components/ChangelogLayout.js'
5
+ import { ChangelogLayout } from '../layouts/index.js'
6
+ import { schemaSource } from '../sources/schema-source.js'
7
+
8
+ const loader = createLoader(async () => {
9
+ // Check if schema exists first
10
+ if (schemaSource.isEmpty) {
11
+ return { changesets: [] }
12
+ }
13
+
14
+ // Fetch all changesets with before/after/changes data
15
+ const changesets = await schemaSource.getAllChangesets()
6
16
 
7
- const loader = createLoader(() => {
8
17
  return {
9
- schema: PROJECT_DATA.schema,
18
+ changesets,
10
19
  }
11
20
  })
12
21
 
13
22
  const Component = () => {
14
23
  const data = useLoaderData<typeof loader>()
15
24
 
16
- if (!data.schema) {
17
- return <div>No data to show. There is no schema is.</div>
25
+ if (data.changesets.length === 0) {
26
+ return <div>No schema versions available for changelog.</div>
18
27
  }
19
28
 
20
29
  return (
21
- <ChangelogLayout versions={data.schema.versions}>
22
- <Changelog schema={data.schema} />
30
+ <ChangelogLayout versions={data.changesets}>
31
+ <Changelog changesets={data.changesets as [GraphqlChangeset.ChangeSet, ...GraphqlChangeset.ChangeSet[]]} />
23
32
  </ChangelogLayout>
24
33
  )
25
34
  }
@@ -0,0 +1,109 @@
1
+ import { createRoute } from '#lib/react-router-aid/react-router-aid'
2
+ import { createLoader, useLoaderData } from '#lib/react-router-loader/react-router-loader'
3
+ import { SidebarLayout } from '#template/layouts/index'
4
+ import { MDXProvider } from '@mdx-js/react'
5
+ import {
6
+ Badge,
7
+ Box,
8
+ Button,
9
+ Callout,
10
+ Card,
11
+ Code,
12
+ DataList,
13
+ Em,
14
+ Heading,
15
+ Link,
16
+ Quote,
17
+ Separator,
18
+ Strong,
19
+ Table,
20
+ Tabs,
21
+ Text,
22
+ Tooltip,
23
+ } from '@radix-ui/themes'
24
+ import { Outlet, useLocation } from 'react-router'
25
+ import PROJECT_DATA_PAGES_CATALOG from 'virtual:polen/project/data/pages-catalog.jsonsuper'
26
+ import { routes } from 'virtual:polen/project/routes.jsx'
27
+ import { CodeBlock } from '../components/CodeBlock.js'
28
+ import { schemaSource } from '../sources/schema-source.js'
29
+
30
+ const loader = createLoader(async () => {
31
+ // Check if schema exists first
32
+ if (schemaSource.isEmpty) {
33
+ return { schema: null }
34
+ }
35
+
36
+ // Fetch the latest schema for MDX pages
37
+ const schema = await schemaSource.get('latest')
38
+ return { schema }
39
+ })
40
+
41
+ const Component = () => {
42
+ const { schema } = useLoaderData<typeof loader>()
43
+ const location = useLocation()
44
+
45
+ // Build sidebar from pages catalog
46
+ // Get the top-level path segment (e.g., '/guide/foo' -> '/guide')
47
+ const pathSegments = location.pathname.split('/').filter(Boolean)
48
+ const topLevelPath = pathSegments[0] ? `/${pathSegments[0]}` : '/'
49
+
50
+ // Get the sidebar for this section
51
+ const sidebar = PROJECT_DATA_PAGES_CATALOG.sidebarIndex[topLevelPath]?.items || []
52
+
53
+ return (
54
+ <MDXProvider
55
+ components={{
56
+ // Map markdown elements to Radix with spacing
57
+ p: (props) => <Text as='p' mb='4' {...props} />,
58
+ h1: (props) => <Heading size='8' mt='6' mb='4' {...props} />,
59
+ h2: (props) => <Heading size='7' mt='6' mb='3' {...props} />,
60
+ h3: (props) => <Heading size='6' mt='5' mb='3' {...props} />,
61
+ h4: (props) => <Heading size='5' mt='5' mb='2' {...props} />,
62
+ h5: (props) => <Heading size='4' mt='4' mb='2' {...props} />,
63
+ h6: (props) => <Heading size='3' mt='4' mb='2' {...props} />,
64
+ strong: Strong,
65
+ em: Em,
66
+ code: Code,
67
+ blockquote: (props) => <Quote my='4' {...props} />,
68
+ a: Link,
69
+ hr: (props) => <Separator my='6' {...props} />,
70
+ table: Table.Root,
71
+ thead: Table.Header,
72
+ tbody: Table.Body,
73
+ tr: Table.Row,
74
+ th: Table.ColumnHeaderCell,
75
+ td: Table.Cell,
76
+ // Lists need spacing too
77
+ ul: (props) => <Box as='ul' mb='4' style={{ paddingLeft: '1.5rem' }} {...props} />,
78
+ ol: (props) => <Box as='ol' mb='4' style={{ paddingLeft: '1.5rem' }} {...props} />,
79
+ li: (props) => <Box as='li' mb='2' {...props} />,
80
+
81
+ // Direct Radix components for MDX
82
+ Badge,
83
+ Button,
84
+ // @ts-expect-error
85
+ Callout,
86
+ Card,
87
+ // @ts-expect-error
88
+ DataList,
89
+ // @ts-expect-error
90
+ Tabs,
91
+ Tooltip,
92
+
93
+ // Code Hike component with schema injected
94
+ CodeBlock: (props: any) => <CodeBlock {...props} schema={schema} />,
95
+ }}
96
+ >
97
+ <SidebarLayout sidebar={sidebar}>
98
+ <Outlet />
99
+ </SidebarLayout>
100
+ </MDXProvider>
101
+ )
102
+ }
103
+
104
+ export const pages = createRoute({
105
+ // Pathless layout route - doesn't affect URL paths
106
+ loader,
107
+ Component,
108
+ children: [...routes], // All MDX page routes go here
109
+ })
@@ -29,6 +29,6 @@ const Component = () => {
29
29
  }
30
30
 
31
31
  export const reference$type$field = ReactRouterAid.createRoute({
32
- path: `:type/:field`,
32
+ path: `:field`,
33
33
  Component,
34
34
  })
@@ -3,6 +3,7 @@ import { useLoaderData } from '#lib/react-router-loader/react-router-loader'
3
3
  import { useParams } from 'react-router'
4
4
  import { MissingSchema } from '../components/MissingSchema.js'
5
5
  import { NamedType } from '../components/NamedType.js'
6
+ import { reference$type$field } from './reference.$type.$field.js'
6
7
  import type { reference } from './reference.js'
7
8
 
8
9
  const Component = () => {
@@ -24,4 +25,5 @@ const Component = () => {
24
25
  export const reference$type = createRoute({
25
26
  path: `:type`,
26
27
  Component,
28
+ children: [reference$type$field],
27
29
  })
@@ -2,16 +2,30 @@ import type { Content } from '#api/content/$'
2
2
  import { GrafaidOld } from '#lib/grafaid-old/index'
3
3
  import { createRoute } from '#lib/react-router-aid/react-router-aid'
4
4
  import { createLoader, useLoaderData } from '#lib/react-router-loader/react-router-loader'
5
+ import { Box } from '@radix-ui/themes'
5
6
  import { Outlet } from 'react-router'
6
- import PROJECT_DATA from 'virtual:polen/project/data.jsonsuper'
7
7
  import { MissingSchema } from '../components/MissingSchema.js'
8
+ import { VersionSelector } from '../components/VersionSelector.js'
9
+ import { useVersionPath } from '../hooks/useVersionPath.js'
8
10
  import { SidebarLayout } from '../layouts/index.js'
11
+ import { VERSION_LATEST } from '../lib/schema-utils/constants.js'
12
+ import { schemaSource } from '../sources/schema-source.js'
9
13
  import { reference$type } from './reference.$type.js'
14
+ import { referenceVersion$version$type } from './reference.version.$version.$type.js'
15
+
16
+ const loader = createLoader(async ({ params }) => {
17
+ // Handle both versioned and unversioned routes:
18
+ // - Versioned: /reference/version/:version/:type → params.version exists
19
+ // - Unversioned: /reference/:type → params.version is undefined, defaults to latest
20
+ const currentVersion = params.version ?? VERSION_LATEST
21
+
22
+ const schema = await schemaSource.get(currentVersion)
23
+ const availableVersions = schemaSource.versions
10
24
 
11
- const loader = createLoader(() => {
12
- const latestSchemaVersion = PROJECT_DATA.schema?.versions[0].after ?? null
13
25
  return {
14
- schema: latestSchemaVersion,
26
+ schema,
27
+ currentVersion,
28
+ availableVersions,
15
29
  }
16
30
  })
17
31
 
@@ -28,6 +42,9 @@ const Component = () => {
28
42
  const sidebarItems: Content.Item[] = []
29
43
  const kindEntries = Object.entries(kindMap.list).filter(([_, types]) => types.length > 0)
30
44
 
45
+ // Build path prefix based on current version using new route structure
46
+ const versionPath = useVersionPath()
47
+
31
48
  for (const [title, types] of kindEntries) {
32
49
  sidebarItems.push({
33
50
  type: `ItemSection` as const,
@@ -37,21 +54,36 @@ const Component = () => {
37
54
  links: types.map(type => ({
38
55
  type: `ItemLink` as const,
39
56
  title: type.name,
40
- pathExp: `reference/${type.name}`,
57
+ pathExp: `reference/${versionPath}${type.name}`,
41
58
  })),
42
59
  })
43
60
  }
44
61
 
45
62
  return (
46
63
  <SidebarLayout sidebar={sidebarItems}>
64
+ <Box mb={`4`}>
65
+ <VersionSelector
66
+ availableVersions={data.availableVersions}
67
+ currentVersion={data.currentVersion}
68
+ />
69
+ </Box>
47
70
  <Outlet />
48
71
  </SidebarLayout>
49
72
  )
50
73
  }
51
74
 
75
+ // Create the versioned reference route with explicit version prefix
76
+ const referenceVersioned = createRoute({
77
+ path: `version/:version`,
78
+ loader,
79
+ Component,
80
+ children: [referenceVersion$version$type],
81
+ })
82
+
83
+ // Create the main reference route with explicit version path and fallback type path
52
84
  export const reference = createRoute({
53
85
  path: `reference`,
54
86
  loader,
55
87
  Component,
56
- children: [reference$type],
88
+ children: [referenceVersioned, reference$type],
57
89
  })
@@ -0,0 +1,35 @@
1
+ import { Grafaid } from '#lib/grafaid/index'
2
+ import { createRoute } from '#lib/react-router-aid/react-router-aid'
3
+ import { useLoaderData } from '#lib/react-router-loader/react-router-loader'
4
+ import { useParams } from 'react-router'
5
+ import { Field } from '../components/Field.js'
6
+ import { MissingSchema } from '../components/MissingSchema.js'
7
+ import type { reference } from './reference.js'
8
+
9
+ const Component = () => {
10
+ const params = useParams() as { type: string; field: string; version: string }
11
+ const data = useLoaderData<typeof reference.loader>(`reference`)
12
+ if (!data.schema) {
13
+ return <MissingSchema />
14
+ }
15
+
16
+ const type = data.schema.getType(params.type)
17
+ if (!type) return `Could not find type ${params.type}`
18
+ if (!Grafaid.Schema.TypesLike.isFielded(type)) {
19
+ return `Type ${params.type} does not have fields`
20
+ }
21
+
22
+ const fields = type.getFields()
23
+ const field = fields[params.field]
24
+ if (!field) {
25
+ return `Could not find field ${params.field} on type ${params.type}`
26
+ }
27
+
28
+ return <Field data={field} />
29
+ }
30
+
31
+ export const referenceVersion$version$type$field = createRoute({
32
+ id: `reference-version-type-field`,
33
+ path: `:field`,
34
+ Component,
35
+ })
@@ -0,0 +1,30 @@
1
+ import { createRoute } from '#lib/react-router-aid/react-router-aid'
2
+ import { useLoaderData } from '#lib/react-router-loader/react-router-loader'
3
+ import { useParams } from 'react-router'
4
+ import { MissingSchema } from '../components/MissingSchema.js'
5
+ import { NamedType } from '../components/NamedType.js'
6
+ import type { reference } from './reference.js'
7
+ import { referenceVersion$version$type$field } from './reference.version.$version.$type.$field.js'
8
+
9
+ const Component = () => {
10
+ const params = useParams() as { type: string; version: string }
11
+
12
+ const data = useLoaderData<typeof reference.loader>(`reference`)
13
+ if (!data.schema) {
14
+ return <MissingSchema />
15
+ }
16
+
17
+ const type = data.schema.getType(params.type)
18
+ if (!type) {
19
+ return <div>Type not found: {params.type}</div>
20
+ }
21
+
22
+ return <NamedType data={type} />
23
+ }
24
+
25
+ export const referenceVersion$version$type = createRoute({
26
+ id: `reference-version-type`,
27
+ path: `:type`,
28
+ Component,
29
+ children: [referenceVersion$version$type$field],
30
+ })
@@ -1,38 +1,12 @@
1
1
  import type { ReactRouter } from '#dep/react-router/index'
2
2
  import { createRoute } from '#lib/react-router-aid/react-router-aid'
3
- import { SidebarLayout } from '#template/layouts/index'
4
- import { MDXProvider } from '@mdx-js/react'
5
- import {
6
- Badge,
7
- Box,
8
- Button,
9
- Callout,
10
- Card,
11
- Code,
12
- DataList,
13
- Em,
14
- Flex,
15
- Heading,
16
- Link,
17
- Quote,
18
- Separator,
19
- Strong,
20
- Table,
21
- Tabs,
22
- Text,
23
- Theme,
24
- Tooltip,
25
- } from '@radix-ui/themes'
26
- import { Link as LinkReactRouter, useLocation } from 'react-router'
3
+ import { Box, Flex, Theme } from '@radix-ui/themes'
4
+ import { Link as LinkReactRouter } from 'react-router'
27
5
  import { Outlet, ScrollRestoration } from 'react-router'
28
6
  import logoSrc from 'virtual:polen/project/assets/logo.svg'
29
7
  import PROJECT_DATA from 'virtual:polen/project/data.jsonsuper'
30
- import PROJECT_DATA_PAGES_CATALOG from 'virtual:polen/project/data/pages-catalog.jsonsuper'
31
- import { routes } from 'virtual:polen/project/routes.jsx'
8
+ import PROJECT_SCHEMA from 'virtual:polen/project/schema.jsonsuper'
32
9
  import { templateVariables } from 'virtual:polen/template/variables'
33
- import { GraphQLSchemaProvider } from '../../lib/graphql-document/schema-context.js'
34
- import { CodeBlock } from '../components/CodeBlock.js'
35
- import { Pre } from '../components/CodeHikePre.js'
36
10
  import { Link as PolenLink } from '../components/Link.js'
37
11
  import { Logo } from '../components/Logo.js'
38
12
  import { NotFound } from '../components/NotFound.js'
@@ -40,22 +14,14 @@ import { ThemeToggle } from '../components/ThemeToggle.js'
40
14
  import { ThemeProvider, useTheme } from '../contexts/ThemeContext.js'
41
15
  import { changelog } from './changelog.js'
42
16
  import { index } from './index.js'
17
+ import { pages } from './pages.js'
43
18
  import { reference } from './reference.js'
44
19
 
45
20
  export const Component = () => {
46
- const schema = PROJECT_DATA.schema?.versions[0]?.after || null
47
-
48
- // Make schema available globally for MDX components
49
- if (typeof window !== `undefined` && schema) {
50
- ;(window as any).__POLEN_GRAPHQL_SCHEMA__ = schema
51
- }
52
-
53
21
  return (
54
22
  <>
55
23
  <ThemeProvider>
56
- <GraphQLSchemaProvider schema={schema}>
57
- <Layout />
58
- </GraphQLSchemaProvider>
24
+ <Layout />
59
25
  </ThemeProvider>
60
26
  <ScrollRestoration />
61
27
  </>
@@ -105,82 +71,15 @@ const Layout = () => {
105
71
  py={{ initial: `4`, sm: `4`, md: `0` }}
106
72
  >
107
73
  {header}
108
- <MDXProvider
109
- components={{
110
- // Map markdown elements to Radix with spacing
111
- p: (props) => <Text as='p' mb='4' {...props} />,
112
- h1: (props) => <Heading size='8' mt='6' mb='4' {...props} />,
113
- h2: (props) => <Heading size='7' mt='6' mb='3' {...props} />,
114
- h3: (props) => <Heading size='6' mt='5' mb='3' {...props} />,
115
- h4: (props) => <Heading size='5' mt='5' mb='2' {...props} />,
116
- h5: (props) => <Heading size='4' mt='4' mb='2' {...props} />,
117
- h6: (props) => <Heading size='3' mt='4' mb='2' {...props} />,
118
- strong: Strong,
119
- em: Em,
120
- code: Code,
121
- blockquote: (props) => <Quote my='4' {...props} />,
122
- a: Link,
123
- hr: (props) => <Separator my='6' {...props} />,
124
- pre: Pre,
125
- table: Table.Root,
126
- thead: Table.Header,
127
- tbody: Table.Body,
128
- tr: Table.Row,
129
- th: Table.ColumnHeaderCell,
130
- td: Table.Cell,
131
- // Lists need spacing too
132
- ul: (props) => <Box as='ul' mb='4' style={{ paddingLeft: '1.5rem' }} {...props} />,
133
- ol: (props) => <Box as='ol' mb='4' style={{ paddingLeft: '1.5rem' }} {...props} />,
134
- li: (props) => <Box as='li' mb='2' {...props} />,
135
-
136
- // Direct Radix components for MDX
137
- Badge,
138
- Button,
139
- // @ts-expect-error
140
- Callout,
141
- Card,
142
- // @ts-expect-error
143
- DataList,
144
- // @ts-expect-error
145
- Tabs,
146
- Tooltip,
147
-
148
- // Code Hike component
149
- CodeBlock,
150
- }}
151
- >
152
- <Outlet />
153
- </MDXProvider>
74
+ <Outlet />
154
75
  </Box>
155
76
  </Theme>
156
77
  )
157
78
  }
158
79
 
159
- const PagesLayout = () => {
160
- const location = useLocation() // Add this line
161
-
162
- // Build sidebar from pages catalog
163
- // Get the top-level path segment (e.g., '/guide/foo' -> '/guide')
164
- const pathSegments = location.pathname.split('/').filter(Boolean)
165
- const topLevelPath = pathSegments[0] ? `/${pathSegments[0]}` : '/'
166
-
167
- // Get the sidebar for this section
168
- const sidebar = PROJECT_DATA_PAGES_CATALOG.sidebarIndex[topLevelPath]?.items || []
169
-
170
- return (
171
- <SidebarLayout sidebar={sidebar}>
172
- <Outlet />
173
- </SidebarLayout>
174
- )
175
- }
176
-
177
80
  const children: ReactRouter.RouteObject[] = [
178
81
  index,
179
- {
180
- // Pathless layout route - doesn't affect URL paths
181
- Component: PagesLayout,
182
- children: [...routes], // All MDX page routes go here
183
- },
82
+ pages,
184
83
  ]
185
84
 
186
85
  //
@@ -192,7 +91,7 @@ const children: ReactRouter.RouteObject[] = [
192
91
  //
193
92
  //
194
93
 
195
- if (PROJECT_DATA.schema) {
94
+ if (PROJECT_SCHEMA) {
196
95
  children.push(changelog)
197
96
  children.push(reference)
198
97
  }
@@ -1,7 +1,6 @@
1
1
  import { Hono } from '#dep/hono/index'
2
2
  import { createHtmlTransformer, type HtmlTransformer } from '#lib/html-utils/html-transformer'
3
3
  import { serveStatic } from '@hono/node-server/serve-static'
4
- import PROJECT_DATA from 'virtual:polen/project/data.jsonsuper'
5
4
  import viteClientAssetManifest from 'virtual:polen/vite/client/manifest'
6
5
  import { injectManifestIntoHtml } from './manifest.js'
7
6
  import { PageMiddleware } from './middleware/page.js'
@@ -9,16 +8,60 @@ import { UnsupportedAssetsMiddleware } from './middleware/unsupported-assets.js'
9
8
  import { createPolenDataInjector } from './transformers/inject-polen-data.js'
10
9
  import { createThemeInitInjector } from './transformers/inject-theme-init.js'
11
10
 
11
+ export type App = Hono.Hono
12
+
12
13
  export interface AppHooks {
13
14
  transformHtml?: HtmlTransformer[]
14
15
  }
15
16
 
16
17
  export interface AppOptions {
17
18
  hooks?: AppHooks
19
+ paths: {
20
+ base: string
21
+ assets: {
22
+ /**
23
+ * Directory path for serving static assets.
24
+ * MUST be a relative path from process.cwd() due to @hono/node-server constraints.
25
+ * Absolute paths are NOT supported by the serveStatic middleware.
26
+ *
27
+ * @example './node_modules/.vite/polen-assets'
28
+ * @example '../../../polen/node_modules/.vite/polen-assets'
29
+ * @example './dist/assets'
30
+ */
31
+ directory: string
32
+ /**
33
+ * URL route prefix for serving assets
34
+ * @example '/assets'
35
+ */
36
+ route: string
37
+ }
38
+ }
18
39
  }
19
40
 
20
- export const createApp = (options: AppOptions = {}) => {
21
- const app = new Hono.Hono()
41
+ export const createApp = (options: AppOptions) => {
42
+ const app = new Hono.Hono().basePath(options.paths.base)
43
+
44
+ // Static file serving
45
+ app.use(`*`, UnsupportedAssetsMiddleware())
46
+
47
+ const assetsRoutePattern = `${options.paths.assets.route}/*`
48
+
49
+ app.use(
50
+ assetsRoutePattern,
51
+ serveStatic({
52
+ root: options.paths.assets.directory,
53
+ rewriteRequestPath: (path) => {
54
+ // When basePath is set, the full path including base is passed here
55
+ // We need to strip both the base path and the assets route
56
+ const basePath = options.paths.base === '/' ? '' : options.paths.base
57
+ const fullPrefix = `${basePath}${options.paths.assets.route}`
58
+ return path.replace(new RegExp(`^${fullPrefix}`), '')
59
+ },
60
+ onNotFound(path) {
61
+ console.log('not found', path)
62
+ },
63
+ }),
64
+ )
22
65
 
23
66
  // Collect all HTML transformers
24
67
  const htmlTransformers: HtmlTransformer[] = [
@@ -29,21 +72,11 @@ export const createApp = (options: AppOptions = {}) => {
29
72
  ...(options.hooks?.transformHtml || []),
30
73
  ]
31
74
 
32
- // Core middleware
33
- app.use(`*`, UnsupportedAssetsMiddleware())
34
-
35
- // Production-specific setup
36
75
  if (__BUILDING__) {
37
76
  // Add manifest transformer
38
77
  htmlTransformers.push(createHtmlTransformer((html, ___ctx) => {
39
- return injectManifestIntoHtml(html, viteClientAssetManifest, PROJECT_DATA.basePath)
78
+ return injectManifestIntoHtml(html, viteClientAssetManifest, options.paths.base)
40
79
  }))
41
-
42
- // Static file serving
43
- app.use(
44
- PROJECT_DATA.server.static.route,
45
- serveStatic({ root: PROJECT_DATA.server.static.directory }),
46
- )
47
80
  }
48
81
 
49
82
  app.all(`*`, PageMiddleware(htmlTransformers))
@@ -12,7 +12,15 @@ if (__BUILDING__) {
12
12
  break
13
13
  case `ssr`:
14
14
  const port = process.env[`PORT`] ? parseInt(process.env[`PORT`]) : PROJECT_DATA.server.port
15
- const app = createApp()
15
+ const app = createApp({
16
+ paths: {
17
+ assets: {
18
+ directory: PROJECT_DATA.paths.project.relative.build.relative.assets.root,
19
+ route: PROJECT_DATA.server.routes.assets,
20
+ },
21
+ base: PROJECT_DATA.basePath,
22
+ },
23
+ })
16
24
  serve({ fetch: app.fetch, port })
17
25
  break
18
26
  case `spa`: