dineway 0.1.48 → 0.2.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 (420) hide show
  1. package/dist/{activity-events-C9u37D5z.mjs → activity-events-y6eT8UW6.mjs} +6 -38
  2. package/dist/actor-CrObAPV0.mjs +37 -0
  3. package/dist/after-BfniwgIf.mjs +9 -0
  4. package/dist/{allowed-origins-DhipQNLb.mjs → allowed-origins-_oeyP6x-.mjs} +1 -1
  5. package/dist/api/route-utils.d.mts +10 -10
  6. package/dist/api/route-utils.mjs +17 -14
  7. package/dist/api/schemas/index.d.mts +2 -2
  8. package/dist/api/schemas/index.mjs +5 -4
  9. package/dist/{api-Eiy8_zVZ.mjs → api-ByrU2q-Z.mjs} +61 -37
  10. package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-CjVMQT-X.mjs} +6 -2
  11. package/dist/{apply-CX3no7XE.mjs → apply-bZswmZPm.mjs} +117 -77
  12. package/dist/astro/image-endpoint.d.mts +7 -0
  13. package/dist/astro/image-endpoint.mjs +54 -0
  14. package/dist/astro/index.d.mts +35 -11
  15. package/dist/astro/index.mjs +157 -23
  16. package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
  17. package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
  18. package/dist/astro/middleware/auth.d.mts +10 -10
  19. package/dist/astro/middleware/auth.mjs +42 -24
  20. package/dist/astro/middleware/redirect.mjs +14 -5
  21. package/dist/astro/middleware/request-context.mjs +9 -6
  22. package/dist/astro/middleware/seed.d.mts +1 -1
  23. package/dist/astro/middleware/seed.mjs +2 -2
  24. package/dist/astro/middleware/setup.mjs +1 -1
  25. package/dist/astro/middleware.mjs +334 -193
  26. package/dist/astro/routes/admin.astro +6 -1
  27. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
  28. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
  29. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  30. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  31. package/dist/astro/routes/api/admin/briefing.mjs +22 -18
  32. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
  33. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
  34. package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
  35. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
  36. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +18 -15
  37. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +18 -15
  38. package/dist/astro/routes/api/admin/bylines/index.mjs +18 -15
  39. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +15 -13
  40. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -6
  41. package/dist/astro/routes/api/admin/comments/bulk.mjs +12 -10
  42. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -6
  43. package/dist/astro/routes/api/admin/comments/index.mjs +12 -10
  44. package/dist/astro/routes/api/admin/context/_id_/history.mjs +27 -25
  45. package/dist/astro/routes/api/admin/context/_id_/index.mjs +27 -25
  46. package/dist/astro/routes/api/admin/context/_id_/review.mjs +32 -29
  47. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +32 -29
  48. package/dist/astro/routes/api/admin/context/diff.mjs +31 -28
  49. package/dist/astro/routes/api/admin/context/index.mjs +32 -29
  50. package/dist/astro/routes/api/admin/context/stale.mjs +31 -28
  51. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +27 -25
  52. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +31 -28
  53. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +31 -28
  54. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +28 -26
  55. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  56. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  57. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  58. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -52
  59. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -52
  60. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +48 -44
  61. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -50
  62. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -49
  63. package/dist/astro/routes/api/admin/plugins/index.mjs +48 -44
  64. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  65. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +47 -43
  66. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +53 -49
  67. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +47 -43
  68. package/dist/astro/routes/api/admin/plugins/updates.mjs +47 -43
  69. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +6 -6
  70. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +32 -28
  71. package/dist/astro/routes/api/admin/review-requests/index.mjs +11 -10
  72. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +47 -43
  73. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  74. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +47 -43
  75. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
  76. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
  77. package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
  78. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
  79. package/dist/astro/routes/api/admin/users/index.mjs +7 -6
  80. package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
  81. package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
  82. package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
  83. package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
  84. package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
  85. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  86. package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
  87. package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
  88. package/dist/astro/routes/api/auth/me.mjs +10 -9
  89. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  90. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  91. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  92. package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
  93. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  94. package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
  95. package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
  96. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
  97. package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
  98. package/dist/astro/routes/api/auth/setup-token/index.mjs +6 -6
  99. package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
  100. package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
  101. package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
  102. package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
  103. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +16 -14
  104. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
  105. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
  106. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  107. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -6
  108. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -6
  109. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -6
  110. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +12 -11
  111. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +11 -10
  112. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -6
  113. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  114. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +11 -10
  115. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +17 -15
  116. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  117. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -6
  118. package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -10
  119. package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
  120. package/dist/astro/routes/api/content/_collection_/index.mjs +11 -10
  121. package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
  122. package/dist/astro/routes/api/dashboard.mjs +10 -9
  123. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  124. package/dist/astro/routes/api/health.mjs +1 -1
  125. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  126. package/dist/astro/routes/api/import/probe.mjs +23 -11
  127. package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
  128. package/dist/astro/routes/api/import/wordpress/execute.d.mts +19 -1
  129. package/dist/astro/routes/api/import/wordpress/execute.mjs +85 -38
  130. package/dist/astro/routes/api/import/wordpress/media.d.mts +13 -1
  131. package/dist/astro/routes/api/import/wordpress/media.mjs +20 -14
  132. package/dist/astro/routes/api/import/wordpress/prepare.mjs +36 -33
  133. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +18 -1
  134. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +121 -101
  135. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  136. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -13
  137. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
  138. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +56 -2
  139. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +284 -56
  140. package/dist/astro/routes/api/manifest.mjs +14 -5
  141. package/dist/astro/routes/api/mcp.mjs +266 -70
  142. package/dist/astro/routes/api/media/_id_/confirm.mjs +39 -11
  143. package/dist/astro/routes/api/media/_id_.mjs +11 -7
  144. package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
  145. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  146. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  147. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  148. package/dist/astro/routes/api/media/upload-url.mjs +12 -11
  149. package/dist/astro/routes/api/media.mjs +28 -35
  150. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +32 -29
  151. package/dist/astro/routes/api/menus/_name_/items.mjs +32 -29
  152. package/dist/astro/routes/api/menus/_name_/reorder.mjs +32 -29
  153. package/dist/astro/routes/api/menus/_name_/translations.mjs +32 -29
  154. package/dist/astro/routes/api/menus/_name_.mjs +32 -29
  155. package/dist/astro/routes/api/menus/index.mjs +32 -29
  156. package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
  157. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  158. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  159. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  160. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  161. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  162. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  163. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  164. package/dist/astro/routes/api/openapi.json.mjs +4 -3
  165. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +30 -30
  166. package/dist/astro/routes/api/redirects/404s/index.mjs +12 -11
  167. package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -11
  168. package/dist/astro/routes/api/redirects/_id_.mjs +33 -30
  169. package/dist/astro/routes/api/redirects/index.mjs +33 -30
  170. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  171. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
  172. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +48 -44
  173. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +48 -44
  174. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +48 -44
  175. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +48 -44
  176. package/dist/astro/routes/api/schema/collections/index.mjs +48 -44
  177. package/dist/astro/routes/api/schema/index.mjs +13 -14
  178. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +47 -43
  179. package/dist/astro/routes/api/schema/orphans/index.mjs +47 -43
  180. package/dist/astro/routes/api/search/enable.mjs +12 -11
  181. package/dist/astro/routes/api/search/index.mjs +11 -10
  182. package/dist/astro/routes/api/search/rebuild.mjs +12 -11
  183. package/dist/astro/routes/api/search/stats.mjs +7 -7
  184. package/dist/astro/routes/api/search/suggest.mjs +11 -10
  185. package/dist/astro/routes/api/sections/_slug_.mjs +32 -29
  186. package/dist/astro/routes/api/sections/index.mjs +32 -29
  187. package/dist/astro/routes/api/settings/email.mjs +4 -4
  188. package/dist/astro/routes/api/settings.mjs +32 -29
  189. package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
  190. package/dist/astro/routes/api/setup/admin.mjs +12 -11
  191. package/dist/astro/routes/api/setup/dev-bypass.mjs +32 -26
  192. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  193. package/dist/astro/routes/api/setup/index.mjs +30 -26
  194. package/dist/astro/routes/api/setup/status.mjs +3 -3
  195. package/dist/astro/routes/api/snapshot.mjs +9 -8
  196. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +35 -32
  197. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +35 -32
  198. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +35 -32
  199. package/dist/astro/routes/api/taxonomies/index.mjs +35 -32
  200. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  201. package/dist/astro/routes/api/typegen.mjs +4 -4
  202. package/dist/astro/routes/api/well-known/auth.mjs +3 -3
  203. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
  204. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
  205. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +31 -28
  206. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +32 -29
  207. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +32 -29
  208. package/dist/astro/routes/api/widget-areas/_name_.mjs +29 -27
  209. package/dist/astro/routes/api/widget-areas/index.mjs +32 -29
  210. package/dist/astro/routes/api/widget-components.mjs +2 -2
  211. package/dist/astro/routes/robots.txt.mjs +9 -8
  212. package/dist/astro/routes/sitemap-_collection_.xml.mjs +24 -15
  213. package/dist/astro/routes/sitemap.xml.mjs +10 -9
  214. package/dist/astro/session-driver.d.mts +1 -1
  215. package/dist/astro/session-driver.mjs +3 -3
  216. package/dist/astro/types.d.mts +21 -13
  217. package/dist/{audit-D1cbG7xH.mjs → audit-ByVKIwWF.mjs} +1 -1
  218. package/dist/auth/providers/github.d.mts +1 -1
  219. package/dist/auth/providers/google.d.mts +1 -1
  220. package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-CqeUmQsv.mjs} +1 -1
  221. package/dist/{authorize-BLO0m7fW.mjs → authorize-CcBxcHtz.mjs} +1 -1
  222. package/dist/{briefing-CObXGOGz.mjs → briefing-BJaJI8dm.mjs} +2 -1
  223. package/dist/{briefing-gKWiGLt1.mjs → briefing-CawZ59CY.mjs} +90 -28
  224. package/dist/bundle-7C_DpkEq.mjs +602 -0
  225. package/dist/{byline-1ntDwv8c.mjs → byline-e51-fWRs.mjs} +30 -62
  226. package/dist/{byline-fields-BX7rWKNU.d.mts → byline-fields-CUvbslGc.d.mts} +49 -6
  227. package/dist/{byline-fields-C9_iaPaM.mjs → byline-fields-D-N5qVIG.mjs} +1 -1
  228. package/dist/{byline-fields-B-ZkoVft.mjs → byline-fields-DOJO16Gm.mjs} +3 -3
  229. package/dist/{byline-registry-CUSvkasJ.mjs → byline-registry-87nNnYl4.mjs} +2 -2
  230. package/dist/{bylines-bC15ZqAv.mjs → bylines-CMQNCNFh.mjs} +9 -3
  231. package/dist/{bylines-DtxChhN_.mjs → bylines-y4LO-dTj.mjs} +5 -5
  232. package/dist/{cache-DbKyr60Q.mjs → cache-C-FNTFYK.mjs} +2 -2
  233. package/dist/{chunks-C5zp2xir.mjs → chunks-CxBt-GxR.mjs} +1 -1
  234. package/dist/cli/index.mjs +820 -1276
  235. package/dist/client/external-auth-headers.d.mts +1 -1
  236. package/dist/client/index.d.mts +1 -1
  237. package/dist/client/index.mjs +2 -1
  238. package/dist/{comment-CXDOQ93N.mjs → comment-DlA4iChg.mjs} +13 -3
  239. package/dist/comment-reaction-DfFao1ST.mjs +58 -0
  240. package/dist/{comments-hK-rdzJ9.mjs → comments-DApFGMsP.mjs} +1 -1
  241. package/dist/{content-QaryevFO.mjs → content-Bh4BDjv8.mjs} +51 -34
  242. package/dist/content-refresh-CgutSUfO.mjs +1576 -0
  243. package/dist/{context-CoYb_fvK.mjs → context-C5W3G18y.mjs} +111 -50
  244. package/dist/{context-DBL1ib4v.mjs → context-CK4ym2Sf.mjs} +2 -2
  245. package/dist/{context-route-helpers-CYQVmbIm.mjs → context-route-helpers-MASyGgWf.mjs} +2 -1
  246. package/dist/{cron-DxCAU_Sn.mjs → cron-cKcNTix_.mjs} +7 -3
  247. package/dist/{dashboard-DNlqsknJ.mjs → dashboard-DQkVT7Ei.mjs} +4 -4
  248. package/dist/db/index.d.mts +3 -3
  249. package/dist/db/index.mjs +1 -1
  250. package/dist/db/libsql.d.mts +1 -1
  251. package/dist/db/postgres.d.mts +1 -1
  252. package/dist/db/sqlite.d.mts +1 -1
  253. package/dist/{device-flow-DygsFPGL.mjs → device-flow-BnqRH-T9.mjs} +5 -5
  254. package/dist/{placeholder-BDo81Is5.mjs → enrich-DIFIFA8O.mjs} +36 -9
  255. package/dist/{error-DCSuUAZW.mjs → error-CytFlgcd.mjs} +5 -0
  256. package/dist/field-defs-cache-DRNdhBJv.mjs +49 -0
  257. package/dist/{fts-manager-CIZlScg5.mjs → fts-manager-Crzypjqu.mjs} +1 -1
  258. package/dist/hitl-Hw1RmWOq.mjs +677 -0
  259. package/dist/{hitl-requests-CGQwOEiq.mjs → hitl-requests-B4Vbcmaq.mjs} +2 -2
  260. package/dist/{hitl-route-helpers-GSDLNPpN.mjs → hitl-route-helpers-hEVzvP8l.mjs} +5 -4
  261. package/dist/import-Bh9biJfx.mjs +1354 -0
  262. package/dist/{index-CwRuZ-u8.d.mts → index-D4y6NGiy.d.mts} +75 -3
  263. package/dist/index.d.mts +17 -16
  264. package/dist/index.mjs +81 -69
  265. package/dist/{jsonld-DZ67souc.d.mts → jsonld-Dq0gsnOH.d.mts} +8 -4
  266. package/dist/{load-xE01Jm0V.mjs → load-DmYeniXl.mjs} +1 -1
  267. package/dist/{loader-tg63WSY2.mjs → loader-CjWqjweO.mjs} +117 -31
  268. package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-BxVPYMJR.mjs} +34 -1
  269. package/dist/mcp-reviewed-executor-TwVbMzG6.mjs +555 -0
  270. package/dist/media/image-endpoint.d.mts +32 -0
  271. package/dist/media/image-endpoint.mjs +111 -0
  272. package/dist/media/index.d.mts +27 -2
  273. package/dist/media/index.mjs +5 -3
  274. package/dist/media/local-runtime.d.mts +16 -11
  275. package/dist/media/local-runtime.mjs +10 -8
  276. package/dist/{media-DUAjMfvR.mjs → media-DMj0grzC.mjs} +3 -1
  277. package/dist/{media-allowlist-BsXkT9RK.mjs → media-allowlist-BlVCSzHx.mjs} +1 -1
  278. package/dist/media-url-lEKSrpr9.mjs +20 -0
  279. package/dist/{menus-WpFRMXjz.mjs → menus-TaW1gKnk.mjs} +19 -5
  280. package/dist/{menus-DU1eZqw_.mjs → menus-xvsnVZXw.mjs} +80 -15
  281. package/dist/{normalize-DUnoXAa9.mjs → normalize-5ek_z7de.mjs} +8 -1
  282. package/dist/{oauth-authorization-D-1p52Je.mjs → oauth-authorization-DiaGvRVz.mjs} +5 -5
  283. package/dist/{oauth-clients-CzeMGyUU.mjs → oauth-clients-Dl9E8dEM.mjs} +2 -2
  284. package/dist/object-cache/memory.d.mts +14 -0
  285. package/dist/object-cache/memory.mjs +55 -0
  286. package/dist/object-cache-D51qOseS.mjs +419 -0
  287. package/dist/page/index.d.mts +4 -3
  288. package/dist/page/index.mjs +2 -2
  289. package/dist/{parse-CneSgl7-.mjs → parse-CbymENaR.mjs} +1 -1
  290. package/dist/{parser-DxfsARXL.mjs → parser-C1nYd-81.mjs} +151 -9
  291. package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-uvNRZBX9.d.mts} +12 -4
  292. package/dist/plugin-utils.d.mts +9 -9
  293. package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
  294. package/dist/plugins/adapt-sandbox-entry.mjs +11 -2
  295. package/dist/{plugins-C57YQi4l.mjs → plugins-BolVa-tl.mjs} +832 -64
  296. package/dist/{transport-LSdZVXHF.mjs → portable-text-dA_UlJwW.mjs} +1 -134
  297. package/dist/{preview-D5rvDhRt.mjs → preview-vSVg6fwG.mjs} +4 -3
  298. package/dist/process-cache-7xgAO9JY.mjs +106 -0
  299. package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-MD8zAbnH.d.mts} +1 -1
  300. package/dist/{public-url-DLUM5OOv.mjs → public-url-BEz_sM9n.mjs} +24 -18
  301. package/dist/{public-url-B5HaoGzj.d.mts → public-url-gsp3oUbu.d.mts} +5 -4
  302. package/dist/{query-BYc3oruA.mjs → query-CfRCdaL3.mjs} +281 -76
  303. package/dist/{query-DKEwzobh.mjs → query-jaAmw8E1.mjs} +11 -6
  304. package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-ZLdyWoZF.mjs} +2 -2
  305. package/dist/{redirect-C2zXRj3c.mjs → redirect-BAjt4Z6b.mjs} +2 -2
  306. package/dist/{redirects-YZo_znWG.mjs → redirects-BTdwpQtE.mjs} +47 -24
  307. package/dist/{redirects-ocRJmQHP.mjs → redirects-CA-xylPG.mjs} +19 -11
  308. package/dist/{registry-CTkbIDB9.mjs → registry-CtyVedcN.mjs} +130 -77
  309. package/dist/request-context.d.mts +2 -0
  310. package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CUypToDJ.mjs} +1 -1
  311. package/dist/{review-requests-C0un5kdV.mjs → review-requests-C9Ff11Vq.mjs} +1 -1
  312. package/dist/{review-requests-gGMyYYhy.mjs → review-requests-DUyEmtmG.mjs} +1 -1
  313. package/dist/{runner-D4FL9usy.d.mts → runner-1tC2tIRV.d.mts} +1 -1
  314. package/dist/runner-DB7CRfOF.mjs +6740 -0
  315. package/dist/{runtime-DEWQpZ-4.d.mts → runtime-BOeiQsCv.d.mts} +2028 -1564
  316. package/dist/runtime.d.mts +10 -10
  317. package/dist/runtime.mjs +4 -4
  318. package/dist/schema-DXdYj4R3.mjs +8 -0
  319. package/dist/{search-axGQ1KY3.mjs → search-DSaLgEFI.mjs} +5 -3
  320. package/dist/{secrets-062Izo8i.mjs → secrets-CDZo2k8L.mjs} +15 -12
  321. package/dist/{sections-OLKgXL10.mjs → sections-PVVXHGfp.mjs} +2 -2
  322. package/dist/seed/index.d.mts +2 -2
  323. package/dist/seed/index.mjs +22 -19
  324. package/dist/seo/index.d.mts +1 -1
  325. package/dist/seo/index.mjs +3 -12
  326. package/dist/{seo-Cd45Po8L.mjs → seo-CQG3GCHQ.mjs} +5 -2
  327. package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-C1EnikHB.mjs} +11 -3
  328. package/dist/{seo-5lJOtB5J.mjs → seo-qa7Dn0jK.mjs} +22 -4
  329. package/dist/{service-Bwad8s5h.mjs → service-DiN4ZuPp.mjs} +2 -2
  330. package/dist/session-user-CAKImna3.mjs +22 -0
  331. package/dist/{settings-yLjz_I4T.mjs → settings-BbqgHWpU.mjs} +28 -55
  332. package/dist/{settings-lAHjaUit.mjs → settings-i4VPP8bT.mjs} +2 -2
  333. package/dist/{setup-complete--PradA4R.mjs → setup-complete-B8fl-mjV.mjs} +1 -1
  334. package/dist/{site-activity-D7Xyropw.mjs → site-activity-Dy3FROs0.mjs} +1 -1
  335. package/dist/{site-context-DaN9Z91j.mjs → site-context-DQiL8Fl5.mjs} +23 -652
  336. package/dist/{site-url-DpGZo9Z6.mjs → site-url-BML3GQYm.mjs} +1 -1
  337. package/dist/status-DANd8ERo.mjs +21 -0
  338. package/dist/storage/local.d.mts +1 -1
  339. package/dist/storage/local.mjs +1 -1
  340. package/dist/storage/s3.d.mts +1 -1
  341. package/dist/storage/s3.mjs +1 -1
  342. package/dist/{taxonomies-uXVEoQso.mjs → taxonomies-9s-v03H-.mjs} +36 -29
  343. package/dist/taxonomies-DRiixp_E.mjs +443 -0
  344. package/dist/{taxonomy-CBmkmMuU.mjs → taxonomy-Dvsw6BOs.mjs} +44 -9
  345. package/dist/{tokens-CjSgb0AC.mjs → tokens-1RK1n6ED.mjs} +1 -1
  346. package/dist/transport-BNmCqLu7.mjs +134 -0
  347. package/dist/types-4garmdWa.mjs +66 -0
  348. package/dist/{types-DSPGWjxO.d.mts → types-C8XW6L19.d.mts} +225 -4
  349. package/dist/{types-GaCtZ1k9.d.mts → types-CDpH6MA4.d.mts} +18 -0
  350. package/dist/{types-DRIKLmJI.d.mts → types-C_ly5eTp.d.mts} +17 -2
  351. package/dist/types-DF7ZuGGk.d.mts +118 -0
  352. package/dist/types-DU0bU2Wu.d.mts +2392 -0
  353. package/dist/{types-CwawBUTa.d.mts → types-DW_-sFyz.d.mts} +2 -1
  354. package/dist/{types-DfuD0Afl.mjs → types-Dq1qT19x.mjs} +2 -2
  355. package/dist/ui/server-runtime.d.mts +15 -15
  356. package/dist/ui/server-runtime.mjs +25 -21
  357. package/dist/url-Cac7a9QZ.mjs +33 -0
  358. package/dist/{user-DtNmjNYt.mjs → user-BIZPzCb9.mjs} +2 -2
  359. package/dist/{utils-wv-zvC-Y.mjs → utils-CMDhr5Xd.mjs} +129 -7
  360. package/dist/{validate-BMs11tan.d.mts → validate-CZvb-BKB.d.mts} +10 -7
  361. package/dist/{validate-7SYRbz2f.mjs → validate-DNs0pTSc.mjs} +11 -6
  362. package/dist/version-BTvfRGc6.mjs +6 -0
  363. package/dist/{widgets-DR8EHuRO.mjs → widgets-f0ibZUIq.mjs} +46 -43
  364. package/dist/{wordpress-slugs-Dvhxh4cl.mjs → wordpress-slugs-BhHJX8XE.mjs} +1 -1
  365. package/dist/{zod-generator-BS9-umbk.mjs → zod-generator-B7TMjyFJ.mjs} +41 -13
  366. package/package.json +31 -8
  367. package/src/components/Block.astro +50 -0
  368. package/src/components/Comments.astro +143 -1
  369. package/src/components/DinewayHead.astro +19 -2
  370. package/src/components/DinewayImage.astro +66 -33
  371. package/src/components/DinewayMedia.astro +1 -2
  372. package/src/components/Image.astro +85 -40
  373. package/src/components/InlinePortableTextEditor.tsx +12 -2
  374. package/src/components/JsonLdScript.astro +9 -0
  375. package/src/components/LiveSearch.astro +40 -4
  376. package/src/components/index.ts +4 -0
  377. package/src/components/live-search-routing.ts +30 -0
  378. package/src/components/portable-text-text-align.ts +15 -0
  379. package/src/ui.ts +2 -0
  380. package/dist/entity-aliases-Egjmqc7I.mjs +0 -51
  381. package/dist/import-CvHY6sf5.mjs +0 -684
  382. package/dist/runner-B-tbV751.mjs +0 -2741
  383. package/dist/schema-B6zyB-Xn.mjs +0 -8
  384. package/dist/taxonomies-CNOGeC-3.mjs +0 -327
  385. package/dist/types-eu5UDgHN.d.mts +0 -652
  386. package/dist/version-xlzMSXF2.mjs +0 -6
  387. /package/dist/{adapters-OQCImOL7.d.mts → adapters-NVSs4UH7.d.mts} +0 -0
  388. /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-2r7OWi_I.mjs} +0 -0
  389. /package/dist/{base64-C1Q9yr0B.mjs → base64-F8-DUraK.mjs} +0 -0
  390. /package/dist/{challenge-store-CRSz-Xim.mjs → challenge-store-Bjlepa2E.mjs} +0 -0
  391. /package/dist/{components--pg6zBvu.mjs → components-Bclf98Be.mjs} +0 -0
  392. /package/dist/{context-types-DQh_XKkn.mjs → context-types-DqTo6C79.mjs} +0 -0
  393. /package/dist/{default-B6iaLvP7.mjs → default--K40jqm0.mjs} +0 -0
  394. /package/dist/{email-console-BOVqIYpB.mjs → email-console-ChgKFO8-.mjs} +0 -0
  395. /package/dist/{escape-BDgouFFY.mjs → escape-Bd4P_xKg.mjs} +0 -0
  396. /package/dist/{experimental-workflows-Dh4DUoD_.mjs → experimental-workflows-BMsUnIAw.mjs} +0 -0
  397. /package/dist/{mime-8pAB8-77.mjs → mime-CA7Lgovc.mjs} +0 -0
  398. /package/dist/{mode-CpyEz8pe.mjs → mode-C4CIyjtR.mjs} +0 -0
  399. /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CNoXafF7.mjs} +0 -0
  400. /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-Ygw4bNyt.mjs} +0 -0
  401. /package/dist/{options-BvJoSSJR.mjs → options-DQPTH5n0.mjs} +0 -0
  402. /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-BUwu8BA3.mjs} +0 -0
  403. /package/dist/{patterns-r-0n824Y.mjs → patterns-BhAvqO0S.mjs} +0 -0
  404. /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-D0w9dqjm.mjs} +0 -0
  405. /package/dist/{redirect-BjIBtDWY.mjs → redirect-wphRBv4y.mjs} +0 -0
  406. /package/dist/{request-cache-CYMbwZc6.mjs → request-cache-D9GQBxMP.mjs} +0 -0
  407. /package/dist/{resolve-DTuDyYKs.mjs → resolve-Cb6Dbz-C.mjs} +0 -0
  408. /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-CoyjILvW.mjs} +0 -0
  409. /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-C3mqXg4C.mjs} +0 -0
  410. /package/dist/{slugify-BzGxlOFx.mjs → slugify-KSsVD_D3.mjs} +0 -0
  411. /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-DWe8jwAp.mjs} +0 -0
  412. /package/dist/{transaction-CShMWIej.mjs → transaction-C2EOMTJA.mjs} +0 -0
  413. /package/dist/{transport-BnsNxh2l.d.mts → transport-CcJu3Co8.d.mts} +0 -0
  414. /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-DTXQ2IMv.mjs} +0 -0
  415. /package/dist/{types-BO8TGjS8.mjs → types-B3t5cxhU.mjs} +0 -0
  416. /package/dist/{types-nP9vGUFq.d.mts → types-C46EvNdc.d.mts} +0 -0
  417. /package/dist/{types-Cg276-3z.mjs → types-C5CVgwsV.mjs} +0 -0
  418. /package/dist/{types-DZpT-PnG.d.mts → types-POH8PQZh.d.mts} +0 -0
  419. /package/dist/{types-Dryvv7LH.d.mts → types-Rc3gQqqw.d.mts} +0 -0
  420. /package/dist/{url-w7Mp5qAD.mjs → url-CpyFDFpO.mjs} +0 -0
@@ -1,4 +1,4 @@
1
- import { t as OptionsRepository } from "./options-BvJoSSJR.mjs";
1
+ import { t as OptionsRepository } from "./options-DQPTH5n0.mjs";
2
2
 
3
3
  //#region src/api/site-url.ts
4
4
  async function getSiteBaseUrl(db, request) {
@@ -0,0 +1,21 @@
1
+ //#region src/redirects/status.ts
2
+ /**
3
+ * Redirect rule status codes.
4
+ *
5
+ * Redirect statuses issue a Location header. Terminal statuses serve the
6
+ * status directly with no destination.
7
+ */
8
+ const REDIRECT_STATUSES = [
9
+ 301,
10
+ 302,
11
+ 307,
12
+ 308
13
+ ];
14
+ const TERMINAL_STATUSES = [410, 451];
15
+ const REDIRECT_RULE_STATUSES = [...REDIRECT_STATUSES, ...TERMINAL_STATUSES];
16
+ function isTerminalStatus(type) {
17
+ return TERMINAL_STATUSES.includes(type);
18
+ }
19
+
20
+ //#endregion
21
+ export { isTerminalStatus as n, REDIRECT_RULE_STATUSES as t };
@@ -1,4 +1,4 @@
1
- import { a as ListOptions, d as Storage, l as SignedUploadOptions, o as ListResult, p as UploadResult, r as DownloadResult, s as LocalStorageConfig, u as SignedUploadUrl } from "../types-DZpT-PnG.mjs";
1
+ import { a as ListOptions, d as Storage, l as SignedUploadOptions, o as ListResult, p as UploadResult, r as DownloadResult, s as LocalStorageConfig, u as SignedUploadUrl } from "../types-POH8PQZh.mjs";
2
2
 
3
3
  //#region src/storage/local.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as DinewayStorageError } from "../types-Cg276-3z.mjs";
1
+ import { t as DinewayStorageError } from "../types-C5CVgwsV.mjs";
2
2
  import { createReadStream, existsSync } from "node:fs";
3
3
  import * as path from "node:path";
4
4
  import mime from "mime/lite";
@@ -1,4 +1,4 @@
1
- import { a as ListOptions, c as S3StorageConfig, d as Storage, l as SignedUploadOptions, o as ListResult, p as UploadResult, r as DownloadResult, u as SignedUploadUrl } from "../types-DZpT-PnG.mjs";
1
+ import { a as ListOptions, c as S3StorageConfig, d as Storage, l as SignedUploadOptions, o as ListResult, p as UploadResult, r as DownloadResult, u as SignedUploadUrl } from "../types-POH8PQZh.mjs";
2
2
 
3
3
  //#region src/storage/s3.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as DinewayStorageError } from "../types-Cg276-3z.mjs";
1
+ import { t as DinewayStorageError } from "../types-C5CVgwsV.mjs";
2
2
  import { DeleteObjectCommand, GetObjectCommand, HeadObjectCommand, ListObjectsV2Command, PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
3
3
  import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
4
4
 
@@ -1,6 +1,6 @@
1
- import { a as __exportAll } from "./runner-B-tbV751.mjs";
2
- import { t as TaxonomyRepository } from "./taxonomy-CBmkmMuU.mjs";
3
- import { c as invalidateTermCache } from "./taxonomies-CNOGeC-3.mjs";
1
+ import { a as __exportAll } from "./runner-DB7CRfOF.mjs";
2
+ import { t as TaxonomyRepository } from "./taxonomy-Dvsw6BOs.mjs";
3
+ import { c as invalidateTaxonomyDefsCache, l as invalidateTermCache } from "./taxonomies-DRiixp_E.mjs";
4
4
  import { ulid } from "ulidx";
5
5
 
6
6
  //#region src/api/handlers/taxonomies.ts
@@ -19,11 +19,14 @@ const NAME_PATTERN = /^[a-z][a-z0-9_]*$/;
19
19
  * Build tree structure from flat terms
20
20
  */
21
21
  function buildTree(flatTerms) {
22
- const map = /* @__PURE__ */ new Map();
22
+ const byLocaleGroup = /* @__PURE__ */ new Map();
23
23
  const roots = [];
24
- for (const term of flatTerms) map.set(term.id, term);
25
- for (const term of flatTerms) if (term.parentId && map.has(term.parentId)) map.get(term.parentId).children.push(term);
26
- else roots.push(term);
24
+ for (const term of flatTerms) byLocaleGroup.set(`${term.locale}::${term.translationGroup ?? term.id}`, term);
25
+ for (const term of flatTerms) {
26
+ const parent = term.parentId ? byLocaleGroup.get(`${term.locale}::${term.parentId}`) : void 0;
27
+ if (parent) parent.children.push(term);
28
+ else roots.push(term);
29
+ }
27
30
  return roots;
28
31
  }
29
32
  /**
@@ -144,6 +147,7 @@ async function handleTaxonomyCreate(db, input) {
144
147
  ...input.locale !== void 0 ? { locale: input.locale } : {},
145
148
  translation_group: translationGroup ?? id
146
149
  }).execute();
150
+ invalidateTaxonomyDefsCache();
147
151
  return {
148
152
  success: true,
149
153
  data: { taxonomy: rowToDef(await db.selectFrom("_dineway_taxonomy_defs").selectAll().where("id", "=", id).executeTakeFirstOrThrow()) }
@@ -212,15 +216,12 @@ async function handleTermList(db, taxonomyName, options = {}) {
212
216
  * - `parentId === null` -> caller intends to detach; no-op here.
213
217
  * - parent must exist (FK exists -> term row not soft-deleted).
214
218
  * - parent must live in the same taxonomy.
215
- * - if `termId` is provided (update path), reject `parentId === termId`
216
- * (self-parent) and walk up the parent chain to detect cycles.
219
+ * - reject a parent in the term's own translation_group.
220
+ * - if `termId` is provided (update path), walk up the parent chain to
221
+ * detect cycles.
217
222
  */
218
- async function validateParentTerm(repo, taxonomyName, termId, parentId) {
223
+ async function validateParentTerm(repo, taxonomyName, termId, parentId, selfGroup) {
219
224
  if (parentId === void 0 || parentId === null) return null;
220
- if (termId !== void 0 && parentId === termId) return {
221
- code: "VALIDATION_ERROR",
222
- message: "A term cannot be its own parent"
223
- };
224
225
  const parent = await repo.findById(parentId);
225
226
  if (!parent) return {
226
227
  code: "VALIDATION_ERROR",
@@ -230,11 +231,21 @@ async function validateParentTerm(repo, taxonomyName, termId, parentId) {
230
231
  code: "VALIDATION_ERROR",
231
232
  message: `Parent term '${parentId}' belongs to taxonomy '${parent.name}', not '${taxonomyName}'`
232
233
  };
234
+ const parentGroup = parent.translationGroup ?? parent.id;
235
+ let termGroup = selfGroup ?? null;
236
+ if (termId !== void 0) {
237
+ const term = await repo.findById(termId);
238
+ termGroup = term ? term.translationGroup ?? term.id : termId;
239
+ }
240
+ if (termGroup !== null && parentGroup === termGroup) return {
241
+ code: "VALIDATION_ERROR",
242
+ message: "A term cannot be its own parent"
243
+ };
233
244
  const MAX_DEPTH = 100;
234
245
  let cursor = parent.parentId;
235
246
  let steps = 0;
236
247
  while (cursor !== null && steps < MAX_DEPTH) {
237
- if (termId !== void 0 && cursor === termId) return {
248
+ if (termGroup !== null && cursor === termGroup) return {
238
249
  code: "VALIDATION_ERROR",
239
250
  message: "Cycle detected: cannot make a descendant the parent"
240
251
  };
@@ -257,7 +268,7 @@ async function handleTermCreate(db, taxonomyName, input) {
257
268
  const lookup = await requireTaxonomyDef(db, taxonomyName);
258
269
  if (!lookup.success) return lookup;
259
270
  const repo = new TaxonomyRepository(db);
260
- let parentId = input.parentId === "" || input.parentId === void 0 ? void 0 : input.parentId;
271
+ const parentId = input.parentId === "" || input.parentId === void 0 ? void 0 : input.parentId;
261
272
  if (await repo.findBySlug(taxonomyName, input.slug, input.locale)) return {
262
273
  success: false,
263
274
  error: {
@@ -265,16 +276,12 @@ async function handleTermCreate(db, taxonomyName, input) {
265
276
  message: input.locale ? `Term '${input.slug}' already exists in '${taxonomyName}' (${input.locale})` : `Term with slug '${input.slug}' already exists in taxonomy '${taxonomyName}'`
266
277
  }
267
278
  };
268
- if (input.translationOf && parentId) {
269
- if ((await repo.findById(input.translationOf))?.parentId === parentId && input.locale) {
270
- const sourceParent = await repo.findById(parentId);
271
- if (sourceParent?.translationGroup) {
272
- const translatedParent = await db.selectFrom("taxonomies").select("id").where("translation_group", "=", sourceParent.translationGroup).where("locale", "=", input.locale).executeTakeFirst();
273
- if (translatedParent) parentId = translatedParent.id;
274
- }
275
- }
279
+ let selfGroup = null;
280
+ if (input.translationOf) {
281
+ const source = await repo.findById(input.translationOf);
282
+ selfGroup = source ? source.translationGroup ?? source.id : null;
276
283
  }
277
- const parentError = await validateParentTerm(repo, taxonomyName, void 0, parentId);
284
+ const parentError = await validateParentTerm(repo, taxonomyName, void 0, parentId, selfGroup);
278
285
  if (parentError) return {
279
286
  success: false,
280
287
  error: parentError
@@ -288,7 +295,7 @@ async function handleTermCreate(db, taxonomyName, input) {
288
295
  locale: input.locale,
289
296
  translationOf: input.translationOf
290
297
  });
291
- /* @__PURE__ */ invalidateTermCache();
298
+ invalidateTermCache();
292
299
  return {
293
300
  success: true,
294
301
  data: { term: {
@@ -327,7 +334,7 @@ async function handleTermGet(db, taxonomyName, termSlug, options = {}) {
327
334
  }
328
335
  };
329
336
  const count = await repo.countEntriesWithTerm(term.id);
330
- const children = await repo.findChildren(term.id);
337
+ const children = await repo.findChildren(term.id, term.locale);
331
338
  return {
332
339
  success: true,
333
340
  data: { term: {
@@ -428,7 +435,7 @@ async function handleTermUpdate(db, taxonomyName, termSlug, input, options = {})
428
435
  parentId: newParentId,
429
436
  data: input.description !== void 0 ? { description: input.description } : void 0
430
437
  });
431
- /* @__PURE__ */ invalidateTermCache();
438
+ invalidateTermCache();
432
439
  if (!updated) return {
433
440
  success: false,
434
441
  error: {
@@ -487,7 +494,7 @@ async function handleTermDelete(db, taxonomyName, termSlug, options = {}) {
487
494
  message: "Failed to delete term"
488
495
  }
489
496
  };
490
- /* @__PURE__ */ invalidateTermCache();
497
+ invalidateTermCache();
491
498
  return {
492
499
  success: true,
493
500
  data: { deleted: true }
@@ -0,0 +1,443 @@
1
+ import { a as __exportAll } from "./runner-DB7CRfOF.mjs";
2
+ import { getRequestContext } from "./request-context.mjs";
3
+ import { a as resetTaxonomyNamesCache, o as isMissingTableError, r as getDb } from "./loader-CjWqjweO.mjs";
4
+ import { d as invalidateTaxonomyObjectCache, f as isObjectCacheActive, n as cachedQuery, t as CacheNamespace } from "./object-cache-D51qOseS.mjs";
5
+ import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-CxBt-GxR.mjs";
6
+ import { i as setRequestCacheEntry, n as peekRequestCache, r as requestCached } from "./request-cache-D9GQBxMP.mjs";
7
+ import { i as resolveLocaleChain, r as resolveLocale } from "./resolve-Cb6Dbz-C.mjs";
8
+
9
+ //#region src/taxonomies/index.ts
10
+ /**
11
+ * Runtime API for taxonomies.
12
+ *
13
+ * Public helpers are locale-aware. Because `content_taxonomies.taxonomy_id`
14
+ * stores a term translation_group, joins use `taxonomies.translation_group`
15
+ * and optionally filter the requested locale.
16
+ */
17
+ var taxonomies_exports = /* @__PURE__ */ __exportAll({
18
+ getAllTermsForEntries: () => getAllTermsForEntries,
19
+ getEntriesByTerm: () => getEntriesByTerm,
20
+ getEntryTerms: () => getEntryTerms,
21
+ getTaxonomyDef: () => getTaxonomyDef,
22
+ getTaxonomyDefs: () => getTaxonomyDefs,
23
+ getTaxonomyTerms: () => getTaxonomyTerms,
24
+ getTerm: () => getTerm,
25
+ getTermsForEntries: () => getTermsForEntries,
26
+ invalidateTaxonomyDefsCache: () => invalidateTaxonomyDefsCache,
27
+ invalidateTermCache: () => invalidateTermCache,
28
+ primeFoldedEntryTerms: () => primeFoldedEntryTerms
29
+ });
30
+ function invalidateTermCache() {
31
+ invalidateTaxonomyObjectCache();
32
+ }
33
+ const TAXONOMY_DEFS_CACHE_KEY = Symbol.for("dineway:taxonomy-defs");
34
+ function getTaxonomyDefsHolder() {
35
+ const existing = Reflect.get(globalThis, TAXONOMY_DEFS_CACHE_KEY);
36
+ if (isTaxonomyDefsHolder(existing)) return existing;
37
+ const holder = {
38
+ version: 0,
39
+ cache: /* @__PURE__ */ new Map()
40
+ };
41
+ Reflect.set(globalThis, TAXONOMY_DEFS_CACHE_KEY, holder);
42
+ return holder;
43
+ }
44
+ function isTaxonomyDefsHolder(value) {
45
+ if (value && typeof value === "object" && "version" in value && "cache" in value) return typeof value.version === "number" && value.cache instanceof Map;
46
+ return false;
47
+ }
48
+ const taxonomyDefsHolder = getTaxonomyDefsHolder();
49
+ function invalidateTaxonomyDefsCache() {
50
+ taxonomyDefsHolder.version++;
51
+ taxonomyDefsHolder.cache.clear();
52
+ resetTaxonomyNamesCache();
53
+ invalidateTaxonomyObjectCache();
54
+ }
55
+ async function fetchTaxonomyDefs(locale) {
56
+ let query = (await getDb()).selectFrom("_dineway_taxonomy_defs").selectAll();
57
+ if (locale !== void 0) query = query.where("locale", "=", locale);
58
+ return (await query.execute()).map(rowToTaxonomyDef);
59
+ }
60
+ function loadTaxonomyDefs(localeKey, locale) {
61
+ if (getRequestContext()?.dbIsIsolated === true) return fetchTaxonomyDefs(locale);
62
+ const cached = taxonomyDefsHolder.cache.get(localeKey);
63
+ if (cached && cached.version === taxonomyDefsHolder.version) return cached.promise;
64
+ const version = taxonomyDefsHolder.version;
65
+ const promise = fetchTaxonomyDefs(locale).catch((error) => {
66
+ if (taxonomyDefsHolder.cache.get(localeKey)?.promise === promise) taxonomyDefsHolder.cache.delete(localeKey);
67
+ throw error;
68
+ });
69
+ taxonomyDefsHolder.cache.set(localeKey, {
70
+ version,
71
+ promise
72
+ });
73
+ return promise;
74
+ }
75
+ /**
76
+ * Get every taxonomy definition for the active locale.
77
+ */
78
+ async function getTaxonomyDefs(options = {}) {
79
+ const locale = resolveLocale(options.locale);
80
+ const localeKey = locale ?? "*";
81
+ return requestCached(`taxonomy-defs:${localeKey}`, async () => {
82
+ if (await isObjectCacheActive()) return cachedQuery({
83
+ namespace: CacheNamespace.TAXONOMIES,
84
+ key: `defs:${localeKey}`,
85
+ load: () => fetchTaxonomyDefs(locale)
86
+ });
87
+ return loadTaxonomyDefs(localeKey, locale);
88
+ });
89
+ }
90
+ /**
91
+ * Get a single taxonomy definition by name, following the locale fallback chain.
92
+ */
93
+ async function getTaxonomyDef(name, options = {}) {
94
+ const chain = resolveLocaleChain(options.locale);
95
+ const allDefs = peekRequestCache(`taxonomy-defs:${resolveLocale(options.locale) ?? "*"}`);
96
+ if (allDefs) {
97
+ const defs = await allDefs;
98
+ if (chain.length === 0) return defs.find((def) => def.name === name) ?? null;
99
+ for (const locale of chain) {
100
+ const found = defs.find((def) => def.name === name && def.locale === locale);
101
+ if (found) return found;
102
+ }
103
+ return null;
104
+ }
105
+ return requestCached(`taxonomy-def:${name}:${chain.join(",")}`, async () => {
106
+ const db = await getDb();
107
+ if (chain.length === 0) {
108
+ const row = await db.selectFrom("_dineway_taxonomy_defs").selectAll().where("name", "=", name).orderBy("locale", "asc").executeTakeFirst();
109
+ return row ? rowToTaxonomyDef(row) : null;
110
+ }
111
+ for (const locale of chain) {
112
+ const row = await db.selectFrom("_dineway_taxonomy_defs").selectAll().where("name", "=", name).where("locale", "=", locale).executeTakeFirst();
113
+ if (row) return rowToTaxonomyDef(row);
114
+ }
115
+ return null;
116
+ });
117
+ }
118
+ /**
119
+ * Get all terms for a taxonomy in the active locale.
120
+ */
121
+ async function getTaxonomyTerms(taxonomyName, options = {}) {
122
+ const locale = resolveLocale(options.locale);
123
+ const localeKey = locale ?? "*";
124
+ return requestCached(`taxonomy-terms:${taxonomyName}:${localeKey}`, () => cachedQuery({
125
+ namespace: CacheNamespace.TAXONOMIES,
126
+ key: `terms:${taxonomyName}:${localeKey}`,
127
+ load: async () => {
128
+ const db = await getDb();
129
+ const def = await getTaxonomyDef(taxonomyName, options);
130
+ if (!def) return [];
131
+ let termsQuery = db.selectFrom("taxonomies").selectAll().where("name", "=", taxonomyName).orderBy("label", "asc");
132
+ if (locale !== void 0) termsQuery = termsQuery.where("locale", "=", locale);
133
+ const rows = await termsQuery.execute();
134
+ const counts = await getTaxonomyTermCounts();
135
+ const flatTerms = rows.map((row) => ({
136
+ id: row.id,
137
+ name: row.name,
138
+ slug: row.slug,
139
+ label: row.label,
140
+ parent_id: row.parent_id,
141
+ data: row.data,
142
+ locale: row.locale,
143
+ translation_group: row.translation_group
144
+ }));
145
+ if (def.hierarchical) return buildTree(flatTerms, counts);
146
+ return flatTerms.map((term) => ({
147
+ id: term.id,
148
+ name: term.name,
149
+ slug: term.slug,
150
+ label: term.label,
151
+ description: term.data ? JSON.parse(term.data).description : void 0,
152
+ children: [],
153
+ count: counts.get(term.translation_group ?? term.id) ?? 0,
154
+ locale: term.locale,
155
+ translationGroup: term.translation_group
156
+ }));
157
+ }
158
+ }));
159
+ }
160
+ function getTaxonomyTermCounts() {
161
+ return requestCached("taxonomy-term-counts", async () => {
162
+ const countsResult = await (await getDb()).selectFrom("content_taxonomies").select(["taxonomy_id"]).select((eb) => eb.fn.count("entry_id").as("count")).groupBy("taxonomy_id").execute();
163
+ const counts = /* @__PURE__ */ new Map();
164
+ for (const row of countsResult) counts.set(row.taxonomy_id, row.count);
165
+ return counts;
166
+ });
167
+ }
168
+ /**
169
+ * Get a single term by taxonomy and slug, following the locale fallback chain.
170
+ */
171
+ async function getTerm(taxonomyName, slug, options = {}) {
172
+ const chain = resolveLocaleChain(options.locale);
173
+ return cachedQuery({
174
+ namespace: CacheNamespace.TAXONOMIES,
175
+ key: `term:${taxonomyName}:${slug}:${chain.join(",")}`,
176
+ load: async () => {
177
+ const db = await getDb();
178
+ const selectTerm = () => db.selectFrom("taxonomies").selectAll().where("name", "=", taxonomyName).where("slug", "=", slug);
179
+ let row;
180
+ if (chain.length === 0) row = await selectTerm().orderBy("locale", "asc").executeTakeFirst();
181
+ else {
182
+ row = void 0;
183
+ for (const locale of chain) {
184
+ row = await selectTerm().where("locale", "=", locale).executeTakeFirst();
185
+ if (row) break;
186
+ }
187
+ }
188
+ if (!row) return null;
189
+ let childrenQuery = db.selectFrom("taxonomies").selectAll().where("parent_id", "=", row.translation_group ?? row.id).orderBy("label", "asc");
190
+ if (row.locale) childrenQuery = childrenQuery.where("locale", "=", row.locale);
191
+ const [countResult, childRows] = await Promise.all([db.selectFrom("content_taxonomies").select((eb) => eb.fn.count("entry_id").as("count")).where("taxonomy_id", "=", row.translation_group ?? row.id).executeTakeFirst(), childrenQuery.execute()]);
192
+ const count = countResult?.count ?? 0;
193
+ const children = childRows.map((child) => ({
194
+ id: child.id,
195
+ name: child.name,
196
+ slug: child.slug,
197
+ label: child.label,
198
+ parentId: child.parent_id ?? void 0,
199
+ children: [],
200
+ locale: child.locale,
201
+ translationGroup: child.translation_group
202
+ }));
203
+ return {
204
+ id: row.id,
205
+ name: row.name,
206
+ slug: row.slug,
207
+ label: row.label,
208
+ parentId: row.parent_id ?? void 0,
209
+ description: row.data ? JSON.parse(row.data).description : void 0,
210
+ children,
211
+ count,
212
+ locale: row.locale,
213
+ translationGroup: row.translation_group
214
+ };
215
+ }
216
+ });
217
+ }
218
+ /**
219
+ * Get terms assigned to an entry, resolved into the active locale.
220
+ */
221
+ function getEntryTerms(collection, entryId, taxonomyName, options = {}) {
222
+ const locale = resolveLocale(options.locale);
223
+ return requestCached(`terms:${collection}:${entryId}:${taxonomyName ?? "*"}:${locale ?? "*"}`, () => cachedQuery({
224
+ namespace: CacheNamespace.TAXONOMIES,
225
+ key: `entry-terms:${collection}:${entryId}:${taxonomyName ?? "*"}:${locale ?? "*"}`,
226
+ load: async () => {
227
+ let query = (await getDb()).selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.translation_group", "content_taxonomies.taxonomy_id").selectAll("taxonomies").where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "=", entryId);
228
+ if (taxonomyName) query = query.where("taxonomies.name", "=", taxonomyName);
229
+ if (locale !== void 0) query = query.where("taxonomies.locale", "=", locale);
230
+ return (await query.execute()).map((row) => ({
231
+ id: row.id,
232
+ name: row.name,
233
+ slug: row.slug,
234
+ label: row.label,
235
+ parentId: row.parent_id ?? void 0,
236
+ children: [],
237
+ locale: row.locale,
238
+ translationGroup: row.translation_group
239
+ }));
240
+ }
241
+ }));
242
+ }
243
+ /**
244
+ * Get terms for multiple entries in one taxonomy.
245
+ */
246
+ async function getTermsForEntries(collection, entryIds, taxonomyName, options = {}) {
247
+ const result = /* @__PURE__ */ new Map();
248
+ const uniqueIds = [...new Set(entryIds)];
249
+ for (const id of uniqueIds) result.set(id, []);
250
+ if (uniqueIds.length === 0) return result;
251
+ const locale = resolveLocale(options.locale);
252
+ const localeKey = locale ?? "*";
253
+ const missedIds = [];
254
+ const cacheReads = [];
255
+ for (const id of uniqueIds) {
256
+ const cached = peekRequestCache(`terms:${collection}:${id}:${taxonomyName}:${localeKey}`);
257
+ if (cached) cacheReads.push(cached.then((terms) => ({
258
+ id,
259
+ terms
260
+ }), () => ({
261
+ id,
262
+ miss: true
263
+ })));
264
+ else missedIds.push(id);
265
+ }
266
+ for (const read of await Promise.all(cacheReads)) {
267
+ if ("miss" in read) {
268
+ missedIds.push(read.id);
269
+ continue;
270
+ }
271
+ result.set(read.id, read.terms.map((term) => ({
272
+ ...term,
273
+ children: [...term.children]
274
+ })));
275
+ }
276
+ if (missedIds.length === 0) return result;
277
+ const db = await getDb();
278
+ for (const chunk of chunks(missedIds, SQL_BATCH_SIZE)) {
279
+ let rows;
280
+ try {
281
+ let query = db.selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.translation_group", "content_taxonomies.taxonomy_id").select([
282
+ "content_taxonomies.entry_id",
283
+ "taxonomies.id",
284
+ "taxonomies.name",
285
+ "taxonomies.slug",
286
+ "taxonomies.label",
287
+ "taxonomies.parent_id",
288
+ "taxonomies.locale",
289
+ "taxonomies.translation_group"
290
+ ]).where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "in", chunk).where("taxonomies.name", "=", taxonomyName).orderBy("taxonomies.label", "asc");
291
+ if (locale !== void 0) query = query.where("taxonomies.locale", "=", locale);
292
+ rows = await query.execute();
293
+ } catch (error) {
294
+ if (isMissingTableError(error)) return result;
295
+ throw error;
296
+ }
297
+ for (const row of rows) {
298
+ const term = {
299
+ id: row.id,
300
+ name: row.name,
301
+ slug: row.slug,
302
+ label: row.label,
303
+ parentId: row.parent_id ?? void 0,
304
+ children: [],
305
+ locale: row.locale,
306
+ translationGroup: row.translation_group
307
+ };
308
+ const terms = result.get(row.entry_id);
309
+ if (terms) terms.push(term);
310
+ }
311
+ }
312
+ return result;
313
+ }
314
+ /**
315
+ * Batch-fetch terms for multiple entries across all taxonomies.
316
+ */
317
+ async function getAllTermsForEntries(collection, entryIds, options = {}) {
318
+ const result = /* @__PURE__ */ new Map();
319
+ const uniqueIds = [...new Set(entryIds)];
320
+ for (const id of uniqueIds) result.set(id, {});
321
+ if (uniqueIds.length === 0) return result;
322
+ const db = await getDb();
323
+ const locale = resolveLocale(options.locale);
324
+ const applicableTaxonomyNames = await getCollectionTaxonomyNames(collection, { locale });
325
+ for (const chunk of chunks(uniqueIds, SQL_BATCH_SIZE)) {
326
+ let rows;
327
+ try {
328
+ let query = db.selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.translation_group", "content_taxonomies.taxonomy_id").select([
329
+ "content_taxonomies.entry_id",
330
+ "taxonomies.id",
331
+ "taxonomies.name",
332
+ "taxonomies.slug",
333
+ "taxonomies.label",
334
+ "taxonomies.parent_id",
335
+ "taxonomies.locale",
336
+ "taxonomies.translation_group"
337
+ ]).where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "in", chunk).orderBy("taxonomies.label", "asc");
338
+ if (locale !== void 0) query = query.where("taxonomies.locale", "=", locale);
339
+ rows = await query.execute();
340
+ } catch (error) {
341
+ if (isMissingTableError(error)) {
342
+ for (const id of uniqueIds) primeEntryTermsCache(collection, id, {}, applicableTaxonomyNames, locale);
343
+ return result;
344
+ }
345
+ throw error;
346
+ }
347
+ for (const row of rows) {
348
+ const term = {
349
+ id: row.id,
350
+ name: row.name,
351
+ slug: row.slug,
352
+ label: row.label,
353
+ parentId: row.parent_id ?? void 0,
354
+ children: [],
355
+ locale: row.locale,
356
+ translationGroup: row.translation_group
357
+ };
358
+ const byTaxonomy = result.get(row.entry_id);
359
+ if (!byTaxonomy) continue;
360
+ const existing = byTaxonomy[row.name];
361
+ if (existing) existing.push(term);
362
+ else byTaxonomy[row.name] = [term];
363
+ }
364
+ }
365
+ for (const [entryId, byTaxonomy] of result) primeEntryTermsCache(collection, entryId, byTaxonomy, applicableTaxonomyNames, locale);
366
+ return result;
367
+ }
368
+ async function getCollectionTaxonomyNames(collection, options) {
369
+ try {
370
+ return (await getTaxonomyDefs(options)).filter((def) => def.collections.includes(collection)).map((def) => def.name);
371
+ } catch (error) {
372
+ if (isMissingTableError(error)) return [];
373
+ throw error;
374
+ }
375
+ }
376
+ function primeEntryTermsCache(collection, entryId, byTaxonomy, applicableTaxonomyNames, locale) {
377
+ const localeKey = locale ?? "*";
378
+ for (const name of applicableTaxonomyNames) setRequestCacheEntry(`terms:${collection}:${entryId}:${name}:${localeKey}`, byTaxonomy[name] ?? []);
379
+ for (const [name, terms] of Object.entries(byTaxonomy)) setRequestCacheEntry(`terms:${collection}:${entryId}:${name}:${localeKey}`, terms);
380
+ setRequestCacheEntry(`terms:${collection}:${entryId}:*:${localeKey}`, Object.values(byTaxonomy).flat());
381
+ }
382
+ /**
383
+ * Prime the per-entry request cache from terms folded into the content query.
384
+ * Seeds the wildcard key and one key per taxonomy present on the entry without
385
+ * adding a taxonomy-definition lookup to the fast path.
386
+ */
387
+ function primeFoldedEntryTerms(collection, perEntry, options = {}) {
388
+ if (perEntry.length === 0) return;
389
+ const locale = resolveLocale(options.locale);
390
+ for (const { entryId, byTaxonomy } of perEntry) primeEntryTermsCache(collection, entryId, byTaxonomy, [], locale);
391
+ }
392
+ /**
393
+ * Get entries by term.
394
+ */
395
+ async function getEntriesByTerm(collection, taxonomyName, termSlug, options = {}) {
396
+ const { getDinewayCollection } = await import("./query-CfRCdaL3.mjs").then((n) => n.o);
397
+ const queryOptions = { where: { [taxonomyName]: termSlug } };
398
+ if (options.locale !== void 0) queryOptions.locale = options.locale;
399
+ const { entries } = await getDinewayCollection(collection, queryOptions);
400
+ return entries;
401
+ }
402
+ function rowToTaxonomyDef(row) {
403
+ return {
404
+ id: row.id,
405
+ name: row.name,
406
+ label: row.label,
407
+ labelSingular: row.label_singular ?? void 0,
408
+ hierarchical: row.hierarchical === 1,
409
+ collections: row.collections ? JSON.parse(row.collections) : [],
410
+ locale: row.locale,
411
+ translationGroup: row.translation_group
412
+ };
413
+ }
414
+ function buildTree(flatTerms, counts) {
415
+ const byLocaleGroup = /* @__PURE__ */ new Map();
416
+ const nodes = [];
417
+ const roots = [];
418
+ for (const term of flatTerms) {
419
+ const node = {
420
+ id: term.id,
421
+ name: term.name,
422
+ slug: term.slug,
423
+ label: term.label,
424
+ parentId: term.parent_id ?? void 0,
425
+ description: term.data ? JSON.parse(term.data).description : void 0,
426
+ children: [],
427
+ count: counts.get(term.translation_group ?? term.id) ?? 0,
428
+ locale: term.locale,
429
+ translationGroup: term.translation_group
430
+ };
431
+ byLocaleGroup.set(`${term.locale}::${term.translation_group ?? term.id}`, node);
432
+ nodes.push(node);
433
+ }
434
+ for (const node of nodes) {
435
+ const parent = node.parentId ? byLocaleGroup.get(`${node.locale}::${node.parentId}`) : void 0;
436
+ if (parent) parent.children.push(node);
437
+ else roots.push(node);
438
+ }
439
+ return roots;
440
+ }
441
+
442
+ //#endregion
443
+ export { getTaxonomyTerms as a, invalidateTaxonomyDefsCache as c, getTaxonomyDefs as i, invalidateTermCache as l, getEntryTerms as n, getTerm as o, getTaxonomyDef as r, getTermsForEntries as s, getEntriesByTerm as t, taxonomies_exports as u };