dineway 0.1.14 → 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-BTbpzvBq.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-DxXzWML_.d.mts → bylines-DE9bfDur.d.mts} +75 -13
  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 +357 -104
  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-BlcGZRYm.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-B3z9Tv-J.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-CSyZ02_i.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
@@ -1,355 +0,0 @@
1
- import { t as TaxonomyRepository } from "./taxonomy-D5cbhc8u.mjs";
2
- import { c as invalidateTermCache } from "./taxonomies-D2aZGuns.mjs";
3
- import { ulid } from "ulidx";
4
-
5
- //#region src/api/handlers/taxonomies.ts
6
- /** Taxonomy name validation pattern: lowercase alphanumeric + underscores, starts with letter */
7
- const NAME_PATTERN = /^[a-z][a-z0-9_]*$/;
8
- /**
9
- * Build tree structure from flat terms
10
- */
11
- function buildTree(flatTerms) {
12
- const map = /* @__PURE__ */ new Map();
13
- const roots = [];
14
- for (const term of flatTerms) map.set(term.id, term);
15
- for (const term of flatTerms) if (term.parentId && map.has(term.parentId)) map.get(term.parentId).children.push(term);
16
- else roots.push(term);
17
- return roots;
18
- }
19
- /**
20
- * Look up a taxonomy definition by name, returning a NOT_FOUND error if missing.
21
- */
22
- async function requireTaxonomyDef(db, name) {
23
- const def = await db.selectFrom("_dineway_taxonomy_defs").selectAll().where("name", "=", name).executeTakeFirst();
24
- if (!def) return {
25
- success: false,
26
- error: {
27
- code: "NOT_FOUND",
28
- message: `Taxonomy '${name}' not found`
29
- }
30
- };
31
- return {
32
- success: true,
33
- def
34
- };
35
- }
36
- /**
37
- * List all taxonomy definitions
38
- */
39
- async function handleTaxonomyList(db) {
40
- try {
41
- return {
42
- success: true,
43
- data: { taxonomies: (await db.selectFrom("_dineway_taxonomy_defs").selectAll().execute()).map((row) => ({
44
- id: row.id,
45
- name: row.name,
46
- label: row.label,
47
- labelSingular: row.label_singular ?? void 0,
48
- hierarchical: row.hierarchical === 1,
49
- collections: row.collections ? JSON.parse(row.collections) : []
50
- })) }
51
- };
52
- } catch {
53
- return {
54
- success: false,
55
- error: {
56
- code: "TAXONOMY_LIST_ERROR",
57
- message: "Failed to list taxonomies"
58
- }
59
- };
60
- }
61
- }
62
- /**
63
- * Create a new taxonomy definition
64
- */
65
- async function handleTaxonomyCreate(db, input) {
66
- try {
67
- if (!NAME_PATTERN.test(input.name)) return {
68
- success: false,
69
- error: {
70
- code: "VALIDATION_ERROR",
71
- message: "Taxonomy name must start with a letter and contain only lowercase letters, numbers, and underscores"
72
- }
73
- };
74
- const collections = [...new Set(input.collections ?? [])];
75
- if (collections.length > 0) {
76
- const existingCollections = await db.selectFrom("_dineway_collections").select("slug").where("slug", "in", collections).execute();
77
- const existingSlugs = new Set(existingCollections.map((c) => c.slug));
78
- const invalid = collections.filter((c) => !existingSlugs.has(c));
79
- if (invalid.length > 0) return {
80
- success: false,
81
- error: {
82
- code: "VALIDATION_ERROR",
83
- message: `Unknown collection(s): ${invalid.join(", ")}`
84
- }
85
- };
86
- }
87
- if (await db.selectFrom("_dineway_taxonomy_defs").selectAll().where("name", "=", input.name).executeTakeFirst()) return {
88
- success: false,
89
- error: {
90
- code: "CONFLICT",
91
- message: `Taxonomy '${input.name}' already exists`
92
- }
93
- };
94
- const id = ulid();
95
- await db.insertInto("_dineway_taxonomy_defs").values({
96
- id,
97
- name: input.name,
98
- label: input.label,
99
- label_singular: null,
100
- hierarchical: input.hierarchical ? 1 : 0,
101
- collections: JSON.stringify(collections)
102
- }).execute();
103
- return {
104
- success: true,
105
- data: { taxonomy: {
106
- id,
107
- name: input.name,
108
- label: input.label,
109
- hierarchical: input.hierarchical ?? false,
110
- collections
111
- } }
112
- };
113
- } catch (error) {
114
- if (error instanceof Error && error.message.includes("UNIQUE constraint failed")) return {
115
- success: false,
116
- error: {
117
- code: "CONFLICT",
118
- message: `Taxonomy '${input.name}' already exists`
119
- }
120
- };
121
- return {
122
- success: false,
123
- error: {
124
- code: "TAXONOMY_CREATE_ERROR",
125
- message: "Failed to create taxonomy"
126
- }
127
- };
128
- }
129
- }
130
- /**
131
- * List all terms for a taxonomy (returns tree for hierarchical taxonomies)
132
- */
133
- async function handleTermList(db, taxonomyName) {
134
- try {
135
- const lookup = await requireTaxonomyDef(db, taxonomyName);
136
- if (!lookup.success) return lookup;
137
- const repo = new TaxonomyRepository(db);
138
- const terms = await repo.findByName(taxonomyName);
139
- const counts = await repo.countEntriesForTerms(terms.map((term) => term.id));
140
- const termData = terms.map((term) => ({
141
- id: term.id,
142
- name: term.name,
143
- slug: term.slug,
144
- label: term.label,
145
- parentId: term.parentId,
146
- description: typeof term.data?.description === "string" ? term.data.description : void 0,
147
- children: [],
148
- count: counts.get(term.id) ?? 0
149
- }));
150
- return {
151
- success: true,
152
- data: { terms: lookup.def.hierarchical === 1 ? buildTree(termData) : termData }
153
- };
154
- } catch {
155
- return {
156
- success: false,
157
- error: {
158
- code: "TERM_LIST_ERROR",
159
- message: "Failed to list terms"
160
- }
161
- };
162
- }
163
- }
164
- /**
165
- * Create a new term in a taxonomy
166
- */
167
- async function handleTermCreate(db, taxonomyName, input) {
168
- try {
169
- const lookup = await requireTaxonomyDef(db, taxonomyName);
170
- if (!lookup.success) return lookup;
171
- const repo = new TaxonomyRepository(db);
172
- if (await repo.findBySlug(taxonomyName, input.slug)) return {
173
- success: false,
174
- error: {
175
- code: "CONFLICT",
176
- message: `Term with slug '${input.slug}' already exists in taxonomy '${taxonomyName}'`
177
- }
178
- };
179
- const term = await repo.create({
180
- name: taxonomyName,
181
- slug: input.slug,
182
- label: input.label,
183
- parentId: input.parentId ?? void 0,
184
- data: input.description ? { description: input.description } : void 0
185
- });
186
- /* @__PURE__ */ invalidateTermCache();
187
- return {
188
- success: true,
189
- data: { term: {
190
- id: term.id,
191
- name: term.name,
192
- slug: term.slug,
193
- label: term.label,
194
- parentId: term.parentId,
195
- description: typeof term.data?.description === "string" ? term.data.description : void 0
196
- } }
197
- };
198
- } catch {
199
- return {
200
- success: false,
201
- error: {
202
- code: "TERM_CREATE_ERROR",
203
- message: "Failed to create term"
204
- }
205
- };
206
- }
207
- }
208
- /**
209
- * Get a single term by slug
210
- */
211
- async function handleTermGet(db, taxonomyName, termSlug) {
212
- try {
213
- const repo = new TaxonomyRepository(db);
214
- const term = await repo.findBySlug(taxonomyName, termSlug);
215
- if (!term) return {
216
- success: false,
217
- error: {
218
- code: "NOT_FOUND",
219
- message: `Term '${termSlug}' not found in taxonomy '${taxonomyName}'`
220
- }
221
- };
222
- const count = await repo.countEntriesWithTerm(term.id);
223
- const children = await repo.findChildren(term.id);
224
- return {
225
- success: true,
226
- data: { term: {
227
- id: term.id,
228
- name: term.name,
229
- slug: term.slug,
230
- label: term.label,
231
- parentId: term.parentId,
232
- description: typeof term.data?.description === "string" ? term.data.description : void 0,
233
- count,
234
- children: children.map((c) => ({
235
- id: c.id,
236
- slug: c.slug,
237
- label: c.label
238
- }))
239
- } }
240
- };
241
- } catch {
242
- return {
243
- success: false,
244
- error: {
245
- code: "TERM_GET_ERROR",
246
- message: "Failed to get term"
247
- }
248
- };
249
- }
250
- }
251
- /**
252
- * Update a term
253
- */
254
- async function handleTermUpdate(db, taxonomyName, termSlug, input) {
255
- try {
256
- const repo = new TaxonomyRepository(db);
257
- const term = await repo.findBySlug(taxonomyName, termSlug);
258
- if (!term) return {
259
- success: false,
260
- error: {
261
- code: "NOT_FOUND",
262
- message: `Term '${termSlug}' not found in taxonomy '${taxonomyName}'`
263
- }
264
- };
265
- if (input.slug && input.slug !== termSlug) {
266
- const existing = await repo.findBySlug(taxonomyName, input.slug);
267
- if (existing && existing.id !== term.id) return {
268
- success: false,
269
- error: {
270
- code: "CONFLICT",
271
- message: `Term with slug '${input.slug}' already exists in taxonomy '${taxonomyName}'`
272
- }
273
- };
274
- }
275
- const updated = await repo.update(term.id, {
276
- slug: input.slug,
277
- label: input.label,
278
- parentId: input.parentId,
279
- data: input.description !== void 0 ? { description: input.description } : void 0
280
- });
281
- /* @__PURE__ */ invalidateTermCache();
282
- if (!updated) return {
283
- success: false,
284
- error: {
285
- code: "TERM_UPDATE_ERROR",
286
- message: "Failed to update term"
287
- }
288
- };
289
- return {
290
- success: true,
291
- data: { term: {
292
- id: updated.id,
293
- name: updated.name,
294
- slug: updated.slug,
295
- label: updated.label,
296
- parentId: updated.parentId,
297
- description: typeof updated.data?.description === "string" ? updated.data.description : void 0
298
- } }
299
- };
300
- } catch {
301
- return {
302
- success: false,
303
- error: {
304
- code: "TERM_UPDATE_ERROR",
305
- message: "Failed to update term"
306
- }
307
- };
308
- }
309
- }
310
- /**
311
- * Delete a term
312
- */
313
- async function handleTermDelete(db, taxonomyName, termSlug) {
314
- try {
315
- const repo = new TaxonomyRepository(db);
316
- const term = await repo.findBySlug(taxonomyName, termSlug);
317
- if (!term) return {
318
- success: false,
319
- error: {
320
- code: "NOT_FOUND",
321
- message: `Term '${termSlug}' not found in taxonomy '${taxonomyName}'`
322
- }
323
- };
324
- if ((await repo.findChildren(term.id)).length > 0) return {
325
- success: false,
326
- error: {
327
- code: "VALIDATION_ERROR",
328
- message: "Cannot delete term with children. Delete children first."
329
- }
330
- };
331
- if (!await repo.delete(term.id)) return {
332
- success: false,
333
- error: {
334
- code: "TERM_DELETE_ERROR",
335
- message: "Failed to delete term"
336
- }
337
- };
338
- /* @__PURE__ */ invalidateTermCache();
339
- return {
340
- success: true,
341
- data: { deleted: true }
342
- };
343
- } catch {
344
- return {
345
- success: false,
346
- error: {
347
- code: "TERM_DELETE_ERROR",
348
- message: "Failed to delete term"
349
- }
350
- };
351
- }
352
- }
353
-
354
- //#endregion
355
- export { handleTermGet as a, handleTermDelete as i, handleTaxonomyList as n, handleTermList as o, handleTermCreate as r, handleTermUpdate as s, handleTaxonomyCreate as t };
@@ -1,165 +0,0 @@
1
- import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-D_jVet6z.mjs";
2
- import { ulid } from "ulidx";
3
-
4
- //#region src/database/repositories/taxonomy.ts
5
- /**
6
- * Taxonomy repository for categories, tags, and other classification
7
- *
8
- * Taxonomies are hierarchical (via parentId) and can be attached to content entries.
9
- */
10
- var TaxonomyRepository = class {
11
- constructor(db) {
12
- this.db = db;
13
- }
14
- /**
15
- * Create a new taxonomy term
16
- */
17
- async create(input) {
18
- const id = ulid();
19
- const row = {
20
- id,
21
- name: input.name,
22
- slug: input.slug,
23
- label: input.label,
24
- parent_id: input.parentId ?? null,
25
- data: input.data ? JSON.stringify(input.data) : null
26
- };
27
- await this.db.insertInto("taxonomies").values(row).execute();
28
- const taxonomy = await this.findById(id);
29
- if (!taxonomy) throw new Error("Failed to create taxonomy");
30
- return taxonomy;
31
- }
32
- /**
33
- * Find taxonomy by ID
34
- */
35
- async findById(id) {
36
- const row = await this.db.selectFrom("taxonomies").selectAll().where("id", "=", id).executeTakeFirst();
37
- return row ? this.rowToTaxonomy(row) : null;
38
- }
39
- /**
40
- * Find taxonomy by name and slug (unique constraint)
41
- */
42
- async findBySlug(name, slug) {
43
- const row = await this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).where("slug", "=", slug).executeTakeFirst();
44
- return row ? this.rowToTaxonomy(row) : null;
45
- }
46
- /**
47
- * Get all terms for a taxonomy (e.g., all categories)
48
- */
49
- async findByName(name, options = {}) {
50
- let query = this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).orderBy("label", "asc");
51
- if (options.parentId !== void 0) if (options.parentId === null) query = query.where("parent_id", "is", null);
52
- else query = query.where("parent_id", "=", options.parentId);
53
- return (await query.execute()).map((row) => this.rowToTaxonomy(row));
54
- }
55
- /**
56
- * Get children of a taxonomy term
57
- */
58
- async findChildren(parentId) {
59
- return (await this.db.selectFrom("taxonomies").selectAll().where("parent_id", "=", parentId).orderBy("label", "asc").execute()).map((row) => this.rowToTaxonomy(row));
60
- }
61
- /**
62
- * Update a taxonomy term
63
- */
64
- async update(id, input) {
65
- if (!await this.findById(id)) return null;
66
- const updates = {};
67
- if (input.slug !== void 0) updates.slug = input.slug;
68
- if (input.label !== void 0) updates.label = input.label;
69
- if (input.parentId !== void 0) updates.parent_id = input.parentId;
70
- if (input.data !== void 0) updates.data = JSON.stringify(input.data);
71
- if (Object.keys(updates).length > 0) await this.db.updateTable("taxonomies").set(updates).where("id", "=", id).execute();
72
- return this.findById(id);
73
- }
74
- /**
75
- * Delete a taxonomy term
76
- */
77
- async delete(id) {
78
- await this.db.deleteFrom("content_taxonomies").where("taxonomy_id", "=", id).execute();
79
- return ((await this.db.deleteFrom("taxonomies").where("id", "=", id).executeTakeFirst()).numDeletedRows ?? 0) > 0;
80
- }
81
- /**
82
- * Attach a taxonomy term to a content entry
83
- */
84
- async attachToEntry(collection, entryId, taxonomyId) {
85
- const row = {
86
- collection,
87
- entry_id: entryId,
88
- taxonomy_id: taxonomyId
89
- };
90
- await this.db.insertInto("content_taxonomies").values(row).onConflict((oc) => oc.doNothing()).execute();
91
- }
92
- /**
93
- * Detach a taxonomy term from a content entry
94
- */
95
- async detachFromEntry(collection, entryId, taxonomyId) {
96
- await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "=", taxonomyId).execute();
97
- }
98
- /**
99
- * Get all taxonomy terms for a content entry
100
- */
101
- async getTermsForEntry(collection, entryId, taxonomyName) {
102
- let query = this.db.selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.id", "content_taxonomies.taxonomy_id").selectAll("taxonomies").where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "=", entryId);
103
- if (taxonomyName) query = query.where("taxonomies.name", "=", taxonomyName);
104
- return (await query.execute()).map((row) => this.rowToTaxonomy(row));
105
- }
106
- /**
107
- * Set all taxonomy terms for a content entry (replaces existing)
108
- * Uses batch operations to avoid N+1 queries.
109
- */
110
- async setTermsForEntry(collection, entryId, taxonomyName, taxonomyIds) {
111
- const current = await this.getTermsForEntry(collection, entryId, taxonomyName);
112
- const currentIds = new Set(current.map((t) => t.id));
113
- const newIds = new Set(taxonomyIds);
114
- const toRemove = current.filter((t) => !newIds.has(t.id)).map((t) => t.id);
115
- if (toRemove.length > 0) await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "in", toRemove).execute();
116
- const toAdd = taxonomyIds.filter((id) => !currentIds.has(id));
117
- if (toAdd.length > 0) await this.db.insertInto("content_taxonomies").values(toAdd.map((taxonomy_id) => ({
118
- collection,
119
- entry_id: entryId,
120
- taxonomy_id
121
- }))).onConflict((oc) => oc.doNothing()).execute();
122
- }
123
- /**
124
- * Remove all taxonomy associations for an entry (use when entry is deleted)
125
- */
126
- async clearEntryTerms(collection, entryId) {
127
- const result = await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).executeTakeFirst();
128
- return Number(result.numDeletedRows ?? 0);
129
- }
130
- /**
131
- * Count entries that have a specific taxonomy term
132
- */
133
- async countEntriesWithTerm(taxonomyId) {
134
- const result = await this.db.selectFrom("content_taxonomies").select((eb) => eb.fn.count("entry_id").as("count")).where("taxonomy_id", "=", taxonomyId).executeTakeFirst();
135
- return Number(result?.count || 0);
136
- }
137
- /**
138
- * Batch count entries for multiple taxonomy term IDs.
139
- */
140
- async countEntriesForTerms(termIds) {
141
- if (termIds.length === 0) return /* @__PURE__ */ new Map();
142
- const counts = /* @__PURE__ */ new Map();
143
- for (const chunk of chunks(termIds, SQL_BATCH_SIZE)) {
144
- 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();
145
- for (const row of rows) counts.set(row.taxonomy_id, Number(row.count || 0));
146
- }
147
- return counts;
148
- }
149
- /**
150
- * Convert database row to Taxonomy object
151
- */
152
- rowToTaxonomy(row) {
153
- return {
154
- id: row.id,
155
- name: row.name,
156
- slug: row.slug,
157
- label: row.label,
158
- parentId: row.parent_id,
159
- data: row.data ? JSON.parse(row.data) : null
160
- };
161
- }
162
- };
163
-
164
- //#endregion
165
- export { TaxonomyRepository as t };
@@ -1,6 +0,0 @@
1
- //#region src/version.ts
2
- const VERSION = "0.1.14";
3
- const COMMIT = "63a0d06c";
4
-
5
- //#endregion
6
- export { VERSION as n, COMMIT as t };
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes