emdash 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (970) hide show
  1. package/dist/{activation-Dim4YMM7.mjs → activation-CGlyigmg.mjs} +3 -3
  2. package/dist/{activation-Dim4YMM7.mjs.map → activation-CGlyigmg.mjs.map} +1 -1
  3. package/dist/{adapters-F_xorvWv.d.mts → adapters-D9a1PfqH.d.mts} +1 -1
  4. package/dist/{adapters-F_xorvWv.d.mts.map → adapters-D9a1PfqH.d.mts.map} +1 -1
  5. package/dist/{after-PcEvMY_6.mjs → after-32yNRvd2.mjs} +5 -2
  6. package/dist/{after-PcEvMY_6.mjs.map → after-32yNRvd2.mjs.map} +1 -1
  7. package/dist/api/route-utils.d.mts +4 -4
  8. package/dist/api/route-utils.mjs +50 -49
  9. package/dist/api/route-utils.mjs.map +1 -1
  10. package/dist/api/schemas/index.d.mts +1 -1
  11. package/dist/api/schemas/index.mjs +7 -7
  12. package/dist/{api-D-7BNHoz.mjs → api--PYoyeTo.mjs} +121 -48
  13. package/dist/api--PYoyeTo.mjs.map +1 -0
  14. package/dist/api-tokens-DqSlkDVI.mjs +9 -0
  15. package/dist/api-tokens-DqSlkDVI.mjs.map +1 -0
  16. package/dist/{api-tokens-Bx38ZCQp.mjs → api-tokens-GNCsIegW.mjs} +3 -3
  17. package/dist/{api-tokens-Bx38ZCQp.mjs.map → api-tokens-GNCsIegW.mjs.map} +1 -1
  18. package/dist/{apply-T7ATgzCh.mjs → apply-DVnupNeS.mjs} +149 -91
  19. package/dist/apply-DVnupNeS.mjs.map +1 -0
  20. package/dist/{approvals-D-m6wvGl.mjs → approvals-DTtYSB27.mjs} +2 -2
  21. package/dist/{approvals-D-m6wvGl.mjs.map → approvals-DTtYSB27.mjs.map} +1 -1
  22. package/dist/{artifacts-htGyfCSt.mjs → artifacts-Dvdp2KK-.mjs} +29 -13
  23. package/dist/artifacts-Dvdp2KK-.mjs.map +1 -0
  24. package/dist/astro/image-endpoint.mjs +12 -2
  25. package/dist/astro/image-endpoint.mjs.map +1 -1
  26. package/dist/astro/index.d.mts +15 -14
  27. package/dist/astro/index.d.mts.map +1 -1
  28. package/dist/astro/index.mjs +59 -8
  29. package/dist/astro/index.mjs.map +1 -1
  30. package/dist/astro/middleware/auth.d.mts +13 -12
  31. package/dist/astro/middleware/auth.d.mts.map +1 -1
  32. package/dist/astro/middleware/auth.mjs +10 -8
  33. package/dist/astro/middleware/auth.mjs.map +1 -1
  34. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  35. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  36. package/dist/astro/middleware/redirect.mjs +129 -49
  37. package/dist/astro/middleware/redirect.mjs.map +1 -1
  38. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  39. package/dist/astro/middleware/request-context.mjs +18 -9
  40. package/dist/astro/middleware/request-context.mjs.map +1 -1
  41. package/dist/astro/middleware.d.mts +13 -12
  42. package/dist/astro/middleware.d.mts.map +1 -1
  43. package/dist/astro/middleware.mjs +111 -101
  44. package/dist/astro/middleware.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +11 -11
  46. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +11 -11
  47. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  48. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  49. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
  50. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +14 -14
  51. package/dist/astro/routes/api/admin/byline-fields/index.mjs +14 -14
  52. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +14 -14
  53. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +25 -25
  54. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +25 -25
  55. package/dist/astro/routes/api/admin/bylines/index.mjs +25 -25
  56. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +17 -17
  57. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  58. package/dist/astro/routes/api/admin/comments/bulk.mjs +16 -16
  59. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  60. package/dist/astro/routes/api/admin/comments/index.mjs +16 -16
  61. package/dist/astro/routes/api/admin/core-update.mjs +6 -6
  62. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +5 -5
  63. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +4 -4
  64. package/dist/astro/routes/api/admin/media-usage/activation.mjs +18 -18
  65. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +19 -19
  66. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +19 -19
  67. package/dist/astro/routes/api/admin/media-usage/progress.mjs +22 -21
  68. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  69. package/dist/astro/routes/api/admin/media-usage/repair.mjs +26 -25
  70. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  71. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +19 -19
  72. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +19 -19
  73. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
  74. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
  75. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +7 -7
  76. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +7 -7
  77. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +66 -65
  78. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  79. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +5 -5
  80. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +66 -65
  81. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +66 -65
  83. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +73 -72
  85. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/plugins/index.mjs +66 -65
  87. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -4
  89. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +66 -65
  90. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +73 -72
  92. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  93. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +66 -65
  94. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  95. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +66 -65
  96. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  97. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +74 -73
  98. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +4 -4
  100. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +68 -67
  101. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +4 -4
  103. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +67 -66
  104. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  105. package/dist/astro/routes/api/admin/plugins/updates.mjs +66 -65
  106. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  107. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +5 -5
  108. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +66 -65
  109. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  110. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +4 -4
  111. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +66 -65
  112. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  113. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +3 -3
  114. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +33 -32
  115. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
  116. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +33 -32
  117. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
  118. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +35 -34
  119. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
  120. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +35 -34
  121. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
  122. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +35 -34
  123. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +36 -35
  125. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
  126. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +36 -35
  127. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
  128. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +35 -34
  129. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
  130. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +36 -35
  131. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +37 -36
  133. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
  134. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +35 -34
  135. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
  136. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +35 -34
  137. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
  138. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +37 -36
  139. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
  140. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +35 -34
  141. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
  142. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +37 -36
  143. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
  144. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +35 -34
  145. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
  146. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +35 -34
  147. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
  148. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +37 -36
  149. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
  150. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +35 -34
  151. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
  152. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +35 -34
  153. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
  154. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +37 -36
  155. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
  156. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
  157. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
  158. package/dist/astro/routes/api/admin/users/_id_/index.mjs +12 -12
  159. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
  160. package/dist/astro/routes/api/admin/users/index.mjs +11 -11
  161. package/dist/astro/routes/api/auth/dev-bypass.mjs +3 -3
  162. package/dist/astro/routes/api/auth/handover.mjs +5 -5
  163. package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
  164. package/dist/astro/routes/api/auth/invite/complete.mjs +15 -15
  165. package/dist/astro/routes/api/auth/invite/index.mjs +12 -12
  166. package/dist/astro/routes/api/auth/invite/register-options.mjs +13 -13
  167. package/dist/astro/routes/api/auth/logout.mjs +3 -3
  168. package/dist/astro/routes/api/auth/magic-link/send.mjs +14 -14
  169. package/dist/astro/routes/api/auth/magic-link/verify.mjs +13 -13
  170. package/dist/astro/routes/api/auth/me.mjs +12 -12
  171. package/dist/astro/routes/api/auth/mode.mjs +3 -3
  172. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +8 -8
  173. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +1 -1
  174. package/dist/astro/routes/api/auth/passkey/_id_.mjs +11 -11
  175. package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
  176. package/dist/astro/routes/api/auth/passkey/options.mjs +15 -15
  177. package/dist/astro/routes/api/auth/passkey/register/options.mjs +13 -13
  178. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +13 -13
  179. package/dist/astro/routes/api/auth/passkey/verify.mjs +15 -15
  180. package/dist/astro/routes/api/auth/signup/complete.mjs +15 -15
  181. package/dist/astro/routes/api/auth/signup/request.mjs +13 -13
  182. package/dist/astro/routes/api/auth/signup/verify.mjs +3 -3
  183. package/dist/astro/routes/api/calendar.mjs +12 -12
  184. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
  185. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +17 -17
  186. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
  187. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +15 -15
  188. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +4 -4
  189. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +15 -15
  190. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -4
  191. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +9 -9
  192. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +29 -28
  193. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  194. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +15 -15
  195. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +34 -33
  196. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  197. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -33
  198. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  199. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +4 -4
  200. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
  201. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +15 -15
  202. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
  203. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +35 -27
  204. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  205. package/dist/astro/routes/api/content/_collection_/_id_/translations.d.mts.map +1 -1
  206. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +8 -4
  207. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -1
  208. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +15 -15
  209. package/dist/astro/routes/api/content/_collection_/_id_.mjs +15 -15
  210. package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -4
  211. package/dist/astro/routes/api/content/_collection_/index.mjs +12 -12
  212. package/dist/astro/routes/api/content/_collection_/trash.mjs +12 -12
  213. package/dist/astro/routes/api/dashboard.mjs +22 -16
  214. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  215. package/dist/astro/routes/api/dev/emails.mjs +3 -3
  216. package/dist/astro/routes/api/dev/scheduled-tasks.mjs +97 -95
  217. package/dist/astro/routes/api/dev/scheduled-tasks.mjs.map +1 -1
  218. package/dist/astro/routes/api/health.mjs +4 -4
  219. package/dist/astro/routes/api/import/probe.d.mts +4 -3
  220. package/dist/astro/routes/api/import/probe.d.mts.map +1 -1
  221. package/dist/astro/routes/api/import/probe.mjs +27 -25
  222. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  223. package/dist/astro/routes/api/import/wordpress/analyze.d.mts +4 -3
  224. package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -1
  225. package/dist/astro/routes/api/import/wordpress/analyze.mjs +7 -29
  226. package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
  227. package/dist/astro/routes/api/import/wordpress/execute.d.mts +14 -13
  228. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  229. package/dist/astro/routes/api/import/wordpress/execute.mjs +29 -29
  230. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  231. package/dist/astro/routes/api/import/wordpress/media.d.mts +13 -12
  232. package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -1
  233. package/dist/astro/routes/api/import/wordpress/media.mjs +14 -14
  234. package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -19
  235. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  236. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +14 -13
  237. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
  238. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +25 -24
  239. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  240. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  241. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +27 -25
  242. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  243. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +14 -13
  244. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  245. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +39 -38
  246. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  247. package/dist/astro/routes/api/manifest.mjs +4 -4
  248. package/dist/astro/routes/api/mcp.mjs +99 -83
  249. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  250. package/dist/astro/routes/api/media/_id_/confirm.mjs +16 -16
  251. package/dist/astro/routes/api/media/_id_/replace.mjs +12 -12
  252. package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
  253. package/dist/astro/routes/api/media/_id_/usage.mjs +28 -27
  254. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  255. package/dist/astro/routes/api/media/_id_.mjs +26 -25
  256. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  257. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +5 -5
  258. package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
  259. package/dist/astro/routes/api/media/file/_...key_.mjs +62 -8
  260. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
  261. package/dist/astro/routes/api/media/folders/_id_.mjs +13 -13
  262. package/dist/astro/routes/api/media/folders/index.mjs +13 -13
  263. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -4
  264. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -4
  265. package/dist/astro/routes/api/media/providers/index.mjs +4 -4
  266. package/dist/astro/routes/api/media/upload-url.mjs +15 -15
  267. package/dist/astro/routes/api/media.mjs +30 -29
  268. package/dist/astro/routes/api/media.mjs.map +1 -1
  269. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +17 -15
  270. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  271. package/dist/astro/routes/api/menus/_name_/items.mjs +17 -15
  272. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  273. package/dist/astro/routes/api/menus/_name_/reorder.mjs +17 -15
  274. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  275. package/dist/astro/routes/api/menus/_name_/translations.mjs +17 -15
  276. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  277. package/dist/astro/routes/api/menus/_name_.mjs +17 -15
  278. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  279. package/dist/astro/routes/api/menus/index.mjs +17 -15
  280. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  281. package/dist/astro/routes/api/oauth/authorize.mjs +2 -2
  282. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  283. package/dist/astro/routes/api/oauth/device/code.mjs +8 -8
  284. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  285. package/dist/astro/routes/api/oauth/register.mjs +5 -5
  286. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  287. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  288. package/dist/astro/routes/api/oauth/token.d.mts.map +1 -1
  289. package/dist/astro/routes/api/oauth/token.mjs +7 -7
  290. package/dist/astro/routes/api/oauth/token.mjs.map +1 -1
  291. package/dist/astro/routes/api/openapi.json.mjs +12 -12
  292. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +9 -9
  293. package/dist/astro/routes/api/redirects/404s/index.mjs +20 -19
  294. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  295. package/dist/astro/routes/api/redirects/404s/summary.mjs +20 -19
  296. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  297. package/dist/astro/routes/api/redirects/_id_.mjs +21 -20
  298. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  299. package/dist/astro/routes/api/redirects/index.mjs +21 -20
  300. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  301. package/dist/astro/routes/api/relations/_id_/index.mjs +34 -33
  302. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  303. package/dist/astro/routes/api/relations/index.mjs +34 -33
  304. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  305. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
  306. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +15 -15
  307. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +66 -65
  308. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  309. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +66 -65
  310. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  311. package/dist/astro/routes/api/schema/block-types/index.mjs +66 -65
  312. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  313. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +66 -65
  314. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  315. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +66 -65
  316. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  317. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +66 -65
  318. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  319. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +66 -65
  320. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  321. package/dist/astro/routes/api/schema/collections/index.mjs +66 -65
  322. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  323. package/dist/astro/routes/api/schema/collections/reorder.mjs +66 -65
  324. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  325. package/dist/astro/routes/api/schema/index.mjs +17 -16
  326. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  327. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +66 -65
  328. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  329. package/dist/astro/routes/api/schema/orphans/index.mjs +66 -65
  330. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  331. package/dist/astro/routes/api/search/enable.mjs +20 -18
  332. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  333. package/dist/astro/routes/api/search/index.mjs +19 -17
  334. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  335. package/dist/astro/routes/api/search/rebuild.mjs +20 -18
  336. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  337. package/dist/astro/routes/api/search/stats.mjs +13 -11
  338. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  339. package/dist/astro/routes/api/search/suggest.mjs +19 -17
  340. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  341. package/dist/astro/routes/api/sections/_slug_.mjs +19 -17
  342. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  343. package/dist/astro/routes/api/sections/index.mjs +19 -17
  344. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  345. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  346. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  347. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  348. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  349. package/dist/astro/routes/api/settings/domain-notify.mjs +7 -7
  350. package/dist/astro/routes/api/settings/domain.mjs +19 -17
  351. package/dist/astro/routes/api/settings/domain.mjs.map +1 -1
  352. package/dist/astro/routes/api/settings/email.mjs +5 -5
  353. package/dist/astro/routes/api/settings.mjs +25 -23
  354. package/dist/astro/routes/api/settings.mjs.map +1 -1
  355. package/dist/astro/routes/api/setup/admin-verify.mjs +18 -18
  356. package/dist/astro/routes/api/setup/admin.mjs +14 -14
  357. package/dist/astro/routes/api/setup/dev-bypass.mjs +45 -44
  358. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  359. package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
  360. package/dist/astro/routes/api/setup/index.mjs +48 -47
  361. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  362. package/dist/astro/routes/api/setup/status.mjs +4 -4
  363. package/dist/astro/routes/api/site/domain-proof.mjs +17 -15
  364. package/dist/astro/routes/api/site/domain-proof.mjs.map +1 -1
  365. package/dist/astro/routes/api/snapshot.mjs +9 -9
  366. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +25 -24
  367. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  368. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +25 -24
  369. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  370. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -24
  371. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  372. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +25 -24
  373. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  374. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +25 -24
  375. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  376. package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -24
  377. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  378. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +35 -34
  379. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  380. package/dist/astro/routes/api/taxonomies/index.mjs +25 -24
  381. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  382. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  383. package/dist/astro/routes/api/typegen.mjs +5 -5
  384. package/dist/astro/routes/api/visual-editing/action-token.mjs +5 -5
  385. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +17 -17
  386. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +3 -3
  387. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +1 -1
  388. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +1 -1
  389. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
  390. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +24 -13
  391. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  392. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
  393. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +22 -17
  394. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  395. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +21 -17
  396. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  397. package/dist/astro/routes/api/widget-areas/_name_.mjs +14 -10
  398. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  399. package/dist/astro/routes/api/widget-areas/index.mjs +21 -17
  400. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  401. package/dist/astro/routes/api/widget-components.mjs +3 -3
  402. package/dist/astro/routes/robots.txt.mjs +16 -14
  403. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  404. package/dist/astro/routes/sitemap-_collection_.xml.mjs +18 -16
  405. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  406. package/dist/astro/routes/sitemap.xml.mjs +16 -14
  407. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  408. package/dist/astro/types.d.mts +22 -20
  409. package/dist/astro/types.d.mts.map +1 -1
  410. package/dist/{audit-_gieLVGU.mjs → audit-B8XE-0UV.mjs} +2 -2
  411. package/dist/{audit-_gieLVGU.mjs.map → audit-B8XE-0UV.mjs.map} +1 -1
  412. package/dist/auth/providers/github.d.mts +1 -1
  413. package/dist/auth/providers/google.d.mts +1 -1
  414. package/dist/auth/providers/microsoft.d.mts +1 -1
  415. package/dist/{authorize-DPFBGbE6.mjs → authorize-NJgp8kLI.mjs} +2 -2
  416. package/dist/{authorize-DPFBGbE6.mjs.map → authorize-NJgp8kLI.mjs.map} +1 -1
  417. package/dist/{backup-3FgVxiDJ.mjs → backup-8rPSJ28a.mjs} +4 -4
  418. package/dist/{backup-3FgVxiDJ.mjs.map → backup-8rPSJ28a.mjs.map} +1 -1
  419. package/dist/{block-types-CYcG56JB.mjs → block-types-BbOrfnWs.mjs} +5 -5
  420. package/dist/{block-types-CYcG56JB.mjs.map → block-types-BbOrfnWs.mjs.map} +1 -1
  421. package/dist/{block-values-gCX4HBSl.mjs → block-values-Dg0-8PPS.mjs} +4 -4
  422. package/dist/{block-values-gCX4HBSl.mjs.map → block-values-Dg0-8PPS.mjs.map} +1 -1
  423. package/dist/{byline-BR1qhyiw.mjs → byline-DHJS-GGb.mjs} +123 -38
  424. package/dist/byline-DHJS-GGb.mjs.map +1 -0
  425. package/dist/{byline-fields-BLXZnX7N.mjs → byline-fields-CiR8FvvF.mjs} +3 -3
  426. package/dist/{byline-fields-BLXZnX7N.mjs.map → byline-fields-CiR8FvvF.mjs.map} +1 -1
  427. package/dist/{byline-fields-4ClDC88c.mjs → byline-fields-D6KYsEa7.mjs} +2 -2
  428. package/dist/{byline-fields-4ClDC88c.mjs.map → byline-fields-D6KYsEa7.mjs.map} +1 -1
  429. package/dist/{byline-registry-dvt4N3xV.mjs → byline-registry-BhzpO41z.mjs} +3 -3
  430. package/dist/{byline-registry-dvt4N3xV.mjs.map → byline-registry-BhzpO41z.mjs.map} +1 -1
  431. package/dist/{bylines-CVOvRUL7.mjs → bylines-Bsg5cH4S.mjs} +7 -7
  432. package/dist/bylines-Bsg5cH4S.mjs.map +1 -0
  433. package/dist/{bylines-DxOs9B7z.mjs → bylines-f_ZEc6Sn.mjs} +8 -8
  434. package/dist/{bylines-DxOs9B7z.mjs.map → bylines-f_ZEc6Sn.mjs.map} +1 -1
  435. package/dist/{cache-CEU9wo_h.mjs → cache-5DHbpEWu.mjs} +4 -4
  436. package/dist/{cache-CEU9wo_h.mjs.map → cache-5DHbpEWu.mjs.map} +1 -1
  437. package/dist/{capture-triggers-CT6dK9zd.mjs → capture-triggers-BezAvWcB.mjs} +2 -2
  438. package/dist/{capture-triggers-CT6dK9zd.mjs.map → capture-triggers-BezAvWcB.mjs.map} +1 -1
  439. package/dist/{challenge-store-C17BYx2-.mjs → challenge-store-B1C0V4b3.mjs} +1 -1
  440. package/dist/{challenge-store-C17BYx2-.mjs.map → challenge-store-B1C0V4b3.mjs.map} +1 -1
  441. package/dist/{chunks-xC4UD5-S.mjs → chunks-DiW8VMwz.mjs} +2 -2
  442. package/dist/{chunks-xC4UD5-S.mjs.map → chunks-DiW8VMwz.mjs.map} +1 -1
  443. package/dist/cli/index.mjs +53 -52
  444. package/dist/cli/index.mjs.map +1 -1
  445. package/dist/client/cf-access.d.mts +1 -1
  446. package/dist/client/index.d.mts +61 -61
  447. package/dist/client/index.d.mts.map +1 -1
  448. package/dist/client/index.mjs +3 -2
  449. package/dist/client/index.mjs.map +1 -1
  450. package/dist/{collection-slugs-cache-e09QeJQt.mjs → collection-slugs-cache-DIrLjqH-.mjs} +20 -14
  451. package/dist/collection-slugs-cache-DIrLjqH-.mjs.map +1 -0
  452. package/dist/{comment-UvIWDKcW.mjs → comment-DB74Zpa4.mjs} +18 -8
  453. package/dist/comment-DB74Zpa4.mjs.map +1 -0
  454. package/dist/{comment-reaction-dGp6_FRo.mjs → comment-reaction-BScxIWUn.mjs} +2 -2
  455. package/dist/{comment-reaction-dGp6_FRo.mjs.map → comment-reaction-BScxIWUn.mjs.map} +1 -1
  456. package/dist/{comments-pej-_BUO.mjs → comments-Cor_zKml.mjs} +3 -3
  457. package/dist/{comments-pej-_BUO.mjs.map → comments-Cor_zKml.mjs.map} +1 -1
  458. package/dist/config-Cs_AwWXI.mjs +106 -0
  459. package/dist/config-Cs_AwWXI.mjs.map +1 -0
  460. package/dist/{config-CFMojMFK.d.mts → config-D44_8G9J.d.mts} +3 -1
  461. package/dist/config-D44_8G9J.d.mts.map +1 -0
  462. package/dist/{config-Bsm_u_oE.d.mts → config-sDhZvkLR.d.mts} +56 -20
  463. package/dist/config-sDhZvkLR.d.mts.map +1 -0
  464. package/dist/{content-DQSRZTVw.mjs → content-BKHUVsE5.mjs} +67 -30
  465. package/dist/content-BKHUVsE5.mjs.map +1 -0
  466. package/dist/{content-list-query-CYKcY6Vi.d.mts → content-list-query-ByP4jRpZ.d.mts} +1 -1
  467. package/dist/{content-list-query-CYKcY6Vi.d.mts.map → content-list-query-ByP4jRpZ.d.mts.map} +1 -1
  468. package/dist/{content-policy-Dm32n9C6.mjs → content-policy-BmE0MPZY.mjs} +1 -1
  469. package/dist/{content-policy-Dm32n9C6.mjs.map → content-policy-BmE0MPZY.mjs.map} +1 -1
  470. package/dist/{content-repair-DNh5--x5.mjs → content-repair-Ukdxoq-R.mjs} +4 -4
  471. package/dist/{content-repair-DNh5--x5.mjs.map → content-repair-Ukdxoq-R.mjs.map} +1 -1
  472. package/dist/{context-BYptmCN0.mjs → context-CzjejcsE.mjs} +32 -33
  473. package/dist/context-CzjejcsE.mjs.map +1 -0
  474. package/dist/{credits-B9iORdWB.mjs → credits-BKREepht.mjs} +3 -3
  475. package/dist/{credits-B9iORdWB.mjs.map → credits-BKREepht.mjs.map} +1 -1
  476. package/dist/{dashboard-D0jcgBD7.mjs → dashboard-ynr1qJWM.mjs} +10 -9
  477. package/dist/dashboard-ynr1qJWM.mjs.map +1 -0
  478. package/dist/database/migration-lock.mjs +1 -1
  479. package/dist/db/index.d.mts +3 -3
  480. package/dist/db/index.mjs +3 -3
  481. package/dist/db/libsql-migrations.d.mts +1 -1
  482. package/dist/db/libsql-migrations.mjs +5 -5
  483. package/dist/db/libsql.d.mts +1 -1
  484. package/dist/db/postgres-migrations.d.mts +1 -1
  485. package/dist/db/postgres-migrations.mjs +5 -5
  486. package/dist/db/postgres.d.mts +1 -1
  487. package/dist/db/sqlite-migrations.d.mts +1 -1
  488. package/dist/db/sqlite-migrations.mjs +5 -5
  489. package/dist/db/sqlite.d.mts +1 -1
  490. package/dist/{db-errors-CBD5yMro.mjs → db-errors-unnO6yiZ.mjs} +12 -2
  491. package/dist/db-errors-unnO6yiZ.mjs.map +1 -0
  492. package/dist/deferred-tasks-wlMFJL95.d.mts +10 -0
  493. package/dist/deferred-tasks-wlMFJL95.d.mts.map +1 -0
  494. package/dist/{destination-r2zIAZ2S.mjs → destination-DR3IHjmy.mjs} +1 -1
  495. package/dist/{destination-r2zIAZ2S.mjs.map → destination-DR3IHjmy.mjs.map} +1 -1
  496. package/dist/{device-flow-BkFKBoAn.mjs → device-flow-D1U392GC.mjs} +3 -5
  497. package/dist/device-flow-D1U392GC.mjs.map +1 -0
  498. package/dist/{dialect-helpers-7_IqPdh9.mjs → dialect-helpers-B1XN2HGB.mjs} +10 -3
  499. package/dist/dialect-helpers-B1XN2HGB.mjs.map +1 -0
  500. package/dist/{direct-executor-Cbxzg4qe.mjs → direct-executor-Bs2g0ake.mjs} +4 -4
  501. package/dist/{direct-executor-Cbxzg4qe.mjs.map → direct-executor-Bs2g0ake.mjs.map} +1 -1
  502. package/dist/{dist-Cfu8mMBs.mjs → dist-BUmWMTbN.mjs} +1 -1
  503. package/dist/{dist-Cfu8mMBs.mjs.map → dist-BUmWMTbN.mjs.map} +1 -1
  504. package/dist/{email-locale-BJ8DjTzZ.mjs → email-locale-Bs3HFdnq.mjs} +1 -1
  505. package/dist/{email-locale-BJ8DjTzZ.mjs.map → email-locale-Bs3HFdnq.mjs.map} +1 -1
  506. package/dist/{emdash-runtime-DVi7vtXC.mjs → emdash-runtime-C8T-pZpS.mjs} +108 -62
  507. package/dist/emdash-runtime-C8T-pZpS.mjs.map +1 -0
  508. package/dist/{enrich-Duu4sV3a.mjs → enrich-DFlfnd3u.mjs} +3 -3
  509. package/dist/{enrich-Duu4sV3a.mjs.map → enrich-DFlfnd3u.mjs.map} +1 -1
  510. package/dist/{entry-lock-C7VX0NGK.d.mts → entry-lock-BulbgPBX.d.mts} +23 -23
  511. package/dist/{entry-lock-C7VX0NGK.d.mts.map → entry-lock-BulbgPBX.d.mts.map} +1 -1
  512. package/dist/{entry-lock-Df6-XhIu.mjs → entry-lock-CRVmruM0.mjs} +4 -4
  513. package/dist/{entry-lock-Df6-XhIu.mjs.map → entry-lock-CRVmruM0.mjs.map} +1 -1
  514. package/dist/{entry-lock-DLxCffFW.mjs → entry-lock-D-zJQ4q6.mjs} +3 -3
  515. package/dist/{entry-lock-DLxCffFW.mjs.map → entry-lock-D-zJQ4q6.mjs.map} +1 -1
  516. package/dist/{entry-locks-DJAqVweV.mjs → entry-locks-CJ9uhqg1.mjs} +2 -2
  517. package/dist/{entry-locks-DJAqVweV.mjs.map → entry-locks-CJ9uhqg1.mjs.map} +1 -1
  518. package/dist/{env-types-C3FCVBWe.mjs → env-types-BE3bCvfP.mjs} +5 -5
  519. package/dist/{env-types-C3FCVBWe.mjs.map → env-types-BE3bCvfP.mjs.map} +1 -1
  520. package/dist/{error-CVWeIOku.mjs → error-BCMgPxdn.mjs} +3 -3
  521. package/dist/{error-CVWeIOku.mjs.map → error-BCMgPxdn.mjs.map} +1 -1
  522. package/dist/{errors-BOYNdIo3.mjs → errors-8gJqv-XV.mjs} +15 -2
  523. package/dist/{errors-BOYNdIo3.mjs.map → errors-8gJqv-XV.mjs.map} +1 -1
  524. package/dist/{fence-C3MUitUN.mjs → fence-Dagicj14.mjs} +4 -4
  525. package/dist/{fence-C3MUitUN.mjs.map → fence-Dagicj14.mjs.map} +1 -1
  526. package/dist/{field-map-Bft9LKak.mjs → field-map-BSXdNGt5.mjs} +11 -10
  527. package/dist/field-map-BSXdNGt5.mjs.map +1 -0
  528. package/dist/{focal-point-JX8kcOTQ.mjs → focal-point-CgCcr1Ca.mjs} +1 -1
  529. package/dist/{focal-point-JX8kcOTQ.mjs.map → focal-point-CgCcr1Ca.mjs.map} +1 -1
  530. package/dist/{fts-manager-Beg3e4bI.mjs → fts-manager-6861qcwk.mjs} +68 -22
  531. package/dist/fts-manager-6861qcwk.mjs.map +1 -0
  532. package/dist/{gc-ByyAYiYE.mjs → gc-CNkXB3mE.mjs} +8 -8
  533. package/dist/{gc-ByyAYiYE.mjs.map → gc-CNkXB3mE.mjs.map} +1 -1
  534. package/dist/{hook-result-BrdLyOdI.d.mts → hook-result-f8t7hIuu.d.mts} +1 -1
  535. package/dist/{hook-result-BrdLyOdI.d.mts.map → hook-result-f8t7hIuu.d.mts.map} +1 -1
  536. package/dist/{hreflang-CY_F5OjF.d.mts → hreflang-8dUOJAPJ.d.mts} +2 -2
  537. package/dist/{hreflang-CY_F5OjF.d.mts.map → hreflang-8dUOJAPJ.d.mts.map} +1 -1
  538. package/dist/{hreflang-C8Jb-hrf.mjs → hreflang-BW5A4FLK.mjs} +8 -8
  539. package/dist/{hreflang-C8Jb-hrf.mjs.map → hreflang-BW5A4FLK.mjs.map} +1 -1
  540. package/dist/{http-route-dispatch-CyeW6iPv.mjs → http-route-dispatch-rXKvTNm9.mjs} +5 -5
  541. package/dist/{http-route-dispatch-CyeW6iPv.mjs.map → http-route-dispatch-rXKvTNm9.mjs.map} +1 -1
  542. package/dist/{identity-Cael5uTT.mjs → identity-CPRRSovU.mjs} +3 -3
  543. package/dist/{identity-Cael5uTT.mjs.map → identity-CPRRSovU.mjs.map} +1 -1
  544. package/dist/{import-BUXjdZUn.mjs → import-yVbfPyfd.mjs} +5 -5
  545. package/dist/{import-BUXjdZUn.mjs.map → import-yVbfPyfd.mjs.map} +1 -1
  546. package/dist/index-VM7Fzxwe.d.mts +260 -0
  547. package/dist/index-VM7Fzxwe.d.mts.map +1 -0
  548. package/dist/index.d.mts +25 -24
  549. package/dist/index.mjs +89 -88
  550. package/dist/{install-finalization-3JX5qQEA.mjs → install-finalization-RU6VrHOX.mjs} +1 -1
  551. package/dist/{install-finalization-3JX5qQEA.mjs.map → install-finalization-RU6VrHOX.mjs.map} +1 -1
  552. package/dist/{json-recordset-BUjxhr77.mjs → json-recordset-D0WhN2UA.mjs} +2 -2
  553. package/dist/{json-recordset-BUjxhr77.mjs.map → json-recordset-D0WhN2UA.mjs.map} +1 -1
  554. package/dist/{lifecycle-7vUJeFRe.mjs → lifecycle-B8d7Rdqx.mjs} +1 -1
  555. package/dist/{lifecycle-7vUJeFRe.mjs.map → lifecycle-B8d7Rdqx.mjs.map} +1 -1
  556. package/dist/{load-CdAG9wz-.mjs → load-D4xtzm6h.mjs} +2 -2
  557. package/dist/{load-CdAG9wz-.mjs.map → load-D4xtzm6h.mjs.map} +1 -1
  558. package/dist/{loader-CswroUbe.mjs → loader-DhnedqY4.mjs} +199 -101
  559. package/dist/loader-DhnedqY4.mjs.map +1 -0
  560. package/dist/{loops-uA4iTOzd.mjs → loops-B2YS-Zzr.mjs} +2 -2
  561. package/dist/{loops-uA4iTOzd.mjs.map → loops-B2YS-Zzr.mjs.map} +1 -1
  562. package/dist/{manifest-builder-B8zjuH3f.mjs → manifest-builder-g1FLviel.mjs} +10 -3
  563. package/dist/manifest-builder-g1FLviel.mjs.map +1 -0
  564. package/dist/media/image-endpoint.d.mts +3 -2
  565. package/dist/media/image-endpoint.d.mts.map +1 -1
  566. package/dist/media/image-endpoint.mjs +17 -8
  567. package/dist/media/image-endpoint.mjs.map +1 -1
  568. package/dist/media/index.d.mts +1 -1
  569. package/dist/media/index.mjs +7 -6
  570. package/dist/media/index.mjs.map +1 -1
  571. package/dist/media/local-runtime.d.mts +15 -14
  572. package/dist/media/local-runtime.d.mts.map +1 -1
  573. package/dist/media/local-runtime.mjs +20 -15
  574. package/dist/media/local-runtime.mjs.map +1 -1
  575. package/dist/{media-1WC65OCB.mjs → media-BR4_t-Wd.mjs} +3 -3
  576. package/dist/{media-1WC65OCB.mjs.map → media-BR4_t-Wd.mjs.map} +1 -1
  577. package/dist/{media--dJRU6i2.mjs → media-CikS-q6E.mjs} +4 -4
  578. package/dist/{media--dJRU6i2.mjs.map → media-CikS-q6E.mjs.map} +1 -1
  579. package/dist/{media-Bws9f18T.mjs → media-DepNLhPq.mjs} +14 -4
  580. package/dist/media-DepNLhPq.mjs.map +1 -0
  581. package/dist/{media-allowlist-BJB7MFx6.mjs → media-allowlist-BMBLqyWh.mjs} +2 -2
  582. package/dist/{media-allowlist-BJB7MFx6.mjs.map → media-allowlist-BMBLqyWh.mjs.map} +1 -1
  583. package/dist/{media-folders-Dn3C16B8.mjs → media-folders-CI0Wydfo.mjs} +2 -2
  584. package/dist/{media-folders-Dn3C16B8.mjs.map → media-folders-CI0Wydfo.mjs.map} +1 -1
  585. package/dist/{media-usage-CF0WVcLO.mjs → media-usage-X1_20MY-.mjs} +8 -8
  586. package/dist/{media-usage-CF0WVcLO.mjs.map → media-usage-X1_20MY-.mjs.map} +1 -1
  587. package/dist/{media-usage-activation-C9HwVw5w.mjs → media-usage-activation-bWusy3M2.mjs} +3 -3
  588. package/dist/{media-usage-activation-C9HwVw5w.mjs.map → media-usage-activation-bWusy3M2.mjs.map} +1 -1
  589. package/dist/{media-usage-work-m3AWTmmC.mjs → media-usage-work-B2RaoJIa.mjs} +4 -4
  590. package/dist/{media-usage-work-m3AWTmmC.mjs.map → media-usage-work-B2RaoJIa.mjs.map} +1 -1
  591. package/dist/{media-usage-work-CkLa5-nc.mjs → media-usage-work-BCK2J-v_.mjs} +7 -7
  592. package/dist/{media-usage-work-CkLa5-nc.mjs.map → media-usage-work-BCK2J-v_.mjs.map} +1 -1
  593. package/dist/{menus-BCVSSp1z.mjs → menus-B0Qqv_cS.mjs} +176 -92
  594. package/dist/menus-B0Qqv_cS.mjs.map +1 -0
  595. package/dist/{menus-Cl4kwdt7.mjs → menus-oypxT1pI.mjs} +134 -53
  596. package/dist/menus-oypxT1pI.mjs.map +1 -0
  597. package/dist/{menus-BSzwObhV.mjs → menus-uEAxWAm1.mjs} +3 -3
  598. package/dist/{menus-BSzwObhV.mjs.map → menus-uEAxWAm1.mjs.map} +1 -1
  599. package/dist/migrations/index.d.mts +1 -1
  600. package/dist/migrations/index.mjs +5 -5
  601. package/dist/{mime-B5M9R53H.mjs → mime-D1We9jUx.mjs} +1 -1
  602. package/dist/{mime-B5M9R53H.mjs.map → mime-D1We9jUx.mjs.map} +1 -1
  603. package/dist/{normalize-BuWa0lvd.mjs → normalize-Cx-bNwhP.mjs} +41 -12
  604. package/dist/normalize-Cx-bNwhP.mjs.map +1 -0
  605. package/dist/{oauth-authorization-TpEJrYB7.mjs → oauth-authorization-CPLgBrdo.mjs} +19 -6
  606. package/dist/oauth-authorization-CPLgBrdo.mjs.map +1 -0
  607. package/dist/{oauth-state-store-CHMn_mwc.mjs → oauth-state-store-BndCfRum.mjs} +1 -1
  608. package/dist/{oauth-state-store-CHMn_mwc.mjs.map → oauth-state-store-BndCfRum.mjs.map} +1 -1
  609. package/dist/object-cache/memory.d.mts +1 -1
  610. package/dist/{object-cache-Bo6DGaC9.mjs → object-cache-DmKr09La.mjs} +21 -4
  611. package/dist/{object-cache-Bo6DGaC9.mjs.map → object-cache-DmKr09La.mjs.map} +1 -1
  612. package/dist/{options-DJWaq3Ie.d.mts → options-BUUgroHg.d.mts} +3 -3
  613. package/dist/{options-DJWaq3Ie.d.mts.map → options-BUUgroHg.d.mts.map} +1 -1
  614. package/dist/page/index.d.mts +2 -2
  615. package/dist/page/index.mjs +16 -14
  616. package/dist/page/index.mjs.map +1 -1
  617. package/dist/{parse-DgQ2NABT.mjs → parse-B_b6gZxG.mjs} +2 -2
  618. package/dist/{parse-DgQ2NABT.mjs.map → parse-B_b6gZxG.mjs.map} +1 -1
  619. package/dist/{parse-CWHOFc6z.d.mts → parse-Dndx1QmN.d.mts} +3 -3
  620. package/dist/{parse-CWHOFc6z.d.mts.map → parse-Dndx1QmN.d.mts.map} +1 -1
  621. package/dist/{passkey-config-D0kdzEao.mjs → passkey-config-D2Lua5__.mjs} +1 -1
  622. package/dist/{passkey-config-D0kdzEao.mjs.map → passkey-config-D2Lua5__.mjs.map} +1 -1
  623. package/dist/{patterns-CMNnYCgf.mjs → patterns-CryGz_EV.mjs} +1 -1
  624. package/dist/{patterns-CMNnYCgf.mjs.map → patterns-CryGz_EV.mjs.map} +1 -1
  625. package/dist/{placeholder-D41vk11_.d.mts → placeholder-CSKu5OkD.d.mts} +9 -1
  626. package/dist/placeholder-CSKu5OkD.d.mts.map +1 -0
  627. package/dist/plugin-test-runtime.d.mts +17 -15
  628. package/dist/plugin-test-runtime.d.mts.map +1 -1
  629. package/dist/plugin-test-runtime.mjs +99 -98
  630. package/dist/plugin-types.d.mts +2 -2
  631. package/dist/plugin-utils.d.mts +13 -12
  632. package/dist/plugin-utils.d.mts.map +1 -1
  633. package/dist/plugins/adapt-sandbox-entry.d.mts +13 -12
  634. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  635. package/dist/plugins/host.d.mts +5 -5
  636. package/dist/plugins/host.mjs +48 -47
  637. package/dist/{policy-DLQ--Hnm.mjs → policy-BPugqmeV.mjs} +13 -5
  638. package/dist/policy-BPugqmeV.mjs.map +1 -0
  639. package/dist/{protocol-79kUO7jP.d.mts → protocol-PoAfD_9W.d.mts} +2 -2
  640. package/dist/{protocol-79kUO7jP.d.mts.map → protocol-PoAfD_9W.d.mts.map} +1 -1
  641. package/dist/{public-plugin-api-routes-BuAMJ8nN.mjs → public-plugin-api-routes-CMljrTby.mjs} +9 -9
  642. package/dist/{public-plugin-api-routes-BuAMJ8nN.mjs.map → public-plugin-api-routes-CMljrTby.mjs.map} +1 -1
  643. package/dist/{public-submission-Di3TsgzX.mjs → public-submission-ayqoyee4.mjs} +10 -10
  644. package/dist/{public-submission-Di3TsgzX.mjs.map → public-submission-ayqoyee4.mjs.map} +1 -1
  645. package/dist/query-BFHjCzSh.mjs +37 -0
  646. package/dist/query-BFHjCzSh.mjs.map +1 -0
  647. package/dist/{query-CpnRlBh8.mjs → query-D62NntCZ.mjs} +55 -65
  648. package/dist/query-D62NntCZ.mjs.map +1 -0
  649. package/dist/{query-haKvLAWl.mjs → query-LmPY2y0C.mjs} +5 -5
  650. package/dist/{query-haKvLAWl.mjs.map → query-LmPY2y0C.mjs.map} +1 -1
  651. package/dist/{rate-limit-Xp4d0NBY.mjs → rate-limit-C04Llsoc.mjs} +3 -3
  652. package/dist/{rate-limit-Xp4d0NBY.mjs.map → rate-limit-C04Llsoc.mjs.map} +1 -1
  653. package/dist/{redirect-DiS_3mA4.mjs → redirect-DjLdw427.mjs} +6 -6
  654. package/dist/{redirect-DiS_3mA4.mjs.map → redirect-DjLdw427.mjs.map} +1 -1
  655. package/dist/{redirect-paths-CNYq7w80.mjs → redirect-paths-DOaVBp6E.mjs} +1 -1
  656. package/dist/{redirect-paths-CNYq7w80.mjs.map → redirect-paths-DOaVBp6E.mjs.map} +1 -1
  657. package/dist/{redirects-BHpy-VsZ.mjs → redirects-Cpq1catN.mjs} +6 -6
  658. package/dist/{redirects-BHpy-VsZ.mjs.map → redirects-Cpq1catN.mjs.map} +1 -1
  659. package/dist/{redirects-BEVSRMa2.mjs → redirects-CyvvZrCJ.mjs} +2 -2
  660. package/dist/{redirects-BEVSRMa2.mjs.map → redirects-CyvvZrCJ.mjs.map} +1 -1
  661. package/dist/{registry-TUVaid9Z.mjs → registry-B0-O575m.mjs} +25 -20
  662. package/dist/registry-B0-O575m.mjs.map +1 -0
  663. package/dist/{relations-CA_QuMTU.mjs → relations-WIOojTL4.mjs} +24 -11
  664. package/dist/relations-WIOojTL4.mjs.map +1 -0
  665. package/dist/{request-cache-C4CIo5ad.mjs → request-cache-5z2WzWmh.mjs} +1 -1
  666. package/dist/{request-cache-C4CIo5ad.mjs.map → request-cache-5z2WzWmh.mjs.map} +1 -1
  667. package/dist/request-context.d.mts +12 -1
  668. package/dist/request-context.d.mts.map +1 -1
  669. package/dist/request-context.mjs.map +1 -1
  670. package/dist/{resolve-DwNM-CXl.mjs → resolve-BNnm8EkB.mjs} +14 -13
  671. package/dist/{resolve-DwNM-CXl.mjs.map → resolve-BNnm8EkB.mjs.map} +1 -1
  672. package/dist/{resolve-D-kqyKns.mjs → resolve-DdNXBJSr.mjs} +4 -4
  673. package/dist/resolve-DdNXBJSr.mjs.map +1 -0
  674. package/dist/{revision-BVp8S0e_.mjs → revision-Dx7Uth1X.mjs} +5 -5
  675. package/dist/{revision-BVp8S0e_.mjs.map → revision-Dx7Uth1X.mjs.map} +1 -1
  676. package/dist/{routes-BerZFrvV.mjs → routes-avqgc-8r.mjs} +3 -3
  677. package/dist/{routes-BerZFrvV.mjs.map → routes-avqgc-8r.mjs.map} +1 -1
  678. package/dist/{runner-C5NeAkBQ.mjs → runner-Bkkfk4O8.mjs} +78 -4
  679. package/dist/runner-Bkkfk4O8.mjs.map +1 -0
  680. package/dist/{runner-BObHz5FC.d.mts → runner-Dfgp6-S_.d.mts} +7 -2
  681. package/dist/runner-Dfgp6-S_.d.mts.map +1 -0
  682. package/dist/runtime.d.mts +14 -13
  683. package/dist/runtime.d.mts.map +1 -1
  684. package/dist/runtime.mjs +8 -6
  685. package/dist/runtime.mjs.map +1 -1
  686. package/dist/schema/project-env-types.mjs +43 -42
  687. package/dist/schema/project-env-types.mjs.map +1 -1
  688. package/dist/{schema-DJRfvM_o.mjs → schema-B-3rntlX.mjs} +11 -11
  689. package/dist/{schema-DJRfvM_o.mjs.map → schema-B-3rntlX.mjs.map} +1 -1
  690. package/dist/{schema-C4OBuv6Z.mjs → schema-BqBlUZtb.mjs} +4 -4
  691. package/dist/{schema-C4OBuv6Z.mjs.map → schema-BqBlUZtb.mjs.map} +1 -1
  692. package/dist/{scopes-BU03K7Uo.mjs → scopes-DNaY7Ey0.mjs} +3 -3
  693. package/dist/{scopes-BU03K7Uo.mjs.map → scopes-DNaY7Ey0.mjs.map} +1 -1
  694. package/dist/{search-DfVzks89.mjs → search-BPWTnpnD.mjs} +32 -32
  695. package/dist/search-BPWTnpnD.mjs.map +1 -0
  696. package/dist/{secrets-Cc_O3Kp-.mjs → secrets-Dswzrz3k.mjs} +2 -2
  697. package/dist/{secrets-Cc_O3Kp-.mjs.map → secrets-Dswzrz3k.mjs.map} +1 -1
  698. package/dist/{sections-BMy4JVUz.mjs → sections-rSao6rBG.mjs} +3 -3
  699. package/dist/{sections-BMy4JVUz.mjs.map → sections-rSao6rBG.mjs.map} +1 -1
  700. package/dist/seed/index.d.mts +2 -2
  701. package/dist/seed/index.mjs +42 -41
  702. package/dist/seo/index.d.mts +3 -3
  703. package/dist/seo/index.mjs +30 -28
  704. package/dist/seo/index.mjs.map +1 -1
  705. package/dist/{seo-VZYOEy8f.mjs → seo-B_H_pqOd.mjs} +3 -3
  706. package/dist/{seo-VZYOEy8f.mjs.map → seo-B_H_pqOd.mjs.map} +1 -1
  707. package/dist/{service-Bo_usgSk.mjs → service-DpiUQVpp.mjs} +2 -2
  708. package/dist/{service-Bo_usgSk.mjs.map → service-DpiUQVpp.mjs.map} +1 -1
  709. package/dist/{session-user-DlpPdf8L.mjs → session-user-DiE4JKPP.mjs} +4 -4
  710. package/dist/{session-user-DlpPdf8L.mjs.map → session-user-DiE4JKPP.mjs.map} +1 -1
  711. package/dist/{settings-DS914jjE.mjs → settings--XlUdUaI.mjs} +3 -3
  712. package/dist/{settings-DS914jjE.mjs.map → settings--XlUdUaI.mjs.map} +1 -1
  713. package/dist/{settings-CWb84sDm.mjs → settings-D932YP2-.mjs} +111 -44
  714. package/dist/settings-D932YP2-.mjs.map +1 -0
  715. package/dist/{setup-complete-BuNxAUiN.mjs → setup-complete-qsJYWutC.mjs} +2 -2
  716. package/dist/{setup-complete-BuNxAUiN.mjs.map → setup-complete-qsJYWutC.mjs.map} +1 -1
  717. package/dist/{setup-nonce-BnEAX0iy.mjs → setup-nonce-CBFgUFXw.mjs} +1 -1
  718. package/dist/{setup-nonce-BnEAX0iy.mjs.map → setup-nonce-CBFgUFXw.mjs.map} +1 -1
  719. package/dist/{site-domain-Bq5j5bVg.mjs → site-domain-oRGS_JfA.mjs} +2 -2
  720. package/dist/{site-domain-Bq5j5bVg.mjs.map → site-domain-oRGS_JfA.mjs.map} +1 -1
  721. package/dist/{sitemap-name-BTg2NJJv.mjs → sitemap-name-B8QP8wud.mjs} +1 -1
  722. package/dist/{sitemap-name-BTg2NJJv.mjs.map → sitemap-name-B8QP8wud.mjs.map} +1 -1
  723. package/dist/{slugify-bu2-jKia.mjs → slugify-BDEG9pLk.mjs} +1 -1
  724. package/dist/{slugify-bu2-jKia.mjs.map → slugify-BDEG9pLk.mjs.map} +1 -1
  725. package/dist/{snapshot-DYsG4uOq.mjs → snapshot-BjaXDZQ5.mjs} +2 -2
  726. package/dist/{snapshot-DYsG4uOq.mjs.map → snapshot-BjaXDZQ5.mjs.map} +1 -1
  727. package/dist/{stage-D8DWgPcO.mjs → stage-CZQnXM_G.mjs} +3 -3
  728. package/dist/{stage-D8DWgPcO.mjs.map → stage-CZQnXM_G.mjs.map} +1 -1
  729. package/dist/{staged-CD_imitH.mjs → staged-ByBmPFtX.mjs} +3 -3
  730. package/dist/{staged-CD_imitH.mjs.map → staged-ByBmPFtX.mjs.map} +1 -1
  731. package/dist/storage/local.d.mts +1 -1
  732. package/dist/storage/s3.d.mts +1 -1
  733. package/dist/{storage-query-DRyu3bSU.d.mts → storage-query-BFp06Y0s.d.mts} +22 -10
  734. package/dist/storage-query-BFp06Y0s.d.mts.map +1 -0
  735. package/dist/{taxonomies-Dd9JJv_a.mjs → taxonomies-5SR76j11.mjs} +15 -17
  736. package/dist/taxonomies-5SR76j11.mjs.map +1 -0
  737. package/dist/{taxonomies-ChnU7Mc8.mjs → taxonomies-B__VmCKQ.mjs} +64 -58
  738. package/dist/taxonomies-B__VmCKQ.mjs.map +1 -0
  739. package/dist/{taxonomy-C_C_LBAU.mjs → taxonomy-CMI5fczd.mjs} +30 -17
  740. package/dist/taxonomy-CMI5fczd.mjs.map +1 -0
  741. package/dist/{transaction-BVYIo_yu.mjs → transaction-CkoQ5wqQ.mjs} +1 -1
  742. package/dist/{transaction-BVYIo_yu.mjs.map → transaction-CkoQ5wqQ.mjs.map} +1 -1
  743. package/dist/{transfer-WmWiR3xf.mjs → transfer-BbKfufJ4.mjs} +2 -2
  744. package/dist/{transfer-WmWiR3xf.mjs.map → transfer-BbKfufJ4.mjs.map} +1 -1
  745. package/dist/{transfer-ClH6w6BV.mjs → transfer-DTGblAj2.mjs} +71 -34
  746. package/dist/{transfer-ClH6w6BV.mjs.map → transfer-DTGblAj2.mjs.map} +1 -1
  747. package/dist/{transfer-download--ofRj9Cw.mjs → transfer-download-D9LQEDX0.mjs} +1 -1
  748. package/dist/{transfer-download--ofRj9Cw.mjs.map → transfer-download-D9LQEDX0.mjs.map} +1 -1
  749. package/dist/{transport-DxiXnbXk.d.mts → transport-Dm5QzpT_.d.mts} +1 -1
  750. package/dist/{transport-DxiXnbXk.d.mts.map → transport-Dm5QzpT_.d.mts.map} +1 -1
  751. package/dist/{transport-BjbqNiPI.mjs → transport-Dzpn5b3i.mjs} +4 -3
  752. package/dist/transport-Dzpn5b3i.mjs.map +1 -0
  753. package/dist/{turnstile-CJwvsOqw.mjs → turnstile-Cs2wfkJG.mjs} +1 -1
  754. package/dist/{turnstile-CJwvsOqw.mjs.map → turnstile-Cs2wfkJG.mjs.map} +1 -1
  755. package/dist/{types-BA3ey2QH.d.mts → types-BAsCk5KU.d.mts} +1 -1
  756. package/dist/{types-BA3ey2QH.d.mts.map → types-BAsCk5KU.d.mts.map} +1 -1
  757. package/dist/{types-RLgeIpnF.d.mts → types-BuvSwT9Y.d.mts} +8 -7
  758. package/dist/{types-RLgeIpnF.d.mts.map → types-BuvSwT9Y.d.mts.map} +1 -1
  759. package/dist/{types-CNB-dj6F.d.mts → types-C4KT3Md2.d.mts} +10 -6
  760. package/dist/types-C4KT3Md2.d.mts.map +1 -0
  761. package/dist/{types-DvqVxZXa.d.mts → types-CVXHwIBB.d.mts} +1 -1
  762. package/dist/{types-DvqVxZXa.d.mts.map → types-CVXHwIBB.d.mts.map} +1 -1
  763. package/dist/{types-BGmQ0uXs.mjs → types-C_asjp1J.mjs} +1 -1
  764. package/dist/types-C_asjp1J.mjs.map +1 -0
  765. package/dist/{types-DHO7Pd25.d.mts → types-CadaL_k8.d.mts} +1 -1
  766. package/dist/{types-DHO7Pd25.d.mts.map → types-CadaL_k8.d.mts.map} +1 -1
  767. package/dist/{types-QoPHm-2w.d.mts → types-CjftrmZR.d.mts} +3 -3
  768. package/dist/{types-QoPHm-2w.d.mts.map → types-CjftrmZR.d.mts.map} +1 -1
  769. package/dist/{types-DCFavOii.d.mts → types-DKwRUA-x.d.mts} +1 -1
  770. package/dist/{types-DCFavOii.d.mts.map → types-DKwRUA-x.d.mts.map} +1 -1
  771. package/dist/{types-D2NEXtgB.mjs → types-DwhEvIVb.mjs} +8 -2
  772. package/dist/types-DwhEvIVb.mjs.map +1 -0
  773. package/dist/{types-Bwpzb5o6.d.mts → types-GwAyS5SH.d.mts} +1 -1
  774. package/dist/{types-Bwpzb5o6.d.mts.map → types-GwAyS5SH.d.mts.map} +1 -1
  775. package/dist/{types-slSqujQL.d.mts → types-uU2YNYSt.d.mts} +6 -1
  776. package/dist/types-uU2YNYSt.d.mts.map +1 -0
  777. package/dist/{update-check-BxNg9T6N.mjs → update-check-ABBJgg6M.mjs} +4 -4
  778. package/dist/{update-check-BxNg9T6N.mjs.map → update-check-ABBJgg6M.mjs.map} +1 -1
  779. package/dist/{url-Dn3IStq8.mjs → url-DTfGDJhI.mjs} +1 -1
  780. package/dist/{url-Dn3IStq8.mjs.map → url-DTfGDJhI.mjs.map} +1 -1
  781. package/dist/{user-BlCTKVAm.mjs → user-By8SzQxS.mjs} +3 -3
  782. package/dist/{user-BlCTKVAm.mjs.map → user-By8SzQxS.mjs.map} +1 -1
  783. package/dist/{utils-TPt7w2cS.mjs → utils-D5uOi6WS.mjs} +13 -5
  784. package/dist/utils-D5uOi6WS.mjs.map +1 -0
  785. package/dist/{index-BB9sVisO.d.mts → utils-Szp4iBQB.d.mts} +9 -256
  786. package/dist/utils-Szp4iBQB.d.mts.map +1 -0
  787. package/dist/{validate-emKxGC5F.d.mts → validate-DDvxy6qG.d.mts} +8 -8
  788. package/dist/{validate-emKxGC5F.d.mts.map → validate-DDvxy6qG.d.mts.map} +1 -1
  789. package/dist/{validate-DxYhJQA-.mjs → validate-Dz-TIOFB.mjs} +7 -7
  790. package/dist/{validate-DxYhJQA-.mjs.map → validate-Dz-TIOFB.mjs.map} +1 -1
  791. package/dist/{validation-Ckq4vsVg.mjs → validation-Fc9ZSUS_.mjs} +17 -16
  792. package/dist/{validation-Ckq4vsVg.mjs.map → validation-Fc9ZSUS_.mjs.map} +1 -1
  793. package/dist/version-Bu6Nlbb5.mjs +7 -0
  794. package/dist/{version-DHmGpcch.mjs.map → version-Bu6Nlbb5.mjs.map} +1 -1
  795. package/dist/version-DqB7LIO7.mjs +49 -0
  796. package/dist/version-DqB7LIO7.mjs.map +1 -0
  797. package/dist/{widgets-DA5XmvVC.mjs → widgets-BUx_Mf2q.mjs} +18 -5
  798. package/dist/widgets-BUx_Mf2q.mjs.map +1 -0
  799. package/dist/{wxr-taxonomies-RgRG0d5e.mjs → wxr-taxonomies-DbJtWrWM.mjs} +7 -6
  800. package/dist/wxr-taxonomies-DbJtWrWM.mjs.map +1 -0
  801. package/dist/{wxr-taxonomies-CrMonejI.d.mts → wxr-taxonomies-Dy2i2ON3.d.mts} +1 -1
  802. package/dist/wxr-taxonomies-Dy2i2ON3.d.mts.map +1 -0
  803. package/dist/{zod-generator-D0JKy94C.mjs → zod-generator--nlM0930.mjs} +5 -4
  804. package/dist/zod-generator--nlM0930.mjs.map +1 -0
  805. package/package.json +5 -5
  806. package/src/api/handlers/bulk-tag.ts +11 -3
  807. package/src/api/handlers/bylines.ts +6 -2
  808. package/src/api/handlers/content.ts +154 -23
  809. package/src/api/handlers/dashboard.ts +13 -6
  810. package/src/api/handlers/device-flow.ts +1 -3
  811. package/src/api/handlers/menus.ts +27 -13
  812. package/src/api/handlers/oauth-authorization.ts +1 -3
  813. package/src/api/handlers/relations.ts +15 -1
  814. package/src/api/handlers/taxonomies.ts +27 -17
  815. package/src/astro/image-endpoint.ts +23 -2
  816. package/src/astro/integration/admin-nav.ts +52 -0
  817. package/src/astro/integration/index.ts +7 -0
  818. package/src/astro/integration/runtime.ts +14 -0
  819. package/src/astro/integration/shims/use-sync-external-store-with-selector.js +2 -0
  820. package/src/astro/integration/shims/use-sync-external-store.js +4 -1
  821. package/src/astro/integration/vite-config.ts +16 -8
  822. package/src/astro/middleware/auth.ts +9 -2
  823. package/src/astro/middleware/redirect.ts +158 -63
  824. package/src/astro/middleware/request-context.ts +1 -0
  825. package/src/astro/middleware.ts +17 -4
  826. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +4 -1
  827. package/src/astro/routes/api/content/[collection]/[id]/translations.ts +14 -1
  828. package/src/astro/routes/api/dashboard.ts +2 -0
  829. package/src/astro/routes/api/import/wordpress/analyze.ts +5 -29
  830. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +3 -3
  831. package/src/astro/routes/api/media/file/[...key].ts +31 -7
  832. package/src/astro/routes/api/oauth/token.ts +5 -1
  833. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +7 -1
  834. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +3 -1
  835. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +2 -1
  836. package/src/astro/routes/api/widget-areas/[name].ts +2 -1
  837. package/src/astro/routes/api/widget-areas/index.ts +2 -1
  838. package/src/astro/types.ts +4 -3
  839. package/src/auth/api-tokens.ts +3 -0
  840. package/src/auth/types.ts +6 -0
  841. package/src/cleanup.ts +44 -0
  842. package/src/cli/commands/export-seed.ts +6 -4
  843. package/src/cli/commands/login.ts +2 -4
  844. package/src/client/index.ts +1 -0
  845. package/src/client/transport.ts +11 -7
  846. package/src/components/EmDashImage.astro +14 -2
  847. package/src/components/InlinePortableTextEditor.tsx +4 -1
  848. package/src/components/inline-bubble-menu.tsx +109 -95
  849. package/src/components/inline-image.tsx +54 -48
  850. package/src/database/dialect-helpers.ts +10 -3
  851. package/src/database/migrations/content-sized.ts +82 -0
  852. package/src/database/migrations/policy.ts +28 -2
  853. package/src/database/migrations/runner.ts +48 -0
  854. package/src/database/repositories/byline.ts +95 -31
  855. package/src/database/repositories/comment.ts +17 -7
  856. package/src/database/repositories/content.ts +96 -23
  857. package/src/database/repositories/media.ts +17 -0
  858. package/src/database/repositories/menu.ts +236 -139
  859. package/src/database/repositories/taxonomy-def.ts +9 -2
  860. package/src/database/repositories/taxonomy.ts +47 -14
  861. package/src/database/repositories/types.ts +14 -3
  862. package/src/database/types.ts +1 -1
  863. package/src/emdash-runtime.ts +60 -17
  864. package/src/fields/image.ts +1 -0
  865. package/src/i18n/config.ts +58 -10
  866. package/src/i18n/normalize.ts +16 -2
  867. package/src/i18n/query.ts +47 -0
  868. package/src/i18n/resolve.ts +8 -3
  869. package/src/import/utils.ts +15 -2
  870. package/src/import/wxr-taxonomies.ts +3 -2
  871. package/src/index.ts +1 -0
  872. package/src/loader.ts +183 -114
  873. package/src/mcp/server.ts +28 -1
  874. package/src/media/caption.ts +30 -0
  875. package/src/media/content-disposition.ts +56 -0
  876. package/src/media/image-endpoint.ts +13 -6
  877. package/src/media/local-runtime.ts +3 -0
  878. package/src/media/normalize.ts +17 -8
  879. package/src/media/responsive.ts +12 -2
  880. package/src/media/types.ts +16 -3
  881. package/src/media/usage/content-fields.ts +2 -1
  882. package/src/menus/index.ts +158 -36
  883. package/src/migrations/manifest.ts +1 -0
  884. package/src/object-cache/index.ts +22 -0
  885. package/src/plugin-test-runtime.ts +1 -0
  886. package/src/plugins/byline-access.ts +3 -1
  887. package/src/plugins/context.ts +1 -2
  888. package/src/plugins/storage-indexes.ts +7 -3
  889. package/src/query.ts +67 -53
  890. package/src/redirects/artifacts.ts +39 -5
  891. package/src/references/field-map.ts +6 -4
  892. package/src/request-context.ts +8 -0
  893. package/src/schema/collection-slugs-cache.ts +31 -17
  894. package/src/schema/registry.ts +9 -0
  895. package/src/schema/types.ts +7 -6
  896. package/src/schema/zod-generator.ts +2 -1
  897. package/src/search/fts-manager.ts +103 -31
  898. package/src/search/query.ts +31 -64
  899. package/src/seed/apply.ts +221 -109
  900. package/src/seed/types.ts +6 -4
  901. package/src/settings/index.ts +135 -35
  902. package/src/settings/version.ts +54 -0
  903. package/src/taxonomies/index.ts +99 -85
  904. package/src/taxonomies/term-counts.ts +2 -1
  905. package/src/transfer/import/advance.ts +12 -1
  906. package/src/transfer/import/scaffold.ts +7 -1
  907. package/src/transfer/import/stages.ts +53 -2
  908. package/src/utils/db-errors.ts +15 -0
  909. package/src/utils/revalidating-cache.ts +85 -0
  910. package/src/virtual-modules.d.ts +1 -0
  911. package/src/visual-editing/toolbar.ts +7 -2
  912. package/src/widgets/index.ts +27 -13
  913. package/dist/api-D-7BNHoz.mjs.map +0 -1
  914. package/dist/api-tokens-CdP49zVF.mjs +0 -3
  915. package/dist/apply-T7ATgzCh.mjs.map +0 -1
  916. package/dist/artifacts-htGyfCSt.mjs.map +0 -1
  917. package/dist/byline-BR1qhyiw.mjs.map +0 -1
  918. package/dist/bylines-CVOvRUL7.mjs.map +0 -1
  919. package/dist/collection-slugs-cache-e09QeJQt.mjs.map +0 -1
  920. package/dist/comment-UvIWDKcW.mjs.map +0 -1
  921. package/dist/config-Bsm_u_oE.d.mts.map +0 -1
  922. package/dist/config-CFMojMFK.d.mts.map +0 -1
  923. package/dist/config-CvmjJcVw.mjs +0 -73
  924. package/dist/config-CvmjJcVw.mjs.map +0 -1
  925. package/dist/content-DQSRZTVw.mjs.map +0 -1
  926. package/dist/context-BYptmCN0.mjs.map +0 -1
  927. package/dist/dashboard-D0jcgBD7.mjs.map +0 -1
  928. package/dist/db-errors-CBD5yMro.mjs.map +0 -1
  929. package/dist/deferred-tasks-ZvUECSzI.d.mts +0 -9
  930. package/dist/deferred-tasks-ZvUECSzI.d.mts.map +0 -1
  931. package/dist/device-flow-BkFKBoAn.mjs.map +0 -1
  932. package/dist/dialect-helpers-7_IqPdh9.mjs.map +0 -1
  933. package/dist/emdash-runtime-DVi7vtXC.mjs.map +0 -1
  934. package/dist/field-defs-cache-Dez5iWJJ.mjs +0 -77
  935. package/dist/field-defs-cache-Dez5iWJJ.mjs.map +0 -1
  936. package/dist/field-map-Bft9LKak.mjs.map +0 -1
  937. package/dist/fts-manager-Beg3e4bI.mjs.map +0 -1
  938. package/dist/index-BB9sVisO.d.mts.map +0 -1
  939. package/dist/loader-CswroUbe.mjs.map +0 -1
  940. package/dist/manifest-builder-B8zjuH3f.mjs.map +0 -1
  941. package/dist/media-Bws9f18T.mjs.map +0 -1
  942. package/dist/menus-BCVSSp1z.mjs.map +0 -1
  943. package/dist/menus-Cl4kwdt7.mjs.map +0 -1
  944. package/dist/normalize-BuWa0lvd.mjs.map +0 -1
  945. package/dist/oauth-authorization-TpEJrYB7.mjs.map +0 -1
  946. package/dist/placeholder-D41vk11_.d.mts.map +0 -1
  947. package/dist/policy-DLQ--Hnm.mjs.map +0 -1
  948. package/dist/query-CpnRlBh8.mjs.map +0 -1
  949. package/dist/registry-TUVaid9Z.mjs.map +0 -1
  950. package/dist/relations-CA_QuMTU.mjs.map +0 -1
  951. package/dist/resolve-D-kqyKns.mjs.map +0 -1
  952. package/dist/runner-BObHz5FC.d.mts.map +0 -1
  953. package/dist/runner-C5NeAkBQ.mjs.map +0 -1
  954. package/dist/search-DfVzks89.mjs.map +0 -1
  955. package/dist/settings-CWb84sDm.mjs.map +0 -1
  956. package/dist/storage-query-DRyu3bSU.d.mts.map +0 -1
  957. package/dist/taxonomies-ChnU7Mc8.mjs.map +0 -1
  958. package/dist/taxonomies-Dd9JJv_a.mjs.map +0 -1
  959. package/dist/taxonomy-C_C_LBAU.mjs.map +0 -1
  960. package/dist/transport-BjbqNiPI.mjs.map +0 -1
  961. package/dist/types-BGmQ0uXs.mjs.map +0 -1
  962. package/dist/types-CNB-dj6F.d.mts.map +0 -1
  963. package/dist/types-D2NEXtgB.mjs.map +0 -1
  964. package/dist/types-slSqujQL.d.mts.map +0 -1
  965. package/dist/utils-TPt7w2cS.mjs.map +0 -1
  966. package/dist/version-DHmGpcch.mjs +0 -7
  967. package/dist/widgets-DA5XmvVC.mjs.map +0 -1
  968. package/dist/wxr-taxonomies-CrMonejI.d.mts.map +0 -1
  969. package/dist/wxr-taxonomies-RgRG0d5e.mjs.map +0 -1
  970. package/dist/zod-generator-D0JKy94C.mjs.map +0 -1
@@ -1,9 +1,11 @@
1
- import { d as __exportAll } from "./runner-C5NeAkBQ.mjs";
1
+ import { f as __exportAll } from "./runner-Bkkfk4O8.mjs";
2
2
  import { t as validateIdentifier } from "./validate-DANX1-Qi.mjs";
3
- import { m as invalidateTaxonomyObjectCache } from "./object-cache-Bo6DGaC9.mjs";
4
- import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-xC4UD5-S.mjs";
5
- import { n as slugify } from "./slugify-bu2-jKia.mjs";
6
- import { t as withTransaction } from "./transaction-BVYIo_yu.mjs";
3
+ import { a as getLocaleChainRank, i as getLocaleCandidates, o as getLocaleRank } from "./config-Cs_AwWXI.mjs";
4
+ import { n as localeMatches, r as localeOrder } from "./query-BFHjCzSh.mjs";
5
+ import { h as invalidateTaxonomyObjectCache } from "./object-cache-DmKr09La.mjs";
6
+ import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-DiW8VMwz.mjs";
7
+ import { n as slugify } from "./slugify-BDEG9pLk.mjs";
8
+ import { t as withTransaction } from "./transaction-CkoQ5wqQ.mjs";
7
9
  import { sql } from "kysely";
8
10
  import { ulid } from "ulidx";
9
11
 
@@ -129,15 +131,15 @@ var TaxonomyRepository = class {
129
131
  */
130
132
  async findBySlug(name, slug, locale) {
131
133
  let query = this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).where("slug", "=", slug);
132
- if (locale !== void 0) query = query.where("locale", "=", locale);
133
- const row = await query.orderBy("locale", "asc").executeTakeFirst();
134
+ if (locale !== void 0) query = query.where(localeMatches("locale", locale));
135
+ const row = await query.orderBy(locale !== void 0 ? localeOrder("locale", locale) : "locale", "asc").orderBy("id", "asc").executeTakeFirst();
134
136
  return row ? this.rowToTaxonomy(row) : null;
135
137
  }
136
138
  /** Generate a locale-scoped term slug, adding a numeric suffix when needed. */
137
139
  async generateUniqueSlug(name, text, locale) {
138
140
  const baseSlug = slugify(text);
139
141
  let query = this.db.selectFrom("taxonomies").select("slug").where("name", "=", name).where((eb) => eb.or([eb("slug", "=", baseSlug), eb("slug", "like", `${baseSlug}-%`)]));
140
- if (locale !== void 0) query = query.where("locale", "=", locale);
142
+ if (locale !== void 0) query = query.where(localeMatches("locale", locale));
141
143
  const candidates = await query.execute();
142
144
  if (!candidates.some((candidate) => candidate.slug === baseSlug)) return baseSlug;
143
145
  let maxSuffix = 0;
@@ -160,26 +162,27 @@ var TaxonomyRepository = class {
160
162
  */
161
163
  async findByName(name, options = {}) {
162
164
  let query = this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).orderBy("sort_order", "asc").orderBy("label", "asc").orderBy("id", "asc");
163
- if (options.locale !== void 0) query = query.where("locale", "=", options.locale);
165
+ if (options.locale !== void 0) query = query.where(localeMatches("locale", options.locale));
164
166
  if (options.parentId !== void 0) if (options.parentId === null) query = query.where("parent_id", "is", null);
165
167
  else query = query.where("parent_id", "=", options.parentId);
166
168
  return (await query.execute()).map((row) => this.rowToTaxonomy(row));
167
169
  }
168
170
  async findByNameResolved(name, locale, defaultLocale) {
169
171
  const locales = [...new Set([locale, defaultLocale])];
170
- const rows = await this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).where("locale", "in", locales).orderBy("sort_order", "asc").orderBy("label", "asc").orderBy("id", "asc").execute();
172
+ const rows = await this.db.selectFrom("taxonomies").selectAll().where("name", "=", name).where((eb) => eb.or(locales.map((candidate) => localeMatches("locale", candidate)))).orderBy("sort_order", "asc").orderBy("label", "asc").orderBy("id", "asc").execute();
171
173
  const selected = /* @__PURE__ */ new Map();
172
174
  for (const row of rows) {
173
175
  const term = this.rowToTaxonomy(row);
174
176
  const group = term.translationGroup ?? term.id;
175
- if (!selected.get(group) || term.locale === locale) selected.set(group, term);
177
+ const current = selected.get(group);
178
+ if (!current || getLocaleChainRank(term.locale, [locale, defaultLocale]) < getLocaleChainRank(current.locale, [locale, defaultLocale])) selected.set(group, term);
176
179
  }
177
180
  return [...selected.values()].toSorted((a, b) => a.sortOrder - b.sortOrder || a.label.localeCompare(b.label) || a.id.localeCompare(b.id));
178
181
  }
179
182
  async findPageByName(name, options = {}) {
180
183
  const limit = Math.max(1, Math.min(options.limit ?? 50, 100));
181
184
  let query = this.db.selectFrom("taxonomies").selectAll().where("name", "=", name);
182
- if (options.locale !== void 0) query = query.where("locale", "=", options.locale);
185
+ if (options.locale !== void 0) query = query.where(localeMatches("locale", options.locale));
183
186
  if (options.parentId !== void 0) query = options.parentId === null ? query.where("parent_id", "is", null) : query.where("parent_id", "=", options.parentId);
184
187
  if (options.cursor) {
185
188
  const cursor = options.cursor;
@@ -211,7 +214,7 @@ var TaxonomyRepository = class {
211
214
  const group = await this.resolveTranslationGroup(parentIdOrGroup);
212
215
  if (!group) return [];
213
216
  let query = this.db.selectFrom("taxonomies").selectAll().where("parent_id", "=", group).orderBy("sort_order", "asc").orderBy("label", "asc").orderBy("id", "asc");
214
- if (locale !== void 0) query = query.where("locale", "=", locale);
217
+ if (locale !== void 0) query = query.where(localeMatches("locale", locale));
215
218
  return (await query.execute()).map((row) => this.rowToTaxonomy(row));
216
219
  }
217
220
  /**
@@ -401,8 +404,16 @@ var TaxonomyRepository = class {
401
404
  if (!entryGroup) return [];
402
405
  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", "=", entryGroup);
403
406
  if (taxonomyName) query = query.where("taxonomies.name", "=", taxonomyName);
404
- if (locale !== void 0) query = query.where("taxonomies.locale", "=", locale);
405
- return (await query.orderBy("taxonomies.locale", "asc").execute()).map((row) => this.rowToTaxonomy(row));
407
+ if (locale !== void 0) query = query.where(localeMatches("taxonomies.locale", locale));
408
+ const terms = (await query.orderBy("taxonomies.locale", "asc").execute()).map((row) => this.rowToTaxonomy(row));
409
+ if (locale === void 0) return terms;
410
+ const selected = /* @__PURE__ */ new Map();
411
+ for (const term of terms) {
412
+ const group = term.translationGroup ?? term.id;
413
+ const current = selected.get(group);
414
+ if (!current || getLocaleRank(term.locale, locale) < getLocaleRank(current.locale, locale) || getLocaleRank(term.locale, locale) === getLocaleRank(current.locale, locale) && term.id < current.id) selected.set(group, term);
415
+ }
416
+ return [...selected.values()];
406
417
  }
407
418
  async getTermAssignmentsForEntry(collection, entryId, taxonomyName, locale, defaultLocale) {
408
419
  const entryGroup = await this.resolveEntryTranslationGroup(collection, entryId);
@@ -414,10 +425,12 @@ var TaxonomyRepository = class {
414
425
  variants.push(this.rowToTaxonomy(row));
415
426
  byGroup.set(row.assignment_group, variants);
416
427
  }
428
+ const chain = [locale, ...defaultLocale !== locale ? [defaultLocale] : []];
429
+ const chainLimit = getLocaleChainRank(defaultLocale, chain) + getLocaleCandidates(defaultLocale).length;
417
430
  return Array.from(byGroup, ([translationGroup, variants]) => {
418
431
  return {
419
432
  translationGroup,
420
- term: variants.find((variant) => variant.locale === locale) ?? variants.find((variant) => variant.locale === defaultLocale) ?? null,
433
+ term: variants.filter((variant) => getLocaleChainRank(variant.locale, chain) < chainLimit).toSorted((a, b) => getLocaleChainRank(a.locale, chain) - getLocaleChainRank(b.locale, chain) || a.id.localeCompare(b.id))[0] ?? null,
421
434
  availableLocales: variants.map((variant) => variant.locale),
422
435
  translations: variants.map((variant) => ({
423
436
  id: variant.id,
@@ -547,4 +560,4 @@ var TaxonomyRepository = class {
547
560
 
548
561
  //#endregion
549
562
  export { taxonomy_exports as n, TaxonomyRepository as t };
550
- //# sourceMappingURL=taxonomy-C_C_LBAU.mjs.map
563
+ //# sourceMappingURL=taxonomy-CMI5fczd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taxonomy-CMI5fczd.mjs","names":[],"sources":["../src/database/repositories/taxonomy.ts"],"sourcesContent":["import { sql, type Kysely, type Selectable } from \"kysely\";\nimport { ulid } from \"ulidx\";\n\nimport { getLocaleCandidates, getLocaleChainRank, getLocaleRank } from \"../../i18n/config.js\";\nimport { localeMatches, localeOrder } from \"../../i18n/query.js\";\nimport { invalidateTaxonomyObjectCache } from \"../../object-cache/index.js\";\nimport { chunks, SQL_BATCH_SIZE } from \"../../utils/chunks.js\";\nimport { slugify } from \"../../utils/slugify.js\";\nimport { withTransaction } from \"../transaction.js\";\nimport type { Database, TaxonomyTable } from \"../types.js\";\nimport { validateIdentifier } from \"../validate.js\";\n\n/** A member of one sibling group and the position it currently holds. */\nexport interface SiblingPosition {\n\tgroup: string;\n\tposition: number;\n}\n\n/**\n * Translation groups per reorder `UPDATE`. Each costs three bound parameters —\n * a CASE `WHEN`/`THEN` pair plus one slot in the `IN` list — which keeps a\n * statement inside D1's 100-parameter ceiling.\n */\nconst GROUPS_PER_UPDATE = 32;\n/** Rows per `content_taxonomies` insert. Each row binds three parameters. */\nconst ASSIGNMENTS_PER_INSERT = 32;\nconst NUMERIC_SUFFIX_PATTERN = /^\\d+$/;\n\n/** Deal the listed groups back out over the slots they hold, in the order given. */\nfunction permuteWithinSlots(\n\tlisted: readonly string[],\n\toccupied: readonly number[],\n): Map<string, number> {\n\tconst slots = occupied.toSorted((a, b) => a - b);\n\tconst target = new Map<string, number>();\n\tlisted.forEach((group, index) => {\n\t\tconst position = slots[index];\n\t\tif (position !== undefined) target.set(group, position);\n\t});\n\treturn target;\n}\n\n/**\n * Renumber a whole sibling group 0..n-1, with the listed groups in the order\n * given and every other member left in the place it already held.\n *\n * Works off each member's index in the sequence rather than its stored value,\n * which is what lets it resolve positions that tie. The sort is stable, so\n * tied members keep the order `siblings` arrives in — deterministic, but a\n * listing that mixes locales breaks a tie on whichever locale's label sorts\n * first, not on the order any one caller rendered.\n */\nfunction renumberSiblings(\n\tlisted: readonly string[],\n\tsiblings: readonly SiblingPosition[],\n): Map<string, number> {\n\tconst sequence = siblings.toSorted((a, b) => a.position - b.position);\n\tconst wanted = new Set(listed);\n\tconst target = new Map<string, number>();\n\tlet next = 0;\n\tsequence.forEach(({ group }, index) => {\n\t\tconst replacement = wanted.has(group) ? listed[next++] : undefined;\n\t\ttarget.set(replacement ?? group, index);\n\t});\n\treturn target;\n}\n\nexport interface Taxonomy {\n\tid: string;\n\tname: string;\n\tslug: string;\n\tlabel: string;\n\tparentId: string | null;\n\tdata: Record<string, unknown> | null;\n\tlocale: string;\n\ttranslationGroup: string | null;\n\t/**\n\t * Position among siblings. Shared by every row of a `translation_group` —\n\t * a term sits in the same place in every locale it is translated into.\n\t */\n\tsortOrder: number;\n}\n\nexport interface CreateTaxonomyInput {\n\tname: string;\n\tslug: string;\n\tlabel: string;\n\tparentId?: string;\n\tdata?: Record<string, unknown>;\n\t/** Omit to let the DB default (current value: 'en') apply. Higher layers\n\t * resolve the locale from the request context / i18n config. */\n\tlocale?: string;\n\t/** When set, links the new term into the source term's translation_group. */\n\ttranslationOf?: string;\n}\n\nexport interface UpdateTaxonomyInput {\n\tslug?: string;\n\tlabel?: string;\n\tparentId?: string | null;\n\tdata?: Record<string, unknown>;\n}\n\nexport interface FindOptions {\n\tparentId?: string | null;\n\tlocale?: string;\n}\n\nexport interface TaxonomyManualPageCursor {\n\tsortOrder: number;\n\tlabel: string;\n\tid: string;\n}\n\nexport interface TaxonomyPageOptions extends FindOptions {\n\tcursor?: TaxonomyManualPageCursor;\n\tlimit?: number;\n}\n\nexport interface TaxonomyPage {\n\titems: Taxonomy[];\n\thasMore: boolean;\n}\n\nexport interface TaxonomyAssignmentTranslation {\n\tid: string;\n\tslug: string;\n\tlocale: string;\n}\n\nexport interface TaxonomyAssignmentResolution {\n\ttranslationGroup: string;\n\tterm: Taxonomy | null;\n\tavailableLocales: string[];\n\ttranslations: TaxonomyAssignmentTranslation[];\n}\n\n/**\n * Taxonomy repository for categories, tags, and other classification.\n *\n * Terms are per-locale. Translations of the same term share a `translation_group`\n * ULID. `content_taxonomies` stores translation_groups on both sides so a single\n * association spans every locale of a post and term.\n *\n * Strict lookup methods use only the locale callers supply. The explicitly\n * resolved methods accept both the preferred and default locales so their\n * fallback policy stays visible at the call site.\n *\n * `sort_order` is per translation_group, not per row: every row sharing a\n * translation_group carries the same value, so a term holds one position across\n * all its locales. Sibling groups are keyed on the raw `parent_id` column, which\n * is locale-agnostic for the same reason (it stores the parent's\n * translation_group). Writes must preserve both invariants.\n */\nexport class TaxonomyRepository {\n\tconstructor(private db: Kysely<Database>) {}\n\n\t/**\n\t * Create a new taxonomy term. When `translationOf` is set the new row joins\n\t * the source term's translation_group; otherwise a fresh group is minted\n\t * (matching the migration backfill pattern `translation_group = id`).\n\t */\n\tasync create(input: CreateTaxonomyInput): Promise<Taxonomy> {\n\t\tconst id = ulid();\n\n\t\t// Empty-string parentId counts as omitted. Higher layers also normalize\n\t\t// this — see handleTermCreate / handleTermUpdate.\n\t\t// `parent_id` stores the parent's locale-agnostic translation_group (not a\n\t\t// row id), mirroring content_taxonomies.taxonomy_id, so a child stays\n\t\t// nested in every locale's tree. resolveTranslationGroup accepts either a\n\t\t// row id or an already-resolved group, so this is idempotent.\n\t\tconst parentInput = input.parentId === \"\" ? undefined : input.parentId;\n\t\tlet parentId = parentInput ? await this.resolveParentRef(parentInput) : null;\n\n\t\tlet translationGroup = id;\n\t\tlet sortOrder: number | null = null;\n\t\tlet movesGroup = false;\n\t\tif (input.translationOf) {\n\t\t\tconst source = await this.findById(input.translationOf);\n\t\t\tif (source?.translationGroup) translationGroup = source.translationGroup;\n\t\t\t// A translation is the same term in another locale, so it takes the\n\t\t\t// group's parent and position. Naming a different parent moves the whole\n\t\t\t// group there, as an update through any locale does, and appends it to\n\t\t\t// the siblings it lands among.\n\t\t\tif (source && (parentInput === undefined || source.parentId === parentId)) {\n\t\t\t\tparentId = source.parentId;\n\t\t\t\tsortOrder = source.sortOrder;\n\t\t\t} else if (source) {\n\t\t\t\tmovesGroup = true;\n\t\t\t}\n\t\t}\n\t\tsortOrder ??= await this.nextSortOrder(input.name, parentId);\n\n\t\tawait withTransaction(this.db, async (trx) => {\n\t\t\tawait trx\n\t\t\t\t.insertInto(\"taxonomies\")\n\t\t\t\t.values({\n\t\t\t\t\tid,\n\t\t\t\t\tname: input.name,\n\t\t\t\t\tslug: input.slug,\n\t\t\t\t\tlabel: input.label,\n\t\t\t\t\tparent_id: parentId,\n\t\t\t\t\tdata: input.data ? JSON.stringify(input.data) : null,\n\t\t\t\t\tsort_order: sortOrder,\n\t\t\t\t\t// When omitted, the DB DEFAULT 'en' is used — keeps behaviour\n\t\t\t\t\t// consistent with ContentRepository and lets higher layers\n\t\t\t\t\t// supply an explicit locale from request context.\n\t\t\t\t\t...(input.locale !== undefined ? { locale: input.locale } : {}),\n\t\t\t\t\ttranslation_group: translationGroup,\n\t\t\t\t})\n\t\t\t\t.execute();\n\t\t\tif (movesGroup) {\n\t\t\t\tawait trx\n\t\t\t\t\t.updateTable(\"taxonomies\")\n\t\t\t\t\t.set({ parent_id: parentId, sort_order: sortOrder })\n\t\t\t\t\t.where(\"translation_group\", \"=\", translationGroup)\n\t\t\t\t\t.execute();\n\t\t\t}\n\t\t});\n\n\t\tinvalidateTaxonomyObjectCache();\n\n\t\tconst taxonomy = await this.findById(id);\n\t\tif (!taxonomy) throw new Error(\"Failed to create taxonomy\");\n\t\treturn taxonomy;\n\t}\n\n\tasync findById(id: string): Promise<Taxonomy | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.selectAll()\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.executeTakeFirst();\n\t\treturn row ? this.rowToTaxonomy(row) : null;\n\t}\n\n\t/** Resolve either a locale row id or a locale-agnostic translation group. */\n\tasync findByIdOrTranslationGroup(id: string): Promise<Taxonomy | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.selectAll()\n\t\t\t.where((eb) => eb.or([eb(\"id\", \"=\", id), eb(\"translation_group\", \"=\", id)]))\n\t\t\t.orderBy(\"locale\", \"asc\")\n\t\t\t.orderBy(\"id\", \"asc\")\n\t\t\t.executeTakeFirst();\n\t\treturn row ? this.rowToTaxonomy(row) : null;\n\t}\n\n\t/**\n\t * Find a term by (name, slug). When `locale` is provided, filter by it.\n\t * When omitted, returns the lowest-locale-code match (deterministic across\n\t * calls). Mirrors `ContentRepository.findBySlug`.\n\t */\n\tasync findBySlug(name: string, slug: string, locale?: string): Promise<Taxonomy | null> {\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.selectAll()\n\t\t\t.where(\"name\", \"=\", name)\n\t\t\t.where(\"slug\", \"=\", slug);\n\t\tif (locale !== undefined) query = query.where(localeMatches(\"locale\", locale));\n\t\tconst row = await query\n\t\t\t.orderBy(locale !== undefined ? localeOrder(\"locale\", locale) : \"locale\", \"asc\")\n\t\t\t.orderBy(\"id\", \"asc\")\n\t\t\t.executeTakeFirst();\n\t\treturn row ? this.rowToTaxonomy(row) : null;\n\t}\n\n\t/** Generate a locale-scoped term slug, adding a numeric suffix when needed. */\n\tasync generateUniqueSlug(name: string, text: string, locale?: string): Promise<string> {\n\t\tconst baseSlug = slugify(text);\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.select(\"slug\")\n\t\t\t.where(\"name\", \"=\", name)\n\t\t\t.where((eb) => eb.or([eb(\"slug\", \"=\", baseSlug), eb(\"slug\", \"like\", `${baseSlug}-%`)]));\n\t\tif (locale !== undefined) query = query.where(localeMatches(\"locale\", locale));\n\t\tconst candidates = await query.execute();\n\t\tif (!candidates.some((candidate) => candidate.slug === baseSlug)) return baseSlug;\n\n\t\tlet maxSuffix = 0;\n\t\tconst prefix = `${baseSlug}-`;\n\t\tfor (const candidate of candidates) {\n\t\t\tif (!candidate.slug.startsWith(prefix)) continue;\n\t\t\tconst suffix = candidate.slug.slice(prefix.length);\n\t\t\tif (!NUMERIC_SUFFIX_PATTERN.test(suffix)) continue;\n\t\t\tmaxSuffix = Math.max(maxSuffix, Number.parseInt(suffix, 10));\n\t\t}\n\t\treturn `${baseSlug}-${maxSuffix + 1}`;\n\t}\n\n\t/**\n\t * Get all terms for a taxonomy (e.g., all categories).\n\t *\n\t * `sort_order` carries the manual order set from the admin; it is 0 for\n\t * terms nobody has reordered, so an untouched taxonomy still comes back\n\t * alphabetically. `id asc` is a stable tiebreaker for terms that share both\n\t * values. Without it the SQL ordering is implementation-defined when they match.\n\t */\n\tasync findByName(name: string, options: FindOptions = {}): Promise<Taxonomy[]> {\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.selectAll()\n\t\t\t.where(\"name\", \"=\", name)\n\t\t\t.orderBy(\"sort_order\", \"asc\")\n\t\t\t.orderBy(\"label\", \"asc\")\n\t\t\t.orderBy(\"id\", \"asc\");\n\n\t\tif (options.locale !== undefined) query = query.where(localeMatches(\"locale\", options.locale));\n\n\t\tif (options.parentId !== undefined) {\n\t\t\tif (options.parentId === null) {\n\t\t\t\tquery = query.where(\"parent_id\", \"is\", null);\n\t\t\t} else {\n\t\t\t\tquery = query.where(\"parent_id\", \"=\", options.parentId);\n\t\t\t}\n\t\t}\n\n\t\tconst rows = await query.execute();\n\t\treturn rows.map((row) => this.rowToTaxonomy(row));\n\t}\n\n\tasync findByNameResolved(\n\t\tname: string,\n\t\tlocale: string,\n\t\tdefaultLocale: string,\n\t): Promise<Taxonomy[]> {\n\t\tconst locales = [...new Set([locale, defaultLocale])];\n\t\tconst rows = await this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.selectAll()\n\t\t\t.where(\"name\", \"=\", name)\n\t\t\t.where((eb) => eb.or(locales.map((candidate) => localeMatches(\"locale\", candidate))))\n\t\t\t.orderBy(\"sort_order\", \"asc\")\n\t\t\t.orderBy(\"label\", \"asc\")\n\t\t\t.orderBy(\"id\", \"asc\")\n\t\t\t.execute();\n\n\t\tconst selected = new Map<string, Taxonomy>();\n\t\tfor (const row of rows) {\n\t\t\tconst term = this.rowToTaxonomy(row);\n\t\t\tconst group = term.translationGroup ?? term.id;\n\t\t\tconst current = selected.get(group);\n\t\t\tif (\n\t\t\t\t!current ||\n\t\t\t\tgetLocaleChainRank(term.locale, [locale, defaultLocale]) <\n\t\t\t\t\tgetLocaleChainRank(current.locale, [locale, defaultLocale])\n\t\t\t) {\n\t\t\t\tselected.set(group, term);\n\t\t\t}\n\t\t}\n\t\treturn [...selected.values()].toSorted(\n\t\t\t(a, b) =>\n\t\t\t\ta.sortOrder - b.sortOrder || a.label.localeCompare(b.label) || a.id.localeCompare(b.id),\n\t\t);\n\t}\n\n\tasync findPageByName(name: string, options: TaxonomyPageOptions = {}): Promise<TaxonomyPage> {\n\t\tconst limit = Math.max(1, Math.min(options.limit ?? 50, 100));\n\t\tlet query = this.db.selectFrom(\"taxonomies\").selectAll().where(\"name\", \"=\", name);\n\n\t\tif (options.locale !== undefined) query = query.where(localeMatches(\"locale\", options.locale));\n\n\t\tif (options.parentId !== undefined) {\n\t\t\tquery =\n\t\t\t\toptions.parentId === null\n\t\t\t\t\t? query.where(\"parent_id\", \"is\", null)\n\t\t\t\t\t: query.where(\"parent_id\", \"=\", options.parentId);\n\t\t}\n\n\t\tif (options.cursor) {\n\t\t\tconst cursor = options.cursor;\n\t\t\tquery = query.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb(\"sort_order\", \">\", cursor.sortOrder),\n\t\t\t\t\teb.and([eb(\"sort_order\", \"=\", cursor.sortOrder), eb(\"label\", \">\", cursor.label)]),\n\t\t\t\t\teb.and([\n\t\t\t\t\t\teb(\"sort_order\", \"=\", cursor.sortOrder),\n\t\t\t\t\t\teb(\"label\", \"=\", cursor.label),\n\t\t\t\t\t\teb(\"id\", \">\", cursor.id),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t);\n\t\t}\n\t\tquery = query.orderBy(\"sort_order\", \"asc\").orderBy(\"label\", \"asc\").orderBy(\"id\", \"asc\");\n\n\t\tconst rows = await query.limit(limit + 1).execute();\n\t\treturn {\n\t\t\titems: rows.slice(0, limit).map((row) => this.rowToTaxonomy(row)),\n\t\t\thasMore: rows.length > limit,\n\t\t};\n\t}\n\n\t/**\n\t * Children of a term. Accepts a term id OR a translation_group and resolves\n\t * to the group, since `parent_id` stores the parent's translation_group.\n\t * Pass `locale` to scope to one locale's tree (children share the parent's\n\t * group across locales); omit it to find children in every locale (used to\n\t * block deletes that would orphan a sibling translation's subtree).\n\t */\n\tasync findChildren(parentIdOrGroup: string, locale?: string): Promise<Taxonomy[]> {\n\t\tconst group = await this.resolveTranslationGroup(parentIdOrGroup);\n\t\tif (!group) return [];\n\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.selectAll()\n\t\t\t.where(\"parent_id\", \"=\", group)\n\t\t\t.orderBy(\"sort_order\", \"asc\")\n\t\t\t.orderBy(\"label\", \"asc\")\n\t\t\t.orderBy(\"id\", \"asc\");\n\t\tif (locale !== undefined) query = query.where(localeMatches(\"locale\", locale));\n\n\t\tconst rows = await query.execute();\n\t\treturn rows.map((row) => this.rowToTaxonomy(row));\n\t}\n\n\t/**\n\t * Every translation sibling of a term (including itself), identified by\n\t * their shared `translation_group`.\n\t */\n\tasync findTranslations(translationGroup: string): Promise<Taxonomy[]> {\n\t\tconst rows = await this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.selectAll()\n\t\t\t.where(\"translation_group\", \"=\", translationGroup)\n\t\t\t.orderBy(\"locale\", \"asc\")\n\t\t\t.execute();\n\t\treturn rows.map((row) => this.rowToTaxonomy(row));\n\t}\n\n\tasync update(id: string, input: UpdateTaxonomyInput): Promise<Taxonomy | null> {\n\t\tconst existing = await this.findById(id);\n\t\tif (!existing) return null;\n\n\t\t// Per-row display fields. `parent_id` and `sort_order` are not here: both\n\t\t// belong to the translation_group and are written across it below.\n\t\tconst updates: Record<string, unknown> = {};\n\t\tif (input.slug !== undefined) updates.slug = input.slug;\n\t\tif (input.label !== undefined) updates.label = input.label;\n\t\tif (input.data !== undefined) updates.data = JSON.stringify(input.data);\n\n\t\tconst group: { parent_id?: string | null; sort_order?: number } = {};\n\t\tif (input.parentId !== undefined) {\n\t\t\t// Defense in depth: empty-string parentId means null (no parent).\n\t\t\t// Otherwise persist the parent's translation_group (locale-agnostic),\n\t\t\t// matching create() — see the note there.\n\t\t\tconst parentId =\n\t\t\t\tinput.parentId === \"\" || input.parentId === null\n\t\t\t\t\t? null\n\t\t\t\t\t: await this.resolveParentRef(input.parentId);\n\n\t\t\tif (parentId !== existing.parentId) {\n\t\t\t\tgroup.parent_id = parentId;\n\t\t\t\t// A position only means anything within one sibling group, so a term\n\t\t\t\t// that changes parent is appended to the group it lands in.\n\t\t\t\tgroup.sort_order = await this.nextSortOrder(existing.name, parentId);\n\t\t\t} else if (\n\t\t\t\tawait this.groupHasOtherParent(existing.translationGroup ?? existing.id, parentId)\n\t\t\t) {\n\t\t\t\t// Other locales of the term sit elsewhere; bring them to this row's\n\t\t\t\t// parent and position.\n\t\t\t\tgroup.parent_id = parentId;\n\t\t\t\tgroup.sort_order = existing.sortOrder;\n\t\t\t}\n\t\t}\n\n\t\tconst hasRowUpdates = Object.keys(updates).length > 0;\n\t\tconst hasGroupUpdates = Object.keys(group).length > 0;\n\t\tif (hasRowUpdates || hasGroupUpdates) {\n\t\t\tawait withTransaction(this.db, async (trx) => {\n\t\t\t\tif (hasRowUpdates) {\n\t\t\t\t\tawait trx.updateTable(\"taxonomies\").set(updates).where(\"id\", \"=\", id).execute();\n\t\t\t\t}\n\t\t\t\tif (hasGroupUpdates) {\n\t\t\t\t\tawait trx\n\t\t\t\t\t\t.updateTable(\"taxonomies\")\n\t\t\t\t\t\t.set(group)\n\t\t\t\t\t\t.where(\"translation_group\", \"=\", existing.translationGroup ?? existing.id)\n\t\t\t\t\t\t.execute();\n\t\t\t\t}\n\t\t\t});\n\t\t\tinvalidateTaxonomyObjectCache();\n\t\t}\n\n\t\treturn this.findById(id);\n\t}\n\n\t/**\n\t * Move `groups` (translation_groups, in the desired order) into the positions\n\t * those same groups already occupy, leaving every other member of the sibling\n\t * group where it is.\n\t *\n\t * `groups` may be a subset: a locale renders only the terms translated into\n\t * it, so an admin in `fr` often cannot name every member. A group left out\n\t * keeps its place, which is also what makes a stale list harmless.\n\t *\n\t * `siblings` is every member of the group with the position it holds, in a\n\t * listing's order — tied positions are resolved by that order, so pass it as\n\t * read. Groups already at their target are skipped, so one swap rewrites two\n\t * groups rather than the whole list.\n\t */\n\tasync reorder(groups: string[], siblings: readonly SiblingPosition[]): Promise<void> {\n\t\tconst current = new Map(siblings.map(({ group, position }) => [group, position]));\n\n\t\tconst listed: string[] = [];\n\t\tconst occupied: number[] = [];\n\t\tfor (const group of groups) {\n\t\t\tconst position = current.get(group);\n\t\t\tif (position === undefined) continue;\n\t\t\tlisted.push(group);\n\t\t\toccupied.push(position);\n\t\t}\n\t\tif (listed.length === 0) return;\n\n\t\t// Tied positions have no distinct order to permute into, so the requested\n\t\t// one would be dropped without a word. Renumbering is the only way to\n\t\t// honour it, and it repairs the tie on the way through.\n\t\tconst target =\n\t\t\tnew Set(occupied).size === occupied.length\n\t\t\t\t? permuteWithinSlots(listed, occupied)\n\t\t\t\t: renumberSiblings(listed, siblings);\n\n\t\tconst changed = [...target].filter(([group, position]) => current.get(group) !== position);\n\t\tif (changed.length === 0) return;\n\n\t\tawait this.applyPositions(changed);\n\n\t\tinvalidateTaxonomyObjectCache();\n\t}\n\n\t/**\n\t * Write one position per translation_group, GROUPS_PER_UPDATE at a time so\n\t * each statement stays inside D1's parameter ceiling.\n\t *\n\t * D1 has no transactions — `withTransaction` runs its callback bare there —\n\t * so a chunk is the unit that can't tear. A reorder spanning several chunks\n\t * can, and leaves ties, which the next reorder renumbers away.\n\t */\n\tprivate async applyPositions(positions: readonly (readonly [string, number])[]): Promise<void> {\n\t\tfor (let index = 0; index < positions.length; index += GROUPS_PER_UPDATE) {\n\t\t\tconst chunk = positions.slice(index, index + GROUPS_PER_UPDATE);\n\t\t\t// The CAST types the bound position. Postgres resolves a CASE whose THEN\n\t\t\t// arms are all untyped parameters to text, then refuses to assign text to\n\t\t\t// an integer column.\n\t\t\tconst arms = sql.join(\n\t\t\t\tchunk.map(([group, position]) => sql`WHEN ${group} THEN CAST(${position} AS INTEGER)`),\n\t\t\t\tsql` `,\n\t\t\t);\n\t\t\tconst keys = sql.join(chunk.map(([group]) => sql`${group}`));\n\t\t\tawait sql`\n\t\t\t\tUPDATE taxonomies\n\t\t\t\tSET sort_order = CASE translation_group ${arms} END\n\t\t\t\tWHERE translation_group IN (${keys})\n\t\t\t`.execute(this.db);\n\t\t}\n\t}\n\n\t/**\n\t * Position for a term joining a sibling group: one past the last member, or\n\t * 0 when the group is empty.\n\t *\n\t * Bounds are taken across every locale because a position belongs to the\n\t * translation_group, not to a row — a term translated into only one locale\n\t * still occupies its slot for all of them.\n\t */\n\tprivate async nextSortOrder(name: string, parentId: string | null): Promise<number> {\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.select((eb) => eb.fn.max(\"sort_order\").as(\"max\"))\n\t\t\t.where(\"name\", \"=\", name);\n\t\tquery =\n\t\t\tparentId === null\n\t\t\t\t? query.where(\"parent_id\", \"is\", null)\n\t\t\t\t: query.where(\"parent_id\", \"=\", parentId);\n\n\t\tconst bounds = await query.executeTakeFirst();\n\t\t// Null only when the group is empty.\n\t\tif (!bounds || bounds.max === null) return 0;\n\t\treturn bounds.max + 1;\n\t}\n\n\t/** Whether any row of `translationGroup` has a parent other than `parentId`. */\n\tprivate async groupHasOtherParent(\n\t\ttranslationGroup: string,\n\t\tparentId: string | null,\n\t): Promise<boolean> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.select(\"id\")\n\t\t\t.where(\"translation_group\", \"=\", translationGroup)\n\t\t\t.where((eb) =>\n\t\t\t\tparentId === null\n\t\t\t\t\t? eb(\"parent_id\", \"is not\", null)\n\t\t\t\t\t: eb.or([eb(\"parent_id\", \"is\", null), eb(\"parent_id\", \"!=\", parentId)]),\n\t\t\t)\n\t\t\t.executeTakeFirst();\n\t\treturn row !== undefined;\n\t}\n\n\tasync delete(id: string): Promise<boolean> {\n\t\tconst term = await this.findById(id);\n\t\tif (!term) return false;\n\n\t\t// When deleting the last translation of a group the pivot rows that\n\t\t// reference that translation_group become orphaned — purge them.\n\t\tif (term.translationGroup) {\n\t\t\tconst siblings = await this.db\n\t\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t\t.select(\"id\")\n\t\t\t\t.where(\"translation_group\", \"=\", term.translationGroup)\n\t\t\t\t.where(\"id\", \"!=\", id)\n\t\t\t\t.execute();\n\t\t\tif (siblings.length === 0) {\n\t\t\t\tawait this.db\n\t\t\t\t\t.deleteFrom(\"content_taxonomies\")\n\t\t\t\t\t.where(\"taxonomy_id\", \"=\", term.translationGroup)\n\t\t\t\t\t.execute();\n\t\t\t}\n\t\t}\n\n\t\tconst result = await this.db.deleteFrom(\"taxonomies\").where(\"id\", \"=\", id).executeTakeFirst();\n\t\tinvalidateTaxonomyObjectCache();\n\t\treturn (result.numDeletedRows ?? 0n) > 0n;\n\t}\n\n\t// --- Content-Taxonomy Junction (both ids store translation_groups) ---\n\n\tasync attachToEntry(collection: string, entryId: string, taxonomyId: string): Promise<void> {\n\t\tconst taxonomyGroup = await this.resolveTranslationGroup(taxonomyId);\n\t\tif (!taxonomyGroup) return;\n\t\tawait this.attachGroupsToEntry(collection, entryId, [taxonomyGroup]);\n\t}\n\n\t/**\n\t * Attach already-resolved term translation groups and return the number of\n\t * assignments that did not already exist.\n\t */\n\tasync attachGroupsToEntry(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\ttaxonomyGroups: string[],\n\t): Promise<number> {\n\t\tconst uniqueGroups = [...new Set(taxonomyGroups)];\n\t\tif (uniqueGroups.length === 0) return 0;\n\t\tconst entryGroup = await this.resolveEntryTranslationGroup(collection, entryId);\n\t\tif (!entryGroup) return 0;\n\n\t\tconst inserted = await this.insertAssignments(collection, entryGroup, uniqueGroups);\n\t\tif (inserted > 0) invalidateTaxonomyObjectCache();\n\t\treturn inserted;\n\t}\n\n\tprivate async insertAssignments(\n\t\tcollection: string,\n\t\tentryGroup: string,\n\t\ttaxonomyGroups: string[],\n\t): Promise<number> {\n\t\tlet inserted = 0;\n\t\ttry {\n\t\t\tfor (const batch of chunks(taxonomyGroups, ASSIGNMENTS_PER_INSERT)) {\n\t\t\t\t// oxlint-disable-next-line no-await-in-loop -- one statement per D1-safe batch\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.insertInto(\"content_taxonomies\")\n\t\t\t\t\t.values(batch.map((taxonomy_id) => ({ collection, entry_id: entryGroup, taxonomy_id })))\n\t\t\t\t\t.onConflict((oc) => oc.doNothing())\n\t\t\t\t\t.executeTakeFirst();\n\t\t\t\tinserted += Number(result.numInsertedOrUpdatedRows ?? 0n);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Earlier batches are already written.\n\t\t\tif (inserted > 0) invalidateTaxonomyObjectCache();\n\t\t\tthrow error;\n\t\t}\n\t\treturn inserted;\n\t}\n\n\tprivate async deleteAssignments(\n\t\tcollection: string,\n\t\tentryGroup: string,\n\t\ttaxonomyGroups: string[],\n\t): Promise<number> {\n\t\tlet removed = 0;\n\t\ttry {\n\t\t\tfor (const batch of chunks(taxonomyGroups, SQL_BATCH_SIZE)) {\n\t\t\t\t// oxlint-disable-next-line no-await-in-loop -- one statement per D1-safe batch\n\t\t\t\tconst result = await this.db\n\t\t\t\t\t.deleteFrom(\"content_taxonomies\")\n\t\t\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t\t\t.where(\"entry_id\", \"=\", entryGroup)\n\t\t\t\t\t.where(\"taxonomy_id\", \"in\", batch)\n\t\t\t\t\t.executeTakeFirst();\n\t\t\t\tremoved += Number(result.numDeletedRows ?? 0n);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// Earlier batches are already deleted.\n\t\t\tif (removed > 0) invalidateTaxonomyObjectCache();\n\t\t\tthrow error;\n\t\t}\n\t\treturn removed;\n\t}\n\n\tasync detachFromEntry(collection: string, entryId: string, taxonomyId: string): Promise<void> {\n\t\tconst [entryGroup, taxonomyGroup] = await Promise.all([\n\t\t\tthis.resolveEntryTranslationGroup(collection, entryId),\n\t\t\tthis.resolveTranslationGroup(taxonomyId),\n\t\t]);\n\t\tif (!entryGroup || !taxonomyGroup) return;\n\n\t\tawait this.db\n\t\t\t.deleteFrom(\"content_taxonomies\")\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"entry_id\", \"=\", entryGroup)\n\t\t\t.where(\"taxonomy_id\", \"=\", taxonomyGroup)\n\t\t\t.execute();\n\t\tinvalidateTaxonomyObjectCache();\n\t}\n\n\t/** Remove already-resolved term groups without replacing concurrent assignments. */\n\tasync detachGroupsFromEntry(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\ttaxonomyGroups: string[],\n\t): Promise<number> {\n\t\tconst uniqueGroups = [...new Set(taxonomyGroups)];\n\t\tif (uniqueGroups.length === 0) return 0;\n\t\tconst entryGroup = await this.resolveEntryTranslationGroup(collection, entryId);\n\t\tif (!entryGroup) return 0;\n\n\t\tconst removed = await this.deleteAssignments(collection, entryGroup, uniqueGroups);\n\t\tif (removed > 0) invalidateTaxonomyObjectCache();\n\t\treturn removed;\n\t}\n\n\t/**\n\t * Taxonomy terms assigned to a content entry, resolved into a specific locale.\n\t * Terms whose translation_group lacks a row in the requested locale are\n\t * omitted — callers wanting fallback behaviour apply it themselves.\n\t */\n\tasync getTermsForEntry(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\ttaxonomyName?: string,\n\t\tlocale?: string,\n\t): Promise<Taxonomy[]> {\n\t\tconst entryGroup = await this.resolveEntryTranslationGroup(collection, entryId);\n\t\tif (!entryGroup) return [];\n\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"content_taxonomies\")\n\t\t\t.innerJoin(\"taxonomies\", \"taxonomies.translation_group\", \"content_taxonomies.taxonomy_id\")\n\t\t\t.selectAll(\"taxonomies\")\n\t\t\t.where(\"content_taxonomies.collection\", \"=\", collection)\n\t\t\t.where(\"content_taxonomies.entry_id\", \"=\", entryGroup);\n\n\t\tif (taxonomyName) query = query.where(\"taxonomies.name\", \"=\", taxonomyName);\n\t\tif (locale !== undefined) query = query.where(localeMatches(\"taxonomies.locale\", locale));\n\n\t\tconst rows = await query.orderBy(\"taxonomies.locale\", \"asc\").execute();\n\t\tconst terms = rows.map((row) => this.rowToTaxonomy(row));\n\t\tif (locale === undefined) return terms;\n\t\tconst selected = new Map<string, Taxonomy>();\n\t\tfor (const term of terms) {\n\t\t\tconst group = term.translationGroup ?? term.id;\n\t\t\tconst current = selected.get(group);\n\t\t\tif (\n\t\t\t\t!current ||\n\t\t\t\tgetLocaleRank(term.locale, locale) < getLocaleRank(current.locale, locale) ||\n\t\t\t\t(getLocaleRank(term.locale, locale) === getLocaleRank(current.locale, locale) &&\n\t\t\t\t\tterm.id < current.id)\n\t\t\t) {\n\t\t\t\tselected.set(group, term);\n\t\t\t}\n\t\t}\n\t\treturn [...selected.values()];\n\t}\n\n\tasync getTermAssignmentsForEntry(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\ttaxonomyName: string,\n\t\tlocale: string,\n\t\tdefaultLocale: string,\n\t): Promise<TaxonomyAssignmentResolution[]> {\n\t\tconst entryGroup = await this.resolveEntryTranslationGroup(collection, entryId);\n\t\tif (!entryGroup) return [];\n\n\t\tconst rows = await this.db\n\t\t\t.selectFrom(\"content_taxonomies\")\n\t\t\t.innerJoin(\"taxonomies\", \"taxonomies.translation_group\", \"content_taxonomies.taxonomy_id\")\n\t\t\t.selectAll(\"taxonomies\")\n\t\t\t.select(\"content_taxonomies.taxonomy_id as assignment_group\")\n\t\t\t.where(\"content_taxonomies.collection\", \"=\", collection)\n\t\t\t.where(\"content_taxonomies.entry_id\", \"=\", entryGroup)\n\t\t\t.where(\"taxonomies.name\", \"=\", taxonomyName)\n\t\t\t.orderBy(\"content_taxonomies.taxonomy_id\", \"asc\")\n\t\t\t.orderBy(\"taxonomies.locale\", \"asc\")\n\t\t\t.execute();\n\n\t\tconst byGroup = new Map<string, Taxonomy[]>();\n\t\tfor (const row of rows) {\n\t\t\tconst variants = byGroup.get(row.assignment_group) ?? [];\n\t\t\tvariants.push(this.rowToTaxonomy(row));\n\t\t\tbyGroup.set(row.assignment_group, variants);\n\t\t}\n\n\t\tconst chain = [locale, ...(defaultLocale !== locale ? [defaultLocale] : [])];\n\t\tconst chainLimit =\n\t\t\tgetLocaleChainRank(defaultLocale, chain) + getLocaleCandidates(defaultLocale).length;\n\t\treturn Array.from(byGroup, ([translationGroup, variants]) => {\n\t\t\tconst candidates = variants\n\t\t\t\t.filter((variant) => getLocaleChainRank(variant.locale, chain) < chainLimit)\n\t\t\t\t.toSorted(\n\t\t\t\t\t(a, b) =>\n\t\t\t\t\t\tgetLocaleChainRank(a.locale, chain) - getLocaleChainRank(b.locale, chain) ||\n\t\t\t\t\t\ta.id.localeCompare(b.id),\n\t\t\t\t);\n\t\t\tconst term = candidates[0] ?? null;\n\t\t\treturn {\n\t\t\t\ttranslationGroup,\n\t\t\t\tterm,\n\t\t\t\tavailableLocales: variants.map((variant) => variant.locale),\n\t\t\t\ttranslations: variants.map((variant) => ({\n\t\t\t\t\tid: variant.id,\n\t\t\t\t\tslug: variant.slug,\n\t\t\t\t\tlocale: variant.locale,\n\t\t\t\t})),\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Replace all assignments of a given taxonomy for one content entry.\n\t * Term ids OR translation_groups are accepted and normalised to groups.\n\t */\n\tasync setTermsForEntry(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\ttaxonomyName: string,\n\t\ttermIds: string[],\n\t): Promise<void> {\n\t\tconst entryGroup = await this.resolveEntryTranslationGroup(collection, entryId);\n\t\tif (!entryGroup) return;\n\n\t\tconst groups: string[] = [];\n\t\tfor (const id of termIds) {\n\t\t\tconst group = await this.resolveTranslationGroup(id);\n\t\t\tif (group) groups.push(group);\n\t\t}\n\t\tconst newGroups = new Set(groups);\n\n\t\tconst current = await this.db\n\t\t\t.selectFrom(\"content_taxonomies\")\n\t\t\t.innerJoin(\"taxonomies\", \"taxonomies.translation_group\", \"content_taxonomies.taxonomy_id\")\n\t\t\t.select([\"content_taxonomies.taxonomy_id as group\"])\n\t\t\t.distinct()\n\t\t\t.where(\"content_taxonomies.collection\", \"=\", collection)\n\t\t\t.where(\"content_taxonomies.entry_id\", \"=\", entryGroup)\n\t\t\t.where(\"taxonomies.name\", \"=\", taxonomyName)\n\t\t\t.execute();\n\t\tconst currentGroups = new Set(current.map((r) => r.group));\n\n\t\tconst toRemove = [...currentGroups].filter((g) => !newGroups.has(g));\n\t\tconst toAdd = [...newGroups].filter((g) => !currentGroups.has(g));\n\t\ttry {\n\t\t\tif (toRemove.length > 0) await this.deleteAssignments(collection, entryGroup, toRemove);\n\t\t\tif (toAdd.length > 0) await this.insertAssignments(collection, entryGroup, toAdd);\n\t\t} finally {\n\t\t\tif (toRemove.length > 0 || toAdd.length > 0) invalidateTaxonomyObjectCache();\n\t\t}\n\t}\n\n\tasync clearEntryTerms(collection: string, entryId: string): Promise<number> {\n\t\tconst entryGroup = await this.resolveEntryTranslationGroup(collection, entryId);\n\t\tif (!entryGroup) return 0;\n\t\treturn this.clearEntryGroupTerms(collection, entryGroup);\n\t}\n\n\t/**\n\t * Remove every term assignment held by an entry translation group. Takes the\n\t * group rather than an entry id, so it still works after the group's last\n\t * row has been deleted.\n\t */\n\tasync clearEntryGroupTerms(collection: string, entryGroup: string): Promise<number> {\n\t\tconst result = await this.db\n\t\t\t.deleteFrom(\"content_taxonomies\")\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"entry_id\", \"=\", entryGroup)\n\t\t\t.executeTakeFirst();\n\t\tconst removed = Number(result.numDeletedRows ?? 0);\n\t\tif (removed > 0) invalidateTaxonomyObjectCache();\n\t\treturn removed;\n\t}\n\n\tprivate async resolveEntryTranslationGroup(\n\t\tcollection: string,\n\t\tentryIdOrGroup: string,\n\t): Promise<string | null> {\n\t\tvalidateIdentifier(collection, \"collection type\");\n\t\tconst tableName = `ec_${collection}`;\n\t\tconst result = await sql<{ translation_group: string }>`\n\t\t\tSELECT translation_group\n\t\t\tFROM ${sql.ref(tableName)}\n\t\t\tWHERE id = ${entryIdOrGroup} OR translation_group = ${entryIdOrGroup}\n\t\t\tLIMIT 1\n\t\t`.execute(this.db);\n\t\treturn result.rows[0]?.translation_group ?? null;\n\t}\n\n\t/**\n\t * Count content entries that use any translation of this term. Accepts\n\t * either a term id or a translation_group — we normalise to the group.\n\t *\n\t * Counts raw pivot rows regardless of the entry's status or deletion —\n\t * drafts and trashed entries are included. User-facing counts (admin term\n\t * list/get, public widget and term pages) use `fetchVisibleTermCounts`\n\t * from `taxonomies/term-counts.ts` instead, which counts only publicly\n\t * visible entries.\n\t */\n\tasync countEntriesWithTerm(termIdOrGroup: string): Promise<number> {\n\t\tconst group = await this.resolveTranslationGroup(termIdOrGroup);\n\t\tif (!group) return 0;\n\n\t\tconst result = await this.db\n\t\t\t.selectFrom(\"content_taxonomies\")\n\t\t\t.select((eb) => eb.fn.count(\"entry_id\").as(\"count\"))\n\t\t\t.where(\"taxonomy_id\", \"=\", group)\n\t\t\t.executeTakeFirst();\n\t\treturn Number(result?.count ?? 0);\n\t}\n\n\t/**\n\t * Resolve a parent reference (a row id or a translation_group) to the value\n\t * persisted in `parent_id`: the parent's translation_group, which is\n\t * locale-agnostic so the child stays nested in every locale. A\n\t * translation_group normally equals its anchor row's id, which satisfies the\n\t * self-FK on `parent_id`. If that anchor row is missing (a translation whose\n\t * anchor was deleted), fall back to the id we were given so we never write a\n\t * dangling FK value.\n\t */\n\tprivate async resolveParentRef(idOrGroup: string): Promise<string> {\n\t\tconst group = await this.resolveTranslationGroup(idOrGroup);\n\t\tif (!group) return idOrGroup;\n\t\tconst anchor = await this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.select(\"id\")\n\t\t\t.where(\"id\", \"=\", group)\n\t\t\t.executeTakeFirst();\n\t\treturn anchor ? group : idOrGroup;\n\t}\n\n\tprivate async resolveTranslationGroup(idOrGroup: string): Promise<string | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"taxonomies\")\n\t\t\t.select([\"translation_group\"])\n\t\t\t.where((eb) => eb.or([eb(\"id\", \"=\", idOrGroup), eb(\"translation_group\", \"=\", idOrGroup)]))\n\t\t\t.executeTakeFirst();\n\t\treturn row?.translation_group ?? null;\n\t}\n\n\t/**\n\t * Batch count entries for multiple taxonomy translation_groups.\n\t * Chunks the query at SQL_BATCH_SIZE to stay below D1's bind-parameter limit.\n\t * Returns a Map from translation_group to count.\n\t *\n\t * Pass translation_groups (not term ids) — `content_taxonomies.taxonomy_id`\n\t * stores the translation_group so a single assignment spans every locale.\n\t *\n\t * Like `countEntriesWithTerm`, this counts raw pivot rows regardless of\n\t * status/deletion; user-facing counts go through `fetchVisibleTermCounts`.\n\t */\n\tasync countEntriesForTerms(translationGroups: string[]): Promise<Map<string, number>> {\n\t\tif (translationGroups.length === 0) return new Map();\n\n\t\tconst counts = new Map<string, number>();\n\t\tfor (const chunk of chunks(translationGroups, SQL_BATCH_SIZE)) {\n\t\t\tconst rows = await this.db\n\t\t\t\t.selectFrom(\"content_taxonomies\")\n\t\t\t\t.select([\"taxonomy_id\", (eb) => eb.fn.count(\"entry_id\").as(\"count\")])\n\t\t\t\t.where(\"taxonomy_id\", \"in\", chunk)\n\t\t\t\t.groupBy(\"taxonomy_id\")\n\t\t\t\t.execute();\n\n\t\t\tfor (const row of rows) {\n\t\t\t\tcounts.set(row.taxonomy_id, Number(row.count || 0));\n\t\t\t}\n\t\t}\n\t\treturn counts;\n\t}\n\n\tprivate rowToTaxonomy(row: Selectable<TaxonomyTable>): Taxonomy {\n\t\treturn {\n\t\t\tid: row.id,\n\t\t\tname: row.name,\n\t\t\tslug: row.slug,\n\t\t\tlabel: row.label,\n\t\t\tparentId: row.parent_id,\n\t\t\tdata: row.data ? JSON.parse(row.data) : null,\n\t\t\tlocale: row.locale,\n\t\t\ttranslationGroup: row.translation_group,\n\t\t\tsortOrder: row.sort_order,\n\t\t};\n\t}\n}\n"],"mappings":"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"}
@@ -26,4 +26,4 @@ async function withTransaction(db, fn) {
26
26
 
27
27
  //#endregion
28
28
  export { withTransaction as t };
29
- //# sourceMappingURL=transaction-BVYIo_yu.mjs.map
29
+ //# sourceMappingURL=transaction-CkoQ5wqQ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-BVYIo_yu.mjs","names":[],"sources":["../src/database/transaction.ts"],"sourcesContent":["/**\n * Transaction utility for D1 compatibility\n *\n * D1 (via kysely-d1) does not support transactions. On workerd, the error\n * from beginTransaction() crosses request contexts and can hang the worker.\n *\n * This utility provides a drop-in replacement that runs the callback directly\n * against the db instance when transactions are unavailable. D1 is single-writer\n * so atomicity is not a concern for individual statements — multi-statement\n * atomicity is lost, but that's a known D1 limitation.\n *\n * Usage:\n * import { withTransaction } from \"../database/transaction.js\";\n * const result = await withTransaction(db, async (trx) => { ... });\n */\n\nimport type { Kysely, Transaction } from \"kysely\";\n\n/**\n * Run a callback inside a transaction if supported, or directly if not.\n *\n * Probes the database once on first call to determine if transactions work.\n * The result is cached for the lifetime of the process/worker.\n */\nlet transactionsSupported: boolean | null = null;\nconst TRANSACTIONS_NOT_SUPPORTED_RE = /transactions are not supported/i;\n\nexport async function withTransaction<DB, T>(\n\tdb: Kysely<DB>,\n\tfn: (trx: Kysely<DB> | Transaction<DB>) => Promise<T>,\n): Promise<T> {\n\t// Nested call: `db` is already a transaction. Kysely rejects calling\n\t// `.transaction()` on a `Transaction` outright (a hard error, not the\n\t// \"transactions are not supported\" message the probe below expects), so a\n\t// naive nested `withTransaction(trx, ...)` call would always throw on any\n\t// dialect that supports real transactions. Running `fn` directly against\n\t// the existing transaction makes the nested work part of the enclosing\n\t// one — exactly what nested callers (e.g. a handler composing two\n\t// repositories that each self-wrap in `withTransaction`) want: the whole\n\t// chain commits or rolls back together.\n\tif (db.isTransaction) {\n\t\treturn fn(db);\n\t}\n\t// Fast path: we already know transactions work\n\tif (transactionsSupported === true) {\n\t\treturn db.transaction().execute(fn);\n\t}\n\n\t// Fast path: we already know they don't\n\tif (transactionsSupported === false) {\n\t\treturn fn(db);\n\t}\n\n\t// First call: probe\n\ttry {\n\t\tconst result = await db.transaction().execute(fn);\n\t\ttransactionsSupported = true;\n\t\treturn result;\n\t} catch (error) {\n\t\tif (error instanceof Error && TRANSACTIONS_NOT_SUPPORTED_RE.test(error.message)) {\n\t\t\ttransactionsSupported = false;\n\t\t\treturn fn(db);\n\t\t}\n\t\tthrow error;\n\t}\n}\n"],"mappings":";;;;;;;AAwBA,IAAI,wBAAwC;AAC5C,MAAM,gCAAgC;AAEtC,eAAsB,gBACrB,IACA,IACa;AAUb,KAAI,GAAG,cACN,QAAO,GAAG,GAAG;AAGd,KAAI,0BAA0B,KAC7B,QAAO,GAAG,aAAa,CAAC,QAAQ,GAAG;AAIpC,KAAI,0BAA0B,MAC7B,QAAO,GAAG,GAAG;AAId,KAAI;EACH,MAAM,SAAS,MAAM,GAAG,aAAa,CAAC,QAAQ,GAAG;AACjD,0BAAwB;AACxB,SAAO;UACC,OAAO;AACf,MAAI,iBAAiB,SAAS,8BAA8B,KAAK,MAAM,QAAQ,EAAE;AAChF,2BAAwB;AACxB,UAAO,GAAG,GAAG;;AAEd,QAAM"}
1
+ {"version":3,"file":"transaction-CkoQ5wqQ.mjs","names":[],"sources":["../src/database/transaction.ts"],"sourcesContent":["/**\n * Transaction utility for D1 compatibility\n *\n * D1 (via kysely-d1) does not support transactions. On workerd, the error\n * from beginTransaction() crosses request contexts and can hang the worker.\n *\n * This utility provides a drop-in replacement that runs the callback directly\n * against the db instance when transactions are unavailable. D1 is single-writer\n * so atomicity is not a concern for individual statements — multi-statement\n * atomicity is lost, but that's a known D1 limitation.\n *\n * Usage:\n * import { withTransaction } from \"../database/transaction.js\";\n * const result = await withTransaction(db, async (trx) => { ... });\n */\n\nimport type { Kysely, Transaction } from \"kysely\";\n\n/**\n * Run a callback inside a transaction if supported, or directly if not.\n *\n * Probes the database once on first call to determine if transactions work.\n * The result is cached for the lifetime of the process/worker.\n */\nlet transactionsSupported: boolean | null = null;\nconst TRANSACTIONS_NOT_SUPPORTED_RE = /transactions are not supported/i;\n\nexport async function withTransaction<DB, T>(\n\tdb: Kysely<DB>,\n\tfn: (trx: Kysely<DB> | Transaction<DB>) => Promise<T>,\n): Promise<T> {\n\t// Nested call: `db` is already a transaction. Kysely rejects calling\n\t// `.transaction()` on a `Transaction` outright (a hard error, not the\n\t// \"transactions are not supported\" message the probe below expects), so a\n\t// naive nested `withTransaction(trx, ...)` call would always throw on any\n\t// dialect that supports real transactions. Running `fn` directly against\n\t// the existing transaction makes the nested work part of the enclosing\n\t// one — exactly what nested callers (e.g. a handler composing two\n\t// repositories that each self-wrap in `withTransaction`) want: the whole\n\t// chain commits or rolls back together.\n\tif (db.isTransaction) {\n\t\treturn fn(db);\n\t}\n\t// Fast path: we already know transactions work\n\tif (transactionsSupported === true) {\n\t\treturn db.transaction().execute(fn);\n\t}\n\n\t// Fast path: we already know they don't\n\tif (transactionsSupported === false) {\n\t\treturn fn(db);\n\t}\n\n\t// First call: probe\n\ttry {\n\t\tconst result = await db.transaction().execute(fn);\n\t\ttransactionsSupported = true;\n\t\treturn result;\n\t} catch (error) {\n\t\tif (error instanceof Error && TRANSACTIONS_NOT_SUPPORTED_RE.test(error.message)) {\n\t\t\ttransactionsSupported = false;\n\t\t\treturn fn(db);\n\t\t}\n\t\tthrow error;\n\t}\n}\n"],"mappings":";;;;;;;AAwBA,IAAI,wBAAwC;AAC5C,MAAM,gCAAgC;AAEtC,eAAsB,gBACrB,IACA,IACa;AAUb,KAAI,GAAG,cACN,QAAO,GAAG,GAAG;AAGd,KAAI,0BAA0B,KAC7B,QAAO,GAAG,aAAa,CAAC,QAAQ,GAAG;AAIpC,KAAI,0BAA0B,MAC7B,QAAO,GAAG,GAAG;AAId,KAAI;EACH,MAAM,SAAS,MAAM,GAAG,aAAa,CAAC,QAAQ,GAAG;AACjD,0BAAwB;AACxB,SAAO;UACC,OAAO;AACf,MAAI,iBAAiB,SAAS,8BAA8B,KAAK,MAAM,QAAQ,EAAE;AAChF,2BAAwB;AACxB,UAAO,GAAG,GAAG;;AAEd,QAAM"}
@@ -1,4 +1,4 @@
1
- import { d as IMPORT_STATES, l as EXPORT_STATES, t as APPROVAL_STATUSES } from "./approvals-D-m6wvGl.mjs";
1
+ import { d as IMPORT_STATES, l as EXPORT_STATES, t as APPROVAL_STATUSES } from "./approvals-DTtYSB27.mjs";
2
2
  import { a as siteImportDecisionsInputSchema, o as siteImportPlanSchema } from "./plan-CCoqxNoU.mjs";
3
3
  import { z } from "zod";
4
4
 
@@ -163,4 +163,4 @@ const transferImportReceiptResponseSchema = z.object({ receipt: transferImportRe
163
163
 
164
164
  //#endregion
165
165
  export { transferOperationListResponseSchema as _, transferCapabilitiesSchema as a, transferFileUploadResponseSchema as c, transferImportCreateResponseSchema as d, transferImportExecuteBody as f, transferMissingFilesResponseSchema as g, transferImportStatusResponseSchema as h, transferApprovalResponseSchema as i, transferImportAnalyzeBody as l, transferImportReceiptResponseSchema as m, transferApprovalListQuery as n, transferExportCreateBody as o, transferImportPlanResponseSchema as p, transferApprovalListResponseSchema as r, transferExportCreateResponseSchema as s, transferAdvanceResponseSchema as t, transferImportAnalyzeResponseSchema as u, transferOperationResponseSchema as v, transferPaginationQuery as y };
166
- //# sourceMappingURL=transfer-WmWiR3xf.mjs.map
166
+ //# sourceMappingURL=transfer-BbKfufJ4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"transfer-WmWiR3xf.mjs","names":[],"sources":["../src/api/schemas/transfer.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n\tsiteImportDecisionsInputSchema,\n\tsiteImportPlanSchema,\n} from \"../../transfer/format/plan.js\";\nimport { APPROVAL_STATUSES } from \"../../transfer/ops/approvals.js\";\nimport { EXPORT_STATES, IMPORT_STATES } from \"../../transfer/ops/states.js\";\n\nconst sha256DigestSchema = z.string().regex(/^sha256:[0-9a-f]{64}$/);\n\nexport const transferPaginationQuery = z.object({\n\tcursor: z.string().min(1).max(2048).optional().meta({\n\t\tdescription: \"Opaque cursor from the previous page's `nextCursor`\",\n\t}),\n\tlimit: z.coerce.number().int().min(1).max(100).optional().default(50).meta({\n\t\tdescription: \"Maximum number of items to return (1-100, default 50)\",\n\t}),\n});\n\nexport const transferApprovalListQuery = transferPaginationQuery.extend({\n\tstatus: z\n\t\t.enum(APPROVAL_STATUSES)\n\t\t.optional()\n\t\t.meta({ description: \"Only approvals in this status\" }),\n});\n\nexport const transferImportAnalyzeBody = z\n\t.object({\n\t\tdecisions: siteImportDecisionsInputSchema.optional().meta({\n\t\t\tdescription:\n\t\t\t\t\"Principal mappings and site title/tagline choices. Applied once analysis has produced a plan; omitted values keep the plan's defaults.\",\n\t\t}),\n\t})\n\t.meta({ id: \"TransferImportAnalyzeBody\" });\n\nexport const transferOperationSchema = z\n\t.object({\n\t\tid: z.string(),\n\t\tkind: z.enum([\"export\", \"import\"]),\n\t\tstate: z.union([z.enum(EXPORT_STATES), z.enum(IMPORT_STATES)]),\n\t\tstage: z.string().nullable(),\n\t\tcursor: z.unknown().nullable(),\n\t\tprogress: z\n\t\t\t.object({\n\t\t\t\tdone: z.number().int().min(0),\n\t\t\t\ttotal: z.number().int().min(0),\n\t\t\t\trecords: z.number().int().min(0).optional().meta({\n\t\t\t\t\tdescription: \"Records an export has written so far\",\n\t\t\t\t}),\n\t\t\t\tbytesDone: z.number().int().min(0).optional(),\n\t\t\t\tbytesTotal: z.number().int().min(0).optional(),\n\t\t\t})\n\t\t\t.nullable(),\n\t\toptions: z.unknown(),\n\t\tidempotencyKey: z.string().nullable(),\n\t\tpackageDigest: sha256DigestSchema.nullable(),\n\t\tplanDigest: sha256DigestSchema.nullable(),\n\t\toriginSiteId: z.string().nullable(),\n\t\treceipt: z.unknown().nullable(),\n\t\terrorCode: z.string().nullable(),\n\t\terrorDetail: z.record(z.string(), z.unknown()).nullable(),\n\t\twriteEpoch: z.number().int(),\n\t\tattemptCount: z.number().int(),\n\t\tleaseExpiresAt: z.string().nullable(),\n\t\truntimeGeneration: z.number().int(),\n\t\tcancelRequestedAt: z.string().nullable(),\n\t\tmutationStartedAt: z.string().nullable(),\n\t\tcreatedBy: z.string(),\n\t\tcreatedAt: z.string(),\n\t\tupdatedAt: z.string(),\n\t\tcompletedAt: z.string().nullable(),\n\t\texpiresAt: z.string().nullable(),\n\t\tstagingCollectedAt: z.string().nullable(),\n\t})\n\t.meta({ id: \"TransferOperation\" });\n\nexport const transferOperationResponseSchema = z\n\t.object({ operation: transferOperationSchema })\n\t.meta({ id: \"TransferOperationResponse\" });\n\nexport const transferOperationListResponseSchema = z\n\t.object({\n\t\titems: z.array(transferOperationSchema),\n\t\tnextCursor: z.string().optional(),\n\t})\n\t.meta({ id: \"TransferOperationListResponse\" });\n\nexport const transferMissingFileSchema = z\n\t.object({\n\t\tpath: z.string(),\n\t\tbytes: z.number().int().min(0),\n\t\tsha256: z.string().regex(/^[0-9a-f]{64}$/),\n\t})\n\t.meta({ id: \"TransferMissingFile\" });\n\nexport const transferMissingFilesResponseSchema = z\n\t.object({\n\t\titems: z.array(transferMissingFileSchema),\n\t\tnextCursor: z.string().optional(),\n\t})\n\t.meta({ id: \"TransferMissingFilesResponse\" });\n\nexport const transferImportCreateResponseSchema = z\n\t.object({\n\t\toperation: transferOperationSchema,\n\t\tcreated: z.boolean(),\n\t\tmissing: transferMissingFilesResponseSchema,\n\t})\n\t.meta({ id: \"TransferImportCreateResponse\" });\n\nexport const transferImportStatusResponseSchema = z\n\t.object({\n\t\toperation: transferOperationSchema,\n\t\tfiles: z.object({\n\t\t\tdeclared: z.number().int().min(0),\n\t\t\tverified: z.number().int().min(0),\n\t\t}),\n\t})\n\t.meta({ id: \"TransferImportStatusResponse\" });\n\nexport const transferFileUploadResponseSchema = z\n\t.object({\n\t\tpath: z.string(),\n\t\tbytes: z.number().int().min(0),\n\t\talreadyVerified: z.boolean(),\n\t\tremaining: z.number().int().min(0),\n\t})\n\t.meta({ id: \"TransferFileUploadResponse\" });\n\nexport const transferImportAnalyzeResponseSchema = z\n\t.object({\n\t\toperation: transferOperationSchema,\n\t\tplan: siteImportPlanSchema.optional(),\n\t\tplanDigest: sha256DigestSchema.optional(),\n\t\tnextRequestInMs: z.number().int().min(0).nullable(),\n\t})\n\t.meta({ id: \"TransferImportAnalyzeResponse\" });\n\nexport const transferImportPlanResponseSchema = z\n\t.object({\n\t\tplan: siteImportPlanSchema,\n\t\tplanDigest: sha256DigestSchema,\n\t})\n\t.meta({ id: \"TransferImportPlanResponse\" });\n\nexport const transferCapabilitiesSchema = z\n\t.object({\n\t\tformatVersions: z.array(z.string()),\n\t\tfeatures: z.array(z.string()),\n\t\toptionalFeatures: z.array(z.string()),\n\t\tlimits: z.object({\n\t\t\tmanifestBytes: z.number().int(),\n\t\t\trecordLineBytes: z.number().int(),\n\t\t\tchunkBytes: z.number().int(),\n\t\t\tchunkRecords: z.number().int(),\n\t\t\ttotalRecords: z.number().int(),\n\t\t\ttotalFiles: z.number().int(),\n\t\t\tindexChunks: z.number().int(),\n\t\t\tjsonDepth: z.number().int(),\n\t\t\tmaxBlobBytes: z.number().int(),\n\t\t}),\n\t\tportableDomain: z.object({\n\t\t\tempty: z.boolean(),\n\t\t\tblockers: z.array(z.record(z.string(), z.string())),\n\t\t\tseededScaffold: z.array(z.record(z.string(), z.string())),\n\t\t}),\n\t})\n\t.meta({ id: \"TransferCapabilities\" });\n\nexport const transferApprovalSchema = z\n\t.object({\n\t\tid: z.string(),\n\t\tstatus: z.enum(APPROVAL_STATUSES),\n\t\taction: z.enum([\"export\", \"import\"]),\n\t\tuserId: z.string(),\n\t\trequestedByTokenId: z.string().nullable(),\n\t\tapprovedBy: z.string().nullable(),\n\t\toperationId: z.string().nullable(),\n\t\tparamsDigest: sha256DigestSchema.nullable(),\n\t\tpackageDigest: sha256DigestSchema.nullable(),\n\t\tplanDigest: sha256DigestSchema.nullable(),\n\t\texpiresAt: z.string(),\n\t\tcreatedAt: z.string(),\n\t\tdecidedAt: z.string().nullable(),\n\t\tconsumedAt: z.string().nullable(),\n\t})\n\t.meta({ id: \"TransferApproval\" });\n\nexport const transferApprovalResponseSchema = z\n\t.object({ approval: transferApprovalSchema })\n\t.meta({ id: \"TransferApprovalResponse\" });\n\nexport const transferApprovalListResponseSchema = z\n\t.object({\n\t\titems: z.array(transferApprovalSchema),\n\t\tnextCursor: z.string().optional(),\n\t})\n\t.meta({ id: \"TransferApprovalListResponse\" });\n\nexport const transferImportExecuteBody = z\n\t.object({\n\t\tpackageDigest: sha256DigestSchema,\n\t\tplanDigest: sha256DigestSchema,\n\t})\n\t.meta({ id: \"TransferImportExecuteBody\" });\n\nexport const transferExportCreateBody = z\n\t.strictObject({\n\t\tcomments: z.boolean().optional().meta({\n\t\t\tdescription: \"Include comments and reactions (default true)\",\n\t\t}),\n\t})\n\t.meta({ id: \"TransferExportCreateBody\" });\n\nexport const transferExportCreateResponseSchema = z\n\t.object({ operation: transferOperationSchema, created: z.boolean() })\n\t.meta({ id: \"TransferExportCreateResponse\" });\n\nexport const transferAdvanceResponseSchema = z\n\t.object({\n\t\toperation: transferOperationSchema,\n\t\tnextRequestInMs: z.number().int().min(0).nullable(),\n\t})\n\t.meta({ id: \"TransferAdvanceResponse\" });\n\nexport const transferImportReceiptSchema = z\n\t.object({\n\t\toperationId: z.string(),\n\t\tpackageDigest: sha256DigestSchema,\n\t\tplanDigest: sha256DigestSchema,\n\t\ttargetSiteId: z.string(),\n\t\toriginSiteId: z.string(),\n\t\tformatVersion: z.string(),\n\t\timporterEmDashVersion: z.string(),\n\t\tcompletedAt: z.string(),\n\t\tlogicalDigest: sha256DigestSchema,\n\t\tcounts: z.record(z.string(), z.number().int().min(0)),\n\t\twarnings: z.array(z.object({ code: z.string(), message: z.string() })),\n\t\tverification: z.literal(\"verified\"),\n\t\treceiptDigest: sha256DigestSchema.meta({\n\t\t\tdescription: \"Digest of the canonical JSON of every other receipt field\",\n\t\t}),\n\t})\n\t.meta({ id: \"TransferImportReceipt\" });\n\nexport const transferImportReceiptResponseSchema = z\n\t.object({ receipt: transferImportReceiptSchema })\n\t.meta({ id: \"TransferImportReceiptResponse\" });\n"],"mappings":"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"}
1
+ {"version":3,"file":"transfer-BbKfufJ4.mjs","names":[],"sources":["../src/api/schemas/transfer.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n\tsiteImportDecisionsInputSchema,\n\tsiteImportPlanSchema,\n} from \"../../transfer/format/plan.js\";\nimport { APPROVAL_STATUSES } from \"../../transfer/ops/approvals.js\";\nimport { EXPORT_STATES, IMPORT_STATES } from \"../../transfer/ops/states.js\";\n\nconst sha256DigestSchema = z.string().regex(/^sha256:[0-9a-f]{64}$/);\n\nexport const transferPaginationQuery = z.object({\n\tcursor: z.string().min(1).max(2048).optional().meta({\n\t\tdescription: \"Opaque cursor from the previous page's `nextCursor`\",\n\t}),\n\tlimit: z.coerce.number().int().min(1).max(100).optional().default(50).meta({\n\t\tdescription: \"Maximum number of items to return (1-100, default 50)\",\n\t}),\n});\n\nexport const transferApprovalListQuery = transferPaginationQuery.extend({\n\tstatus: z\n\t\t.enum(APPROVAL_STATUSES)\n\t\t.optional()\n\t\t.meta({ description: \"Only approvals in this status\" }),\n});\n\nexport const transferImportAnalyzeBody = z\n\t.object({\n\t\tdecisions: siteImportDecisionsInputSchema.optional().meta({\n\t\t\tdescription:\n\t\t\t\t\"Principal mappings and site title/tagline choices. Applied once analysis has produced a plan; omitted values keep the plan's defaults.\",\n\t\t}),\n\t})\n\t.meta({ id: \"TransferImportAnalyzeBody\" });\n\nexport const transferOperationSchema = z\n\t.object({\n\t\tid: z.string(),\n\t\tkind: z.enum([\"export\", \"import\"]),\n\t\tstate: z.union([z.enum(EXPORT_STATES), z.enum(IMPORT_STATES)]),\n\t\tstage: z.string().nullable(),\n\t\tcursor: z.unknown().nullable(),\n\t\tprogress: z\n\t\t\t.object({\n\t\t\t\tdone: z.number().int().min(0),\n\t\t\t\ttotal: z.number().int().min(0),\n\t\t\t\trecords: z.number().int().min(0).optional().meta({\n\t\t\t\t\tdescription: \"Records an export has written so far\",\n\t\t\t\t}),\n\t\t\t\tbytesDone: z.number().int().min(0).optional(),\n\t\t\t\tbytesTotal: z.number().int().min(0).optional(),\n\t\t\t})\n\t\t\t.nullable(),\n\t\toptions: z.unknown(),\n\t\tidempotencyKey: z.string().nullable(),\n\t\tpackageDigest: sha256DigestSchema.nullable(),\n\t\tplanDigest: sha256DigestSchema.nullable(),\n\t\toriginSiteId: z.string().nullable(),\n\t\treceipt: z.unknown().nullable(),\n\t\terrorCode: z.string().nullable(),\n\t\terrorDetail: z.record(z.string(), z.unknown()).nullable(),\n\t\twriteEpoch: z.number().int(),\n\t\tattemptCount: z.number().int(),\n\t\tleaseExpiresAt: z.string().nullable(),\n\t\truntimeGeneration: z.number().int(),\n\t\tcancelRequestedAt: z.string().nullable(),\n\t\tmutationStartedAt: z.string().nullable(),\n\t\tcreatedBy: z.string(),\n\t\tcreatedAt: z.string(),\n\t\tupdatedAt: z.string(),\n\t\tcompletedAt: z.string().nullable(),\n\t\texpiresAt: z.string().nullable(),\n\t\tstagingCollectedAt: z.string().nullable(),\n\t})\n\t.meta({ id: \"TransferOperation\" });\n\nexport const transferOperationResponseSchema = z\n\t.object({ operation: transferOperationSchema })\n\t.meta({ id: \"TransferOperationResponse\" });\n\nexport const transferOperationListResponseSchema = z\n\t.object({\n\t\titems: z.array(transferOperationSchema),\n\t\tnextCursor: z.string().optional(),\n\t})\n\t.meta({ id: \"TransferOperationListResponse\" });\n\nexport const transferMissingFileSchema = z\n\t.object({\n\t\tpath: z.string(),\n\t\tbytes: z.number().int().min(0),\n\t\tsha256: z.string().regex(/^[0-9a-f]{64}$/),\n\t})\n\t.meta({ id: \"TransferMissingFile\" });\n\nexport const transferMissingFilesResponseSchema = z\n\t.object({\n\t\titems: z.array(transferMissingFileSchema),\n\t\tnextCursor: z.string().optional(),\n\t})\n\t.meta({ id: \"TransferMissingFilesResponse\" });\n\nexport const transferImportCreateResponseSchema = z\n\t.object({\n\t\toperation: transferOperationSchema,\n\t\tcreated: z.boolean(),\n\t\tmissing: transferMissingFilesResponseSchema,\n\t})\n\t.meta({ id: \"TransferImportCreateResponse\" });\n\nexport const transferImportStatusResponseSchema = z\n\t.object({\n\t\toperation: transferOperationSchema,\n\t\tfiles: z.object({\n\t\t\tdeclared: z.number().int().min(0),\n\t\t\tverified: z.number().int().min(0),\n\t\t}),\n\t})\n\t.meta({ id: \"TransferImportStatusResponse\" });\n\nexport const transferFileUploadResponseSchema = z\n\t.object({\n\t\tpath: z.string(),\n\t\tbytes: z.number().int().min(0),\n\t\talreadyVerified: z.boolean(),\n\t\tremaining: z.number().int().min(0),\n\t})\n\t.meta({ id: \"TransferFileUploadResponse\" });\n\nexport const transferImportAnalyzeResponseSchema = z\n\t.object({\n\t\toperation: transferOperationSchema,\n\t\tplan: siteImportPlanSchema.optional(),\n\t\tplanDigest: sha256DigestSchema.optional(),\n\t\tnextRequestInMs: z.number().int().min(0).nullable(),\n\t})\n\t.meta({ id: \"TransferImportAnalyzeResponse\" });\n\nexport const transferImportPlanResponseSchema = z\n\t.object({\n\t\tplan: siteImportPlanSchema,\n\t\tplanDigest: sha256DigestSchema,\n\t})\n\t.meta({ id: \"TransferImportPlanResponse\" });\n\nexport const transferCapabilitiesSchema = z\n\t.object({\n\t\tformatVersions: z.array(z.string()),\n\t\tfeatures: z.array(z.string()),\n\t\toptionalFeatures: z.array(z.string()),\n\t\tlimits: z.object({\n\t\t\tmanifestBytes: z.number().int(),\n\t\t\trecordLineBytes: z.number().int(),\n\t\t\tchunkBytes: z.number().int(),\n\t\t\tchunkRecords: z.number().int(),\n\t\t\ttotalRecords: z.number().int(),\n\t\t\ttotalFiles: z.number().int(),\n\t\t\tindexChunks: z.number().int(),\n\t\t\tjsonDepth: z.number().int(),\n\t\t\tmaxBlobBytes: z.number().int(),\n\t\t}),\n\t\tportableDomain: z.object({\n\t\t\tempty: z.boolean(),\n\t\t\tblockers: z.array(z.record(z.string(), z.string())),\n\t\t\tseededScaffold: z.array(z.record(z.string(), z.string())),\n\t\t}),\n\t})\n\t.meta({ id: \"TransferCapabilities\" });\n\nexport const transferApprovalSchema = z\n\t.object({\n\t\tid: z.string(),\n\t\tstatus: z.enum(APPROVAL_STATUSES),\n\t\taction: z.enum([\"export\", \"import\"]),\n\t\tuserId: z.string(),\n\t\trequestedByTokenId: z.string().nullable(),\n\t\tapprovedBy: z.string().nullable(),\n\t\toperationId: z.string().nullable(),\n\t\tparamsDigest: sha256DigestSchema.nullable(),\n\t\tpackageDigest: sha256DigestSchema.nullable(),\n\t\tplanDigest: sha256DigestSchema.nullable(),\n\t\texpiresAt: z.string(),\n\t\tcreatedAt: z.string(),\n\t\tdecidedAt: z.string().nullable(),\n\t\tconsumedAt: z.string().nullable(),\n\t})\n\t.meta({ id: \"TransferApproval\" });\n\nexport const transferApprovalResponseSchema = z\n\t.object({ approval: transferApprovalSchema })\n\t.meta({ id: \"TransferApprovalResponse\" });\n\nexport const transferApprovalListResponseSchema = z\n\t.object({\n\t\titems: z.array(transferApprovalSchema),\n\t\tnextCursor: z.string().optional(),\n\t})\n\t.meta({ id: \"TransferApprovalListResponse\" });\n\nexport const transferImportExecuteBody = z\n\t.object({\n\t\tpackageDigest: sha256DigestSchema,\n\t\tplanDigest: sha256DigestSchema,\n\t})\n\t.meta({ id: \"TransferImportExecuteBody\" });\n\nexport const transferExportCreateBody = z\n\t.strictObject({\n\t\tcomments: z.boolean().optional().meta({\n\t\t\tdescription: \"Include comments and reactions (default true)\",\n\t\t}),\n\t})\n\t.meta({ id: \"TransferExportCreateBody\" });\n\nexport const transferExportCreateResponseSchema = z\n\t.object({ operation: transferOperationSchema, created: z.boolean() })\n\t.meta({ id: \"TransferExportCreateResponse\" });\n\nexport const transferAdvanceResponseSchema = z\n\t.object({\n\t\toperation: transferOperationSchema,\n\t\tnextRequestInMs: z.number().int().min(0).nullable(),\n\t})\n\t.meta({ id: \"TransferAdvanceResponse\" });\n\nexport const transferImportReceiptSchema = z\n\t.object({\n\t\toperationId: z.string(),\n\t\tpackageDigest: sha256DigestSchema,\n\t\tplanDigest: sha256DigestSchema,\n\t\ttargetSiteId: z.string(),\n\t\toriginSiteId: z.string(),\n\t\tformatVersion: z.string(),\n\t\timporterEmDashVersion: z.string(),\n\t\tcompletedAt: z.string(),\n\t\tlogicalDigest: sha256DigestSchema,\n\t\tcounts: z.record(z.string(), z.number().int().min(0)),\n\t\twarnings: z.array(z.object({ code: z.string(), message: z.string() })),\n\t\tverification: z.literal(\"verified\"),\n\t\treceiptDigest: sha256DigestSchema.meta({\n\t\t\tdescription: \"Digest of the canonical JSON of every other receipt field\",\n\t\t}),\n\t})\n\t.meta({ id: \"TransferImportReceipt\" });\n\nexport const transferImportReceiptResponseSchema = z\n\t.object({ receipt: transferImportReceiptSchema })\n\t.meta({ id: \"TransferImportReceiptResponse\" });\n"],"mappings":"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"}
@@ -1,48 +1,49 @@
1
- import { n as isMissingTableError } from "./db-errors-CBD5yMro.mjs";
1
+ import { r as isMissingTableError } from "./db-errors-unnO6yiZ.mjs";
2
2
  import { t as validateIdentifier } from "./validate-DANX1-Qi.mjs";
3
- import { d as isSqlite, p as listTableColumns, s as detectDialect, u as isPostgres } from "./dialect-helpers-7_IqPdh9.mjs";
4
- import { a as isValidLocaleCode, r as getI18nConfig } from "./config-CvmjJcVw.mjs";
3
+ import { d as isSqlite, p as listTableColumns, s as detectDialect, u as isPostgres } from "./dialect-helpers-B1XN2HGB.mjs";
4
+ import { c as isValidLocaleCode, r as getI18nConfig } from "./config-Cs_AwWXI.mjs";
5
5
  import { getRequestContext } from "./request-context.mjs";
6
6
  import { t as OptionsRepository } from "./options-DhrI7eMv.mjs";
7
- import { d as invalidateMenuObjectCache, f as invalidateObjectCache, l as invalidateCollectionCache, t as CacheNamespace } from "./object-cache-Bo6DGaC9.mjs";
8
- import { d as RESERVED_FIELD_SLUGS, m as isStoragelessFieldRow, n as FIELD_TYPES, r as FIELD_TYPE_TO_COLUMN, t as BYLINE_FIELD_TYPES } from "./types-BGmQ0uXs.mjs";
9
- import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-xC4UD5-S.mjs";
10
- import { r as isSafeUrlFieldWriteValue } from "./url-Dn3IStq8.mjs";
11
- import { c as decodeCursor, i as InvalidCursorError, l as encodeCursor, r as EmDashValidationError } from "./types-D2NEXtgB.mjs";
12
- import { t as withTransaction } from "./transaction-BVYIo_yu.mjs";
13
- import { t as MediaRepository } from "./media-Bws9f18T.mjs";
14
- import { t as AuditRepository } from "./audit-_gieLVGU.mjs";
15
- import { t as isSiteRelativeDestination } from "./destination-r2zIAZ2S.mjs";
16
- import { a as validateDestinationParams, o as validatePattern, r as isPattern } from "./patterns-CMNnYCgf.mjs";
17
- import { r as MAX_SELECT_OPTIONS } from "./byline-registry-dvt4N3xV.mjs";
18
- import { r as coerceFieldValue } from "./byline-BR1qhyiw.mjs";
7
+ import { f as invalidateMenuObjectCache, g as invalidateWidgetObjectCache, p as invalidateObjectCache, t as CacheNamespace, u as invalidateCollectionCache } from "./object-cache-DmKr09La.mjs";
8
+ import { d as RESERVED_FIELD_SLUGS, m as isStoragelessFieldRow, n as FIELD_TYPES, r as FIELD_TYPE_TO_COLUMN, t as BYLINE_FIELD_TYPES } from "./types-C_asjp1J.mjs";
9
+ import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-DiW8VMwz.mjs";
10
+ import { r as isSafeUrlFieldWriteValue } from "./url-DTfGDJhI.mjs";
11
+ import { a as InvalidCursorError, i as EmDashValidationError, l as decodeCursor, u as encodeCursor } from "./types-DwhEvIVb.mjs";
12
+ import { t as withTransaction } from "./transaction-CkoQ5wqQ.mjs";
13
+ import { t as MediaRepository } from "./media-DepNLhPq.mjs";
14
+ import { t as AuditRepository } from "./audit-B8XE-0UV.mjs";
15
+ import { t as isSiteRelativeDestination } from "./destination-DR3IHjmy.mjs";
16
+ import { a as validateDestinationParams, o as validatePattern, r as isPattern } from "./patterns-CryGz_EV.mjs";
17
+ import { r as MAX_SELECT_OPTIONS } from "./byline-registry-BhzpO41z.mjs";
18
+ import { r as coerceFieldValue } from "./byline-DHJS-GGb.mjs";
19
19
  import { t as SEARCH_TOKENIZERS } from "./types-Cj0_yZkn.mjs";
20
- import { t as FTSManager } from "./fts-manager-Beg3e4bI.mjs";
21
- import { m as parseTaxonomyCollections } from "./loader-CswroUbe.mjs";
22
- import { i as resetRegisteredCollectionsCache } from "./collection-slugs-cache-e09QeJQt.mjs";
23
- import { C as getPortableTableSpecForKind, E as processDueMediaUsageCollectionDeletions, H as markContentMediaUsageCollectionStale, R as fingerprintBlockFields, S as contentColumnSpecs, _ as CONTENT_TABLE_PREFIX, a as insertRows, b as assertLoadedColumnCoverage, c as encodeRecord, d as recordCodecs, f as decodeContentRow, g as CONTENT_TABLE_COLUMNS, h as selectExportedColumns, i as estimateStatements, l as encodeValue, m as encodeColumn, n as SchemaRegistry, o as selectByKeys, p as decodeRow, s as updateColumns, t as SchemaError, u as firstDifference, v as PORTABLE_TABLES, x as codecForColumnType, y as assertColumnCoverage, z as validateBlockFields } from "./registry-TUVaid9Z.mjs";
20
+ import { t as FTSManager } from "./fts-manager-6861qcwk.mjs";
21
+ import { y as parseTaxonomyCollections } from "./loader-DhnedqY4.mjs";
22
+ import { i as resetRegisteredCollectionsCache } from "./collection-slugs-cache-DIrLjqH-.mjs";
23
+ import { n as MediaUsageCollectionDeletionRepository } from "./media-usage-work-BCK2J-v_.mjs";
24
+ import { B as validateBlockFields, C as getPortableTableSpecForKind, D as processMediaUsageCollectionDeletion, E as processDueMediaUsageCollectionDeletions, S as contentColumnSpecs, U as markContentMediaUsageCollectionStale, _ as CONTENT_TABLE_PREFIX, a as insertRows, b as assertLoadedColumnCoverage, c as encodeRecord, d as recordCodecs, f as decodeContentRow, g as CONTENT_TABLE_COLUMNS, h as selectExportedColumns, i as estimateStatements, l as encodeValue, m as encodeColumn, n as SchemaRegistry, o as selectByKeys, p as decodeRow, s as updateColumns, t as SchemaError, u as firstDifference, v as PORTABLE_TABLES, x as codecForColumnType, y as assertColumnCoverage, z as fingerprintBlockFields } from "./registry-B0-O575m.mjs";
24
25
  import { n as computeContentHash, t as MAX_CONTENT_HASH_BYTES } from "./hash-BJaeek87.mjs";
25
- import { s as invalidateSchemaCache } from "./zod-generator-D0JKy94C.mjs";
26
+ import { s as invalidateSchemaCache } from "./zod-generator--nlM0930.mjs";
26
27
  import { r as isTransferError, t as TransferError } from "./errors-B4f4It-2.mjs";
27
28
  import { a as parseCanonicalJson, i as measureJsonDepth, n as canonicalJson, o as TRANSFER_LIMITS, r as compareUtf16, s as rowsPerInsert, t as CanonicalJsonError } from "./canonical-BudtH-Fx.mjs";
28
29
  import { c as planDigest, d as sha256Hex, i as createSha256, n as chunkLogicalSha256, o as logicalDigest, r as createHashingStream, s as packageDigest, t as canonicalDigest, u as recordSha256 } from "./digest-DJ1tHCgy.mjs";
29
30
  import { t as compileUrlPattern } from "./url-pattern-QATUE_rv.mjs";
30
- import { n as VERSION } from "./version-DHmGpcch.mjs";
31
+ import { n as VERSION } from "./version-Bu6Nlbb5.mjs";
31
32
  import { a as settingMediaIds, n as PORTABLE_SETTING_NAMES, r as POST_IMPORT_OPTION_RESETS, t as DECIDED_SETTING_NAMES } from "./settings-Dd1uivmQ.mjs";
32
- import { c as invalidateSiteSettingsCache } from "./settings-CWb84sDm.mjs";
33
- import { t as createRedirectBody, v as httpUrl } from "./redirects-BEVSRMa2.mjs";
34
- import { u as safeHref } from "./menus-BSzwObhV.mjs";
33
+ import { c as invalidateSiteSettingsCache } from "./settings-D932YP2-.mjs";
34
+ import { t as createRedirectBody, v as httpUrl } from "./redirects-CyvvZrCJ.mjs";
35
+ import { u as safeHref } from "./menus-uEAxWAm1.mjs";
35
36
  import { n as isTerminalStatus } from "./status-BFNdxzKc.mjs";
36
- import { t as detectLoops } from "./loops-uA4iTOzd.mjs";
37
+ import { t as detectLoops } from "./loops-B2YS-Zzr.mjs";
37
38
  import { a as parseIndexLine, c as KIND_FEATURE, d as requiredFeaturesFor, i as indexChunkRefSchema, l as OPTIONAL_FEATURES, o as parseManifest, r as decodeUtf8, s as serializeManifest, t as packSitePackage, u as SITE_PACKAGE_FEATURES } from "./tar-DFjExb9X.mjs";
38
39
  import { _ as streamOrderOf, a as SYNTHETIC_ID_KINDS, c as blocksFieldTypeSlugs, d as identityProperties, f as inferredCreditId, g as referenceFieldRelationSlugs, h as portableIdSchema, i as RECORD_KINDS, l as compareIds, m as isRecordOfKind, n as IMPORT_STAGE_KINDS, o as TOPOLOGICAL_PARENT_PROPERTY, p as isRecordKind, r as KIND_REFERENCES, s as blockTypeVersionKey, t as IMPORT_RECORD_STAGES, u as compareStreamOrder, v as syntheticId, y as validateRecord } from "./kinds-B_Qcl5pz.mjs";
39
40
  import { a as parsePackagePath, i as mediaBlobPath, n as indexChunkPath, o as recordChunkPath, t as MANIFEST_PATH } from "./paths-biDzFTY2.mjs";
40
41
  import { n as IMPORT_TRANSFORMATION_CODES, r as applyTransformations, t as EXPORT_TRANSFORMATION_CODES } from "./transformations-Bx4lYY0Y.mjs";
41
42
  import { i as SUPPORTED_FORMAT_VERSIONS, n as SITE_PACKAGE_FORMAT_VERSION, r as SITE_PACKAGE_PROFILE, t as SITE_PACKAGE_FORMAT } from "./version-BZj18Q7G.mjs";
42
43
  import { t as sealReceipt } from "./receipt-BUsQCOeM.mjs";
43
- import { _ as isTerminalState, c as EXECUTING_IMPORT_STATES, g as analysisCursorSchema, n as TransferApprovalRepository, o as timestampNow, p as REBUILD_STEPS, u as IMPORT_STAGES } from "./approvals-D-m6wvGl.mjs";
44
+ import { _ as isTerminalState, c as EXECUTING_IMPORT_STATES, g as analysisCursorSchema, n as TransferApprovalRepository, o as timestampNow, p as REBUILD_STEPS, u as IMPORT_STAGES } from "./approvals-DTtYSB27.mjs";
44
45
  import { a as siteImportDecisionsInputSchema, i as planWarningSchema, n as mergeDecisions, o as siteImportPlanSchema, r as planBlockerSchema, t as isPlanExecutable } from "./plan-CCoqxNoU.mjs";
45
- import { a as toPublicOperation, i as TransferOperationRepository, n as putVerified, r as readStreamBytes, t as TransferStage } from "./stage-D8DWgPcO.mjs";
46
+ import { a as toPublicOperation, i as TransferOperationRepository, n as putVerified, r as readStreamBytes, t as TransferStage } from "./stage-CZQnXM_G.mjs";
46
47
  import { i as stagingPrefix } from "./keys-CifIkT0N.mjs";
47
48
  import { sql } from "kysely";
48
49
  import { z } from "zod";
@@ -6662,9 +6663,17 @@ const STAGE_STREAMS = {
6662
6663
  };
6663
6664
  const DEFAULT_BATCH = 100;
6664
6665
  const ENTRY_BATCH = 50;
6665
- const COLLECTION_STATEMENTS = 80;
6666
+ const COLLECTION_STATEMENTS = 81;
6667
+ const COLLECTION_DELETION_STATEMENTS = 40;
6666
6668
  /** Thrown out of a stage when the operation was asked to cancel. */
6667
6669
  var ImportCancelledSignal = class extends Error {};
6670
+ /** Yield without checkpointing a unit whose collection slug is still being released. */
6671
+ var ImportCollectionDeletionSignal = class extends Error {
6672
+ constructor(waiting) {
6673
+ super();
6674
+ this.waiting = waiting;
6675
+ }
6676
+ };
6668
6677
  function firstPosition(stage) {
6669
6678
  const kind = STAGE_STREAMS[stage][0];
6670
6679
  if (!kind) throw new Error(`Stage ${stage} has no streams`);
@@ -6800,6 +6809,29 @@ function inputsOf(kind, staged) {
6800
6809
  });
6801
6810
  }
6802
6811
  async function importCollection(context, record) {
6812
+ const deletions = new MediaUsageCollectionDeletionRepository(context.db);
6813
+ let deletion = await deletions.findBySlug(record.slug);
6814
+ const hadDeletion = deletion !== null;
6815
+ while (deletion) {
6816
+ if (!context.budget.canStart({ queries: COLLECTION_DELETION_STATEMENTS })) throw new ImportCollectionDeletionSignal(false);
6817
+ context.budget.start();
6818
+ if ((await context.ops.require(context.operationId)).cancelRequestedAt !== null) throw new ImportCancelledSignal();
6819
+ const outcome = deletion.state === "failed" ? "failed" : await processMediaUsageCollectionDeletion(context.db, deletion);
6820
+ if (outcome === "failed") throw new TransferError("TRANSFER_IMPORT_ERROR", "Previous collection deletion failed", { detail: {
6821
+ kind: "collection",
6822
+ id: record.id,
6823
+ reason: "COLLECTION_DELETION_FAILED",
6824
+ deletedCollectionId: deletion.collectionId,
6825
+ message: `Deletion of the previous collection "${record.slug}" failed. Abandon this import with \`emdash site import abandon ${context.operationId}\`, then send {"collectionId":"${deletion.collectionId}"} to POST /_emdash/api/admin/media-usage/collection-deletions/retry. After cleanup finishes, reset this site or set up a new one before analyzing and running the import again.`
6826
+ } });
6827
+ if (outcome === "finalized") break;
6828
+ if (outcome !== "progress") throw new ImportCollectionDeletionSignal(true);
6829
+ deletion = await deletions.findBySlug(record.slug);
6830
+ }
6831
+ if (hadDeletion) {
6832
+ if (!context.budget.canStart({ queries: COLLECTION_STATEMENTS + 3 })) throw new ImportCollectionDeletionSignal(false);
6833
+ if ((await context.ops.require(context.operationId)).cancelRequestedAt !== null) throw new ImportCancelledSignal();
6834
+ }
6803
6835
  const fields = (await context.allRecords("field")).filter((field) => field.collectionId === record.id);
6804
6836
  try {
6805
6837
  await new SchemaRegistry(context.db).importCollection(record, fields, { resume: true });
@@ -6808,7 +6840,8 @@ async function importCollection(context, record) {
6808
6840
  detail: {
6809
6841
  kind: "collection",
6810
6842
  id: record.id,
6811
- reason: error.code
6843
+ reason: error.code,
6844
+ message: error.message.slice(0, 512)
6812
6845
  },
6813
6846
  cause: error
6814
6847
  });
@@ -7516,10 +7549,10 @@ async function invalidateCaches(context) {
7516
7549
  }
7517
7550
  invalidateSiteSettingsCache();
7518
7551
  resetRegisteredCollectionsCache();
7519
- const { invalidateTermCache, invalidateTaxonomyDefsCache } = await import("./taxonomies-ChnU7Mc8.mjs").then((n) => n.f);
7520
- const { invalidateBylineCache } = await import("./bylines-DxOs9B7z.mjs").then((n) => n.t);
7521
- const { invalidateRedirectCache } = await import("./cache-CEU9wo_h.mjs").then((n) => n.t);
7522
- const { invalidateUrlPatternCache } = await import("./query-CpnRlBh8.mjs").then((n) => n.s);
7552
+ const { invalidateTermCache, invalidateTaxonomyDefsCache } = await import("./taxonomies-B__VmCKQ.mjs").then((n) => n.f);
7553
+ const { invalidateBylineCache } = await import("./bylines-f_ZEc6Sn.mjs").then((n) => n.t);
7554
+ const { invalidateRedirectCache } = await import("./cache-5DHbpEWu.mjs").then((n) => n.t);
7555
+ const { invalidateUrlPatternCache } = await import("./query-D62NntCZ.mjs").then((n) => n.s);
7523
7556
  invalidateTermCache();
7524
7557
  invalidateTaxonomyDefsCache();
7525
7558
  invalidateBylineCache();
@@ -7560,6 +7593,7 @@ async function clearScaffold(context, step, checkpoint) {
7560
7593
  const items = declaredScaffold(context);
7561
7594
  let next = step;
7562
7595
  let removedMenus = false;
7596
+ let removedWidgets = false;
7563
7597
  try {
7564
7598
  while (next < items.length) {
7565
7599
  const item = items[next];
@@ -7571,11 +7605,13 @@ async function clearScaffold(context, step, checkpoint) {
7571
7605
  context.budget.start();
7572
7606
  await removeItem(context, item);
7573
7607
  if (item.type === "menu" || item.type === "menu_item") removedMenus = true;
7608
+ if (item.type === "widget" || item.type === "widget_area") removedWidgets = true;
7574
7609
  next++;
7575
7610
  await checkpoint(next);
7576
7611
  }
7577
7612
  } finally {
7578
7613
  if (removedMenus) invalidateMenuObjectCache();
7614
+ if (removedWidgets) invalidateWidgetObjectCache();
7579
7615
  }
7580
7616
  const collectionIds = items.flatMap((item) => item.type === "collection" ? [item.id] : []);
7581
7617
  while (collectionIds.length > 0) {
@@ -7739,6 +7775,7 @@ async function advanceClaimed(options, ops, operation, leaseToken) {
7739
7775
  return await runStep(await loadContext(options, ops, operation, leaseToken), options.verify);
7740
7776
  } catch (error) {
7741
7777
  if (error instanceof ImportCancelledSignal) return result(await ops.finishCancelled(operation.id, leaseToken), 0);
7778
+ if (error instanceof ImportCollectionDeletionSignal) return result(await ops.releaseUnlessCancelled(operation.id, leaseToken, "running"), error.waiting ? IMPORT_RETRY_MS : 0);
7742
7779
  if (isTransferError(error) && LEASE_CODES.has(error.code)) throw error;
7743
7780
  const code = isTransferError(error) ? error.code : "TRANSFER_IMPORT_ERROR";
7744
7781
  const detail = isTransferError(error) ? error.detail : void 0;
@@ -8870,4 +8907,4 @@ async function requestTransferApproval(db, input) {
8870
8907
 
8871
8908
  //#endregion
8872
8909
  export { requestTransferApproval as C, analysisTargetContext as E, handleTransferCapabilities as S, loadImportPlan as T, handleImportGet as _, handleExportArchive as a, handleImportPlan as b, handleExportGet as c, handleImportAdvance as d, handleImportAnalyze as f, handleImportFileUpload as g, handleImportExecute as h, handleExportAdvance as i, handleExportList as l, handleImportCreate as m, handleApprovalDecide as n, handleExportCreate as o, handleImportCancel as p, handleApprovalList as r, handleExportFile as s, exportParamsDigest as t, handleImportAbandon as u, handleImportList as v, openExportPackage as w, handleImportReceipt as x, handleImportMissing as y };
8873
- //# sourceMappingURL=transfer-ClH6w6BV.mjs.map
8910
+ //# sourceMappingURL=transfer-DTGblAj2.mjs.map