@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,156 @@
1
+ import { createError, defineEventHandler, getHeader, readRawBody } from "h3";
2
+ import { getContentCacheAdapter } from "../cache-adapter.js";
3
+ import { getContentProvider } from "../providers/index.js";
4
+ import { getContentRuntimeConfig } from "../runtime-config.js";
5
+ import { clearSearchRecordsCache } from "../search.js";
6
+ const normalizePath = (path) => {
7
+ const normalized = path.startsWith("/") ? path : `/${path}`;
8
+ return normalized.replace(/\/{2,}/g, "/");
9
+ };
10
+ const normalizeStringList = (value, normalize = (value2) => value2) => Array.isArray(value) ? Array.from(new Set(value.filter((entry) => typeof entry === "string" && entry.trim()).map((entry) => normalize(entry.trim())))) : void 0;
11
+ const SIGNATURE_TOLERANCE_MS = 5 * 60 * 1e3;
12
+ async function hmacSha256Hex(secret, value) {
13
+ const encoder = new TextEncoder();
14
+ const key = await globalThis.crypto.subtle.importKey(
15
+ "raw",
16
+ encoder.encode(secret),
17
+ { name: "HMAC", hash: "SHA-256" },
18
+ false,
19
+ ["sign"]
20
+ );
21
+ const signature = await globalThis.crypto.subtle.sign("HMAC", key, encoder.encode(value));
22
+ return Array.from(new Uint8Array(signature)).map((byte) => byte.toString(16).padStart(2, "0")).join("");
23
+ }
24
+ function constantTimeEqual(left, right) {
25
+ const leftBytes = new TextEncoder().encode(left);
26
+ const rightBytes = new TextEncoder().encode(right);
27
+ let difference = leftBytes.length ^ rightBytes.length;
28
+ const length = Math.max(leftBytes.length, rightBytes.length);
29
+ for (let index = 0; index < length; index++) {
30
+ difference |= (leftBytes[index] ?? 0) ^ (rightBytes[index] ?? 0);
31
+ }
32
+ return difference === 0;
33
+ }
34
+ async function verifySignature(event, token, rawBody) {
35
+ const timestampHeader = getHeader(event, "x-ginko-signature-timestamp");
36
+ const signatureHeader = getHeader(event, "x-ginko-signature");
37
+ const eventId = getHeader(event, "x-ginko-revalidation-event");
38
+ if (!timestampHeader || !signatureHeader || !eventId) {
39
+ throw createError({
40
+ statusCode: 401,
41
+ statusMessage: "missing_revalidation_signature",
42
+ message: "Signed content revalidation requires signature, timestamp, and event headers."
43
+ });
44
+ }
45
+ const timestamp = Number(timestampHeader);
46
+ if (!Number.isFinite(timestamp) || Math.abs(Date.now() - timestamp) > SIGNATURE_TOLERANCE_MS) {
47
+ throw createError({
48
+ statusCode: 401,
49
+ statusMessage: "stale_revalidation_signature",
50
+ message: "Content revalidation signature timestamp is outside the accepted window."
51
+ });
52
+ }
53
+ const expected = `sha256=${await hmacSha256Hex(token, `${timestampHeader}.${eventId}.${rawBody}`)}`;
54
+ if (!constantTimeEqual(signatureHeader, expected)) {
55
+ throw createError({
56
+ statusCode: 401,
57
+ statusMessage: "invalid_revalidation_signature",
58
+ message: "Invalid content revalidation signature."
59
+ });
60
+ }
61
+ }
62
+ function hasSignatureHeaders(event) {
63
+ return Boolean(
64
+ getHeader(event, "x-ginko-signature-timestamp") || getHeader(event, "x-ginko-signature") || getHeader(event, "x-ginko-revalidation-event")
65
+ );
66
+ }
67
+ function verifyUnsignedToken(event, token) {
68
+ const headerToken = getHeader(event, "x-ginko-revalidate-token");
69
+ const bearerToken = getHeader(event, "authorization")?.replace(/^Bearer\s+/i, "");
70
+ if (headerToken !== token && bearerToken !== token) {
71
+ throw createError({
72
+ statusCode: 401,
73
+ statusMessage: "invalid_revalidation_token",
74
+ message: "Invalid content revalidation token."
75
+ });
76
+ }
77
+ }
78
+ function parseJsonBody(bodyText) {
79
+ try {
80
+ return JSON.parse(bodyText);
81
+ } catch {
82
+ throw createError({
83
+ statusCode: 400,
84
+ statusMessage: "invalid_revalidation_body",
85
+ message: "Content revalidation body must be valid JSON."
86
+ });
87
+ }
88
+ }
89
+ export default defineEventHandler(async (event) => {
90
+ const revalidateConfig = getContentRuntimeConfig().content?.revalidate;
91
+ const token = revalidateConfig && revalidateConfig !== false ? revalidateConfig.token : void 0;
92
+ const allowUnsigned = revalidateConfig && revalidateConfig !== false ? revalidateConfig.allowUnsigned === true : false;
93
+ if (!token) {
94
+ throw createError({
95
+ statusCode: 404,
96
+ statusMessage: "revalidation_disabled",
97
+ message: "Content revalidation is disabled."
98
+ });
99
+ }
100
+ const rawBody = await readRawBody(event).catch(() => void 0);
101
+ const bodyText = typeof rawBody === "string" ? rawBody : rawBody?.toString();
102
+ if (!bodyText) {
103
+ throw createError({
104
+ statusCode: 400,
105
+ statusMessage: "missing_revalidation_body",
106
+ message: "Content revalidation requires a JSON body."
107
+ });
108
+ }
109
+ if (hasSignatureHeaders(event)) {
110
+ await verifySignature(event, token, bodyText);
111
+ } else if (allowUnsigned) {
112
+ verifyUnsignedToken(event, token);
113
+ } else {
114
+ throw createError({
115
+ statusCode: 401,
116
+ statusMessage: "missing_revalidation_signature",
117
+ message: "Signed content revalidation requires signature, timestamp, and event headers."
118
+ });
119
+ }
120
+ const body = parseJsonBody(bodyText);
121
+ const input = {
122
+ tags: normalizeStringList(body?.tags),
123
+ paths: normalizeStringList(body?.paths, normalizePath)
124
+ };
125
+ if (!input.tags?.length && !input.paths?.length) {
126
+ throw createError({
127
+ statusCode: 400,
128
+ statusMessage: "missing_revalidation_target",
129
+ message: "Provide at least one cache tag or path to revalidate."
130
+ });
131
+ }
132
+ const provider = await getContentProvider(event);
133
+ const adapter = await getContentCacheAdapter();
134
+ let handled = false;
135
+ if (typeof provider.invalidate === "function") {
136
+ await provider.invalidate(event, input);
137
+ handled = true;
138
+ }
139
+ if (adapter) {
140
+ await adapter.invalidate(input);
141
+ handled = true;
142
+ }
143
+ if (!handled) {
144
+ throw createError({
145
+ statusCode: 501,
146
+ statusMessage: "revalidation_not_supported",
147
+ message: "The active content provider/cache adapter does not support revalidation."
148
+ });
149
+ }
150
+ clearSearchRecordsCache();
151
+ return {
152
+ ok: true,
153
+ tags: input.tags || [],
154
+ paths: input.paths || []
155
+ };
156
+ });
@@ -0,0 +1 @@
1
+ export * from './search.js'
@@ -0,0 +1 @@
1
+ export * from './search-index.js'
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<import("../../../types").ContentSearchIndexRecord[]>>;
2
+ export default _default;
@@ -0,0 +1,20 @@
1
+ import { defineEventHandler, getQuery } from "h3";
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
+ import { buildSearchIndex } from "../search.js";
4
+ export default defineEventHandler(async (event) => {
5
+ const runtimeConfig = useRuntimeConfig(event);
6
+ const searchConfig = runtimeConfig.content.search;
7
+ if (searchConfig === false) {
8
+ return [];
9
+ }
10
+ const query = getQuery(event);
11
+ const locale = typeof query.locale === "string" ? query.locale : void 0;
12
+ return await buildSearchIndex(event, {
13
+ collections: searchConfig.collections,
14
+ ignoredTags: searchConfig.ignoredTags || [],
15
+ extraFields: searchConfig.extraFields || [],
16
+ filterQuery: searchConfig.filterQuery,
17
+ locale,
18
+ allLocales: !locale
19
+ });
20
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<import("..").MaybeContentProviderResult<import("../../../types").ContentSearchResult[]>>>;
2
+ export default _default;
@@ -0,0 +1,40 @@
1
+ import { defineEventHandler, getQuery, getRequestURL } from "h3";
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
+ import { buildSearchIndex, searchRecords } from "../search.js";
4
+ import { getContentProvider } from "../providers/index.js";
5
+ import { createContentProviderError } from "../../../public/provider-errors";
6
+ export default defineEventHandler(async (event) => {
7
+ const runtimeConfig = useRuntimeConfig(event);
8
+ const searchConfig = runtimeConfig.content.search;
9
+ if (searchConfig === false) {
10
+ return [];
11
+ }
12
+ const query = getQuery(event);
13
+ const rawUrl = event.node.req.originalUrl || event.node.req.url;
14
+ const requestUrl = rawUrl ? new URL(rawUrl, "http://content.local") : getRequestURL(event);
15
+ const rawTerm = typeof query.q === "string" ? query.q : requestUrl.searchParams.get("q");
16
+ const term = typeof rawTerm === "string" ? rawTerm.slice(0, 200) : "";
17
+ const locale = typeof query.locale === "string" ? query.locale : void 0;
18
+ if (searchConfig.engine === "cms") {
19
+ const provider = await getContentProvider(event);
20
+ if (typeof provider.search !== "function") {
21
+ throw createContentProviderError("unsupported_provider_search", `${provider.name} does not support provider-backed search`, {
22
+ provider: provider.name
23
+ });
24
+ }
25
+ return await provider.search(event, {
26
+ term,
27
+ locale,
28
+ collections: searchConfig.collections
29
+ });
30
+ }
31
+ const records = await buildSearchIndex(event, {
32
+ collections: searchConfig.collections,
33
+ ignoredTags: searchConfig.ignoredTags || [],
34
+ extraFields: searchConfig.extraFields || [],
35
+ filterQuery: searchConfig.filterQuery,
36
+ locale,
37
+ allLocales: !locale
38
+ });
39
+ return searchRecords(records, term, locale, searchConfig.minisearch);
40
+ });
@@ -0,0 +1 @@
1
+ export * from './site-data.js'
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<import("..").MaybeContentProviderResult<import("../../../public/provider").ContentProviderSiteDataResponse<unknown>>>>;
2
+ export default _default;
@@ -0,0 +1,22 @@
1
+ import { createError, defineEventHandler, getQuery } from "h3";
2
+ import { getContentProvider } from "../providers/index.js";
3
+ import { createContentProviderError } from "../../../public/provider-errors";
4
+ export default defineEventHandler(async (event) => {
5
+ const query = getQuery(event);
6
+ const key = typeof query.key === "string" ? query.key.trim() : "";
7
+ const locale = typeof query.locale === "string" ? query.locale : void 0;
8
+ if (!key) {
9
+ throw createError({
10
+ statusCode: 400,
11
+ statusMessage: "missing_site_data_key",
12
+ message: "A site-data key is required."
13
+ });
14
+ }
15
+ const provider = await getContentProvider(event);
16
+ if (typeof provider.siteData !== "function") {
17
+ throw createContentProviderError("unsupported_provider_site_data", `${provider.name} does not support site data.`, {
18
+ provider: provider.name
19
+ });
20
+ }
21
+ return await provider.siteData(event, { key, locale });
22
+ });
@@ -0,0 +1 @@
1
+ export * from './sitemap.js'
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<import("../../../types").ContentSitemapEntry[]>>;
2
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import { defineEventHandler, getQuery } from "h3";
2
+ import { useRuntimeConfig } from "nitropack/runtime";
3
+ import { queryCollectionsSitemapEntries } from "../sitemap-provider.js";
4
+ export default defineEventHandler(async (event) => {
5
+ const query = getQuery(event);
6
+ const runtimeSitemap = useRuntimeConfig(event).public.content?.sitemap;
7
+ const include = typeof query.include === "string" ? query.include.split(",").map((item) => item.trim()).filter(Boolean) : runtimeSitemap?.include;
8
+ const exclude = typeof query.exclude === "string" ? query.exclude.split(",").map((item) => item.trim()).filter(Boolean) : runtimeSitemap?.exclude;
9
+ const includeDrafts = typeof query.includeDrafts === "string" ? query.includeDrafts === "true" : runtimeSitemap?.includeDrafts;
10
+ return await queryCollectionsSitemapEntries(event, { include, exclude, includeDrafts });
11
+ });
@@ -0,0 +1 @@
1
+ export * from './cache-adapter.js'
@@ -0,0 +1,2 @@
1
+ import type { ContentCacheAdapter } from '../../public/provider';
2
+ export declare const getContentCacheAdapter: () => Promise<ContentCacheAdapter | undefined>;
@@ -0,0 +1,11 @@
1
+ import { loadContentCacheAdapter } from "#content/virtual/cache-adapter";
2
+ export const getContentCacheAdapter = async () => {
3
+ const adapter = await loadContentCacheAdapter();
4
+ if (!adapter) {
5
+ return void 0;
6
+ }
7
+ if (typeof adapter.name !== "string" || typeof adapter.apply !== "function" || typeof adapter.invalidate !== "function") {
8
+ throw new TypeError("Invalid content cache adapter. Expected { name, apply, invalidate }.");
9
+ }
10
+ return adapter;
11
+ };
@@ -0,0 +1 @@
1
+ export * from './cache-adapters.js'
@@ -0,0 +1,9 @@
1
+ import type { ContentCacheAdapter, ContentCacheHint } from '../../public/provider';
2
+ export declare const noopContentCache: () => ContentCacheAdapter;
3
+ export interface VercelContentCacheOptions {
4
+ origin: string;
5
+ bypassToken: string;
6
+ fetch?: typeof globalThis.fetch;
7
+ }
8
+ export declare const vercelContentCache: (options: VercelContentCacheOptions) => ContentCacheAdapter;
9
+ export declare const contentCacheHeaders: (hint: ContentCacheHint) => Headers;
@@ -0,0 +1,50 @@
1
+ export const noopContentCache = () => ({
2
+ name: "noop",
3
+ apply: () => {
4
+ },
5
+ invalidate: async () => {
6
+ }
7
+ });
8
+ export const vercelContentCache = (options) => {
9
+ const origin = options.origin.replace(/\/$/, "");
10
+ const fetchImpl = options.fetch || globalThis.fetch;
11
+ return {
12
+ name: "vercel",
13
+ apply: () => {
14
+ },
15
+ invalidate: async (input) => {
16
+ const paths = Array.from(new Set((input.paths || []).filter((path) => typeof path === "string" && path.trim()).map((path) => path.startsWith("/") ? path : `/${path}`)));
17
+ if (!paths.length && input.tags?.length) {
18
+ throw new Error("Vercel ISR revalidation requires explicit paths; tag-only invalidation must be resolved before calling the adapter.");
19
+ }
20
+ await Promise.all(paths.map(async (path) => {
21
+ const response = await fetchImpl(`${origin}${path}`, {
22
+ method: "HEAD",
23
+ headers: {
24
+ "x-prerender-revalidate": options.bypassToken
25
+ }
26
+ });
27
+ if (!response.ok) {
28
+ throw new Error(`Failed to revalidate Vercel ISR path "${path}": ${response.status} ${response.statusText}`.trim());
29
+ }
30
+ }));
31
+ }
32
+ };
33
+ };
34
+ export const contentCacheHeaders = (hint) => {
35
+ const headers = new Headers();
36
+ if (typeof hint.maxAge === "number") {
37
+ const directives = [`max-age=${hint.maxAge}`];
38
+ if (typeof hint.swr === "number") {
39
+ directives.push(`stale-while-revalidate=${hint.swr}`);
40
+ }
41
+ headers.set("Cache-Control", directives.join(", "));
42
+ }
43
+ if (hint.etag) {
44
+ headers.set("ETag", hint.etag);
45
+ }
46
+ if (hint.lastModified) {
47
+ headers.set("Last-Modified", hint.lastModified.toUTCString());
48
+ }
49
+ return headers;
50
+ };
@@ -0,0 +1 @@
1
+ export * from './cache-hints.js'
@@ -0,0 +1,5 @@
1
+ import type { H3Event } from 'h3';
2
+ import type { ContentCacheHint, ContentCacheHintInput } from '../../public/provider';
3
+ export declare const collectContentCacheHint: (event: H3Event, hint: ContentCacheHintInput | undefined) => void;
4
+ export declare const getContentCacheHint: (event: H3Event) => ContentCacheHint | false | undefined;
5
+ export declare const clearContentCacheHint: (event: H3Event) => void;
@@ -0,0 +1,17 @@
1
+ import { mergeContentCacheHints } from "../../core/cache-hints";
2
+ import { getContentRuntimeContext } from "../../integrations/nitro/context";
3
+ import { isPreview } from "../../integrations/nitro/preview";
4
+ export const collectContentCacheHint = (event, hint) => {
5
+ if (typeof hint === "undefined") {
6
+ return;
7
+ }
8
+ const runtime = getContentRuntimeContext(event);
9
+ runtime.cacheHint = isPreview(event) ? false : mergeContentCacheHints(runtime.cacheHint, hint);
10
+ };
11
+ export const getContentCacheHint = (event) => {
12
+ const runtime = getContentRuntimeContext(event);
13
+ return isPreview(event) ? false : runtime.cacheHint;
14
+ };
15
+ export const clearContentCacheHint = (event) => {
16
+ getContentRuntimeContext(event).cacheHint = void 0;
17
+ };
@@ -0,0 +1 @@
1
+ export * from './collection-helpers.js'
@@ -0,0 +1,13 @@
1
+ import type { H3Event } from 'h3';
2
+ import type { ParsedContent } from '../../types/content';
3
+ import type { ContentCollectionItemSurroundingsOptions, ContentCollectionNavigationOptions, ContentCollectionPageOptions, ContentCollectionRouteMetaOptions, ContentCollectionSearchSectionsOptions, ContentPageResult, ContentSearchSection } from '../../types/query';
4
+ export declare function queryFilesystemCollectionNavigation(event: H3Event, collection: string, fieldsOrOptions?: string[] | ContentCollectionNavigationOptions): Promise<any[]>;
5
+ export declare function queryFilesystemCollectionItemSurroundings(event: H3Event, collection: string, path: string, opts?: ContentCollectionItemSurroundingsOptions): Promise<(import("../../types").NavItem | null)[]>;
6
+ export declare function queryFilesystemCollectionSearchSections(event: H3Event, collection: string, opts?: ContentCollectionSearchSectionsOptions): Promise<ContentSearchSection[]>;
7
+ export declare function queryFilesystemCollectionPage<T = ParsedContent>(event: H3Event, collection: string, routeOrPath?: string, options?: ContentCollectionPageOptions): Promise<ContentPageResult<T> | null>;
8
+ export declare function queryFilesystemCollectionRouteMeta(event: H3Event, collection: string, routeOrPath?: string, options?: ContentCollectionRouteMetaOptions): Promise<import("../../types").ContentRouteMeta | null>;
9
+ export declare const queryCollectionNavigation: typeof queryFilesystemCollectionNavigation;
10
+ export declare const queryCollectionItemSurroundings: typeof queryFilesystemCollectionItemSurroundings;
11
+ export declare const queryCollectionSearchSections: typeof queryFilesystemCollectionSearchSections;
12
+ export declare const queryCollectionPage: typeof queryFilesystemCollectionPage;
13
+ export declare const queryCollectionRouteMeta: typeof queryFilesystemCollectionRouteMeta;
@@ -0,0 +1,99 @@
1
+ import { resolveCollectionItemSurroundingsData, resolveCollectionNavigationData, resolveCollectionPageData, resolveCollectionRouteMetaData, resolveCollectionSearchSectionsData } from "../../features/collections/resolve";
2
+ import { resolveContentNavigation } from "./navigation-query.js";
3
+ import { executeFilesystemContentQuery } from "./query-executor.js";
4
+ import { serverQueryCollection } from "./storage.js";
5
+ import { contentConfig } from "./storage-access.js";
6
+ const isNotFoundError = (error) => {
7
+ return error?.statusCode === 404;
8
+ };
9
+ const searchPageFields = (fields = []) => [
10
+ "_path",
11
+ "title",
12
+ "description",
13
+ "body",
14
+ ...fields
15
+ ];
16
+ const mergeFilterQuery = (filterQuery, locale) => {
17
+ const localeFilter = locale ? { _locale: locale } : void 0;
18
+ if (filterQuery && localeFilter) {
19
+ return { $and: [filterQuery, localeFilter] };
20
+ }
21
+ return filterQuery || localeFilter;
22
+ };
23
+ export async function queryFilesystemCollectionNavigation(event, collection, fieldsOrOptions = []) {
24
+ const options = Array.isArray(fieldsOrOptions) ? { fields: fieldsOrOptions } : fieldsOrOptions;
25
+ const locale = options.locale;
26
+ return await resolveCollectionNavigationData(collection, contentConfig(), {
27
+ ...options,
28
+ loadNavigation: () => resolveContentNavigation(event, {
29
+ collection,
30
+ ...options.fields?.length ? { navigationFields: options.fields } : {},
31
+ ...typeof options.canonical === "boolean" ? { canonical: options.canonical } : {},
32
+ ...locale ? { resolveLocale: { locale, fallback: true } } : {}
33
+ })
34
+ });
35
+ }
36
+ export async function queryFilesystemCollectionItemSurroundings(event, collection, path, opts = {}) {
37
+ return await resolveCollectionItemSurroundingsData(collection, path, contentConfig(), {
38
+ ...opts,
39
+ loadNavigation: (options) => queryFilesystemCollectionNavigation(event, collection, options)
40
+ });
41
+ }
42
+ export async function queryFilesystemCollectionSearchSections(event, collection, opts = {}) {
43
+ return await resolveCollectionSearchSectionsData(collection, contentConfig(), {
44
+ ...opts,
45
+ loadPages: async (extraFields) => {
46
+ const query = serverQueryCollection(event, collection).select(...searchPageFields(extraFields));
47
+ const filterQuery = mergeFilterQuery(opts.filterQuery, opts.locale);
48
+ if (filterQuery) {
49
+ return await query.where(filterQuery).all();
50
+ }
51
+ return await query.all();
52
+ }
53
+ });
54
+ }
55
+ export async function queryFilesystemCollectionPage(event, collection, routeOrPath = "/", options = {}) {
56
+ return await resolveCollectionPageData(collection, routeOrPath, contentConfig(), {
57
+ ...options,
58
+ loadVariantPage: async (input) => {
59
+ try {
60
+ return await executeFilesystemContentQuery(event, {
61
+ collection,
62
+ first: true,
63
+ resolveVariant: {
64
+ path: input.path,
65
+ locale: input.locale,
66
+ fallback: input.fallback
67
+ }
68
+ });
69
+ } catch (error) {
70
+ if (isNotFoundError(error)) {
71
+ return null;
72
+ }
73
+ throw error;
74
+ }
75
+ },
76
+ loadPathPage: async (path) => {
77
+ try {
78
+ return await serverQueryCollection(event, collection).where("_path", "=", path).first();
79
+ } catch (error) {
80
+ if (isNotFoundError(error)) {
81
+ return null;
82
+ }
83
+ throw error;
84
+ }
85
+ }
86
+ });
87
+ }
88
+ export async function queryFilesystemCollectionRouteMeta(event, collection, routeOrPath = "/", options = {}) {
89
+ return await resolveCollectionRouteMetaData(collection, contentConfig(), {
90
+ routeOrPath,
91
+ ...options,
92
+ loadPage: (path, loadOptions) => queryFilesystemCollectionPage(event, collection, path, loadOptions)
93
+ });
94
+ }
95
+ export const queryCollectionNavigation = queryFilesystemCollectionNavigation;
96
+ export const queryCollectionItemSurroundings = queryFilesystemCollectionItemSurroundings;
97
+ export const queryCollectionSearchSections = queryFilesystemCollectionSearchSections;
98
+ export const queryCollectionPage = queryFilesystemCollectionPage;
99
+ export const queryCollectionRouteMeta = queryFilesystemCollectionRouteMeta;
@@ -0,0 +1 @@
1
+ export * from './index.js'
@@ -0,0 +1,9 @@
1
+ export { one, many, paginate, backlinks, resolveOne, variants, tree, neighbors, createServerContentQueryContext } from './query-api';
2
+ export { getCollectionPath } from '../query/routes';
3
+ export { queryCollectionsSitemapEntries } from './sitemap-provider';
4
+ export { contentCacheHeaders, noopContentCache, vercelContentCache, type VercelContentCacheOptions } from './cache-adapters';
5
+ export { clearContentCacheHint, collectContentCacheHint, getContentCacheHint } from './cache-hints';
6
+ export { createContentProviderError } from '../../public/provider-errors';
7
+ export { withContentCache } from '../../public/provider';
8
+ export type { ContentCacheAdapter, ContentCacheHint, ContentCacheHintInput, ContentCacheInvalidateInput, ContentProvider, ContentProviderCapabilities, ContentProviderResult, MaybeContentProviderResult } from '../../public/provider';
9
+ export type { ContentProviderErrorCode } from '../../public/provider-errors';
@@ -0,0 +1,15 @@
1
+ export { one, many, paginate, backlinks, resolveOne, variants, tree, neighbors, createServerContentQueryContext } from "./query-api.js";
2
+ export { getCollectionPath } from "../query/routes.js";
3
+ export { queryCollectionsSitemapEntries } from "./sitemap-provider.js";
4
+ export {
5
+ contentCacheHeaders,
6
+ noopContentCache,
7
+ vercelContentCache
8
+ } from "./cache-adapters.js";
9
+ export {
10
+ clearContentCacheHint,
11
+ collectContentCacheHint,
12
+ getContentCacheHint
13
+ } from "./cache-hints.js";
14
+ export { createContentProviderError } from "../../public/provider-errors";
15
+ export { withContentCache } from "../../public/provider";
@@ -0,0 +1 @@
1
+ export * from './manifest.js'
@@ -0,0 +1 @@
1
+ export * from '../../storage/manifest';
@@ -0,0 +1 @@
1
+ export * from "../../storage/manifest";
@@ -0,0 +1 @@
1
+ export * from './navigation.js'
@@ -0,0 +1 @@
1
+ export * from './navigation-query.js'
@@ -0,0 +1,4 @@
1
+ import type { H3Event } from 'h3';
2
+ import type { NavItem } from '../../types/content';
3
+ import type { ContentQueryBuilderParams } from '../../types/query';
4
+ export declare function resolveContentNavigation(event: H3Event, inputQuery?: ContentQueryBuilderParams): Promise<NavItem[]>;
@@ -0,0 +1,80 @@
1
+ import { resolveContentNavigationData } from "../../features/navigation/query";
2
+ import { buildCanonicalNavigation } from "../../features/navigation/build";
3
+ import { markCollectionNavigationRoot, projectNavigationTree } from "../../features/navigation/canonical";
4
+ import { normalizeRouteMounts } from "../../features/localization/path";
5
+ import { getContentRuntimeConfig } from "./runtime-config.js";
6
+ import { isPreview } from "./preview.js";
7
+ import { cacheStorage } from "./storage-access.js";
8
+ import { createServerContentQuery } from "./storage.js";
9
+ import { resolveLocaleChain } from "./manifest.js";
10
+ export async function resolveContentNavigation(event, inputQuery = {}) {
11
+ const runtimeConfig = getContentRuntimeConfig();
12
+ const requestedFields = [
13
+ ...Array.isArray(inputQuery.only) ? inputQuery.only.map(String) : [],
14
+ ...Array.isArray(inputQuery.navigationFields) ? inputQuery.navigationFields : []
15
+ ];
16
+ const sourceQuery = { ...inputQuery };
17
+ if ("canonical" in sourceQuery) {
18
+ delete sourceQuery.canonical;
19
+ }
20
+ if ("navigationFields" in sourceQuery) {
21
+ delete sourceQuery.navigationFields;
22
+ }
23
+ if ("only" in sourceQuery) {
24
+ delete sourceQuery.only;
25
+ }
26
+ if ("resolveLocale" in sourceQuery) {
27
+ delete sourceQuery.resolveLocale;
28
+ }
29
+ return await resolveContentNavigationData({
30
+ defaultLocale: runtimeConfig.content.defaultLocale,
31
+ localeFallback: runtimeConfig.content.localeFallback,
32
+ navigation: runtimeConfig.public.content.navigation,
33
+ cacheEnabled: true,
34
+ isPreview: isPreview(event)
35
+ }, {
36
+ query: inputQuery,
37
+ readCache: async () => {
38
+ const cached = await cacheStorage(event).getItem("_nav.json");
39
+ return cached;
40
+ },
41
+ loadLocaleNavigation: async (locale) => {
42
+ let contentsQuery = createServerContentQuery(event, sourceQuery).where("_partial", "=", false).where("_type", "=", "markdown").where("navigation", "!=", false);
43
+ if (locale) {
44
+ contentsQuery = contentsQuery.where("_locale", "=", locale);
45
+ }
46
+ let dirConfigsQuery = createServerContentQuery(event).where("_navigation", "=", true).where("_partial", "=", true);
47
+ if (locale) {
48
+ dirConfigsQuery = dirConfigsQuery.where("_locale", "=", locale);
49
+ }
50
+ const contents = await contentsQuery.all();
51
+ const dirConfigs = await dirConfigsQuery.all();
52
+ const configs = dirConfigs.reduce((accumulator, config) => {
53
+ accumulator[config._path || "/"] = {
54
+ ...config,
55
+ ...config.body
56
+ };
57
+ return accumulator;
58
+ }, {});
59
+ const configuredFields = runtimeConfig.public.content.navigation === false ? [] : runtimeConfig.public.content.navigation.fields;
60
+ return buildCanonicalNavigation(contents, configs, [.../* @__PURE__ */ new Set([...configuredFields, ...requestedFields])]);
61
+ },
62
+ resolveLocaleChain,
63
+ localizeNavigation: async (items, locale, _fallback = [], collection, canonical) => {
64
+ const collectionI18n = collection ? runtimeConfig.content.collections?.[collection]?.i18n : void 0;
65
+ const collectionLocales = collectionI18n && typeof collectionI18n === "object" ? collectionI18n.locales : void 0;
66
+ const collectionDefault = collectionI18n && typeof collectionI18n === "object" ? collectionI18n.defaultLocale : void 0;
67
+ const locales = collectionLocales?.length ? collectionLocales : runtimeConfig.content.locales;
68
+ const defaultLocale = collectionDefault || runtimeConfig.content.defaultLocale;
69
+ const routeMounts = collection ? normalizeRouteMounts(runtimeConfig.content.collections?.[collection]?.route, locales, defaultLocale) : void 0;
70
+ const navigation = markCollectionNavigationRoot(items, collection, { routeMounts });
71
+ return projectNavigationTree(navigation, {
72
+ locale,
73
+ defaultLocale,
74
+ routeMounts,
75
+ collection,
76
+ canonical
77
+ });
78
+ }
79
+ });
80
+ }