emdash 0.40.1 → 0.42.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 (1515) hide show
  1. package/dist/action-token-DBki7IT4.mjs +26 -0
  2. package/dist/action-token-DBki7IT4.mjs.map +1 -0
  3. package/dist/activation-DDuqAat2.mjs +387 -0
  4. package/dist/activation-DDuqAat2.mjs.map +1 -0
  5. package/dist/adapters-BrZxU6vM.d.mts +171 -0
  6. package/dist/adapters-BrZxU6vM.d.mts.map +1 -0
  7. package/dist/allowed-origins-CFtudhyw.mjs +116 -0
  8. package/dist/allowed-origins-CFtudhyw.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +5 -4
  10. package/dist/api/route-utils.d.mts.map +1 -1
  11. package/dist/api/route-utils.mjs +52 -46
  12. package/dist/api/route-utils.mjs.map +1 -1
  13. package/dist/api/schemas/index.d.mts +2 -2
  14. package/dist/api/schemas/index.mjs +11 -10
  15. package/dist/api-CFQn8VLR.mjs +4973 -0
  16. package/dist/api-CFQn8VLR.mjs.map +1 -0
  17. package/dist/api-tokens-P3mAaQgr.mjs +166 -0
  18. package/dist/api-tokens-P3mAaQgr.mjs.map +1 -0
  19. package/dist/apply-C1kq5l7p.mjs +1672 -0
  20. package/dist/apply-C1kq5l7p.mjs.map +1 -0
  21. package/dist/approvals-l9sGqPmL.mjs +460 -0
  22. package/dist/approvals-l9sGqPmL.mjs.map +1 -0
  23. package/dist/artifact-fetch-CWxyELVI.mjs +659 -0
  24. package/dist/artifact-fetch-CWxyELVI.mjs.map +1 -0
  25. package/dist/astro/index.d.mts +14 -14
  26. package/dist/astro/index.d.mts.map +1 -1
  27. package/dist/astro/index.mjs +106 -560
  28. package/dist/astro/index.mjs.map +1 -1
  29. package/dist/astro/middleware/auth.d.mts +12 -12
  30. package/dist/astro/middleware/auth.mjs +10 -10
  31. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  32. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  33. package/dist/astro/middleware/redirect.mjs +19 -9
  34. package/dist/astro/middleware/redirect.mjs.map +1 -1
  35. package/dist/astro/middleware/request-context.d.mts +2 -1
  36. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  37. package/dist/astro/middleware/request-context.mjs +15 -6
  38. package/dist/astro/middleware/request-context.mjs.map +1 -1
  39. package/dist/astro/middleware/setup.mjs +1 -1
  40. package/dist/astro/middleware.d.mts +12 -12
  41. package/dist/astro/middleware.mjs +114 -107
  42. package/dist/astro/middleware.mjs.map +1 -1
  43. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +15 -14
  44. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +15 -14
  46. package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
  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 +7 -7
  50. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +18 -17
  51. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
  52. package/dist/astro/routes/api/admin/byline-fields/index.mjs +18 -17
  53. package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
  54. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +18 -17
  55. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
  56. package/dist/astro/routes/api/admin/bylines/_id_/index.d.mts.map +1 -1
  57. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +36 -27
  58. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/bylines/_id_/translations.d.mts.map +1 -1
  60. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +32 -26
  61. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  62. package/dist/astro/routes/api/admin/bylines/index.d.mts.map +1 -1
  63. package/dist/astro/routes/api/admin/bylines/index.mjs +32 -26
  64. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  65. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +20 -19
  66. package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
  67. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  68. package/dist/astro/routes/api/admin/comments/bulk.mjs +19 -18
  69. package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
  70. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  71. package/dist/astro/routes/api/admin/comments/index.mjs +19 -18
  72. package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
  73. package/dist/astro/routes/api/admin/core-update.d.mts +8 -0
  74. package/dist/astro/routes/api/admin/core-update.d.mts.map +1 -0
  75. package/dist/astro/routes/api/admin/core-update.mjs +28 -0
  76. package/dist/astro/routes/api/admin/core-update.mjs.map +1 -0
  77. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  78. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  79. package/dist/astro/routes/api/admin/media-usage/activation.mjs +21 -20
  80. package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -1
  81. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +23 -22
  82. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
  83. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +23 -22
  84. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
  85. package/dist/astro/routes/api/admin/media-usage/progress.mjs +26 -25
  86. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  87. package/dist/astro/routes/api/admin/media-usage/repair.mjs +32 -31
  88. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  89. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +23 -22
  90. package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +23 -22
  92. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
  93. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  94. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  95. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  96. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  97. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +75 -69
  98. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  100. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +74 -68
  101. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +75 -69
  103. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  104. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +86 -79
  105. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  106. package/dist/astro/routes/api/admin/plugins/index.mjs +75 -69
  107. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  108. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.d.mts.map +1 -1
  109. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +10 -7
  110. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs.map +1 -1
  111. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +74 -68
  112. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  113. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +85 -78
  114. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  115. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +74 -68
  116. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  117. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +75 -69
  118. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  119. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +87 -80
  120. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  121. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -9
  122. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +77 -71
  123. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  125. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +75 -69
  126. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  127. package/dist/astro/routes/api/admin/plugins/updates.mjs +74 -68
  128. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
  130. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +74 -68
  131. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.d.mts.map +1 -1
  133. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +10 -7
  134. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs.map +1 -1
  135. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +74 -68
  136. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  137. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  138. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +42 -41
  139. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
  140. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +42 -41
  141. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
  142. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +44 -43
  143. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
  144. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +44 -43
  145. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
  146. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +44 -43
  147. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
  148. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +45 -44
  149. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
  150. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +45 -44
  151. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
  152. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +44 -43
  153. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
  154. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +45 -44
  155. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
  156. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +46 -45
  157. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
  158. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +44 -43
  159. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
  160. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +44 -43
  161. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
  162. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +46 -45
  163. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
  164. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +44 -43
  165. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
  166. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +46 -45
  167. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
  168. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +44 -43
  169. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
  170. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +44 -43
  171. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
  172. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +46 -45
  173. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
  174. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +44 -43
  175. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
  176. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +44 -43
  177. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
  178. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +46 -45
  179. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
  180. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
  181. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  182. package/dist/astro/routes/api/admin/users/_id_/index.mjs +16 -15
  183. package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
  184. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  185. package/dist/astro/routes/api/admin/users/index.mjs +15 -14
  186. package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
  187. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  188. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  189. package/dist/astro/routes/api/auth/invite/complete.d.mts.map +1 -1
  190. package/dist/astro/routes/api/auth/invite/complete.mjs +23 -19
  191. package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
  192. package/dist/astro/routes/api/auth/invite/index.mjs +17 -16
  193. package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
  194. package/dist/astro/routes/api/auth/invite/register-options.mjs +18 -17
  195. package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
  196. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  197. package/dist/astro/routes/api/auth/magic-link/send.mjs +19 -18
  198. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  199. package/dist/astro/routes/api/auth/magic-link/verify.d.mts.map +1 -1
  200. package/dist/astro/routes/api/auth/magic-link/verify.mjs +19 -15
  201. package/dist/astro/routes/api/auth/magic-link/verify.mjs.map +1 -1
  202. package/dist/astro/routes/api/auth/me.mjs +16 -15
  203. package/dist/astro/routes/api/auth/me.mjs.map +1 -1
  204. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  205. package/dist/astro/routes/api/auth/oauth/_provider_/callback.d.mts.map +1 -1
  206. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +13 -4
  207. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs.map +1 -1
  208. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  209. package/dist/astro/routes/api/auth/passkey/_id_.mjs +15 -14
  210. package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
  211. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  212. package/dist/astro/routes/api/auth/passkey/options.mjs +20 -19
  213. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
  214. package/dist/astro/routes/api/auth/passkey/register/options.mjs +18 -17
  215. package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
  216. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +19 -18
  217. package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
  218. package/dist/astro/routes/api/auth/passkey/verify.d.mts.map +1 -1
  219. package/dist/astro/routes/api/auth/passkey/verify.mjs +23 -19
  220. package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
  221. package/dist/astro/routes/api/auth/signup/complete.d.mts.map +1 -1
  222. package/dist/astro/routes/api/auth/signup/complete.mjs +23 -19
  223. package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
  224. package/dist/astro/routes/api/auth/signup/request.mjs +18 -17
  225. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  226. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  227. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +13 -13
  228. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +20 -19
  229. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
  230. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  231. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -17
  232. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  233. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  234. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +18 -17
  235. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  236. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
  237. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +12 -11
  238. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs.map +1 -1
  239. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +33 -32
  240. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  241. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -17
  242. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  243. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts +1 -2
  244. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -1
  245. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +44 -54
  246. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  247. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +36 -30
  248. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  249. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  250. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  251. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +18 -17
  252. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  253. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +27 -25
  254. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  255. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  256. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -17
  257. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  258. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  259. package/dist/astro/routes/api/content/_collection_/_id_.mjs +19 -18
  260. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  261. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  262. package/dist/astro/routes/api/content/_collection_/index.mjs +16 -15
  263. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  264. package/dist/astro/routes/api/content/_collection_/trash.mjs +16 -15
  265. package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
  266. package/dist/astro/routes/api/dashboard.mjs +13 -10
  267. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  268. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  269. package/dist/astro/routes/api/health.mjs +6 -6
  270. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  271. package/dist/astro/routes/api/import/probe.mjs +25 -24
  272. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  273. package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
  274. package/dist/astro/routes/api/import/wordpress/execute.d.mts +14 -14
  275. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  276. package/dist/astro/routes/api/import/wordpress/execute.mjs +167 -21
  277. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  278. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  279. package/dist/astro/routes/api/import/wordpress/media.mjs +20 -19
  280. package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
  281. package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -18
  282. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  283. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  284. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +29 -28
  285. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  286. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  287. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -24
  288. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  289. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  290. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +36 -35
  291. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  292. package/dist/astro/routes/api/manifest.mjs +6 -6
  293. package/dist/astro/routes/api/mcp.mjs +167 -110
  294. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  295. package/dist/astro/routes/api/media/_id_/confirm.mjs +20 -19
  296. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  297. package/dist/astro/routes/api/media/_id_/replace.mjs +17 -16
  298. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -1
  299. package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
  300. package/dist/astro/routes/api/media/_id_/usage.mjs +34 -33
  301. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  302. package/dist/astro/routes/api/media/_id_.mjs +32 -31
  303. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  304. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  305. package/dist/astro/routes/api/media/file/_...key_.mjs +9 -9
  306. package/dist/astro/routes/api/media/folders/_id_.mjs +17 -16
  307. package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -1
  308. package/dist/astro/routes/api/media/folders/index.mjs +17 -16
  309. package/dist/astro/routes/api/media/folders/index.mjs.map +1 -1
  310. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  311. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  312. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  313. package/dist/astro/routes/api/media/upload-url.mjs +19 -18
  314. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  315. package/dist/astro/routes/api/media.mjs +36 -35
  316. package/dist/astro/routes/api/media.mjs.map +1 -1
  317. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +19 -18
  318. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  319. package/dist/astro/routes/api/menus/_name_/items.mjs +19 -18
  320. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  321. package/dist/astro/routes/api/menus/_name_/reorder.mjs +19 -18
  322. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  323. package/dist/astro/routes/api/menus/_name_/translations.mjs +19 -18
  324. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  325. package/dist/astro/routes/api/menus/_name_.mjs +19 -18
  326. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  327. package/dist/astro/routes/api/menus/index.mjs +19 -18
  328. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  329. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  330. package/dist/astro/routes/api/oauth/device/authorize.d.mts +2 -1
  331. package/dist/astro/routes/api/oauth/device/authorize.d.mts.map +1 -1
  332. package/dist/astro/routes/api/oauth/device/authorize.mjs +23 -9
  333. package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
  334. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  335. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  336. package/dist/astro/routes/api/oauth/register.d.mts.map +1 -1
  337. package/dist/astro/routes/api/oauth/register.mjs +15 -7
  338. package/dist/astro/routes/api/oauth/register.mjs.map +1 -1
  339. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  340. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  341. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  342. package/dist/astro/routes/api/openapi.json.mjs +21 -20
  343. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  344. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +12 -11
  345. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
  346. package/dist/astro/routes/api/redirects/404s/index.mjs +20 -19
  347. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  348. package/dist/astro/routes/api/redirects/404s/summary.mjs +20 -19
  349. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  350. package/dist/astro/routes/api/redirects/_id_.mjs +20 -19
  351. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  352. package/dist/astro/routes/api/redirects/index.mjs +20 -19
  353. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  354. package/dist/astro/routes/api/relations/_id_/index.mjs +36 -30
  355. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  356. package/dist/astro/routes/api/relations/index.mjs +38 -32
  357. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  358. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  359. package/dist/astro/routes/api/revisions/_revisionId_/restore.d.mts.map +1 -1
  360. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +26 -6
  361. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs.map +1 -1
  362. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +74 -68
  363. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  364. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +74 -68
  365. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  366. package/dist/astro/routes/api/schema/block-types/index.mjs +74 -68
  367. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  368. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +76 -70
  369. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  370. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +74 -68
  371. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  372. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +74 -68
  373. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  374. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +74 -68
  375. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  376. package/dist/astro/routes/api/schema/collections/index.mjs +74 -68
  377. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  378. package/dist/astro/routes/api/schema/collections/reorder.mjs +74 -68
  379. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  380. package/dist/astro/routes/api/schema/index.mjs +17 -16
  381. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  382. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +74 -68
  383. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  384. package/dist/astro/routes/api/schema/orphans/index.mjs +74 -68
  385. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  386. package/dist/astro/routes/api/search/enable.mjs +20 -19
  387. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  388. package/dist/astro/routes/api/search/index.mjs +19 -18
  389. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  390. package/dist/astro/routes/api/search/rebuild.mjs +20 -19
  391. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  392. package/dist/astro/routes/api/search/stats.mjs +9 -9
  393. package/dist/astro/routes/api/search/suggest.mjs +19 -18
  394. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  395. package/dist/astro/routes/api/sections/_slug_.mjs +19 -18
  396. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  397. package/dist/astro/routes/api/sections/index.mjs +19 -18
  398. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  399. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  400. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  401. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  402. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  403. package/dist/astro/routes/api/settings/email.mjs +6 -6
  404. package/dist/astro/routes/api/settings.mjs +23 -22
  405. package/dist/astro/routes/api/settings.mjs.map +1 -1
  406. package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -1
  407. package/dist/astro/routes/api/setup/admin-verify.mjs +26 -24
  408. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  409. package/dist/astro/routes/api/setup/admin.mjs +19 -18
  410. package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
  411. package/dist/astro/routes/api/setup/dev-bypass.mjs +47 -40
  412. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  413. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  414. package/dist/astro/routes/api/setup/index.mjs +52 -45
  415. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  416. package/dist/astro/routes/api/setup/status.mjs +6 -6
  417. package/dist/astro/routes/api/snapshot.mjs +8 -8
  418. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +25 -24
  419. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  420. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +25 -24
  421. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  422. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -24
  423. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  424. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +25 -24
  425. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  426. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +24 -23
  427. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  428. package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -24
  429. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  430. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +42 -40
  431. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  432. package/dist/astro/routes/api/taxonomies/index.mjs +25 -24
  433. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  434. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  435. package/dist/astro/routes/api/typegen.d.mts.map +1 -1
  436. package/dist/astro/routes/api/typegen.mjs +8 -39
  437. package/dist/astro/routes/api/typegen.mjs.map +1 -1
  438. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  439. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +20 -19
  440. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs.map +1 -1
  441. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  442. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  443. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  444. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  445. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +17 -16
  446. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  447. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +20 -19
  448. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  449. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -19
  450. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  451. package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
  452. package/dist/astro/routes/api/widget-areas/index.mjs +20 -19
  453. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  454. package/dist/astro/routes/api/widget-components.mjs +5 -5
  455. package/dist/astro/routes/robots.txt.mjs +7 -7
  456. package/dist/astro/routes/sitemap-_collection_.xml.mjs +10 -10
  457. package/dist/astro/routes/sitemap.xml.mjs +8 -8
  458. package/dist/astro/types.d.mts +30 -18
  459. package/dist/astro/types.d.mts.map +1 -1
  460. package/dist/audit-BszbE_BP.mjs +127 -0
  461. package/dist/audit-BszbE_BP.mjs.map +1 -0
  462. package/dist/auth/providers/github.d.mts +1 -1
  463. package/dist/auth/providers/google.d.mts +1 -1
  464. package/dist/authoritative-records-dSvXCfzb.mjs +5172 -0
  465. package/dist/authoritative-records-dSvXCfzb.mjs.map +1 -0
  466. package/dist/authorize-soZXK7U0.mjs +49 -0
  467. package/dist/authorize-soZXK7U0.mjs.map +1 -0
  468. package/dist/backup-DQ3CABsO.mjs +246 -0
  469. package/dist/backup-DQ3CABsO.mjs.map +1 -0
  470. package/dist/block-types-DIG_KZwi.mjs +132 -0
  471. package/dist/block-types-DIG_KZwi.mjs.map +1 -0
  472. package/dist/block-values-BrTrtA-v.mjs +175 -0
  473. package/dist/block-values-BrTrtA-v.mjs.map +1 -0
  474. package/dist/byline-02tu_Uc-.mjs +909 -0
  475. package/dist/byline-02tu_Uc-.mjs.map +1 -0
  476. package/dist/byline-fields-B01Txzyx.mjs +123 -0
  477. package/dist/byline-fields-B01Txzyx.mjs.map +1 -0
  478. package/dist/byline-fields-DHJs0Mja.mjs +280 -0
  479. package/dist/byline-fields-DHJs0Mja.mjs.map +1 -0
  480. package/dist/byline-registry-dvt4N3xV.mjs +406 -0
  481. package/dist/byline-registry-dvt4N3xV.mjs.map +1 -0
  482. package/dist/bylines-COTwmMBF.mjs +150 -0
  483. package/dist/bylines-COTwmMBF.mjs.map +1 -0
  484. package/dist/bylines-D_S8UKRX.mjs +214 -0
  485. package/dist/bylines-D_S8UKRX.mjs.map +1 -0
  486. package/dist/cache-CPanL9IO.mjs +114 -0
  487. package/dist/cache-CPanL9IO.mjs.map +1 -0
  488. package/dist/canonical-CAecl1UQ.mjs +174 -0
  489. package/dist/canonical-CAecl1UQ.mjs.map +1 -0
  490. package/dist/capture-triggers-CdZfvHtF.mjs +362 -0
  491. package/dist/capture-triggers-CdZfvHtF.mjs.map +1 -0
  492. package/dist/challenge-store-CxZxPqaw.mjs +51 -0
  493. package/dist/challenge-store-CxZxPqaw.mjs.map +1 -0
  494. package/dist/checksum-DtH6m5uk.mjs +162 -0
  495. package/dist/checksum-DtH6m5uk.mjs.map +1 -0
  496. package/dist/chrome-tags-CKELm-bo.mjs +24 -0
  497. package/dist/chrome-tags-CKELm-bo.mjs.map +1 -0
  498. package/dist/chunks-DBmkKmBH.mjs +25 -0
  499. package/dist/chunks-DBmkKmBH.mjs.map +1 -0
  500. package/dist/cli/index.mjs +380 -1620
  501. package/dist/cli/index.mjs.map +1 -1
  502. package/dist/client/cf-access.d.mts +1 -1
  503. package/dist/client/index.d.mts +39 -34
  504. package/dist/client/index.d.mts.map +1 -1
  505. package/dist/client/index.mjs +8 -3
  506. package/dist/client/index.mjs.map +1 -1
  507. package/dist/collection-deletion-JecE26cS.mjs +436 -0
  508. package/dist/collection-deletion-JecE26cS.mjs.map +1 -0
  509. package/dist/collection-deletion-processor-DgCfF3a1.mjs +217 -0
  510. package/dist/collection-deletion-processor-DgCfF3a1.mjs.map +1 -0
  511. package/dist/collection-slugs-cache-BNRAPNiu.mjs +85 -0
  512. package/dist/collection-slugs-cache-BNRAPNiu.mjs.map +1 -0
  513. package/dist/comment-Cq1UYN8_.mjs +313 -0
  514. package/dist/comment-Cq1UYN8_.mjs.map +1 -0
  515. package/dist/comment-reaction-DPeGAfjd.mjs +85 -0
  516. package/dist/comment-reaction-DPeGAfjd.mjs.map +1 -0
  517. package/dist/comments-BRtp992B.mjs +99 -0
  518. package/dist/comments-BRtp992B.mjs.map +1 -0
  519. package/dist/comments-Bi2j9IoX.mjs +195 -0
  520. package/dist/comments-Bi2j9IoX.mjs.map +1 -0
  521. package/dist/components-CQY-Sgm-.mjs +108 -0
  522. package/dist/components-CQY-Sgm-.mjs.map +1 -0
  523. package/dist/config-BnuORwSP.mjs +242 -0
  524. package/dist/config-BnuORwSP.mjs.map +1 -0
  525. package/dist/config-CDmPF4p7.d.mts +39 -0
  526. package/dist/config-CDmPF4p7.d.mts.map +1 -0
  527. package/dist/config-DHsDMpXc.d.mts +6707 -0
  528. package/dist/config-DHsDMpXc.d.mts.map +1 -0
  529. package/dist/connection-B9pIasFd.mjs +36 -0
  530. package/dist/connection-B9pIasFd.mjs.map +1 -0
  531. package/dist/content-RzEXY3QX.mjs +2020 -0
  532. package/dist/content-RzEXY3QX.mjs.map +1 -0
  533. package/dist/content-list-query-CnXfe1Nu.d.mts +26 -0
  534. package/dist/content-list-query-CnXfe1Nu.d.mts.map +1 -0
  535. package/dist/content-policy-Dm32n9C6.mjs +46 -0
  536. package/dist/content-policy-Dm32n9C6.mjs.map +1 -0
  537. package/dist/content-repair-B-k5JrVN.mjs +442 -0
  538. package/dist/content-repair-B-k5JrVN.mjs.map +1 -0
  539. package/dist/context-CtRvoSAj.mjs +2026 -0
  540. package/dist/context-CtRvoSAj.mjs.map +1 -0
  541. package/dist/credits-CAFPFhuk.mjs +110 -0
  542. package/dist/credits-CAFPFhuk.mjs.map +1 -0
  543. package/dist/cron-xe5XKqA-.mjs +306 -0
  544. package/dist/cron-xe5XKqA-.mjs.map +1 -0
  545. package/dist/dashboard-BoV4pwPP.mjs +151 -0
  546. package/dist/dashboard-BoV4pwPP.mjs.map +1 -0
  547. package/dist/db/index.d.mts +3 -3
  548. package/dist/db/index.mjs +1 -1
  549. package/dist/db/libsql-migrations.d.mts +1 -1
  550. package/dist/db/libsql-migrations.mjs +4 -4
  551. package/dist/db/libsql.d.mts +1 -1
  552. package/dist/db/postgres-migrations.d.mts +1 -1
  553. package/dist/db/postgres-migrations.mjs +4 -4
  554. package/dist/db/postgres.d.mts +1 -1
  555. package/dist/db/sqlite-migrations.d.mts +1 -1
  556. package/dist/db/sqlite-migrations.mjs +4 -4
  557. package/dist/db/sqlite.d.mts +1 -1
  558. package/dist/db/sqlite.mjs +1 -1
  559. package/dist/default-DaoYyFRS.mjs +81 -0
  560. package/dist/default-DaoYyFRS.mjs.map +1 -0
  561. package/dist/deferred-tasks-OBADxoFf.d.mts +9 -0
  562. package/dist/deferred-tasks-OBADxoFf.d.mts.map +1 -0
  563. package/dist/destination-r2zIAZ2S.mjs +18 -0
  564. package/dist/destination-r2zIAZ2S.mjs.map +1 -0
  565. package/dist/dev-typegen-8JlYYFno.mjs +29 -0
  566. package/dist/dev-typegen-8JlYYFno.mjs.map +1 -0
  567. package/dist/device-flow-CzKi6tID.mjs +521 -0
  568. package/dist/device-flow-CzKi6tID.mjs.map +1 -0
  569. package/dist/digest-DiYAoZpf.mjs +194 -0
  570. package/dist/digest-DiYAoZpf.mjs.map +1 -0
  571. package/dist/direct-executor-CsEmH_2m.mjs +104 -0
  572. package/dist/direct-executor-CsEmH_2m.mjs.map +1 -0
  573. package/dist/dist-Cfu8mMBs.mjs +810 -0
  574. package/dist/dist-Cfu8mMBs.mjs.map +1 -0
  575. package/dist/email-console-DmqVF5J_.mjs +50 -0
  576. package/dist/email-console-DmqVF5J_.mjs.map +1 -0
  577. package/dist/email-locale-B5OjmAj_.mjs +25 -0
  578. package/dist/email-locale-B5OjmAj_.mjs.map +1 -0
  579. package/dist/emdash-runtime-CMdYH2Of.mjs +4229 -0
  580. package/dist/emdash-runtime-CMdYH2Of.mjs.map +1 -0
  581. package/dist/enrich-BDdVNeDK.mjs +194 -0
  582. package/dist/enrich-BDdVNeDK.mjs.map +1 -0
  583. package/dist/entry-lock-B-1bUDxX.d.mts +4544 -0
  584. package/dist/entry-lock-B-1bUDxX.d.mts.map +1 -0
  585. package/dist/entry-lock-B5eaZEZP.mjs +163 -0
  586. package/dist/entry-lock-B5eaZEZP.mjs.map +1 -0
  587. package/dist/entry-lock-PP1JCXBB.mjs +1180 -0
  588. package/dist/entry-lock-PP1JCXBB.mjs.map +1 -0
  589. package/dist/entry-locks-DJAqVweV.mjs +167 -0
  590. package/dist/entry-locks-DJAqVweV.mjs.map +1 -0
  591. package/dist/env-types-BaTCgn-y.mjs +38 -0
  592. package/dist/env-types-BaTCgn-y.mjs.map +1 -0
  593. package/dist/error-CEdm_AWU.mjs +90 -0
  594. package/dist/error-CEdm_AWU.mjs.map +1 -0
  595. package/dist/errors-CNvATh_7.mjs +469 -0
  596. package/dist/errors-CNvATh_7.mjs.map +1 -0
  597. package/dist/errors-CjXd1LgH.mjs +120 -0
  598. package/dist/errors-CjXd1LgH.mjs.map +1 -0
  599. package/dist/escape-nJW7dR0s.mjs +9 -0
  600. package/dist/escape-nJW7dR0s.mjs.map +1 -0
  601. package/dist/fence-BrnQffdY.mjs +162 -0
  602. package/dist/fence-BrnQffdY.mjs.map +1 -0
  603. package/dist/field-defs-cache-DEkFYCDE.mjs +77 -0
  604. package/dist/field-defs-cache-DEkFYCDE.mjs.map +1 -0
  605. package/dist/field-map-Cp5hDSRU.mjs +83 -0
  606. package/dist/field-map-Cp5hDSRU.mjs.map +1 -0
  607. package/dist/focal-point-JX8kcOTQ.mjs +23 -0
  608. package/dist/focal-point-JX8kcOTQ.mjs.map +1 -0
  609. package/dist/fts-manager-DU03MxWu.mjs +443 -0
  610. package/dist/fts-manager-DU03MxWu.mjs.map +1 -0
  611. package/dist/gc-Gf9LOF42.mjs +75 -0
  612. package/dist/gc-Gf9LOF42.mjs.map +1 -0
  613. package/dist/hash-CY4QdeMJ.mjs +37 -0
  614. package/dist/hash-CY4QdeMJ.mjs.map +1 -0
  615. package/dist/hook-result-DjdVwWpw.d.mts +31 -0
  616. package/dist/hook-result-DjdVwWpw.d.mts.map +1 -0
  617. package/dist/hreflang-Bq0ahAd4.mjs +105 -0
  618. package/dist/hreflang-Bq0ahAd4.mjs.map +1 -0
  619. package/dist/hreflang-C7ETs0Tv.d.mts +50 -0
  620. package/dist/hreflang-C7ETs0Tv.d.mts.map +1 -0
  621. package/dist/http-route-dispatch-B2G7_OOm.mjs +339 -0
  622. package/dist/http-route-dispatch-B2G7_OOm.mjs.map +1 -0
  623. package/dist/identity-u3KgtUC9.mjs +35 -0
  624. package/dist/identity-u3KgtUC9.mjs.map +1 -0
  625. package/dist/import-CzP9ffo0.mjs +2020 -0
  626. package/dist/import-CzP9ffo0.mjs.map +1 -0
  627. package/dist/index-D1_ykO2u.d.mts +623 -0
  628. package/dist/index-D1_ykO2u.d.mts.map +1 -0
  629. package/dist/index.d.mts +24 -24
  630. package/dist/index.mjs +108 -102
  631. package/dist/install-finalization-TbcQozrV.mjs +58 -0
  632. package/dist/install-finalization-TbcQozrV.mjs.map +1 -0
  633. package/dist/keys-r08WvAng.mjs +61 -0
  634. package/dist/keys-r08WvAng.mjs.map +1 -0
  635. package/dist/kinds-CXY-fwQ6.mjs +974 -0
  636. package/dist/kinds-CXY-fwQ6.mjs.map +1 -0
  637. package/dist/lifecycle-CpebZNAA.mjs +25 -0
  638. package/dist/lifecycle-CpebZNAA.mjs.map +1 -0
  639. package/dist/load-dHcR5yh9.mjs +28 -0
  640. package/dist/load-dHcR5yh9.mjs.map +1 -0
  641. package/dist/loader-B_bcoE1h.mjs +1197 -0
  642. package/dist/loader-B_bcoE1h.mjs.map +1 -0
  643. package/dist/loops-Dn1i16FP.mjs +205 -0
  644. package/dist/loops-Dn1i16FP.mjs.map +1 -0
  645. package/dist/manifest-builder-D7Y8iirE.mjs +189 -0
  646. package/dist/manifest-builder-D7Y8iirE.mjs.map +1 -0
  647. package/dist/manifest-schema-gy37bD_D.mjs +496 -0
  648. package/dist/manifest-schema-gy37bD_D.mjs.map +1 -0
  649. package/dist/marketplace-tHWSsCUo.mjs +257 -0
  650. package/dist/marketplace-tHWSsCUo.mjs.map +1 -0
  651. package/dist/media/image-endpoint.mjs +1 -1
  652. package/dist/media/index.d.mts +1 -1
  653. package/dist/media/index.mjs +4 -4
  654. package/dist/media/local-runtime.d.mts +14 -14
  655. package/dist/media/local-runtime.mjs +7 -7
  656. package/dist/media-3v7mqAVX.mjs +294 -0
  657. package/dist/media-3v7mqAVX.mjs.map +1 -0
  658. package/dist/media-CputjGE1.mjs +373 -0
  659. package/dist/media-CputjGE1.mjs.map +1 -0
  660. package/dist/media-D1z_jisb.mjs +408 -0
  661. package/dist/media-D1z_jisb.mjs.map +1 -0
  662. package/dist/media-allowlist-D5a4d-RA.mjs +44 -0
  663. package/dist/media-allowlist-D5a4d-RA.mjs.map +1 -0
  664. package/dist/media-folders-D2VdVBf6.mjs +210 -0
  665. package/dist/media-folders-D2VdVBf6.mjs.map +1 -0
  666. package/dist/media-url-DloW2xrP.mjs +43 -0
  667. package/dist/media-url-DloW2xrP.mjs.map +1 -0
  668. package/dist/media-usage-B8q0owWQ.mjs +1629 -0
  669. package/dist/media-usage-B8q0owWQ.mjs.map +1 -0
  670. package/dist/media-usage-activation-CQWOOTJi.mjs +78 -0
  671. package/dist/media-usage-activation-CQWOOTJi.mjs.map +1 -0
  672. package/dist/media-usage-work-BC0qpkMD.mjs +152 -0
  673. package/dist/media-usage-work-BC0qpkMD.mjs.map +1 -0
  674. package/dist/media-usage-work-BlMjwPg8.mjs +586 -0
  675. package/dist/media-usage-work-BlMjwPg8.mjs.map +1 -0
  676. package/dist/menus-BQKqf0Up.mjs +92 -0
  677. package/dist/menus-BQKqf0Up.mjs.map +1 -0
  678. package/dist/menus-DiuhXKWf.mjs +3646 -0
  679. package/dist/menus-DiuhXKWf.mjs.map +1 -0
  680. package/dist/menus-trvc6_fW.mjs +753 -0
  681. package/dist/menus-trvc6_fW.mjs.map +1 -0
  682. package/dist/migrations/index.d.mts +1 -1
  683. package/dist/migrations/index.mjs +3 -3
  684. package/dist/mime-IZf-LHIS.mjs +36 -0
  685. package/dist/mime-IZf-LHIS.mjs.map +1 -0
  686. package/dist/mode-nh0ppSX5.mjs +23 -0
  687. package/dist/mode-nh0ppSX5.mjs.map +1 -0
  688. package/dist/node-sqlite-compat-CDOEcc97.mjs +63 -0
  689. package/dist/node-sqlite-compat-CDOEcc97.mjs.map +1 -0
  690. package/dist/normalize-BuWa0lvd.mjs +191 -0
  691. package/dist/normalize-BuWa0lvd.mjs.map +1 -0
  692. package/dist/oauth-authorization-BcRdGojQ.mjs +274 -0
  693. package/dist/oauth-authorization-BcRdGojQ.mjs.map +1 -0
  694. package/dist/oauth-clients-C-8WDTqj.mjs +266 -0
  695. package/dist/oauth-clients-C-8WDTqj.mjs.map +1 -0
  696. package/dist/oauth-state-store-CM5ZEYQS.mjs +50 -0
  697. package/dist/oauth-state-store-CM5ZEYQS.mjs.map +1 -0
  698. package/dist/oauth-user-lookup-DrrqvTZC.mjs +26 -0
  699. package/dist/oauth-user-lookup-DrrqvTZC.mjs.map +1 -0
  700. package/dist/object-cache/memory.d.mts +1 -1
  701. package/dist/object-cache-Bo6DGaC9.mjs +586 -0
  702. package/dist/object-cache-Bo6DGaC9.mjs.map +1 -0
  703. package/dist/options-C2IDQnD2.d.mts +81 -0
  704. package/dist/options-C2IDQnD2.d.mts.map +1 -0
  705. package/dist/ownership-DoeAIuTg.mjs +12 -0
  706. package/dist/ownership-DoeAIuTg.mjs.map +1 -0
  707. package/dist/page/index.d.mts +2 -2
  708. package/dist/page/index.mjs +6 -6
  709. package/dist/parse-D5Sw9wAI.d.mts +172 -0
  710. package/dist/parse-D5Sw9wAI.d.mts.map +1 -0
  711. package/dist/parse-Gt2l4Sld.mjs +81 -0
  712. package/dist/parse-Gt2l4Sld.mjs.map +1 -0
  713. package/dist/passkey-config-CkQsrcU-.mjs +46 -0
  714. package/dist/passkey-config-CkQsrcU-.mjs.map +1 -0
  715. package/dist/paths-DiENGBx5.mjs +77 -0
  716. package/dist/paths-DiENGBx5.mjs.map +1 -0
  717. package/dist/patterns-DyZJ67I7.mjs +140 -0
  718. package/dist/patterns-DyZJ67I7.mjs.map +1 -0
  719. package/dist/placeholder-Cq5wLDCX.d.mts +306 -0
  720. package/dist/placeholder-Cq5wLDCX.d.mts.map +1 -0
  721. package/dist/plan-BxCS1tl5.mjs +135 -0
  722. package/dist/plan-BxCS1tl5.mjs.map +1 -0
  723. package/dist/plugin-test-runtime.d.mts +14 -14
  724. package/dist/plugin-test-runtime.mjs +115 -108
  725. package/dist/plugin-types.d.mts +5 -3
  726. package/dist/plugin-types.d.mts.map +1 -1
  727. package/dist/plugin-types.mjs.map +1 -1
  728. package/dist/plugin-utils.d.mts +12 -12
  729. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  730. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  731. package/dist/plugins/adapt-sandbox-entry.mjs +48 -10
  732. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  733. package/dist/plugins/host.d.mts +6 -6
  734. package/dist/plugins/host.mjs +49 -43
  735. package/dist/plugins-BpLkXA1S.mjs +277 -0
  736. package/dist/plugins-BpLkXA1S.mjs.map +1 -0
  737. package/dist/policy-C1qpNxrr.mjs +45 -0
  738. package/dist/policy-C1qpNxrr.mjs.map +1 -0
  739. package/dist/portable-text-BnRuiR1-.mjs +307 -0
  740. package/dist/portable-text-BnRuiR1-.mjs.map +1 -0
  741. package/dist/preview-DU5rwz_m.mjs +107 -0
  742. package/dist/preview-DU5rwz_m.mjs.map +1 -0
  743. package/dist/protocol-B9GEhEyi.d.mts +61 -0
  744. package/dist/protocol-B9GEhEyi.d.mts.map +1 -0
  745. package/dist/public-submission-yZaTTfsC.mjs +250 -0
  746. package/dist/public-submission-yZaTTfsC.mjs.map +1 -0
  747. package/dist/public-url-B5a0QAh6.mjs +101 -0
  748. package/dist/public-url-B5a0QAh6.mjs.map +1 -0
  749. package/dist/query-6e2CQxUv.mjs +1161 -0
  750. package/dist/query-6e2CQxUv.mjs.map +1 -0
  751. package/dist/query-DC3bv__4.mjs +41 -0
  752. package/dist/query-DC3bv__4.mjs.map +1 -0
  753. package/dist/rate-limit-BXx3Ecp9.mjs +120 -0
  754. package/dist/rate-limit-BXx3Ecp9.mjs.map +1 -0
  755. package/dist/receipt-q1VK9jhj.mjs +43 -0
  756. package/dist/receipt-q1VK9jhj.mjs.map +1 -0
  757. package/dist/redirect-BvFKh8Sz.mjs +416 -0
  758. package/dist/redirect-BvFKh8Sz.mjs.map +1 -0
  759. package/dist/redirect-D1AmADlk.mjs +19 -0
  760. package/dist/redirect-D1AmADlk.mjs.map +1 -0
  761. package/dist/redirects-CWQMKYOS.mjs +446 -0
  762. package/dist/redirects-CWQMKYOS.mjs.map +1 -0
  763. package/dist/redirects-D4EWeXAo.mjs +148 -0
  764. package/dist/redirects-D4EWeXAo.mjs.map +1 -0
  765. package/dist/registry/testing.d.mts +16 -4
  766. package/dist/registry/testing.d.mts.map +1 -1
  767. package/dist/registry/testing.mjs +20 -10
  768. package/dist/registry/testing.mjs.map +1 -1
  769. package/dist/registry-CtHRqVe-.mjs +6771 -0
  770. package/dist/registry-CtHRqVe-.mjs.map +1 -0
  771. package/dist/relations-CVI2nbrn.mjs +776 -0
  772. package/dist/relations-CVI2nbrn.mjs.map +1 -0
  773. package/dist/request-cache-C4CIo5ad.mjs +104 -0
  774. package/dist/request-cache-C4CIo5ad.mjs.map +1 -0
  775. package/dist/request-context.d.mts +9 -1
  776. package/dist/request-context.d.mts.map +1 -1
  777. package/dist/request-context.mjs.map +1 -1
  778. package/dist/request-meta-B6blULFY.mjs +141 -0
  779. package/dist/request-meta-B6blULFY.mjs.map +1 -0
  780. package/dist/resolve-Cx0Pwz0-.mjs +100 -0
  781. package/dist/resolve-Cx0Pwz0-.mjs.map +1 -0
  782. package/dist/resolve-D-kqyKns.mjs +199 -0
  783. package/dist/resolve-D-kqyKns.mjs.map +1 -0
  784. package/dist/revision-CGkQA0e5.mjs +366 -0
  785. package/dist/revision-CGkQA0e5.mjs.map +1 -0
  786. package/dist/route-wire-DK600v4u.mjs +197 -0
  787. package/dist/route-wire-DK600v4u.mjs.map +1 -0
  788. package/dist/routes-DTduBPzX.mjs +272 -0
  789. package/dist/routes-DTduBPzX.mjs.map +1 -0
  790. package/dist/runner-CLpxmhl8.mjs +6197 -0
  791. package/dist/runner-CLpxmhl8.mjs.map +1 -0
  792. package/dist/runner-Ji7qyH2A.d.mts +68 -0
  793. package/dist/runner-Ji7qyH2A.d.mts.map +1 -0
  794. package/dist/runtime.d.mts +13 -13
  795. package/dist/runtime.mjs +3 -3
  796. package/dist/schema/project-env-types.d.mts +12 -0
  797. package/dist/schema/project-env-types.d.mts.map +1 -0
  798. package/dist/schema/project-env-types.mjs +86 -0
  799. package/dist/schema/project-env-types.mjs.map +1 -0
  800. package/dist/schema-BZPj3kwZ.mjs +13 -0
  801. package/dist/schema-BZPj3kwZ.mjs.map +1 -0
  802. package/dist/schema-Berj5VQx.mjs +815 -0
  803. package/dist/schema-Berj5VQx.mjs.map +1 -0
  804. package/dist/scopes-C1HJaIyf.mjs +34 -0
  805. package/dist/scopes-C1HJaIyf.mjs.map +1 -0
  806. package/dist/search-thYf8j9F.mjs +448 -0
  807. package/dist/search-thYf8j9F.mjs.map +1 -0
  808. package/dist/sections-2k1uIgJ0.mjs +346 -0
  809. package/dist/sections-2k1uIgJ0.mjs.map +1 -0
  810. package/dist/seed/index.d.mts +2 -2
  811. package/dist/seed/index.mjs +39 -32
  812. package/dist/seo/index.d.mts +3 -3
  813. package/dist/seo/index.mjs +24 -22
  814. package/dist/seo/index.mjs.map +1 -1
  815. package/dist/seo-C61bnPuV.mjs +114 -0
  816. package/dist/seo-C61bnPuV.mjs.map +1 -0
  817. package/dist/seo-DpYxmGaL.mjs +133 -0
  818. package/dist/seo-DpYxmGaL.mjs.map +1 -0
  819. package/dist/service-BFUImckH.mjs +150 -0
  820. package/dist/service-BFUImckH.mjs.map +1 -0
  821. package/dist/session-user-DVcHsFD5.mjs +61 -0
  822. package/dist/session-user-DVcHsFD5.mjs.map +1 -0
  823. package/dist/settings-B0zQj_Tj.mjs +61 -0
  824. package/dist/settings-B0zQj_Tj.mjs.map +1 -0
  825. package/dist/settings-BJjK_X7x.mjs +51 -0
  826. package/dist/settings-BJjK_X7x.mjs.map +1 -0
  827. package/dist/settings-BbVRRGDp.mjs +439 -0
  828. package/dist/settings-BbVRRGDp.mjs.map +1 -0
  829. package/dist/setup-complete-CuLcTDTU.mjs +65 -0
  830. package/dist/setup-complete-CuLcTDTU.mjs.map +1 -0
  831. package/dist/setup-nonce-CAQoY5PC.mjs +25 -0
  832. package/dist/setup-nonce-CAQoY5PC.mjs.map +1 -0
  833. package/dist/site-settings-AYFvhwQn.mjs +50 -0
  834. package/dist/site-settings-AYFvhwQn.mjs.map +1 -0
  835. package/dist/site-url-Ceq_AUK0.mjs +16 -0
  836. package/dist/site-url-Ceq_AUK0.mjs.map +1 -0
  837. package/dist/snapshot-Dzsn3NZa.mjs +414 -0
  838. package/dist/snapshot-Dzsn3NZa.mjs.map +1 -0
  839. package/dist/ssrf-DsmvZB80.mjs +406 -0
  840. package/dist/ssrf-DsmvZB80.mjs.map +1 -0
  841. package/dist/stage-Cf9PqdUB.mjs +662 -0
  842. package/dist/stage-Cf9PqdUB.mjs.map +1 -0
  843. package/dist/staged-Bw5eHbKS.mjs +686 -0
  844. package/dist/staged-Bw5eHbKS.mjs.map +1 -0
  845. package/dist/state-kGdOMQRY.mjs +153 -0
  846. package/dist/state-kGdOMQRY.mjs.map +1 -0
  847. package/dist/status-D39Fpy8R.mjs +30 -0
  848. package/dist/status-D39Fpy8R.mjs.map +1 -0
  849. package/dist/storage/local.d.mts +1 -1
  850. package/dist/storage/local.mjs +1 -1
  851. package/dist/storage/s3.d.mts +1 -1
  852. package/dist/storage/s3.mjs +1 -1
  853. package/dist/storage-query-C9bK0Dg6.d.mts +1614 -0
  854. package/dist/storage-query-C9bK0Dg6.d.mts.map +1 -0
  855. package/dist/tar-lDI_fzLD.mjs +449 -0
  856. package/dist/tar-lDI_fzLD.mjs.map +1 -0
  857. package/dist/target-DOFs5oUC.mjs +27 -0
  858. package/dist/target-DOFs5oUC.mjs.map +1 -0
  859. package/dist/taxonomies-DQGomz9p.mjs +939 -0
  860. package/dist/taxonomies-DQGomz9p.mjs.map +1 -0
  861. package/dist/taxonomies-DWv-OYT0.mjs +697 -0
  862. package/dist/taxonomies-DWv-OYT0.mjs.map +1 -0
  863. package/dist/taxonomy-BesdHIwi.mjs +525 -0
  864. package/dist/taxonomy-BesdHIwi.mjs.map +1 -0
  865. package/dist/tokens-BIGxi8sP.mjs +171 -0
  866. package/dist/tokens-BIGxi8sP.mjs.map +1 -0
  867. package/dist/transaction-BVYIo_yu.mjs +29 -0
  868. package/dist/transaction-BVYIo_yu.mjs.map +1 -0
  869. package/dist/transfer-BtzoaXLk.mjs +166 -0
  870. package/dist/transfer-BtzoaXLk.mjs.map +1 -0
  871. package/dist/transfer-DLu_6AXL.mjs +8856 -0
  872. package/dist/transfer-DLu_6AXL.mjs.map +1 -0
  873. package/dist/transfer-download-b_PCrqJJ.mjs +33 -0
  874. package/dist/transfer-download-b_PCrqJJ.mjs.map +1 -0
  875. package/dist/transformations-DdnpSdeC.mjs +196 -0
  876. package/dist/transformations-DdnpSdeC.mjs.map +1 -0
  877. package/dist/transport-flR-Zmds.d.mts +42 -0
  878. package/dist/transport-flR-Zmds.d.mts.map +1 -0
  879. package/dist/transport-umzEbgYO.mjs +136 -0
  880. package/dist/transport-umzEbgYO.mjs.map +1 -0
  881. package/dist/trusted-proxy-BqfQFs6a.mjs +51 -0
  882. package/dist/trusted-proxy-BqfQFs6a.mjs.map +1 -0
  883. package/dist/turnstile-IvQp2uyD.mjs +53 -0
  884. package/dist/turnstile-IvQp2uyD.mjs.map +1 -0
  885. package/dist/types-2V_MVPYy.d.mts +125 -0
  886. package/dist/types-2V_MVPYy.d.mts.map +1 -0
  887. package/dist/types-B-WCvzdi.d.mts +198 -0
  888. package/dist/types-B-WCvzdi.d.mts.map +1 -0
  889. package/dist/types-BGmQ0uXs.mjs +201 -0
  890. package/dist/types-BGmQ0uXs.mjs.map +1 -0
  891. package/dist/types-CVsmpTcU.mjs +18 -0
  892. package/dist/types-CVsmpTcU.mjs.map +1 -0
  893. package/dist/types-C_V-_vMS.d.mts +198 -0
  894. package/dist/types-C_V-_vMS.d.mts.map +1 -0
  895. package/dist/types-CdEMurNh.mjs +77 -0
  896. package/dist/types-CdEMurNh.mjs.map +1 -0
  897. package/dist/types-CsmwbOwa.mjs +22 -0
  898. package/dist/types-CsmwbOwa.mjs.map +1 -0
  899. package/dist/types-Cw-1it3n.d.mts +287 -0
  900. package/dist/types-Cw-1it3n.d.mts.map +1 -0
  901. package/dist/types-D7B20WFC.d.mts +374 -0
  902. package/dist/types-D7B20WFC.d.mts.map +1 -0
  903. package/dist/types-DGw8KMX_.mjs +16 -0
  904. package/dist/types-DGw8KMX_.mjs.map +1 -0
  905. package/dist/types-DZeDpzMc.d.mts +896 -0
  906. package/dist/types-DZeDpzMc.d.mts.map +1 -0
  907. package/dist/types-DuQAIPA-.d.mts +363 -0
  908. package/dist/types-DuQAIPA-.d.mts.map +1 -0
  909. package/dist/types-edRPQchz.d.mts +85 -0
  910. package/dist/types-edRPQchz.d.mts.map +1 -0
  911. package/dist/types-j6MBDjlZ.mjs +103 -0
  912. package/dist/types-j6MBDjlZ.mjs.map +1 -0
  913. package/dist/types-pOLeFKGq.d.mts +1720 -0
  914. package/dist/types-pOLeFKGq.d.mts.map +1 -0
  915. package/dist/update-check-CaZyFHZC.mjs +161 -0
  916. package/dist/update-check-CaZyFHZC.mjs.map +1 -0
  917. package/dist/upload-attempts-BodUoFBu.mjs +32 -0
  918. package/dist/upload-attempts-BodUoFBu.mjs.map +1 -0
  919. package/dist/url-Dn3IStq8.mjs +104 -0
  920. package/dist/url-Dn3IStq8.mjs.map +1 -0
  921. package/dist/url-pattern-DGAG6ZP2.mjs +41 -0
  922. package/dist/url-pattern-DGAG6ZP2.mjs.map +1 -0
  923. package/dist/user-BOvuF1sQ.mjs +171 -0
  924. package/dist/user-BOvuF1sQ.mjs.map +1 -0
  925. package/dist/utils-CoV-PYhg.mjs +439 -0
  926. package/dist/utils-CoV-PYhg.mjs.map +1 -0
  927. package/dist/validate-WkjGwBSO.mjs +516 -0
  928. package/dist/validate-WkjGwBSO.mjs.map +1 -0
  929. package/dist/validate-dK97qe7F.d.mts +468 -0
  930. package/dist/validate-dK97qe7F.d.mts.map +1 -0
  931. package/dist/validation-D-ICq_tY.mjs +219 -0
  932. package/dist/validation-D-ICq_tY.mjs.map +1 -0
  933. package/dist/version-DbT04wbH.mjs +9 -0
  934. package/dist/version-DbT04wbH.mjs.map +1 -0
  935. package/dist/version-IneBU54o.mjs +7 -0
  936. package/dist/version-IneBU54o.mjs.map +1 -0
  937. package/dist/virtual-modules-Brh6mRVe.mjs +516 -0
  938. package/dist/virtual-modules-Brh6mRVe.mjs.map +1 -0
  939. package/dist/widgets-D8T0xBYs.mjs +126 -0
  940. package/dist/widgets-D8T0xBYs.mjs.map +1 -0
  941. package/dist/wxr-taxonomies-B6iE8m9I.d.mts +34 -0
  942. package/dist/wxr-taxonomies-B6iE8m9I.d.mts.map +1 -0
  943. package/dist/wxr-taxonomies-DEzR9N7e.mjs +453 -0
  944. package/dist/wxr-taxonomies-DEzR9N7e.mjs.map +1 -0
  945. package/dist/zod-generator-DnfG5sGQ.mjs +424 -0
  946. package/dist/zod-generator-DnfG5sGQ.mjs.map +1 -0
  947. package/package.json +15 -15
  948. package/src/api/errors.ts +11 -0
  949. package/src/api/handlers/bulk-tag.ts +4 -4
  950. package/src/api/handlers/content.ts +631 -32
  951. package/src/api/handlers/device-flow.ts +74 -21
  952. package/src/api/handlers/index.ts +3 -0
  953. package/src/api/handlers/manifest.ts +81 -5
  954. package/src/api/handlers/media-upload.ts +3 -0
  955. package/src/api/handlers/media.ts +2 -2
  956. package/src/api/handlers/registry.ts +123 -70
  957. package/src/api/handlers/relations.ts +638 -157
  958. package/src/api/handlers/revision.ts +40 -2
  959. package/src/api/handlers/schema.ts +403 -1
  960. package/src/api/handlers/staged-references.ts +208 -0
  961. package/src/api/handlers/update-check.ts +236 -0
  962. package/src/api/handlers/validate-references.ts +146 -0
  963. package/src/api/redirect.ts +9 -1
  964. package/src/api/schemas/content.ts +17 -0
  965. package/src/api/schemas/import.ts +50 -14
  966. package/src/api/schemas/relations.ts +54 -44
  967. package/src/api/schemas/schema.ts +26 -6
  968. package/src/api/setup-complete.ts +49 -1
  969. package/src/api/types.ts +4 -0
  970. package/src/astro/dev-typegen.ts +15 -22
  971. package/src/astro/integration/dev-typegen.ts +32 -3
  972. package/src/astro/integration/index.ts +88 -22
  973. package/src/astro/integration/routes.ts +21 -19
  974. package/src/astro/integration/runtime.ts +33 -7
  975. package/src/astro/integration/virtual-modules.ts +1 -0
  976. package/src/astro/integration/vite-config.ts +16 -8
  977. package/src/astro/middleware/redirect.ts +15 -2
  978. package/src/astro/middleware/request-context.ts +13 -6
  979. package/src/astro/routes/api/admin/bylines/[id]/index.ts +11 -1
  980. package/src/astro/routes/api/admin/bylines/[id]/translations.ts +7 -1
  981. package/src/astro/routes/api/admin/bylines/index.ts +6 -1
  982. package/src/astro/routes/api/admin/core-update.ts +34 -0
  983. package/src/astro/routes/api/admin/plugins/marketplace/[id]/icon.ts +6 -2
  984. package/src/astro/routes/api/admin/themes/marketplace/[id]/thumbnail.ts +6 -2
  985. package/src/astro/routes/api/auth/invite/complete.ts +4 -4
  986. package/src/astro/routes/api/auth/magic-link/verify.ts +4 -1
  987. package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +9 -4
  988. package/src/astro/routes/api/auth/passkey/verify.ts +4 -4
  989. package/src/astro/routes/api/auth/signup/complete.ts +4 -4
  990. package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +11 -54
  991. package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
  992. package/src/astro/routes/api/import/wordpress/execute.ts +252 -6
  993. package/src/astro/routes/api/import/wordpress/prepare.ts +1 -2
  994. package/src/astro/routes/api/oauth/device/authorize.ts +33 -4
  995. package/src/astro/routes/api/oauth/register.ts +22 -2
  996. package/src/astro/routes/api/relations/index.ts +4 -4
  997. package/src/astro/routes/api/revisions/[revisionId]/restore.ts +17 -1
  998. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +6 -2
  999. package/src/astro/routes/api/setup/admin-verify.ts +6 -5
  1000. package/src/astro/routes/api/typegen.ts +4 -46
  1001. package/src/astro/session-user.ts +14 -0
  1002. package/src/astro/types.ts +11 -0
  1003. package/src/bylines/credits.ts +149 -0
  1004. package/src/bylines/index.ts +4 -142
  1005. package/src/cli/commands/export-seed.ts +510 -89
  1006. package/src/cli/commands/seed.ts +2 -0
  1007. package/src/cli/credentials.ts +1 -60
  1008. package/src/cli/index.ts +0 -2
  1009. package/src/client/index.ts +8 -2
  1010. package/src/components/Image.astro +24 -13
  1011. package/src/components/InlinePortableTextEditor.tsx +25 -8
  1012. package/src/components/WidgetArea.astro +3 -2
  1013. package/src/content/converters/portable-text-to-prosemirror.ts +23 -17
  1014. package/src/content/converters/prosemirror-to-portable-text.ts +16 -5
  1015. package/src/content/converters/types.ts +1 -0
  1016. package/src/database/content-datetime.ts +111 -23
  1017. package/src/database/migrations/036_i18n_menus_and_taxonomies.ts +132 -92
  1018. package/src/database/migrations/086_relations_structural.ts +197 -0
  1019. package/src/database/migrations/087_reference_field_relations.ts +407 -0
  1020. package/src/database/migrations/088_cron_oneshot_utc.ts +39 -0
  1021. package/src/database/migrations/089_auto_seed_completion.ts +13 -0
  1022. package/src/database/migrations/runner.ts +8 -0
  1023. package/src/database/reference-backfill.ts +141 -0
  1024. package/src/database/repositories/comment.ts +2 -2
  1025. package/src/database/repositories/content.ts +58 -16
  1026. package/src/database/repositories/plugin-storage.ts +1 -1
  1027. package/src/database/repositories/redirect.ts +7 -2
  1028. package/src/database/repositories/relation.ts +622 -210
  1029. package/src/database/repositories/revision.ts +16 -0
  1030. package/src/database/repositories/types.ts +38 -0
  1031. package/src/database/transaction.ts +12 -1
  1032. package/src/database/types.ts +15 -6
  1033. package/src/db/node-sqlite-compat.ts +63 -37
  1034. package/src/emdash-runtime.ts +149 -46
  1035. package/src/import/wxr-taxonomies.ts +163 -88
  1036. package/src/index.ts +20 -0
  1037. package/src/loader.ts +177 -23
  1038. package/src/mcp/server.ts +90 -8
  1039. package/src/media/usage/activation.ts +18 -9
  1040. package/src/migrations/config-loader.ts +5 -0
  1041. package/src/object-cache/index.ts +19 -7
  1042. package/src/object-cache/types.ts +3 -2
  1043. package/src/plugin-types.ts +7 -0
  1044. package/src/plugins/adapt-sandbox-entry.ts +47 -12
  1045. package/src/plugins/byline-access.ts +158 -0
  1046. package/src/plugins/context.ts +7 -1
  1047. package/src/plugins/cron.ts +27 -4
  1048. package/src/plugins/hooks.ts +47 -0
  1049. package/src/plugins/host.ts +1 -0
  1050. package/src/plugins/index.ts +10 -1
  1051. package/src/plugins/manifest-schema.ts +5 -1
  1052. package/src/plugins/marketplace.ts +48 -36
  1053. package/src/plugins/sandbox/proxy.ts +1 -0
  1054. package/src/plugins/types.ts +95 -0
  1055. package/src/query.ts +464 -27
  1056. package/src/redirects/cache.ts +11 -1
  1057. package/src/redirects/destination.ts +20 -0
  1058. package/src/redirects/loops.ts +10 -6
  1059. package/src/redirects/patterns.ts +12 -30
  1060. package/src/references/field-map.ts +115 -0
  1061. package/src/references/resolve.ts +160 -0
  1062. package/src/references/staged.ts +157 -0
  1063. package/src/references/types.ts +16 -0
  1064. package/src/registry/artifact-fetch.ts +45 -271
  1065. package/src/registry/testing.ts +59 -14
  1066. package/src/request-context.ts +8 -0
  1067. package/src/schema/block-type-registry.ts +1 -1
  1068. package/src/schema/env-types.ts +37 -0
  1069. package/src/schema/project-env-types.ts +41 -0
  1070. package/src/schema/registry.ts +132 -26
  1071. package/src/schema/types.ts +63 -0
  1072. package/src/schema/url-pattern.ts +10 -0
  1073. package/src/schema/zod-generator.ts +78 -2
  1074. package/src/seed/apply.ts +553 -63
  1075. package/src/seed/ownership.ts +15 -0
  1076. package/src/seed/types.ts +36 -2
  1077. package/src/seed/validate.ts +123 -4
  1078. package/src/transfer/analyze/unique-keys.ts +3 -12
  1079. package/src/transfer/analyze/validate.ts +178 -40
  1080. package/src/transfer/analyze/values.ts +116 -2
  1081. package/src/transfer/analyze/write-rules.ts +8 -0
  1082. package/src/transfer/export/readers.ts +12 -8
  1083. package/src/transfer/format/columns.ts +26 -6
  1084. package/src/transfer/format/kinds.ts +21 -5
  1085. package/src/transfer/import/context.ts +8 -1
  1086. package/src/transfer/ops/package-index.ts +1 -1
  1087. package/src/utils/url.ts +58 -3
  1088. package/src/virtual-modules.d.ts +3 -0
  1089. package/dist/action-token-DYwe4Pk0.mjs +0 -26
  1090. package/dist/action-token-DYwe4Pk0.mjs.map +0 -1
  1091. package/dist/activation-LOkDM5WT.mjs +0 -382
  1092. package/dist/activation-LOkDM5WT.mjs.map +0 -1
  1093. package/dist/adapters-B64LbYcB.d.mts +0 -171
  1094. package/dist/adapters-B64LbYcB.d.mts.map +0 -1
  1095. package/dist/allowed-origins-CHB8oZNM.mjs +0 -116
  1096. package/dist/allowed-origins-CHB8oZNM.mjs.map +0 -1
  1097. package/dist/api-CuyNEHZG.mjs +0 -4718
  1098. package/dist/api-CuyNEHZG.mjs.map +0 -1
  1099. package/dist/api-tokens-s4i4aUp_.mjs +0 -166
  1100. package/dist/api-tokens-s4i4aUp_.mjs.map +0 -1
  1101. package/dist/apply-npY1TAhG.mjs +0 -1366
  1102. package/dist/apply-npY1TAhG.mjs.map +0 -1
  1103. package/dist/approvals-CqMfNxak.mjs +0 -460
  1104. package/dist/approvals-CqMfNxak.mjs.map +0 -1
  1105. package/dist/artifact-fetch-DZMOGZ3-.mjs +0 -818
  1106. package/dist/artifact-fetch-DZMOGZ3-.mjs.map +0 -1
  1107. package/dist/astro/routes/api/relations/_id_/translations.d.mts +0 -8
  1108. package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +0 -1
  1109. package/dist/astro/routes/api/relations/_id_/translations.mjs +0 -47
  1110. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +0 -1
  1111. package/dist/audit-RfCugiSB.mjs +0 -127
  1112. package/dist/audit-RfCugiSB.mjs.map +0 -1
  1113. package/dist/authoritative-records-CoJvBXAD.mjs +0 -5172
  1114. package/dist/authoritative-records-CoJvBXAD.mjs.map +0 -1
  1115. package/dist/authorize-seCifOMJ.mjs +0 -49
  1116. package/dist/authorize-seCifOMJ.mjs.map +0 -1
  1117. package/dist/backup-BQRj3afm.mjs +0 -246
  1118. package/dist/backup-BQRj3afm.mjs.map +0 -1
  1119. package/dist/block-type-registry-DUI_3KxT.mjs +0 -6709
  1120. package/dist/block-type-registry-DUI_3KxT.mjs.map +0 -1
  1121. package/dist/block-types-BmZmLmAD.mjs +0 -132
  1122. package/dist/block-types-BmZmLmAD.mjs.map +0 -1
  1123. package/dist/block-values-C_VIPr5t.mjs +0 -175
  1124. package/dist/block-values-C_VIPr5t.mjs.map +0 -1
  1125. package/dist/byline-DYmkXqvo.mjs +0 -909
  1126. package/dist/byline-DYmkXqvo.mjs.map +0 -1
  1127. package/dist/byline-fields-D28AT-Fh.mjs +0 -123
  1128. package/dist/byline-fields-D28AT-Fh.mjs.map +0 -1
  1129. package/dist/byline-registry-gnKscbQX.mjs +0 -406
  1130. package/dist/byline-registry-gnKscbQX.mjs.map +0 -1
  1131. package/dist/bylines-BPwJqoYH.mjs +0 -232
  1132. package/dist/bylines-BPwJqoYH.mjs.map +0 -1
  1133. package/dist/bylines-ukLaYpVZ.mjs +0 -214
  1134. package/dist/bylines-ukLaYpVZ.mjs.map +0 -1
  1135. package/dist/cache-m7UEkRFV.mjs +0 -108
  1136. package/dist/cache-m7UEkRFV.mjs.map +0 -1
  1137. package/dist/canonical-YhEQezjg.mjs +0 -174
  1138. package/dist/canonical-YhEQezjg.mjs.map +0 -1
  1139. package/dist/capture-triggers-kJyl_yyM.mjs +0 -362
  1140. package/dist/capture-triggers-kJyl_yyM.mjs.map +0 -1
  1141. package/dist/challenge-store-ppU6Uv13.mjs +0 -51
  1142. package/dist/challenge-store-ppU6Uv13.mjs.map +0 -1
  1143. package/dist/checksum-B2IINIlN.mjs +0 -162
  1144. package/dist/checksum-B2IINIlN.mjs.map +0 -1
  1145. package/dist/chrome-tags-DApCQSIk.mjs +0 -24
  1146. package/dist/chrome-tags-DApCQSIk.mjs.map +0 -1
  1147. package/dist/chunks-Dms7Uxbt.mjs +0 -25
  1148. package/dist/chunks-Dms7Uxbt.mjs.map +0 -1
  1149. package/dist/collection-deletion-BIm28mo3.mjs +0 -436
  1150. package/dist/collection-deletion-BIm28mo3.mjs.map +0 -1
  1151. package/dist/collection-deletion-processor-Br6rxs3u.mjs +0 -217
  1152. package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +0 -1
  1153. package/dist/collection-slugs-cache-CjGk__zp.mjs +0 -85
  1154. package/dist/collection-slugs-cache-CjGk__zp.mjs.map +0 -1
  1155. package/dist/comment-CrBl22OF.mjs +0 -313
  1156. package/dist/comment-CrBl22OF.mjs.map +0 -1
  1157. package/dist/comment-reaction-JEQ2Fpd8.mjs +0 -85
  1158. package/dist/comment-reaction-JEQ2Fpd8.mjs.map +0 -1
  1159. package/dist/comments-2ah9du9y.mjs +0 -195
  1160. package/dist/comments-2ah9du9y.mjs.map +0 -1
  1161. package/dist/comments-fHZ8ON9O.mjs +0 -99
  1162. package/dist/comments-fHZ8ON9O.mjs.map +0 -1
  1163. package/dist/components-CXbq7CSM.mjs +0 -108
  1164. package/dist/components-CXbq7CSM.mjs.map +0 -1
  1165. package/dist/config-BjEm_3xL.d.mts +0 -6537
  1166. package/dist/config-BjEm_3xL.d.mts.map +0 -1
  1167. package/dist/config-IhybvkIQ.mjs +0 -242
  1168. package/dist/config-IhybvkIQ.mjs.map +0 -1
  1169. package/dist/config-Py43JK9r.d.mts +0 -39
  1170. package/dist/config-Py43JK9r.d.mts.map +0 -1
  1171. package/dist/content-DFaIEDj9.mjs +0 -2281
  1172. package/dist/content-DFaIEDj9.mjs.map +0 -1
  1173. package/dist/content-list-query-Dra4Dalc.d.mts +0 -26
  1174. package/dist/content-list-query-Dra4Dalc.d.mts.map +0 -1
  1175. package/dist/content-policy-DFNw91-d.mjs +0 -46
  1176. package/dist/content-policy-DFNw91-d.mjs.map +0 -1
  1177. package/dist/content-repair-Q8IUrpLL.mjs +0 -442
  1178. package/dist/content-repair-Q8IUrpLL.mjs.map +0 -1
  1179. package/dist/context-BV_7t-Ua.mjs +0 -1921
  1180. package/dist/context-BV_7t-Ua.mjs.map +0 -1
  1181. package/dist/cron-7DCJwPXq.mjs +0 -284
  1182. package/dist/cron-7DCJwPXq.mjs.map +0 -1
  1183. package/dist/dashboard-BP-iJqpd.mjs +0 -151
  1184. package/dist/dashboard-BP-iJqpd.mjs.map +0 -1
  1185. package/dist/default-DQ6vsviu.mjs +0 -81
  1186. package/dist/default-DQ6vsviu.mjs.map +0 -1
  1187. package/dist/deferred-tasks-BPxXUB4x.d.mts +0 -9
  1188. package/dist/deferred-tasks-BPxXUB4x.d.mts.map +0 -1
  1189. package/dist/dev-typegen-CZaPLl3V.mjs +0 -29
  1190. package/dist/dev-typegen-CZaPLl3V.mjs.map +0 -1
  1191. package/dist/device-flow-CRd6DXmW.mjs +0 -466
  1192. package/dist/device-flow-CRd6DXmW.mjs.map +0 -1
  1193. package/dist/digest-BarSh-pN.mjs +0 -194
  1194. package/dist/digest-BarSh-pN.mjs.map +0 -1
  1195. package/dist/direct-executor-D2lNadwo.mjs +0 -104
  1196. package/dist/direct-executor-D2lNadwo.mjs.map +0 -1
  1197. package/dist/dist-BNwANFJR.mjs +0 -810
  1198. package/dist/dist-BNwANFJR.mjs.map +0 -1
  1199. package/dist/email-console-bJn3ctqA.mjs +0 -50
  1200. package/dist/email-console-bJn3ctqA.mjs.map +0 -1
  1201. package/dist/email-locale-CN6WAMx0.mjs +0 -25
  1202. package/dist/email-locale-CN6WAMx0.mjs.map +0 -1
  1203. package/dist/emdash-runtime-CtfnZmPi.mjs +0 -4186
  1204. package/dist/emdash-runtime-CtfnZmPi.mjs.map +0 -1
  1205. package/dist/enrich-Dl3kZ-lP.mjs +0 -194
  1206. package/dist/enrich-Dl3kZ-lP.mjs.map +0 -1
  1207. package/dist/entry-lock-BJYdBfXb.mjs +0 -1097
  1208. package/dist/entry-lock-BJYdBfXb.mjs.map +0 -1
  1209. package/dist/entry-lock-Cf5OoIgN.d.mts +0 -4368
  1210. package/dist/entry-lock-Cf5OoIgN.d.mts.map +0 -1
  1211. package/dist/entry-lock-DHQOxN7R.mjs +0 -163
  1212. package/dist/entry-lock-DHQOxN7R.mjs.map +0 -1
  1213. package/dist/entry-locks-D0foLdjQ.mjs +0 -167
  1214. package/dist/entry-locks-D0foLdjQ.mjs.map +0 -1
  1215. package/dist/error-CfvOHP0M.mjs +0 -90
  1216. package/dist/error-CfvOHP0M.mjs.map +0 -1
  1217. package/dist/errors-BF0_LFhW.mjs +0 -460
  1218. package/dist/errors-BF0_LFhW.mjs.map +0 -1
  1219. package/dist/errors-DgE1zJGG.mjs +0 -120
  1220. package/dist/errors-DgE1zJGG.mjs.map +0 -1
  1221. package/dist/escape-CuaZhZvL.mjs +0 -9
  1222. package/dist/escape-CuaZhZvL.mjs.map +0 -1
  1223. package/dist/fence-CMDXJYc_.mjs +0 -162
  1224. package/dist/fence-CMDXJYc_.mjs.map +0 -1
  1225. package/dist/field-defs-cache-HIgBbqZZ.mjs +0 -77
  1226. package/dist/field-defs-cache-HIgBbqZZ.mjs.map +0 -1
  1227. package/dist/focal-point-Gr34o-4o.mjs +0 -23
  1228. package/dist/focal-point-Gr34o-4o.mjs.map +0 -1
  1229. package/dist/fts-manager-S-K0laoS.mjs +0 -443
  1230. package/dist/fts-manager-S-K0laoS.mjs.map +0 -1
  1231. package/dist/gc-DjKY0Ay1.mjs +0 -75
  1232. package/dist/gc-DjKY0Ay1.mjs.map +0 -1
  1233. package/dist/hash-SDAW6zC-.mjs +0 -37
  1234. package/dist/hash-SDAW6zC-.mjs.map +0 -1
  1235. package/dist/hook-result-B5bXDgS2.d.mts +0 -31
  1236. package/dist/hook-result-B5bXDgS2.d.mts.map +0 -1
  1237. package/dist/hreflang-CbVI4paR.mjs +0 -105
  1238. package/dist/hreflang-CbVI4paR.mjs.map +0 -1
  1239. package/dist/hreflang-D5uNnsGJ.d.mts +0 -50
  1240. package/dist/hreflang-D5uNnsGJ.d.mts.map +0 -1
  1241. package/dist/http-route-dispatch-BitqzwMy.mjs +0 -339
  1242. package/dist/http-route-dispatch-BitqzwMy.mjs.map +0 -1
  1243. package/dist/identity-Be5kzutJ.mjs +0 -35
  1244. package/dist/identity-Be5kzutJ.mjs.map +0 -1
  1245. package/dist/import-YzfKCaco.mjs +0 -2020
  1246. package/dist/import-YzfKCaco.mjs.map +0 -1
  1247. package/dist/index-D-hdtLe8.d.mts +0 -623
  1248. package/dist/index-D-hdtLe8.d.mts.map +0 -1
  1249. package/dist/install-finalization-DfM1fj5x.mjs +0 -58
  1250. package/dist/install-finalization-DfM1fj5x.mjs.map +0 -1
  1251. package/dist/keys-yxLm5l35.mjs +0 -61
  1252. package/dist/keys-yxLm5l35.mjs.map +0 -1
  1253. package/dist/kinds-CRu_T5T5.mjs +0 -961
  1254. package/dist/kinds-CRu_T5T5.mjs.map +0 -1
  1255. package/dist/lifecycle-BzeGPeQ-.mjs +0 -25
  1256. package/dist/lifecycle-BzeGPeQ-.mjs.map +0 -1
  1257. package/dist/load-XgJiE6_3.mjs +0 -28
  1258. package/dist/load-XgJiE6_3.mjs.map +0 -1
  1259. package/dist/loader-BzqeR1ZN.mjs +0 -1086
  1260. package/dist/loader-BzqeR1ZN.mjs.map +0 -1
  1261. package/dist/loops-BQSzv5Zn.mjs +0 -203
  1262. package/dist/loops-BQSzv5Zn.mjs.map +0 -1
  1263. package/dist/manifest-builder-BmSAOOEF.mjs +0 -189
  1264. package/dist/manifest-builder-BmSAOOEF.mjs.map +0 -1
  1265. package/dist/manifest-schema-CY3zng_M.mjs +0 -492
  1266. package/dist/manifest-schema-CY3zng_M.mjs.map +0 -1
  1267. package/dist/media-CPXTbb1R.mjs +0 -373
  1268. package/dist/media-CPXTbb1R.mjs.map +0 -1
  1269. package/dist/media-JXRWDhw3.mjs +0 -294
  1270. package/dist/media-JXRWDhw3.mjs.map +0 -1
  1271. package/dist/media-Pu1L6xir.mjs +0 -408
  1272. package/dist/media-Pu1L6xir.mjs.map +0 -1
  1273. package/dist/media-allowlist-BSoa9Vvm.mjs +0 -44
  1274. package/dist/media-allowlist-BSoa9Vvm.mjs.map +0 -1
  1275. package/dist/media-folders-BE0oo2eX.mjs +0 -210
  1276. package/dist/media-folders-BE0oo2eX.mjs.map +0 -1
  1277. package/dist/media-url-jArBpzIG.mjs +0 -43
  1278. package/dist/media-url-jArBpzIG.mjs.map +0 -1
  1279. package/dist/media-usage-De-zeR9E.mjs +0 -1629
  1280. package/dist/media-usage-De-zeR9E.mjs.map +0 -1
  1281. package/dist/media-usage-activation-HKp7zk7W.mjs +0 -78
  1282. package/dist/media-usage-activation-HKp7zk7W.mjs.map +0 -1
  1283. package/dist/media-usage-work-C2OZLCAd.mjs +0 -586
  1284. package/dist/media-usage-work-C2OZLCAd.mjs.map +0 -1
  1285. package/dist/media-usage-work-DwUNbgvS.mjs +0 -152
  1286. package/dist/media-usage-work-DwUNbgvS.mjs.map +0 -1
  1287. package/dist/menus-BM7BPLOb.mjs +0 -139
  1288. package/dist/menus-BM7BPLOb.mjs.map +0 -1
  1289. package/dist/menus-Cm68rsAq.mjs +0 -3608
  1290. package/dist/menus-Cm68rsAq.mjs.map +0 -1
  1291. package/dist/menus-ITeAbcIF.mjs +0 -753
  1292. package/dist/menus-ITeAbcIF.mjs.map +0 -1
  1293. package/dist/mime-ChLqYwDk.mjs +0 -36
  1294. package/dist/mime-ChLqYwDk.mjs.map +0 -1
  1295. package/dist/mode-CCuKXUci.mjs +0 -23
  1296. package/dist/mode-CCuKXUci.mjs.map +0 -1
  1297. package/dist/node-sqlite-compat-CONMsl-x.mjs +0 -46
  1298. package/dist/node-sqlite-compat-CONMsl-x.mjs.map +0 -1
  1299. package/dist/normalize-CO2P8-iE.mjs +0 -191
  1300. package/dist/normalize-CO2P8-iE.mjs.map +0 -1
  1301. package/dist/oauth-authorization-DlMIL5_h.mjs +0 -274
  1302. package/dist/oauth-authorization-DlMIL5_h.mjs.map +0 -1
  1303. package/dist/oauth-clients-Djq9r_KP.mjs +0 -266
  1304. package/dist/oauth-clients-Djq9r_KP.mjs.map +0 -1
  1305. package/dist/oauth-state-store-BbjnZXNC.mjs +0 -50
  1306. package/dist/oauth-state-store-BbjnZXNC.mjs.map +0 -1
  1307. package/dist/oauth-user-lookup-vue9a64A.mjs +0 -26
  1308. package/dist/oauth-user-lookup-vue9a64A.mjs.map +0 -1
  1309. package/dist/object-cache-CqWNY5uP.mjs +0 -582
  1310. package/dist/object-cache-CqWNY5uP.mjs.map +0 -1
  1311. package/dist/options-SQCHQCPH.d.mts +0 -81
  1312. package/dist/options-SQCHQCPH.d.mts.map +0 -1
  1313. package/dist/parse-CVgO-Qai.d.mts +0 -168
  1314. package/dist/parse-CVgO-Qai.d.mts.map +0 -1
  1315. package/dist/parse-DY6OD1j_.mjs +0 -81
  1316. package/dist/parse-DY6OD1j_.mjs.map +0 -1
  1317. package/dist/passkey-config-X_H8128a.mjs +0 -46
  1318. package/dist/passkey-config-X_H8128a.mjs.map +0 -1
  1319. package/dist/paths-JxokKIbr.mjs +0 -77
  1320. package/dist/paths-JxokKIbr.mjs.map +0 -1
  1321. package/dist/patterns-BhAvqO0S.mjs +0 -145
  1322. package/dist/patterns-BhAvqO0S.mjs.map +0 -1
  1323. package/dist/placeholder-MSEd8gty.d.mts +0 -306
  1324. package/dist/placeholder-MSEd8gty.d.mts.map +0 -1
  1325. package/dist/plan-xjcWrAah.mjs +0 -135
  1326. package/dist/plan-xjcWrAah.mjs.map +0 -1
  1327. package/dist/plugins-DUXUt8B9.mjs +0 -277
  1328. package/dist/plugins-DUXUt8B9.mjs.map +0 -1
  1329. package/dist/policy-CUvwAARc.mjs +0 -45
  1330. package/dist/policy-CUvwAARc.mjs.map +0 -1
  1331. package/dist/portable-text-5O_ZGUjB.mjs +0 -307
  1332. package/dist/portable-text-5O_ZGUjB.mjs.map +0 -1
  1333. package/dist/preview-CIUcPYr6.mjs +0 -107
  1334. package/dist/preview-CIUcPYr6.mjs.map +0 -1
  1335. package/dist/protocol-B97DZaFr.d.mts +0 -61
  1336. package/dist/protocol-B97DZaFr.d.mts.map +0 -1
  1337. package/dist/public-submission-BFBUrqst.mjs +0 -250
  1338. package/dist/public-submission-BFBUrqst.mjs.map +0 -1
  1339. package/dist/public-url-Bn7U0D7-.mjs +0 -101
  1340. package/dist/public-url-Bn7U0D7-.mjs.map +0 -1
  1341. package/dist/query-B48peoRT.mjs +0 -890
  1342. package/dist/query-B48peoRT.mjs.map +0 -1
  1343. package/dist/query-C4IH0uhR.mjs +0 -41
  1344. package/dist/query-C4IH0uhR.mjs.map +0 -1
  1345. package/dist/rate-limit-BZ6nybgc.mjs +0 -120
  1346. package/dist/rate-limit-BZ6nybgc.mjs.map +0 -1
  1347. package/dist/receipt-B4wJj5Jq.mjs +0 -43
  1348. package/dist/receipt-B4wJj5Jq.mjs.map +0 -1
  1349. package/dist/redirect-B29UjdUn.mjs +0 -411
  1350. package/dist/redirect-B29UjdUn.mjs.map +0 -1
  1351. package/dist/redirect-Cd1E7VUt.mjs +0 -17
  1352. package/dist/redirect-Cd1E7VUt.mjs.map +0 -1
  1353. package/dist/redirects-Ca2MPfEG.mjs +0 -446
  1354. package/dist/redirects-Ca2MPfEG.mjs.map +0 -1
  1355. package/dist/redirects-Cv9apQKj.mjs +0 -148
  1356. package/dist/redirects-Cv9apQKj.mjs.map +0 -1
  1357. package/dist/relation-M4NUCb0b.mjs +0 -334
  1358. package/dist/relation-M4NUCb0b.mjs.map +0 -1
  1359. package/dist/relations-CCif47Oq.mjs +0 -403
  1360. package/dist/relations-CCif47Oq.mjs.map +0 -1
  1361. package/dist/relations-CK9CYUyr.mjs +0 -310
  1362. package/dist/relations-CK9CYUyr.mjs.map +0 -1
  1363. package/dist/request-cache-DzLYKm_x.mjs +0 -104
  1364. package/dist/request-cache-DzLYKm_x.mjs.map +0 -1
  1365. package/dist/request-meta-sZXt3sRo.mjs +0 -141
  1366. package/dist/request-meta-sZXt3sRo.mjs.map +0 -1
  1367. package/dist/resolve-2WbQsCvT.mjs +0 -199
  1368. package/dist/resolve-2WbQsCvT.mjs.map +0 -1
  1369. package/dist/route-wire--1hLuACz.mjs +0 -197
  1370. package/dist/route-wire--1hLuACz.mjs.map +0 -1
  1371. package/dist/routes-vrR95WR6.mjs +0 -272
  1372. package/dist/routes-vrR95WR6.mjs.map +0 -1
  1373. package/dist/runner-1y4J9fJB.mjs +0 -5742
  1374. package/dist/runner-1y4J9fJB.mjs.map +0 -1
  1375. package/dist/runner-D5_LzKXI.d.mts +0 -68
  1376. package/dist/runner-D5_LzKXI.d.mts.map +0 -1
  1377. package/dist/schema-BABiRdsH.mjs +0 -13
  1378. package/dist/schema-BABiRdsH.mjs.map +0 -1
  1379. package/dist/schema-Du3MzCG0.mjs +0 -446
  1380. package/dist/schema-Du3MzCG0.mjs.map +0 -1
  1381. package/dist/scopes-Dbk-ElhT.mjs +0 -34
  1382. package/dist/scopes-Dbk-ElhT.mjs.map +0 -1
  1383. package/dist/search-Bt1PL1jf.mjs +0 -448
  1384. package/dist/search-Bt1PL1jf.mjs.map +0 -1
  1385. package/dist/sections-Ddptx_o9.mjs +0 -346
  1386. package/dist/sections-Ddptx_o9.mjs.map +0 -1
  1387. package/dist/seo-CZT2oLtT.mjs +0 -114
  1388. package/dist/seo-CZT2oLtT.mjs.map +0 -1
  1389. package/dist/seo-D5w3-Azy.mjs +0 -133
  1390. package/dist/seo-D5w3-Azy.mjs.map +0 -1
  1391. package/dist/service-DuykXPyW.mjs +0 -150
  1392. package/dist/service-DuykXPyW.mjs.map +0 -1
  1393. package/dist/session-user-BhaVp8w0.mjs +0 -51
  1394. package/dist/session-user-BhaVp8w0.mjs.map +0 -1
  1395. package/dist/settings-B4vDl1fK.mjs +0 -439
  1396. package/dist/settings-B4vDl1fK.mjs.map +0 -1
  1397. package/dist/settings-DYidIB26.mjs +0 -61
  1398. package/dist/settings-DYidIB26.mjs.map +0 -1
  1399. package/dist/settings-Dyj6v8C4.mjs +0 -51
  1400. package/dist/settings-Dyj6v8C4.mjs.map +0 -1
  1401. package/dist/setup-complete-bOogcHWG.mjs +0 -26
  1402. package/dist/setup-complete-bOogcHWG.mjs.map +0 -1
  1403. package/dist/setup-nonce-0EGuKM4s.mjs +0 -25
  1404. package/dist/setup-nonce-0EGuKM4s.mjs.map +0 -1
  1405. package/dist/site-settings-DOgRUoFX.mjs +0 -50
  1406. package/dist/site-settings-DOgRUoFX.mjs.map +0 -1
  1407. package/dist/site-url-BU_bbxwj.mjs +0 -16
  1408. package/dist/site-url-BU_bbxwj.mjs.map +0 -1
  1409. package/dist/snapshot-PawoX-WG.mjs +0 -414
  1410. package/dist/snapshot-PawoX-WG.mjs.map +0 -1
  1411. package/dist/ssrf-CJUnJymJ.mjs +0 -406
  1412. package/dist/ssrf-CJUnJymJ.mjs.map +0 -1
  1413. package/dist/stage-DgrBz_du.mjs +0 -662
  1414. package/dist/stage-DgrBz_du.mjs.map +0 -1
  1415. package/dist/state-DDiPySSG.mjs +0 -153
  1416. package/dist/state-DDiPySSG.mjs.map +0 -1
  1417. package/dist/status-DZKIG4a9.mjs +0 -30
  1418. package/dist/status-DZKIG4a9.mjs.map +0 -1
  1419. package/dist/storage-query-FXJH5pI8.d.mts +0 -1581
  1420. package/dist/storage-query-FXJH5pI8.d.mts.map +0 -1
  1421. package/dist/tar-_1AgTYFu.mjs +0 -449
  1422. package/dist/tar-_1AgTYFu.mjs.map +0 -1
  1423. package/dist/target-_7pn2Gbg.mjs +0 -27
  1424. package/dist/target-_7pn2Gbg.mjs.map +0 -1
  1425. package/dist/taxonomies-C1IwNe8Q.mjs +0 -697
  1426. package/dist/taxonomies-C1IwNe8Q.mjs.map +0 -1
  1427. package/dist/taxonomies-C_XMoRcX.mjs +0 -939
  1428. package/dist/taxonomies-C_XMoRcX.mjs.map +0 -1
  1429. package/dist/taxonomy-C3Fu1YeH.mjs +0 -525
  1430. package/dist/taxonomy-C3Fu1YeH.mjs.map +0 -1
  1431. package/dist/tokens-u78jETkX.mjs +0 -171
  1432. package/dist/tokens-u78jETkX.mjs.map +0 -1
  1433. package/dist/transaction-BcJO4Tmc.mjs +0 -29
  1434. package/dist/transaction-BcJO4Tmc.mjs.map +0 -1
  1435. package/dist/transfer-DIGvR9Af.mjs +0 -166
  1436. package/dist/transfer-DIGvR9Af.mjs.map +0 -1
  1437. package/dist/transfer-DgeCvHnj.mjs +0 -8675
  1438. package/dist/transfer-DgeCvHnj.mjs.map +0 -1
  1439. package/dist/transfer-download-Pml7RMio.mjs +0 -33
  1440. package/dist/transfer-download-Pml7RMio.mjs.map +0 -1
  1441. package/dist/transformations-9gfpwY65.mjs +0 -196
  1442. package/dist/transformations-9gfpwY65.mjs.map +0 -1
  1443. package/dist/transport-BIfH7_hx.d.mts +0 -42
  1444. package/dist/transport-BIfH7_hx.d.mts.map +0 -1
  1445. package/dist/transport-DKWIq53q.mjs +0 -136
  1446. package/dist/transport-DKWIq53q.mjs.map +0 -1
  1447. package/dist/trusted-proxy-tKiVtyTD.mjs +0 -51
  1448. package/dist/trusted-proxy-tKiVtyTD.mjs.map +0 -1
  1449. package/dist/turnstile-DpsoyOfg.mjs +0 -53
  1450. package/dist/turnstile-DpsoyOfg.mjs.map +0 -1
  1451. package/dist/types-B4sUC2p1.d.mts +0 -198
  1452. package/dist/types-B4sUC2p1.d.mts.map +0 -1
  1453. package/dist/types-B7Lmsh1E.d.mts +0 -887
  1454. package/dist/types-B7Lmsh1E.d.mts.map +0 -1
  1455. package/dist/types-BZakh7Ym.mjs +0 -22
  1456. package/dist/types-BZakh7Ym.mjs.map +0 -1
  1457. package/dist/types-B_CppEmv.d.mts +0 -264
  1458. package/dist/types-B_CppEmv.d.mts.map +0 -1
  1459. package/dist/types-BcrBrE6-.mjs +0 -159
  1460. package/dist/types-BcrBrE6-.mjs.map +0 -1
  1461. package/dist/types-BkUg2yHx.mjs +0 -92
  1462. package/dist/types-BkUg2yHx.mjs.map +0 -1
  1463. package/dist/types-CAZgq9fO.d.mts +0 -124
  1464. package/dist/types-CAZgq9fO.d.mts.map +0 -1
  1465. package/dist/types-Cd-O03VG.d.mts +0 -363
  1466. package/dist/types-Cd-O03VG.d.mts.map +0 -1
  1467. package/dist/types-Cr-Kg-3D.d.mts +0 -1641
  1468. package/dist/types-Cr-Kg-3D.d.mts.map +0 -1
  1469. package/dist/types-D2fvWd1i.d.mts +0 -359
  1470. package/dist/types-D2fvWd1i.d.mts.map +0 -1
  1471. package/dist/types-D7HUsguf.mjs +0 -77
  1472. package/dist/types-D7HUsguf.mjs.map +0 -1
  1473. package/dist/types-DA1Te3Oy.d.mts +0 -198
  1474. package/dist/types-DA1Te3Oy.d.mts.map +0 -1
  1475. package/dist/types-DhV6Q5bP.mjs +0 -18
  1476. package/dist/types-DhV6Q5bP.mjs.map +0 -1
  1477. package/dist/types-DnnVSl6Y.d.mts +0 -85
  1478. package/dist/types-DnnVSl6Y.d.mts.map +0 -1
  1479. package/dist/types-VT4-BugW.mjs +0 -16
  1480. package/dist/types-VT4-BugW.mjs.map +0 -1
  1481. package/dist/upload-attempts-B68ZGNu9.mjs +0 -32
  1482. package/dist/upload-attempts-B68ZGNu9.mjs.map +0 -1
  1483. package/dist/url-pattern-CCeZMGOh.mjs +0 -33
  1484. package/dist/url-pattern-CCeZMGOh.mjs.map +0 -1
  1485. package/dist/user-DDSL-sGw.mjs +0 -171
  1486. package/dist/user-DDSL-sGw.mjs.map +0 -1
  1487. package/dist/utils-DdhmO9w9.mjs +0 -439
  1488. package/dist/utils-DdhmO9w9.mjs.map +0 -1
  1489. package/dist/validate-CHosPEhs.mjs +0 -453
  1490. package/dist/validate-CHosPEhs.mjs.map +0 -1
  1491. package/dist/validate-CM79QXYE.d.mts +0 -432
  1492. package/dist/validate-CM79QXYE.d.mts.map +0 -1
  1493. package/dist/validation-BFecQczG.mjs +0 -218
  1494. package/dist/validation-BFecQczG.mjs.map +0 -1
  1495. package/dist/version-BRZXVifl.mjs +0 -9
  1496. package/dist/version-BRZXVifl.mjs.map +0 -1
  1497. package/dist/version-DXsxRrob.mjs +0 -7
  1498. package/dist/version-DXsxRrob.mjs.map +0 -1
  1499. package/dist/widgets-WdV72brA.mjs +0 -126
  1500. package/dist/widgets-WdV72brA.mjs.map +0 -1
  1501. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +0 -34
  1502. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +0 -1
  1503. package/dist/wxr-taxonomies-DP6ESgMN.mjs +0 -372
  1504. package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +0 -1
  1505. package/dist/zod-generator-D6uE4WiS.mjs +0 -389
  1506. package/dist/zod-generator-D6uE4WiS.mjs.map +0 -1
  1507. package/src/astro/routes/api/relations/[id]/translations.ts +0 -33
  1508. package/src/cli/commands/bundle-utils.ts +0 -408
  1509. package/src/cli/commands/bundle.ts +0 -659
  1510. package/src/cli/commands/plugin-init.ts +0 -417
  1511. package/src/cli/commands/plugin-validate.ts +0 -31
  1512. package/src/cli/commands/plugin.ts +0 -33
  1513. package/src/cli/commands/publish.ts +0 -721
  1514. /package/dist/{api-tokens-CE1ECIg0.mjs → api-tokens-BLz2MtQs.mjs} +0 -0
  1515. /package/dist/{ssrf-DpBH7aOt.mjs → ssrf-tA45vIPX.mjs} +0 -0
@@ -0,0 +1,199 @@
1
+ import { i as isI18nEnabled, n as getFallbackChain, r as getI18nConfig } from "./config-CvmjJcVw.mjs";
2
+ import { getRequestContext } from "./request-context.mjs";
3
+
4
+ //#region src/i18n/resolve.ts
5
+ /**
6
+ * Shared locale-resolution helpers.
7
+ *
8
+ * Matches the pattern used by `query.ts` for content: an explicit locale wins,
9
+ * otherwise we fall back to the request-context locale, otherwise to
10
+ * `defaultLocale` when i18n is enabled, otherwise to `undefined` (meaning "do
11
+ * not filter by locale" — legacy single-locale behaviour).
12
+ */
13
+ /**
14
+ * Resolve the locale to use for a query given an optional explicit value.
15
+ * Returns `undefined` when no locale information is available; callers should
16
+ * treat that as "do not filter by locale".
17
+ */
18
+ function resolveLocale(explicit) {
19
+ if (explicit !== void 0) return explicit;
20
+ const ctxLocale = getRequestContext()?.locale;
21
+ if (ctxLocale !== void 0) return ctxLocale;
22
+ const cfg = getI18nConfig();
23
+ if (cfg && isI18nEnabled()) return cfg.defaultLocale;
24
+ }
25
+ /**
26
+ * Fallback chain to try when looking up a single item. When i18n is disabled
27
+ * or the locale is unspecified, returns a single-element array (or empty when
28
+ * no locale resolves) so callers can iterate uniformly.
29
+ */
30
+ function resolveLocaleChain(explicit) {
31
+ const locale = resolveLocale(explicit);
32
+ if (locale === void 0) return [];
33
+ if (!isI18nEnabled()) return [locale];
34
+ return getFallbackChain(locale);
35
+ }
36
+ const REPEATED_SLASHES = /\/{2,}/g;
37
+ const TRAILING_SLASH = /\/$/;
38
+ const DATE_TOKEN = /\{(year|month|day|hour|minute|second)\}/g;
39
+ const OFFSETLESS_DATETIME = /^(\d{4}-\d{2}-\d{2})[ T](\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?)$/;
40
+ const pad2 = (n) => String(n).padStart(2, "0");
41
+ function parseUtcDate(date) {
42
+ if (date instanceof Date) return date;
43
+ const offsetless = OFFSETLESS_DATETIME.exec(date);
44
+ return new Date(offsetless ? `${offsetless[1]}T${offsetless[2]}Z` : date);
45
+ }
46
+ /**
47
+ * Substitute WordPress-style date tokens (`{year}`, `{month}`, `{day}`,
48
+ * `{hour}`, `{minute}`, `{second}`) from a publish date. Month/day/time parts
49
+ * are zero-padded, mirroring WordPress (`%monthnum%`, `%day%`, ...). Tokens are
50
+ * left untouched when no valid date is available, so callers without a date
51
+ * (or unpublished entries) never produce a half-resolved URL.
52
+ */
53
+ function applyDateTokens(path, date) {
54
+ const d = date == null ? null : parseUtcDate(date);
55
+ if (!d || Number.isNaN(d.getTime())) return path;
56
+ const parts = {
57
+ year: String(d.getUTCFullYear()),
58
+ month: pad2(d.getUTCMonth() + 1),
59
+ day: pad2(d.getUTCDate()),
60
+ hour: pad2(d.getUTCHours()),
61
+ minute: pad2(d.getUTCMinutes()),
62
+ second: pad2(d.getUTCSeconds())
63
+ };
64
+ return path.replace(DATE_TOKEN, (match, key) => parts[key] ?? match);
65
+ }
66
+ /**
67
+ * Interpolate a collection `url_pattern` with a row's slug, id and publish date.
68
+ *
69
+ * Supported tokens: `{slug}`, `{id}`, and the date tokens `{year}`,
70
+ * `{month}`, `{day}`, `{hour}`, `{minute}`, `{second}` (resolved from `date`,
71
+ * for WordPress-style permalinks like `/{year}/{month}/{day}/{slug}.html`).
72
+ *
73
+ * Falls back to `/{collection}/{slug}` when no pattern is configured.
74
+ * Does NOT apply any locale prefix — pass the result through
75
+ * Astro's `getRelativeLocaleUrl` / `getAbsoluteLocaleUrl` (or the
76
+ * `localizePath` helper below) to add the locale segment.
77
+ */
78
+ function interpolateUrlPattern(options) {
79
+ const { pattern, collection, slug, id, date } = options;
80
+ let path = (pattern ?? `/${encodeURIComponent(collection)}/{slug}`).replaceAll("{slug}", encodeURIComponent(slug)).replaceAll("{id}", encodeURIComponent(id));
81
+ path = applyDateTokens(path, date);
82
+ path = path.replace(REPEATED_SLASHES, "/");
83
+ if (path.length > 1 && path.endsWith("/")) path = path.slice(0, -1);
84
+ if (!path.startsWith("/")) path = `/${path}`;
85
+ return path;
86
+ }
87
+ /** Resolve a content row to its locale-aware route path. */
88
+ async function resolveLocalizedContentRoutePath(options) {
89
+ const localized = await localizePath(interpolateUrlPattern(options), options.locale);
90
+ if (localized === null) return null;
91
+ if (options.trailingSlash === "always" && localized !== "/") return `${localized}/`;
92
+ if (options.trailingSlash === "never" && localized !== "/") return localized.replace(TRAILING_SLASH, "");
93
+ return localized;
94
+ }
95
+ /**
96
+ * Apply a locale prefix to a path, honouring the user's Astro `i18n`
97
+ * routing config (`prefixDefaultLocale`, custom `path`/`codes` mappings).
98
+ *
99
+ * Reads the resolved config from `astro:config/server`, which is always
100
+ * available regardless of whether i18n is enabled -- so this function
101
+ * works in both i18n and non-i18n builds without tripping Astro's
102
+ * `i18nNotEnabled` resolver (the case with importing `astro:i18n`).
103
+ *
104
+ * Returns:
105
+ * - The original `path` when i18n is not configured.
106
+ * - The original `path` for the default locale when
107
+ * `prefixDefaultLocale` is false.
108
+ * - `/{segment}{path}` for any other configured locale, where
109
+ * `{segment}` is the locale's custom `path` if one is set,
110
+ * otherwise the locale code.
111
+ * - `null` when the row's locale isn't in the configured list.
112
+ * Callers should drop the entry: a sitemap link to a route the
113
+ * site can't serve is worse than no link at all (search engines
114
+ * get a 404 / soft-404 and downrank the page).
115
+ *
116
+ * Falls back to `getI18nConfig()` (EmDash's mirror of the same config,
117
+ * populated at runtime startup) when `astro:config/server` is
118
+ * unavailable -- e.g. running outside an Astro build context, such as
119
+ * in vitest.
120
+ */
121
+ async function localizePath(path, locale) {
122
+ const segment = await resolveLocaleSegment(locale);
123
+ if (segment === void 0) return null;
124
+ if (segment === null || segment === "") return normalizePath(path);
125
+ return normalizePath(`/${segment}${path}`);
126
+ }
127
+ /**
128
+ * Resolve the URL segment to use for a locale.
129
+ *
130
+ * Returns:
131
+ * - `null` when i18n isn't configured (caller should not prefix).
132
+ * - `""` when the locale is the default locale and
133
+ * `prefixDefaultLocale` is false (caller should not prefix).
134
+ * - The locale's custom `path` value, or the locale string itself.
135
+ * - `undefined` when the locale isn't in the configured list --
136
+ * the row points at a route the site can't serve.
137
+ */
138
+ async function resolveLocaleSegment(locale) {
139
+ return resolveLocaleSegmentFromConfig(await readAstroI18nConfig(), locale);
140
+ }
141
+ /** @internal Exported for testing Astro object-locale routing without a virtual module. */
142
+ function resolveLocaleSegmentFromConfig(i18n, locale) {
143
+ if (!i18n || !i18n.locales || i18n.locales.length <= 1) return null;
144
+ let segment;
145
+ let isDefault = locale === i18n.defaultLocale;
146
+ for (const entry of i18n.locales) if (typeof entry === "string") {
147
+ if (entry === locale) {
148
+ segment = entry;
149
+ break;
150
+ }
151
+ } else if (entry.path === locale || entry.codes.includes(locale)) {
152
+ segment = entry.path;
153
+ isDefault ||= entry.path === i18n.defaultLocale || entry.codes.includes(i18n.defaultLocale);
154
+ break;
155
+ }
156
+ if (segment === void 0) return void 0;
157
+ if (isDefault && !i18n.prefixDefaultLocale) return "";
158
+ return segment;
159
+ }
160
+ let astroI18nCache;
161
+ async function readAstroI18nConfig() {
162
+ if (astroI18nCache !== void 0) return astroI18nCache;
163
+ try {
164
+ const mod = await import("astro:config/server");
165
+ if (!mod.i18n) {
166
+ astroI18nCache = null;
167
+ return null;
168
+ }
169
+ const routing = mod.i18n.routing;
170
+ astroI18nCache = {
171
+ defaultLocale: mod.i18n.defaultLocale,
172
+ locales: mod.i18n.locales,
173
+ prefixDefaultLocale: typeof routing === "object" ? routing.prefixDefaultLocale ?? false : false
174
+ };
175
+ return astroI18nCache;
176
+ } catch {
177
+ const cfg = getI18nConfig();
178
+ if (!cfg || !isI18nEnabled()) {
179
+ astroI18nCache = null;
180
+ return null;
181
+ }
182
+ astroI18nCache = {
183
+ defaultLocale: cfg.defaultLocale,
184
+ locales: cfg.locales,
185
+ prefixDefaultLocale: cfg.prefixDefaultLocale
186
+ };
187
+ return astroI18nCache;
188
+ }
189
+ }
190
+ function normalizePath(path) {
191
+ let p = path.replace(REPEATED_SLASHES, "/");
192
+ if (p.length > 1 && p.endsWith("/")) p = p.slice(0, -1);
193
+ if (!p.startsWith("/")) p = `/${p}`;
194
+ return p;
195
+ }
196
+
197
+ //#endregion
198
+ export { resolveLocalizedContentRoutePath as a, resolveLocaleChain as i, localizePath as n, resolveLocale as r, interpolateUrlPattern as t };
199
+ //# sourceMappingURL=resolve-D-kqyKns.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-D-kqyKns.mjs","names":[],"sources":["../src/i18n/resolve.ts"],"sourcesContent":["/**\n * Shared locale-resolution helpers.\n *\n * Matches the pattern used by `query.ts` for content: an explicit locale wins,\n * otherwise we fall back to the request-context locale, otherwise to\n * `defaultLocale` when i18n is enabled, otherwise to `undefined` (meaning \"do\n * not filter by locale\" — legacy single-locale behaviour).\n */\n\nimport { getRequestContext } from \"../request-context.js\";\nimport { getFallbackChain, getI18nConfig, isI18nEnabled } from \"./config.js\";\n\n/**\n * Resolve the locale to use for a query given an optional explicit value.\n * Returns `undefined` when no locale information is available; callers should\n * treat that as \"do not filter by locale\".\n */\nexport function resolveLocale(explicit?: string): string | undefined {\n\tif (explicit !== undefined) return explicit;\n\tconst ctxLocale = getRequestContext()?.locale;\n\tif (ctxLocale !== undefined) return ctxLocale;\n\tconst cfg = getI18nConfig();\n\tif (cfg && isI18nEnabled()) return cfg.defaultLocale;\n\treturn undefined;\n}\n\n/**\n * Fallback chain to try when looking up a single item. When i18n is disabled\n * or the locale is unspecified, returns a single-element array (or empty when\n * no locale resolves) so callers can iterate uniformly.\n */\nexport function resolveLocaleChain(explicit?: string): string[] {\n\tconst locale = resolveLocale(explicit);\n\tif (locale === undefined) return [];\n\tif (!isI18nEnabled()) return [locale];\n\treturn getFallbackChain(locale);\n}\n\nconst REPEATED_SLASHES = /\\/{2,}/g;\nconst TRAILING_SLASH = /\\/$/;\nconst DATE_TOKEN = /\\{(year|month|day|hour|minute|second)\\}/g;\n// SQLite-style datetime without timezone info (\"2023-05-08 10:00:00\").\n// Stored values are UTC; without this, `new Date()` would parse them in the\n// server's local zone and the same row could yield different URLs per host.\nconst OFFSETLESS_DATETIME = /^(\\d{4}-\\d{2}-\\d{2})[ T](\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)$/;\nconst pad2 = (n: number) => String(n).padStart(2, \"0\");\n\nfunction parseUtcDate(date: string | Date): Date {\n\tif (date instanceof Date) return date;\n\tconst offsetless = OFFSETLESS_DATETIME.exec(date);\n\treturn new Date(offsetless ? `${offsetless[1]}T${offsetless[2]}Z` : date);\n}\n\n/**\n * Substitute WordPress-style date tokens (`{year}`, `{month}`, `{day}`,\n * `{hour}`, `{minute}`, `{second}`) from a publish date. Month/day/time parts\n * are zero-padded, mirroring WordPress (`%monthnum%`, `%day%`, ...). Tokens are\n * left untouched when no valid date is available, so callers without a date\n * (or unpublished entries) never produce a half-resolved URL.\n */\nfunction applyDateTokens(path: string, date: string | Date | null | undefined): string {\n\tconst d = date == null ? null : parseUtcDate(date);\n\tif (!d || Number.isNaN(d.getTime())) return path;\n\tconst parts: Record<string, string> = {\n\t\tyear: String(d.getUTCFullYear()),\n\t\tmonth: pad2(d.getUTCMonth() + 1),\n\t\tday: pad2(d.getUTCDate()),\n\t\thour: pad2(d.getUTCHours()),\n\t\tminute: pad2(d.getUTCMinutes()),\n\t\tsecond: pad2(d.getUTCSeconds()),\n\t};\n\treturn path.replace(DATE_TOKEN, (match, key: string) => parts[key] ?? match);\n}\n\n/**\n * Interpolate a collection `url_pattern` with a row's slug, id and publish date.\n *\n * Supported tokens: `{slug}`, `{id}`, and the date tokens `{year}`,\n * `{month}`, `{day}`, `{hour}`, `{minute}`, `{second}` (resolved from `date`,\n * for WordPress-style permalinks like `/{year}/{month}/{day}/{slug}.html`).\n *\n * Falls back to `/{collection}/{slug}` when no pattern is configured.\n * Does NOT apply any locale prefix — pass the result through\n * Astro's `getRelativeLocaleUrl` / `getAbsoluteLocaleUrl` (or the\n * `localizePath` helper below) to add the locale segment.\n */\nexport function interpolateUrlPattern(options: {\n\tpattern: string | null;\n\tcollection: string;\n\tslug: string;\n\tid: string;\n\t/** Publish date used for date tokens; tokens stay literal when absent. */\n\tdate?: string | Date | null;\n}): string {\n\tconst { pattern, collection, slug, id, date } = options;\n\tconst basePattern = pattern ?? `/${encodeURIComponent(collection)}/{slug}`;\n\tlet path = basePattern\n\t\t.replaceAll(\"{slug}\", encodeURIComponent(slug))\n\t\t.replaceAll(\"{id}\", encodeURIComponent(id));\n\tpath = applyDateTokens(path, date);\n\tpath = path.replace(REPEATED_SLASHES, \"/\");\n\tif (path.length > 1 && path.endsWith(\"/\")) path = path.slice(0, -1);\n\tif (!path.startsWith(\"/\")) path = `/${path}`;\n\treturn path;\n}\n\nexport interface ContentRoutePathOptions {\n\tpattern: string | null;\n\tcollection: string;\n\tslug: string;\n\tid: string;\n\tdate?: string | Date | null;\n\ttrailingSlash?: \"always\" | \"never\" | \"ignore\";\n}\n\n/** Resolve a content row to the route path shared by menus and public URL surfaces. */\nexport function resolveContentRoutePath(options: ContentRoutePathOptions): string {\n\tconst path = interpolateUrlPattern(options);\n\tif (options.trailingSlash === \"always\" && path !== \"/\") return `${path}/`;\n\tif (options.trailingSlash === \"never\" && path !== \"/\") return path.replace(TRAILING_SLASH, \"\");\n\treturn path;\n}\n\n/** Resolve a content row to its locale-aware route path. */\nexport async function resolveLocalizedContentRoutePath(\n\toptions: ContentRoutePathOptions & { locale: string },\n): Promise<string | null> {\n\tconst path = interpolateUrlPattern(options);\n\tconst localized = await localizePath(path, options.locale);\n\tif (localized === null) return null;\n\tif (options.trailingSlash === \"always\" && localized !== \"/\") return `${localized}/`;\n\tif (options.trailingSlash === \"never\" && localized !== \"/\") {\n\t\treturn localized.replace(TRAILING_SLASH, \"\");\n\t}\n\treturn localized;\n}\n\n/**\n * Apply a locale prefix to a path, honouring the user's Astro `i18n`\n * routing config (`prefixDefaultLocale`, custom `path`/`codes` mappings).\n *\n * Reads the resolved config from `astro:config/server`, which is always\n * available regardless of whether i18n is enabled -- so this function\n * works in both i18n and non-i18n builds without tripping Astro's\n * `i18nNotEnabled` resolver (the case with importing `astro:i18n`).\n *\n * Returns:\n * - The original `path` when i18n is not configured.\n * - The original `path` for the default locale when\n * `prefixDefaultLocale` is false.\n * - `/{segment}{path}` for any other configured locale, where\n * `{segment}` is the locale's custom `path` if one is set,\n * otherwise the locale code.\n * - `null` when the row's locale isn't in the configured list.\n * Callers should drop the entry: a sitemap link to a route the\n * site can't serve is worse than no link at all (search engines\n * get a 404 / soft-404 and downrank the page).\n *\n * Falls back to `getI18nConfig()` (EmDash's mirror of the same config,\n * populated at runtime startup) when `astro:config/server` is\n * unavailable -- e.g. running outside an Astro build context, such as\n * in vitest.\n */\nexport async function localizePath(path: string, locale: string): Promise<string | null> {\n\tconst segment = await resolveLocaleSegment(locale);\n\tif (segment === undefined) return null;\n\tif (segment === null || segment === \"\") return normalizePath(path);\n\treturn normalizePath(`/${segment}${path}`);\n}\n\n/**\n * Resolve the URL segment to use for a locale.\n *\n * Returns:\n * - `null` when i18n isn't configured (caller should not prefix).\n * - `\"\"` when the locale is the default locale and\n * `prefixDefaultLocale` is false (caller should not prefix).\n * - The locale's custom `path` value, or the locale string itself.\n * - `undefined` when the locale isn't in the configured list --\n * the row points at a route the site can't serve.\n */\nasync function resolveLocaleSegment(locale: string): Promise<string | null | undefined> {\n\tconst i18n = await readAstroI18nConfig();\n\treturn resolveLocaleSegmentFromConfig(i18n, locale);\n}\n\n/** @internal Exported for testing Astro object-locale routing without a virtual module. */\nexport function resolveLocaleSegmentFromConfig(\n\ti18n: AstroI18nConfig | null,\n\tlocale: string,\n): string | null | undefined {\n\tif (!i18n || !i18n.locales || i18n.locales.length <= 1) return null;\n\n\tlet segment: string | undefined;\n\tlet isDefault = locale === i18n.defaultLocale;\n\tfor (const entry of i18n.locales) {\n\t\tif (typeof entry === \"string\") {\n\t\t\tif (entry === locale) {\n\t\t\t\tsegment = entry;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else if (entry.path === locale || entry.codes.includes(locale)) {\n\t\t\tsegment = entry.path;\n\t\t\tisDefault ||= entry.path === i18n.defaultLocale || entry.codes.includes(i18n.defaultLocale);\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (segment === undefined) return undefined;\n\tif (isDefault && !i18n.prefixDefaultLocale) return \"\";\n\treturn segment;\n}\n\nexport interface AstroI18nConfig {\n\tdefaultLocale: string;\n\tlocales: Array<string | { codes: readonly string[]; path: string }>;\n\tprefixDefaultLocale?: boolean;\n}\n\nlet astroI18nCache: AstroI18nConfig | null | undefined;\n\nasync function readAstroI18nConfig(): Promise<AstroI18nConfig | null> {\n\tif (astroI18nCache !== undefined) return astroI18nCache;\n\n\ttry {\n\t\tconst mod = (await import(\"astro:config/server\")) as {\n\t\t\ti18n?: {\n\t\t\t\tdefaultLocale: string;\n\t\t\t\tlocales: Array<string | { codes: readonly string[]; path: string }>;\n\t\t\t\trouting?: { prefixDefaultLocale?: boolean } | string;\n\t\t\t};\n\t\t};\n\t\tif (!mod.i18n) {\n\t\t\tastroI18nCache = null;\n\t\t\treturn null;\n\t\t}\n\t\tconst routing = mod.i18n.routing;\n\t\tastroI18nCache = {\n\t\t\tdefaultLocale: mod.i18n.defaultLocale,\n\t\t\tlocales: mod.i18n.locales,\n\t\t\tprefixDefaultLocale:\n\t\t\t\ttypeof routing === \"object\" ? (routing.prefixDefaultLocale ?? false) : false,\n\t\t};\n\t\treturn astroI18nCache;\n\t} catch {\n\t\t// `astro:config/server` isn't resolvable (e.g. running under vitest\n\t\t// outside an Astro build). Fall back to EmDash's runtime config,\n\t\t// which is populated at startup via the same astroConfig object.\n\t\tconst cfg = getI18nConfig();\n\t\tif (!cfg || !isI18nEnabled()) {\n\t\t\tastroI18nCache = null;\n\t\t\treturn null;\n\t\t}\n\t\tastroI18nCache = {\n\t\t\tdefaultLocale: cfg.defaultLocale,\n\t\t\tlocales: cfg.locales,\n\t\t\tprefixDefaultLocale: cfg.prefixDefaultLocale,\n\t\t};\n\t\treturn astroI18nCache;\n\t}\n}\n\n/** @internal -- exposed for tests to reset the module-level cache. */\nexport function _resetAstroI18nCacheForTests(): void {\n\tastroI18nCache = undefined;\n}\n\nfunction normalizePath(path: string): string {\n\tlet p = path.replace(REPEATED_SLASHES, \"/\");\n\tif (p.length > 1 && p.endsWith(\"/\")) p = p.slice(0, -1);\n\tif (!p.startsWith(\"/\")) p = `/${p}`;\n\treturn p;\n}\n"],"mappings":"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"}
@@ -0,0 +1,366 @@
1
+ import { t as validateIdentifier } from "./validate-DANX1-Qi.mjs";
2
+ import { n as normalizeContentDatetimes, r as normalizeDatetime, t as DatetimeNormalizationError } from "./datetime-normalization-PeiEdcRY.mjs";
3
+ import { r as requestCached } from "./request-cache-C4CIo5ad.mjs";
4
+ import { r as isSafeUrlFieldWriteValue } from "./url-Dn3IStq8.mjs";
5
+ import { r as EmDashValidationError } from "./types-j6MBDjlZ.mjs";
6
+ import { sql } from "kysely";
7
+ import { monotonicFactory } from "ulidx";
8
+
9
+ //#region src/database/content-datetime.ts
10
+ function repeaterSubFieldsOfType(validation, type) {
11
+ if (!validation) return [];
12
+ let parsed;
13
+ try {
14
+ parsed = JSON.parse(validation);
15
+ } catch {
16
+ return [];
17
+ }
18
+ if (typeof parsed !== "object" || parsed === null || !("subFields" in parsed)) return [];
19
+ const subFields = parsed.subFields;
20
+ if (!Array.isArray(subFields)) return [];
21
+ return subFields.filter((field) => typeof field === "object" && field !== null && "type" in field && field.type === type && "slug" in field && typeof field.slug === "string").map((field) => field.slug);
22
+ }
23
+ var ContentDatetimeNormalizer = class {
24
+ constructor(db, contexts) {
25
+ this.db = db;
26
+ this.contexts = contexts;
27
+ }
28
+ context(collection) {
29
+ if (this.contexts) {
30
+ let context = this.contexts.get(collection);
31
+ if (!context) {
32
+ context = this.loadContext(collection);
33
+ this.contexts.set(collection, context);
34
+ }
35
+ return context;
36
+ }
37
+ return requestCached(`datetimeContext:${collection}`, () => this.loadContext(collection));
38
+ }
39
+ async loadContext(collection) {
40
+ const [rows, timezoneRow] = await Promise.all([this.db.selectFrom("_emdash_fields as field").innerJoin("_emdash_collections as collection", "collection.id", "field.collection_id").select([
41
+ "field.slug",
42
+ "field.type",
43
+ "field.validation"
44
+ ]).where("collection.slug", "=", collection).where("field.type", "in", [
45
+ "datetime",
46
+ "repeater",
47
+ "url"
48
+ ]).execute(), this.db.selectFrom("options").select("value").where("name", "=", "site:timezone").executeTakeFirst()]);
49
+ let timezone = "UTC";
50
+ if (timezoneRow) try {
51
+ const configured = JSON.parse(timezoneRow.value);
52
+ if (typeof configured === "string" && configured) timezone = configured;
53
+ } catch {}
54
+ const fields = [];
55
+ const urlFields = [];
56
+ for (const row of rows) if (row.type === "datetime") fields.push({
57
+ slug: row.slug,
58
+ type: "datetime"
59
+ });
60
+ else if (row.type === "url") urlFields.push({ slug: row.slug });
61
+ else {
62
+ fields.push({
63
+ slug: row.slug,
64
+ type: "repeater",
65
+ datetimeSubFields: repeaterSubFieldsOfType(row.validation, "datetime")
66
+ });
67
+ const urlSubFields = repeaterSubFieldsOfType(row.validation, "url");
68
+ if (urlSubFields.length > 0) urlFields.push({
69
+ slug: row.slug,
70
+ urlSubFields
71
+ });
72
+ }
73
+ return {
74
+ timezone,
75
+ fields,
76
+ urlFields
77
+ };
78
+ }
79
+ /**
80
+ * Normalizes datetimes in incoming field values and rejects `url` values
81
+ * with unsafe schemes, control characters, or off-site path forms. Values
82
+ * already stored are not checked, so restoring or syncing existing data
83
+ * goes through {@link normalizeData} instead.
84
+ */
85
+ async normalizeInput(collection, data) {
86
+ const context = await this.context(collection);
87
+ assertSafeUrlFields(data, context.urlFields);
88
+ return this.normalizeWithContext(context, [data])[0] ?? data;
89
+ }
90
+ async normalizeData(collection, data) {
91
+ const [normalized] = await this.normalizeDataMany(collection, [data]);
92
+ return normalized ?? data;
93
+ }
94
+ async normalizeDataMany(collection, items) {
95
+ return this.normalizeWithContext(await this.context(collection), items);
96
+ }
97
+ normalizeWithContext(context, items) {
98
+ try {
99
+ return items.map((data) => normalizeContentDatetimes(data, context.fields, context.timezone).value);
100
+ } catch (error) {
101
+ if (error instanceof DatetimeNormalizationError) throw new EmDashValidationError(error.message);
102
+ throw error;
103
+ }
104
+ }
105
+ async normalizeValue(collection, value) {
106
+ const context = await this.context(collection);
107
+ try {
108
+ return normalizeDatetime(value, context.timezone).value;
109
+ } catch (error) {
110
+ if (error instanceof DatetimeNormalizationError) throw new EmDashValidationError(error.message);
111
+ throw error;
112
+ }
113
+ }
114
+ };
115
+ function isRecord(value) {
116
+ return typeof value === "object" && value !== null && !Array.isArray(value);
117
+ }
118
+ function repeaterRows(value) {
119
+ let rows = value;
120
+ if (typeof rows === "string" && rows.startsWith("[")) try {
121
+ rows = JSON.parse(rows);
122
+ } catch {
123
+ return;
124
+ }
125
+ return Array.isArray(rows) ? rows : void 0;
126
+ }
127
+ function assertSafeUrl(path, value) {
128
+ if (typeof value === "string" && !isSafeUrlFieldWriteValue(value)) throw new EmDashValidationError(`Field "${path}" must use http, https, mailto, or tel, or be a safe relative path or fragment`, { path });
129
+ }
130
+ function assertSafeUrlFields(data, urlFields) {
131
+ for (const field of urlFields) {
132
+ const value = data[field.slug];
133
+ if (!field.urlSubFields) {
134
+ assertSafeUrl(field.slug, value);
135
+ continue;
136
+ }
137
+ const rows = repeaterRows(value);
138
+ if (!rows) continue;
139
+ for (const [index, row] of rows.entries()) {
140
+ if (!isRecord(row)) continue;
141
+ for (const subField of field.urlSubFields) assertSafeUrl(`${field.slug}.${index}.${subField}`, row[subField]);
142
+ }
143
+ }
144
+ }
145
+
146
+ //#endregion
147
+ //#region src/database/repositories/revision.ts
148
+ const monotonic = monotonicFactory();
149
+ function createRevisionId() {
150
+ return monotonic();
151
+ }
152
+ function normalizeRevisionLimit(value) {
153
+ const numeric = Number(value);
154
+ if (!Number.isFinite(numeric)) return 50;
155
+ return Math.max(1, Math.min(Math.trunc(numeric), 100));
156
+ }
157
+ /**
158
+ * Revision repository for version history
159
+ *
160
+ * Each revision stores a JSON snapshot of the content at a point in time.
161
+ * Used when collection has `supports: ["revisions"]` enabled.
162
+ */
163
+ var RevisionRepository = class {
164
+ datetimes;
165
+ constructor(db, datetimeContexts) {
166
+ this.db = db;
167
+ this.datetimes = new ContentDatetimeNormalizer(db, datetimeContexts);
168
+ }
169
+ /**
170
+ * Create a new revision
171
+ */
172
+ async create(input) {
173
+ const id = createRevisionId();
174
+ const data = await this.datetimes.normalizeData(input.collection, input.data);
175
+ const row = {
176
+ id,
177
+ collection: input.collection,
178
+ entry_id: input.entryId,
179
+ data: JSON.stringify(data),
180
+ author_id: input.authorId ?? null
181
+ };
182
+ await this.db.insertInto("revisions").values(row).execute();
183
+ const revision = await this.findById(id);
184
+ if (!revision) throw new Error("Failed to create revision");
185
+ await this.queuePruning(input.collection, input.entryId, id);
186
+ return revision;
187
+ }
188
+ async queuePruning(collection, entryId, revisionId) {
189
+ try {
190
+ await this.db.insertInto("_emdash_revision_prune_queue").values({
191
+ collection,
192
+ entry_id: entryId,
193
+ revision_id: revisionId
194
+ }).onConflict((conflict) => conflict.columns(["collection", "entry_id"]).doUpdateSet({ revision_id: revisionId })).execute();
195
+ } catch (error) {
196
+ console.error(`[revisions] Failed to queue revision pruning for ${collection}/${entryId}:`, error);
197
+ }
198
+ }
199
+ /**
200
+ * Find revision by ID
201
+ */
202
+ async findById(id) {
203
+ const row = await this.db.selectFrom("revisions").selectAll().where("id", "=", id).executeTakeFirst();
204
+ return row ? this.normalizeRow(row) : null;
205
+ }
206
+ /** Shallow-merge `patch` into a stored revision's data. */
207
+ async mergeData(id, patch) {
208
+ const row = await this.db.selectFrom("revisions").select("data").where("id", "=", id).executeTakeFirst();
209
+ if (!row) return;
210
+ const data = {
211
+ ...JSON.parse(row.data),
212
+ ...patch
213
+ };
214
+ await this.db.updateTable("revisions").set({ data: JSON.stringify(data) }).where("id", "=", id).execute();
215
+ }
216
+ /**
217
+ * Get all revisions for an entry (newest first)
218
+ *
219
+ * Orders by monotonic ULID (descending). The monotonic factory
220
+ * guarantees strictly increasing IDs even within the same millisecond.
221
+ */
222
+ async findByEntry(collection, entryId, options = {}) {
223
+ let query = this.db.selectFrom("revisions").selectAll().where("collection", "=", collection).where("entry_id", "=", entryId).orderBy("id", "desc");
224
+ if (options.limit) query = query.limit(options.limit);
225
+ const rows = await query.execute();
226
+ const data = await this.datetimes.normalizeDataMany(collection, rows.map((row) => JSON.parse(row.data)));
227
+ return rows.map((row, index) => {
228
+ const normalized = data[index];
229
+ if (!normalized) throw new Error("Failed to normalize revision data");
230
+ return this.rowToRevision(row, normalized);
231
+ });
232
+ }
233
+ /** Read revisions only when the owning content row is visible in the same statement snapshot. */
234
+ async findVisibleByEntry(collection, entryId, options = {}) {
235
+ validateIdentifier(collection, "collection");
236
+ const tableName = `ec_${collection}`;
237
+ const limit = normalizeRevisionLimit(options.limit);
238
+ const result = await sql`
239
+ SELECT revisions.* FROM revisions
240
+ WHERE revisions.collection = ${collection}
241
+ AND revisions.entry_id = ${entryId}
242
+ AND EXISTS (
243
+ SELECT 1 FROM ${sql.ref(tableName)} AS content
244
+ WHERE content.id = ${entryId}
245
+ AND content.deleted_at IS NULL
246
+ )
247
+ ORDER BY revisions.id DESC
248
+ LIMIT ${limit}
249
+ `.execute(this.db);
250
+ const data = await this.datetimes.normalizeDataMany(collection, result.rows.map((row) => JSON.parse(row.data)));
251
+ return result.rows.map((row, index) => {
252
+ const normalized = data[index];
253
+ if (!normalized) throw new Error("Failed to normalize revision data");
254
+ return this.rowToRevision(row, normalized);
255
+ });
256
+ }
257
+ /** Read one revision only when its owning content row is visible in the same statement snapshot. */
258
+ async findVisibleById(collection, entryId, revisionId) {
259
+ validateIdentifier(collection, "collection");
260
+ const tableName = `ec_${collection}`;
261
+ const row = (await sql`
262
+ SELECT revisions.* FROM revisions
263
+ WHERE revisions.id = ${revisionId}
264
+ AND revisions.collection = ${collection}
265
+ AND revisions.entry_id = ${entryId}
266
+ AND EXISTS (
267
+ SELECT 1 FROM ${sql.ref(tableName)} AS content
268
+ WHERE content.id = ${entryId}
269
+ AND content.deleted_at IS NULL
270
+ )
271
+ LIMIT 1
272
+ `.execute(this.db)).rows[0];
273
+ return row ? this.normalizeRow(row) : null;
274
+ }
275
+ /**
276
+ * Get the most recent revision for an entry
277
+ */
278
+ async findLatest(collection, entryId) {
279
+ const row = await this.db.selectFrom("revisions").selectAll().where("collection", "=", collection).where("entry_id", "=", entryId).orderBy("id", "desc").limit(1).executeTakeFirst();
280
+ return row ? this.normalizeRow(row) : null;
281
+ }
282
+ /**
283
+ * Count revisions for an entry
284
+ */
285
+ async countByEntry(collection, entryId) {
286
+ const result = await this.db.selectFrom("revisions").select((eb) => eb.fn.count("id").as("count")).where("collection", "=", collection).where("entry_id", "=", entryId).executeTakeFirst();
287
+ return Number(result?.count || 0);
288
+ }
289
+ /**
290
+ * Delete all revisions for an entry (use when entry is deleted)
291
+ */
292
+ async deleteByEntry(collection, entryId) {
293
+ const result = await this.db.deleteFrom("revisions").where("collection", "=", collection).where("entry_id", "=", entryId).executeTakeFirst();
294
+ try {
295
+ await this.db.deleteFrom("_emdash_revision_prune_queue").where("collection", "=", collection).where("entry_id", "=", entryId).execute();
296
+ } catch (error) {
297
+ console.error(`[revisions] Failed to clear queued revision pruning for ${collection}/${entryId}:`, error);
298
+ }
299
+ return Number(result.numDeletedRows ?? 0);
300
+ }
301
+ /**
302
+ * Delete old revisions, keeping the most recent N
303
+ */
304
+ async pruneOldRevisions(collection, entryId, keepCount, throughRevisionId) {
305
+ validateIdentifier(collection, "collection");
306
+ const tableName = `ec_${collection}`;
307
+ let keepQuery = this.db.selectFrom("revisions").select("id").where("collection", "=", collection).where("entry_id", "=", entryId).orderBy("created_at", "desc").orderBy("id", "desc").limit(keepCount);
308
+ if (throughRevisionId) keepQuery = keepQuery.where("id", "<=", throughRevisionId);
309
+ const keepIds = (await keepQuery.execute()).map((r) => r.id);
310
+ if (keepIds.length === 0) return 0;
311
+ const result = await sql`
312
+ DELETE FROM revisions
313
+ WHERE collection = ${collection}
314
+ AND entry_id = ${entryId}
315
+ ${throughRevisionId ? sql`AND id <= ${throughRevisionId}` : sql``}
316
+ AND id NOT IN (${sql.join(keepIds.map((id) => sql`${id}`))})
317
+ AND NOT EXISTS (
318
+ SELECT 1 FROM ${sql.ref(tableName)} AS content
319
+ WHERE content.live_revision_id = revisions.id
320
+ OR content.draft_revision_id = revisions.id
321
+ )
322
+ `.execute(this.db);
323
+ return Number(result.numAffectedRows ?? 0);
324
+ }
325
+ async pruneQueuedEntry(collection, entryId, queuedRevisionId, keepCount) {
326
+ const pruned = await this.pruneOldRevisions(collection, entryId, keepCount, queuedRevisionId);
327
+ await this.db.deleteFrom("_emdash_revision_prune_queue").where("collection", "=", collection).where("entry_id", "=", entryId).where("revision_id", "=", queuedRevisionId).execute();
328
+ return pruned;
329
+ }
330
+ async deleteIfUnreferenced(collection, entryId, revisionId) {
331
+ validateIdentifier(collection, "collection");
332
+ const tableName = `ec_${collection}`;
333
+ return ((await sql`
334
+ DELETE FROM revisions
335
+ WHERE id = ${revisionId}
336
+ AND collection = ${collection}
337
+ AND entry_id = ${entryId}
338
+ AND NOT EXISTS (
339
+ SELECT 1 FROM ${sql.ref(tableName)} AS content
340
+ WHERE content.live_revision_id = revisions.id
341
+ OR content.draft_revision_id = revisions.id
342
+ )
343
+ `.execute(this.db)).numAffectedRows ?? 0n) > 0n;
344
+ }
345
+ /**
346
+ * Convert database row to Revision object
347
+ */
348
+ async normalizeRow(row) {
349
+ const data = await this.datetimes.normalizeData(row.collection, JSON.parse(row.data));
350
+ return this.rowToRevision(row, data);
351
+ }
352
+ rowToRevision(row, data) {
353
+ return {
354
+ id: row.id,
355
+ collection: row.collection,
356
+ entryId: row.entry_id,
357
+ data,
358
+ authorId: row.author_id,
359
+ createdAt: row.created_at
360
+ };
361
+ }
362
+ };
363
+
364
+ //#endregion
365
+ export { ContentDatetimeNormalizer as i, createRevisionId as n, normalizeRevisionLimit as r, RevisionRepository as t };
366
+ //# sourceMappingURL=revision-CGkQA0e5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision-CGkQA0e5.mjs","names":[],"sources":["../src/database/content-datetime.ts","../src/database/repositories/revision.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\n\nimport {\n\tDatetimeNormalizationError,\n\tnormalizeContentDatetimes,\n\tnormalizeDatetime,\n\ttype DatetimeFieldDescriptor,\n} from \"../datetime-normalization.js\";\nimport { requestCached } from \"../request-cache.js\";\nimport type { FieldType, RepeaterSubField } from \"../schema/types.js\";\nimport { isSafeUrlFieldWriteValue } from \"../utils/url.js\";\nimport { EmDashValidationError } from \"./repositories/types.js\";\nimport type { Database } from \"./types.js\";\n\ninterface UrlFieldDescriptor {\n\tslug: string;\n\turlSubFields?: readonly string[];\n}\n\ninterface DatetimeContext {\n\ttimezone: string;\n\tfields: DatetimeFieldDescriptor[];\n\turlFields: UrlFieldDescriptor[];\n}\n\nfunction repeaterSubFieldsOfType(validation: string | null, type: FieldType): string[] {\n\tif (!validation) return [];\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(validation);\n\t} catch {\n\t\treturn [];\n\t}\n\tif (typeof parsed !== \"object\" || parsed === null || !(\"subFields\" in parsed)) return [];\n\tconst subFields = (parsed as { subFields?: unknown }).subFields;\n\tif (!Array.isArray(subFields)) return [];\n\treturn subFields\n\t\t.filter(\n\t\t\t(field): field is RepeaterSubField =>\n\t\t\t\ttypeof field === \"object\" &&\n\t\t\t\tfield !== null &&\n\t\t\t\t\"type\" in field &&\n\t\t\t\tfield.type === type &&\n\t\t\t\t\"slug\" in field &&\n\t\t\t\ttypeof field.slug === \"string\",\n\t\t)\n\t\t.map((field) => field.slug);\n}\n\n/**\n * Datetime contexts by collection slug, shared so that a bulk write reads each\n * collection's context once. A cached context doesn't see later writes to the\n * `site:timezone` setting or to field definitions, so share one only across\n * work that makes neither.\n */\nexport type DatetimeContextCache = Map<string, Promise<DatetimeContext>>;\n\nexport class ContentDatetimeNormalizer {\n\tconstructor(\n\t\tprivate readonly db: Kysely<Database>,\n\t\tprivate readonly contexts?: DatetimeContextCache,\n\t) {}\n\n\tprivate context(collection: string): Promise<DatetimeContext> {\n\t\tif (this.contexts) {\n\t\t\tlet context = this.contexts.get(collection);\n\t\t\tif (!context) {\n\t\t\t\tcontext = this.loadContext(collection);\n\t\t\t\tthis.contexts.set(collection, context);\n\t\t\t}\n\t\t\treturn context;\n\t\t}\n\t\t// Fall back to the per-request cache so repeated writes in the same\n\t\t// invocation (e.g. bulk imports) do not re-query field/timezone metadata\n\t\t// for every item.\n\t\treturn requestCached(`datetimeContext:${collection}`, () => this.loadContext(collection));\n\t}\n\n\tprivate async loadContext(collection: string): Promise<DatetimeContext> {\n\t\tconst [rows, timezoneRow] = await Promise.all([\n\t\t\tthis.db\n\t\t\t\t.selectFrom(\"_emdash_fields as field\")\n\t\t\t\t.innerJoin(\"_emdash_collections as collection\", \"collection.id\", \"field.collection_id\")\n\t\t\t\t.select([\"field.slug\", \"field.type\", \"field.validation\"])\n\t\t\t\t.where(\"collection.slug\", \"=\", collection)\n\t\t\t\t.where(\"field.type\", \"in\", [\"datetime\", \"repeater\", \"url\"])\n\t\t\t\t.execute(),\n\t\t\tthis.db\n\t\t\t\t.selectFrom(\"options\")\n\t\t\t\t.select(\"value\")\n\t\t\t\t.where(\"name\", \"=\", \"site:timezone\")\n\t\t\t\t.executeTakeFirst(),\n\t\t]);\n\t\tlet timezone = \"UTC\";\n\t\tif (timezoneRow) {\n\t\t\ttry {\n\t\t\t\tconst configured: unknown = JSON.parse(timezoneRow.value);\n\t\t\t\tif (typeof configured === \"string\" && configured) timezone = configured;\n\t\t\t} catch {\n\t\t\t\t// The datetime normalizer reports an invalid timezone when it encounters a value.\n\t\t\t}\n\t\t}\n\t\tconst fields: DatetimeFieldDescriptor[] = [];\n\t\tconst urlFields: UrlFieldDescriptor[] = [];\n\t\tfor (const row of rows) {\n\t\t\tif (row.type === \"datetime\") {\n\t\t\t\tfields.push({ slug: row.slug, type: \"datetime\" });\n\t\t\t} else if (row.type === \"url\") {\n\t\t\t\turlFields.push({ slug: row.slug });\n\t\t\t} else {\n\t\t\t\tfields.push({\n\t\t\t\t\tslug: row.slug,\n\t\t\t\t\ttype: \"repeater\",\n\t\t\t\t\tdatetimeSubFields: repeaterSubFieldsOfType(row.validation, \"datetime\"),\n\t\t\t\t});\n\t\t\t\tconst urlSubFields = repeaterSubFieldsOfType(row.validation, \"url\");\n\t\t\t\tif (urlSubFields.length > 0) urlFields.push({ slug: row.slug, urlSubFields });\n\t\t\t}\n\t\t}\n\t\treturn { timezone, fields, urlFields };\n\t}\n\n\t/**\n\t * Normalizes datetimes in incoming field values and rejects `url` values\n\t * with unsafe schemes, control characters, or off-site path forms. Values\n\t * already stored are not checked, so restoring or syncing existing data\n\t * goes through {@link normalizeData} instead.\n\t */\n\tasync normalizeInput(\n\t\tcollection: string,\n\t\tdata: Record<string, unknown>,\n\t): Promise<Record<string, unknown>> {\n\t\tconst context = await this.context(collection);\n\t\tassertSafeUrlFields(data, context.urlFields);\n\t\treturn this.normalizeWithContext(context, [data])[0] ?? data;\n\t}\n\n\tasync normalizeData(\n\t\tcollection: string,\n\t\tdata: Record<string, unknown>,\n\t): Promise<Record<string, unknown>> {\n\t\tconst [normalized] = await this.normalizeDataMany(collection, [data]);\n\t\treturn normalized ?? data;\n\t}\n\n\tasync normalizeDataMany(\n\t\tcollection: string,\n\t\titems: readonly Record<string, unknown>[],\n\t): Promise<Record<string, unknown>[]> {\n\t\treturn this.normalizeWithContext(await this.context(collection), items);\n\t}\n\n\tprivate normalizeWithContext(\n\t\tcontext: DatetimeContext,\n\t\titems: readonly Record<string, unknown>[],\n\t): Record<string, unknown>[] {\n\t\ttry {\n\t\t\treturn items.map(\n\t\t\t\t(data) => normalizeContentDatetimes(data, context.fields, context.timezone).value,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (error instanceof DatetimeNormalizationError) {\n\t\t\t\tthrow new EmDashValidationError(error.message);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync normalizeValue(collection: string, value: string | Date): Promise<string> {\n\t\tconst context = await this.context(collection);\n\t\ttry {\n\t\t\treturn normalizeDatetime(value, context.timezone).value;\n\t\t} catch (error) {\n\t\t\tif (error instanceof DatetimeNormalizationError) {\n\t\t\t\tthrow new EmDashValidationError(error.message);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n// Reads parse a stored string that looks like JSON, so a repeater written as a JSON string\n// comes back as rows and must be checked as rows.\nfunction repeaterRows(value: unknown): unknown[] | undefined {\n\tlet rows = value;\n\tif (typeof rows === \"string\" && rows.startsWith(\"[\")) {\n\t\ttry {\n\t\t\trows = JSON.parse(rows);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\treturn Array.isArray(rows) ? rows : undefined;\n}\n\nfunction assertSafeUrl(path: string, value: unknown): void {\n\tif (typeof value === \"string\" && !isSafeUrlFieldWriteValue(value)) {\n\t\tthrow new EmDashValidationError(\n\t\t\t`Field \"${path}\" must use http, https, mailto, or tel, or be a safe relative path or fragment`,\n\t\t\t{ path },\n\t\t);\n\t}\n}\n\nfunction assertSafeUrlFields(\n\tdata: Record<string, unknown>,\n\turlFields: readonly UrlFieldDescriptor[],\n): void {\n\tfor (const field of urlFields) {\n\t\tconst value = data[field.slug];\n\t\tif (!field.urlSubFields) {\n\t\t\tassertSafeUrl(field.slug, value);\n\t\t\tcontinue;\n\t\t}\n\t\tconst rows = repeaterRows(value);\n\t\tif (!rows) continue;\n\t\tfor (const [index, row] of rows.entries()) {\n\t\t\tif (!isRecord(row)) continue;\n\t\t\tfor (const subField of field.urlSubFields) {\n\t\t\t\tassertSafeUrl(`${field.slug}.${index}.${subField}`, row[subField]);\n\t\t\t}\n\t\t}\n\t}\n}\n","import { sql, type Kysely, type Selectable } from \"kysely\";\nimport { monotonicFactory } from \"ulidx\";\n\nimport { ContentDatetimeNormalizer, type DatetimeContextCache } from \"../content-datetime.js\";\nimport type { Database, RevisionTable } from \"../types.js\";\nimport { validateIdentifier } from \"../validate.js\";\n\nconst monotonic = monotonicFactory();\n\nexport function createRevisionId(): string {\n\treturn monotonic();\n}\n\nexport interface Revision {\n\tid: string;\n\tcollection: string;\n\tentryId: string;\n\tdata: Record<string, unknown>;\n\tauthorId: string | null;\n\tcreatedAt: string;\n}\n\nexport interface CreateRevisionInput {\n\tcollection: string;\n\tentryId: string;\n\tdata: Record<string, unknown>;\n\tauthorId?: string;\n}\n\nexport function normalizeRevisionLimit(value: unknown): number {\n\tconst numeric = Number(value);\n\tif (!Number.isFinite(numeric)) return 50;\n\treturn Math.max(1, Math.min(Math.trunc(numeric), 100));\n}\n\n/**\n * Revision repository for version history\n *\n * Each revision stores a JSON snapshot of the content at a point in time.\n * Used when collection has `supports: [\"revisions\"]` enabled.\n */\nexport class RevisionRepository {\n\tprivate readonly datetimes: ContentDatetimeNormalizer;\n\n\tconstructor(\n\t\tprivate db: Kysely<Database>,\n\t\tdatetimeContexts?: DatetimeContextCache,\n\t) {\n\t\tthis.datetimes = new ContentDatetimeNormalizer(db, datetimeContexts);\n\t}\n\n\t/**\n\t * Create a new revision\n\t */\n\tasync create(input: CreateRevisionInput): Promise<Revision> {\n\t\tconst id = createRevisionId();\n\t\tconst data = await this.datetimes.normalizeData(input.collection, input.data);\n\n\t\tconst row: Omit<RevisionTable, \"created_at\"> = {\n\t\t\tid,\n\t\t\tcollection: input.collection,\n\t\t\tentry_id: input.entryId,\n\t\t\tdata: JSON.stringify(data),\n\t\t\tauthor_id: input.authorId ?? null,\n\t\t};\n\n\t\tawait this.db.insertInto(\"revisions\").values(row).execute();\n\n\t\tconst revision = await this.findById(id);\n\t\tif (!revision) {\n\t\t\tthrow new Error(\"Failed to create revision\");\n\t\t}\n\n\t\tawait this.queuePruning(input.collection, input.entryId, id);\n\n\t\treturn revision;\n\t}\n\n\tasync queuePruning(collection: string, entryId: string, revisionId: string): Promise<void> {\n\t\ttry {\n\t\t\tawait this.db\n\t\t\t\t.insertInto(\"_emdash_revision_prune_queue\")\n\t\t\t\t.values({\n\t\t\t\t\tcollection,\n\t\t\t\t\tentry_id: entryId,\n\t\t\t\t\trevision_id: revisionId,\n\t\t\t\t})\n\t\t\t\t.onConflict((conflict) =>\n\t\t\t\t\tconflict.columns([\"collection\", \"entry_id\"]).doUpdateSet({ revision_id: revisionId }),\n\t\t\t\t)\n\t\t\t\t.execute();\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t`[revisions] Failed to queue revision pruning for ${collection}/${entryId}:`,\n\t\t\t\terror,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Find revision by ID\n\t */\n\tasync findById(id: string): Promise<Revision | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"revisions\")\n\t\t\t.selectAll()\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.executeTakeFirst();\n\n\t\treturn row ? this.normalizeRow(row) : null;\n\t}\n\n\t/** Shallow-merge `patch` into a stored revision's data. */\n\tasync mergeData(id: string, patch: Record<string, unknown>): Promise<void> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"revisions\")\n\t\t\t.select(\"data\")\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.executeTakeFirst();\n\t\tif (!row) return;\n\t\tconst data: Record<string, unknown> = { ...JSON.parse(row.data), ...patch };\n\t\tawait this.db\n\t\t\t.updateTable(\"revisions\")\n\t\t\t.set({ data: JSON.stringify(data) })\n\t\t\t.where(\"id\", \"=\", id)\n\t\t\t.execute();\n\t}\n\n\t/**\n\t * Get all revisions for an entry (newest first)\n\t *\n\t * Orders by monotonic ULID (descending). The monotonic factory\n\t * guarantees strictly increasing IDs even within the same millisecond.\n\t */\n\tasync findByEntry(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\toptions: { limit?: number } = {},\n\t): Promise<Revision[]> {\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"revisions\")\n\t\t\t.selectAll()\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"entry_id\", \"=\", entryId)\n\t\t\t.orderBy(\"id\", \"desc\");\n\n\t\tif (options.limit) {\n\t\t\tquery = query.limit(options.limit);\n\t\t}\n\n\t\tconst rows = await query.execute();\n\t\tconst data = await this.datetimes.normalizeDataMany(\n\t\t\tcollection,\n\t\t\trows.map((row) => JSON.parse(row.data)),\n\t\t);\n\t\treturn rows.map((row, index) => {\n\t\t\tconst normalized = data[index];\n\t\t\tif (!normalized) throw new Error(\"Failed to normalize revision data\");\n\t\t\treturn this.rowToRevision(row, normalized);\n\t\t});\n\t}\n\n\t/** Read revisions only when the owning content row is visible in the same statement snapshot. */\n\tasync findVisibleByEntry(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\toptions: { limit?: number } = {},\n\t): Promise<Revision[]> {\n\t\tvalidateIdentifier(collection, \"collection\");\n\t\tconst tableName = `ec_${collection}`;\n\t\tconst limit = normalizeRevisionLimit(options.limit);\n\t\tconst result = await sql<Selectable<RevisionTable>>`\n\t\t\tSELECT revisions.* FROM revisions\n\t\t\tWHERE revisions.collection = ${collection}\n\t\t\tAND revisions.entry_id = ${entryId}\n\t\t\tAND EXISTS (\n\t\t\t\tSELECT 1 FROM ${sql.ref(tableName)} AS content\n\t\t\t\tWHERE content.id = ${entryId}\n\t\t\t\tAND content.deleted_at IS NULL\n\t\t\t)\n\t\t\tORDER BY revisions.id DESC\n\t\t\tLIMIT ${limit}\n\t\t`.execute(this.db);\n\t\tconst data = await this.datetimes.normalizeDataMany(\n\t\t\tcollection,\n\t\t\tresult.rows.map((row) => JSON.parse(row.data)),\n\t\t);\n\t\treturn result.rows.map((row, index) => {\n\t\t\tconst normalized = data[index];\n\t\t\tif (!normalized) throw new Error(\"Failed to normalize revision data\");\n\t\t\treturn this.rowToRevision(row, normalized);\n\t\t});\n\t}\n\n\t/** Read one revision only when its owning content row is visible in the same statement snapshot. */\n\tasync findVisibleById(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\trevisionId: string,\n\t): Promise<Revision | null> {\n\t\tvalidateIdentifier(collection, \"collection\");\n\t\tconst tableName = `ec_${collection}`;\n\t\tconst result = await sql<Selectable<RevisionTable>>`\n\t\t\tSELECT revisions.* FROM revisions\n\t\t\tWHERE revisions.id = ${revisionId}\n\t\t\tAND revisions.collection = ${collection}\n\t\t\tAND revisions.entry_id = ${entryId}\n\t\t\tAND EXISTS (\n\t\t\t\tSELECT 1 FROM ${sql.ref(tableName)} AS content\n\t\t\t\tWHERE content.id = ${entryId}\n\t\t\t\tAND content.deleted_at IS NULL\n\t\t\t)\n\t\t\tLIMIT 1\n\t\t`.execute(this.db);\n\t\tconst row = result.rows[0];\n\t\treturn row ? this.normalizeRow(row) : null;\n\t}\n\n\t/**\n\t * Get the most recent revision for an entry\n\t */\n\tasync findLatest(collection: string, entryId: string): Promise<Revision | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"revisions\")\n\t\t\t.selectAll()\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"entry_id\", \"=\", entryId)\n\t\t\t.orderBy(\"id\", \"desc\")\n\t\t\t.limit(1)\n\t\t\t.executeTakeFirst();\n\n\t\treturn row ? this.normalizeRow(row) : null;\n\t}\n\n\t/**\n\t * Count revisions for an entry\n\t */\n\tasync countByEntry(collection: string, entryId: string): Promise<number> {\n\t\tconst result = await this.db\n\t\t\t.selectFrom(\"revisions\")\n\t\t\t.select((eb) => eb.fn.count(\"id\").as(\"count\"))\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"entry_id\", \"=\", entryId)\n\t\t\t.executeTakeFirst();\n\n\t\treturn Number(result?.count || 0);\n\t}\n\n\t/**\n\t * Delete all revisions for an entry (use when entry is deleted)\n\t */\n\tasync deleteByEntry(collection: string, entryId: string): Promise<number> {\n\t\tconst result = await this.db\n\t\t\t.deleteFrom(\"revisions\")\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"entry_id\", \"=\", entryId)\n\t\t\t.executeTakeFirst();\n\n\t\ttry {\n\t\t\tawait this.db\n\t\t\t\t.deleteFrom(\"_emdash_revision_prune_queue\")\n\t\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t\t.where(\"entry_id\", \"=\", entryId)\n\t\t\t\t.execute();\n\t\t} catch (error) {\n\t\t\tconsole.error(\n\t\t\t\t`[revisions] Failed to clear queued revision pruning for ${collection}/${entryId}:`,\n\t\t\t\terror,\n\t\t\t);\n\t\t}\n\n\t\treturn Number(result.numDeletedRows ?? 0);\n\t}\n\n\t/**\n\t * Delete old revisions, keeping the most recent N\n\t */\n\tasync pruneOldRevisions(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\tkeepCount: number,\n\t\tthroughRevisionId?: string,\n\t): Promise<number> {\n\t\tvalidateIdentifier(collection, \"collection\");\n\t\tconst tableName = `ec_${collection}`;\n\t\tlet keepQuery = this.db\n\t\t\t.selectFrom(\"revisions\")\n\t\t\t.select(\"id\")\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"entry_id\", \"=\", entryId)\n\t\t\t.orderBy(\"created_at\", \"desc\")\n\t\t\t.orderBy(\"id\", \"desc\") // ULID tiebreaker\n\t\t\t.limit(keepCount);\n\n\t\tif (throughRevisionId) {\n\t\t\tkeepQuery = keepQuery.where(\"id\", \"<=\", throughRevisionId);\n\t\t}\n\n\t\tconst keep = await keepQuery.execute();\n\n\t\tconst keepIds = keep.map((r) => r.id);\n\n\t\tif (keepIds.length === 0) return 0;\n\t\tconst revisionBoundary = throughRevisionId ? sql`AND id <= ${throughRevisionId}` : sql``;\n\n\t\tconst result = await sql`\n\t\t\tDELETE FROM revisions\n\t\t\tWHERE collection = ${collection}\n\t\t\tAND entry_id = ${entryId}\n\t\t\t${revisionBoundary}\n\t\t\tAND id NOT IN (${sql.join(keepIds.map((id) => sql`${id}`))})\n\t\t\tAND NOT EXISTS (\n\t\t\t\tSELECT 1 FROM ${sql.ref(tableName)} AS content\n\t\t\t\tWHERE content.live_revision_id = revisions.id\n\t\t\t\tOR content.draft_revision_id = revisions.id\n\t\t\t)\n\t\t`.execute(this.db);\n\n\t\treturn Number(result.numAffectedRows ?? 0);\n\t}\n\n\tasync pruneQueuedEntry(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\tqueuedRevisionId: string,\n\t\tkeepCount: number,\n\t): Promise<number> {\n\t\tconst pruned = await this.pruneOldRevisions(collection, entryId, keepCount, queuedRevisionId);\n\t\tawait this.db\n\t\t\t.deleteFrom(\"_emdash_revision_prune_queue\")\n\t\t\t.where(\"collection\", \"=\", collection)\n\t\t\t.where(\"entry_id\", \"=\", entryId)\n\t\t\t.where(\"revision_id\", \"=\", queuedRevisionId)\n\t\t\t.execute();\n\t\treturn pruned;\n\t}\n\n\tasync deleteIfUnreferenced(\n\t\tcollection: string,\n\t\tentryId: string,\n\t\trevisionId: string,\n\t): Promise<boolean> {\n\t\tvalidateIdentifier(collection, \"collection\");\n\t\tconst tableName = `ec_${collection}`;\n\t\tconst result = await sql`\n\t\t\tDELETE FROM revisions\n\t\t\tWHERE id = ${revisionId}\n\t\t\tAND collection = ${collection}\n\t\t\tAND entry_id = ${entryId}\n\t\t\tAND NOT EXISTS (\n\t\t\t\tSELECT 1 FROM ${sql.ref(tableName)} AS content\n\t\t\t\tWHERE content.live_revision_id = revisions.id\n\t\t\t\tOR content.draft_revision_id = revisions.id\n\t\t\t)\n\t\t`.execute(this.db);\n\t\treturn (result.numAffectedRows ?? 0n) > 0n;\n\t}\n\n\t/**\n\t * Convert database row to Revision object\n\t */\n\tprivate async normalizeRow(row: {\n\t\tid: string;\n\t\tcollection: string;\n\t\tentry_id: string;\n\t\tdata: string;\n\t\tauthor_id: string | null;\n\t\tcreated_at: string;\n\t}): Promise<Revision> {\n\t\tconst data = await this.datetimes.normalizeData(row.collection, JSON.parse(row.data));\n\t\treturn this.rowToRevision(row, data);\n\t}\n\n\tprivate rowToRevision(\n\t\trow: {\n\t\t\tid: string;\n\t\t\tcollection: string;\n\t\t\tentry_id: string;\n\t\t\tdata: string;\n\t\t\tauthor_id: string | null;\n\t\t\tcreated_at: string;\n\t\t},\n\t\tdata: Record<string, unknown>,\n\t): Revision {\n\t\treturn {\n\t\t\tid: row.id,\n\t\t\tcollection: row.collection,\n\t\t\tentryId: row.entry_id,\n\t\t\tdata,\n\t\t\tauthorId: row.author_id,\n\t\t\tcreatedAt: row.created_at,\n\t\t};\n\t}\n}\n"],"mappings":"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"}