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,7 +1,7 @@
1
- import { d as __exportAll } from "./runner-C5NeAkBQ.mjs";
2
- import { l as invalidateCollectionCache } from "./object-cache-Bo6DGaC9.mjs";
3
- import { L as BlockTypeRegistry, t as SchemaError } from "./registry-TUVaid9Z.mjs";
4
- import { s as invalidateSchemaCache } from "./zod-generator-D0JKy94C.mjs";
1
+ import { f as __exportAll } from "./runner-Bkkfk4O8.mjs";
2
+ import { u as invalidateCollectionCache } from "./object-cache-DmKr09La.mjs";
3
+ import { R as BlockTypeRegistry, t as SchemaError } from "./registry-B0-O575m.mjs";
4
+ import { s as invalidateSchemaCache } from "./zod-generator--nlM0930.mjs";
5
5
 
6
6
  //#region src/api/handlers/block-types.ts
7
7
  var block_types_exports = /* @__PURE__ */ __exportAll({
@@ -129,4 +129,4 @@ async function handleBlockTypeVersionActivate(db, slug, version, expectedFingerp
129
129
 
130
130
  //#endregion
131
131
  export { handleBlockTypeUpdate as a, handleBlockTypeList as i, handleBlockTypeCreate as n, handleBlockTypeVersionActivate as o, handleBlockTypeGet as r, block_types_exports as t };
132
- //# sourceMappingURL=block-types-CYcG56JB.mjs.map
132
+ //# sourceMappingURL=block-types-BbOrfnWs.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"block-types-CYcG56JB.mjs","names":[],"sources":["../src/api/handlers/block-types.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\n\nimport type { Database } from \"../../database/types.js\";\nimport { invalidateCollectionCache } from \"../../object-cache/index.js\";\nimport {\n\tBlockTypeRegistry,\n\tSchemaError,\n\tinvalidateSchemaCache,\n\ttype BlockType,\n\ttype CreateBlockTypeInput,\n\ttype UpdateBlockTypeInput,\n} from \"../../schema/index.js\";\nimport type { ApiResult } from \"../types.js\";\n\nexport interface BlockTypeListResponse {\n\titems: BlockType[];\n}\n\nexport interface BlockTypeResponse {\n\titem: BlockType;\n}\n\nfunction schemaError(error: SchemaError) {\n\treturn {\n\t\tsuccess: false as const,\n\t\terror: { code: error.code, message: error.message, details: error.details },\n\t};\n}\n\nasync function invalidateConsumers(db: Kysely<Database>, slug: string): Promise<void> {\n\tconst collections = await new BlockTypeRegistry(db).listAffectedCollections(slug);\n\tfor (const collection of collections) {\n\t\tinvalidateCollectionCache(collection);\n\t\tinvalidateSchemaCache(collection);\n\t}\n}\n\nexport async function handleBlockTypeList(\n\tdb: Kysely<Database>,\n): Promise<ApiResult<BlockTypeListResponse>> {\n\ttry {\n\t\treturn { success: true, data: { items: await new BlockTypeRegistry(db).listBlockTypes() } };\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"SCHEMA_LIST_ERROR\", message: \"Failed to list block types\" },\n\t\t};\n\t}\n}\n\nexport async function handleBlockTypeGet(\n\tdb: Kysely<Database>,\n\tslug: string,\n): Promise<ApiResult<BlockTypeResponse>> {\n\ttry {\n\t\tconst item = await new BlockTypeRegistry(db).getBlockType(slug);\n\t\tif (!item) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"BLOCK_TYPE_NOT_FOUND\", message: `Block type '${slug}' not found` },\n\t\t\t};\n\t\t}\n\t\treturn { success: true, data: { item } };\n\t} catch (error) {\n\t\tif (error instanceof SchemaError) return schemaError(error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"SCHEMA_GET_ERROR\", message: \"Failed to get block type\" },\n\t\t};\n\t}\n}\n\nexport async function handleBlockTypeCreate(\n\tdb: Kysely<Database>,\n\tinput: CreateBlockTypeInput,\n): Promise<ApiResult<BlockTypeResponse>> {\n\ttry {\n\t\tconst item = await new BlockTypeRegistry(db).createBlockType(input);\n\t\tawait invalidateConsumers(db, input.slug);\n\t\treturn { success: true, data: { item } };\n\t} catch (error) {\n\t\tif (error instanceof SchemaError) return schemaError(error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"SCHEMA_CREATE_ERROR\", message: \"Failed to create block type\" },\n\t\t};\n\t}\n}\n\nexport async function handleBlockTypeUpdate(\n\tdb: Kysely<Database>,\n\tslug: string,\n\tinput: UpdateBlockTypeInput,\n): Promise<ApiResult<BlockTypeResponse>> {\n\ttry {\n\t\tconst item = await new BlockTypeRegistry(db).updateBlockType(slug, input);\n\t\tawait invalidateConsumers(db, slug);\n\t\treturn { success: true, data: { item } };\n\t} catch (error) {\n\t\tif (error instanceof SchemaError) return schemaError(error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"SCHEMA_UPDATE_ERROR\", message: \"Failed to update block type\" },\n\t\t};\n\t}\n}\n\nexport async function handleBlockTypeVersionActivate(\n\tdb: Kysely<Database>,\n\tslug: string,\n\tversion: number,\n\texpectedFingerprint: string,\n): Promise<ApiResult<BlockTypeResponse>> {\n\ttry {\n\t\tconst item = await new BlockTypeRegistry(db).activateVersion(\n\t\t\tslug,\n\t\t\tversion,\n\t\t\texpectedFingerprint,\n\t\t);\n\t\tawait invalidateConsumers(db, slug);\n\t\treturn { success: true, data: { item } };\n\t} catch (error) {\n\t\tif (error instanceof SchemaError) return schemaError(error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"SCHEMA_UPDATE_ERROR\", message: \"Failed to activate block type version\" },\n\t\t};\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;AAsBA,SAAS,YAAY,OAAoB;AACxC,QAAO;EACN,SAAS;EACT,OAAO;GAAE,MAAM,MAAM;GAAM,SAAS,MAAM;GAAS,SAAS,MAAM;GAAS;EAC3E;;AAGF,eAAe,oBAAoB,IAAsB,MAA6B;CACrF,MAAM,cAAc,MAAM,IAAI,kBAAkB,GAAG,CAAC,wBAAwB,KAAK;AACjF,MAAK,MAAM,cAAc,aAAa;AACrC,4BAA0B,WAAW;AACrC,wBAAsB,WAAW;;;AAInC,eAAsB,oBACrB,IAC4C;AAC5C,KAAI;AACH,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,OAAO,MAAM,IAAI,kBAAkB,GAAG,CAAC,gBAAgB,EAAE;GAAE;SACpF;AACP,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAqB,SAAS;IAA8B;GAC3E;;;AAIH,eAAsB,mBACrB,IACA,MACwC;AACxC,KAAI;EACH,MAAM,OAAO,MAAM,IAAI,kBAAkB,GAAG,CAAC,aAAa,KAAK;AAC/D,MAAI,CAAC,KACJ,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAwB,SAAS,eAAe,KAAK;IAAc;GAClF;AAEF,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,MAAM;GAAE;UAChC,OAAO;AACf,MAAI,iBAAiB,YAAa,QAAO,YAAY,MAAM;AAC3D,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAoB,SAAS;IAA4B;GACxE;;;AAIH,eAAsB,sBACrB,IACA,OACwC;AACxC,KAAI;EACH,MAAM,OAAO,MAAM,IAAI,kBAAkB,GAAG,CAAC,gBAAgB,MAAM;AACnE,QAAM,oBAAoB,IAAI,MAAM,KAAK;AACzC,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,MAAM;GAAE;UAChC,OAAO;AACf,MAAI,iBAAiB,YAAa,QAAO,YAAY,MAAM;AAC3D,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAuB,SAAS;IAA+B;GAC9E;;;AAIH,eAAsB,sBACrB,IACA,MACA,OACwC;AACxC,KAAI;EACH,MAAM,OAAO,MAAM,IAAI,kBAAkB,GAAG,CAAC,gBAAgB,MAAM,MAAM;AACzE,QAAM,oBAAoB,IAAI,KAAK;AACnC,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,MAAM;GAAE;UAChC,OAAO;AACf,MAAI,iBAAiB,YAAa,QAAO,YAAY,MAAM;AAC3D,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAuB,SAAS;IAA+B;GAC9E;;;AAIH,eAAsB,+BACrB,IACA,MACA,SACA,qBACwC;AACxC,KAAI;EACH,MAAM,OAAO,MAAM,IAAI,kBAAkB,GAAG,CAAC,gBAC5C,MACA,SACA,oBACA;AACD,QAAM,oBAAoB,IAAI,KAAK;AACnC,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,MAAM;GAAE;UAChC,OAAO;AACf,MAAI,iBAAiB,YAAa,QAAO,YAAY,MAAM;AAC3D,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAuB,SAAS;IAAyC;GACxF"}
1
+ {"version":3,"file":"block-types-BbOrfnWs.mjs","names":[],"sources":["../src/api/handlers/block-types.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\n\nimport type { Database } from \"../../database/types.js\";\nimport { invalidateCollectionCache } from \"../../object-cache/index.js\";\nimport {\n\tBlockTypeRegistry,\n\tSchemaError,\n\tinvalidateSchemaCache,\n\ttype BlockType,\n\ttype CreateBlockTypeInput,\n\ttype UpdateBlockTypeInput,\n} from \"../../schema/index.js\";\nimport type { ApiResult } from \"../types.js\";\n\nexport interface BlockTypeListResponse {\n\titems: BlockType[];\n}\n\nexport interface BlockTypeResponse {\n\titem: BlockType;\n}\n\nfunction schemaError(error: SchemaError) {\n\treturn {\n\t\tsuccess: false as const,\n\t\terror: { code: error.code, message: error.message, details: error.details },\n\t};\n}\n\nasync function invalidateConsumers(db: Kysely<Database>, slug: string): Promise<void> {\n\tconst collections = await new BlockTypeRegistry(db).listAffectedCollections(slug);\n\tfor (const collection of collections) {\n\t\tinvalidateCollectionCache(collection);\n\t\tinvalidateSchemaCache(collection);\n\t}\n}\n\nexport async function handleBlockTypeList(\n\tdb: Kysely<Database>,\n): Promise<ApiResult<BlockTypeListResponse>> {\n\ttry {\n\t\treturn { success: true, data: { items: await new BlockTypeRegistry(db).listBlockTypes() } };\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"SCHEMA_LIST_ERROR\", message: \"Failed to list block types\" },\n\t\t};\n\t}\n}\n\nexport async function handleBlockTypeGet(\n\tdb: Kysely<Database>,\n\tslug: string,\n): Promise<ApiResult<BlockTypeResponse>> {\n\ttry {\n\t\tconst item = await new BlockTypeRegistry(db).getBlockType(slug);\n\t\tif (!item) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"BLOCK_TYPE_NOT_FOUND\", message: `Block type '${slug}' not found` },\n\t\t\t};\n\t\t}\n\t\treturn { success: true, data: { item } };\n\t} catch (error) {\n\t\tif (error instanceof SchemaError) return schemaError(error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"SCHEMA_GET_ERROR\", message: \"Failed to get block type\" },\n\t\t};\n\t}\n}\n\nexport async function handleBlockTypeCreate(\n\tdb: Kysely<Database>,\n\tinput: CreateBlockTypeInput,\n): Promise<ApiResult<BlockTypeResponse>> {\n\ttry {\n\t\tconst item = await new BlockTypeRegistry(db).createBlockType(input);\n\t\tawait invalidateConsumers(db, input.slug);\n\t\treturn { success: true, data: { item } };\n\t} catch (error) {\n\t\tif (error instanceof SchemaError) return schemaError(error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"SCHEMA_CREATE_ERROR\", message: \"Failed to create block type\" },\n\t\t};\n\t}\n}\n\nexport async function handleBlockTypeUpdate(\n\tdb: Kysely<Database>,\n\tslug: string,\n\tinput: UpdateBlockTypeInput,\n): Promise<ApiResult<BlockTypeResponse>> {\n\ttry {\n\t\tconst item = await new BlockTypeRegistry(db).updateBlockType(slug, input);\n\t\tawait invalidateConsumers(db, slug);\n\t\treturn { success: true, data: { item } };\n\t} catch (error) {\n\t\tif (error instanceof SchemaError) return schemaError(error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"SCHEMA_UPDATE_ERROR\", message: \"Failed to update block type\" },\n\t\t};\n\t}\n}\n\nexport async function handleBlockTypeVersionActivate(\n\tdb: Kysely<Database>,\n\tslug: string,\n\tversion: number,\n\texpectedFingerprint: string,\n): Promise<ApiResult<BlockTypeResponse>> {\n\ttry {\n\t\tconst item = await new BlockTypeRegistry(db).activateVersion(\n\t\t\tslug,\n\t\t\tversion,\n\t\t\texpectedFingerprint,\n\t\t);\n\t\tawait invalidateConsumers(db, slug);\n\t\treturn { success: true, data: { item } };\n\t} catch (error) {\n\t\tif (error instanceof SchemaError) return schemaError(error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"SCHEMA_UPDATE_ERROR\", message: \"Failed to activate block type version\" },\n\t\t};\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;AAsBA,SAAS,YAAY,OAAoB;AACxC,QAAO;EACN,SAAS;EACT,OAAO;GAAE,MAAM,MAAM;GAAM,SAAS,MAAM;GAAS,SAAS,MAAM;GAAS;EAC3E;;AAGF,eAAe,oBAAoB,IAAsB,MAA6B;CACrF,MAAM,cAAc,MAAM,IAAI,kBAAkB,GAAG,CAAC,wBAAwB,KAAK;AACjF,MAAK,MAAM,cAAc,aAAa;AACrC,4BAA0B,WAAW;AACrC,wBAAsB,WAAW;;;AAInC,eAAsB,oBACrB,IAC4C;AAC5C,KAAI;AACH,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,OAAO,MAAM,IAAI,kBAAkB,GAAG,CAAC,gBAAgB,EAAE;GAAE;SACpF;AACP,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAqB,SAAS;IAA8B;GAC3E;;;AAIH,eAAsB,mBACrB,IACA,MACwC;AACxC,KAAI;EACH,MAAM,OAAO,MAAM,IAAI,kBAAkB,GAAG,CAAC,aAAa,KAAK;AAC/D,MAAI,CAAC,KACJ,QAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAwB,SAAS,eAAe,KAAK;IAAc;GAClF;AAEF,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,MAAM;GAAE;UAChC,OAAO;AACf,MAAI,iBAAiB,YAAa,QAAO,YAAY,MAAM;AAC3D,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAoB,SAAS;IAA4B;GACxE;;;AAIH,eAAsB,sBACrB,IACA,OACwC;AACxC,KAAI;EACH,MAAM,OAAO,MAAM,IAAI,kBAAkB,GAAG,CAAC,gBAAgB,MAAM;AACnE,QAAM,oBAAoB,IAAI,MAAM,KAAK;AACzC,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,MAAM;GAAE;UAChC,OAAO;AACf,MAAI,iBAAiB,YAAa,QAAO,YAAY,MAAM;AAC3D,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAuB,SAAS;IAA+B;GAC9E;;;AAIH,eAAsB,sBACrB,IACA,MACA,OACwC;AACxC,KAAI;EACH,MAAM,OAAO,MAAM,IAAI,kBAAkB,GAAG,CAAC,gBAAgB,MAAM,MAAM;AACzE,QAAM,oBAAoB,IAAI,KAAK;AACnC,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,MAAM;GAAE;UAChC,OAAO;AACf,MAAI,iBAAiB,YAAa,QAAO,YAAY,MAAM;AAC3D,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAuB,SAAS;IAA+B;GAC9E;;;AAIH,eAAsB,+BACrB,IACA,MACA,SACA,qBACwC;AACxC,KAAI;EACH,MAAM,OAAO,MAAM,IAAI,kBAAkB,GAAG,CAAC,gBAC5C,MACA,SACA,oBACA;AACD,QAAM,oBAAoB,IAAI,KAAK;AACnC,SAAO;GAAE,SAAS;GAAM,MAAM,EAAE,MAAM;GAAE;UAChC,OAAO;AACf,MAAI,iBAAiB,YAAa,QAAO,YAAY,MAAM;AAC3D,SAAO;GACN,SAAS;GACT,OAAO;IAAE,MAAM;IAAuB,SAAS;IAAyC;GACxF"}
@@ -1,6 +1,6 @@
1
- import { d as __exportAll } from "./runner-C5NeAkBQ.mjs";
2
- import { L as BlockTypeRegistry, t as SchemaError } from "./registry-TUVaid9Z.mjs";
3
- import { t as generateBlockFieldSchema } from "./zod-generator-D0JKy94C.mjs";
1
+ import { f as __exportAll } from "./runner-Bkkfk4O8.mjs";
2
+ import { R as BlockTypeRegistry, t as SchemaError } from "./registry-B0-O575m.mjs";
3
+ import { t as generateBlockFieldSchema } from "./zod-generator--nlM0930.mjs";
4
4
  import { z } from "zod";
5
5
  import { ulid } from "ulidx";
6
6
 
@@ -212,4 +212,4 @@ async function inferBlockTypes(collection, data, loadExistingData) {
212
212
 
213
213
  //#endregion
214
214
  export { resolveBlockTypes as a, normalizeBlocksData as i, expandCollectionBlockFields as n, inferBlockTypes as r, block_values_exports as t };
215
- //# sourceMappingURL=block-values-gCX4HBSl.mjs.map
215
+ //# sourceMappingURL=block-values-Dg0-8PPS.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"block-values-gCX4HBSl.mjs","names":[],"sources":["../src/schema/block-values.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\nimport { ulid } from \"ulidx\";\nimport { z, type ZodType } from \"zod\";\n\nimport type { Database } from \"../database/types.js\";\nimport { BlockTypeRegistry } from \"./block-type-registry.js\";\nimport type { BlockType, BlockTypeVersion } from \"./block-types.js\";\nimport { SchemaError } from \"./registry.js\";\nimport type { CollectionWithFields, Field } from \"./types.js\";\nimport { generateBlockFieldSchema } from \"./zod-generator.js\";\n\nexport interface BlockWriteOptions {\n\tmigrateBlocks?: boolean;\n\treplaceBlocks?: boolean;\n\trestoreBlocks?: boolean;\n}\n\nexport interface StoredBlockValue extends Record<string, unknown> {\n\t_type: string;\n\t_version: number;\n\t_key: string;\n}\n\nexport type ResolvedBlockTypes = ReadonlyMap<string, BlockType>;\n\nexport async function resolveBlockTypes(db: Kysely<Database>): Promise<ResolvedBlockTypes> {\n\tconst blockTypes = await new BlockTypeRegistry(db).listBlockTypes();\n\treturn new Map(blockTypes.map((type) => [type.slug, type]));\n}\n\nasync function fingerprintResolvedTypes(\n\tallowedTypes: readonly string[],\n\tretiredTypes: readonly string[],\n\ttypes: readonly BlockType[],\n): Promise<string> {\n\tconst payload = JSON.stringify({\n\t\tallowedTypes,\n\t\tretiredTypes,\n\t\ttypes: types.map((type) => ({\n\t\t\tslug: type.slug,\n\t\t\tcurrentVersion: type.currentVersion,\n\t\t\tversions: type.versions.map((version) => ({\n\t\t\t\tversion: version.version,\n\t\t\t\tfingerprint: version.fingerprint,\n\t\t\t})),\n\t\t})),\n\t});\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(payload));\n\tconst hex = Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, \"0\")).join(\n\t\t\"\",\n\t);\n\treturn `blocks-field:v1:sha256:${hex}`;\n}\n\nexport async function expandCollectionBlockFields(\n\tdb: Kysely<Database>,\n\tcollection: CollectionWithFields,\n): Promise<CollectionWithFields> {\n\tconst blockFields = collection.fields.filter((field) => field.type === \"blocks\");\n\tif (blockFields.length === 0) return collection;\n\tconst resolved = await resolveBlockTypes(db);\n\tconst fields = await Promise.all(\n\t\tcollection.fields.map(async (field) => {\n\t\t\tif (field.type !== \"blocks\") return field;\n\t\t\tconst allowedTypes = field.validation?.allowedTypes ?? [];\n\t\t\tconst retiredTypes = field.validation?.retiredTypes ?? [];\n\t\t\tconst slugs = [\n\t\t\t\t...allowedTypes,\n\t\t\t\t...retiredTypes.filter((slug) => !allowedTypes.includes(slug)),\n\t\t\t];\n\t\t\tconst blockTypes = slugs.map((slug) => {\n\t\t\t\tconst type = resolved.get(slug);\n\t\t\t\tif (!type) unsupported(field.slug, `block type \"${slug}\" is unavailable`);\n\t\t\t\treturn type;\n\t\t\t});\n\t\t\treturn {\n\t\t\t\t...field,\n\t\t\t\tblockTypes,\n\t\t\t\tblockTypeFingerprint: await fingerprintResolvedTypes(\n\t\t\t\t\tallowedTypes,\n\t\t\t\t\tretiredTypes,\n\t\t\t\t\tblockTypes,\n\t\t\t\t),\n\t\t\t};\n\t\t}),\n\t);\n\treturn { ...collection, fields };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction validationError(path: string, message: string): never {\n\tthrow new SchemaError(`${path}: ${message}`, \"VALIDATION_ERROR\", {\n\t\tissues: [{ path, code: \"custom\", message }],\n\t});\n}\n\nfunction unsupported(path: string, message: string): never {\n\tthrow new SchemaError(`${path}: ${message}`, \"UNSUPPORTED_FIELD_TYPE\", { path });\n}\n\nfunction versionFor(type: BlockType, version: number, path: string): BlockTypeVersion {\n\tconst definition = type.versions.find((candidate) => candidate.version === version);\n\tif (!definition)\n\t\tunsupported(path, `block type \"${type.slug}\" has no retained version ${version}`);\n\tif (definition.unsupportedTypes?.length) {\n\t\tunsupported(path, `block type \"${type.slug}\" version ${version} uses unsupported field types`);\n\t}\n\treturn definition;\n}\n\nfunction blockSchema(\n\ttypeSlug: string,\n\tdefinition: BlockTypeVersion,\n): z.ZodObject<Record<string, ZodType>> {\n\tconst shape: Record<string, ZodType> = {\n\t\t_type: z.literal(typeSlug),\n\t\t_version: z.literal(definition.version),\n\t\t_key: z.string().min(1),\n\t};\n\tfor (const field of definition.fields) shape[field.slug] = generateBlockFieldSchema(field);\n\treturn z.object(shape).strict();\n}\n\nfunction existingByKey(value: unknown, path: string): Map<string, Record<string, unknown>> {\n\tif (value === undefined || value === null) return new Map();\n\tif (!Array.isArray(value)) validationError(path, \"stored blocks value is not an array\");\n\tconst result = new Map<string, Record<string, unknown>>();\n\tfor (const [index, block] of value.entries()) {\n\t\tif (!isRecord(block)) validationError(`${path}[${index}]`, \"stored block is not an object\");\n\t\tif (typeof block._key !== \"string\" || block._key.length === 0) {\n\t\t\tvalidationError(`${path}[${index}]._key`, \"stored block key is missing\");\n\t\t}\n\t\tif (result.has(block._key)) {\n\t\t\tvalidationError(`${path}[${index}]._key`, \"stored block key is duplicated\");\n\t\t}\n\t\tresult.set(block._key, block);\n\t}\n\treturn result;\n}\n\nfunction inferredBlockType(\n\tfield: Field,\n\tblock: Record<string, unknown>,\n\tprevious: Record<string, unknown> | undefined,\n\toptions: BlockWriteOptions,\n): unknown {\n\tconst allowedTypes = field.validation?.allowedTypes ?? [];\n\treturn block._type === undefined &&\n\t\t!options.restoreBlocks &&\n\t\tallowedTypes.length === 1 &&\n\t\t(!previous || previous._type === allowedTypes[0])\n\t\t? allowedTypes[0]\n\t\t: block._type;\n}\n\nfunction normalizeBlockArray(\n\tfield: Field,\n\tvalue: unknown,\n\texistingValue: unknown,\n\ttypes: ReadonlyMap<string, BlockType>,\n\toptions: BlockWriteOptions,\n): StoredBlockValue[] {\n\tconst path = field.slug;\n\tif (!Array.isArray(value)) validationError(path, \"must be an array\");\n\tconst minItems = field.validation?.minItems ?? 0;\n\tconst maxItems = field.validation?.maxItems;\n\tif (value.length < minItems) validationError(path, `must contain at least ${minItems} blocks`);\n\tif (maxItems !== undefined && value.length > maxItems) {\n\t\tvalidationError(path, `must contain at most ${maxItems} blocks`);\n\t}\n\n\tconst allowed = new Set(field.validation?.allowedTypes ?? []);\n\tconst retired = new Set(field.validation?.retiredTypes ?? []);\n\tconst existing = existingByKey(existingValue, path);\n\tconst incomingKeyCount = value.filter(\n\t\t(block) => isRecord(block) && block._key !== undefined,\n\t).length;\n\tif (options.replaceBlocks && incomingKeyCount > 0) {\n\t\tvalidationError(path, \"replaceBlocks requires an entirely keyless replacement array\");\n\t}\n\tif (!options.replaceBlocks && existing.size > 0 && value.length > 0 && incomingKeyCount === 0) {\n\t\tvalidationError(path, \"updating an existing blocks field requires keys or replaceBlocks\");\n\t}\n\n\tconst seen = new Set<string>();\n\treturn value.map((rawBlock, index) => {\n\t\tconst blockPath = `${path}[${index}]`;\n\t\tif (!isRecord(rawBlock)) validationError(blockPath, \"must be an object\");\n\t\tconst previous = typeof rawBlock._key === \"string\" ? existing.get(rawBlock._key) : undefined;\n\t\tconst blockTypeSlug = inferredBlockType(field, rawBlock, previous, options);\n\t\tif (typeof blockTypeSlug !== \"string\" || blockTypeSlug.length === 0) {\n\t\t\tvalidationError(`${blockPath}._type`, \"must be a block type slug\");\n\t\t}\n\t\tif (\n\t\t\trawBlock._version !== undefined &&\n\t\t\t(typeof rawBlock._version !== \"number\" ||\n\t\t\t\t!Number.isInteger(rawBlock._version) ||\n\t\t\t\trawBlock._version < 1)\n\t\t) {\n\t\t\tvalidationError(`${blockPath}._version`, \"must be a positive integer\");\n\t\t}\n\t\tif (\n\t\t\trawBlock._key !== undefined &&\n\t\t\t(typeof rawBlock._key !== \"string\" || rawBlock._key.length === 0)\n\t\t) {\n\t\t\tvalidationError(`${blockPath}._key`, \"must be a non-empty string\");\n\t\t}\n\n\t\tconst type = types.get(blockTypeSlug);\n\t\tif (!type) unsupported(`${blockPath}._type`, `block type \"${blockTypeSlug}\" is unavailable`);\n\t\tif (previous) {\n\t\t\tif (previous._type !== blockTypeSlug) {\n\t\t\t\tvalidationError(`${blockPath}._type`, \"cannot change an existing block's type\");\n\t\t\t}\n\t\t} else if (\n\t\t\t!allowed.has(blockTypeSlug) &&\n\t\t\t!(options.restoreBlocks && retired.has(blockTypeSlug))\n\t\t) {\n\t\t\tconst reason = retired.has(blockTypeSlug) ? \"is retired\" : \"is not allowed by this field\";\n\t\t\tvalidationError(`${blockPath}._type`, `block type \"${blockTypeSlug}\" ${reason}`);\n\t\t}\n\n\t\tlet version: number;\n\t\tif (previous) {\n\t\t\tif (typeof previous._version !== \"number\" || !Number.isInteger(previous._version)) {\n\t\t\t\tvalidationError(`${blockPath}._version`, \"stored block version is invalid\");\n\t\t\t}\n\t\t\tversion = rawBlock._version === undefined ? previous._version : rawBlock._version;\n\t\t\tif (version !== previous._version) {\n\t\t\t\tif (!options.migrateBlocks) {\n\t\t\t\t\tvalidationError(`${blockPath}._version`, \"cannot change without migrateBlocks\");\n\t\t\t\t}\n\t\t\t\tif (version !== type.currentVersion) {\n\t\t\t\t\tvalidationError(`${blockPath}._version`, \"migration target must be the active version\");\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tversion = rawBlock._version === undefined ? type.currentVersion : rawBlock._version;\n\t\t\tif (version !== type.currentVersion && !options.restoreBlocks) {\n\t\t\t\tvalidationError(`${blockPath}._version`, \"new blocks must use the active version\");\n\t\t\t}\n\t\t}\n\n\t\tconst key = options.replaceBlocks ? ulid() : (rawBlock._key ?? ulid());\n\t\tif (seen.has(key)) validationError(`${blockPath}._key`, \"must be unique within the field\");\n\t\tseen.add(key);\n\t\tconst definition = versionFor(type, version, `${blockPath}._version`);\n\t\tconst normalized: Record<string, unknown> = {\n\t\t\t...rawBlock,\n\t\t\t_type: blockTypeSlug,\n\t\t\t_version: version,\n\t\t\t_key: key,\n\t\t};\n\t\tif (!previous) {\n\t\t\tfor (const nestedField of definition.fields) {\n\t\t\t\tif (normalized[nestedField.slug] === undefined && nestedField.defaultValue !== undefined) {\n\t\t\t\t\tnormalized[nestedField.slug] = structuredClone(nestedField.defaultValue);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const nestedField of definition.fields) {\n\t\t\tif (nestedField.required && normalized[nestedField.slug] === \"\") {\n\t\t\t\tvalidationError(`${blockPath}.${nestedField.slug}`, \"required field cannot be empty\");\n\t\t\t}\n\t\t}\n\t\tconst parsed = blockSchema(type.slug, definition).safeParse(normalized);\n\t\tif (!parsed.success) {\n\t\t\tconst issue = parsed.error.issues[0];\n\t\t\tconst issuePath = issue?.path.length ? `.${issue.path.map(String).join(\".\")}` : \"\";\n\t\t\tvalidationError(`${blockPath}${issuePath}`, issue?.message ?? \"invalid block value\");\n\t\t}\n\t\treturn {\n\t\t\t...normalized,\n\t\t\t_type: blockTypeSlug,\n\t\t\t_version: version,\n\t\t\t_key: key,\n\t\t};\n\t});\n}\n\nexport async function normalizeBlocksData(\n\tdb: Kysely<Database>,\n\tcollection: CollectionWithFields,\n\tdata: Record<string, unknown>,\n\texistingData: Record<string, unknown> = {},\n\toptions: BlockWriteOptions = {},\n\tpartial = true,\n\tresolvedTypes?: ResolvedBlockTypes,\n): Promise<Record<string, unknown>> {\n\tconst normalized = { ...data };\n\tconst blockFields: Field[] = [];\n\tfor (const field of collection.fields) {\n\t\tif (field.type !== \"blocks\") continue;\n\t\t// Left in place, an undefined value would replace the stored blocks in the\n\t\t// draft merge and reach the column write as NULL.\n\t\tif (partial && data[field.slug] === undefined) {\n\t\t\tdelete normalized[field.slug];\n\t\t} else {\n\t\t\tblockFields.push(field);\n\t\t}\n\t}\n\tif (blockFields.length === 0) return normalized;\n\tconst types = resolvedTypes ?? (await resolveBlockTypes(db));\n\tfor (const field of blockFields) {\n\t\tnormalized[field.slug] = normalizeBlockArray(\n\t\t\tfield,\n\t\t\tdata[field.slug] === undefined ? [] : data[field.slug],\n\t\t\texistingData[field.slug],\n\t\t\ttypes,\n\t\t\toptions,\n\t\t);\n\t}\n\treturn normalized;\n}\n\n/**\n * Fill in the `_type` an ordinary write infers for blocks that omit it, so\n * `content:beforeSave` hooks see the type the block will be stored with.\n * `loadExistingData` is only called when some block omits `_type`.\n */\nexport async function inferBlockTypes(\n\tcollection: CollectionWithFields,\n\tdata: Record<string, unknown>,\n\tloadExistingData: () => Promise<Record<string, unknown> | undefined>,\n): Promise<Record<string, unknown>> {\n\tconst untyped = collection.fields.flatMap((field) => {\n\t\tconst value = data[field.slug];\n\t\treturn field.type === \"blocks\" &&\n\t\t\tArray.isArray(value) &&\n\t\t\tvalue.some((block) => isRecord(block) && block._type === undefined)\n\t\t\t? [{ field, value }]\n\t\t\t: [];\n\t});\n\tif (untyped.length === 0) return data;\n\tconst existingData = (await loadExistingData()) ?? {};\n\tconst inferred = { ...data };\n\tfor (const { field, value } of untyped) {\n\t\tconst stored = existingData[field.slug];\n\t\tinferred[field.slug] = value.map((block: unknown) => {\n\t\t\tif (!isRecord(block)) return block;\n\t\t\tconst previous =\n\t\t\t\tArray.isArray(stored) && typeof block._key === \"string\"\n\t\t\t\t\t? stored.find(\n\t\t\t\t\t\t\t(candidate: unknown): candidate is Record<string, unknown> =>\n\t\t\t\t\t\t\t\tisRecord(candidate) && candidate._key === block._key,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\t\t\tconst type = inferredBlockType(field, block, previous, {});\n\t\t\treturn type === block._type ? block : { ...block, _type: type };\n\t\t});\n\t}\n\treturn inferred;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"block-values-Dg0-8PPS.mjs","names":[],"sources":["../src/schema/block-values.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\nimport { ulid } from \"ulidx\";\nimport { z, type ZodType } from \"zod\";\n\nimport type { Database } from \"../database/types.js\";\nimport { BlockTypeRegistry } from \"./block-type-registry.js\";\nimport type { BlockType, BlockTypeVersion } from \"./block-types.js\";\nimport { SchemaError } from \"./registry.js\";\nimport type { CollectionWithFields, Field } from \"./types.js\";\nimport { generateBlockFieldSchema } from \"./zod-generator.js\";\n\nexport interface BlockWriteOptions {\n\tmigrateBlocks?: boolean;\n\treplaceBlocks?: boolean;\n\trestoreBlocks?: boolean;\n}\n\nexport interface StoredBlockValue extends Record<string, unknown> {\n\t_type: string;\n\t_version: number;\n\t_key: string;\n}\n\nexport type ResolvedBlockTypes = ReadonlyMap<string, BlockType>;\n\nexport async function resolveBlockTypes(db: Kysely<Database>): Promise<ResolvedBlockTypes> {\n\tconst blockTypes = await new BlockTypeRegistry(db).listBlockTypes();\n\treturn new Map(blockTypes.map((type) => [type.slug, type]));\n}\n\nasync function fingerprintResolvedTypes(\n\tallowedTypes: readonly string[],\n\tretiredTypes: readonly string[],\n\ttypes: readonly BlockType[],\n): Promise<string> {\n\tconst payload = JSON.stringify({\n\t\tallowedTypes,\n\t\tretiredTypes,\n\t\ttypes: types.map((type) => ({\n\t\t\tslug: type.slug,\n\t\t\tcurrentVersion: type.currentVersion,\n\t\t\tversions: type.versions.map((version) => ({\n\t\t\t\tversion: version.version,\n\t\t\t\tfingerprint: version.fingerprint,\n\t\t\t})),\n\t\t})),\n\t});\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(payload));\n\tconst hex = Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, \"0\")).join(\n\t\t\"\",\n\t);\n\treturn `blocks-field:v1:sha256:${hex}`;\n}\n\nexport async function expandCollectionBlockFields(\n\tdb: Kysely<Database>,\n\tcollection: CollectionWithFields,\n): Promise<CollectionWithFields> {\n\tconst blockFields = collection.fields.filter((field) => field.type === \"blocks\");\n\tif (blockFields.length === 0) return collection;\n\tconst resolved = await resolveBlockTypes(db);\n\tconst fields = await Promise.all(\n\t\tcollection.fields.map(async (field) => {\n\t\t\tif (field.type !== \"blocks\") return field;\n\t\t\tconst allowedTypes = field.validation?.allowedTypes ?? [];\n\t\t\tconst retiredTypes = field.validation?.retiredTypes ?? [];\n\t\t\tconst slugs = [\n\t\t\t\t...allowedTypes,\n\t\t\t\t...retiredTypes.filter((slug) => !allowedTypes.includes(slug)),\n\t\t\t];\n\t\t\tconst blockTypes = slugs.map((slug) => {\n\t\t\t\tconst type = resolved.get(slug);\n\t\t\t\tif (!type) unsupported(field.slug, `block type \"${slug}\" is unavailable`);\n\t\t\t\treturn type;\n\t\t\t});\n\t\t\treturn {\n\t\t\t\t...field,\n\t\t\t\tblockTypes,\n\t\t\t\tblockTypeFingerprint: await fingerprintResolvedTypes(\n\t\t\t\t\tallowedTypes,\n\t\t\t\t\tretiredTypes,\n\t\t\t\t\tblockTypes,\n\t\t\t\t),\n\t\t\t};\n\t\t}),\n\t);\n\treturn { ...collection, fields };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction validationError(path: string, message: string): never {\n\tthrow new SchemaError(`${path}: ${message}`, \"VALIDATION_ERROR\", {\n\t\tissues: [{ path, code: \"custom\", message }],\n\t});\n}\n\nfunction unsupported(path: string, message: string): never {\n\tthrow new SchemaError(`${path}: ${message}`, \"UNSUPPORTED_FIELD_TYPE\", { path });\n}\n\nfunction versionFor(type: BlockType, version: number, path: string): BlockTypeVersion {\n\tconst definition = type.versions.find((candidate) => candidate.version === version);\n\tif (!definition)\n\t\tunsupported(path, `block type \"${type.slug}\" has no retained version ${version}`);\n\tif (definition.unsupportedTypes?.length) {\n\t\tunsupported(path, `block type \"${type.slug}\" version ${version} uses unsupported field types`);\n\t}\n\treturn definition;\n}\n\nfunction blockSchema(\n\ttypeSlug: string,\n\tdefinition: BlockTypeVersion,\n): z.ZodObject<Record<string, ZodType>> {\n\tconst shape: Record<string, ZodType> = {\n\t\t_type: z.literal(typeSlug),\n\t\t_version: z.literal(definition.version),\n\t\t_key: z.string().min(1),\n\t};\n\tfor (const field of definition.fields) shape[field.slug] = generateBlockFieldSchema(field);\n\treturn z.object(shape).strict();\n}\n\nfunction existingByKey(value: unknown, path: string): Map<string, Record<string, unknown>> {\n\tif (value === undefined || value === null) return new Map();\n\tif (!Array.isArray(value)) validationError(path, \"stored blocks value is not an array\");\n\tconst result = new Map<string, Record<string, unknown>>();\n\tfor (const [index, block] of value.entries()) {\n\t\tif (!isRecord(block)) validationError(`${path}[${index}]`, \"stored block is not an object\");\n\t\tif (typeof block._key !== \"string\" || block._key.length === 0) {\n\t\t\tvalidationError(`${path}[${index}]._key`, \"stored block key is missing\");\n\t\t}\n\t\tif (result.has(block._key)) {\n\t\t\tvalidationError(`${path}[${index}]._key`, \"stored block key is duplicated\");\n\t\t}\n\t\tresult.set(block._key, block);\n\t}\n\treturn result;\n}\n\nfunction inferredBlockType(\n\tfield: Field,\n\tblock: Record<string, unknown>,\n\tprevious: Record<string, unknown> | undefined,\n\toptions: BlockWriteOptions,\n): unknown {\n\tconst allowedTypes = field.validation?.allowedTypes ?? [];\n\treturn block._type === undefined &&\n\t\t!options.restoreBlocks &&\n\t\tallowedTypes.length === 1 &&\n\t\t(!previous || previous._type === allowedTypes[0])\n\t\t? allowedTypes[0]\n\t\t: block._type;\n}\n\nfunction normalizeBlockArray(\n\tfield: Field,\n\tvalue: unknown,\n\texistingValue: unknown,\n\ttypes: ReadonlyMap<string, BlockType>,\n\toptions: BlockWriteOptions,\n): StoredBlockValue[] {\n\tconst path = field.slug;\n\tif (!Array.isArray(value)) validationError(path, \"must be an array\");\n\tconst minItems = field.validation?.minItems ?? 0;\n\tconst maxItems = field.validation?.maxItems;\n\tif (value.length < minItems) validationError(path, `must contain at least ${minItems} blocks`);\n\tif (maxItems !== undefined && value.length > maxItems) {\n\t\tvalidationError(path, `must contain at most ${maxItems} blocks`);\n\t}\n\n\tconst allowed = new Set(field.validation?.allowedTypes ?? []);\n\tconst retired = new Set(field.validation?.retiredTypes ?? []);\n\tconst existing = existingByKey(existingValue, path);\n\tconst incomingKeyCount = value.filter(\n\t\t(block) => isRecord(block) && block._key !== undefined,\n\t).length;\n\tif (options.replaceBlocks && incomingKeyCount > 0) {\n\t\tvalidationError(path, \"replaceBlocks requires an entirely keyless replacement array\");\n\t}\n\tif (!options.replaceBlocks && existing.size > 0 && value.length > 0 && incomingKeyCount === 0) {\n\t\tvalidationError(path, \"updating an existing blocks field requires keys or replaceBlocks\");\n\t}\n\n\tconst seen = new Set<string>();\n\treturn value.map((rawBlock, index) => {\n\t\tconst blockPath = `${path}[${index}]`;\n\t\tif (!isRecord(rawBlock)) validationError(blockPath, \"must be an object\");\n\t\tconst previous = typeof rawBlock._key === \"string\" ? existing.get(rawBlock._key) : undefined;\n\t\tconst blockTypeSlug = inferredBlockType(field, rawBlock, previous, options);\n\t\tif (typeof blockTypeSlug !== \"string\" || blockTypeSlug.length === 0) {\n\t\t\tvalidationError(`${blockPath}._type`, \"must be a block type slug\");\n\t\t}\n\t\tif (\n\t\t\trawBlock._version !== undefined &&\n\t\t\t(typeof rawBlock._version !== \"number\" ||\n\t\t\t\t!Number.isInteger(rawBlock._version) ||\n\t\t\t\trawBlock._version < 1)\n\t\t) {\n\t\t\tvalidationError(`${blockPath}._version`, \"must be a positive integer\");\n\t\t}\n\t\tif (\n\t\t\trawBlock._key !== undefined &&\n\t\t\t(typeof rawBlock._key !== \"string\" || rawBlock._key.length === 0)\n\t\t) {\n\t\t\tvalidationError(`${blockPath}._key`, \"must be a non-empty string\");\n\t\t}\n\n\t\tconst type = types.get(blockTypeSlug);\n\t\tif (!type) unsupported(`${blockPath}._type`, `block type \"${blockTypeSlug}\" is unavailable`);\n\t\tif (previous) {\n\t\t\tif (previous._type !== blockTypeSlug) {\n\t\t\t\tvalidationError(`${blockPath}._type`, \"cannot change an existing block's type\");\n\t\t\t}\n\t\t} else if (\n\t\t\t!allowed.has(blockTypeSlug) &&\n\t\t\t!(options.restoreBlocks && retired.has(blockTypeSlug))\n\t\t) {\n\t\t\tconst reason = retired.has(blockTypeSlug) ? \"is retired\" : \"is not allowed by this field\";\n\t\t\tvalidationError(`${blockPath}._type`, `block type \"${blockTypeSlug}\" ${reason}`);\n\t\t}\n\n\t\tlet version: number;\n\t\tif (previous) {\n\t\t\tif (typeof previous._version !== \"number\" || !Number.isInteger(previous._version)) {\n\t\t\t\tvalidationError(`${blockPath}._version`, \"stored block version is invalid\");\n\t\t\t}\n\t\t\tversion = rawBlock._version === undefined ? previous._version : rawBlock._version;\n\t\t\tif (version !== previous._version) {\n\t\t\t\tif (!options.migrateBlocks) {\n\t\t\t\t\tvalidationError(`${blockPath}._version`, \"cannot change without migrateBlocks\");\n\t\t\t\t}\n\t\t\t\tif (version !== type.currentVersion) {\n\t\t\t\t\tvalidationError(`${blockPath}._version`, \"migration target must be the active version\");\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tversion = rawBlock._version === undefined ? type.currentVersion : rawBlock._version;\n\t\t\tif (version !== type.currentVersion && !options.restoreBlocks) {\n\t\t\t\tvalidationError(`${blockPath}._version`, \"new blocks must use the active version\");\n\t\t\t}\n\t\t}\n\n\t\tconst key = options.replaceBlocks ? ulid() : (rawBlock._key ?? ulid());\n\t\tif (seen.has(key)) validationError(`${blockPath}._key`, \"must be unique within the field\");\n\t\tseen.add(key);\n\t\tconst definition = versionFor(type, version, `${blockPath}._version`);\n\t\tconst normalized: Record<string, unknown> = {\n\t\t\t...rawBlock,\n\t\t\t_type: blockTypeSlug,\n\t\t\t_version: version,\n\t\t\t_key: key,\n\t\t};\n\t\tif (!previous) {\n\t\t\tfor (const nestedField of definition.fields) {\n\t\t\t\tif (normalized[nestedField.slug] === undefined && nestedField.defaultValue !== undefined) {\n\t\t\t\t\tnormalized[nestedField.slug] = structuredClone(nestedField.defaultValue);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (const nestedField of definition.fields) {\n\t\t\tif (nestedField.required && normalized[nestedField.slug] === \"\") {\n\t\t\t\tvalidationError(`${blockPath}.${nestedField.slug}`, \"required field cannot be empty\");\n\t\t\t}\n\t\t}\n\t\tconst parsed = blockSchema(type.slug, definition).safeParse(normalized);\n\t\tif (!parsed.success) {\n\t\t\tconst issue = parsed.error.issues[0];\n\t\t\tconst issuePath = issue?.path.length ? `.${issue.path.map(String).join(\".\")}` : \"\";\n\t\t\tvalidationError(`${blockPath}${issuePath}`, issue?.message ?? \"invalid block value\");\n\t\t}\n\t\treturn {\n\t\t\t...normalized,\n\t\t\t_type: blockTypeSlug,\n\t\t\t_version: version,\n\t\t\t_key: key,\n\t\t};\n\t});\n}\n\nexport async function normalizeBlocksData(\n\tdb: Kysely<Database>,\n\tcollection: CollectionWithFields,\n\tdata: Record<string, unknown>,\n\texistingData: Record<string, unknown> = {},\n\toptions: BlockWriteOptions = {},\n\tpartial = true,\n\tresolvedTypes?: ResolvedBlockTypes,\n): Promise<Record<string, unknown>> {\n\tconst normalized = { ...data };\n\tconst blockFields: Field[] = [];\n\tfor (const field of collection.fields) {\n\t\tif (field.type !== \"blocks\") continue;\n\t\t// Left in place, an undefined value would replace the stored blocks in the\n\t\t// draft merge and reach the column write as NULL.\n\t\tif (partial && data[field.slug] === undefined) {\n\t\t\tdelete normalized[field.slug];\n\t\t} else {\n\t\t\tblockFields.push(field);\n\t\t}\n\t}\n\tif (blockFields.length === 0) return normalized;\n\tconst types = resolvedTypes ?? (await resolveBlockTypes(db));\n\tfor (const field of blockFields) {\n\t\tnormalized[field.slug] = normalizeBlockArray(\n\t\t\tfield,\n\t\t\tdata[field.slug] === undefined ? [] : data[field.slug],\n\t\t\texistingData[field.slug],\n\t\t\ttypes,\n\t\t\toptions,\n\t\t);\n\t}\n\treturn normalized;\n}\n\n/**\n * Fill in the `_type` an ordinary write infers for blocks that omit it, so\n * `content:beforeSave` hooks see the type the block will be stored with.\n * `loadExistingData` is only called when some block omits `_type`.\n */\nexport async function inferBlockTypes(\n\tcollection: CollectionWithFields,\n\tdata: Record<string, unknown>,\n\tloadExistingData: () => Promise<Record<string, unknown> | undefined>,\n): Promise<Record<string, unknown>> {\n\tconst untyped = collection.fields.flatMap((field) => {\n\t\tconst value = data[field.slug];\n\t\treturn field.type === \"blocks\" &&\n\t\t\tArray.isArray(value) &&\n\t\t\tvalue.some((block) => isRecord(block) && block._type === undefined)\n\t\t\t? [{ field, value }]\n\t\t\t: [];\n\t});\n\tif (untyped.length === 0) return data;\n\tconst existingData = (await loadExistingData()) ?? {};\n\tconst inferred = { ...data };\n\tfor (const { field, value } of untyped) {\n\t\tconst stored = existingData[field.slug];\n\t\tinferred[field.slug] = value.map((block: unknown) => {\n\t\t\tif (!isRecord(block)) return block;\n\t\t\tconst previous =\n\t\t\t\tArray.isArray(stored) && typeof block._key === \"string\"\n\t\t\t\t\t? stored.find(\n\t\t\t\t\t\t\t(candidate: unknown): candidate is Record<string, unknown> =>\n\t\t\t\t\t\t\t\tisRecord(candidate) && candidate._key === block._key,\n\t\t\t\t\t\t)\n\t\t\t\t\t: undefined;\n\t\t\tconst type = inferredBlockType(field, block, previous, {});\n\t\t\treturn type === block._type ? block : { ...block, _type: type };\n\t\t});\n\t}\n\treturn inferred;\n}\n"],"mappings":"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"}
@@ -1,20 +1,102 @@
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 listTablesLike } from "./dialect-helpers-7_IqPdh9.mjs";
4
- import { c as invalidateBylineObjectCache, l as invalidateCollectionCache } from "./object-cache-Bo6DGaC9.mjs";
5
- import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-xC4UD5-S.mjs";
6
- import { i as setRequestCacheEntry, n as peekRequestCache, t as clearRequestCacheEntry } from "./request-cache-C4CIo5ad.mjs";
7
- import { c as decodeCursor, l as encodeCursor, r as EmDashValidationError } from "./types-D2NEXtgB.mjs";
8
- import { t as withTransaction } from "./transaction-BVYIo_yu.mjs";
9
- import { n as getBylineFieldDefs } from "./field-defs-cache-Dez5iWJJ.mjs";
3
+ import { m as listTablesLike } from "./dialect-helpers-B1XN2HGB.mjs";
4
+ import { o as getLocaleRank } from "./config-Cs_AwWXI.mjs";
5
+ import { t as after } from "./after-32yNRvd2.mjs";
6
+ import { getRequestContext } from "./request-context.mjs";
7
+ import { n as initWithLock, t as createInitLock } from "./init-lock-BGmew3r1.mjs";
8
+ import { n as localeMatches, r as localeOrder } from "./query-BFHjCzSh.mjs";
9
+ import { l as invalidateBylineObjectCache, u as invalidateCollectionCache } from "./object-cache-DmKr09La.mjs";
10
+ import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-DiW8VMwz.mjs";
11
+ import { i as setRequestCacheEntry, n as peekRequestCache, r as requestCached, t as clearRequestCacheEntry } from "./request-cache-5z2WzWmh.mjs";
12
+ import { i as EmDashValidationError, l as decodeCursor, u as encodeCursor } from "./types-DwhEvIVb.mjs";
13
+ import { t as withTransaction } from "./transaction-CkoQ5wqQ.mjs";
14
+ import { n as BylineSchemaRegistry } from "./byline-registry-BhzpO41z.mjs";
10
15
  import { sql } from "kysely";
11
16
  import { ulid } from "ulidx";
12
17
 
18
+ //#region src/bylines/field-defs-cache.ts
19
+ const HOLDER_KEY = Symbol.for("emdash:byline-field-defs");
20
+ const g = globalThis;
21
+ const holder = g[HOLDER_KEY] ?? (() => {
22
+ const h = {
23
+ value: null,
24
+ hasValue: false,
25
+ cachedVersion: -1,
26
+ lock: createInitLock()
27
+ };
28
+ g[HOLDER_KEY] = h;
29
+ return h;
30
+ })();
31
+ const REQUEST_CACHE_KEY_VERSION = "byline-fields-version";
32
+ const REQUEST_CACHE_KEY_DEFS_PREFIX = "byline-field-defs:";
33
+ /**
34
+ * Reclaim window for the single-flight lock: if an owner holds it past
35
+ * this without publishing (e.g. its request was cancelled and the
36
+ * anchored fetch hasn't completed yet), the next reader reclaims and
37
+ * refetches. `listFields` is a single fast SELECT, so this only needs to
38
+ * cover a genuinely slow/stranded query. Mutable solely so tests can
39
+ * shorten it; production never changes it.
40
+ */
41
+ let reclaimDeadlineMs = 1e4;
42
+ /**
43
+ * Read the persisted `options.byline_fields_version` counter. Cached for
44
+ * the duration of the current request via `requestCached`. Returns `0`
45
+ * when the row is missing (matches `BylineSchemaRegistry.getVersion`).
46
+ */
47
+ async function getBylineFieldsVersion(db) {
48
+ return requestCached(REQUEST_CACHE_KEY_VERSION, () => new BylineSchemaRegistry(db).getVersion());
49
+ }
50
+ /**
51
+ * Resolve registered byline custom-field definitions. Two-tier cache:
52
+ * per-request via `requestCached`, then per-isolate via the global
53
+ * holder.
54
+ *
55
+ * The global holder is bypassed for isolated requests (playground / DO
56
+ * preview, which point at a divergent schema) and for dirty versions
57
+ * (odd counter — see `BylineSchemaRegistry`'s class JSDoc — indicates
58
+ * an in-flight or crashed mutation). Both bypass paths still hit the
59
+ * per-request cache, so a single render dedupes within itself.
60
+ *
61
+ * Always returns an array. Empty = no custom fields registered.
62
+ */
63
+ async function getBylineFieldDefs(db) {
64
+ const isolated = getRequestContext()?.dbIsIsolated === true;
65
+ const version = await getBylineFieldsVersion(db);
66
+ const dirty = version % 2 !== 0;
67
+ return requestCached(`${REQUEST_CACHE_KEY_DEFS_PREFIX}${version}`, async () => {
68
+ if (isolated || dirty) return new BylineSchemaRegistry(db).listFields();
69
+ return initWithLock(holder.lock, () => holder.hasValue && holder.cachedVersion === version ? holder.value : null, (isCurrentClaim) => (async () => {
70
+ const defs = await new BylineSchemaRegistry(db).listFields();
71
+ if (isCurrentClaim() && version >= holder.cachedVersion) {
72
+ holder.value = defs;
73
+ holder.hasValue = true;
74
+ holder.cachedVersion = version;
75
+ }
76
+ return defs;
77
+ })(), {
78
+ deadlineMs: reclaimDeadlineMs,
79
+ anchor: (promise) => after(() => promise)
80
+ });
81
+ });
82
+ }
83
+
84
+ //#endregion
13
85
  //#region src/database/repositories/byline.ts
14
86
  var byline_exports = /* @__PURE__ */ __exportAll({
15
87
  BylineRepository: () => BylineRepository,
16
88
  coerceFieldValue: () => coerceFieldValue
17
89
  });
90
+ function preferLocalizedRows(rows, locale) {
91
+ if (locale === void 0) return rows;
92
+ const selected = /* @__PURE__ */ new Map();
93
+ for (const row of rows) {
94
+ const key = `${row.content_id ?? ""}:${row.translation_group ?? row.id}`;
95
+ const existing = selected.get(key);
96
+ if (!existing || getLocaleRank(row.locale, locale) < getLocaleRank(existing.locale, locale) || getLocaleRank(row.locale, locale) === getLocaleRank(existing.locale, locale) && row.id < existing.id) selected.set(key, row);
97
+ }
98
+ return rows.filter((row) => selected.get(`${row.content_id ?? ""}:${row.translation_group ?? row.id}`) === row);
99
+ }
18
100
  function rowToByline(row) {
19
101
  return {
20
102
  id: row.id,
@@ -233,23 +315,25 @@ var BylineRepository = class {
233
315
  const fieldById = new Map(defs.map((d) => [d.id, d]));
234
316
  const translatableByByline = /* @__PURE__ */ new Map();
235
317
  const bylineIds = [...new Set(summaries.map((s) => s.id))];
236
- for (const chunk of chunks(bylineIds, SQL_BATCH_SIZE)) {
237
- const trRows = await this.db.selectFrom("_emdash_byline_field_values").select([
238
- "byline_id",
239
- "field_id",
240
- "value"
241
- ]).where("byline_id", "in", chunk).execute();
242
- for (const trRow of trRows) {
243
- let fieldMap = translatableByByline.get(trRow.byline_id);
244
- if (!fieldMap) {
245
- fieldMap = /* @__PURE__ */ new Map();
246
- translatableByByline.set(trRow.byline_id, fieldMap);
318
+ const loadTranslatable = async () => {
319
+ for (const chunk of chunks(bylineIds, SQL_BATCH_SIZE)) {
320
+ const trRows = await this.db.selectFrom("_emdash_byline_field_values").select([
321
+ "byline_id",
322
+ "field_id",
323
+ "value"
324
+ ]).where("byline_id", "in", chunk).execute();
325
+ for (const trRow of trRows) {
326
+ let fieldMap = translatableByByline.get(trRow.byline_id);
327
+ if (!fieldMap) {
328
+ fieldMap = /* @__PURE__ */ new Map();
329
+ translatableByByline.set(trRow.byline_id, fieldMap);
330
+ }
331
+ fieldMap.set(trRow.field_id, trRow.value);
247
332
  }
248
- fieldMap.set(trRow.field_id, trRow.value);
249
333
  }
250
- }
334
+ };
251
335
  const groups = [...new Set(summaries.map((s) => s.translationGroup).filter((g) => typeof g === "string" && g.length > 0))];
252
- const groupByGroup = await this.loadGroupValuesByIds(groups);
336
+ const [, groupByGroup] = await Promise.all([loadTranslatable(), this.loadGroupValuesByIds(groups)]);
253
337
  for (const summary of summaries) {
254
338
  const trValues = translatableByByline.get(summary.id);
255
339
  if (trValues) for (const [fieldId, value] of trValues) {
@@ -345,8 +429,8 @@ var BylineRepository = class {
345
429
  */
346
430
  async findBySlug(slug, options) {
347
431
  let query = this.selectBylineWithAvatar().where("b.slug", "=", slug);
348
- if (options?.locale !== void 0) query = query.where("b.locale", "=", options.locale);
349
- const row = await query.orderBy("b.locale", "asc").executeTakeFirst();
432
+ if (options?.locale !== void 0) query = query.where(localeMatches("b.locale", options.locale));
433
+ const row = await query.orderBy(options?.locale !== void 0 ? localeOrder("b.locale", options.locale) : "b.locale", "asc").orderBy("b.id", "asc").executeTakeFirst();
350
434
  return this.withCustomFieldsOne(row);
351
435
  }
352
436
  /**
@@ -357,8 +441,8 @@ var BylineRepository = class {
357
441
  */
358
442
  async findByUserId(userId, options) {
359
443
  let query = this.selectBylineWithAvatar().where("b.user_id", "=", userId);
360
- if (options?.locale !== void 0) query = query.where("b.locale", "=", options.locale);
361
- const row = await query.orderBy("b.locale", "asc").executeTakeFirst();
444
+ if (options?.locale !== void 0) query = query.where(localeMatches("b.locale", options.locale));
445
+ const row = await query.orderBy(options?.locale !== void 0 ? localeOrder("b.locale", options.locale) : "b.locale", "asc").orderBy("b.id", "asc").executeTakeFirst();
362
446
  return this.withCustomFieldsOne(row);
363
447
  }
364
448
  async findMany(options) {
@@ -370,7 +454,7 @@ var BylineRepository = class {
370
454
  }
371
455
  if (options?.isGuest !== void 0) query = query.where("is_guest", "=", options.isGuest ? 1 : 0);
372
456
  if (options?.userId !== void 0) query = query.where("user_id", "=", options.userId);
373
- if (options?.locale !== void 0) query = query.where("locale", "=", options.locale);
457
+ if (options?.locale !== void 0) query = query.where(localeMatches("locale", options.locale));
374
458
  if (options?.cursor) {
375
459
  const decoded = decodeCursor(options.cursor);
376
460
  query = query.where((eb) => eb.or([eb("created_at", "<", decoded.orderValue), eb.and([eb("created_at", "=", decoded.orderValue), eb("id", "<", decoded.id)])]));
@@ -608,8 +692,8 @@ var BylineRepository = class {
608
692
  "b.locale as locale",
609
693
  "b.translation_group as translation_group"
610
694
  ]).where("cb.collection_slug", "=", collectionSlug).where("cb.content_id", "=", contentId).orderBy("cb.sort_order", "asc");
611
- if (options?.locale !== void 0) query = query.where("b.locale", "=", options.locale);
612
- const rows = await query.execute();
695
+ if (options?.locale !== void 0) query = query.where(localeMatches("b.locale", options.locale));
696
+ const rows = preferLocalizedRows(await query.execute(), options?.locale);
613
697
  const bylineRows = rows.map((row) => ({
614
698
  id: row.id,
615
699
  slug: row.slug,
@@ -708,8 +792,8 @@ var BylineRepository = class {
708
792
  "b.locale as locale",
709
793
  "b.translation_group as translation_group"
710
794
  ]).where("cb.collection_slug", "=", collectionSlug).where("cb.content_id", "in", chunk).orderBy("cb.sort_order", "asc");
711
- if (options?.locale !== void 0) query = query.where("b.locale", "=", options.locale);
712
- const rows = await query.execute();
795
+ if (options?.locale !== void 0) query = query.where(localeMatches("b.locale", options.locale));
796
+ const rows = preferLocalizedRows(await query.execute(), options?.locale);
713
797
  const bylineRows = rows.map((row) => ({
714
798
  id: row.id,
715
799
  slug: row.slug,
@@ -784,7 +868,7 @@ var BylineRepository = class {
784
868
  "b.locale as locale",
785
869
  "b.translation_group as translation_group"
786
870
  ]).where("b.user_id", "in", chunk);
787
- if (options?.locale !== void 0) query = query.where("b.locale", "=", options.locale);
871
+ if (options?.locale !== void 0) query = query.where(localeMatches("b.locale", options.locale));
788
872
  const rows = await query.execute();
789
873
  let bylines;
790
874
  if (options?.skipHydration === true) {
@@ -795,7 +879,8 @@ var BylineRepository = class {
795
879
  const row = rows[i];
796
880
  const summary = bylines[i];
797
881
  if (!row || !summary || !row.user_id) continue;
798
- result.set(row.user_id, summary);
882
+ const existing = result.get(row.user_id);
883
+ if (!existing || options?.locale === void 0 || getLocaleRank(row.locale, options.locale) < getLocaleRank(existing.locale, options.locale) || getLocaleRank(row.locale, options.locale) === getLocaleRank(existing.locale, options.locale) && row.id < existing.id) result.set(row.user_id, summary);
799
884
  }
800
885
  }
801
886
  return result;
@@ -857,10 +942,10 @@ var BylineRepository = class {
857
942
  const tableName = `ec_${collectionSlug}`;
858
943
  validateIdentifier(tableName, "content table");
859
944
  const idToGroup = /* @__PURE__ */ new Map();
860
- if (inputBylines.length > 0) {
861
- const wireIds = [...new Set(inputBylines.map((item) => item.bylineId))];
862
- const rows = await this.db.selectFrom("_emdash_bylines").select(["id", "translation_group"]).where("id", "in", wireIds).execute();
863
- if (rows.length !== wireIds.length) throw new Error("One or more byline IDs do not exist");
945
+ const wireIds = [...new Set(inputBylines.map((item) => item.bylineId))];
946
+ for (const batch of chunks(wireIds, SQL_BATCH_SIZE)) {
947
+ const rows = await this.db.selectFrom("_emdash_bylines").select(["id", "translation_group"]).where("id", "in", batch).execute();
948
+ if (rows.length !== batch.length) throw new Error("One or more byline IDs do not exist");
864
949
  for (const row of rows) idToGroup.set(row.id, row.translation_group ?? row.id);
865
950
  }
866
951
  const seenGroups = /* @__PURE__ */ new Set();
@@ -906,4 +991,4 @@ var BylineRepository = class {
906
991
 
907
992
  //#endregion
908
993
  export { byline_exports as n, coerceFieldValue as r, BylineRepository as t };
909
- //# sourceMappingURL=byline-BR1qhyiw.mjs.map
994
+ //# sourceMappingURL=byline-DHJS-GGb.mjs.map