dineway 0.1.15 → 0.1.16

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 (365) hide show
  1. package/dist/{activity-events-B4wp7CrU.mjs → activity-events-DbqJBNaY.mjs} +1 -1
  2. package/dist/{allowed-origins-C1AKK9AT.mjs → allowed-origins-D85wzUp6.mjs} +1 -1
  3. package/dist/api/route-utils.d.mts +10 -10
  4. package/dist/api/route-utils.mjs +15 -15
  5. package/dist/api/schemas/index.d.mts +2 -2
  6. package/dist/api/schemas/index.mjs +4 -4
  7. package/dist/{api-DX6X_a82.mjs → api-B5xMY72-.mjs} +96 -17
  8. package/dist/{api-tokens-D7UjLbdt.mjs → api-tokens-CMmUPFae.mjs} +1 -1
  9. package/dist/{apply-Bm5QgdrE.mjs → apply-CGVHi2r7.mjs} +165 -85
  10. package/dist/astro/index.d.mts +11 -11
  11. package/dist/astro/index.mjs +3 -3
  12. package/dist/astro/middleware/auth.d.mts +10 -10
  13. package/dist/astro/middleware/auth.mjs +5 -5
  14. package/dist/astro/middleware/redirect.mjs +6 -6
  15. package/dist/astro/middleware/request-context.mjs +4 -4
  16. package/dist/astro/middleware/setup.mjs +1 -1
  17. package/dist/astro/middleware.mjs +119 -77
  18. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +5 -5
  19. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +5 -5
  20. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  21. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  22. package/dist/astro/routes/api/admin/briefing.mjs +19 -19
  23. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +12 -12
  24. package/dist/astro/routes/api/admin/bylines/index.mjs +12 -12
  25. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +13 -13
  26. package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -6
  27. package/dist/astro/routes/api/admin/comments/bulk.mjs +10 -10
  28. package/dist/astro/routes/api/admin/comments/counts.mjs +6 -6
  29. package/dist/astro/routes/api/admin/comments/index.mjs +10 -10
  30. package/dist/astro/routes/api/admin/context/_id_/history.mjs +26 -26
  31. package/dist/astro/routes/api/admin/context/_id_/index.mjs +26 -26
  32. package/dist/astro/routes/api/admin/context/_id_/review.mjs +30 -30
  33. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +30 -30
  34. package/dist/astro/routes/api/admin/context/diff.mjs +29 -29
  35. package/dist/astro/routes/api/admin/context/index.mjs +30 -30
  36. package/dist/astro/routes/api/admin/context/stale.mjs +29 -29
  37. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +26 -26
  38. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +29 -29
  39. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +29 -29
  40. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +27 -27
  41. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  42. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  43. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  44. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +47 -47
  45. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +47 -47
  46. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +40 -40
  47. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +46 -46
  48. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +46 -46
  49. package/dist/astro/routes/api/admin/plugins/index.mjs +40 -40
  50. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  51. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +40 -40
  52. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +46 -46
  53. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +40 -40
  54. package/dist/astro/routes/api/admin/plugins/updates.mjs +40 -40
  55. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +6 -6
  56. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +29 -29
  57. package/dist/astro/routes/api/admin/review-requests/index.mjs +10 -10
  58. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +40 -40
  59. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  60. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +40 -40
  61. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
  62. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
  63. package/dist/astro/routes/api/admin/users/_id_/index.mjs +6 -6
  64. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
  65. package/dist/astro/routes/api/admin/users/index.mjs +5 -5
  66. package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
  67. package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
  68. package/dist/astro/routes/api/auth/invite/complete.mjs +10 -10
  69. package/dist/astro/routes/api/auth/invite/index.mjs +7 -7
  70. package/dist/astro/routes/api/auth/invite/register-options.mjs +9 -9
  71. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  72. package/dist/astro/routes/api/auth/magic-link/send.mjs +9 -9
  73. package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
  74. package/dist/astro/routes/api/auth/me.mjs +5 -5
  75. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  76. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +2 -2
  77. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  78. package/dist/astro/routes/api/auth/passkey/_id_.mjs +5 -5
  79. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  80. package/dist/astro/routes/api/auth/passkey/options.mjs +11 -11
  81. package/dist/astro/routes/api/auth/passkey/register/options.mjs +9 -9
  82. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +10 -10
  83. package/dist/astro/routes/api/auth/passkey/verify.mjs +10 -10
  84. package/dist/astro/routes/api/auth/signup/complete.mjs +10 -10
  85. package/dist/astro/routes/api/auth/signup/request.mjs +9 -9
  86. package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
  87. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -14
  88. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  89. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -6
  90. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -6
  91. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +7 -7
  92. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +12 -12
  93. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +28 -28
  94. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -6
  95. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  96. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +10 -10
  97. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +13 -13
  98. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  99. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -6
  100. package/dist/astro/routes/api/content/_collection_/_id_.mjs +10 -10
  101. package/dist/astro/routes/api/content/_collection_/index.mjs +10 -10
  102. package/dist/astro/routes/api/content/_collection_/trash.mjs +6 -6
  103. package/dist/astro/routes/api/dashboard.mjs +9 -9
  104. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  105. package/dist/astro/routes/api/health.mjs +1 -1
  106. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  107. package/dist/astro/routes/api/import/probe.mjs +10 -10
  108. package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
  109. package/dist/astro/routes/api/import/wordpress/execute.mjs +29 -29
  110. package/dist/astro/routes/api/import/wordpress/media.mjs +7 -7
  111. package/dist/astro/routes/api/import/wordpress/prepare.mjs +33 -33
  112. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts +48 -0
  113. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs +124 -0
  114. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +32 -145
  115. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  116. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +10 -10
  117. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
  118. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +1 -1
  119. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +33 -33
  120. package/dist/astro/routes/api/manifest.mjs +4 -4
  121. package/dist/astro/routes/api/mcp.mjs +277 -91
  122. package/dist/astro/routes/api/media/_id_/confirm.mjs +6 -6
  123. package/dist/astro/routes/api/media/_id_.mjs +6 -6
  124. package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
  125. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  126. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  127. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  128. package/dist/astro/routes/api/media/upload-url.mjs +11 -13
  129. package/dist/astro/routes/api/media.mjs +18 -18
  130. package/dist/astro/routes/api/menus/_name_/items.mjs +45 -36
  131. package/dist/astro/routes/api/menus/_name_/reorder.mjs +34 -31
  132. package/dist/astro/routes/api/menus/_name_/translations.d.mts +8 -0
  133. package/dist/astro/routes/api/menus/_name_/translations.mjs +111 -0
  134. package/dist/astro/routes/api/menus/_name_.mjs +47 -36
  135. package/dist/astro/routes/api/menus/index.mjs +34 -32
  136. package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
  137. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  138. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  139. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  140. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  141. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  142. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  143. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  144. package/dist/astro/routes/api/openapi.json.mjs +3 -3
  145. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +3 -3
  146. package/dist/astro/routes/api/redirects/404s/index.mjs +12 -12
  147. package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -12
  148. package/dist/astro/routes/api/redirects/_id_.mjs +31 -31
  149. package/dist/astro/routes/api/redirects/index.mjs +31 -31
  150. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  151. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
  152. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +41 -41
  153. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +41 -41
  154. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +41 -41
  155. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +41 -41
  156. package/dist/astro/routes/api/schema/collections/index.mjs +41 -41
  157. package/dist/astro/routes/api/schema/index.mjs +6 -6
  158. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +40 -40
  159. package/dist/astro/routes/api/schema/orphans/index.mjs +40 -40
  160. package/dist/astro/routes/api/search/enable.mjs +12 -12
  161. package/dist/astro/routes/api/search/index.mjs +11 -11
  162. package/dist/astro/routes/api/search/rebuild.mjs +12 -12
  163. package/dist/astro/routes/api/search/stats.mjs +8 -8
  164. package/dist/astro/routes/api/search/suggest.mjs +11 -11
  165. package/dist/astro/routes/api/sections/_slug_.mjs +30 -30
  166. package/dist/astro/routes/api/sections/index.mjs +30 -30
  167. package/dist/astro/routes/api/settings/email.mjs +4 -4
  168. package/dist/astro/routes/api/settings.mjs +30 -30
  169. package/dist/astro/routes/api/setup/admin-verify.mjs +12 -12
  170. package/dist/astro/routes/api/setup/admin.mjs +10 -10
  171. package/dist/astro/routes/api/setup/dev-bypass.mjs +25 -25
  172. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  173. package/dist/astro/routes/api/setup/index.mjs +26 -26
  174. package/dist/astro/routes/api/setup/status.mjs +3 -3
  175. package/dist/astro/routes/api/snapshot.mjs +7 -7
  176. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts +8 -0
  177. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +131 -0
  178. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +49 -41
  179. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +36 -34
  180. package/dist/astro/routes/api/taxonomies/index.mjs +36 -34
  181. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  182. package/dist/astro/routes/api/typegen.mjs +4 -4
  183. package/dist/astro/routes/api/well-known/auth.mjs +3 -3
  184. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
  185. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
  186. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +29 -29
  187. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +30 -30
  188. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +30 -30
  189. package/dist/astro/routes/api/widget-areas/_name_.mjs +28 -28
  190. package/dist/astro/routes/api/widget-areas/index.mjs +30 -30
  191. package/dist/astro/routes/api/widget-components.mjs +2 -2
  192. package/dist/astro/routes/robots.txt.mjs +9 -9
  193. package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
  194. package/dist/astro/routes/sitemap.xml.mjs +10 -10
  195. package/dist/astro/types.d.mts +16 -14
  196. package/dist/auth/providers/github.d.mts +1 -1
  197. package/dist/auth/providers/google.d.mts +1 -1
  198. package/dist/{auth-control-guard-DOZ3UCsP.mjs → auth-control-guard--r6LlNkX.mjs} +1 -1
  199. package/dist/{authorize-BAdbMCwC.mjs → authorize-wQDmXQJ1.mjs} +1 -1
  200. package/dist/{briefing-MVYe_Uyf.mjs → briefing-4k6R0KAr.mjs} +7 -7
  201. package/dist/{briefing-rty4O-wa.mjs → briefing-DM7e2yd3.mjs} +1 -1
  202. package/dist/{byline-naZxOPSa.mjs → byline-BxAf79s1.mjs} +4 -4
  203. package/dist/{bylines-DCvz5gtm.d.mts → bylines-DE9bfDur.d.mts} +65 -3
  204. package/dist/{bylines-C4LIBOOO.mjs → bylines-DhCnhR70.mjs} +3 -3
  205. package/dist/{cache-DEbQ13c9.mjs → cache-inQvbrP5.mjs} +1 -1
  206. package/dist/{chunks-D_jVet6z.mjs → chunks-vkrCT4Ta.mjs} +7 -1
  207. package/dist/cli/index.mjs +337 -102
  208. package/dist/client/external-auth-headers.d.mts +1 -1
  209. package/dist/client/index.d.mts +1 -1
  210. package/dist/client/index.mjs +1 -1
  211. package/dist/{comment-DFO-gWDH.mjs → comment-BmJXz3lc.mjs} +1 -1
  212. package/dist/{comments--BsZ9pqA.mjs → comments-BW1qFiTa.mjs} +1 -1
  213. package/dist/{content-CyLkb-qH.mjs → content-DvpMad_N.mjs} +4 -3
  214. package/dist/{context-DNfcm853.mjs → context-CGbVhAmd.mjs} +2 -2
  215. package/dist/{context-CNIkMzot.mjs → context-CT44ux1O.mjs} +10 -10
  216. package/dist/{context-route-helpers-MurhoxWF.mjs → context-route-helpers-CcvSXJtQ.mjs} +1 -1
  217. package/dist/{dashboard-DqnYU8EU.mjs → dashboard-6gH7SlPM.mjs} +9 -18
  218. package/dist/database/instrumentation.d.mts +1 -1
  219. package/dist/database/instrumentation.mjs +14 -4
  220. package/dist/db/index.d.mts +3 -3
  221. package/dist/db/index.mjs +2 -2
  222. package/dist/db/libsql.d.mts +1 -1
  223. package/dist/db/postgres.d.mts +1 -1
  224. package/dist/db/sqlite.d.mts +1 -1
  225. package/dist/{device-flow-BGEH5jfn.mjs → device-flow-DaTBhALC.mjs} +5 -5
  226. package/dist/{dialect-helpers-DhTzaUxP.mjs → dialect-helpers-TkdbkFad.mjs} +7 -1
  227. package/dist/{fts-manager-B1pTNEG_.mjs → fts-manager-D7KVeBmg.mjs} +1 -1
  228. package/dist/{hitl-requests-ChT32Ilo.mjs → hitl-requests-CUnch_4e.mjs} +2 -2
  229. package/dist/{hitl-route-helpers-CSit54Ru.mjs → hitl-route-helpers-DcUCm57p.mjs} +4 -4
  230. package/dist/{import-BHRLhXAn.mjs → import-BVqG28WP.mjs} +3 -3
  231. package/dist/{import-CNcKWTbp.mjs → import-DE2ziezs.mjs} +2 -2
  232. package/dist/{index-CYfhYgXd.d.mts → index-DpMWSamU.d.mts} +2 -2
  233. package/dist/{index-EUAWaIxW.d.mts → index-JzJUzE4o.d.mts} +47 -47
  234. package/dist/index.d.mts +16 -16
  235. package/dist/index.mjs +65 -65
  236. package/dist/{jsonld-D2gUY4kA.d.mts → jsonld-BjsoTL5m.d.mts} +2 -2
  237. package/dist/{loader-PZnPxFLc.mjs → loader-CQFxFOt1.mjs} +2 -2
  238. package/dist/media/index.d.mts +2 -2
  239. package/dist/media/index.mjs +2 -2
  240. package/dist/media/local-runtime.d.mts +12 -12
  241. package/dist/media/local-runtime.mjs +3 -3
  242. package/dist/{media-_7Fxdu45.mjs → media-Cg4zc9fq.mjs} +12 -9
  243. package/dist/media-allowlist-eS3AZ2L_.mjs +26 -0
  244. package/dist/{menus-DYW_UHjv.mjs → menus-BDW1yIdj.mjs} +80 -87
  245. package/dist/menus-CwI7DQJ5.mjs +569 -0
  246. package/dist/mime-DJOFDGux.mjs +35 -0
  247. package/dist/{oauth-authorization-DxGjiWKL.mjs → oauth-authorization-DcYRiDfi.mjs} +5 -5
  248. package/dist/{oauth-clients-DxO_NO7k.mjs → oauth-clients-CgKFA-VH.mjs} +2 -2
  249. package/dist/page/index.d.mts +2 -2
  250. package/dist/page/index.mjs +1 -1
  251. package/dist/{parse-C9106ehs.mjs → parse-BBfZRZYb.mjs} +1 -1
  252. package/dist/{placeholder-Bh1dfUOd.d.mts → placeholder-DKMMLt42.d.mts} +1 -1
  253. package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
  254. package/dist/plugins/adapt-sandbox-entry.mjs +1 -1
  255. package/dist/{plugins-D7-ILNib.mjs → plugins-DKceDtUM.mjs} +9 -7
  256. package/dist/{preview-DvYRU-Oy.mjs → preview-CIDYFBzd.mjs} +2 -2
  257. package/dist/{provider-loader-BiQ6lNmf.d.mts → provider-loader-D0F6E2qv.d.mts} +1 -1
  258. package/dist/{query-CsbOywSY.mjs → query-BtuwuZRd.mjs} +3 -3
  259. package/dist/{query-B9BO5goQ.mjs → query-CWPxZjGM.mjs} +11 -11
  260. package/dist/{rate-limit-DmVTHI5v.mjs → rate-limit-GN64_Jaw.mjs} +5 -5
  261. package/dist/{redirect-CGl64yOX.mjs → redirect-BHo9--Jz.mjs} +3 -3
  262. package/dist/{redirects-Cgi_cZfN.mjs → redirects-Bc40BgxA.mjs} +4 -4
  263. package/dist/{redirects-lrlmYXVE.mjs → redirects-xVDvj_yQ.mjs} +68 -15
  264. package/dist/{registry-C-_hxLqa.mjs → registry-DumDzFDn.mjs} +5 -5
  265. package/dist/{request-cache-DHMRr2Lf.mjs → request-cache-DmVyQUBh.mjs} +5 -1
  266. package/dist/request-context.d.mts +19 -1
  267. package/dist/request-context.mjs +15 -3
  268. package/dist/{request-meta-DixlNKKa.mjs → request-meta-BVx9KkL-.mjs} +1 -1
  269. package/dist/{review-requests-C2DIHwlJ.mjs → review-requests-BYuoyse0.mjs} +1 -1
  270. package/dist/{review-requests-DIyjw-K_.mjs → review-requests-vCw7_3DS.mjs} +1 -1
  271. package/dist/{runner-BU6Lo1ZS.d.mts → runner-CHR_W79l.d.mts} +1 -1
  272. package/dist/{runner-DWZm2KQm.mjs → runner-lqEiJbO-.mjs} +496 -181
  273. package/dist/{runtime-QuuFSlc6.d.mts → runtime-DY_XmE9Y.d.mts} +15 -14
  274. package/dist/runtime.d.mts +11 -11
  275. package/dist/runtime.mjs +5 -5
  276. package/dist/{schema-BECjUhP8.mjs → schema-D1z41cq_.mjs} +1 -1
  277. package/dist/{search-DqTHQqtV.mjs → search-CPcQGTHW.mjs} +2 -2
  278. package/dist/{secrets-CkoJ9zN0.mjs → secrets-AFKoqUXj.mjs} +2 -2
  279. package/dist/{sections-B61OxnfB.mjs → sections-B9RYyf3I.mjs} +2 -2
  280. package/dist/seed/index.d.mts +2 -2
  281. package/dist/seed/index.mjs +19 -19
  282. package/dist/seo/index.d.mts +1 -1
  283. package/dist/{seo-CUQctrog.mjs → seo-BPz1KkCq.mjs} +1 -1
  284. package/dist/{service-CyOsm0R6.mjs → service-DgiH1Yud.mjs} +2 -2
  285. package/dist/{settings-Dzgswvg4.mjs → settings-BGCo_c2y.mjs} +1 -1
  286. package/dist/{settings-DGtLLSaz.mjs → settings-qPzY2KIF.mjs} +4 -4
  287. package/dist/{setup-complete-ChilE-da.mjs → setup-complete-4EiBS1E5.mjs} +1 -1
  288. package/dist/{site-activity-B8FjLIVh.mjs → site-activity-lsCX_cqp.mjs} +1 -1
  289. package/dist/{site-context-WBxoD99D.mjs → site-context-DHRIU6x9.mjs} +58 -34
  290. package/dist/{site-url-BP7k7OCe.mjs → site-url-oyqzZtoL.mjs} +1 -1
  291. package/dist/storage/local.d.mts +1 -1
  292. package/dist/storage/local.mjs +1 -1
  293. package/dist/storage/s3.d.mts +1 -1
  294. package/dist/storage/s3.mjs +1 -1
  295. package/dist/taxonomies-BWmxbumf.mjs +350 -0
  296. package/dist/taxonomies-aQXvYVPm.mjs +507 -0
  297. package/dist/taxonomy-DI-0HgKe.mjs +217 -0
  298. package/dist/{tokens-BOJw-D9F.mjs → tokens-DB4dASZl.mjs} +1 -1
  299. package/dist/{types-DZPw8Rru.d.mts → types-CYBaBvtm.d.mts} +9 -0
  300. package/dist/{types-C0mmVRJN.d.mts → types-CsnHvu4J.d.mts} +1 -0
  301. package/dist/{types-Bs6lTBBW.mjs → types-D1DjBFA9.mjs} +8 -2
  302. package/dist/{types-Q616b2Hn.d.mts → types-DS5PYew4.d.mts} +1 -1
  303. package/dist/ui/server-runtime.d.mts +7 -7
  304. package/dist/ui/server-runtime.mjs +19 -19
  305. package/dist/{user-CcXq-zoL.mjs → user-2aI21yV1.mjs} +1 -1
  306. package/dist/{utils-C0ONdBul.mjs → utils-BJF19gfk.mjs} +1 -1
  307. package/dist/{validate-C7TzfamJ.mjs → validate-B8ZvLeOE.mjs} +12 -8
  308. package/dist/{validate-BwmQEbu8.d.mts → validate-BQ24E8rK.d.mts} +21 -4
  309. package/dist/version-HdNieFOD.mjs +6 -0
  310. package/dist/{widgets-B7DRpZvy.mjs → widgets-Cce2-2fM.mjs} +2 -2
  311. package/dist/{wordpress-slugs-CnporCYH.mjs → wordpress-slugs-C4EhE6fo.mjs} +1 -1
  312. package/dist/{zod-generator-DBVP8D0P.mjs → zod-generator-BKhtHT3e.mjs} +3 -3
  313. package/package.json +5 -5
  314. package/dist/menus-DS3_5nWY.mjs +0 -312
  315. package/dist/taxonomies-D2aZGuns.mjs +0 -270
  316. package/dist/taxonomies-z6Lz91BC.mjs +0 -355
  317. package/dist/taxonomy-D5cbhc8u.mjs +0 -165
  318. package/dist/version-DzWaHle7.mjs +0 -6
  319. /package/dist/{adapters-DuLQZhRY.d.mts → adapters-BPzUiHHm.d.mts} +0 -0
  320. /package/dist/{api-tokens-CPjC3zf8.mjs → api-tokens-B7fvbHM2.mjs} +0 -0
  321. /package/dist/{base64-Cz-aU0X1.mjs → base64-C1Q9yr0B.mjs} +0 -0
  322. /package/dist/{challenge-store-DDTbisbf.mjs → challenge-store-anhwVER0.mjs} +0 -0
  323. /package/dist/{components-BPknylYg.mjs → components-BQiBW_Ji.mjs} +0 -0
  324. /package/dist/{config-CAMFxGaV.mjs → config-XW5tMrH8.mjs} +0 -0
  325. /package/dist/{context-types-C-LwdAxx.mjs → context-types-DuiyY6xF.mjs} +0 -0
  326. /package/dist/{cron-CKxvBrRT.mjs → cron-fV9baRVc.mjs} +0 -0
  327. /package/dist/{db-errors-DyZkswzF.mjs → db-errors-BnUbfGsK.mjs} +0 -0
  328. /package/dist/{default-D4ngTpW8.mjs → default-2JDm1rj_.mjs} +0 -0
  329. /package/dist/{email-console-CuefUXfX.mjs → email-console-_pTim1bU.mjs} +0 -0
  330. /package/dist/{entity-aliases-C0v-yNET.mjs → entity-aliases-PJV8IxDq.mjs} +0 -0
  331. /package/dist/{error-BMUPwxgx.mjs → error-Dyf9fGZE.mjs} +0 -0
  332. /package/dist/{escape-BRVaw1Ai.mjs → escape-Bn168-uP.mjs} +0 -0
  333. /package/dist/{experimental-workflows-C9X7yblQ.mjs → experimental-workflows-CSRjuEwS.mjs} +0 -0
  334. /package/dist/{hash-CDX7M0ze.mjs → hash-V8oZo1W2.mjs} +0 -0
  335. /package/dist/{load-B2XtDw__.mjs → load-BvyvS_76.mjs} +0 -0
  336. /package/dist/{manifest-schema-CgFJAp0H.mjs → manifest-schema-CU0XL_ZK.mjs} +0 -0
  337. /package/dist/{mode-DUhxwUhv.mjs → mode-DWw2di1I.mjs} +0 -0
  338. /package/dist/{normalize-C49G_o1k.mjs → normalize-9GU-bv_T.mjs} +0 -0
  339. /package/dist/{oauth-state-store-C5UFhzwD.mjs → oauth-state-store-DhifLitQ.mjs} +0 -0
  340. /package/dist/{oauth-user-lookup-Bi0ek9eM.mjs → oauth-user-lookup-nyXQ2_6Q.mjs} +0 -0
  341. /package/dist/{options-z8VVg1Ll.mjs → options-BF11H_FD.mjs} +0 -0
  342. /package/dist/{passkey-config-BRSZx4pW.mjs → passkey-config-DZOjt0Hd.mjs} +0 -0
  343. /package/dist/{patterns-K0DLqWir.mjs → patterns-CW4n2PQs.mjs} +0 -0
  344. /package/dist/{placeholder-C2P5fKa4.mjs → placeholder-BJPmhjHP.mjs} +0 -0
  345. /package/dist/{provider-loader-C21b9OpH.mjs → provider-loader-Decn0Ktc.mjs} +0 -0
  346. /package/dist/{public-url-Cun8N3NU.mjs → public-url-5fFLJhjh.mjs} +0 -0
  347. /package/dist/{redirect-COZy-3iY.mjs → redirect-C077gVTf.mjs} +0 -0
  348. /package/dist/{seo-C007Luwn.mjs → seo-DJoop90w.mjs} +0 -0
  349. /package/dist/{seo-contributions-B1fWCnqY.mjs → seo-contributions-CQzUjJKY.mjs} +0 -0
  350. /package/dist/{setup-nonce-BpmLXAuu.mjs → setup-nonce-DN6BHIlP.mjs} +0 -0
  351. /package/dist/{sidecar-client-B1C6Cf80.mjs → sidecar-client-Dta0AELf.mjs} +0 -0
  352. /package/dist/{slugify-PDTDtMXp.mjs → slugify-BzGxlOFx.mjs} +0 -0
  353. /package/dist/{ssrf-DDwRxF6B.mjs → ssrf-BOSGjXxb.mjs} +0 -0
  354. /package/dist/{transaction-x2tJQ-A1.mjs → transaction-qfqpPVpu.mjs} +0 -0
  355. /package/dist/{transport-D3i4yWRE.mjs → transport-B3jxvfio.mjs} +0 -0
  356. /package/dist/{transport-BXe1AM79.d.mts → transport-CyOHECBA.d.mts} +0 -0
  357. /package/dist/{trusted-proxy-BbaZfkT9.mjs → trusted-proxy-8N8sX1D1.mjs} +0 -0
  358. /package/dist/{types-DJlpx5Ay.d.mts → types-6N-00csp.d.mts} +0 -0
  359. /package/dist/{types-BFmjniC2.d.mts → types-B45uSz1j.d.mts} +0 -0
  360. /package/dist/{types-B7kpsMJ3.d.mts → types-BDm7Ipoq.d.mts} +0 -0
  361. /package/dist/{types-0Vr68fc2.d.mts → types-BeYn-Yf0.d.mts} +0 -0
  362. /package/dist/{types-OPs5Q_sX.d.mts → types-D_wGrwiY.d.mts} +0 -0
  363. /package/dist/{types-DL7Y8D_t.mjs → types-Dz2EKzsX.mjs} +0 -0
  364. /package/dist/{types-fAInWQDO.mjs → types-iNqHe2-V.mjs} +0 -0
  365. /package/dist/{url-DNjT2abR.mjs → url-DOS4RGym.mjs} +0 -0
@@ -0,0 +1,217 @@
1
+ import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
+ import { ulid } from "ulidx";
3
+
4
+ //#region src/database/repositories/taxonomy.ts
5
+ var taxonomy_exports = /* @__PURE__ */ __exportAll({ TaxonomyRepository: () => TaxonomyRepository });
6
+ /**
7
+ * Taxonomy repository for categories, tags, and other classification.
8
+ *
9
+ * Terms are per-locale. Translations of the same term share a `translation_group`
10
+ * ULID. `content_taxonomies.taxonomy_id` stores the translation_group so a single
11
+ * association spans every locale of a post.
12
+ *
13
+ * The repository does not resolve locale fallbacks on its own — callers supply
14
+ * the locale they want. Runtime helpers and handlers use `getFallbackChain()`
15
+ * from `i18n/config` when they need fallback behaviour.
16
+ */
17
+ var TaxonomyRepository = class {
18
+ constructor(db) {
19
+ this.db = db;
20
+ }
21
+ /**
22
+ * Create a new taxonomy term. When `translationOf` is set the new row joins
23
+ * the source term's translation_group; otherwise a fresh group is minted
24
+ * (matching the migration backfill pattern `translation_group = id`).
25
+ */
26
+ async create(input) {
27
+ const id = ulid();
28
+ const parentId = input.parentId === void 0 || input.parentId === "" ? null : input.parentId;
29
+ let translationGroup = id;
30
+ if (input.translationOf) {
31
+ const source = await this.findById(input.translationOf);
32
+ if (source?.translationGroup) translationGroup = source.translationGroup;
33
+ }
34
+ await this.db.insertInto("taxonomies").values({
35
+ id,
36
+ name: input.name,
37
+ slug: input.slug,
38
+ label: input.label,
39
+ parent_id: parentId,
40
+ data: input.data ? JSON.stringify(input.data) : null,
41
+ ...input.locale !== void 0 ? { locale: input.locale } : {},
42
+ translation_group: translationGroup
43
+ }).execute();
44
+ const taxonomy = await this.findById(id);
45
+ if (!taxonomy) throw new Error("Failed to create taxonomy");
46
+ return taxonomy;
47
+ }
48
+ async findById(id) {
49
+ const row = await this.db.selectFrom("taxonomies").selectAll().where("id", "=", id).executeTakeFirst();
50
+ return row ? this.rowToTaxonomy(row) : null;
51
+ }
52
+ /**
53
+ * Find a term by (name, slug). When `locale` is provided, filter by it.
54
+ * When omitted, returns the lowest-locale-code match (deterministic across
55
+ * calls). Mirrors `ContentRepository.findBySlug`.
56
+ */
57
+ async findBySlug(name, slug, locale) {
58
+ let query = this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).where("slug", "=", slug);
59
+ if (locale !== void 0) query = query.where("locale", "=", locale);
60
+ const row = await query.orderBy("locale", "asc").executeTakeFirst();
61
+ return row ? this.rowToTaxonomy(row) : null;
62
+ }
63
+ /**
64
+ * Get all terms for a taxonomy (e.g., all categories).
65
+ *
66
+ * `id asc` is a stable tiebreaker for terms that share a label. Without it
67
+ * the SQL ordering is implementation-defined when labels match, which
68
+ * breaks keyset pagination over `(label, id)`.
69
+ */
70
+ async findByName(name, options = {}) {
71
+ let query = this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).orderBy("label", "asc").orderBy("id", "asc");
72
+ if (options.locale !== void 0) query = query.where("locale", "=", options.locale);
73
+ if (options.parentId !== void 0) if (options.parentId === null) query = query.where("parent_id", "is", null);
74
+ else query = query.where("parent_id", "=", options.parentId);
75
+ return (await query.execute()).map((row) => this.rowToTaxonomy(row));
76
+ }
77
+ async findChildren(parentId) {
78
+ return (await this.db.selectFrom("taxonomies").selectAll().where("parent_id", "=", parentId).orderBy("label", "asc").orderBy("id", "asc").execute()).map((row) => this.rowToTaxonomy(row));
79
+ }
80
+ /**
81
+ * Every translation sibling of a term (including itself), identified by
82
+ * their shared `translation_group`.
83
+ */
84
+ async findTranslations(translationGroup) {
85
+ return (await this.db.selectFrom("taxonomies").selectAll().where("translation_group", "=", translationGroup).orderBy("locale", "asc").execute()).map((row) => this.rowToTaxonomy(row));
86
+ }
87
+ async update(id, input) {
88
+ if (!await this.findById(id)) return null;
89
+ const updates = {};
90
+ if (input.slug !== void 0) updates.slug = input.slug;
91
+ if (input.label !== void 0) updates.label = input.label;
92
+ if (input.parentId !== void 0) updates.parent_id = input.parentId === "" ? null : input.parentId;
93
+ if (input.data !== void 0) updates.data = JSON.stringify(input.data);
94
+ if (Object.keys(updates).length > 0) await this.db.updateTable("taxonomies").set(updates).where("id", "=", id).execute();
95
+ return this.findById(id);
96
+ }
97
+ async delete(id) {
98
+ const term = await this.findById(id);
99
+ if (!term) return false;
100
+ if (term.translationGroup) {
101
+ if ((await this.db.selectFrom("taxonomies").select("id").where("translation_group", "=", term.translationGroup).where("id", "!=", id).execute()).length === 0) await this.db.deleteFrom("content_taxonomies").where("taxonomy_id", "=", term.translationGroup).execute();
102
+ }
103
+ return ((await this.db.deleteFrom("taxonomies").where("id", "=", id).executeTakeFirst()).numDeletedRows ?? 0n) > 0n;
104
+ }
105
+ async attachToEntry(collection, entryId, taxonomyId) {
106
+ const group = await this.resolveTranslationGroup(taxonomyId);
107
+ if (!group) return;
108
+ const row = {
109
+ collection,
110
+ entry_id: entryId,
111
+ taxonomy_id: group
112
+ };
113
+ await this.db.insertInto("content_taxonomies").values(row).onConflict((oc) => oc.doNothing()).execute();
114
+ }
115
+ async detachFromEntry(collection, entryId, taxonomyId) {
116
+ const group = await this.resolveTranslationGroup(taxonomyId);
117
+ if (!group) return;
118
+ await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "=", group).execute();
119
+ }
120
+ /**
121
+ * Taxonomy terms assigned to a content entry, resolved into a specific locale.
122
+ * Terms whose translation_group lacks a row in the requested locale are
123
+ * omitted — callers wanting fallback behaviour apply it themselves.
124
+ */
125
+ async getTermsForEntry(collection, entryId, taxonomyName, locale) {
126
+ let query = this.db.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);
127
+ if (taxonomyName) query = query.where("taxonomies.name", "=", taxonomyName);
128
+ if (locale !== void 0) query = query.where("taxonomies.locale", "=", locale);
129
+ return (await query.orderBy("taxonomies.locale", "asc").execute()).map((row) => this.rowToTaxonomy(row));
130
+ }
131
+ /**
132
+ * Replace all assignments of a given taxonomy for one content entry.
133
+ * Term ids OR translation_groups are accepted and normalised to groups.
134
+ */
135
+ async setTermsForEntry(collection, entryId, taxonomyName, termIds) {
136
+ const groups = [];
137
+ for (const id of termIds) {
138
+ const group = await this.resolveTranslationGroup(id);
139
+ if (group) groups.push(group);
140
+ }
141
+ const newGroups = new Set(groups);
142
+ const current = await this.db.selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.translation_group", "content_taxonomies.taxonomy_id").select(["content_taxonomies.taxonomy_id as group"]).distinct().where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "=", entryId).where("taxonomies.name", "=", taxonomyName).execute();
143
+ const currentGroups = new Set(current.map((r) => r.group));
144
+ const toRemove = [...currentGroups].filter((g) => !newGroups.has(g));
145
+ if (toRemove.length > 0) await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "in", toRemove).execute();
146
+ const toAdd = [...newGroups].filter((g) => !currentGroups.has(g));
147
+ if (toAdd.length > 0) await this.db.insertInto("content_taxonomies").values(toAdd.map((taxonomy_id) => ({
148
+ collection,
149
+ entry_id: entryId,
150
+ taxonomy_id
151
+ }))).onConflict((oc) => oc.doNothing()).execute();
152
+ }
153
+ async clearEntryTerms(collection, entryId) {
154
+ const result = await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).executeTakeFirst();
155
+ return Number(result.numDeletedRows ?? 0);
156
+ }
157
+ /**
158
+ * Copy every term assignment from one content entry to another. Used when
159
+ * creating a translation of a post so the new translation inherits the
160
+ * source's term assignments. Safe to call when the source has no terms.
161
+ */
162
+ async copyEntryTerms(collection, sourceEntryId, targetEntryId) {
163
+ const rows = await this.db.selectFrom("content_taxonomies").select(["taxonomy_id"]).where("collection", "=", collection).where("entry_id", "=", sourceEntryId).execute();
164
+ if (rows.length === 0) return;
165
+ await this.db.insertInto("content_taxonomies").values(rows.map((r) => ({
166
+ collection,
167
+ entry_id: targetEntryId,
168
+ taxonomy_id: r.taxonomy_id
169
+ }))).onConflict((oc) => oc.doNothing()).execute();
170
+ }
171
+ /**
172
+ * Count content entries that use any translation of this term. Accepts
173
+ * either a term id or a translation_group — we normalise to the group.
174
+ */
175
+ async countEntriesWithTerm(termIdOrGroup) {
176
+ const group = await this.resolveTranslationGroup(termIdOrGroup);
177
+ if (!group) return 0;
178
+ const result = await this.db.selectFrom("content_taxonomies").select((eb) => eb.fn.count("entry_id").as("count")).where("taxonomy_id", "=", group).executeTakeFirst();
179
+ return Number(result?.count ?? 0);
180
+ }
181
+ async resolveTranslationGroup(idOrGroup) {
182
+ return (await this.db.selectFrom("taxonomies").select(["translation_group"]).where((eb) => eb.or([eb("id", "=", idOrGroup), eb("translation_group", "=", idOrGroup)])).executeTakeFirst())?.translation_group ?? null;
183
+ }
184
+ /**
185
+ * Batch count entries for multiple taxonomy translation_groups.
186
+ * Chunks the query at SQL_BATCH_SIZE to stay below D1's bind-parameter limit.
187
+ * Returns a Map from translation_group to count.
188
+ *
189
+ * Pass translation_groups (not term ids) — `content_taxonomies.taxonomy_id`
190
+ * stores the translation_group so a single assignment spans every locale.
191
+ */
192
+ async countEntriesForTerms(translationGroups) {
193
+ if (translationGroups.length === 0) return /* @__PURE__ */ new Map();
194
+ const { chunks, SQL_BATCH_SIZE } = await import("./chunks-vkrCT4Ta.mjs").then((n) => n.r);
195
+ const counts = /* @__PURE__ */ new Map();
196
+ for (const chunk of chunks(translationGroups, SQL_BATCH_SIZE)) {
197
+ const rows = await this.db.selectFrom("content_taxonomies").select(["taxonomy_id", (eb) => eb.fn.count("entry_id").as("count")]).where("taxonomy_id", "in", chunk).groupBy("taxonomy_id").execute();
198
+ for (const row of rows) counts.set(row.taxonomy_id, Number(row.count || 0));
199
+ }
200
+ return counts;
201
+ }
202
+ rowToTaxonomy(row) {
203
+ return {
204
+ id: row.id,
205
+ name: row.name,
206
+ slug: row.slug,
207
+ label: row.label,
208
+ parentId: row.parent_id,
209
+ data: row.data ? JSON.parse(row.data) : null,
210
+ locale: row.locale,
211
+ translationGroup: row.translation_group
212
+ };
213
+ }
214
+ };
215
+
216
+ //#endregion
217
+ export { taxonomy_exports as n, TaxonomyRepository as t };
@@ -1,4 +1,4 @@
1
- import { i as encodeBase64url, n as decodeBase64url } from "./base64-Cz-aU0X1.mjs";
1
+ import { i as encodeBase64url, n as decodeBase64url } from "./base64-C1Q9yr0B.mjs";
2
2
 
3
3
  //#region src/preview/tokens.ts
4
4
  /**
@@ -16,6 +16,8 @@ interface TaxonomyTable {
16
16
  label: string;
17
17
  parent_id: string | null;
18
18
  data: string | null;
19
+ locale: Generated<string>;
20
+ translation_group: Generated<string | null>;
19
21
  }
20
22
  interface ContentTaxonomyTable {
21
23
  collection: string;
@@ -30,6 +32,8 @@ interface TaxonomyDefTable {
30
32
  hierarchical: number;
31
33
  collections: string | null;
32
34
  created_at: Generated<string>;
35
+ locale: Generated<string>;
36
+ translation_group: Generated<string | null>;
33
37
  }
34
38
  interface MediaTable {
35
39
  id: string;
@@ -64,6 +68,7 @@ interface CredentialTable {
64
68
  id: string;
65
69
  user_id: string;
66
70
  public_key: Uint8Array;
71
+ algorithm: number;
67
72
  counter: number;
68
73
  device_type: string;
69
74
  backed_up: number;
@@ -405,6 +410,8 @@ interface MenuTable {
405
410
  label: string;
406
411
  created_at: Generated<string>;
407
412
  updated_at: Generated<string>;
413
+ locale: Generated<string>;
414
+ translation_group: Generated<string | null>;
408
415
  }
409
416
  interface MenuItemTable {
410
417
  id: string;
@@ -420,6 +427,8 @@ interface MenuItemTable {
420
427
  target: string | null;
421
428
  css_classes: string | null;
422
429
  created_at: Generated<string>;
430
+ locale: Generated<string>;
431
+ translation_group: Generated<string | null>;
423
432
  }
424
433
  interface WidgetAreaTable {
425
434
  id: string;
@@ -47,6 +47,7 @@ interface FieldValidation {
47
47
  subFields?: RepeaterSubField[];
48
48
  minItems?: number;
49
49
  maxItems?: number;
50
+ allowedMimeTypes?: string[];
50
51
  }
51
52
  /**
52
53
  * Widget options for field rendering
@@ -1,6 +1,12 @@
1
- import { r as encodeBase64, t as decodeBase64 } from "./base64-Cz-aU0X1.mjs";
1
+ import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
+ import { r as encodeBase64, t as decodeBase64 } from "./base64-C1Q9yr0B.mjs";
2
3
 
3
4
  //#region src/database/repositories/types.ts
5
+ var types_exports = /* @__PURE__ */ __exportAll({
6
+ DinewayValidationError: () => DinewayValidationError,
7
+ decodeCursor: () => decodeCursor,
8
+ encodeCursor: () => encodeCursor
9
+ });
4
10
  /** Encode a cursor from order value + id */
5
11
  function encodeCursor(orderValue, id) {
6
12
  return encodeBase64(JSON.stringify({
@@ -27,4 +33,4 @@ var DinewayValidationError = class extends Error {
27
33
  };
28
34
 
29
35
  //#endregion
30
- export { decodeCursor as n, encodeCursor as r, DinewayValidationError as t };
36
+ export { types_exports as i, decodeCursor as n, encodeCursor as r, DinewayValidationError as t };
@@ -1,4 +1,4 @@
1
- import { m as FieldType } from "./types-C0mmVRJN.mjs";
1
+ import { m as FieldType } from "./types-CsnHvu4J.mjs";
2
2
  import { z } from "astro/zod";
3
3
  import "react/jsx-runtime";
4
4
  import { JSX } from "astro/jsx-runtime";
@@ -1,11 +1,11 @@
1
- import "../types-DZPw8Rru.mjs";
2
- import { A as PageMetadataContribution, q as PublicPageContext } from "../types-Q616b2Hn.mjs";
3
- import { t as MediaReference } from "../types-C0mmVRJN.mjs";
4
- import { a as EmbedResult, i as EmbedOptions, m as MediaValue, o as ImageEmbed } from "../types-OPs5Q_sX.mjs";
5
- import { H as getSiteSettings, R as getComments, St as PublicComment, T as getMenu, _ as getTaxonomyTerms, ft as sanitizeHref, l as Widget, pt as getCollectionInfo, rt as getEditMeta, t as getWidgetArea, tt as getDinewayCollection } from "../index-EUAWaIxW.mjs";
6
- import { a as generateSiteSeoContributions, d as resolvePageMetadata, i as generateBaseSeoContributions, o as renderFragments, u as renderPageMetadata } from "../jsonld-D2gUY4kA.mjs";
1
+ import "../types-CYBaBvtm.mjs";
2
+ import { A as PageMetadataContribution, q as PublicPageContext } from "../types-DS5PYew4.mjs";
3
+ import { t as MediaReference } from "../types-CsnHvu4J.mjs";
4
+ import { a as EmbedResult, i as EmbedOptions, m as MediaValue, o as ImageEmbed } from "../types-D_wGrwiY.mjs";
5
+ import { H as getSiteSettings, R as getComments, St as PublicComment, T as getMenu, _ as getTaxonomyTerms, ft as sanitizeHref, l as Widget, pt as getCollectionInfo, rt as getEditMeta, t as getWidgetArea, tt as getDinewayCollection } from "../index-JzJUzE4o.mjs";
6
+ import { a as generateSiteSeoContributions, d as resolvePageMetadata, i as generateBaseSeoContributions, o as renderFragments, u as renderPageMetadata } from "../jsonld-BjsoTL5m.mjs";
7
7
  import { getPageRuntime } from "../page/index.mjs";
8
- import { t as getMediaProvider } from "../provider-loader-BiQ6lNmf.mjs";
8
+ import { t as getMediaProvider } from "../provider-loader-D0F6E2qv.mjs";
9
9
 
10
10
  //#region src/utils/sanitize.d.ts
11
11
  /**
@@ -1,22 +1,22 @@
1
- import "../dialect-helpers-DhTzaUxP.mjs";
2
- import "../base64-Cz-aU0X1.mjs";
3
- import "../types-Bs6lTBBW.mjs";
4
- import "../media-_7Fxdu45.mjs";
5
- import "../comment-DFO-gWDH.mjs";
6
- import "../options-z8VVg1Ll.mjs";
7
- import "../fts-manager-B1pTNEG_.mjs";
8
- import "../registry-C-_hxLqa.mjs";
9
- import "../loader-PZnPxFLc.mjs";
10
- import { i as getSiteSettings, s as buildRenderMediaUrl } from "../settings-DGtLLSaz.mjs";
11
- import "../request-cache-DHMRr2Lf.mjs";
12
- import { t as getCollectionInfo } from "../query-CsbOywSY.mjs";
13
- import { a as getTaxonomyTerms } from "../taxonomies-D2aZGuns.mjs";
14
- import { n as sanitizeHref } from "../url-DNjT2abR.mjs";
15
- import { r as getEditMeta, t as getDinewayCollection } from "../query-B9BO5goQ.mjs";
16
- import { i as getComments, t as getMenu } from "../menus-DYW_UHjv.mjs";
17
- import { t as getWidgetArea } from "../widgets-B7DRpZvy.mjs";
18
- import { t as getMediaProvider } from "../provider-loader-C21b9OpH.mjs";
19
- import { c as escapeHtmlAttr, l as renderPageMetadata, n as generateSiteSeoContributions, o as renderFragments, t as generateBaseSeoContributions, u as resolvePageMetadata } from "../seo-contributions-B1fWCnqY.mjs";
1
+ import "../dialect-helpers-TkdbkFad.mjs";
2
+ import "../base64-C1Q9yr0B.mjs";
3
+ import "../types-D1DjBFA9.mjs";
4
+ import "../media-Cg4zc9fq.mjs";
5
+ import "../comment-BmJXz3lc.mjs";
6
+ import "../options-BF11H_FD.mjs";
7
+ import "../request-cache-DmVyQUBh.mjs";
8
+ import "../fts-manager-D7KVeBmg.mjs";
9
+ import "../registry-DumDzFDn.mjs";
10
+ import "../loader-CQFxFOt1.mjs";
11
+ import { i as getSiteSettings, s as buildRenderMediaUrl } from "../settings-qPzY2KIF.mjs";
12
+ import { t as getCollectionInfo } from "../query-BtuwuZRd.mjs";
13
+ import { a as getTaxonomyTerms } from "../taxonomies-BWmxbumf.mjs";
14
+ import { n as sanitizeHref } from "../url-DOS4RGym.mjs";
15
+ import { r as getEditMeta, t as getDinewayCollection } from "../query-CWPxZjGM.mjs";
16
+ import { i as getComments, t as getMenu } from "../menus-BDW1yIdj.mjs";
17
+ import { t as getWidgetArea } from "../widgets-Cce2-2fM.mjs";
18
+ import { t as getMediaProvider } from "../provider-loader-Decn0Ktc.mjs";
19
+ import { c as escapeHtmlAttr, l as renderPageMetadata, n as generateSiteSeoContributions, o as renderFragments, t as generateBaseSeoContributions, u as resolvePageMetadata } from "../seo-contributions-CQzUjJKY.mjs";
20
20
  import { getPageRuntime } from "../page/index.mjs";
21
21
  import sanitizeHtml from "sanitize-html";
22
22
 
@@ -1,4 +1,4 @@
1
- import { n as decodeCursor, r as encodeCursor } from "./types-Bs6lTBBW.mjs";
1
+ import { n as decodeCursor, r as encodeCursor } from "./types-D1DjBFA9.mjs";
2
2
  import { ulid } from "ulidx";
3
3
 
4
4
  //#region src/database/repositories/user.ts
@@ -1,4 +1,4 @@
1
- import { n as slugify } from "./slugify-PDTDtMXp.mjs";
1
+ import { n as slugify } from "./slugify-BzGxlOFx.mjs";
2
2
  import mime from "mime/lite";
3
3
 
4
4
  //#region src/import/utils.ts
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
- import { t as FIELD_TYPES } from "./types-DL7Y8D_t.mjs";
2
+ import { t as FIELD_TYPES } from "./types-Dz2EKzsX.mjs";
3
3
 
4
4
  //#region src/seed/validate.ts
5
5
  /**
@@ -87,8 +87,9 @@ function validateSeed(data) {
87
87
  const prefix = `taxonomies[${i}]`;
88
88
  if (!taxonomy.name) errors.push(`${prefix}: name is required`);
89
89
  else {
90
- if (taxonomyNames.has(taxonomy.name)) errors.push(`${prefix}.name: duplicate taxonomy name "${taxonomy.name}"`);
91
- taxonomyNames.add(taxonomy.name);
90
+ const key = `${taxonomy.name}::${taxonomy.locale ?? ""}`;
91
+ if (taxonomyNames.has(key)) errors.push(taxonomy.locale ? `${prefix}.name: duplicate taxonomy "${taxonomy.name}" in locale "${taxonomy.locale}"` : `${prefix}.name: duplicate taxonomy name "${taxonomy.name}"`);
92
+ taxonomyNames.add(key);
92
93
  }
93
94
  if (!taxonomy.label) errors.push(`${prefix}: label is required`);
94
95
  if (taxonomy.hierarchical === void 0) errors.push(`${prefix}: hierarchical is required`);
@@ -102,15 +103,17 @@ function validateSeed(data) {
102
103
  const termPrefix = `${prefix}.terms[${j}]`;
103
104
  if (!term.slug) errors.push(`${termPrefix}: slug is required`);
104
105
  else {
105
- if (termSlugs.has(term.slug)) errors.push(`${termPrefix}.slug: duplicate term slug "${term.slug}" in taxonomy "${taxonomy.name}"`);
106
- termSlugs.add(term.slug);
106
+ const key = `${term.slug}::${term.locale ?? taxonomy.locale ?? ""}`;
107
+ if (termSlugs.has(key)) errors.push(`${termPrefix}.slug: duplicate term slug "${term.slug}" in taxonomy "${taxonomy.name}"`);
108
+ termSlugs.add(key);
107
109
  }
108
110
  if (!term.label) errors.push(`${termPrefix}: label is required`);
109
111
  if (term.parent && taxonomy.hierarchical) {} else if (term.parent && !taxonomy.hierarchical) warnings.push(`${termPrefix}.parent: taxonomy "${taxonomy.name}" is not hierarchical, parent will be ignored`);
110
112
  }
111
113
  if (taxonomy.hierarchical && taxonomy.terms) for (let j = 0; j < taxonomy.terms.length; j++) {
112
114
  const term = taxonomy.terms[j];
113
- if (term.parent && !termSlugs.has(term.parent)) errors.push(`${prefix}.terms[${j}].parent: parent term "${term.parent}" not found in taxonomy`);
115
+ const termLocale = term.locale ?? taxonomy.locale ?? "";
116
+ if (term.parent && !termSlugs.has(`${term.parent}::${termLocale}`)) errors.push(`${prefix}.terms[${j}].parent: parent term "${term.parent}" not found in taxonomy`);
114
117
  if (term.parent === term.slug) errors.push(`${prefix}.terms[${j}].parent: term cannot be its own parent`);
115
118
  }
116
119
  }
@@ -124,8 +127,9 @@ function validateSeed(data) {
124
127
  const prefix = `menus[${i}]`;
125
128
  if (!menu.name) errors.push(`${prefix}: name is required`);
126
129
  else {
127
- if (menuNames.has(menu.name)) errors.push(`${prefix}.name: duplicate menu name "${menu.name}"`);
128
- menuNames.add(menu.name);
130
+ const key = `${menu.name}::${menu.locale ?? ""}`;
131
+ if (menuNames.has(key)) errors.push(menu.locale ? `${prefix}.name: duplicate menu "${menu.name}" in locale "${menu.locale}"` : `${prefix}.name: duplicate menu name "${menu.name}"`);
132
+ menuNames.add(key);
129
133
  }
130
134
  if (!menu.label) errors.push(`${prefix}: label is required`);
131
135
  if (!Array.isArray(menu.items)) errors.push(`${prefix}.items: must be an array`);
@@ -1,6 +1,6 @@
1
- import { t as Database } from "./types-DZPw8Rru.mjs";
2
- import { i as SiteSettings, m as FieldType } from "./types-C0mmVRJN.mjs";
3
- import { d as Storage } from "./types-B7kpsMJ3.mjs";
1
+ import { t as Database } from "./types-CYBaBvtm.mjs";
2
+ import { i as SiteSettings, m as FieldType } from "./types-CsnHvu4J.mjs";
3
+ import { d as Storage } from "./types-BDm7Ipoq.mjs";
4
4
  import { Kysely } from "kysely";
5
5
 
6
6
  //#region src/seed/types.d.ts
@@ -68,37 +68,52 @@ interface SeedField {
68
68
  options?: Record<string, unknown>;
69
69
  }
70
70
  /**
71
- * Taxonomy definition in seed
71
+ * Taxonomy definition in seed. For multi-locale exports each locale variant is
72
+ * its own entry, linked via `translationOf`.
72
73
  */
73
74
  interface SeedTaxonomy {
75
+ /** Optional seed-local id, e.g. "tax:category:en". Target of `translationOf`. */
76
+ id?: string;
74
77
  name: string;
75
78
  label: string;
76
79
  labelSingular?: string;
77
80
  hierarchical: boolean;
78
81
  collections: string[];
82
+ locale?: string;
83
+ translationOf?: string;
79
84
  terms?: SeedTaxonomyTerm[];
80
85
  }
81
86
  /**
82
87
  * Taxonomy term in seed
83
88
  */
84
89
  interface SeedTaxonomyTerm {
90
+ /** Optional seed-local id, e.g. "term:category:breakfast:en". */
91
+ id?: string;
85
92
  slug: string;
86
93
  label: string;
87
94
  description?: string;
88
95
  parent?: string;
96
+ locale?: string;
97
+ translationOf?: string;
89
98
  }
90
99
  /**
91
100
  * Menu definition in seed
92
101
  */
93
102
  interface SeedMenu {
103
+ /** Optional seed-local id, e.g. "menu:primary:en". */
104
+ id?: string;
94
105
  name: string;
95
106
  label: string;
107
+ locale?: string;
108
+ translationOf?: string;
96
109
  items: SeedMenuItem[];
97
110
  }
98
111
  /**
99
112
  * Menu item in seed
100
113
  */
101
114
  interface SeedMenuItem {
115
+ /** Optional seed-local id, e.g. "item:primary:home:en". */
116
+ id?: string;
102
117
  type: string;
103
118
  label?: string;
104
119
  url?: string;
@@ -107,6 +122,8 @@ interface SeedMenuItem {
107
122
  target?: "_blank" | "_self";
108
123
  titleAttr?: string;
109
124
  cssClasses?: string;
125
+ locale?: string;
126
+ translationOf?: string;
110
127
  children?: SeedMenuItem[];
111
128
  }
112
129
  /**
@@ -0,0 +1,6 @@
1
+ //#region src/version.ts
2
+ const VERSION = "0.1.16";
3
+ const COMMIT = "e58e0f7b";
4
+
5
+ //#endregion
6
+ export { VERSION as n, COMMIT as t };
@@ -1,5 +1,5 @@
1
- import { r as getDb } from "./loader-PZnPxFLc.mjs";
2
- import { t as getWidgetComponents$1 } from "./components-BPknylYg.mjs";
1
+ import { r as getDb } from "./loader-CQFxFOt1.mjs";
2
+ import { t as getWidgetComponents$1 } from "./components-BQiBW_Ji.mjs";
3
3
 
4
4
  //#region src/widgets/index.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { r as RESERVED_COLLECTION_SLUGS } from "./types-DL7Y8D_t.mjs";
1
+ import { r as RESERVED_COLLECTION_SLUGS } from "./types-Dz2EKzsX.mjs";
2
2
 
3
3
  //#region src/import/wordpress-slugs.ts
4
4
  const INVALID_SLUG_CHARS = /[^a-z0-9_]/g;
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
- import { n as hashString } from "./hash-CDX7M0ze.mjs";
2
+ import { n as hashString } from "./hash-V8oZo1W2.mjs";
3
3
  import { z } from "zod";
4
4
 
5
5
  //#region src/schema/zod-generator.ts
@@ -99,8 +99,8 @@ function fieldTypeToTypeScript(field) {
99
99
  if (multiOptions && multiOptions.length > 0) return `(${multiOptions.map((o) => `"${o}"`).join(" | ")})[]`;
100
100
  return "string[]";
101
101
  case "portableText": return "PortableTextBlock[]";
102
- case "image": return "{ id: string; src?: string; alt?: string; width?: number; height?: number }";
103
- case "file": return "{ id: string; src?: string; filename?: string; mimeType?: string; size?: number }";
102
+ case "image": return "{ id: string; src?: string; alt?: string; width?: number; height?: number; provider?: string; previewUrl?: string; meta?: Record<string, unknown> }";
103
+ case "file": return "{ id: string; src?: string; filename?: string; mimeType?: string; size?: number; provider?: string; meta?: Record<string, unknown> }";
104
104
  case "reference": return "string";
105
105
  case "json": return "unknown";
106
106
  default: return "unknown";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dineway",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "description": "Agentic Website builder for restaurants — structured content meets AI via the Model Context Protocol",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -341,9 +341,9 @@
341
341
  "ulidx": "^2.4.1",
342
342
  "upng-js": "^2.1.0",
343
343
  "zod": "^4.3.5",
344
- "@dineway-ai/admin": "^0.1.10",
345
- "@dineway-ai/auth": "^0.1.11",
346
- "@dineway-ai/gutenberg-to-portable-text": "^0.1.10"
344
+ "@dineway-ai/admin": "^0.1.11",
345
+ "@dineway-ai/gutenberg-to-portable-text": "^0.1.11",
346
+ "@dineway-ai/auth": "^0.1.12"
347
347
  },
348
348
  "optionalDependencies": {
349
349
  "@libsql/kysely-libsql": "^0.4.0",
@@ -372,7 +372,7 @@
372
372
  "vite": "^6.0.0",
373
373
  "vitest": "^4.0.18",
374
374
  "zod-openapi": "^5.4.6",
375
- "@dineway-ai/blocks": "^0.1.10"
375
+ "@dineway-ai/blocks": "^0.1.11"
376
376
  },
377
377
  "keywords": [
378
378
  "astro",