@lupinum/ginko-content 0.1.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 (512) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +90 -0
  3. package/compatibility.json +27 -0
  4. package/dist/cli.d.mts +1 -0
  5. package/dist/cli.mjs +690 -0
  6. package/dist/cms-contract/build +1 -0
  7. package/dist/cms-contract/build.d.ts +44 -0
  8. package/dist/cms-contract/build.js +513 -0
  9. package/dist/cms-contract/index +1 -0
  10. package/dist/cms-contract/index.d.ts +25 -0
  11. package/dist/cms-contract/index.js +37 -0
  12. package/dist/cms-contract/mdc +1 -0
  13. package/dist/cms-contract/mdc.d.ts +32 -0
  14. package/dist/cms-contract/mdc.js +52 -0
  15. package/dist/cms-contract/path +1 -0
  16. package/dist/cms-contract/path.d.ts +12 -0
  17. package/dist/cms-contract/path.js +18 -0
  18. package/dist/cms-contract/schema +1 -0
  19. package/dist/cms-contract/schema.d.ts +18 -0
  20. package/dist/cms-contract/schema.js +13 -0
  21. package/dist/cms-contract/types +1 -0
  22. package/dist/cms-contract/types.d.ts +177 -0
  23. package/dist/cms-contract/types.js +0 -0
  24. package/dist/cms-import/index +1 -0
  25. package/dist/cms-import/index.d.ts +21 -0
  26. package/dist/cms-import/index.js +57 -0
  27. package/dist/config.d.mts +3 -0
  28. package/dist/config.mjs +3 -0
  29. package/dist/core/cache +1 -0
  30. package/dist/core/cache-hints +1 -0
  31. package/dist/core/cache-hints.d.ts +3 -0
  32. package/dist/core/cache-hints.js +55 -0
  33. package/dist/core/cache.d.ts +29 -0
  34. package/dist/core/cache.js +0 -0
  35. package/dist/core/content/collection +1 -0
  36. package/dist/core/content/collection.d.ts +3 -0
  37. package/dist/core/content/collection.js +52 -0
  38. package/dist/core/content/graph +1 -0
  39. package/dist/core/content/graph.d.ts +147 -0
  40. package/dist/core/content/graph.js +189 -0
  41. package/dist/core/content/ignore +1 -0
  42. package/dist/core/content/ignore.d.ts +5 -0
  43. package/dist/core/content/ignore.js +10 -0
  44. package/dist/core/content/locale +1 -0
  45. package/dist/core/content/locale.d.ts +61 -0
  46. package/dist/core/content/locale.js +77 -0
  47. package/dist/core/content/path +1 -0
  48. package/dist/core/content/path.d.ts +36 -0
  49. package/dist/core/content/path.js +143 -0
  50. package/dist/core/content/slug +1 -0
  51. package/dist/core/content/slug.d.ts +4 -0
  52. package/dist/core/content/slug.js +41 -0
  53. package/dist/core/content/sources +1 -0
  54. package/dist/core/content/sources.d.ts +2 -0
  55. package/dist/core/content/sources.js +6 -0
  56. package/dist/core/errors +1 -0
  57. package/dist/core/errors.d.ts +15 -0
  58. package/dist/core/errors.js +10 -0
  59. package/dist/core/markdown/tree +1 -0
  60. package/dist/core/markdown/tree.d.ts +9 -0
  61. package/dist/core/markdown/tree.js +47 -0
  62. package/dist/core/query/builder +1 -0
  63. package/dist/core/query/builder.d.ts +18 -0
  64. package/dist/core/query/builder.js +186 -0
  65. package/dist/core/query/execute +1 -0
  66. package/dist/core/query/execute.d.ts +52 -0
  67. package/dist/core/query/execute.js +304 -0
  68. package/dist/core/query/filter +1 -0
  69. package/dist/core/query/filter.d.ts +42 -0
  70. package/dist/core/query/filter.js +118 -0
  71. package/dist/core/query/json +1 -0
  72. package/dist/core/query/json.d.ts +2 -0
  73. package/dist/core/query/json.js +20 -0
  74. package/dist/core/query/lower +1 -0
  75. package/dist/core/query/lower.d.ts +14 -0
  76. package/dist/core/query/lower.js +121 -0
  77. package/dist/core/query/operators +1 -0
  78. package/dist/core/query/operators.d.ts +23 -0
  79. package/dist/core/query/operators.js +126 -0
  80. package/dist/core/query/params +1 -0
  81. package/dist/core/query/params.d.ts +15 -0
  82. package/dist/core/query/params.js +83 -0
  83. package/dist/core/query/plan +1 -0
  84. package/dist/core/query/plan.d.ts +110 -0
  85. package/dist/core/query/plan.js +0 -0
  86. package/dist/core/references/resolve +1 -0
  87. package/dist/core/references/resolve.d.ts +31 -0
  88. package/dist/core/references/resolve.js +121 -0
  89. package/dist/core/references/schema +1 -0
  90. package/dist/core/references/schema.d.ts +8 -0
  91. package/dist/core/references/schema.js +70 -0
  92. package/dist/core/result +1 -0
  93. package/dist/core/result.d.ts +27 -0
  94. package/dist/core/result.js +2 -0
  95. package/dist/features/collections/resolve +1 -0
  96. package/dist/features/collections/resolve.d.ts +63 -0
  97. package/dist/features/collections/resolve.js +76 -0
  98. package/dist/features/localization/config +1 -0
  99. package/dist/features/localization/config.d.ts +18 -0
  100. package/dist/features/localization/config.js +25 -0
  101. package/dist/features/localization/links +1 -0
  102. package/dist/features/localization/links.d.ts +1 -0
  103. package/dist/features/localization/links.js +69 -0
  104. package/dist/features/localization/path +1 -0
  105. package/dist/features/localization/path.d.ts +32 -0
  106. package/dist/features/localization/path.js +80 -0
  107. package/dist/features/localization/results +1 -0
  108. package/dist/features/localization/results.d.ts +42 -0
  109. package/dist/features/localization/results.js +149 -0
  110. package/dist/features/localization/translated-slugs +1 -0
  111. package/dist/features/localization/translated-slugs.d.ts +11 -0
  112. package/dist/features/localization/translated-slugs.js +80 -0
  113. package/dist/features/navigation/build +1 -0
  114. package/dist/features/navigation/build.d.ts +28 -0
  115. package/dist/features/navigation/build.js +104 -0
  116. package/dist/features/navigation/canonical +1 -0
  117. package/dist/features/navigation/canonical.d.ts +33 -0
  118. package/dist/features/navigation/canonical.js +149 -0
  119. package/dist/features/navigation/query +1 -0
  120. package/dist/features/navigation/query.d.ts +19 -0
  121. package/dist/features/navigation/query.js +51 -0
  122. package/dist/features/navigation/resolve +1 -0
  123. package/dist/features/navigation/resolve.d.ts +20 -0
  124. package/dist/features/navigation/resolve.js +79 -0
  125. package/dist/features/navigation/tree +1 -0
  126. package/dist/features/navigation/tree.d.ts +6 -0
  127. package/dist/features/navigation/tree.js +32 -0
  128. package/dist/features/search/navigation +1 -0
  129. package/dist/features/search/navigation.d.ts +6 -0
  130. package/dist/features/search/navigation.js +21 -0
  131. package/dist/features/search/sections +1 -0
  132. package/dist/features/search/sections.d.ts +21 -0
  133. package/dist/features/search/sections.js +98 -0
  134. package/dist/features/sitemap/query +1 -0
  135. package/dist/features/sitemap/query.d.ts +68 -0
  136. package/dist/features/sitemap/query.js +171 -0
  137. package/dist/integrations/nitro/context +1 -0
  138. package/dist/integrations/nitro/context.d.ts +63 -0
  139. package/dist/integrations/nitro/context.js +28 -0
  140. package/dist/integrations/nitro/ingest +1 -0
  141. package/dist/integrations/nitro/ingest.d.ts +18 -0
  142. package/dist/integrations/nitro/ingest.js +120 -0
  143. package/dist/integrations/nitro/preview +1 -0
  144. package/dist/integrations/nitro/preview.d.ts +5 -0
  145. package/dist/integrations/nitro/preview.js +21 -0
  146. package/dist/integrations/nitro/runtime-config +1 -0
  147. package/dist/integrations/nitro/runtime-config.d.ts +1 -0
  148. package/dist/integrations/nitro/runtime-config.js +4 -0
  149. package/dist/integrations/nitro/storage +1 -0
  150. package/dist/integrations/nitro/storage.d.ts +9 -0
  151. package/dist/integrations/nitro/storage.js +113 -0
  152. package/dist/integrations/vue/content-components +1 -0
  153. package/dist/integrations/vue/content-components.d.ts +24 -0
  154. package/dist/integrations/vue/content-components.js +67 -0
  155. package/dist/integrations/vue/html-tags +1 -0
  156. package/dist/integrations/vue/html-tags.d.ts +2 -0
  157. package/dist/integrations/vue/html-tags.js +119 -0
  158. package/dist/integrations/vue/markdown-refs +1 -0
  159. package/dist/integrations/vue/markdown-refs.d.ts +1 -0
  160. package/dist/integrations/vue/markdown-refs.js +1 -0
  161. package/dist/module.d.mts +2044 -0
  162. package/dist/module.json +12 -0
  163. package/dist/module.mjs +1381 -0
  164. package/dist/parsers/csv +1 -0
  165. package/dist/parsers/csv.d.ts +2 -0
  166. package/dist/parsers/csv.js +38 -0
  167. package/dist/parsers/from-csv +1 -0
  168. package/dist/parsers/from-csv.d.ts +20 -0
  169. package/dist/parsers/from-csv.js +85 -0
  170. package/dist/parsers/index +1 -0
  171. package/dist/parsers/index.d.ts +10 -0
  172. package/dist/parsers/index.js +50 -0
  173. package/dist/parsers/json +1 -0
  174. package/dist/parsers/json.d.ts +2 -0
  175. package/dist/parsers/json.js +29 -0
  176. package/dist/parsers/markdown +1 -0
  177. package/dist/parsers/markdown-plugins +1 -0
  178. package/dist/parsers/markdown-plugins.d.ts +3 -0
  179. package/dist/parsers/markdown-plugins.js +58 -0
  180. package/dist/parsers/markdown.d.ts +2 -0
  181. package/dist/parsers/markdown.js +64 -0
  182. package/dist/parsers/path-meta +1 -0
  183. package/dist/parsers/path-meta.d.ts +4 -0
  184. package/dist/parsers/path-meta.js +37 -0
  185. package/dist/parsers/utils +1 -0
  186. package/dist/parsers/utils.d.ts +2 -0
  187. package/dist/parsers/utils.js +3 -0
  188. package/dist/parsers/yaml +1 -0
  189. package/dist/parsers/yaml.d.ts +2 -0
  190. package/dist/parsers/yaml.js +19 -0
  191. package/dist/public/client +1 -0
  192. package/dist/public/client.d.ts +19 -0
  193. package/dist/public/client.js +26 -0
  194. package/dist/public/provider +1 -0
  195. package/dist/public/provider-errors +1 -0
  196. package/dist/public/provider-errors.d.ts +4 -0
  197. package/dist/public/provider-errors.js +28 -0
  198. package/dist/public/provider.d.ts +74 -0
  199. package/dist/public/provider.js +6 -0
  200. package/dist/public/server +1 -0
  201. package/dist/public/server.d.ts +19 -0
  202. package/dist/public/server.js +28 -0
  203. package/dist/runtime/app/components/ContentRenderer.d.vue.ts +62 -0
  204. package/dist/runtime/app/components/ContentRenderer.vue +84 -0
  205. package/dist/runtime/app/components/ContentRenderer.vue.d.ts +62 -0
  206. package/dist/runtime/app/components/ContentRendererInline.d.vue.ts +50 -0
  207. package/dist/runtime/app/components/ContentRendererInline.vue +97 -0
  208. package/dist/runtime/app/components/ContentRendererInline.vue.d.ts +50 -0
  209. package/dist/runtime/app/components/Prose/ProseCode.d.vue.ts +61 -0
  210. package/dist/runtime/app/components/Prose/ProseCode.vue +32 -0
  211. package/dist/runtime/app/components/Prose/ProseCode.vue.d.ts +61 -0
  212. package/dist/runtime/app/components/Prose/ProseCodeInline.d.vue.ts +13 -0
  213. package/dist/runtime/app/components/Prose/ProseCodeInline.vue +3 -0
  214. package/dist/runtime/app/components/Prose/ProseCodeInline.vue.d.ts +13 -0
  215. package/dist/runtime/app/components/Prose/ProseImg.d.vue.ts +59 -0
  216. package/dist/runtime/app/components/Prose/ProseImg.vue +59 -0
  217. package/dist/runtime/app/components/Prose/ProseImg.vue.d.ts +59 -0
  218. package/dist/runtime/app/components/Prose/ProsePre.d.vue.ts +79 -0
  219. package/dist/runtime/app/components/Prose/ProsePre.vue +42 -0
  220. package/dist/runtime/app/components/Prose/ProsePre.vue.d.ts +79 -0
  221. package/dist/runtime/app/components/internal/ContentRendererMarkdown.d.vue.ts +68 -0
  222. package/dist/runtime/app/components/internal/ContentRendererMarkdown.vue +99 -0
  223. package/dist/runtime/app/components/internal/ContentRendererMarkdown.vue.d.ts +68 -0
  224. package/dist/runtime/app/components/internal/MarkdownRenderer +1 -0
  225. package/dist/runtime/app/components/internal/MarkdownRenderer.d.ts +90 -0
  226. package/dist/runtime/app/components/internal/MarkdownRenderer.js +191 -0
  227. package/dist/runtime/app/composables/async-data +1 -0
  228. package/dist/runtime/app/composables/async-data.d.ts +2 -0
  229. package/dist/runtime/app/composables/async-data.js +4 -0
  230. package/dist/runtime/app/composables/content-i18n +1 -0
  231. package/dist/runtime/app/composables/content-i18n.d.ts +5 -0
  232. package/dist/runtime/app/composables/content-i18n.js +1 -0
  233. package/dist/runtime/app/composables/head +1 -0
  234. package/dist/runtime/app/composables/head.d.ts +11 -0
  235. package/dist/runtime/app/composables/head.js +98 -0
  236. package/dist/runtime/app/composables/locale +1 -0
  237. package/dist/runtime/app/composables/locale-context +1 -0
  238. package/dist/runtime/app/composables/locale-context.d.ts +5 -0
  239. package/dist/runtime/app/composables/locale-context.js +8 -0
  240. package/dist/runtime/app/composables/locale.d.ts +8 -0
  241. package/dist/runtime/app/composables/locale.js +15 -0
  242. package/dist/runtime/app/composables/navigation +1 -0
  243. package/dist/runtime/app/composables/navigation.d.ts +3 -0
  244. package/dist/runtime/app/composables/navigation.js +7 -0
  245. package/dist/runtime/app/composables/preview +1 -0
  246. package/dist/runtime/app/composables/preview.d.ts +5 -0
  247. package/dist/runtime/app/composables/preview.js +52 -0
  248. package/dist/runtime/app/composables/query-api +1 -0
  249. package/dist/runtime/app/composables/query-api.d.ts +27 -0
  250. package/dist/runtime/app/composables/query-api.js +46 -0
  251. package/dist/runtime/app/composables/route +1 -0
  252. package/dist/runtime/app/composables/route.d.ts +11 -0
  253. package/dist/runtime/app/composables/route.js +150 -0
  254. package/dist/runtime/app/composables/runtime +1 -0
  255. package/dist/runtime/app/composables/runtime.d.ts +2 -0
  256. package/dist/runtime/app/composables/runtime.js +7 -0
  257. package/dist/runtime/app/composables/search +1 -0
  258. package/dist/runtime/app/composables/search.d.ts +58 -0
  259. package/dist/runtime/app/composables/search.js +321 -0
  260. package/dist/runtime/app/composables/site-data +1 -0
  261. package/dist/runtime/app/composables/site-data.d.ts +12 -0
  262. package/dist/runtime/app/composables/site-data.js +12 -0
  263. package/dist/runtime/app/composables/toc +1 -0
  264. package/dist/runtime/app/composables/toc.d.ts +10 -0
  265. package/dist/runtime/app/composables/toc.js +31 -0
  266. package/dist/runtime/app/composables/use-content +1 -0
  267. package/dist/runtime/app/composables/use-content.d.ts +188 -0
  268. package/dist/runtime/app/composables/use-content.js +307 -0
  269. package/dist/runtime/app/composables/useUnwrap +1 -0
  270. package/dist/runtime/app/composables/useUnwrap.d.ts +8 -0
  271. package/dist/runtime/app/composables/useUnwrap.js +35 -0
  272. package/dist/runtime/app/composables/utils +1 -0
  273. package/dist/runtime/app/composables/utils.d.ts +22 -0
  274. package/dist/runtime/app/composables/utils.js +76 -0
  275. package/dist/runtime/app/composables/web-socket +1 -0
  276. package/dist/runtime/app/composables/web-socket.d.ts +3 -0
  277. package/dist/runtime/app/composables/web-socket.js +65 -0
  278. package/dist/runtime/app/pages/content.d.vue.ts +3 -0
  279. package/dist/runtime/app/pages/content.vue +14 -0
  280. package/dist/runtime/app/pages/content.vue.d.ts +3 -0
  281. package/dist/runtime/app/plugins/markdown-components +1 -0
  282. package/dist/runtime/app/plugins/markdown-components.d.ts +2 -0
  283. package/dist/runtime/app/plugins/markdown-components.js +19 -0
  284. package/dist/runtime/app/plugins/ws +1 -0
  285. package/dist/runtime/app/plugins/ws.d.ts +2 -0
  286. package/dist/runtime/app/plugins/ws.js +7 -0
  287. package/dist/runtime/app.d.vue.ts +3 -0
  288. package/dist/runtime/app.vue +3 -0
  289. package/dist/runtime/app.vue.d.ts +3 -0
  290. package/dist/runtime/markdown/plugins +1 -0
  291. package/dist/runtime/markdown/plugins.d.ts +3 -0
  292. package/dist/runtime/markdown/plugins.js +39 -0
  293. package/dist/runtime/query/public-limits +1 -0
  294. package/dist/runtime/query/public-limits.d.ts +2 -0
  295. package/dist/runtime/query/public-limits.js +2 -0
  296. package/dist/runtime/query/resolve +1 -0
  297. package/dist/runtime/query/resolve.d.ts +5 -0
  298. package/dist/runtime/query/resolve.js +9 -0
  299. package/dist/runtime/query/routes +1 -0
  300. package/dist/runtime/query/routes.d.ts +33 -0
  301. package/dist/runtime/query/routes.js +21 -0
  302. package/dist/runtime/query/unified +1 -0
  303. package/dist/runtime/query/unified.d.ts +94 -0
  304. package/dist/runtime/query/unified.js +473 -0
  305. package/dist/runtime/server/api/cache +1 -0
  306. package/dist/runtime/server/api/cache.d.ts +8 -0
  307. package/dist/runtime/server/api/cache.js +26 -0
  308. package/dist/runtime/server/api/locales +1 -0
  309. package/dist/runtime/server/api/locales.d.ts +6 -0
  310. package/dist/runtime/server/api/locales.js +28 -0
  311. package/dist/runtime/server/api/navigation +1 -0
  312. package/dist/runtime/server/api/navigation.d.ts +2 -0
  313. package/dist/runtime/server/api/navigation.js +21 -0
  314. package/dist/runtime/server/api/query +1 -0
  315. package/dist/runtime/server/api/query.d.ts +2 -0
  316. package/dist/runtime/server/api/query.js +6 -0
  317. package/dist/runtime/server/api/revalidate +1 -0
  318. package/dist/runtime/server/api/revalidate.d.ts +6 -0
  319. package/dist/runtime/server/api/revalidate.js +156 -0
  320. package/dist/runtime/server/api/search +1 -0
  321. package/dist/runtime/server/api/search-index +1 -0
  322. package/dist/runtime/server/api/search-index.d.ts +2 -0
  323. package/dist/runtime/server/api/search-index.js +20 -0
  324. package/dist/runtime/server/api/search.d.ts +2 -0
  325. package/dist/runtime/server/api/search.js +40 -0
  326. package/dist/runtime/server/api/site-data +1 -0
  327. package/dist/runtime/server/api/site-data.d.ts +2 -0
  328. package/dist/runtime/server/api/site-data.js +22 -0
  329. package/dist/runtime/server/api/sitemap +1 -0
  330. package/dist/runtime/server/api/sitemap.d.ts +2 -0
  331. package/dist/runtime/server/api/sitemap.js +11 -0
  332. package/dist/runtime/server/cache-adapter +1 -0
  333. package/dist/runtime/server/cache-adapter.d.ts +2 -0
  334. package/dist/runtime/server/cache-adapter.js +11 -0
  335. package/dist/runtime/server/cache-adapters +1 -0
  336. package/dist/runtime/server/cache-adapters.d.ts +9 -0
  337. package/dist/runtime/server/cache-adapters.js +50 -0
  338. package/dist/runtime/server/cache-hints +1 -0
  339. package/dist/runtime/server/cache-hints.d.ts +5 -0
  340. package/dist/runtime/server/cache-hints.js +17 -0
  341. package/dist/runtime/server/collection-helpers +1 -0
  342. package/dist/runtime/server/collection-helpers.d.ts +13 -0
  343. package/dist/runtime/server/collection-helpers.js +99 -0
  344. package/dist/runtime/server/index +1 -0
  345. package/dist/runtime/server/index.d.ts +9 -0
  346. package/dist/runtime/server/index.js +15 -0
  347. package/dist/runtime/server/manifest +1 -0
  348. package/dist/runtime/server/manifest.d.ts +1 -0
  349. package/dist/runtime/server/manifest.js +1 -0
  350. package/dist/runtime/server/navigation +1 -0
  351. package/dist/runtime/server/navigation-query +1 -0
  352. package/dist/runtime/server/navigation-query.d.ts +4 -0
  353. package/dist/runtime/server/navigation-query.js +80 -0
  354. package/dist/runtime/server/navigation.d.ts +2 -0
  355. package/dist/runtime/server/navigation.js +9 -0
  356. package/dist/runtime/server/pagefind +1 -0
  357. package/dist/runtime/server/pagefind.d.ts +2 -0
  358. package/dist/runtime/server/pagefind.js +30 -0
  359. package/dist/runtime/server/plugins/cache +1 -0
  360. package/dist/runtime/server/plugins/cache.d.ts +2 -0
  361. package/dist/runtime/server/plugins/cache.js +17 -0
  362. package/dist/runtime/server/plugins/sitemap +1 -0
  363. package/dist/runtime/server/plugins/sitemap.d.ts +2 -0
  364. package/dist/runtime/server/plugins/sitemap.js +25 -0
  365. package/dist/runtime/server/preview +1 -0
  366. package/dist/runtime/server/preview.d.ts +1 -0
  367. package/dist/runtime/server/preview.js +1 -0
  368. package/dist/runtime/server/provider-query +1 -0
  369. package/dist/runtime/server/provider-query.d.ts +27 -0
  370. package/dist/runtime/server/provider-query.js +131 -0
  371. package/dist/runtime/server/provider-result +1 -0
  372. package/dist/runtime/server/provider-result.d.ts +10 -0
  373. package/dist/runtime/server/provider-result.js +30 -0
  374. package/dist/runtime/server/providers/filesystem +1 -0
  375. package/dist/runtime/server/providers/filesystem.d.ts +2 -0
  376. package/dist/runtime/server/providers/filesystem.js +47 -0
  377. package/dist/runtime/server/providers/index +1 -0
  378. package/dist/runtime/server/providers/index.d.ts +3 -0
  379. package/dist/runtime/server/providers/index.js +190 -0
  380. package/dist/runtime/server/query-api +1 -0
  381. package/dist/runtime/server/query-api.d.ts +28 -0
  382. package/dist/runtime/server/query-api.js +54 -0
  383. package/dist/runtime/server/query-executor +1 -0
  384. package/dist/runtime/server/query-executor.d.ts +4 -0
  385. package/dist/runtime/server/query-executor.js +121 -0
  386. package/dist/runtime/server/runtime-config +1 -0
  387. package/dist/runtime/server/runtime-config.d.ts +1 -0
  388. package/dist/runtime/server/runtime-config.js +1 -0
  389. package/dist/runtime/server/search +1 -0
  390. package/dist/runtime/server/search.d.ts +18 -0
  391. package/dist/runtime/server/search.js +134 -0
  392. package/dist/runtime/server/sitemap +1 -0
  393. package/dist/runtime/server/sitemap-provider +1 -0
  394. package/dist/runtime/server/sitemap-provider.d.ts +10 -0
  395. package/dist/runtime/server/sitemap-provider.js +11 -0
  396. package/dist/runtime/server/sitemap.d.ts +6 -0
  397. package/dist/runtime/server/sitemap.js +45 -0
  398. package/dist/runtime/server/storage +1 -0
  399. package/dist/runtime/server/storage-access +1 -0
  400. package/dist/runtime/server/storage-access.d.ts +1 -0
  401. package/dist/runtime/server/storage-access.js +9 -0
  402. package/dist/runtime/server/storage.d.ts +2 -0
  403. package/dist/runtime/server/storage.js +2 -0
  404. package/dist/runtime/server/validation +1 -0
  405. package/dist/runtime/server/validation.d.ts +1 -0
  406. package/dist/runtime/server/validation.js +6 -0
  407. package/dist/runtime/shared/search +1 -0
  408. package/dist/runtime/shared/search.d.ts +2 -0
  409. package/dist/runtime/shared/search.js +89 -0
  410. package/dist/runtime/transformers/component-resolver +1 -0
  411. package/dist/runtime/transformers/component-resolver.d.ts +10 -0
  412. package/dist/runtime/transformers/component-resolver.js +30 -0
  413. package/dist/runtime/transformers/csv/from-csv +1 -0
  414. package/dist/runtime/transformers/csv/from-csv.d.ts +1 -0
  415. package/dist/runtime/transformers/csv/from-csv.js +1 -0
  416. package/dist/runtime/transformers/csv/index +1 -0
  417. package/dist/runtime/transformers/csv/index.d.ts +1 -0
  418. package/dist/runtime/transformers/csv/index.js +1 -0
  419. package/dist/runtime/transformers/define +1 -0
  420. package/dist/runtime/transformers/define.d.ts +1 -0
  421. package/dist/runtime/transformers/define.js +1 -0
  422. package/dist/runtime/transformers/index +1 -0
  423. package/dist/runtime/transformers/index.d.ts +1 -0
  424. package/dist/runtime/transformers/index.js +1 -0
  425. package/dist/runtime/transformers/json +1 -0
  426. package/dist/runtime/transformers/json.d.ts +1 -0
  427. package/dist/runtime/transformers/json.js +1 -0
  428. package/dist/runtime/transformers/markdown +1 -0
  429. package/dist/runtime/transformers/markdown.d.ts +1 -0
  430. package/dist/runtime/transformers/markdown.js +1 -0
  431. package/dist/runtime/transformers/path-meta +1 -0
  432. package/dist/runtime/transformers/path-meta.d.ts +2 -0
  433. package/dist/runtime/transformers/path-meta.js +2 -0
  434. package/dist/runtime/transformers/utils +1 -0
  435. package/dist/runtime/transformers/utils.d.ts +1 -0
  436. package/dist/runtime/transformers/utils.js +1 -0
  437. package/dist/runtime/transformers/yaml +1 -0
  438. package/dist/runtime/transformers/yaml.d.ts +1 -0
  439. package/dist/runtime/transformers/yaml.js +1 -0
  440. package/dist/runtime/utils/content-components +1 -0
  441. package/dist/runtime/utils/content-components.d.ts +9 -0
  442. package/dist/runtime/utils/content-components.js +16 -0
  443. package/dist/runtime/utils/query +1 -0
  444. package/dist/runtime/utils/query.d.ts +5 -0
  445. package/dist/runtime/utils/query.js +18 -0
  446. package/dist/runtime/virtual/transformers.d.ts +4 -0
  447. package/dist/runtime/virtual.d.ts +7 -0
  448. package/dist/storage/cache +1 -0
  449. package/dist/storage/cache.d.ts +32 -0
  450. package/dist/storage/cache.js +42 -0
  451. package/dist/storage/content +1 -0
  452. package/dist/storage/content.d.ts +41 -0
  453. package/dist/storage/content.js +86 -0
  454. package/dist/storage/contents +1 -0
  455. package/dist/storage/contents.d.ts +5 -0
  456. package/dist/storage/contents.js +116 -0
  457. package/dist/storage/driver +1 -0
  458. package/dist/storage/driver.d.ts +28 -0
  459. package/dist/storage/driver.js +22 -0
  460. package/dist/storage/graph +1 -0
  461. package/dist/storage/graph.d.ts +3 -0
  462. package/dist/storage/graph.js +14 -0
  463. package/dist/storage/manifest +1 -0
  464. package/dist/storage/manifest.d.ts +18 -0
  465. package/dist/storage/manifest.js +68 -0
  466. package/dist/storage/references +1 -0
  467. package/dist/storage/references.d.ts +13 -0
  468. package/dist/storage/references.js +78 -0
  469. package/dist/storage/validation +1 -0
  470. package/dist/storage/validation.d.ts +46 -0
  471. package/dist/storage/validation.js +341 -0
  472. package/dist/testing/provider-contract +1 -0
  473. package/dist/testing/provider-contract.d.ts +31 -0
  474. package/dist/testing/provider-contract.js +237 -0
  475. package/dist/testing/provider-fixture +1 -0
  476. package/dist/testing/provider-fixture.d.ts +65 -0
  477. package/dist/testing/provider-fixture.js +606 -0
  478. package/dist/types/api +1 -0
  479. package/dist/types/api.d.ts +47 -0
  480. package/dist/types/api.js +1 -0
  481. package/dist/types/config +1 -0
  482. package/dist/types/config.d.ts +281 -0
  483. package/dist/types/config.js +28 -0
  484. package/dist/types/content +1 -0
  485. package/dist/types/content.d.ts +311 -0
  486. package/dist/types/content.js +1 -0
  487. package/dist/types/fields +1 -0
  488. package/dist/types/fields.d.ts +81 -0
  489. package/dist/types/fields.js +146 -0
  490. package/dist/types/index +1 -0
  491. package/dist/types/index.d.ts +6 -0
  492. package/dist/types/index.js +6 -0
  493. package/dist/types/module +1 -0
  494. package/dist/types/module.d.ts +428 -0
  495. package/dist/types/module.js +0 -0
  496. package/dist/types/picomatch.d.ts +8 -0
  497. package/dist/types/query +1 -0
  498. package/dist/types/query.d.ts +862 -0
  499. package/dist/types/query.js +1 -0
  500. package/dist/types/reference +1 -0
  501. package/dist/types/reference.d.ts +1 -0
  502. package/dist/types/reference.js +1 -0
  503. package/dist/types/runtime +1 -0
  504. package/dist/types/runtime.d.ts +45 -0
  505. package/dist/types/runtime.js +1 -0
  506. package/dist/types/search +1 -0
  507. package/dist/types/search.d.ts +64 -0
  508. package/dist/types/search.js +0 -0
  509. package/dist/types/virtual.d.ts +19 -0
  510. package/dist/types.d.mts +11 -0
  511. package/dist/web-types.json +466 -0
  512. package/package.json +135 -0
@@ -0,0 +1,126 @@
1
+ const isNullish = (value) => value === null || value === void 0;
2
+ export const get = (obj, path) => path.split(".").reduce((acc, part) => acc && typeof acc === "object" ? acc[part] : void 0, obj);
3
+ const pickObject = (obj, condition) => Object.keys(obj).filter(condition).reduce((newObj, key) => Object.assign(newObj, { [key]: obj[key] }), {});
4
+ export const omit = (keys) => (obj) => keys && keys.length ? pickObject(obj, (key) => !keys.includes(key)) : obj;
5
+ export const apply = (fn) => (data) => Array.isArray(data) ? data.map((item) => fn(item)) : fn(data);
6
+ export const detectProperties = (keys) => {
7
+ const prefixes = [];
8
+ const properties = [];
9
+ for (const key of keys) {
10
+ if (["$", "_"].includes(key)) {
11
+ prefixes.push(key);
12
+ } else {
13
+ properties.push(key);
14
+ }
15
+ }
16
+ return { prefixes, properties };
17
+ };
18
+ export const withoutKeys = (keys = []) => (obj) => {
19
+ if (keys.length === 0 || !obj) {
20
+ return obj;
21
+ }
22
+ const { prefixes, properties } = detectProperties(keys);
23
+ return pickObject(obj, (key) => !properties.includes(key) && !prefixes.includes(key.charAt(0)));
24
+ };
25
+ export const withKeys = (keys = []) => (obj) => {
26
+ if (keys.length === 0 || !obj) {
27
+ return obj;
28
+ }
29
+ const { prefixes, properties } = detectProperties(keys);
30
+ return pickObject(obj, (key) => properties.includes(key) || prefixes.includes(key.charAt(0)));
31
+ };
32
+ export const sortList = (data, params) => {
33
+ const sortParams = params;
34
+ const comperable = new Intl.Collator(sortParams.$locale, {
35
+ numeric: sortParams.$numeric,
36
+ caseFirst: sortParams.$caseFirst,
37
+ sensitivity: sortParams.$sensitivity
38
+ });
39
+ const keys = Object.keys(params).filter((key) => !key.startsWith("$"));
40
+ for (const key of keys) {
41
+ data = data.sort((a, b) => {
42
+ const values = [get(a, key), get(b, key)].map((value) => {
43
+ if (value === null) {
44
+ return void 0;
45
+ }
46
+ if (value instanceof Date) {
47
+ return value.toISOString();
48
+ }
49
+ return typeof value === "undefined" ? void 0 : String(value);
50
+ });
51
+ if (params[key] === -1) {
52
+ values.reverse();
53
+ }
54
+ return comperable.compare(values[0] || "", values[1] || "");
55
+ });
56
+ }
57
+ return data;
58
+ };
59
+ export function assertArray(value, message = "Expected an array") {
60
+ if (!Array.isArray(value)) {
61
+ throw new TypeError(message);
62
+ }
63
+ }
64
+ export const ensureArray = (value) => {
65
+ return Array.isArray(value) ? value : isNullish(value) ? [] : [value];
66
+ };
67
+ const LOGICAL_QUERY_OPERATORS = /* @__PURE__ */ new Set(["$and", "$or", "$not"]);
68
+ export const SUPPORTED_QUERY_OPERATORS = [
69
+ "$eq",
70
+ "$ne",
71
+ "$gt",
72
+ "$gte",
73
+ "$lt",
74
+ "$lte",
75
+ "$in",
76
+ "$contains",
77
+ "$containsAny",
78
+ "$icontains",
79
+ "$exists",
80
+ "$type",
81
+ "$regex",
82
+ "$prefix",
83
+ "$options",
84
+ "$not"
85
+ ];
86
+ const isQueryOperatorRecord = (value) => {
87
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value) && !(value instanceof RegExp) && !(value instanceof Date);
88
+ };
89
+ export const containsStandaloneRegexOptions = (value) => {
90
+ if (!isQueryOperatorRecord(value)) {
91
+ return false;
92
+ }
93
+ if ("$options" in value && !("$regex" in value)) {
94
+ return true;
95
+ }
96
+ return Object.values(value).some((child) => {
97
+ if (Array.isArray(child)) {
98
+ return child.some(containsStandaloneRegexOptions);
99
+ }
100
+ return containsStandaloneRegexOptions(child);
101
+ });
102
+ };
103
+ export const findUnsupportedQueryOperator = (value, extraOperators = []) => {
104
+ if (!value || value instanceof RegExp || value instanceof Date) {
105
+ return void 0;
106
+ }
107
+ if (Array.isArray(value)) {
108
+ return value.map((item) => findUnsupportedQueryOperator(item, extraOperators)).find(Boolean);
109
+ }
110
+ if (!isQueryOperatorRecord(value)) {
111
+ return void 0;
112
+ }
113
+ for (const [key, nested] of Object.entries(value)) {
114
+ if (key.startsWith("$") && !LOGICAL_QUERY_OPERATORS.has(key) && !SUPPORTED_QUERY_OPERATORS.includes(key) && !extraOperators.includes(key)) {
115
+ return key;
116
+ }
117
+ const unsupported = findUnsupportedQueryOperator(nested, extraOperators);
118
+ if (unsupported) return unsupported;
119
+ }
120
+ };
121
+ export const assertSupportedQueryOperators = (value, extraOperators = []) => {
122
+ const unsupported = findUnsupportedQueryOperator(value, extraOperators);
123
+ if (unsupported) {
124
+ throw new TypeError(`Unsupported content query operator: ${unsupported}`);
125
+ }
126
+ };
@@ -0,0 +1 @@
1
+ export * from './params.js'
@@ -0,0 +1,15 @@
1
+ import type { ContentQueryBuilderParams, ContentQueryBuilderWhere } from '../../types/query';
2
+ import type { ContentCollectionI18nConfig } from '../../types/config';
3
+ export declare const encodeQueryParams: (params: ContentQueryBuilderParams) => string;
4
+ export declare const decodeQueryParams: (encoded: string) => any;
5
+ export declare const ensureQueryWhereArray: (where?: ContentQueryBuilderParams["where"]) => ContentQueryBuilderWhere[];
6
+ export declare const collectQueryWhere: (where: ContentQueryBuilderParams["where"], predicate: (condition: ContentQueryBuilderWhere) => boolean) => ContentQueryBuilderWhere[];
7
+ export declare const findQueryWhere: (where: ContentQueryBuilderParams["where"], predicate: (condition: ContentQueryBuilderWhere) => boolean) => ContentQueryBuilderWhere | undefined;
8
+ export declare const normalizeContentQueryParams: (params: ContentQueryBuilderParams, options?: {
9
+ path?: string;
10
+ collectionI18n?: ContentCollectionI18nConfig;
11
+ defaultLocale?: string;
12
+ localeFallback?: Record<string, string[]>;
13
+ activeLocale?: string;
14
+ includeDraftFilter?: boolean;
15
+ }) => ContentQueryBuilderParams;
@@ -0,0 +1,83 @@
1
+ import { buildLocaleFallbackChain } from "../content/locale.js";
2
+ import { jsonParse, jsonStringify } from "./json.js";
3
+ import { withoutTrailingSlash } from "ufo";
4
+ export const encodeQueryParams = (params) => {
5
+ let encoded = jsonStringify(params);
6
+ encoded = typeof Buffer !== "undefined" ? Buffer.from(encoded).toString("base64") : btoa(encoded);
7
+ encoded = encoded.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
8
+ const chunks = encoded.match(/.{1,100}/g) || [];
9
+ return chunks.join("/");
10
+ };
11
+ export const decodeQueryParams = (encoded) => {
12
+ encoded = encoded.replace(/\//g, "");
13
+ encoded = encoded.replace(/-/g, "+").replace(/_/g, "/");
14
+ encoded = encoded.padEnd(encoded.length + (4 - encoded.length % 4) % 4, "=");
15
+ return jsonParse(typeof Buffer !== "undefined" ? Buffer.from(encoded, "base64").toString() : atob(encoded));
16
+ };
17
+ const escapeContentPath = (path) => path.replace(/[-[\]{}()*+.,^$\s/]/g, "\\$&");
18
+ export const ensureQueryWhereArray = (where) => {
19
+ return Array.isArray(where) ? [...where] : where ? [where] : [];
20
+ };
21
+ export const collectQueryWhere = (where, predicate) => {
22
+ const matches = [];
23
+ const visit = (conditions) => {
24
+ for (const condition of ensureQueryWhereArray(conditions)) {
25
+ if (predicate(condition)) {
26
+ matches.push(condition);
27
+ }
28
+ if (condition.$and) {
29
+ visit(condition.$and);
30
+ }
31
+ if (condition.$or) {
32
+ visit(condition.$or);
33
+ }
34
+ if (condition.$not && typeof condition.$not === "object" && !Array.isArray(condition.$not) && !(condition.$not instanceof RegExp)) {
35
+ visit(condition.$not);
36
+ }
37
+ }
38
+ };
39
+ visit(where);
40
+ return matches;
41
+ };
42
+ export const findQueryWhere = (where, predicate) => collectQueryWhere(where, predicate)[0];
43
+ export const normalizeContentQueryParams = (params, options = {}) => {
44
+ const where = ensureQueryWhereArray(params.where);
45
+ const normalized = {
46
+ ...params,
47
+ where,
48
+ sort: params.sort ? [...params.sort] : params.sort
49
+ };
50
+ if (options.path) {
51
+ if (normalized.first && where.length === 0) {
52
+ where.push({ _path: withoutTrailingSlash(options.path) });
53
+ } else {
54
+ where.push({ _path: new RegExp(`^${escapeContentPath(options.path)}`) });
55
+ }
56
+ }
57
+ if (!normalized.sort?.length) {
58
+ normalized.sort = [{ _stem: 1, $numeric: true }];
59
+ }
60
+ if (normalized.resolveLocale?.locale && normalized.resolveLocale.fallback === true) {
61
+ normalized.resolveLocale = {
62
+ ...normalized.resolveLocale,
63
+ fallback: buildLocaleFallbackChain(
64
+ normalized.resolveLocale.locale,
65
+ options.collectionI18n?.defaultLocale || options.defaultLocale,
66
+ options.localeFallback
67
+ )
68
+ };
69
+ }
70
+ if (options.includeDraftFilter) {
71
+ if (!findQueryWhere(where, (item) => typeof item._draft !== "undefined")) {
72
+ where.push({ _draft: { $ne: true } });
73
+ }
74
+ }
75
+ if (options.collectionI18n?.locales.length && !normalized.resolveLocale && !normalized.resolveVariant) {
76
+ const queryLocale = findQueryWhere(where, (item) => typeof item._locale !== "undefined")?._locale;
77
+ const defaultLocale = options.activeLocale || options.collectionI18n.defaultLocale;
78
+ if (!queryLocale && defaultLocale) {
79
+ where.push({ _locale: defaultLocale });
80
+ }
81
+ }
82
+ return normalized;
83
+ };
@@ -0,0 +1 @@
1
+ export * from './plan.js'
@@ -0,0 +1,110 @@
1
+ /**
2
+ * The internal, **immutable**, executor-facing query AST.
3
+ *
4
+ * Pipeline: public `ContentQueryBuilder` → `params` object → `lowerQueryPlan`
5
+ * (see `./lower.ts`) → `ContentQueryPlan` → `executeQueryPlan`
6
+ * (see `./execute.ts`).
7
+ *
8
+ * The plan is the stable boundary between "how the user wrote the query"
9
+ * and "how we execute it." Downstream code should pattern-match on
10
+ * `FilterExpr.type` rather than reading builder params directly. The plan
11
+ * never carries Nuxt/H3/Vue concerns.
12
+ *
13
+ * The plan stays immutable so builders, lowerers, and executors can compose
14
+ * without hidden shared state.
15
+ */
16
+ /** Discriminator for a `{ type: 'compare' }` filter node. */
17
+ export type CompareOperator = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'contains' | 'containsAny' | 'icontains' | 'exists' | 'type' | 'regex' | 'prefix';
18
+ /**
19
+ * Normalized where-clause AST. `{ type: 'true' }` is the identity node used
20
+ * when the user did not pass any predicate; this keeps downstream code free
21
+ * of `if (!filter)` branches.
22
+ */
23
+ export type FilterExpr = {
24
+ type: 'true';
25
+ } | {
26
+ type: 'compare';
27
+ field: string;
28
+ operator: CompareOperator;
29
+ value?: unknown;
30
+ } | {
31
+ type: 'and';
32
+ clauses: FilterExpr[];
33
+ } | {
34
+ type: 'or';
35
+ clauses: FilterExpr[];
36
+ } | {
37
+ type: 'not';
38
+ clause: FilterExpr;
39
+ };
40
+ /**
41
+ * One sort term. Clauses are applied in order — earlier fields dominate;
42
+ * later fields act as tiebreakers.
43
+ */
44
+ export interface SortClause {
45
+ field: string;
46
+ direction: -1 | 1;
47
+ locale?: string;
48
+ numeric?: boolean;
49
+ caseFirst?: 'upper' | 'lower' | 'false';
50
+ sensitivity?: 'base' | 'accent' | 'case' | 'variant';
51
+ }
52
+ /** Projection is applied after filter/sort but before mode. `only` wins over `without` if both are set. */
53
+ export interface Projection {
54
+ only: string[];
55
+ without: string[];
56
+ }
57
+ /** Terminal shape of the query. Set by `.all()`, `.first()`, or `.count()` on the builder. */
58
+ export type QueryMode = 'all' | 'first' | 'count';
59
+ /**
60
+ * Locale resolution parameters. Populated when a caller uses `.locale(...)`
61
+ * on the builder or when the adapter injects the active request locale.
62
+ * When set, the executor dedupes variants across the fallback chain rather
63
+ * than returning every variant.
64
+ */
65
+ export interface LocaleResolution {
66
+ locale?: string;
67
+ fallback?: string[];
68
+ exact?: boolean;
69
+ }
70
+ /**
71
+ * Variant resolution for route-backed page lookup. Used by unified `one(...)`
72
+ * route selectors and internal route helpers to resolve a localized route path, then fall
73
+ * back through the locale chain if the requested locale is missing.
74
+ */
75
+ export interface VariantResolution {
76
+ /**
77
+ * Localized or canonical route path to look up via `byRoute` + locale chain.
78
+ * Mutually exclusive with `route` and `ref`.
79
+ */
80
+ path?: string;
81
+ /**
82
+ * Public app route to resolve through collection route mounts before looking
83
+ * up the locale variant. Mutually exclusive with `path` and `ref`.
84
+ */
85
+ route?: string;
86
+ /**
87
+ * Stable authored alias resolved through `byRef`/`referenceTargets` to a
88
+ * canonical key, then to the locale-correct variant. Mutually exclusive
89
+ * with `path` and `route`.
90
+ */
91
+ ref?: string;
92
+ locale?: string;
93
+ fallback?: string[];
94
+ exact?: boolean;
95
+ }
96
+ /**
97
+ * Complete executor-facing plan. Construct via `lowerQueryPlan(params)`;
98
+ * execute via `executeQueryPlan(graph, plan, options)`. Do not mutate.
99
+ */
100
+ export interface ContentQueryPlan {
101
+ collection?: string;
102
+ filter: FilterExpr;
103
+ sort: SortClause[];
104
+ projection: Projection;
105
+ skip: number;
106
+ limit?: number;
107
+ mode: QueryMode;
108
+ resolveLocale?: LocaleResolution;
109
+ resolveVariant?: VariantResolution;
110
+ }
File without changes
@@ -0,0 +1 @@
1
+ export * from './resolve.js'
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Reference resolution — turning a user-written identifier into a concrete
3
+ * document in the graph.
4
+ *
5
+ * Three vocabularies the user might reach for:
6
+ *
7
+ * - **Canonical key** — the locale-independent identity baked into the
8
+ * document at parse time (e.g. `guide/intro`). This is the authoritative
9
+ * form; everything else resolves *to* a canonical key.
10
+ * - **Ref** — an explicit `ref:` front-matter field. Authors use this
11
+ * when they want a stable short name unchained from file layout.
12
+ * - **Path-ish** — a locale-prefixed path (`de/leitfaden/einstieg`), a
13
+ * short slug, or a variant filename. `buildReferenceTargets` precomputes
14
+ * the full map of these shapes → canonical key so resolution is O(1).
15
+ *
16
+ * Contract: `resolveGraphCanonicalKey(graph, identity)` tries each
17
+ * vocabulary in order and returns `null` if nothing matches. Callers can
18
+ * trust that a returned canonical key exists in `graph.byCanonical`.
19
+ */
20
+ import type { ParsedContent } from '../../types/content';
21
+ /** Prefix recognized by `parseRefLink` for inline `$guide/intro` links in markdown. */
22
+ export declare const CONTENT_REF_LINK_PREFIX = "$";
23
+ /** Strip leading/trailing slashes so `/guide/intro/` and `guide/intro` hash to the same canonical form. */
24
+ export declare const normalizeReferenceValue: (value: string) => string;
25
+ export declare const parseRefLink: (value: string) => {
26
+ ref: string;
27
+ hash: string;
28
+ } | null;
29
+ export declare const collectMarkdownRefLinks: (node: unknown) => string[];
30
+ export declare const rewriteMarkdownRefLinks: <T>(node: T, resolvedRefs?: Record<string, string>) => T;
31
+ export declare const buildReferenceTargets: (contents: ParsedContent[], locales?: string[]) => Map<string, string>;
@@ -0,0 +1,121 @@
1
+ import { isMarkdownRoot, mapMarkdownNode } from "../markdown/tree.js";
2
+ export const CONTENT_REF_LINK_PREFIX = "$";
3
+ export const normalizeReferenceValue = (value) => String(value).replace(/^\/+|\/+$/g, "");
4
+ export const parseRefLink = (value) => {
5
+ if (typeof value !== "string" || !value.startsWith(CONTENT_REF_LINK_PREFIX)) {
6
+ return null;
7
+ }
8
+ const [rawRef, ...hashParts] = value.slice(CONTENT_REF_LINK_PREFIX.length).split("#");
9
+ const ref = normalizeReferenceValue(rawRef || "");
10
+ if (!ref) {
11
+ return null;
12
+ }
13
+ return {
14
+ ref,
15
+ hash: hashParts.length ? `#${hashParts.join("#")}` : ""
16
+ };
17
+ };
18
+ export const collectMarkdownRefLinks = (node) => {
19
+ const refs = /* @__PURE__ */ new Set();
20
+ const visit = (current) => {
21
+ if (!current || typeof current !== "object") {
22
+ return;
23
+ }
24
+ if (isMarkdownRoot(current)) {
25
+ current.children.forEach(visit);
26
+ return;
27
+ }
28
+ if (current.type === "element") {
29
+ const markdownNode = current;
30
+ const href2 = markdownNode.tag === "a" && typeof markdownNode.props?.href === "string" ? markdownNode.props.href : void 0;
31
+ if (href2 && parseRefLink(href2)) {
32
+ refs.add(href2);
33
+ }
34
+ markdownNode.children?.forEach(visit);
35
+ return;
36
+ }
37
+ if (Array.isArray(current)) {
38
+ current.forEach(visit);
39
+ return;
40
+ }
41
+ const href = typeof current.props?.href === "string" && current.tag === "a" ? current.props.href : void 0;
42
+ if (href && parseRefLink(href)) {
43
+ refs.add(href);
44
+ }
45
+ visit(current.children);
46
+ };
47
+ visit(node);
48
+ return Array.from(refs);
49
+ };
50
+ export const rewriteMarkdownRefLinks = (node, resolvedRefs = {}) => {
51
+ const visit = (current) => {
52
+ if (!current || typeof current !== "object") {
53
+ return current;
54
+ }
55
+ if (isMarkdownRoot(current)) {
56
+ return {
57
+ ...current,
58
+ children: current.children.map((item) => visit(item))
59
+ };
60
+ }
61
+ if (current.type === "element") {
62
+ return mapMarkdownNode(current, (markdownNode) => {
63
+ const href2 = typeof markdownNode.props?.href === "string" && markdownNode.tag === "a" ? markdownNode.props.href : void 0;
64
+ if (!href2 || !resolvedRefs[href2]) {
65
+ return markdownNode;
66
+ }
67
+ return {
68
+ ...markdownNode,
69
+ props: {
70
+ ...markdownNode.props,
71
+ href: resolvedRefs[href2]
72
+ }
73
+ };
74
+ });
75
+ }
76
+ if (Array.isArray(current)) {
77
+ return current.map((item) => visit(item));
78
+ }
79
+ const next = { ...current };
80
+ const href = typeof next.props?.href === "string" && next.tag === "a" ? next.props.href : void 0;
81
+ if (href && resolvedRefs[href]) {
82
+ next.props = {
83
+ ...next.props,
84
+ href: resolvedRefs[href]
85
+ };
86
+ }
87
+ if (Array.isArray(next.children)) {
88
+ next.children = next.children.map((child) => visit(child));
89
+ }
90
+ return next;
91
+ };
92
+ return visit(node);
93
+ };
94
+ export const buildReferenceTargets = (contents, locales = []) => {
95
+ const targets = /* @__PURE__ */ new Map();
96
+ for (const document of contents) {
97
+ if (!document || document._partial || document._navigation) {
98
+ continue;
99
+ }
100
+ const fileParts = (document._file || "").replace(/^\/+/, "").split("/").filter(Boolean);
101
+ const canonicalId = typeof document._canonicalKey === "string" && document._canonicalKey.length ? document._canonicalKey : fileParts.slice(fileParts[0] && locales.includes(fileParts[0]) ? 1 : 0).join("/").replace(/\.[^.]+$/, "");
102
+ if (!canonicalId) {
103
+ continue;
104
+ }
105
+ targets.set(canonicalId, canonicalId);
106
+ if (typeof document.id === "string" && document.id.length) {
107
+ targets.set(document.id, canonicalId);
108
+ }
109
+ if (typeof document.ref === "string" && document.ref.length) {
110
+ targets.set(document.ref, canonicalId);
111
+ }
112
+ const normalizedPath = normalizeReferenceValue(String(document._path || ""));
113
+ if (normalizedPath) {
114
+ targets.set(normalizedPath, canonicalId);
115
+ }
116
+ if (document._locale && normalizedPath) {
117
+ targets.set(`${document._locale}/${normalizedPath}`, canonicalId);
118
+ }
119
+ }
120
+ return targets;
121
+ };
@@ -0,0 +1 @@
1
+ export * from './schema.js'
@@ -0,0 +1,8 @@
1
+ export declare const getSchemaDef: (schema: any) => any;
2
+ export declare const getSchemaTypeName: (schema: any) => any;
3
+ export declare const unwrapSchema: (schema: any) => any;
4
+ export declare const getObjectShape: (schema: any) => Record<string, any>;
5
+ export declare const getReferenceDescriptor: (schema: any) => {
6
+ collection?: string;
7
+ } | null;
8
+ export declare const collectTopLevelReferenceFields: (schema: unknown, targetCollection?: string) => string[];
@@ -0,0 +1,70 @@
1
+ import { CONTENT_REFERENCE_PREFIX } from "../../types/reference";
2
+ const zodTypeNames = {
3
+ array: "ZodArray",
4
+ branded: "ZodBranded",
5
+ catch: "ZodCatch",
6
+ default: "ZodDefault",
7
+ boolean: "ZodBoolean",
8
+ date: "ZodDate",
9
+ enum: "ZodEnum",
10
+ nullable: "ZodNullable",
11
+ number: "ZodNumber",
12
+ object: "ZodObject",
13
+ optional: "ZodOptional",
14
+ pipe: "ZodEffects",
15
+ string: "ZodString",
16
+ transform: "ZodEffects"
17
+ };
18
+ export const getSchemaDef = (schema) => schema?._def || schema?.def;
19
+ export const getSchemaTypeName = (schema) => {
20
+ const def = getSchemaDef(schema);
21
+ return def?.typeName || zodTypeNames[def?.type] || def?.type;
22
+ };
23
+ export const unwrapSchema = (schema) => {
24
+ let current = schema;
25
+ while (["ZodOptional", "ZodNullable", "ZodDefault", "ZodEffects", "ZodBranded", "ZodCatch"].includes(getSchemaTypeName(current))) {
26
+ const def = getSchemaDef(current);
27
+ current = def.innerType || def.schema || def.in || def.out || def.type;
28
+ }
29
+ return current;
30
+ };
31
+ export const getObjectShape = (schema) => {
32
+ const shape = getSchemaDef(schema)?.shape;
33
+ return typeof shape === "function" ? shape() : shape || schema?.shape || {};
34
+ };
35
+ export const getReferenceDescriptor = (schema) => {
36
+ const base = unwrapSchema(schema);
37
+ if (getSchemaTypeName(base) !== "ZodString") {
38
+ return null;
39
+ }
40
+ const description = typeof base.description === "string" ? base.description : "";
41
+ if (!description.startsWith(CONTENT_REFERENCE_PREFIX)) {
42
+ return null;
43
+ }
44
+ return {
45
+ collection: description.slice(CONTENT_REFERENCE_PREFIX.length) || void 0
46
+ };
47
+ };
48
+ const getArrayElement = (schema) => {
49
+ const current = unwrapSchema(schema);
50
+ if (getSchemaTypeName(current) !== "ZodArray") {
51
+ return null;
52
+ }
53
+ const def = getSchemaDef(current);
54
+ return def.element || def.type || null;
55
+ };
56
+ export const collectTopLevelReferenceFields = (schema, targetCollection) => {
57
+ const current = unwrapSchema(schema);
58
+ if (getSchemaTypeName(current) !== "ZodObject") {
59
+ return [];
60
+ }
61
+ return Object.entries(getObjectShape(current)).filter(([, childSchema]) => {
62
+ const direct = getReferenceDescriptor(childSchema);
63
+ if (direct) {
64
+ return !direct.collection || !targetCollection || direct.collection === targetCollection;
65
+ }
66
+ const arrayElement = getArrayElement(childSchema);
67
+ const arrayRef = arrayElement ? getReferenceDescriptor(arrayElement) : null;
68
+ return Boolean(arrayRef && (!arrayRef.collection || !targetCollection || arrayRef.collection === targetCollection));
69
+ }).map(([field]) => field);
70
+ };
@@ -0,0 +1 @@
1
+ export * from './result.js'
@@ -0,0 +1,27 @@
1
+ /**
2
+ * A discriminated-union result type used at **internal** boundaries where
3
+ * failure is expected (duplicate canonical IDs, invalid front-matter,
4
+ * conflicting refs). Programmer errors — invalid operator operands,
5
+ * unreachable branches — still throw.
6
+ *
7
+ * Use this at internal boundaries where input/content failures are expected.
8
+ * Keep plain throws for programmer mistakes and impossible branches.
9
+ *
10
+ * @example
11
+ * const outcome = validateContentGraph(docs, config)
12
+ * if (!outcome.ok) {
13
+ * return outcome // propagate up
14
+ * }
15
+ * useGraph(outcome.value)
16
+ */
17
+ export type Result<T, E> = {
18
+ ok: true;
19
+ value: T;
20
+ } | {
21
+ ok: false;
22
+ error: E;
23
+ };
24
+ /** Produce a success result. Use at the emit site, not at call sites. */
25
+ export declare const ok: <T>(value: T) => Result<T, never>;
26
+ /** Produce a failure result. Use at the emit site, not at call sites. */
27
+ export declare const fail: <E>(error: E) => Result<never, E>;
@@ -0,0 +1,2 @@
1
+ export const ok = (value) => ({ ok: true, value });
2
+ export const fail = (error) => ({ ok: false, error });
@@ -0,0 +1 @@
1
+ export * from './resolve.js'