emdash 0.39.0 → 0.40.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 (1650) hide show
  1. package/dist/action-token-DYwe4Pk0.mjs +26 -0
  2. package/dist/action-token-DYwe4Pk0.mjs.map +1 -0
  3. package/dist/activation-LOkDM5WT.mjs +382 -0
  4. package/dist/activation-LOkDM5WT.mjs.map +1 -0
  5. package/dist/adapters-B64LbYcB.d.mts +171 -0
  6. package/dist/adapters-B64LbYcB.d.mts.map +1 -0
  7. package/dist/allowed-origins-CHB8oZNM.mjs +116 -0
  8. package/dist/allowed-origins-CHB8oZNM.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +49 -40
  11. package/dist/api/route-utils.mjs.map +1 -1
  12. package/dist/api/schemas/index.d.mts +2 -2
  13. package/dist/api/schemas/index.mjs +11 -7
  14. package/dist/api-cFFZpyS0.mjs +4718 -0
  15. package/dist/api-cFFZpyS0.mjs.map +1 -0
  16. package/dist/api-tokens-CE1ECIg0.mjs +3 -0
  17. package/dist/api-tokens-s4i4aUp_.mjs +166 -0
  18. package/dist/api-tokens-s4i4aUp_.mjs.map +1 -0
  19. package/dist/apply-CoT603H3.mjs +1163 -0
  20. package/dist/apply-CoT603H3.mjs.map +1 -0
  21. package/dist/approvals-CqMfNxak.mjs +460 -0
  22. package/dist/approvals-CqMfNxak.mjs.map +1 -0
  23. package/dist/artifact-fetch-DZMOGZ3-.mjs +818 -0
  24. package/dist/artifact-fetch-DZMOGZ3-.mjs.map +1 -0
  25. package/dist/astro/index.d.mts +14 -14
  26. package/dist/astro/index.mjs +62 -12
  27. package/dist/astro/index.mjs.map +1 -1
  28. package/dist/astro/middleware/auth.d.mts +14 -12
  29. package/dist/astro/middleware/auth.d.mts.map +1 -1
  30. package/dist/astro/middleware/auth.mjs +26 -11
  31. package/dist/astro/middleware/auth.mjs.map +1 -1
  32. package/dist/astro/middleware/media-usage-write-fence.d.mts +9 -1
  33. package/dist/astro/middleware/media-usage-write-fence.d.mts.map +1 -1
  34. package/dist/astro/middleware/media-usage-write-fence.mjs +95 -13
  35. package/dist/astro/middleware/media-usage-write-fence.mjs.map +1 -1
  36. package/dist/astro/middleware/redirect.mjs +8 -8
  37. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  38. package/dist/astro/middleware/request-context.mjs +145 -47
  39. package/dist/astro/middleware/request-context.mjs.map +1 -1
  40. package/dist/astro/middleware/setup.mjs +1 -1
  41. package/dist/astro/middleware.d.mts +12 -12
  42. package/dist/astro/middleware.d.mts.map +1 -1
  43. package/dist/astro/middleware.mjs +129 -122
  44. package/dist/astro/middleware.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -8
  46. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
  47. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -8
  48. package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
  49. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +5 -3
  50. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs.map +1 -1
  51. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -4
  52. package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
  53. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -4
  54. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs.map +1 -1
  55. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +17 -11
  56. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
  57. package/dist/astro/routes/api/admin/byline-fields/index.mjs +17 -11
  58. package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +17 -11
  60. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
  61. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +25 -19
  62. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  63. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +25 -19
  64. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  65. package/dist/astro/routes/api/admin/bylines/index.mjs +25 -19
  66. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  67. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +19 -13
  68. package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
  69. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -5
  70. package/dist/astro/routes/api/admin/comments/_id_.mjs.map +1 -1
  71. package/dist/astro/routes/api/admin/comments/bulk.mjs +18 -12
  72. package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
  73. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -5
  74. package/dist/astro/routes/api/admin/comments/counts.mjs.map +1 -1
  75. package/dist/astro/routes/api/admin/comments/index.mjs +18 -12
  76. package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
  77. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -4
  78. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs.map +1 -1
  79. package/dist/astro/routes/api/admin/hooks/exclusive/index.d.mts.map +1 -1
  80. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -6
  81. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/media-usage/activation.mjs +21 -15
  83. package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +23 -17
  85. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +23 -17
  87. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/media-usage/progress.mjs +26 -15
  89. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  90. package/dist/astro/routes/api/admin/media-usage/repair.mjs +32 -19
  91. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  92. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +23 -17
  93. package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +23 -17
  95. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +5 -3
  97. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs.map +1 -1
  98. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +5 -3
  99. package/dist/astro/routes/api/admin/oauth-clients/index.mjs.map +1 -1
  100. package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts.map +1 -1
  101. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +10 -8
  102. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  103. package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts.map +1 -1
  104. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +10 -8
  105. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  106. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -61
  107. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  108. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -4
  109. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs.map +1 -1
  110. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -60
  111. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  112. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.d.mts.map +1 -1
  113. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +74 -63
  114. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  115. package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts.map +1 -1
  116. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +84 -73
  117. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  118. package/dist/astro/routes/api/admin/plugins/index.mjs +72 -61
  119. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  120. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -2
  121. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs.map +1 -1
  122. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -60
  123. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts.map +1 -1
  125. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +83 -72
  126. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  127. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -60
  128. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.d.mts.map +1 -1
  130. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +74 -63
  131. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +85 -74
  133. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  134. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +8 -6
  135. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  136. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +76 -65
  137. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  138. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.d.mts +8 -0
  139. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.d.mts.map +1 -0
  140. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +221 -0
  141. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs.map +1 -0
  142. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -61
  143. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  144. package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -60
  145. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  146. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -4
  147. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs.map +1 -1
  148. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -60
  149. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  150. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +4 -2
  151. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs.map +1 -1
  152. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -60
  153. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  154. package/dist/astro/routes/api/admin/transfer/_...path_.d.mts +12 -0
  155. package/dist/astro/routes/api/admin/transfer/_...path_.d.mts.map +1 -0
  156. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +144 -0
  157. package/dist/astro/routes/api/admin/transfer/_...path_.mjs.map +1 -0
  158. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.d.mts +8 -0
  159. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.d.mts.map +1 -0
  160. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +68 -0
  161. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -0
  162. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.d.mts +8 -0
  163. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.d.mts.map +1 -0
  164. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +68 -0
  165. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -0
  166. package/dist/astro/routes/api/admin/transfer/approvals/index.d.mts +8 -0
  167. package/dist/astro/routes/api/admin/transfer/approvals/index.d.mts.map +1 -0
  168. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +67 -0
  169. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -0
  170. package/dist/astro/routes/api/admin/transfer/capabilities.d.mts +8 -0
  171. package/dist/astro/routes/api/admin/transfer/capabilities.d.mts.map +1 -0
  172. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +70 -0
  173. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -0
  174. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.d.mts +8 -0
  175. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.d.mts.map +1 -0
  176. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +67 -0
  177. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -0
  178. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.d.mts +8 -0
  179. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.d.mts.map +1 -0
  180. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +70 -0
  181. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -0
  182. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.d.mts +8 -0
  183. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.d.mts.map +1 -0
  184. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +69 -0
  185. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -0
  186. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.d.mts +8 -0
  187. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.d.mts.map +1 -0
  188. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +66 -0
  189. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -0
  190. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.d.mts +8 -0
  191. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.d.mts.map +1 -0
  192. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +69 -0
  193. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -0
  194. package/dist/astro/routes/api/admin/transfer/exports/index.d.mts +9 -0
  195. package/dist/astro/routes/api/admin/transfer/exports/index.d.mts.map +1 -0
  196. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +91 -0
  197. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -0
  198. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.d.mts +8 -0
  199. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.d.mts.map +1 -0
  200. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +66 -0
  201. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -0
  202. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.d.mts +8 -0
  203. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.d.mts.map +1 -0
  204. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +70 -0
  205. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -0
  206. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.d.mts +8 -0
  207. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.d.mts.map +1 -0
  208. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +78 -0
  209. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -0
  210. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.d.mts +8 -0
  211. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.d.mts.map +1 -0
  212. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +66 -0
  213. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -0
  214. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.d.mts +8 -0
  215. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.d.mts.map +1 -0
  216. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +77 -0
  217. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -0
  218. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.d.mts +8 -0
  219. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.d.mts.map +1 -0
  220. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +77 -0
  221. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -0
  222. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.d.mts +8 -0
  223. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.d.mts.map +1 -0
  224. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +66 -0
  225. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -0
  226. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.d.mts +8 -0
  227. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.d.mts.map +1 -0
  228. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +70 -0
  229. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -0
  230. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.d.mts +8 -0
  231. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.d.mts.map +1 -0
  232. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +67 -0
  233. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -0
  234. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.d.mts +8 -0
  235. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.d.mts.map +1 -0
  236. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +66 -0
  237. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -0
  238. package/dist/astro/routes/api/admin/transfer/imports/index.d.mts +9 -0
  239. package/dist/astro/routes/api/admin/transfer/imports/index.d.mts.map +1 -0
  240. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +99 -0
  241. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -0
  242. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -1
  243. package/dist/astro/routes/api/admin/users/_id_/disable.mjs.map +1 -1
  244. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -1
  245. package/dist/astro/routes/api/admin/users/_id_/enable.mjs.map +1 -1
  246. package/dist/astro/routes/api/admin/users/_id_/index.mjs +14 -8
  247. package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
  248. package/dist/astro/routes/api/admin/users/_id_/send-recovery.d.mts.map +1 -1
  249. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +16 -6
  250. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs.map +1 -1
  251. package/dist/astro/routes/api/admin/users/index.mjs +14 -8
  252. package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
  253. package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -3
  254. package/dist/astro/routes/api/auth/dev-bypass.mjs.map +1 -1
  255. package/dist/astro/routes/api/auth/invite/accept.mjs +3 -1
  256. package/dist/astro/routes/api/auth/invite/accept.mjs.map +1 -1
  257. package/dist/astro/routes/api/auth/invite/complete.mjs +19 -13
  258. package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
  259. package/dist/astro/routes/api/auth/invite/index.d.mts.map +1 -1
  260. package/dist/astro/routes/api/auth/invite/index.mjs +24 -12
  261. package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
  262. package/dist/astro/routes/api/auth/invite/register-options.mjs +18 -12
  263. package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
  264. package/dist/astro/routes/api/auth/logout.mjs +4 -2
  265. package/dist/astro/routes/api/auth/logout.mjs.map +1 -1
  266. package/dist/astro/routes/api/auth/magic-link/send.d.mts.map +1 -1
  267. package/dist/astro/routes/api/auth/magic-link/send.mjs +29 -15
  268. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  269. package/dist/astro/routes/api/auth/magic-link/verify.d.mts +2 -1
  270. package/dist/astro/routes/api/auth/magic-link/verify.d.mts.map +1 -1
  271. package/dist/astro/routes/api/auth/magic-link/verify.mjs +37 -17
  272. package/dist/astro/routes/api/auth/magic-link/verify.mjs.map +1 -1
  273. package/dist/astro/routes/api/auth/me.mjs +15 -9
  274. package/dist/astro/routes/api/auth/me.mjs.map +1 -1
  275. package/dist/astro/routes/api/auth/mode.mjs +4 -2
  276. package/dist/astro/routes/api/auth/mode.mjs.map +1 -1
  277. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
  278. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  279. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -8
  280. package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
  281. package/dist/astro/routes/api/auth/passkey/index.mjs +3 -1
  282. package/dist/astro/routes/api/auth/passkey/index.mjs.map +1 -1
  283. package/dist/astro/routes/api/auth/passkey/options.d.mts.map +1 -1
  284. package/dist/astro/routes/api/auth/passkey/options.mjs +21 -24
  285. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
  286. package/dist/astro/routes/api/auth/passkey/register/options.mjs +18 -12
  287. package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
  288. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +19 -13
  289. package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
  290. package/dist/astro/routes/api/auth/passkey/verify.mjs +19 -13
  291. package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
  292. package/dist/astro/routes/api/auth/signup/complete.mjs +19 -13
  293. package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
  294. package/dist/astro/routes/api/auth/signup/request.mjs +18 -12
  295. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  296. package/dist/astro/routes/api/auth/signup/verify.mjs +3 -1
  297. package/dist/astro/routes/api/auth/signup/verify.mjs.map +1 -1
  298. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -11
  299. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
  300. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +21 -15
  301. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
  302. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -2
  303. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs.map +1 -1
  304. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -13
  305. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  306. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +4 -3
  307. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
  308. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +18 -13
  309. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  310. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -2
  311. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -1
  312. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +10 -8
  313. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs.map +1 -1
  314. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.d.mts.map +1 -1
  315. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +68 -16
  316. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  317. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -13
  318. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  319. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +31 -22
  320. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  321. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +31 -22
  322. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  323. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +4 -3
  324. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
  325. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -2
  326. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs.map +1 -1
  327. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +18 -13
  328. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  329. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
  330. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +38 -19
  331. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  332. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -2
  333. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -1
  334. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -13
  335. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  336. package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -13
  337. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  338. package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -2
  339. package/dist/astro/routes/api/content/_collection_/authors.mjs.map +1 -1
  340. package/dist/astro/routes/api/content/_collection_/index.mjs +15 -10
  341. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  342. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -9
  343. package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
  344. package/dist/astro/routes/api/dashboard.mjs +11 -9
  345. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  346. package/dist/astro/routes/api/dev/emails.mjs +4 -2
  347. package/dist/astro/routes/api/dev/emails.mjs.map +1 -1
  348. package/dist/astro/routes/api/health.mjs +5 -3
  349. package/dist/astro/routes/api/health.mjs.map +1 -1
  350. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  351. package/dist/astro/routes/api/import/probe.mjs +27 -21
  352. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  353. package/dist/astro/routes/api/import/wordpress/analyze.mjs +5 -3
  354. package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
  355. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
  356. package/dist/astro/routes/api/import/wordpress/execute.mjs +18 -16
  357. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  358. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  359. package/dist/astro/routes/api/import/wordpress/media.mjs +19 -13
  360. package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
  361. package/dist/astro/routes/api/import/wordpress/prepare.mjs +18 -12
  362. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  363. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts +5 -1
  364. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts.map +1 -1
  365. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs +4 -2
  366. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs.map +1 -1
  367. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  368. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +29 -15
  369. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  370. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  371. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +27 -21
  372. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  373. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  374. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +38 -32
  375. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  376. package/dist/astro/routes/api/manifest.mjs +6 -4
  377. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  378. package/dist/astro/routes/api/mcp.d.mts.map +1 -1
  379. package/dist/astro/routes/api/mcp.mjs +717 -67
  380. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  381. package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -13
  382. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  383. package/dist/astro/routes/api/media/_id_/replace.mjs +16 -10
  384. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -1
  385. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -6
  386. package/dist/astro/routes/api/media/_id_/upload.mjs.map +1 -1
  387. package/dist/astro/routes/api/media/_id_/usage.mjs +34 -21
  388. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  389. package/dist/astro/routes/api/media/_id_.d.mts.map +1 -1
  390. package/dist/astro/routes/api/media/_id_.mjs +37 -26
  391. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  392. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +5 -3
  393. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs.map +1 -1
  394. package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
  395. package/dist/astro/routes/api/media/file/_...key_.mjs +31 -2
  396. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
  397. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -10
  398. package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -1
  399. package/dist/astro/routes/api/media/folders/index.mjs +16 -10
  400. package/dist/astro/routes/api/media/folders/index.mjs.map +1 -1
  401. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -2
  402. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs.map +1 -1
  403. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -2
  404. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs.map +1 -1
  405. package/dist/astro/routes/api/media/providers/index.mjs +4 -2
  406. package/dist/astro/routes/api/media/providers/index.mjs.map +1 -1
  407. package/dist/astro/routes/api/media/upload-url.mjs +18 -12
  408. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  409. package/dist/astro/routes/api/media.mjs +36 -24
  410. package/dist/astro/routes/api/media.mjs.map +1 -1
  411. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +18 -12
  412. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  413. package/dist/astro/routes/api/menus/_name_/items.mjs +18 -12
  414. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  415. package/dist/astro/routes/api/menus/_name_/reorder.mjs +18 -12
  416. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  417. package/dist/astro/routes/api/menus/_name_/translations.mjs +18 -12
  418. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  419. package/dist/astro/routes/api/menus/_name_.mjs +18 -12
  420. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  421. package/dist/astro/routes/api/menus/index.mjs +18 -12
  422. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  423. package/dist/astro/routes/api/oauth/authorize.d.mts.map +1 -1
  424. package/dist/astro/routes/api/oauth/authorize.mjs +9 -6
  425. package/dist/astro/routes/api/oauth/authorize.mjs.map +1 -1
  426. package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -5
  427. package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
  428. package/dist/astro/routes/api/oauth/device/code.mjs +10 -8
  429. package/dist/astro/routes/api/oauth/device/code.mjs.map +1 -1
  430. package/dist/astro/routes/api/oauth/device/token.mjs +9 -7
  431. package/dist/astro/routes/api/oauth/device/token.mjs.map +1 -1
  432. package/dist/astro/routes/api/oauth/register.mjs +4 -2
  433. package/dist/astro/routes/api/oauth/register.mjs.map +1 -1
  434. package/dist/astro/routes/api/oauth/token/refresh.mjs +7 -5
  435. package/dist/astro/routes/api/oauth/token/refresh.mjs.map +1 -1
  436. package/dist/astro/routes/api/oauth/token/revoke.mjs +7 -5
  437. package/dist/astro/routes/api/oauth/token/revoke.mjs.map +1 -1
  438. package/dist/astro/routes/api/oauth/token.mjs +7 -5
  439. package/dist/astro/routes/api/oauth/token.mjs.map +1 -1
  440. package/dist/astro/routes/api/openapi.json.mjs +497 -12
  441. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  442. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +10 -8
  443. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
  444. package/dist/astro/routes/api/redirects/404s/index.mjs +21 -15
  445. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  446. package/dist/astro/routes/api/redirects/404s/summary.mjs +21 -15
  447. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  448. package/dist/astro/routes/api/redirects/_id_.mjs +21 -15
  449. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  450. package/dist/astro/routes/api/redirects/index.mjs +21 -15
  451. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  452. package/dist/astro/routes/api/relations/_id_/index.mjs +31 -22
  453. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  454. package/dist/astro/routes/api/relations/_id_/translations.mjs +21 -16
  455. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
  456. package/dist/astro/routes/api/relations/index.mjs +31 -22
  457. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  458. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -2
  459. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs.map +1 -1
  460. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +4 -3
  461. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs.map +1 -1
  462. package/dist/astro/routes/api/schema/block-types/_slug_/index.d.mts +9 -0
  463. package/dist/astro/routes/api/schema/block-types/_slug_/index.d.mts.map +1 -0
  464. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +102 -0
  465. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -0
  466. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.d.mts +8 -0
  467. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.d.mts.map +1 -0
  468. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +96 -0
  469. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -0
  470. package/dist/astro/routes/api/schema/block-types/index.d.mts +9 -0
  471. package/dist/astro/routes/api/schema/block-types/index.d.mts.map +1 -0
  472. package/dist/astro/routes/api/schema/block-types/index.mjs +102 -0
  473. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -0
  474. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +71 -60
  475. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  476. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +71 -60
  477. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  478. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +71 -60
  479. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  480. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -60
  481. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  482. package/dist/astro/routes/api/schema/collections/index.mjs +71 -60
  483. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  484. package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -60
  485. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  486. package/dist/astro/routes/api/schema/index.mjs +17 -14
  487. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  488. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -60
  489. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  490. package/dist/astro/routes/api/schema/orphans/index.mjs +71 -60
  491. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  492. package/dist/astro/routes/api/search/enable.mjs +20 -14
  493. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  494. package/dist/astro/routes/api/search/index.mjs +19 -13
  495. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  496. package/dist/astro/routes/api/search/rebuild.mjs +20 -14
  497. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  498. package/dist/astro/routes/api/search/stats.mjs +10 -8
  499. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  500. package/dist/astro/routes/api/search/suggest.mjs +19 -13
  501. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  502. package/dist/astro/routes/api/sections/_slug_.mjs +19 -13
  503. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  504. package/dist/astro/routes/api/sections/index.mjs +19 -13
  505. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  506. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +8 -7
  507. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs.map +1 -1
  508. package/dist/astro/routes/api/settings/backups/archives/index.mjs +8 -6
  509. package/dist/astro/routes/api/settings/backups/archives/index.mjs.map +1 -1
  510. package/dist/astro/routes/api/settings/backups/export.mjs +8 -7
  511. package/dist/astro/routes/api/settings/backups/export.mjs.map +1 -1
  512. package/dist/astro/routes/api/settings/backups/index.mjs +9 -8
  513. package/dist/astro/routes/api/settings/backups/index.mjs.map +1 -1
  514. package/dist/astro/routes/api/settings/email.mjs +6 -4
  515. package/dist/astro/routes/api/settings/email.mjs.map +1 -1
  516. package/dist/astro/routes/api/settings.mjs +25 -19
  517. package/dist/astro/routes/api/settings.mjs.map +1 -1
  518. package/dist/astro/routes/api/setup/admin-verify.mjs +20 -14
  519. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  520. package/dist/astro/routes/api/setup/admin.mjs +19 -13
  521. package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
  522. package/dist/astro/routes/api/setup/dev-bypass.mjs +43 -37
  523. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  524. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -2
  525. package/dist/astro/routes/api/setup/dev-reset.mjs.map +1 -1
  526. package/dist/astro/routes/api/setup/index.mjs +48 -38
  527. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  528. package/dist/astro/routes/api/setup/status.mjs +5 -3
  529. package/dist/astro/routes/api/setup/status.mjs.map +1 -1
  530. package/dist/astro/routes/api/snapshot.mjs +10 -8
  531. package/dist/astro/routes/api/snapshot.mjs.map +1 -1
  532. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +25 -19
  533. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  534. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +25 -19
  535. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  536. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -19
  537. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  538. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +25 -19
  539. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  540. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +24 -18
  541. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  542. package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -19
  543. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  544. package/dist/astro/routes/api/taxonomies/bulk-tag.d.mts +8 -0
  545. package/dist/astro/routes/api/taxonomies/bulk-tag.d.mts.map +1 -0
  546. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +295 -0
  547. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -0
  548. package/dist/astro/routes/api/taxonomies/index.mjs +25 -19
  549. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  550. package/dist/astro/routes/api/themes/preview.mjs +7 -5
  551. package/dist/astro/routes/api/themes/preview.mjs.map +1 -1
  552. package/dist/astro/routes/api/typegen.d.mts.map +1 -1
  553. package/dist/astro/routes/api/typegen.mjs +12 -9
  554. package/dist/astro/routes/api/typegen.mjs.map +1 -1
  555. package/dist/astro/routes/api/visual-editing/action-token.mjs +7 -5
  556. package/dist/astro/routes/api/visual-editing/action-token.mjs.map +1 -1
  557. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +22 -16
  558. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs.map +1 -1
  559. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +3 -1
  560. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs.map +1 -1
  561. package/dist/astro/routes/api/well-known/auth.mjs +2 -2
  562. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  563. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  564. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +16 -10
  565. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  566. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +20 -14
  567. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  568. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -14
  569. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  570. package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -8
  571. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  572. package/dist/astro/routes/api/widget-areas/index.mjs +20 -14
  573. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  574. package/dist/astro/routes/api/widget-components.mjs +4 -2
  575. package/dist/astro/routes/api/widget-components.mjs.map +1 -1
  576. package/dist/astro/routes/robots.txt.mjs +10 -10
  577. package/dist/astro/routes/sitemap-_collection_.xml.mjs +13 -13
  578. package/dist/astro/routes/sitemap.xml.mjs +11 -11
  579. package/dist/astro/types.d.mts +21 -17
  580. package/dist/astro/types.d.mts.map +1 -1
  581. package/dist/audit-RfCugiSB.mjs +127 -0
  582. package/dist/audit-RfCugiSB.mjs.map +1 -0
  583. package/dist/auth/providers/github.d.mts +1 -1
  584. package/dist/auth/providers/google.d.mts +1 -1
  585. package/dist/authoritative-records-CoJvBXAD.mjs +5172 -0
  586. package/dist/authoritative-records-CoJvBXAD.mjs.map +1 -0
  587. package/dist/authorize-seCifOMJ.mjs +49 -0
  588. package/dist/authorize-seCifOMJ.mjs.map +1 -0
  589. package/dist/backup-CBu0LrXf.mjs +246 -0
  590. package/dist/backup-CBu0LrXf.mjs.map +1 -0
  591. package/dist/block-type-registry-DUI_3KxT.mjs +6709 -0
  592. package/dist/block-type-registry-DUI_3KxT.mjs.map +1 -0
  593. package/dist/block-types-BmZmLmAD.mjs +132 -0
  594. package/dist/block-types-BmZmLmAD.mjs.map +1 -0
  595. package/dist/block-values-C_VIPr5t.mjs +175 -0
  596. package/dist/block-values-C_VIPr5t.mjs.map +1 -0
  597. package/dist/byline-DYmkXqvo.mjs +909 -0
  598. package/dist/byline-DYmkXqvo.mjs.map +1 -0
  599. package/dist/byline-fields-D28AT-Fh.mjs +123 -0
  600. package/dist/byline-fields-D28AT-Fh.mjs.map +1 -0
  601. package/dist/byline-registry-gnKscbQX.mjs +406 -0
  602. package/dist/byline-registry-gnKscbQX.mjs.map +1 -0
  603. package/dist/bylines-BPwJqoYH.mjs +232 -0
  604. package/dist/bylines-BPwJqoYH.mjs.map +1 -0
  605. package/dist/bylines-ukLaYpVZ.mjs +214 -0
  606. package/dist/bylines-ukLaYpVZ.mjs.map +1 -0
  607. package/dist/cache-m7UEkRFV.mjs +108 -0
  608. package/dist/cache-m7UEkRFV.mjs.map +1 -0
  609. package/dist/canonical-YhEQezjg.mjs +174 -0
  610. package/dist/canonical-YhEQezjg.mjs.map +1 -0
  611. package/dist/capture-triggers-kJyl_yyM.mjs +362 -0
  612. package/dist/capture-triggers-kJyl_yyM.mjs.map +1 -0
  613. package/dist/challenge-store-ppU6Uv13.mjs +51 -0
  614. package/dist/challenge-store-ppU6Uv13.mjs.map +1 -0
  615. package/dist/checksum-B2IINIlN.mjs +162 -0
  616. package/dist/checksum-B2IINIlN.mjs.map +1 -0
  617. package/dist/chrome-tags-DApCQSIk.mjs +24 -0
  618. package/dist/chrome-tags-DApCQSIk.mjs.map +1 -0
  619. package/dist/chunks-Dms7Uxbt.mjs +25 -0
  620. package/dist/chunks-Dms7Uxbt.mjs.map +1 -0
  621. package/dist/cli/index.mjs +1471 -56
  622. package/dist/cli/index.mjs.map +1 -1
  623. package/dist/client/cf-access.d.mts +1 -1
  624. package/dist/client/index.d.mts +1050 -4
  625. package/dist/client/index.d.mts.map +1 -1
  626. package/dist/client/index.mjs +193 -11
  627. package/dist/client/index.mjs.map +1 -1
  628. package/dist/collection-deletion-BIm28mo3.mjs +436 -0
  629. package/dist/collection-deletion-BIm28mo3.mjs.map +1 -0
  630. package/dist/collection-deletion-processor-Br6rxs3u.mjs +217 -0
  631. package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +1 -0
  632. package/dist/collection-slugs-cache-CjGk__zp.mjs +85 -0
  633. package/dist/collection-slugs-cache-CjGk__zp.mjs.map +1 -0
  634. package/dist/comment-CrBl22OF.mjs +313 -0
  635. package/dist/comment-CrBl22OF.mjs.map +1 -0
  636. package/dist/comment-reaction-JEQ2Fpd8.mjs +85 -0
  637. package/dist/comment-reaction-JEQ2Fpd8.mjs.map +1 -0
  638. package/dist/comments-2ah9du9y.mjs +195 -0
  639. package/dist/comments-2ah9du9y.mjs.map +1 -0
  640. package/dist/comments-fHZ8ON9O.mjs +99 -0
  641. package/dist/comments-fHZ8ON9O.mjs.map +1 -0
  642. package/dist/components-CXbq7CSM.mjs +108 -0
  643. package/dist/components-CXbq7CSM.mjs.map +1 -0
  644. package/dist/config-5ii2haYu.d.mts +6528 -0
  645. package/dist/config-5ii2haYu.d.mts.map +1 -0
  646. package/dist/config-CvmjJcVw.mjs +73 -0
  647. package/dist/config-CvmjJcVw.mjs.map +1 -0
  648. package/dist/config-IhybvkIQ.mjs +242 -0
  649. package/dist/config-IhybvkIQ.mjs.map +1 -0
  650. package/dist/config-Py43JK9r.d.mts +39 -0
  651. package/dist/config-Py43JK9r.d.mts.map +1 -0
  652. package/dist/content-DFaIEDj9.mjs +2281 -0
  653. package/dist/content-DFaIEDj9.mjs.map +1 -0
  654. package/dist/content-list-query-Dra4Dalc.d.mts +26 -0
  655. package/dist/content-list-query-Dra4Dalc.d.mts.map +1 -0
  656. package/dist/content-policy-DFNw91-d.mjs +46 -0
  657. package/dist/content-policy-DFNw91-d.mjs.map +1 -0
  658. package/dist/content-repair-Q8IUrpLL.mjs +442 -0
  659. package/dist/content-repair-Q8IUrpLL.mjs.map +1 -0
  660. package/dist/context-BeGccdUX.mjs +1921 -0
  661. package/dist/context-BeGccdUX.mjs.map +1 -0
  662. package/dist/cron-7DCJwPXq.mjs +284 -0
  663. package/dist/cron-7DCJwPXq.mjs.map +1 -0
  664. package/dist/dashboard-DjrB-xxZ.mjs +151 -0
  665. package/dist/dashboard-DjrB-xxZ.mjs.map +1 -0
  666. package/dist/db/index.d.mts +3 -3
  667. package/dist/db/index.mjs +3 -3
  668. package/dist/db/libsql-migrations.d.mts +1 -1
  669. package/dist/db/libsql-migrations.mjs +6 -6
  670. package/dist/db/libsql.d.mts +1 -1
  671. package/dist/db/postgres-migrations.d.mts +1 -1
  672. package/dist/db/postgres-migrations.mjs +6 -6
  673. package/dist/db/postgres.d.mts +1 -1
  674. package/dist/db/sqlite-migrations.d.mts +1 -1
  675. package/dist/db/sqlite-migrations.mjs +6 -6
  676. package/dist/db/sqlite.d.mts +1 -1
  677. package/dist/db/sqlite.mjs +2 -2
  678. package/dist/db/sqlite.mjs.map +1 -1
  679. package/dist/default-DQ6vsviu.mjs +81 -0
  680. package/dist/default-DQ6vsviu.mjs.map +1 -0
  681. package/dist/deferred-tasks-BPxXUB4x.d.mts +9 -0
  682. package/dist/deferred-tasks-BPxXUB4x.d.mts.map +1 -0
  683. package/dist/device-flow-CRd6DXmW.mjs +466 -0
  684. package/dist/device-flow-CRd6DXmW.mjs.map +1 -0
  685. package/dist/dialect-helpers-7_IqPdh9.mjs +307 -0
  686. package/dist/dialect-helpers-7_IqPdh9.mjs.map +1 -0
  687. package/dist/digest-BarSh-pN.mjs +194 -0
  688. package/dist/digest-BarSh-pN.mjs.map +1 -0
  689. package/dist/direct-executor-BmuFJJZV.mjs +104 -0
  690. package/dist/direct-executor-BmuFJJZV.mjs.map +1 -0
  691. package/dist/dist-BNwANFJR.mjs +810 -0
  692. package/dist/dist-BNwANFJR.mjs.map +1 -0
  693. package/dist/email-console-bJn3ctqA.mjs +50 -0
  694. package/dist/email-console-bJn3ctqA.mjs.map +1 -0
  695. package/dist/email-locale-CN6WAMx0.mjs +25 -0
  696. package/dist/email-locale-CN6WAMx0.mjs.map +1 -0
  697. package/dist/emdash-runtime-DAjghyEG.mjs +4186 -0
  698. package/dist/emdash-runtime-DAjghyEG.mjs.map +1 -0
  699. package/dist/enrich-Dl3kZ-lP.mjs +194 -0
  700. package/dist/enrich-Dl3kZ-lP.mjs.map +1 -0
  701. package/dist/entry-lock-BJYdBfXb.mjs +1097 -0
  702. package/dist/entry-lock-BJYdBfXb.mjs.map +1 -0
  703. package/dist/entry-lock-DHQOxN7R.mjs +163 -0
  704. package/dist/entry-lock-DHQOxN7R.mjs.map +1 -0
  705. package/dist/entry-lock-DVhCt49A.d.mts +4368 -0
  706. package/dist/entry-lock-DVhCt49A.d.mts.map +1 -0
  707. package/dist/entry-locks-D0foLdjQ.mjs +167 -0
  708. package/dist/entry-locks-D0foLdjQ.mjs.map +1 -0
  709. package/dist/error-CfvOHP0M.mjs +90 -0
  710. package/dist/error-CfvOHP0M.mjs.map +1 -0
  711. package/dist/errors-BF0_LFhW.mjs +460 -0
  712. package/dist/errors-BF0_LFhW.mjs.map +1 -0
  713. package/dist/errors-DgE1zJGG.mjs +120 -0
  714. package/dist/errors-DgE1zJGG.mjs.map +1 -0
  715. package/dist/escape-CuaZhZvL.mjs +9 -0
  716. package/dist/escape-CuaZhZvL.mjs.map +1 -0
  717. package/dist/fence-CMDXJYc_.mjs +162 -0
  718. package/dist/fence-CMDXJYc_.mjs.map +1 -0
  719. package/dist/field-defs-cache-HIgBbqZZ.mjs +77 -0
  720. package/dist/field-defs-cache-HIgBbqZZ.mjs.map +1 -0
  721. package/dist/fts-manager-S-K0laoS.mjs +443 -0
  722. package/dist/fts-manager-S-K0laoS.mjs.map +1 -0
  723. package/dist/gc-DjKY0Ay1.mjs +75 -0
  724. package/dist/gc-DjKY0Ay1.mjs.map +1 -0
  725. package/dist/hash-SDAW6zC-.mjs +37 -0
  726. package/dist/hash-SDAW6zC-.mjs.map +1 -0
  727. package/dist/hook-result-B5bXDgS2.d.mts +31 -0
  728. package/dist/hook-result-B5bXDgS2.d.mts.map +1 -0
  729. package/dist/hreflang-D5uNnsGJ.d.mts +50 -0
  730. package/dist/hreflang-D5uNnsGJ.d.mts.map +1 -0
  731. package/dist/hreflang-DMFBL2eb.mjs +105 -0
  732. package/dist/hreflang-DMFBL2eb.mjs.map +1 -0
  733. package/dist/http-route-dispatch-BitqzwMy.mjs +339 -0
  734. package/dist/http-route-dispatch-BitqzwMy.mjs.map +1 -0
  735. package/dist/identity-IyNWwXr6.mjs +35 -0
  736. package/dist/identity-IyNWwXr6.mjs.map +1 -0
  737. package/dist/import-C3JZplWq.mjs +2020 -0
  738. package/dist/import-C3JZplWq.mjs.map +1 -0
  739. package/dist/index-D-hdtLe8.d.mts +623 -0
  740. package/dist/index-D-hdtLe8.d.mts.map +1 -0
  741. package/dist/index.d.mts +24 -24
  742. package/dist/index.mjs +105 -93
  743. package/dist/install-finalization-DfM1fj5x.mjs +58 -0
  744. package/dist/install-finalization-DfM1fj5x.mjs.map +1 -0
  745. package/dist/keys-yxLm5l35.mjs +61 -0
  746. package/dist/keys-yxLm5l35.mjs.map +1 -0
  747. package/dist/kinds-CRu_T5T5.mjs +961 -0
  748. package/dist/kinds-CRu_T5T5.mjs.map +1 -0
  749. package/dist/lifecycle-BzeGPeQ-.mjs +25 -0
  750. package/dist/lifecycle-BzeGPeQ-.mjs.map +1 -0
  751. package/dist/load-XgJiE6_3.mjs +28 -0
  752. package/dist/load-XgJiE6_3.mjs.map +1 -0
  753. package/dist/loader-BzqeR1ZN.mjs +1086 -0
  754. package/dist/loader-BzqeR1ZN.mjs.map +1 -0
  755. package/dist/loops-BQSzv5Zn.mjs +203 -0
  756. package/dist/loops-BQSzv5Zn.mjs.map +1 -0
  757. package/dist/manifest-builder-B8zR-73J.mjs +189 -0
  758. package/dist/manifest-builder-B8zR-73J.mjs.map +1 -0
  759. package/dist/manifest-schema-CY3zng_M.mjs +492 -0
  760. package/dist/manifest-schema-CY3zng_M.mjs.map +1 -0
  761. package/dist/media/image-endpoint.mjs +1 -1
  762. package/dist/media/index.d.mts +1 -1
  763. package/dist/media/index.mjs +3 -3
  764. package/dist/media/local-runtime.d.mts +14 -14
  765. package/dist/media/local-runtime.d.mts.map +1 -1
  766. package/dist/media/local-runtime.mjs +15 -16
  767. package/dist/media/local-runtime.mjs.map +1 -1
  768. package/dist/media-Pu1L6xir.mjs +408 -0
  769. package/dist/media-Pu1L6xir.mjs.map +1 -0
  770. package/dist/media-Qp5S3eH3.mjs +355 -0
  771. package/dist/media-Qp5S3eH3.mjs.map +1 -0
  772. package/dist/media-allowlist-BSoa9Vvm.mjs +44 -0
  773. package/dist/media-allowlist-BSoa9Vvm.mjs.map +1 -0
  774. package/dist/media-folders-BE0oo2eX.mjs +210 -0
  775. package/dist/media-folders-BE0oo2eX.mjs.map +1 -0
  776. package/dist/media-h7tOiDLj.mjs +221 -0
  777. package/dist/media-h7tOiDLj.mjs.map +1 -0
  778. package/dist/media-url-jArBpzIG.mjs +43 -0
  779. package/dist/media-url-jArBpzIG.mjs.map +1 -0
  780. package/dist/media-usage-My-Vi-ex.mjs +1629 -0
  781. package/dist/media-usage-My-Vi-ex.mjs.map +1 -0
  782. package/dist/media-usage-activation-HKp7zk7W.mjs +78 -0
  783. package/dist/media-usage-activation-HKp7zk7W.mjs.map +1 -0
  784. package/dist/media-usage-work-C2OZLCAd.mjs +586 -0
  785. package/dist/media-usage-work-C2OZLCAd.mjs.map +1 -0
  786. package/dist/media-usage-work-DwUNbgvS.mjs +152 -0
  787. package/dist/media-usage-work-DwUNbgvS.mjs.map +1 -0
  788. package/dist/menus-BM7BPLOb.mjs +139 -0
  789. package/dist/menus-BM7BPLOb.mjs.map +1 -0
  790. package/dist/menus-ITeAbcIF.mjs +753 -0
  791. package/dist/menus-ITeAbcIF.mjs.map +1 -0
  792. package/dist/menus-TsSGmSR4.mjs +3608 -0
  793. package/dist/menus-TsSGmSR4.mjs.map +1 -0
  794. package/dist/migrations/index.d.mts +1 -1
  795. package/dist/migrations/index.mjs +5 -5
  796. package/dist/mime-ChLqYwDk.mjs +36 -0
  797. package/dist/mime-ChLqYwDk.mjs.map +1 -0
  798. package/dist/mode-CCuKXUci.mjs +23 -0
  799. package/dist/mode-CCuKXUci.mjs.map +1 -0
  800. package/dist/node-sqlite-compat-CONMsl-x.mjs +46 -0
  801. package/dist/node-sqlite-compat-CONMsl-x.mjs.map +1 -0
  802. package/dist/normalize-CO2P8-iE.mjs +191 -0
  803. package/dist/normalize-CO2P8-iE.mjs.map +1 -0
  804. package/dist/oauth-authorization-DlMIL5_h.mjs +274 -0
  805. package/dist/oauth-authorization-DlMIL5_h.mjs.map +1 -0
  806. package/dist/oauth-clients-Djq9r_KP.mjs +266 -0
  807. package/dist/oauth-clients-Djq9r_KP.mjs.map +1 -0
  808. package/dist/oauth-state-store-BbjnZXNC.mjs +50 -0
  809. package/dist/oauth-state-store-BbjnZXNC.mjs.map +1 -0
  810. package/dist/oauth-user-lookup-vue9a64A.mjs +26 -0
  811. package/dist/oauth-user-lookup-vue9a64A.mjs.map +1 -0
  812. package/dist/object-cache/memory.d.mts +1 -1
  813. package/dist/object-cache-CqWNY5uP.mjs +582 -0
  814. package/dist/object-cache-CqWNY5uP.mjs.map +1 -0
  815. package/dist/options-DhrI7eMv.mjs +208 -0
  816. package/dist/options-DhrI7eMv.mjs.map +1 -0
  817. package/dist/options-SQCHQCPH.d.mts +81 -0
  818. package/dist/options-SQCHQCPH.d.mts.map +1 -0
  819. package/dist/page/index.d.mts +2 -2
  820. package/dist/page/index.mjs +9 -9
  821. package/dist/parse-CVgO-Qai.d.mts +168 -0
  822. package/dist/parse-CVgO-Qai.d.mts.map +1 -0
  823. package/dist/parse-DY6OD1j_.mjs +81 -0
  824. package/dist/parse-DY6OD1j_.mjs.map +1 -0
  825. package/dist/passkey-config-X_H8128a.mjs +46 -0
  826. package/dist/passkey-config-X_H8128a.mjs.map +1 -0
  827. package/dist/paths-JxokKIbr.mjs +77 -0
  828. package/dist/paths-JxokKIbr.mjs.map +1 -0
  829. package/dist/patterns-BhAvqO0S.mjs +145 -0
  830. package/dist/patterns-BhAvqO0S.mjs.map +1 -0
  831. package/dist/placeholder-MSEd8gty.d.mts +306 -0
  832. package/dist/placeholder-MSEd8gty.d.mts.map +1 -0
  833. package/dist/plan-xjcWrAah.mjs +135 -0
  834. package/dist/plan-xjcWrAah.mjs.map +1 -0
  835. package/dist/plugin-test-runtime.d.mts +38 -15
  836. package/dist/plugin-test-runtime.d.mts.map +1 -1
  837. package/dist/plugin-test-runtime.mjs +112 -99
  838. package/dist/plugin-types.d.mts +2 -2
  839. package/dist/plugin-utils.d.mts +12 -12
  840. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  841. package/dist/plugins/adapt-sandbox-entry.mjs +3 -3
  842. package/dist/plugins/host.d.mts +5 -5
  843. package/dist/plugins/host.mjs +45 -37
  844. package/dist/plugins-DUXUt8B9.mjs +277 -0
  845. package/dist/plugins-DUXUt8B9.mjs.map +1 -0
  846. package/dist/policy-CUvwAARc.mjs +45 -0
  847. package/dist/policy-CUvwAARc.mjs.map +1 -0
  848. package/dist/portable-text-5O_ZGUjB.mjs +307 -0
  849. package/dist/portable-text-5O_ZGUjB.mjs.map +1 -0
  850. package/dist/preview-CIUcPYr6.mjs +107 -0
  851. package/dist/preview-CIUcPYr6.mjs.map +1 -0
  852. package/dist/protocol-B97DZaFr.d.mts +61 -0
  853. package/dist/protocol-B97DZaFr.d.mts.map +1 -0
  854. package/dist/public-submission-BFBUrqst.mjs +250 -0
  855. package/dist/public-submission-BFBUrqst.mjs.map +1 -0
  856. package/dist/public-url-Bn7U0D7-.mjs +101 -0
  857. package/dist/public-url-Bn7U0D7-.mjs.map +1 -0
  858. package/dist/query-B48peoRT.mjs +890 -0
  859. package/dist/query-B48peoRT.mjs.map +1 -0
  860. package/dist/query-C4IH0uhR.mjs +41 -0
  861. package/dist/query-C4IH0uhR.mjs.map +1 -0
  862. package/dist/rate-limit-BZ6nybgc.mjs +120 -0
  863. package/dist/rate-limit-BZ6nybgc.mjs.map +1 -0
  864. package/dist/receipt-B4wJj5Jq.mjs +43 -0
  865. package/dist/receipt-B4wJj5Jq.mjs.map +1 -0
  866. package/dist/redirect-Cd1E7VUt.mjs +17 -0
  867. package/dist/redirect-Cd1E7VUt.mjs.map +1 -0
  868. package/dist/redirect-iJf5fltD.mjs +415 -0
  869. package/dist/redirect-iJf5fltD.mjs.map +1 -0
  870. package/dist/redirects-CYu1u1aK.mjs +446 -0
  871. package/dist/redirects-CYu1u1aK.mjs.map +1 -0
  872. package/dist/redirects-Cv9apQKj.mjs +148 -0
  873. package/dist/redirects-Cv9apQKj.mjs.map +1 -0
  874. package/dist/registry/testing.mjs +3 -3
  875. package/dist/relation-M4NUCb0b.mjs +334 -0
  876. package/dist/relation-M4NUCb0b.mjs.map +1 -0
  877. package/dist/relations-CCif47Oq.mjs +403 -0
  878. package/dist/relations-CCif47Oq.mjs.map +1 -0
  879. package/dist/relations-CK9CYUyr.mjs +310 -0
  880. package/dist/relations-CK9CYUyr.mjs.map +1 -0
  881. package/dist/request-cache-DzLYKm_x.mjs +104 -0
  882. package/dist/request-cache-DzLYKm_x.mjs.map +1 -0
  883. package/dist/request-context.d.mts +1 -1
  884. package/dist/request-meta-sZXt3sRo.mjs +141 -0
  885. package/dist/request-meta-sZXt3sRo.mjs.map +1 -0
  886. package/dist/resolve-2WbQsCvT.mjs +199 -0
  887. package/dist/resolve-2WbQsCvT.mjs.map +1 -0
  888. package/dist/route-wire--1hLuACz.mjs +197 -0
  889. package/dist/route-wire--1hLuACz.mjs.map +1 -0
  890. package/dist/routes-CUsM40Cc.mjs +272 -0
  891. package/dist/routes-CUsM40Cc.mjs.map +1 -0
  892. package/dist/runner-1y4J9fJB.mjs +5742 -0
  893. package/dist/runner-1y4J9fJB.mjs.map +1 -0
  894. package/dist/runner-D5_LzKXI.d.mts +68 -0
  895. package/dist/runner-D5_LzKXI.d.mts.map +1 -0
  896. package/dist/runtime.d.mts +13 -13
  897. package/dist/runtime.mjs +4 -4
  898. package/dist/schema-BABiRdsH.mjs +13 -0
  899. package/dist/schema-BABiRdsH.mjs.map +1 -0
  900. package/dist/schema-Du3MzCG0.mjs +446 -0
  901. package/dist/schema-Du3MzCG0.mjs.map +1 -0
  902. package/dist/scopes-Dbk-ElhT.mjs +34 -0
  903. package/dist/scopes-Dbk-ElhT.mjs.map +1 -0
  904. package/dist/search-Bt1PL1jf.mjs +448 -0
  905. package/dist/search-Bt1PL1jf.mjs.map +1 -0
  906. package/dist/secrets-CIi0nFiR.mjs +341 -0
  907. package/dist/secrets-CIi0nFiR.mjs.map +1 -0
  908. package/dist/sections-Ddptx_o9.mjs +346 -0
  909. package/dist/sections-Ddptx_o9.mjs.map +1 -0
  910. package/dist/seed/index.d.mts +2 -2
  911. package/dist/seed/index.mjs +35 -30
  912. package/dist/seo/index.d.mts +3 -3
  913. package/dist/seo/index.mjs +25 -21
  914. package/dist/seo/index.mjs.map +1 -1
  915. package/dist/seo-CZT2oLtT.mjs +114 -0
  916. package/dist/seo-CZT2oLtT.mjs.map +1 -0
  917. package/dist/seo-D5w3-Azy.mjs +133 -0
  918. package/dist/seo-D5w3-Azy.mjs.map +1 -0
  919. package/dist/service-DuykXPyW.mjs +150 -0
  920. package/dist/service-DuykXPyW.mjs.map +1 -0
  921. package/dist/session-user-BhaVp8w0.mjs +51 -0
  922. package/dist/session-user-BhaVp8w0.mjs.map +1 -0
  923. package/dist/settings-2xNYr90o.mjs +51 -0
  924. package/dist/settings-2xNYr90o.mjs.map +1 -0
  925. package/dist/settings-CgjRWGW9.mjs +439 -0
  926. package/dist/settings-CgjRWGW9.mjs.map +1 -0
  927. package/dist/settings-DYidIB26.mjs +61 -0
  928. package/dist/settings-DYidIB26.mjs.map +1 -0
  929. package/dist/setup-complete-bOogcHWG.mjs +26 -0
  930. package/dist/setup-complete-bOogcHWG.mjs.map +1 -0
  931. package/dist/setup-nonce-0EGuKM4s.mjs +25 -0
  932. package/dist/setup-nonce-0EGuKM4s.mjs.map +1 -0
  933. package/dist/site-settings-DOgRUoFX.mjs +50 -0
  934. package/dist/site-settings-DOgRUoFX.mjs.map +1 -0
  935. package/dist/site-url-BU_bbxwj.mjs +16 -0
  936. package/dist/site-url-BU_bbxwj.mjs.map +1 -0
  937. package/dist/snapshot-CugwUqKQ.mjs +237 -0
  938. package/dist/snapshot-CugwUqKQ.mjs.map +1 -0
  939. package/dist/ssrf-CJUnJymJ.mjs +406 -0
  940. package/dist/ssrf-CJUnJymJ.mjs.map +1 -0
  941. package/dist/stage-DgrBz_du.mjs +662 -0
  942. package/dist/stage-DgrBz_du.mjs.map +1 -0
  943. package/dist/state-DDiPySSG.mjs +153 -0
  944. package/dist/state-DDiPySSG.mjs.map +1 -0
  945. package/dist/status-DZKIG4a9.mjs +30 -0
  946. package/dist/status-DZKIG4a9.mjs.map +1 -0
  947. package/dist/storage/local.d.mts +1 -1
  948. package/dist/storage/local.mjs +1 -1
  949. package/dist/storage/s3.d.mts +1 -1
  950. package/dist/storage/s3.mjs +1 -1
  951. package/dist/storage-query-Bdv7A62k.d.mts +1576 -0
  952. package/dist/storage-query-Bdv7A62k.d.mts.map +1 -0
  953. package/dist/tar-_1AgTYFu.mjs +449 -0
  954. package/dist/tar-_1AgTYFu.mjs.map +1 -0
  955. package/dist/target-_7pn2Gbg.mjs +27 -0
  956. package/dist/target-_7pn2Gbg.mjs.map +1 -0
  957. package/dist/taxonomies-C1IwNe8Q.mjs +697 -0
  958. package/dist/taxonomies-C1IwNe8Q.mjs.map +1 -0
  959. package/dist/taxonomies-C_XMoRcX.mjs +939 -0
  960. package/dist/taxonomies-C_XMoRcX.mjs.map +1 -0
  961. package/dist/taxonomy-C3Fu1YeH.mjs +525 -0
  962. package/dist/taxonomy-C3Fu1YeH.mjs.map +1 -0
  963. package/dist/tokens-u78jETkX.mjs +171 -0
  964. package/dist/tokens-u78jETkX.mjs.map +1 -0
  965. package/dist/transfer-BhUCrgDc.mjs +8675 -0
  966. package/dist/transfer-BhUCrgDc.mjs.map +1 -0
  967. package/dist/transfer-DIGvR9Af.mjs +166 -0
  968. package/dist/transfer-DIGvR9Af.mjs.map +1 -0
  969. package/dist/transfer-download-Pml7RMio.mjs +33 -0
  970. package/dist/transfer-download-Pml7RMio.mjs.map +1 -0
  971. package/dist/transformations-9gfpwY65.mjs +196 -0
  972. package/dist/transformations-9gfpwY65.mjs.map +1 -0
  973. package/dist/transport-BIfH7_hx.d.mts +42 -0
  974. package/dist/transport-BIfH7_hx.d.mts.map +1 -0
  975. package/dist/transport-DKWIq53q.mjs +136 -0
  976. package/dist/transport-DKWIq53q.mjs.map +1 -0
  977. package/dist/trusted-proxy-tKiVtyTD.mjs +51 -0
  978. package/dist/trusted-proxy-tKiVtyTD.mjs.map +1 -0
  979. package/dist/turnstile-DpsoyOfg.mjs +53 -0
  980. package/dist/turnstile-DpsoyOfg.mjs.map +1 -0
  981. package/dist/types-B4sUC2p1.d.mts +198 -0
  982. package/dist/types-B4sUC2p1.d.mts.map +1 -0
  983. package/dist/types-B7Lmsh1E.d.mts +887 -0
  984. package/dist/types-B7Lmsh1E.d.mts.map +1 -0
  985. package/dist/types-BZakh7Ym.mjs +22 -0
  986. package/dist/types-BZakh7Ym.mjs.map +1 -0
  987. package/dist/types-B_CppEmv.d.mts +264 -0
  988. package/dist/types-B_CppEmv.d.mts.map +1 -0
  989. package/dist/types-BcrBrE6-.mjs +159 -0
  990. package/dist/types-BcrBrE6-.mjs.map +1 -0
  991. package/dist/types-CAZgq9fO.d.mts +124 -0
  992. package/dist/types-CAZgq9fO.d.mts.map +1 -0
  993. package/dist/types-Cd-O03VG.d.mts +363 -0
  994. package/dist/types-Cd-O03VG.d.mts.map +1 -0
  995. package/dist/types-Cr-Kg-3D.d.mts +1641 -0
  996. package/dist/types-Cr-Kg-3D.d.mts.map +1 -0
  997. package/dist/types-D2fvWd1i.d.mts +359 -0
  998. package/dist/types-D2fvWd1i.d.mts.map +1 -0
  999. package/dist/types-D7HUsguf.mjs +77 -0
  1000. package/dist/types-D7HUsguf.mjs.map +1 -0
  1001. package/dist/types-DA1Te3Oy.d.mts +198 -0
  1002. package/dist/types-DA1Te3Oy.d.mts.map +1 -0
  1003. package/dist/types-DhV6Q5bP.mjs +18 -0
  1004. package/dist/types-DhV6Q5bP.mjs.map +1 -0
  1005. package/dist/types-DnnVSl6Y.d.mts +85 -0
  1006. package/dist/types-DnnVSl6Y.d.mts.map +1 -0
  1007. package/dist/types-VT4-BugW.mjs +16 -0
  1008. package/dist/types-VT4-BugW.mjs.map +1 -0
  1009. package/dist/upload-attempts-B68ZGNu9.mjs +32 -0
  1010. package/dist/upload-attempts-B68ZGNu9.mjs.map +1 -0
  1011. package/dist/url-pattern-CCeZMGOh.mjs +33 -0
  1012. package/dist/url-pattern-CCeZMGOh.mjs.map +1 -0
  1013. package/dist/user-DDSL-sGw.mjs +171 -0
  1014. package/dist/user-DDSL-sGw.mjs.map +1 -0
  1015. package/dist/utils-DdhmO9w9.mjs +439 -0
  1016. package/dist/utils-DdhmO9w9.mjs.map +1 -0
  1017. package/dist/validate-CHosPEhs.mjs +453 -0
  1018. package/dist/validate-CHosPEhs.mjs.map +1 -0
  1019. package/dist/validate-CM79QXYE.d.mts +432 -0
  1020. package/dist/validate-CM79QXYE.d.mts.map +1 -0
  1021. package/dist/validation-BFecQczG.mjs +218 -0
  1022. package/dist/validation-BFecQczG.mjs.map +1 -0
  1023. package/dist/version-BRZXVifl.mjs +9 -0
  1024. package/dist/version-BRZXVifl.mjs.map +1 -0
  1025. package/dist/version-DUQDHgrf.mjs +7 -0
  1026. package/dist/version-DUQDHgrf.mjs.map +1 -0
  1027. package/dist/widgets-WdV72brA.mjs +126 -0
  1028. package/dist/widgets-WdV72brA.mjs.map +1 -0
  1029. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +34 -0
  1030. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +1 -0
  1031. package/dist/wxr-taxonomies-DP6ESgMN.mjs +372 -0
  1032. package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +1 -0
  1033. package/dist/zod-generator-D6uE4WiS.mjs +389 -0
  1034. package/dist/zod-generator-D6uE4WiS.mjs.map +1 -0
  1035. package/package.json +6 -5
  1036. package/src/api/authorize.ts +17 -0
  1037. package/src/api/email-locale.ts +24 -0
  1038. package/src/api/errors.ts +16 -0
  1039. package/src/api/handlers/api-tokens.ts +18 -3
  1040. package/src/api/handlers/block-types.ts +129 -0
  1041. package/src/api/handlers/bulk-tag.ts +309 -0
  1042. package/src/api/handlers/comments.ts +0 -28
  1043. package/src/api/handlers/index.ts +10 -0
  1044. package/src/api/handlers/manifest.ts +8 -1
  1045. package/src/api/handlers/marketplace.ts +22 -16
  1046. package/src/api/handlers/media-usage.ts +31 -12
  1047. package/src/api/handlers/media.ts +19 -14
  1048. package/src/api/handlers/schema.ts +33 -8
  1049. package/src/api/handlers/settings.ts +2 -2
  1050. package/src/api/handlers/snapshot.ts +4 -0
  1051. package/src/api/handlers/taxonomies.ts +132 -83
  1052. package/src/api/handlers/transfer.ts +1347 -0
  1053. package/src/api/handlers/validate-media-fields.ts +124 -12
  1054. package/src/api/media-usage-write-fence.ts +5 -26
  1055. package/src/api/openapi/document.ts +614 -5
  1056. package/src/api/schemas/auth.ts +7 -1
  1057. package/src/api/schemas/common.ts +5 -0
  1058. package/src/api/schemas/content.ts +20 -1
  1059. package/src/api/schemas/media-usage.ts +11 -0
  1060. package/src/api/schemas/menus.ts +1 -1
  1061. package/src/api/schemas/schema.ts +117 -0
  1062. package/src/api/schemas/settings.ts +3 -3
  1063. package/src/api/schemas/taxonomies.ts +18 -0
  1064. package/src/api/schemas/transfer.ts +249 -0
  1065. package/src/api/transfer-download.ts +36 -0
  1066. package/src/api/types.ts +3 -0
  1067. package/src/astro/integration/routes.ts +31 -0
  1068. package/src/astro/integration/vite-config.ts +26 -0
  1069. package/src/astro/middleware/auth.ts +30 -7
  1070. package/src/astro/middleware/media-usage-write-fence.ts +106 -11
  1071. package/src/astro/middleware/request-context.ts +16 -2
  1072. package/src/astro/middleware.ts +38 -18
  1073. package/src/astro/routes/admin.astro +3 -1
  1074. package/src/astro/routes/api/admin/hooks/exclusive/index.ts +1 -5
  1075. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +4 -3
  1076. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +4 -3
  1077. package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +4 -3
  1078. package/src/astro/routes/api/admin/plugins/[id]/update.ts +4 -3
  1079. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +4 -3
  1080. package/src/astro/routes/api/admin/plugins/registry/[id]/uninstall.ts +4 -3
  1081. package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +3 -3
  1082. package/src/astro/routes/api/admin/plugins/registry/install.ts +3 -3
  1083. package/src/astro/routes/api/admin/plugins/registry/publisher-handle.ts +59 -0
  1084. package/src/astro/routes/api/admin/transfer/[...path].ts +143 -0
  1085. package/src/astro/routes/api/admin/transfer/approvals/[id]/approve.ts +35 -0
  1086. package/src/astro/routes/api/admin/transfer/approvals/[id]/deny.ts +35 -0
  1087. package/src/astro/routes/api/admin/transfer/approvals/index.ts +33 -0
  1088. package/src/astro/routes/api/admin/transfer/capabilities.ts +36 -0
  1089. package/src/astro/routes/api/admin/transfer/exports/[id]/advance.ts +34 -0
  1090. package/src/astro/routes/api/admin/transfer/exports/[id]/archive.ts +35 -0
  1091. package/src/astro/routes/api/admin/transfer/exports/[id]/files/[...path].ts +40 -0
  1092. package/src/astro/routes/api/admin/transfer/exports/[id]/index.ts +25 -0
  1093. package/src/astro/routes/api/admin/transfer/exports/[id]/manifest.ts +38 -0
  1094. package/src/astro/routes/api/admin/transfer/exports/index.ts +64 -0
  1095. package/src/astro/routes/api/admin/transfer/imports/[id]/abandon.ts +28 -0
  1096. package/src/astro/routes/api/admin/transfer/imports/[id]/advance.ts +37 -0
  1097. package/src/astro/routes/api/admin/transfer/imports/[id]/analyze.ts +51 -0
  1098. package/src/astro/routes/api/admin/transfer/imports/[id]/cancel.ts +27 -0
  1099. package/src/astro/routes/api/admin/transfer/imports/[id]/execute.ts +48 -0
  1100. package/src/astro/routes/api/admin/transfer/imports/[id]/files/[...path].ts +54 -0
  1101. package/src/astro/routes/api/admin/transfer/imports/[id]/index.ts +25 -0
  1102. package/src/astro/routes/api/admin/transfer/imports/[id]/missing.ts +34 -0
  1103. package/src/astro/routes/api/admin/transfer/imports/[id]/plan.ts +29 -0
  1104. package/src/astro/routes/api/admin/transfer/imports/[id]/receipt.ts +25 -0
  1105. package/src/astro/routes/api/admin/transfer/imports/index.ts +85 -0
  1106. package/src/astro/routes/api/admin/users/[id]/send-recovery.ts +9 -1
  1107. package/src/astro/routes/api/auth/invite/index.ts +15 -1
  1108. package/src/astro/routes/api/auth/magic-link/send.ts +9 -1
  1109. package/src/astro/routes/api/auth/magic-link/verify.ts +37 -39
  1110. package/src/astro/routes/api/auth/passkey/options.ts +2 -21
  1111. package/src/astro/routes/api/content/[collection]/[id]/preview-url.ts +64 -13
  1112. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +16 -1
  1113. package/src/astro/routes/api/import/wordpress/rewrite-url-helpers.ts +11 -4
  1114. package/src/astro/routes/api/mcp.ts +1 -0
  1115. package/src/astro/routes/api/media/[id].ts +5 -15
  1116. package/src/astro/routes/api/media/file/[...key].ts +30 -5
  1117. package/src/astro/routes/api/oauth/authorize.ts +4 -0
  1118. package/src/astro/routes/api/schema/block-types/[slug]/index.ts +29 -0
  1119. package/src/astro/routes/api/schema/block-types/[slug]/versions/[version]/activate.ts +31 -0
  1120. package/src/astro/routes/api/schema/block-types/index.ts +29 -0
  1121. package/src/astro/routes/api/taxonomies/bulk-tag.ts +29 -0
  1122. package/src/astro/routes/api/typegen.ts +8 -4
  1123. package/src/astro/types.ts +4 -0
  1124. package/src/auth/api-tokens.ts +1 -0
  1125. package/src/auth/rate-limit.ts +2 -1
  1126. package/src/auth/scopes.ts +11 -0
  1127. package/src/cleanup.ts +14 -0
  1128. package/src/cli/client-factory.ts +6 -1
  1129. package/src/cli/commands/export-seed.ts +41 -15
  1130. package/src/cli/commands/seed.ts +6 -2
  1131. package/src/cli/commands/site.ts +556 -0
  1132. package/src/cli/index.ts +2 -0
  1133. package/src/cli/site/archive.ts +273 -0
  1134. package/src/cli/site/export.ts +311 -0
  1135. package/src/cli/site/import.ts +815 -0
  1136. package/src/cli/site/shared.ts +241 -0
  1137. package/src/client/index.ts +414 -11
  1138. package/src/client/portable-text.ts +41 -0
  1139. package/src/comments/public-submission.ts +19 -11
  1140. package/src/components/Blocks.astro +46 -0
  1141. package/src/components/Gallery.astro +2 -1
  1142. package/src/components/Image.astro +51 -6
  1143. package/src/components/InlinePortableTextEditor.tsx +28 -18
  1144. package/src/components/blocks.ts +44 -0
  1145. package/src/components/index.ts +14 -4
  1146. package/src/content/converters/gallery.ts +54 -16
  1147. package/src/content/converters/image-link.ts +27 -0
  1148. package/src/content/converters/index.ts +1 -0
  1149. package/src/content/converters/portable-text-to-prosemirror.ts +10 -7
  1150. package/src/content/converters/prosemirror-to-portable-text.ts +14 -0
  1151. package/src/content/converters/types.ts +17 -0
  1152. package/src/database/content-datetime.ts +19 -2
  1153. package/src/database/migrations/035_bounded_404_log.ts +28 -39
  1154. package/src/database/migrations/081_redirect_write_guards.ts +7 -4
  1155. package/src/database/migrations/083_block_types.ts +58 -0
  1156. package/src/database/migrations/084_site_transfer.ts +264 -0
  1157. package/src/database/migrations/085_taxonomy_def_groups.ts +155 -0
  1158. package/src/database/migrations/runner.ts +6 -0
  1159. package/src/database/repositories/audit.ts +10 -1
  1160. package/src/database/repositories/byline.ts +4 -1
  1161. package/src/database/repositories/content.ts +83 -11
  1162. package/src/database/repositories/media-usage.ts +43 -13
  1163. package/src/database/repositories/media.ts +32 -1
  1164. package/src/database/repositories/options.ts +12 -0
  1165. package/src/database/repositories/revision.ts +6 -3
  1166. package/src/database/repositories/taxonomy-def.ts +126 -0
  1167. package/src/database/repositories/taxonomy.ts +65 -26
  1168. package/src/database/types.ts +133 -1
  1169. package/src/db/sqlite.ts +1 -1
  1170. package/src/emdash-runtime.ts +287 -51
  1171. package/src/import/utils.ts +8 -1
  1172. package/src/import/wxr-taxonomies.ts +11 -67
  1173. package/src/index.ts +26 -1
  1174. package/src/loader.ts +9 -5
  1175. package/src/mcp/server.ts +521 -29
  1176. package/src/mcp/transfer.ts +569 -0
  1177. package/src/media/local-runtime.ts +5 -18
  1178. package/src/media/upload-attempts.ts +5 -0
  1179. package/src/media/url.ts +15 -0
  1180. package/src/media/usage/content-fields.ts +69 -5
  1181. package/src/media/usage/content-refresh.ts +13 -66
  1182. package/src/media/usage/content-repair.ts +10 -2
  1183. package/src/media/usage/extractor.ts +74 -3
  1184. package/src/media/usage/projection-fingerprint.ts +14 -0
  1185. package/src/media/usage/schema-invalidation.ts +72 -0
  1186. package/src/media/usage/site-settings.ts +52 -0
  1187. package/src/media/usage/types.ts +2 -0
  1188. package/src/object-cache/index.ts +69 -4
  1189. package/src/plugin-test-runtime.ts +1 -0
  1190. package/src/plugins/context.ts +104 -56
  1191. package/src/plugins/cron.ts +6 -4
  1192. package/src/plugins/define-plugin.ts +11 -1
  1193. package/src/plugins/email-console.ts +2 -0
  1194. package/src/plugins/email.ts +16 -0
  1195. package/src/plugins/hooks.ts +33 -9
  1196. package/src/plugins/manifest-schema.ts +1 -0
  1197. package/src/plugins/route-error.ts +57 -0
  1198. package/src/plugins/routes.ts +5 -60
  1199. package/src/plugins/sandbox/types.ts +22 -2
  1200. package/src/plugins/types.ts +4 -0
  1201. package/src/registry/artifact-fetch.ts +17 -4
  1202. package/src/registry/publisher-handle.ts +273 -0
  1203. package/src/schema/block-type-contract.ts +478 -0
  1204. package/src/schema/block-type-registry.ts +689 -0
  1205. package/src/schema/block-types.ts +110 -0
  1206. package/src/schema/block-values.ts +293 -0
  1207. package/src/schema/byline-registry.ts +1 -1
  1208. package/src/schema/index.ts +28 -0
  1209. package/src/schema/registry.ts +462 -12
  1210. package/src/schema/types.ts +12 -1
  1211. package/src/schema/zod-generator.ts +92 -9
  1212. package/src/search/fts-manager.ts +40 -0
  1213. package/src/seed/apply.ts +173 -49
  1214. package/src/seed/types.ts +23 -3
  1215. package/src/seed/validate.ts +131 -7
  1216. package/src/settings/index.ts +32 -9
  1217. package/src/settings/types.ts +15 -0
  1218. package/src/taxonomies/index.ts +72 -83
  1219. package/src/transfer/analyze/index.ts +45 -0
  1220. package/src/transfer/analyze/issues.ts +55 -0
  1221. package/src/transfer/analyze/plan.ts +327 -0
  1222. package/src/transfer/analyze/read.ts +134 -0
  1223. package/src/transfer/analyze/step.ts +551 -0
  1224. package/src/transfer/analyze/target.ts +269 -0
  1225. package/src/transfer/analyze/unique-keys.ts +228 -0
  1226. package/src/transfer/analyze/validate.ts +1412 -0
  1227. package/src/transfer/analyze/values.ts +227 -0
  1228. package/src/transfer/analyze/write-rules.ts +196 -0
  1229. package/src/transfer/audit.ts +38 -0
  1230. package/src/transfer/auth.ts +25 -0
  1231. package/src/transfer/container/tar.ts +242 -0
  1232. package/src/transfer/domain.ts +248 -0
  1233. package/src/transfer/errors.ts +134 -0
  1234. package/src/transfer/export/exporter.ts +1067 -0
  1235. package/src/transfer/export/fence.ts +84 -0
  1236. package/src/transfer/export/media.ts +165 -0
  1237. package/src/transfer/export/readers.ts +1164 -0
  1238. package/src/transfer/export/verify.ts +677 -0
  1239. package/src/transfer/fence.ts +193 -0
  1240. package/src/transfer/format/canonical.ts +151 -0
  1241. package/src/transfer/format/column-codec.ts +275 -0
  1242. package/src/transfer/format/columns.ts +707 -0
  1243. package/src/transfer/format/digest.ts +287 -0
  1244. package/src/transfer/format/features.ts +91 -0
  1245. package/src/transfer/format/issues.ts +39 -0
  1246. package/src/transfer/format/kinds.ts +936 -0
  1247. package/src/transfer/format/limits.ts +87 -0
  1248. package/src/transfer/format/manifest.ts +297 -0
  1249. package/src/transfer/format/media-refs.ts +716 -0
  1250. package/src/transfer/format/paths.ts +73 -0
  1251. package/src/transfer/format/plan.ts +162 -0
  1252. package/src/transfer/format/receipt.ts +43 -0
  1253. package/src/transfer/format/records.ts +127 -0
  1254. package/src/transfer/format/settings.ts +94 -0
  1255. package/src/transfer/format/transformations.ts +260 -0
  1256. package/src/transfer/format/version.ts +9 -0
  1257. package/src/transfer/gc.ts +103 -0
  1258. package/src/transfer/import/advance.ts +522 -0
  1259. package/src/transfer/import/context.ts +281 -0
  1260. package/src/transfer/import/entries.ts +186 -0
  1261. package/src/transfer/import/ids.ts +40 -0
  1262. package/src/transfer/import/index.ts +15 -0
  1263. package/src/transfer/import/media.ts +141 -0
  1264. package/src/transfer/import/rebuild.ts +300 -0
  1265. package/src/transfer/import/rows.ts +114 -0
  1266. package/src/transfer/import/scaffold.ts +221 -0
  1267. package/src/transfer/import/sql.ts +134 -0
  1268. package/src/transfer/import/stages.ts +329 -0
  1269. package/src/transfer/import/writers.ts +370 -0
  1270. package/src/transfer/index.ts +472 -0
  1271. package/src/transfer/ops/approvals.ts +359 -0
  1272. package/src/transfer/ops/budget.ts +82 -0
  1273. package/src/transfer/ops/collation.ts +21 -0
  1274. package/src/transfer/ops/identity-map.ts +142 -0
  1275. package/src/transfer/ops/media-blobs.ts +135 -0
  1276. package/src/transfer/ops/operations.ts +842 -0
  1277. package/src/transfer/ops/package-index.ts +159 -0
  1278. package/src/transfer/ops/staged-files.ts +231 -0
  1279. package/src/transfer/ops/states.ts +265 -0
  1280. package/src/transfer/ops/time.ts +54 -0
  1281. package/src/transfer/schema-importer.ts +34 -0
  1282. package/src/transfer/site-id.ts +30 -0
  1283. package/src/transfer/staging/assembler.ts +217 -0
  1284. package/src/transfer/staging/keys.ts +94 -0
  1285. package/src/transfer/staging/package.ts +229 -0
  1286. package/src/transfer/staging/stage.ts +231 -0
  1287. package/src/ui.ts +19 -0
  1288. package/src/visual-editing/toolbar.ts +125 -37
  1289. package/dist/action-token-On1sot_c.mjs +0 -26
  1290. package/dist/action-token-On1sot_c.mjs.map +0 -1
  1291. package/dist/activation-CaMfdBt1.mjs +0 -382
  1292. package/dist/activation-CaMfdBt1.mjs.map +0 -1
  1293. package/dist/adapters-Cq10K4_c.d.mts +0 -171
  1294. package/dist/adapters-Cq10K4_c.d.mts.map +0 -1
  1295. package/dist/allowed-origins-1Sa-2wZK.mjs +0 -116
  1296. package/dist/allowed-origins-1Sa-2wZK.mjs.map +0 -1
  1297. package/dist/api-DmjKxPCY.mjs +0 -4831
  1298. package/dist/api-DmjKxPCY.mjs.map +0 -1
  1299. package/dist/api-tokens-BIXItFKV.mjs +0 -163
  1300. package/dist/api-tokens-BIXItFKV.mjs.map +0 -1
  1301. package/dist/api-tokens-DS1VzN7_.mjs +0 -3
  1302. package/dist/apply-drpfmqrR.mjs +0 -1005
  1303. package/dist/apply-drpfmqrR.mjs.map +0 -1
  1304. package/dist/artifact-fetch-COiMhVgk.mjs +0 -813
  1305. package/dist/artifact-fetch-COiMhVgk.mjs.map +0 -1
  1306. package/dist/authoritative-records-DbqshfKD.mjs +0 -5172
  1307. package/dist/authoritative-records-DbqshfKD.mjs.map +0 -1
  1308. package/dist/authorize-BXpfMpp0.mjs +0 -40
  1309. package/dist/authorize-BXpfMpp0.mjs.map +0 -1
  1310. package/dist/backup-BsPQdwnS.mjs +0 -246
  1311. package/dist/backup-BsPQdwnS.mjs.map +0 -1
  1312. package/dist/byline-Doh-wt99.mjs +0 -906
  1313. package/dist/byline-Doh-wt99.mjs.map +0 -1
  1314. package/dist/byline-fields-CsrdvaLV.mjs +0 -123
  1315. package/dist/byline-fields-CsrdvaLV.mjs.map +0 -1
  1316. package/dist/byline-registry-D6lWzXk6.mjs +0 -406
  1317. package/dist/byline-registry-D6lWzXk6.mjs.map +0 -1
  1318. package/dist/bylines-Cop0hkoy.mjs +0 -214
  1319. package/dist/bylines-Cop0hkoy.mjs.map +0 -1
  1320. package/dist/bylines-kpBzHPr8.mjs +0 -232
  1321. package/dist/bylines-kpBzHPr8.mjs.map +0 -1
  1322. package/dist/cache-B0pOlXdM.mjs +0 -108
  1323. package/dist/cache-B0pOlXdM.mjs.map +0 -1
  1324. package/dist/capture-triggers-gxQxnxrJ.mjs +0 -362
  1325. package/dist/capture-triggers-gxQxnxrJ.mjs.map +0 -1
  1326. package/dist/challenge-store-CkRdSdd8.mjs +0 -51
  1327. package/dist/challenge-store-CkRdSdd8.mjs.map +0 -1
  1328. package/dist/checksum-Bsi2D9M1.mjs +0 -162
  1329. package/dist/checksum-Bsi2D9M1.mjs.map +0 -1
  1330. package/dist/chrome-tags-D7LGB91U.mjs +0 -24
  1331. package/dist/chrome-tags-D7LGB91U.mjs.map +0 -1
  1332. package/dist/chunks-BmWyou79.mjs +0 -25
  1333. package/dist/chunks-BmWyou79.mjs.map +0 -1
  1334. package/dist/collection-deletion-C3Xixmkx.mjs +0 -436
  1335. package/dist/collection-deletion-C3Xixmkx.mjs.map +0 -1
  1336. package/dist/collection-slugs-cache-D9auiKmI.mjs +0 -85
  1337. package/dist/collection-slugs-cache-D9auiKmI.mjs.map +0 -1
  1338. package/dist/comment-DcT8qdPK.mjs +0 -313
  1339. package/dist/comment-DcT8qdPK.mjs.map +0 -1
  1340. package/dist/comment-reaction-DY5-y8Y5.mjs +0 -85
  1341. package/dist/comment-reaction-DY5-y8Y5.mjs.map +0 -1
  1342. package/dist/comments-B67VRNGw.mjs +0 -204
  1343. package/dist/comments-B67VRNGw.mjs.map +0 -1
  1344. package/dist/comments-BVzzt6x5.mjs +0 -99
  1345. package/dist/comments-BVzzt6x5.mjs.map +0 -1
  1346. package/dist/components-DIl9Qzh6.mjs +0 -108
  1347. package/dist/components-DIl9Qzh6.mjs.map +0 -1
  1348. package/dist/config-B2acLeC5.mjs +0 -242
  1349. package/dist/config-B2acLeC5.mjs.map +0 -1
  1350. package/dist/config-CGVeT8Hc.mjs +0 -73
  1351. package/dist/config-CGVeT8Hc.mjs.map +0 -1
  1352. package/dist/config-D3HhLON3.d.mts +0 -39
  1353. package/dist/config-D3HhLON3.d.mts.map +0 -1
  1354. package/dist/config-DS7e4EZ9.d.mts +0 -6387
  1355. package/dist/config-DS7e4EZ9.d.mts.map +0 -1
  1356. package/dist/content-DZ3B5qtA.mjs +0 -2216
  1357. package/dist/content-DZ3B5qtA.mjs.map +0 -1
  1358. package/dist/content-list-query-CbPdzsna.d.mts +0 -26
  1359. package/dist/content-list-query-CbPdzsna.d.mts.map +0 -1
  1360. package/dist/content-policy-CM4skrNi.mjs +0 -46
  1361. package/dist/content-policy-CM4skrNi.mjs.map +0 -1
  1362. package/dist/content-refresh-BHLHJgyt.mjs +0 -3599
  1363. package/dist/content-refresh-BHLHJgyt.mjs.map +0 -1
  1364. package/dist/content-repair-BVll5WNl.mjs +0 -440
  1365. package/dist/content-repair-BVll5WNl.mjs.map +0 -1
  1366. package/dist/context-B195kjqZ.mjs +0 -1835
  1367. package/dist/context-B195kjqZ.mjs.map +0 -1
  1368. package/dist/cron-BcR3RN4K.mjs +0 -282
  1369. package/dist/cron-BcR3RN4K.mjs.map +0 -1
  1370. package/dist/dashboard-CZD4G7k_.mjs +0 -151
  1371. package/dist/dashboard-CZD4G7k_.mjs.map +0 -1
  1372. package/dist/default-BtlxWgh9.mjs +0 -81
  1373. package/dist/default-BtlxWgh9.mjs.map +0 -1
  1374. package/dist/deferred-tasks-Ba9fphlE.d.mts +0 -9
  1375. package/dist/deferred-tasks-Ba9fphlE.d.mts.map +0 -1
  1376. package/dist/device-flow-3E5l0fpH.mjs +0 -466
  1377. package/dist/device-flow-3E5l0fpH.mjs.map +0 -1
  1378. package/dist/dialect-helpers-CtYdsX4W.mjs +0 -307
  1379. package/dist/dialect-helpers-CtYdsX4W.mjs.map +0 -1
  1380. package/dist/direct-executor-ZI8E01Yt.mjs +0 -104
  1381. package/dist/direct-executor-ZI8E01Yt.mjs.map +0 -1
  1382. package/dist/dist-2hDLsLeq.mjs +0 -810
  1383. package/dist/dist-2hDLsLeq.mjs.map +0 -1
  1384. package/dist/email-console-gc-E3Eqj.mjs +0 -50
  1385. package/dist/email-console-gc-E3Eqj.mjs.map +0 -1
  1386. package/dist/emdash-runtime-DZGinqTL.mjs +0 -4041
  1387. package/dist/emdash-runtime-DZGinqTL.mjs.map +0 -1
  1388. package/dist/enrich-C2Mk0lwE.mjs +0 -194
  1389. package/dist/enrich-C2Mk0lwE.mjs.map +0 -1
  1390. package/dist/entry-lock-D3C99MXS.mjs +0 -1520
  1391. package/dist/entry-lock-D3C99MXS.mjs.map +0 -1
  1392. package/dist/entry-lock-D9rnj2Lu.mjs +0 -163
  1393. package/dist/entry-lock-D9rnj2Lu.mjs.map +0 -1
  1394. package/dist/entry-lock-DX7QkqEg.d.mts +0 -3503
  1395. package/dist/entry-lock-DX7QkqEg.d.mts.map +0 -1
  1396. package/dist/entry-locks-CO_KaoU5.mjs +0 -167
  1397. package/dist/entry-locks-CO_KaoU5.mjs.map +0 -1
  1398. package/dist/error-CCTCskie.mjs +0 -90
  1399. package/dist/error-CCTCskie.mjs.map +0 -1
  1400. package/dist/errors-W3PA8HqB.mjs +0 -447
  1401. package/dist/errors-W3PA8HqB.mjs.map +0 -1
  1402. package/dist/escape-DN4Qmjsl.mjs +0 -9
  1403. package/dist/escape-DN4Qmjsl.mjs.map +0 -1
  1404. package/dist/field-defs-cache-B337z8UJ.mjs +0 -77
  1405. package/dist/field-defs-cache-B337z8UJ.mjs.map +0 -1
  1406. package/dist/fts-manager-DMb0sbIQ.mjs +0 -413
  1407. package/dist/fts-manager-DMb0sbIQ.mjs.map +0 -1
  1408. package/dist/hash-CLVFzWvx.mjs +0 -37
  1409. package/dist/hash-CLVFzWvx.mjs.map +0 -1
  1410. package/dist/hook-result-KY1jq21o.d.mts +0 -31
  1411. package/dist/hook-result-KY1jq21o.d.mts.map +0 -1
  1412. package/dist/hreflang-BgS2FqhH.d.mts +0 -50
  1413. package/dist/hreflang-BgS2FqhH.d.mts.map +0 -1
  1414. package/dist/hreflang-CrJwqoeb.mjs +0 -105
  1415. package/dist/hreflang-CrJwqoeb.mjs.map +0 -1
  1416. package/dist/http-route-dispatch-DAKlanXb.mjs +0 -339
  1417. package/dist/http-route-dispatch-DAKlanXb.mjs.map +0 -1
  1418. package/dist/identity-DRGSHEEr.mjs +0 -35
  1419. package/dist/identity-DRGSHEEr.mjs.map +0 -1
  1420. package/dist/import-DFr5B_hC.mjs +0 -2020
  1421. package/dist/import-DFr5B_hC.mjs.map +0 -1
  1422. package/dist/index-CDwKDkTq.d.mts +0 -623
  1423. package/dist/index-CDwKDkTq.d.mts.map +0 -1
  1424. package/dist/install-finalization-5Os-QZ-2.mjs +0 -58
  1425. package/dist/install-finalization-5Os-QZ-2.mjs.map +0 -1
  1426. package/dist/lifecycle-7e-Lt_kX.mjs +0 -25
  1427. package/dist/lifecycle-7e-Lt_kX.mjs.map +0 -1
  1428. package/dist/load-Cu5bvCZh.mjs +0 -28
  1429. package/dist/load-Cu5bvCZh.mjs.map +0 -1
  1430. package/dist/loader-t4TxaFiQ.mjs +0 -1004
  1431. package/dist/loader-t4TxaFiQ.mjs.map +0 -1
  1432. package/dist/manifest-builder-D31UoJCu.mjs +0 -189
  1433. package/dist/manifest-builder-D31UoJCu.mjs.map +0 -1
  1434. package/dist/manifest-schema-Bkh8SeHd.mjs +0 -491
  1435. package/dist/manifest-schema-Bkh8SeHd.mjs.map +0 -1
  1436. package/dist/media-TBlKCwo7.mjs +0 -334
  1437. package/dist/media-TBlKCwo7.mjs.map +0 -1
  1438. package/dist/media-allowlist-s60eAIf6.mjs +0 -44
  1439. package/dist/media-allowlist-s60eAIf6.mjs.map +0 -1
  1440. package/dist/media-folders-ClIRLUQv.mjs +0 -210
  1441. package/dist/media-folders-ClIRLUQv.mjs.map +0 -1
  1442. package/dist/media-url-DY_ijO3B.mjs +0 -43
  1443. package/dist/media-url-DY_ijO3B.mjs.map +0 -1
  1444. package/dist/media-usage-C4NolTpQ.mjs +0 -1833
  1445. package/dist/media-usage-C4NolTpQ.mjs.map +0 -1
  1446. package/dist/media-usage-activation-CAhmb14O.mjs +0 -78
  1447. package/dist/media-usage-activation-CAhmb14O.mjs.map +0 -1
  1448. package/dist/media-usage-work-Cu5DqewW.mjs +0 -586
  1449. package/dist/media-usage-work-Cu5DqewW.mjs.map +0 -1
  1450. package/dist/media-usage-work-DJr3rOEN.mjs +0 -152
  1451. package/dist/media-usage-work-DJr3rOEN.mjs.map +0 -1
  1452. package/dist/media-usage-write-fence-DW5oHT7q.mjs +0 -42
  1453. package/dist/media-usage-write-fence-DW5oHT7q.mjs.map +0 -1
  1454. package/dist/menus-DbgU9z5Q.mjs +0 -3732
  1455. package/dist/menus-DbgU9z5Q.mjs.map +0 -1
  1456. package/dist/menus-Wy8m5NcH.mjs +0 -753
  1457. package/dist/menus-Wy8m5NcH.mjs.map +0 -1
  1458. package/dist/mime-CCYRC4r1.mjs +0 -36
  1459. package/dist/mime-CCYRC4r1.mjs.map +0 -1
  1460. package/dist/mode-CkmOhFqj.mjs +0 -23
  1461. package/dist/mode-CkmOhFqj.mjs.map +0 -1
  1462. package/dist/node-sqlite-compat-vpVaILnb.mjs +0 -46
  1463. package/dist/node-sqlite-compat-vpVaILnb.mjs.map +0 -1
  1464. package/dist/normalize-dChXQjwS.mjs +0 -191
  1465. package/dist/normalize-dChXQjwS.mjs.map +0 -1
  1466. package/dist/oauth-authorization-DZ-R-hmx.mjs +0 -274
  1467. package/dist/oauth-authorization-DZ-R-hmx.mjs.map +0 -1
  1468. package/dist/oauth-clients-BMPA8vjl.mjs +0 -266
  1469. package/dist/oauth-clients-BMPA8vjl.mjs.map +0 -1
  1470. package/dist/oauth-state-store-0gIdb48-.mjs +0 -50
  1471. package/dist/oauth-state-store-0gIdb48-.mjs.map +0 -1
  1472. package/dist/oauth-user-lookup-ChVW4UWu.mjs +0 -26
  1473. package/dist/oauth-user-lookup-ChVW4UWu.mjs.map +0 -1
  1474. package/dist/object-cache-DlSVbn5Y.mjs +0 -534
  1475. package/dist/object-cache-DlSVbn5Y.mjs.map +0 -1
  1476. package/dist/options-D5WcorD5.mjs +0 -200
  1477. package/dist/options-D5WcorD5.mjs.map +0 -1
  1478. package/dist/options-DAknChnw.d.mts +0 -77
  1479. package/dist/options-DAknChnw.d.mts.map +0 -1
  1480. package/dist/parse-Cr379Av9.mjs +0 -81
  1481. package/dist/parse-Cr379Av9.mjs.map +0 -1
  1482. package/dist/parse-tj9XLNO_.d.mts +0 -165
  1483. package/dist/parse-tj9XLNO_.d.mts.map +0 -1
  1484. package/dist/passkey-config-BD-wMaCf.mjs +0 -46
  1485. package/dist/passkey-config-BD-wMaCf.mjs.map +0 -1
  1486. package/dist/patterns-Do3iqi7N.mjs +0 -145
  1487. package/dist/patterns-Do3iqi7N.mjs.map +0 -1
  1488. package/dist/placeholder-CubPFn_L.d.mts +0 -306
  1489. package/dist/placeholder-CubPFn_L.d.mts.map +0 -1
  1490. package/dist/plugins-DHurtdXQ.mjs +0 -277
  1491. package/dist/plugins-DHurtdXQ.mjs.map +0 -1
  1492. package/dist/policy-lyZnjpwz.mjs +0 -45
  1493. package/dist/policy-lyZnjpwz.mjs.map +0 -1
  1494. package/dist/portable-text-oAwodbPS.mjs +0 -286
  1495. package/dist/portable-text-oAwodbPS.mjs.map +0 -1
  1496. package/dist/preview-Cup2bj8c.mjs +0 -107
  1497. package/dist/preview-Cup2bj8c.mjs.map +0 -1
  1498. package/dist/protocol-C1CNiKX4.d.mts +0 -61
  1499. package/dist/protocol-C1CNiKX4.d.mts.map +0 -1
  1500. package/dist/public-submission-Cs-pFMQK.mjs +0 -245
  1501. package/dist/public-submission-Cs-pFMQK.mjs.map +0 -1
  1502. package/dist/public-url-BWVHsfQv.mjs +0 -101
  1503. package/dist/public-url-BWVHsfQv.mjs.map +0 -1
  1504. package/dist/query-D-lxiOgn.mjs +0 -890
  1505. package/dist/query-D-lxiOgn.mjs.map +0 -1
  1506. package/dist/query-D7kHKOws.mjs +0 -41
  1507. package/dist/query-D7kHKOws.mjs.map +0 -1
  1508. package/dist/rate-limit-CqJn-w4h.mjs +0 -120
  1509. package/dist/rate-limit-CqJn-w4h.mjs.map +0 -1
  1510. package/dist/redirect-BrChFPIu.mjs +0 -17
  1511. package/dist/redirect-BrChFPIu.mjs.map +0 -1
  1512. package/dist/redirect-D2Yo-b6S.mjs +0 -415
  1513. package/dist/redirect-D2Yo-b6S.mjs.map +0 -1
  1514. package/dist/redirects-BCiTaIQ-.mjs +0 -146
  1515. package/dist/redirects-BCiTaIQ-.mjs.map +0 -1
  1516. package/dist/redirects-ByItliuu.mjs +0 -644
  1517. package/dist/redirects-ByItliuu.mjs.map +0 -1
  1518. package/dist/registry-CkuPoZs7.mjs +0 -1222
  1519. package/dist/registry-CkuPoZs7.mjs.map +0 -1
  1520. package/dist/relation-XTAtOpJO.mjs +0 -334
  1521. package/dist/relation-XTAtOpJO.mjs.map +0 -1
  1522. package/dist/relations-B4w-G5U9.mjs +0 -309
  1523. package/dist/relations-B4w-G5U9.mjs.map +0 -1
  1524. package/dist/relations-O63JWBRj.mjs +0 -403
  1525. package/dist/relations-O63JWBRj.mjs.map +0 -1
  1526. package/dist/request-cache-DaMhSQdx.mjs +0 -104
  1527. package/dist/request-cache-DaMhSQdx.mjs.map +0 -1
  1528. package/dist/request-meta-C8yl_sIs.mjs +0 -141
  1529. package/dist/request-meta-C8yl_sIs.mjs.map +0 -1
  1530. package/dist/resolve-BJIS8wKr.mjs +0 -199
  1531. package/dist/resolve-BJIS8wKr.mjs.map +0 -1
  1532. package/dist/route-wire-D66L2oaZ.mjs +0 -197
  1533. package/dist/route-wire-D66L2oaZ.mjs.map +0 -1
  1534. package/dist/routes-DYsTe-oR.mjs +0 -321
  1535. package/dist/routes-DYsTe-oR.mjs.map +0 -1
  1536. package/dist/runner-3gfxRsJG.d.mts +0 -68
  1537. package/dist/runner-3gfxRsJG.d.mts.map +0 -1
  1538. package/dist/runner-ClrleR8A.mjs +0 -5502
  1539. package/dist/runner-ClrleR8A.mjs.map +0 -1
  1540. package/dist/schema-CPhPM9Do.mjs +0 -420
  1541. package/dist/schema-CPhPM9Do.mjs.map +0 -1
  1542. package/dist/schema-DEERRrKS.mjs +0 -9
  1543. package/dist/schema-DEERRrKS.mjs.map +0 -1
  1544. package/dist/scopes-Bn8_rCSt.mjs +0 -27
  1545. package/dist/scopes-Bn8_rCSt.mjs.map +0 -1
  1546. package/dist/search-lami_Ota.mjs +0 -448
  1547. package/dist/search-lami_Ota.mjs.map +0 -1
  1548. package/dist/secrets-DNgVgz_e.mjs +0 -341
  1549. package/dist/secrets-DNgVgz_e.mjs.map +0 -1
  1550. package/dist/sections-BIpd4Cxf.mjs +0 -346
  1551. package/dist/sections-BIpd4Cxf.mjs.map +0 -1
  1552. package/dist/seo-BtU70b7l.mjs +0 -114
  1553. package/dist/seo-BtU70b7l.mjs.map +0 -1
  1554. package/dist/seo-_4qmazxz.mjs +0 -133
  1555. package/dist/seo-_4qmazxz.mjs.map +0 -1
  1556. package/dist/service-Bpy5iTX0.mjs +0 -150
  1557. package/dist/service-Bpy5iTX0.mjs.map +0 -1
  1558. package/dist/session-user-BQeS2Mrb.mjs +0 -51
  1559. package/dist/session-user-BQeS2Mrb.mjs.map +0 -1
  1560. package/dist/settings-DmroR53o.mjs +0 -420
  1561. package/dist/settings-DmroR53o.mjs.map +0 -1
  1562. package/dist/settings-g2F2a3Ub.mjs +0 -51
  1563. package/dist/settings-g2F2a3Ub.mjs.map +0 -1
  1564. package/dist/setup-complete-BrZaXpVV.mjs +0 -26
  1565. package/dist/setup-complete-BrZaXpVV.mjs.map +0 -1
  1566. package/dist/setup-nonce-Cb9-884O.mjs +0 -25
  1567. package/dist/setup-nonce-Cb9-884O.mjs.map +0 -1
  1568. package/dist/site-url-DjhYCaep.mjs +0 -16
  1569. package/dist/site-url-DjhYCaep.mjs.map +0 -1
  1570. package/dist/snapshot-C32Xuv3o.mjs +0 -233
  1571. package/dist/snapshot-C32Xuv3o.mjs.map +0 -1
  1572. package/dist/ssrf-Co1GGFZz.mjs +0 -406
  1573. package/dist/ssrf-Co1GGFZz.mjs.map +0 -1
  1574. package/dist/state-C7gCoiHr.mjs +0 -153
  1575. package/dist/state-C7gCoiHr.mjs.map +0 -1
  1576. package/dist/status-DLoBmcDz.mjs +0 -30
  1577. package/dist/status-DLoBmcDz.mjs.map +0 -1
  1578. package/dist/storage-query-CPctdMKX.d.mts +0 -1519
  1579. package/dist/storage-query-CPctdMKX.d.mts.map +0 -1
  1580. package/dist/target-CUKlGrXb.mjs +0 -27
  1581. package/dist/target-CUKlGrXb.mjs.map +0 -1
  1582. package/dist/taxonomies-BpqpXJUE.mjs +0 -707
  1583. package/dist/taxonomies-BpqpXJUE.mjs.map +0 -1
  1584. package/dist/taxonomies-ClCo4IGO.mjs +0 -899
  1585. package/dist/taxonomies-ClCo4IGO.mjs.map +0 -1
  1586. package/dist/taxonomy-Dj1vpw5E.mjs +0 -508
  1587. package/dist/taxonomy-Dj1vpw5E.mjs.map +0 -1
  1588. package/dist/tokens-Ns02GAma.mjs +0 -171
  1589. package/dist/tokens-Ns02GAma.mjs.map +0 -1
  1590. package/dist/transport-B8P1xsqk.mjs +0 -136
  1591. package/dist/transport-B8P1xsqk.mjs.map +0 -1
  1592. package/dist/transport-BLHZZcD_.d.mts +0 -42
  1593. package/dist/transport-BLHZZcD_.d.mts.map +0 -1
  1594. package/dist/trusted-proxy-Cg7SuD15.mjs +0 -51
  1595. package/dist/trusted-proxy-Cg7SuD15.mjs.map +0 -1
  1596. package/dist/turnstile-DWCSh_Qc.mjs +0 -53
  1597. package/dist/turnstile-DWCSh_Qc.mjs.map +0 -1
  1598. package/dist/types-B3RkqvDW.mjs +0 -156
  1599. package/dist/types-B3RkqvDW.mjs.map +0 -1
  1600. package/dist/types-BtuppOTV.mjs +0 -16
  1601. package/dist/types-BtuppOTV.mjs.map +0 -1
  1602. package/dist/types-CCR3ivXE.d.mts +0 -363
  1603. package/dist/types-CCR3ivXE.d.mts.map +0 -1
  1604. package/dist/types-CSHgU_-_.mjs +0 -18
  1605. package/dist/types-CSHgU_-_.mjs.map +0 -1
  1606. package/dist/types-CbwqGOXm.d.mts +0 -766
  1607. package/dist/types-CbwqGOXm.d.mts.map +0 -1
  1608. package/dist/types-D4RGIc2I.d.mts +0 -198
  1609. package/dist/types-D4RGIc2I.d.mts.map +0 -1
  1610. package/dist/types-DEHidMEk.d.mts +0 -1637
  1611. package/dist/types-DEHidMEk.d.mts.map +0 -1
  1612. package/dist/types-DQeU2SR7.d.mts +0 -279
  1613. package/dist/types-DQeU2SR7.d.mts.map +0 -1
  1614. package/dist/types-DxQWoQLA.d.mts +0 -264
  1615. package/dist/types-DxQWoQLA.d.mts.map +0 -1
  1616. package/dist/types-FBBnGZ2Y.d.mts +0 -198
  1617. package/dist/types-FBBnGZ2Y.d.mts.map +0 -1
  1618. package/dist/types-ZCnlropY.mjs +0 -69
  1619. package/dist/types-ZCnlropY.mjs.map +0 -1
  1620. package/dist/types-_Qtyawiy.d.mts +0 -124
  1621. package/dist/types-_Qtyawiy.d.mts.map +0 -1
  1622. package/dist/types-gC6FAoa_.d.mts +0 -75
  1623. package/dist/types-gC6FAoa_.d.mts.map +0 -1
  1624. package/dist/types-k--LneIF.mjs +0 -22
  1625. package/dist/types-k--LneIF.mjs.map +0 -1
  1626. package/dist/upload-attempts-2xdnoKGe.mjs +0 -27
  1627. package/dist/upload-attempts-2xdnoKGe.mjs.map +0 -1
  1628. package/dist/url-pattern-3m3reMzr.mjs +0 -33
  1629. package/dist/url-pattern-3m3reMzr.mjs.map +0 -1
  1630. package/dist/user-DroRntkx.mjs +0 -171
  1631. package/dist/user-DroRntkx.mjs.map +0 -1
  1632. package/dist/utils-CC2oNGV8.mjs +0 -435
  1633. package/dist/utils-CC2oNGV8.mjs.map +0 -1
  1634. package/dist/validate-BCP9HNDn.mjs +0 -384
  1635. package/dist/validate-BCP9HNDn.mjs.map +0 -1
  1636. package/dist/validate-CyQ7I3xF.d.mts +0 -410
  1637. package/dist/validate-CyQ7I3xF.d.mts.map +0 -1
  1638. package/dist/validation-DBy6WF94.mjs +0 -216
  1639. package/dist/validation-DBy6WF94.mjs.map +0 -1
  1640. package/dist/version-B57E4Uo7.mjs +0 -7
  1641. package/dist/version-B57E4Uo7.mjs.map +0 -1
  1642. package/dist/widgets-wQ7Xcgq8.mjs +0 -126
  1643. package/dist/widgets-wQ7Xcgq8.mjs.map +0 -1
  1644. package/dist/wxr-taxonomies-DIHfvEDt.mjs +0 -406
  1645. package/dist/wxr-taxonomies-DIHfvEDt.mjs.map +0 -1
  1646. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts +0 -34
  1647. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts.map +0 -1
  1648. package/dist/zod-generator-D_yHIWfs.mjs +0 -329
  1649. package/dist/zod-generator-D_yHIWfs.mjs.map +0 -1
  1650. /package/dist/{ssrf-BRpTDMV6.mjs → ssrf-DpBH7aOt.mjs} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"object-cache-DlSVbn5Y.mjs","names":[],"sources":["../src/object-cache/codec.ts","../src/object-cache/index.ts"],"sourcesContent":["/**\n * Object-cache serialization codec.\n *\n * Cached values are JSON, with one extension: `Date` instances are preserved\n * across the round-trip. EmDash content entries carry `Date` objects for the\n * system timestamp columns (`createdAt`, `updatedAt`, `publishedAt`,\n * `scheduledAt`) and on `cacheHint.lastModified`; plain `JSON.stringify` would\n * silently flatten those to ISO strings, so a value read from cache would no\n * longer be `=== instanceof Date` and downstream `value instanceof Date`\n * branches (cursor encoding, scheduled-visibility checks) would diverge from a\n * fresh database read.\n *\n * Functions and symbol-keyed properties are NOT preserved — callers that cache\n * values carrying either (e.g. content entries with their `.edit` proxy and\n * the non-enumerable `CURSOR_RAW_VALUES` symbol) must reduce to a serializable\n * snapshot before caching and rebuild the non-serializable parts on read. See\n * `query.ts` content snapshot helpers.\n */\n\n/** Tag used to mark a serialized `Date`. Deliberately unlikely to collide. */\nconst DATE_TAG = \"$$emdashDate\";\n\ninterface TaggedDate {\n\t[DATE_TAG]: string;\n}\n\nfunction isTaggedDate(value: unknown): value is TaggedDate {\n\tif (typeof value !== \"object\" || value === null) return false;\n\t// encode() always emits the tag as the object's *only* key, so requiring\n\t// exactly one key keeps a user object that merely happens to carry a\n\t// `$$emdashDate` string alongside other fields from being collapsed to a\n\t// Date (which would silently drop those other fields).\n\tconst keys = Object.keys(value);\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowing a JSON-parsed value to read the date tag\n\treturn keys.length === 1 && typeof (value as Record<string, unknown>)[DATE_TAG] === \"string\";\n}\n\n/**\n * Serialize a value to a cache string, preserving `Date` instances.\n *\n * Uses the JSON replacer's `this` binding to inspect the *original* property\n * value: `JSON.stringify` invokes `Date.prototype.toJSON` before the replacer\n * sees it, so by the time `value` arrives it is already an ISO string. Reading\n * `this[key]` recovers the live `Date` so we can tag it.\n */\nexport function encode(value: unknown): string {\n\treturn JSON.stringify(value, function (this: Record<string, unknown>, key, val) {\n\t\tconst original = this[key];\n\t\tif (original instanceof Date) {\n\t\t\treturn { [DATE_TAG]: original.toISOString() } satisfies TaggedDate;\n\t\t}\n\t\treturn val;\n\t});\n}\n\n/**\n * Parse a cache string produced by {@link encode}, rehydrating tagged `Date`s.\n *\n * Returns `undefined` if the input is not valid JSON (treated as a cache miss\n * by the read-through layer rather than throwing).\n */\nexport function decode(raw: string): unknown {\n\ttry {\n\t\treturn JSON.parse(raw, (_key, value) => {\n\t\t\tif (isTaggedDate(value)) {\n\t\t\t\treturn new Date(value[DATE_TAG]);\n\t\t\t}\n\t\t\treturn value;\n\t\t});\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n","/**\n * Object cache — distributed read-through query cache.\n *\n * Layering (per query):\n *\n * requestCached → in-request dedupe (per render, WeakMap on ALS context)\n * cachedQuery → THIS layer: distributed L2 (KV / memory), epoch-keyed\n * database → source of truth\n *\n * Optional and off by default: when no `objectCache` descriptor is configured,\n * `virtual:emdash/object-cache` exports `createObjectCache = undefined`,\n * {@link getBackend} resolves to `null`, and {@link cachedQuery} is a\n * transparent passthrough to its `load` function. Configure with\n * `memoryCache()` (Node) or `kvCache()` from `@emdash-cms/cloudflare`.\n *\n * Invalidation is epoch-based: each cache key embeds a per-namespace epoch\n * (\"last changed\" marker) read from the backend. A write calls\n * {@link invalidateObjectCache}, which stamps the namespace epoch to\n * `Date.now()`; every previously-stored key for that namespace is instantly\n * orphaned and reclaimed by its TTL. This is O(1) and needs no key\n * enumeration (KV has no prefix delete).\n *\n * The singleton backend/config and the per-isolate epoch cache live on\n * `globalThis` behind `Symbol.for` keys so Vite SSR chunk duplication can't\n * fork them (same pattern as `request-context.ts`).\n */\n\nimport { after } from \"../after.js\";\nimport { getRequestContext } from \"../request-context.js\";\nimport { decode, encode } from \"./codec.js\";\nimport type {\n\tCreateObjectCacheBackendFn,\n\tObjectCacheBackend,\n\tObjectCacheRuntimeConfig,\n} from \"./types.js\";\n\nconst DEFAULT_KEY_PREFIX = \"em\";\nconst DEFAULT_TTL_SECONDS = 3600;\nconst DEFAULT_REVALIDATE_MS = 1000;\nconst DEFAULT_TIMEOUT_MS = 2000;\n\ninterface BackendHolder {\n\t/** Whether the virtual module has been loaded and the backend resolved. */\n\tinitialized: boolean;\n\t/** Resolved backend, or `null` when no object cache is configured. */\n\tbackend: ObjectCacheBackend | null;\n\t/** In-flight initialization promise (dedupes concurrent first calls). */\n\tinitPromise: Promise<ObjectCacheBackend | null> | null;\n\t/** `Date.now()` when the in-flight initialization started. */\n\tinitPromiseAt?: number;\n\tconfig: Required<Pick<ObjectCacheRuntimeConfig, \"keyPrefix\">> & {\n\t\tdefaultTtl: number;\n\t\trevalidate: number;\n\t\ttimeout: number;\n\t};\n}\n\n/**\n * Race a backend operation against a timeout so a stalled call (e.g. a KV read\n * that never resolves *and* never rejects — a cold cross-region read, or one\n * queued behind the Workers simultaneous-connection limit) degrades to a\n * rejection instead of hanging the isolate. A rejection is benign: callers\n * already treat a failed read as a cache miss / last-known epoch.\n */\nfunction withTimeout<T>(promise: Promise<T>, ms: number, label: string): Promise<T> {\n\tif (!(ms > 0)) return promise;\n\tlet timer: ReturnType<typeof setTimeout>;\n\tconst timeout = new Promise<never>((_resolve, reject) => {\n\t\ttimer = setTimeout(() => {\n\t\t\treject(new Error(`object-cache ${label} timed out after ${ms}ms`));\n\t\t}, ms);\n\t});\n\treturn Promise.race([promise, timeout]).finally(() => clearTimeout(timer));\n}\n\ninterface EpochEntry {\n\tvalue: number;\n\t/** `Date.now()` at which this epoch was read from the backend. */\n\tat: number;\n\t/** In-flight read, so concurrent callers share one backend round-trip. */\n\tpromise?: Promise<number>;\n\t/**\n\t * `Date.now()` at which the in-flight read started. Callers use it to\n\t * decide whether the read's owner can still be alive (see\n\t * {@link epochReadDeadline}) — past the deadline the promise is presumed\n\t * dead and the next caller reclaims by starting a fresh read.\n\t */\n\tpromiseAt?: number;\n}\n\n/**\n * Extra time past the configured read timeout before an in-flight epoch read\n * is presumed dead. A live owner's read settles within `timeout` (enforced by\n * {@link withTimeout}), so the grace only needs to absorb scheduling jitter.\n */\nconst EPOCH_READ_GRACE_MS = 1_000;\n\n/**\n * How long an in-flight epoch read may be trusted. A read older than this can\n * only exist because its owning request was cancelled mid-await — on workerd\n * a cancelled request's continuations never run, *including the timeout's own\n * `setTimeout` callback*, so the shared promise never settles and is never\n * replaced. With the timeout disabled (`timeout: 0`) the default is used as\n * the deadline; the worst case of guessing too short is one duplicate\n * backend read.\n */\nfunction epochReadDeadline(): number {\n\tconst timeout = holder.config.timeout > 0 ? holder.config.timeout : DEFAULT_TIMEOUT_MS;\n\treturn timeout + EPOCH_READ_GRACE_MS;\n}\n\n/**\n * Await another request's in-flight epoch read, bounded by the waiter's own\n * timer. The bare promise must never be awaited across requests: if the\n * owning request is cancelled, the promise never settles (see\n * {@link epochReadDeadline}) and an unguarded waiter hangs until the isolate\n * is evicted. The race timer below belongs to the *waiter's* request context\n * and therefore always fires; on timeout the waiter degrades to `fallback`\n * (the last known epoch), the same contract as a failed backend read.\n */\nfunction raceInFlightEpochRead(\n\tpromise: Promise<number>,\n\tms: number,\n\tfallback: number,\n): Promise<number> {\n\tlet timer: ReturnType<typeof setTimeout>;\n\tconst timeout = new Promise<number>((resolve) => {\n\t\ttimer = setTimeout(resolve, Math.max(ms, 1), fallback);\n\t});\n\treturn Promise.race([promise, timeout]).finally(() => clearTimeout(timer));\n}\n\n/** Bound a waiter on another request's backend initialization. */\nfunction raceInFlightBackendInit(\n\tpromise: Promise<ObjectCacheBackend | null>,\n\tms: number,\n): Promise<ObjectCacheBackend | null> {\n\tlet timer: ReturnType<typeof setTimeout>;\n\tconst timeout = new Promise<ObjectCacheBackend | null>((resolve) => {\n\t\ttimer = setTimeout(resolve, Math.max(ms, 1), null);\n\t});\n\treturn Promise.race([promise, timeout]).finally(() => clearTimeout(timer));\n}\n\nconst BACKEND_KEY = Symbol.for(\"emdash:object-cache:backend\");\nconst EPOCH_KEY = Symbol.for(\"emdash:object-cache:epochs\");\nconst PENDING_KEY = Symbol.for(\"emdash:object-cache:pending-bumps\");\nconst LAST_CONTENT_WRITE_KEY = Symbol.for(\"emdash:object-cache:last-content-write\");\nconst PENDING_CONTENT_WRITE_KEY = Symbol.for(\"emdash:object-cache:pending-content-write\");\nconst g = globalThis as Record<symbol, unknown>;\n\nconst holder: BackendHolder =\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- globalThis singleton pattern (see request-context.ts)\n\t(g[BACKEND_KEY] as BackendHolder | undefined) ??\n\t(() => {\n\t\tconst h: BackendHolder = {\n\t\t\tinitialized: false,\n\t\t\tbackend: null,\n\t\t\tinitPromise: null,\n\t\t\tconfig: {\n\t\t\t\tkeyPrefix: DEFAULT_KEY_PREFIX,\n\t\t\t\tdefaultTtl: DEFAULT_TTL_SECONDS,\n\t\t\t\trevalidate: DEFAULT_REVALIDATE_MS,\n\t\t\t\ttimeout: DEFAULT_TIMEOUT_MS,\n\t\t\t},\n\t\t};\n\t\tg[BACKEND_KEY] = h;\n\t\treturn h;\n\t})();\n\nconst epochCache: Map<string, EpochEntry> =\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- globalThis singleton pattern (see request-context.ts)\n\t(g[EPOCH_KEY] as Map<string, EpochEntry> | undefined) ??\n\t(() => {\n\t\tconst m = new Map<string, EpochEntry>();\n\t\tg[EPOCH_KEY] = m;\n\t\treturn m;\n\t})();\n\n/** Namespaces with a backend epoch write already scheduled this tick. */\nconst pendingBumps: Set<string> =\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- globalThis singleton pattern (see request-context.ts)\n\t(g[PENDING_KEY] as Set<string> | undefined) ??\n\t(() => {\n\t\tconst s = new Set<string>();\n\t\tg[PENDING_KEY] = s;\n\t\treturn s;\n\t})();\n\n/**\n * Isolate-local ms-epoch of the last content-namespace invalidation, plus a\n * cached backend read (same revalidate window as epochs). Adapters that need\n * to prefer fresh SQL after a publish (e.g. Hyperdrive `cachedBinding`) read\n * this via {@link getLastContentWriteAt}.\n */\ninterface LastContentWriteState {\n\t/** Local / merged stamp; 0 if never set in this isolate. */\n\tvalue: number;\n\t/** `Date.now()` when `value` was last confirmed from the backend (or local stamp). */\n\tat: number;\n\tpromise?: Promise<number>;\n\tpromiseAt?: number;\n}\n\nconst lastContentWrite: LastContentWriteState =\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- globalThis singleton pattern (see request-context.ts)\n\t(g[LAST_CONTENT_WRITE_KEY] as LastContentWriteState | undefined) ??\n\t(() => {\n\t\tconst s: LastContentWriteState = { value: 0, at: 0 };\n\t\tg[LAST_CONTENT_WRITE_KEY] = s;\n\t\treturn s;\n\t})();\n\n/** Whether a backend persist of the content-write stamp is already scheduled. */\nconst contentWritePersist: { pending: boolean } =\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- globalThis singleton pattern (see request-context.ts)\n\t(g[PENDING_CONTENT_WRITE_KEY] as { pending: boolean } | undefined) ??\n\t(() => {\n\t\tconst s = { pending: false };\n\t\tg[PENDING_CONTENT_WRITE_KEY] = s;\n\t\treturn s;\n\t})();\n/**\n * Resolve (once per isolate) the configured object-cache backend.\n *\n * Loads `virtual:emdash/object-cache`, which exports `createObjectCache`\n * (`undefined` when no cache is configured) and the serialized\n * `objectCacheConfig`. Returns `null` when the cache is disabled.\n */\nasync function getBackend(): Promise<ObjectCacheBackend | null> {\n\tif (holder.initialized) return holder.backend;\n\tif (holder.initPromise) {\n\t\tconst age = Date.now() - (holder.initPromiseAt ?? 0);\n\t\tconst deadline = epochReadDeadline();\n\t\tif (age < deadline) {\n\t\t\treturn raceInFlightBackendInit(holder.initPromise, deadline - age);\n\t\t}\n\t}\n\n\tholder.initPromiseAt = Date.now();\n\tholder.initPromise = (async () => {\n\t\ttry {\n\t\t\tconst mod: {\n\t\t\t\tcreateObjectCache?: CreateObjectCacheBackendFn;\n\t\t\t\tobjectCacheConfig?: ObjectCacheRuntimeConfig;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\t\t\t\t// @ts-ignore - virtual module\n\t\t\t} = await import(\"virtual:emdash/object-cache\");\n\n\t\t\tconst config = mod.objectCacheConfig ?? {};\n\t\t\tholder.config = {\n\t\t\t\tkeyPrefix:\n\t\t\t\t\ttypeof config.keyPrefix === \"string\" && config.keyPrefix.length > 0\n\t\t\t\t\t\t? config.keyPrefix\n\t\t\t\t\t\t: DEFAULT_KEY_PREFIX,\n\t\t\t\tdefaultTtl:\n\t\t\t\t\ttypeof config.defaultTtl === \"number\" && config.defaultTtl > 0\n\t\t\t\t\t\t? config.defaultTtl\n\t\t\t\t\t\t: DEFAULT_TTL_SECONDS,\n\t\t\t\trevalidate:\n\t\t\t\t\ttypeof config.revalidate === \"number\" && config.revalidate >= 0\n\t\t\t\t\t\t? config.revalidate\n\t\t\t\t\t\t: DEFAULT_REVALIDATE_MS,\n\t\t\t\ttimeout:\n\t\t\t\t\ttypeof config.timeout === \"number\" && config.timeout >= 0\n\t\t\t\t\t\t? config.timeout\n\t\t\t\t\t\t: DEFAULT_TIMEOUT_MS,\n\t\t\t};\n\n\t\t\tholder.backend =\n\t\t\t\ttypeof mod.createObjectCache === \"function\" ? mod.createObjectCache(config) : null;\n\t\t} catch (error) {\n\t\t\t// Importing the virtual module fails outside an Astro/Vite context\n\t\t\t// (e.g. unit tests, CLI). Treat as \"no cache configured\".\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn(\"[object-cache] backend unavailable:\", error);\n\t\t\t}\n\t\t\tholder.backend = null;\n\t\t}\n\t\tholder.initialized = true;\n\t\tholder.initPromise = null;\n\t\tholder.initPromiseAt = undefined;\n\t\treturn holder.backend;\n\t})();\n\n\tconst started = holder.initPromise;\n\tafter(() =>\n\t\tstarted.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t),\n\t);\n\n\treturn started;\n}\n\n/**\n * Test-only override of the backend, bypassing the virtual module.\n *\n * Lets unit tests inject an in-memory backend (and optional config) without a\n * full Astro/Vite build. Pass `null` to simulate \"no cache configured\".\n *\n * @internal\n */\nexport function __setObjectCacheBackendForTests(\n\tbackend: ObjectCacheBackend | null,\n\tconfig?: Partial<BackendHolder[\"config\"]>,\n): void {\n\tholder.initialized = true;\n\tholder.initPromise = null;\n\tholder.initPromiseAt = undefined;\n\tholder.backend = backend;\n\tholder.config = { ...holder.config, ...config };\n\tepochCache.clear();\n\tlastContentWrite.value = 0;\n\tlastContentWrite.at = 0;\n\tlastContentWrite.promise = undefined;\n\tlastContentWrite.promiseAt = undefined;\n\tcontentWritePersist.pending = false;\n}\n\n/** @internal */\nexport function __setObjectCacheBackendInitForTests(\n\tpromise: Promise<ObjectCacheBackend | null>,\n\tstartedAt: number,\n): void {\n\tholder.initialized = false;\n\tholder.backend = null;\n\tholder.initPromise = promise;\n\tholder.initPromiseAt = startedAt;\n}\n\n/** Build the backend key for a namespace's epoch anchor. */\nfunction epochKey(namespace: string): string {\n\treturn `${holder.config.keyPrefix}:epoch:${namespace}`;\n}\n\n/** Backend key for the shared \"last content write\" stamp (no short TTL). */\nfunction lastContentWriteKey(): string {\n\treturn `${holder.config.keyPrefix}:last-content-write-at`;\n}\n\nfunction isContentNamespace(namespace: string): boolean {\n\treturn namespace.startsWith(\"content:\");\n}\n/**\n * Build the (epoch-independent) backend key for a cached value.\n *\n * The key is stable across invalidations — the namespace epochs are stored\n * *inside* the value envelope and validated on read, not baked into the key.\n * This lets the value and the epochs be fetched in one parallel round-trip\n * (instead of \"read epoch, then read value\"), and means an invalidated value\n * is overwritten in place rather than orphaned under a dead epoch-keyed name.\n */\nfunction valueKey(namespaces: readonly string[], key: string): string {\n\treturn `${holder.config.keyPrefix}:${namespaces.join(\",\")}:${key}`;\n}\n\n/**\n * Stored cache envelope: the namespace epochs captured at write time alongside\n * the cached value. A read is a HIT only when every stored epoch still matches\n * the current epoch for its namespace.\n */\ninterface CacheEnvelope<T> {\n\t/** Epoch per namespace, in the query's namespace order. */\n\te: number[];\n\t/** The cached value. */\n\tv: T;\n}\n\nfunction epochsMatch(stored: readonly number[], current: readonly number[]): boolean {\n\tif (stored.length !== current.length) return false;\n\tfor (let i = 0; i < stored.length; i++) {\n\t\tif (stored[i] !== current[i]) return false;\n\t}\n\treturn true;\n}\n\n/**\n * Requests that must always read live data and never populate the cache:\n * visual edit mode, preview tokens, and isolated databases (playground / DO\n * preview, whose schema and content diverge from the configured site).\n */\nfunction shouldBypass(): boolean {\n\tconst ctx = getRequestContext();\n\tif (!ctx) return false;\n\treturn ctx.editMode === true || ctx.preview !== undefined || ctx.dbIsIsolated === true;\n}\n\n/**\n * Read the current epoch for `namespace`, reusing an isolate-cached value for\n * up to `revalidate` ms. A missing epoch (never bumped) is treated as `0`.\n *\n * Backend errors and stalls are non-fatal: the read is bounded by a timeout,\n * and on failure we fall back to the last known epoch (or `0`), so a flaky or\n * hung cache degrades to \"serve whatever's keyed\" rather than throwing or\n * hanging.\n */\nasync function getEpoch(namespace: string, backend: ObjectCacheBackend): Promise<number> {\n\tconst now = Date.now();\n\tconst cached = epochCache.get(namespace);\n\tif (cached && now - cached.at < holder.config.revalidate) {\n\t\treturn cached.value;\n\t}\n\tif (cached?.promise) {\n\t\t// Share the in-flight read only while its owner can still be alive,\n\t\t// and never await it bare (a cancelled owner's promise never settles;\n\t\t// see epochReadDeadline). Past the deadline, fall through and reclaim\n\t\t// with a fresh read — the dead entry is overwritten below.\n\t\tconst age = now - (cached.promiseAt ?? 0);\n\t\tconst deadline = epochReadDeadline();\n\t\tif (age < deadline) {\n\t\t\treturn raceInFlightEpochRead(cached.promise, deadline - age, cached.value);\n\t\t}\n\t}\n\n\tconst promise = (async () => {\n\t\tlet value: number;\n\t\ttry {\n\t\t\tconst raw = await withTimeout(\n\t\t\t\tbackend.get(epochKey(namespace)),\n\t\t\t\tholder.config.timeout,\n\t\t\t\t\"epoch read\",\n\t\t\t);\n\t\t\tconst parsed = raw === null ? 0 : Number(raw);\n\t\t\tvalue = Number.isFinite(parsed) ? parsed : 0;\n\t\t} catch {\n\t\t\tvalue = cached?.value ?? 0;\n\t\t}\n\t\t// A concurrent invalidateObjectCache may have bumped the epoch while this\n\t\t// read was in flight. Epochs are monotonic, so never let a stale backend\n\t\t// read lower a freshly-bumped local epoch — that would resurrect the very\n\t\t// values the bump just invalidated.\n\t\tconst merged = Math.max(value, epochCache.get(namespace)?.value ?? 0);\n\t\tepochCache.set(namespace, { value: merged, at: Date.now() });\n\t\treturn merged;\n\t})();\n\n\t// Anchor the read on the host's lifetime extender: if the owning request\n\t// is cancelled mid-await, the anchored copy keeps the read alive so it\n\t// still settles and its handler replaces this entry with a fresh,\n\t// promise-free one. Where no extender exists, the deadline reclaim above\n\t// recovers instead.\n\tafter(() =>\n\t\tpromise.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t),\n\t);\n\n\t// Concurrent callers share this in-flight read (dedup) — bounded by their\n\t// own timers via raceInFlightEpochRead, never awaited bare. The timeout\n\t// above makes a live owner's read settle; `promiseAt` lets callers detect\n\t// a dead one (cancelled owner) and reclaim.\n\tepochCache.set(namespace, {\n\t\tvalue: cached?.value ?? 0,\n\t\tat: cached?.at ?? 0,\n\t\tpromise,\n\t\tpromiseAt: now,\n\t});\n\treturn promise;\n}\n\n/** Options for {@link cachedQuery}. */\nexport interface CachedQueryOptions<T> {\n\t/**\n\t * Invalidation namespace(s). A single string for self-contained data\n\t * (`settings`, `menus`), or several when the cached value depends on data\n\t * owned by other namespaces — e.g. a content entry hydrates bylines and\n\t * taxonomy terms, so it caches under\n\t * `[content:posts, \"bylines\", \"taxonomies\"]` and is invalidated when *any*\n\t * of them is bumped. Every namespace's epoch is folded into the key.\n\t */\n\tnamespace: string | readonly string[];\n\t/** Stable, fully-qualifying cache key *within* the namespace. */\n\tkey: string;\n\t/** Loader run on a miss (or when caching is disabled/bypassed). */\n\tload: () => Promise<T>;\n\t/** TTL override in seconds. Falls back to the configured `defaultTtl`. */\n\tttl?: number;\n\t/**\n\t * Predicate gating whether a freshly-loaded value is stored. Defaults to\n\t * always-cache. Use it to skip caching error/empty sentinels.\n\t */\n\tcacheable?: (value: T) => boolean;\n}\n\n/**\n * Distributed read-through cache around `load`.\n *\n * `T` must be the value as it should be *stored* — i.e. JSON-serializable with\n * the codec's `Date` support, carrying no functions or symbol-keyed props.\n * Callers caching richer objects (content entries) reduce to a serializable\n * snapshot here and rebuild on the way out; see `query.ts`.\n *\n * On a miss or when the cache is disabled/bypassed, this is equivalent to\n * `await load()`. Backend errors never propagate: a failing `get` is a miss, a\n * failing `set` is dropped.\n */\nexport async function cachedQuery<T>(options: CachedQueryOptions<T>): Promise<T> {\n\tconst backend = await getBackend();\n\tif (!backend || shouldBypass()) {\n\t\treturn options.load();\n\t}\n\n\tconst namespaces =\n\t\ttypeof options.namespace === \"string\" ? [options.namespace] : options.namespace;\n\tconst fullKey = valueKey(namespaces, options.key);\n\n\t// Kick off the value read and every namespace epoch read concurrently — one\n\t// round-trip instead of \"read epochs, then read value\". getEpoch never\n\t// rejects, so awaiting the epochs separately from the value read guarantees\n\t// we hold the pre-load epochs even when the value read errors or times out.\n\t// Storing a value under an epoch read *after* load() would mask a write that\n\t// landed during load(): the stale value would match and be served as a HIT.\n\tconst epochsPromise = Promise.all(namespaces.map((ns) => getEpoch(ns, backend)));\n\tconst rawPromise = withTimeout(backend.get(fullKey), holder.config.timeout, \"read\").catch(\n\t\t() => null,\n\t);\n\tconst currentEpochs = await epochsPromise;\n\tconst raw = await rawPromise;\n\tif (raw !== null) {\n\t\tconst decoded = decode(raw);\n\t\tif (decoded !== undefined) {\n\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- value envelope written by this function\n\t\t\tconst envelope = decoded as CacheEnvelope<T>;\n\t\t\tif (epochsMatch(envelope.e, currentEpochs)) {\n\t\t\t\treturn envelope.v;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst value = await options.load();\n\n\tconst cacheable = options.cacheable ? options.cacheable(value) : true;\n\tif (cacheable) {\n\t\tconst ttl = options.ttl ?? holder.config.defaultTtl;\n\t\t// Defer the write so it never adds to TTFB. The epochs were captured\n\t\t// before load() ran, so a write that invalidated this namespace mid-load\n\t\t// correctly orphans the value stored here.\n\t\tafter(async () => {\n\t\t\ttry {\n\t\t\t\tconst encoded = encode({ e: currentEpochs, v: value } satisfies CacheEnvelope<T>);\n\t\t\t\tawait backend.set(fullKey, encoded, ttl);\n\t\t\t} catch (error) {\n\t\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\t\tconsole.warn(\"[object-cache] set failed:\", error);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\treturn value;\n}\n\n/** Whether object-cache reads are active for the current request. */\nexport async function isObjectCacheActive(): Promise<boolean> {\n\tconst backend = await getBackend();\n\treturn backend !== null && !shouldBypass();\n}\n\n/**\n * Stamp the isolate-local + backend \"last content write\" marker when a\n * content collection namespace is invalidated. Used by DB adapters (Hyperdrive)\n * to briefly prefer uncached SQL after a publish so edge/object caches are not\n * reseeded from a stale query-cache hit.\n */\nfunction stampLastContentWrite(): void {\n\tconst stamp = Math.max(lastContentWrite.value + 1, Date.now());\n\tlastContentWrite.value = stamp;\n\tlastContentWrite.at = stamp;\n\t// Drop any in-flight backend read so it cannot lower a fresher local stamp.\n\tlastContentWrite.promise = undefined;\n\tlastContentWrite.promiseAt = undefined;\n\n\tif (contentWritePersist.pending) return;\n\tcontentWritePersist.pending = true;\n\tafter(async () => {\n\t\tcontentWritePersist.pending = false;\n\t\ttry {\n\t\t\tconst backend = await getBackend();\n\t\t\tif (!backend) return;\n\t\t\tconst latest = lastContentWrite.value;\n\t\t\t// Persistent (no TTL) — same contract as epoch anchors.\n\t\t\tawait backend.set(lastContentWriteKey(), String(latest));\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[object-cache] last-content-write stamp failed:\", error);\n\t\t}\n\t});\n}\n\n/**\n * ms-epoch of the last content-namespace invalidation (`content:*`), or `0`\n * if unknown. Returns `max(local, backend)` so a warm isolate that just\n * published is immediately correct, and cold isolates learn within their\n * `revalidate` window after another isolate stamped the backend.\n */\nexport async function getLastContentWriteAt(): Promise<number> {\n\tconst local = lastContentWrite.value;\n\tconst now = Date.now();\n\t// Cache a confirmed miss (`0`) the same way as a positive stamp — otherwise\n\t// every logged-out request re-reads the backend until the first content write.\n\tif (now - lastContentWrite.at < holder.config.revalidate) {\n\t\treturn local;\n\t}\n\n\tconst backend = await getBackend();\n\tif (!backend) return local;\n\n\tif (lastContentWrite.promise) {\n\t\tconst age = now - (lastContentWrite.promiseAt ?? 0);\n\t\tconst deadline = epochReadDeadline();\n\t\tif (age < deadline) {\n\t\t\treturn raceInFlightEpochRead(lastContentWrite.promise, deadline - age, local);\n\t\t}\n\t}\n\n\tconst promise = (async () => {\n\t\tlet value: number;\n\t\ttry {\n\t\t\tconst raw = await withTimeout(\n\t\t\t\tbackend.get(lastContentWriteKey()),\n\t\t\t\tholder.config.timeout,\n\t\t\t\t\"last-content-write read\",\n\t\t\t);\n\t\t\tconst parsed = raw === null ? 0 : Number(raw);\n\t\t\tvalue = Number.isFinite(parsed) ? parsed : 0;\n\t\t} catch {\n\t\t\tvalue = lastContentWrite.value;\n\t\t}\n\t\tconst merged = Math.max(value, lastContentWrite.value);\n\t\tlastContentWrite.value = merged;\n\t\tlastContentWrite.at = Date.now();\n\t\tlastContentWrite.promise = undefined;\n\t\tlastContentWrite.promiseAt = undefined;\n\t\treturn merged;\n\t})();\n\n\tafter(() =>\n\t\tpromise.then(\n\t\t\t() => undefined,\n\t\t\t() => undefined,\n\t\t),\n\t);\n\n\tlastContentWrite.promise = promise;\n\tlastContentWrite.promiseAt = now;\n\treturn promise;\n}\n\n/**\n * Invalidate every cached value in `namespace` by bumping its epoch.\n *\n * Sync and non-blocking: the local epoch is stamped immediately (so the\n * writing isolate is instantly consistent) and the backend write is deferred\n * via `after`. Other isolates pick up the new epoch within their `revalidate`\n * window. No-ops when the cache is disabled.\n *\n * Content namespaces (`content:*`) also stamp {@link getLastContentWriteAt}.\n */\nexport function invalidateObjectCache(namespace: string): void {\n\t// Monotonic so two writes in the same millisecond still produce distinct\n\t// epochs — otherwise the second write reuses the first's stamp and its\n\t// stale entries survive.\n\tconst prev = epochCache.get(namespace)?.value ?? 0;\n\tconst stamp = Math.max(prev + 1, Date.now());\n\t// Optimistic local bump: keep this isolate consistent without a round-trip.\n\tepochCache.set(namespace, { value: stamp, at: stamp });\n\n\tif (isContentNamespace(namespace)) {\n\t\tstampLastContentWrite();\n\t}\n\n\t// Coalesce repeated bumps of the same namespace within a tick (e.g. a bulk\n\t// publish loop) into a single backend write that persists the latest epoch.\n\tif (pendingBumps.has(namespace)) return;\n\tpendingBumps.add(namespace);\n\tafter(async () => {\n\t\tpendingBumps.delete(namespace);\n\t\ttry {\n\t\t\tconst backend = await getBackend();\n\t\t\tif (!backend) return;\n\t\t\tconst latest = epochCache.get(namespace)?.value ?? stamp;\n\t\t\t// Epoch anchors are persistent (no TTL) — they must outlive the\n\t\t\t// value keys they invalidate.\n\t\t\tawait backend.set(epochKey(namespace), String(latest));\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[object-cache] epoch bump failed for\", namespace, error);\n\t\t}\n\t});\n}\n/**\n * Fixed namespaces for data shared across collections. Content reads fold the\n * `BYLINES` and `TAXONOMIES` epochs into their keys (via {@link cachedQuery})\n * because entries hydrate byline and taxonomy-term data — so renaming an\n * author or a category correctly invalidates every cached entry that displays\n * it, without tracking which collections reference it.\n */\nexport const CacheNamespace = {\n\tSETTINGS: \"settings\",\n\tMENUS: \"menus\",\n\tTAXONOMIES: \"taxonomies\",\n\tBYLINES: \"bylines\",\n\t/** Collection schema/metadata (label, supports, commentsEnabled, fields). */\n\tSCHEMA: \"schema\",\n\t/** Public (approved) comments. */\n\tCOMMENTS: \"comments\",\n} as const;\n\n/** Namespace for a content collection's cached queries. */\nexport function contentNamespace(collection: string): string {\n\treturn `content:v2:${collection}`;\n}\n\nfunction legacyContentNamespace(collection: string): string {\n\treturn `content:${collection}`;\n}\n\n/**\n * Content epochs carried by current cache entries. The legacy epoch keeps\n * invalidation compatible with publishers from the previous release during a\n * rolling deployment; the versioned epoch makes old cached values unreachable.\n */\nexport function contentCacheNamespaces(collection: string): readonly string[] {\n\treturn [contentNamespace(collection), legacyContentNamespace(collection)];\n}\n\n/**\n * Namespaces a content read depends on: the collection itself plus the shared\n * byline/taxonomy data folded into each entry.\n */\nexport function contentNamespaces(collection: string): readonly string[] {\n\treturn [...contentCacheNamespaces(collection), CacheNamespace.BYLINES, CacheNamespace.TAXONOMIES];\n}\n\n/**\n * Invalidate all cached reads (list + entry) for a content collection.\n * Call from every write path that mutates rows in `ec_<collection>`.\n */\nexport function invalidateCollectionCache(collection: string): void {\n\tfor (const namespace of contentCacheNamespaces(collection)) {\n\t\tinvalidateObjectCache(namespace);\n\t}\n}\n\n/** Invalidate cached taxonomy definitions/terms and all content that hydrates them. */\nexport function invalidateTaxonomyObjectCache(): void {\n\tinvalidateObjectCache(CacheNamespace.TAXONOMIES);\n}\n\n/** Invalidate cached bylines and all content that hydrates them. */\nexport function invalidateBylineObjectCache(): void {\n\tinvalidateObjectCache(CacheNamespace.BYLINES);\n}\n\n/** Invalidate cached navigation menus. */\nexport function invalidateMenuObjectCache(): void {\n\tinvalidateObjectCache(CacheNamespace.MENUS);\n}\n\n/** Invalidate cached collection schema/metadata reads (e.g. getCollectionInfo). */\nexport function invalidateSchemaObjectCache(): void {\n\tinvalidateObjectCache(CacheNamespace.SCHEMA);\n}\n\n/** Invalidate cached public comment reads. */\nexport function invalidateCommentObjectCache(): void {\n\tinvalidateObjectCache(CacheNamespace.COMMENTS);\n}\n\nexport type {\n\tObjectCacheBackend,\n\tObjectCacheDescriptor,\n\tObjectCacheRuntimeConfig,\n} from \"./types.js\";\n"],"mappings":"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"}
@@ -1,200 +0,0 @@
1
- import { sql } from "kysely";
2
-
3
- //#region src/plugins/conditional-storage.ts
4
- const MAX_KEY_LENGTH = 1024;
5
- const MAX_REVISION_LENGTH = 128;
6
- const MAX_VALUE_BYTES = 1024 * 1024;
7
- function assertStorageKey(key, maxLength = MAX_KEY_LENGTH) {
8
- if (typeof key !== "string" || key.length === 0 || key.length > maxLength) throw new TypeError(`Storage key must be a nonempty string of at most ${maxLength} characters`);
9
- }
10
- function assertStorageRevision(revision) {
11
- if (typeof revision !== "string" || revision.length === 0 || revision.length > MAX_REVISION_LENGTH) throw new TypeError("Storage revision must be a nonempty string of at most 128 characters");
12
- }
13
- function serializeConditionalValue(value) {
14
- const serialized = JSON.stringify(value);
15
- if (serialized === void 0) throw new TypeError("Storage value must be JSON serializable");
16
- if (new TextEncoder().encode(serialized).byteLength > MAX_VALUE_BYTES) throw new TypeError("Conditional storage value must not exceed 1 MiB of JSON");
17
- return serialized;
18
- }
19
-
20
- //#endregion
21
- //#region src/database/repositories/options.ts
22
- function escapeLike(value) {
23
- return value.replaceAll("\\", "\\\\").replaceAll("%", "\\%").replaceAll("_", "\\_");
24
- }
25
- /**
26
- * Options repository for key-value settings storage
27
- *
28
- * Used for site settings, plugin configuration, and other arbitrary key-value data.
29
- * Values are stored as JSON for flexibility.
30
- */
31
- var OptionsRepository = class {
32
- constructor(db) {
33
- this.db = db;
34
- }
35
- /**
36
- * Get an option value
37
- */
38
- async get(name) {
39
- const row = await this.db.selectFrom("options").select("value").where("name", "=", name).executeTakeFirst();
40
- if (!row) return null;
41
- return JSON.parse(row.value);
42
- }
43
- /**
44
- * Get an option value with a default
45
- */
46
- async getOrDefault(name, defaultValue) {
47
- return await this.get(name) ?? defaultValue;
48
- }
49
- /**
50
- * Set an option value (creates or updates)
51
- */
52
- async set(name, value) {
53
- await this.setVersioned(name, value);
54
- }
55
- async setVersioned(name, value) {
56
- const revision = crypto.randomUUID();
57
- const row = {
58
- name,
59
- value: JSON.stringify(value),
60
- revision
61
- };
62
- await this.db.insertInto("options").values(row).onConflict((oc) => oc.column("name").doUpdateSet({
63
- value: row.value,
64
- revision: row.revision
65
- })).execute();
66
- return revision;
67
- }
68
- /**
69
- * Set an option value only if no row with that name exists. Atomic at the
70
- * database level via INSERT ... ON CONFLICT DO NOTHING, so concurrent
71
- * callers can't race past the check.
72
- *
73
- * Returns true when the row was inserted, false when a row already
74
- * existed (regardless of its value — even an empty string or null).
75
- */
76
- async setIfAbsent(name, value) {
77
- const row = {
78
- name,
79
- value: JSON.stringify(value),
80
- revision: crypto.randomUUID()
81
- };
82
- return ((await this.db.insertInto("options").values(row).onConflict((oc) => oc.column("name").doNothing()).executeTakeFirst()).numInsertedOrUpdatedRows ?? 0n) > 0n;
83
- }
84
- async getVersioned(name) {
85
- assertStorageKey(name, 2048);
86
- const row = await this.db.selectFrom("options").select(["value", "revision"]).where("name", "=", name).executeTakeFirst();
87
- if (!row) return null;
88
- return {
89
- value: JSON.parse(row.value),
90
- revision: row.revision
91
- };
92
- }
93
- async compareAndSet(name, expectedRevision, value) {
94
- assertStorageKey(name, 2048);
95
- if (expectedRevision !== null) assertStorageRevision(expectedRevision);
96
- const serialized = serializeConditionalValue(value);
97
- const revision = crypto.randomUUID();
98
- const row = expectedRevision === null ? await this.db.insertInto("options").values({
99
- name,
100
- value: serialized,
101
- revision
102
- }).onConflict((oc) => oc.column("name").doNothing()).returning("revision").executeTakeFirst() : await this.db.updateTable("options").set({
103
- value: serialized,
104
- revision
105
- }).where("name", "=", name).where("revision", "=", expectedRevision).returning("revision").executeTakeFirst();
106
- return row ? {
107
- applied: true,
108
- revision: row.revision
109
- } : { applied: false };
110
- }
111
- async compareAndDelete(name, expectedRevision) {
112
- assertStorageKey(name, 2048);
113
- assertStorageRevision(expectedRevision);
114
- return { applied: await this.db.deleteFrom("options").where("name", "=", name).where("revision", "=", expectedRevision).returning("name").executeTakeFirst() !== void 0 };
115
- }
116
- /**
117
- * Delete an option
118
- */
119
- async delete(name) {
120
- return ((await this.db.deleteFrom("options").where("name", "=", name).executeTakeFirst()).numDeletedRows ?? 0) > 0;
121
- }
122
- /**
123
- * Check if an option exists
124
- */
125
- async exists(name) {
126
- return !!await this.db.selectFrom("options").select("name").where("name", "=", name).executeTakeFirst();
127
- }
128
- /**
129
- * Get multiple options at once
130
- */
131
- async getMany(names) {
132
- if (names.length === 0) return /* @__PURE__ */ new Map();
133
- const rows = await this.db.selectFrom("options").select(["name", "value"]).where("name", "in", names).execute();
134
- const result = /* @__PURE__ */ new Map();
135
- for (const row of rows) result.set(row.name, JSON.parse(row.value));
136
- return result;
137
- }
138
- /**
139
- * Set multiple options at once
140
- */
141
- async setMany(options) {
142
- const entries = Object.entries(options);
143
- if (entries.length === 0) return;
144
- for (const [name, value] of entries) await this.set(name, value);
145
- }
146
- /**
147
- * Get all options (use sparingly)
148
- */
149
- async getAll() {
150
- const rows = await this.db.selectFrom("options").select(["name", "value"]).execute();
151
- const result = /* @__PURE__ */ new Map();
152
- for (const row of rows) result.set(row.name, JSON.parse(row.value));
153
- return result;
154
- }
155
- /**
156
- * Get all options matching a prefix
157
- */
158
- async getByPrefix(prefix, options = {}) {
159
- const pattern = `${escapeLike(prefix)}%`;
160
- let query = this.db.selectFrom("options").select(["name", "value"]).where(sql`name LIKE ${pattern} ESCAPE '\\'`).orderBy("name", "asc");
161
- if (options.limit !== void 0) query = query.limit(Math.max(0, options.limit));
162
- const rows = await query.execute();
163
- const result = /* @__PURE__ */ new Map();
164
- for (const row of rows) result.set(row.name, JSON.parse(row.value));
165
- return result;
166
- }
167
- async getVersionedByPrefix(prefix, options = {}) {
168
- const pattern = `${escapeLike(prefix)}%`;
169
- let query = this.db.selectFrom("options").select([
170
- "name",
171
- "value",
172
- "revision"
173
- ]).where(sql`name LIKE ${pattern} ESCAPE '\\'`).orderBy("name", "asc");
174
- if (options.limit !== void 0) query = query.limit(Math.max(0, options.limit));
175
- const rows = await query.execute();
176
- const result = /* @__PURE__ */ new Map();
177
- for (const row of rows) result.set(row.name, {
178
- value: JSON.parse(row.value),
179
- revision: row.revision
180
- });
181
- return result;
182
- }
183
- async countByPrefix(prefix) {
184
- const pattern = `${escapeLike(prefix)}%`;
185
- const row = await this.db.selectFrom("options").select((eb) => eb.fn.countAll().as("count")).where(sql`name LIKE ${pattern} ESCAPE '\\'`).executeTakeFirst();
186
- return Number(row?.count ?? 0);
187
- }
188
- /**
189
- * Delete all options matching a prefix
190
- */
191
- async deleteByPrefix(prefix) {
192
- const pattern = `${escapeLike(prefix)}%`;
193
- const result = await this.db.deleteFrom("options").where(sql`name LIKE ${pattern} ESCAPE '\\'`).executeTakeFirst();
194
- return Number(result.numDeletedRows ?? 0);
195
- }
196
- };
197
-
198
- //#endregion
199
- export { serializeConditionalValue as i, assertStorageKey as n, assertStorageRevision as r, OptionsRepository as t };
200
- //# sourceMappingURL=options-D5WcorD5.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"options-D5WcorD5.mjs","names":[],"sources":["../src/plugins/conditional-storage.ts","../src/database/repositories/options.ts"],"sourcesContent":["const MAX_KEY_LENGTH = 1024;\nconst MAX_REVISION_LENGTH = 128;\nconst MAX_VALUE_BYTES = 1024 * 1024;\n\nexport function assertStorageKey(key: unknown, maxLength = MAX_KEY_LENGTH): asserts key is string {\n\tif (typeof key !== \"string\" || key.length === 0 || key.length > maxLength) {\n\t\tthrow new TypeError(`Storage key must be a nonempty string of at most ${maxLength} characters`);\n\t}\n}\n\nexport function assertStorageRevision(revision: unknown): asserts revision is string {\n\tif (\n\t\ttypeof revision !== \"string\" ||\n\t\trevision.length === 0 ||\n\t\trevision.length > MAX_REVISION_LENGTH\n\t) {\n\t\tthrow new TypeError(\"Storage revision must be a nonempty string of at most 128 characters\");\n\t}\n}\n\nexport function serializeConditionalValue(value: unknown): string {\n\tconst serialized = JSON.stringify(value);\n\tif (serialized === undefined) {\n\t\tthrow new TypeError(\"Storage value must be JSON serializable\");\n\t}\n\tif (new TextEncoder().encode(serialized).byteLength > MAX_VALUE_BYTES) {\n\t\tthrow new TypeError(\"Conditional storage value must not exceed 1 MiB of JSON\");\n\t}\n\treturn serialized;\n}\n","import { sql, type Insertable, type Kysely, type SqlBool } from \"kysely\";\n\nimport {\n\tassertStorageKey,\n\tassertStorageRevision,\n\tserializeConditionalValue,\n} from \"../../plugins/conditional-storage.js\";\nimport type {\n\tVersionedValue,\n\tConditionalWriteResult,\n\tConditionalDeleteResult,\n} from \"../../plugins/types.js\";\nimport type { Database, OptionTable } from \"../types.js\";\n\nfunction escapeLike(value: string): string {\n\treturn value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"%\", \"\\\\%\").replaceAll(\"_\", \"\\\\_\");\n}\n\n/**\n * Options repository for key-value settings storage\n *\n * Used for site settings, plugin configuration, and other arbitrary key-value data.\n * Values are stored as JSON for flexibility.\n */\nexport class OptionsRepository {\n\tconstructor(private db: Kysely<Database>) {}\n\n\t/**\n\t * Get an option value\n\t */\n\tasync get<T = unknown>(name: string): Promise<T | null> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"options\")\n\t\t\t.select(\"value\")\n\t\t\t.where(\"name\", \"=\", name)\n\t\t\t.executeTakeFirst();\n\n\t\tif (!row) return null;\n\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- JSON.parse returns any; generic callers provide T\n\t\treturn JSON.parse(row.value) as T;\n\t}\n\n\t/**\n\t * Get an option value with a default\n\t */\n\tasync getOrDefault<T>(name: string, defaultValue: T): Promise<T> {\n\t\tconst value = await this.get<T>(name);\n\t\treturn value ?? defaultValue;\n\t}\n\n\t/**\n\t * Set an option value (creates or updates)\n\t */\n\tasync set<T = unknown>(name: string, value: T): Promise<void> {\n\t\tawait this.setVersioned(name, value);\n\t}\n\n\tasync setVersioned<T = unknown>(name: string, value: T): Promise<string> {\n\t\tconst revision = crypto.randomUUID();\n\t\tconst row: Insertable<OptionTable> = {\n\t\t\tname,\n\t\t\tvalue: JSON.stringify(value),\n\t\t\trevision,\n\t\t};\n\n\t\t// Upsert: insert or replace\n\t\tawait this.db\n\t\t\t.insertInto(\"options\")\n\t\t\t.values(row)\n\t\t\t.onConflict((oc) =>\n\t\t\t\toc.column(\"name\").doUpdateSet({ value: row.value, revision: row.revision }),\n\t\t\t)\n\t\t\t.execute();\n\t\treturn revision;\n\t}\n\n\t/**\n\t * Set an option value only if no row with that name exists. Atomic at the\n\t * database level via INSERT ... ON CONFLICT DO NOTHING, so concurrent\n\t * callers can't race past the check.\n\t *\n\t * Returns true when the row was inserted, false when a row already\n\t * existed (regardless of its value — even an empty string or null).\n\t */\n\tasync setIfAbsent<T = unknown>(name: string, value: T): Promise<boolean> {\n\t\tconst row: Insertable<OptionTable> = {\n\t\t\tname,\n\t\t\tvalue: JSON.stringify(value),\n\t\t\trevision: crypto.randomUUID(),\n\t\t};\n\n\t\tconst result = await this.db\n\t\t\t.insertInto(\"options\")\n\t\t\t.values(row)\n\t\t\t.onConflict((oc) => oc.column(\"name\").doNothing())\n\t\t\t.executeTakeFirst();\n\n\t\t// SQLite reports numInsertedOrUpdatedRows; Postgres reports the same.\n\t\t// When the ON CONFLICT branch fires and does nothing, the count is 0.\n\t\treturn (result.numInsertedOrUpdatedRows ?? 0n) > 0n;\n\t}\n\n\tasync getVersioned<T = unknown>(name: string): Promise<VersionedValue<T> | null> {\n\t\tassertStorageKey(name, 2048);\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"options\")\n\t\t\t.select([\"value\", \"revision\"])\n\t\t\t.where(\"name\", \"=\", name)\n\t\t\t.executeTakeFirst();\n\t\tif (!row) return null;\n\t\treturn { value: JSON.parse(row.value), revision: row.revision };\n\t}\n\n\tasync compareAndSet(\n\t\tname: string,\n\t\texpectedRevision: string | null,\n\t\tvalue: unknown,\n\t): Promise<ConditionalWriteResult> {\n\t\tassertStorageKey(name, 2048);\n\t\tif (expectedRevision !== null) assertStorageRevision(expectedRevision);\n\t\tconst serialized = serializeConditionalValue(value);\n\t\tconst revision = crypto.randomUUID();\n\t\tconst row =\n\t\t\texpectedRevision === null\n\t\t\t\t? await this.db\n\t\t\t\t\t\t.insertInto(\"options\")\n\t\t\t\t\t\t.values({ name, value: serialized, revision })\n\t\t\t\t\t\t.onConflict((oc) => oc.column(\"name\").doNothing())\n\t\t\t\t\t\t.returning(\"revision\")\n\t\t\t\t\t\t.executeTakeFirst()\n\t\t\t\t: await this.db\n\t\t\t\t\t\t.updateTable(\"options\")\n\t\t\t\t\t\t.set({ value: serialized, revision })\n\t\t\t\t\t\t.where(\"name\", \"=\", name)\n\t\t\t\t\t\t.where(\"revision\", \"=\", expectedRevision)\n\t\t\t\t\t\t.returning(\"revision\")\n\t\t\t\t\t\t.executeTakeFirst();\n\t\treturn row ? { applied: true, revision: row.revision } : { applied: false };\n\t}\n\n\tasync compareAndDelete(name: string, expectedRevision: string): Promise<ConditionalDeleteResult> {\n\t\tassertStorageKey(name, 2048);\n\t\tassertStorageRevision(expectedRevision);\n\t\tconst row = await this.db\n\t\t\t.deleteFrom(\"options\")\n\t\t\t.where(\"name\", \"=\", name)\n\t\t\t.where(\"revision\", \"=\", expectedRevision)\n\t\t\t.returning(\"name\")\n\t\t\t.executeTakeFirst();\n\t\treturn { applied: row !== undefined };\n\t}\n\n\t/**\n\t * Delete an option\n\t */\n\tasync delete(name: string): Promise<boolean> {\n\t\tconst result = await this.db.deleteFrom(\"options\").where(\"name\", \"=\", name).executeTakeFirst();\n\n\t\treturn (result.numDeletedRows ?? 0) > 0;\n\t}\n\n\t/**\n\t * Check if an option exists\n\t */\n\tasync exists(name: string): Promise<boolean> {\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"options\")\n\t\t\t.select(\"name\")\n\t\t\t.where(\"name\", \"=\", name)\n\t\t\t.executeTakeFirst();\n\n\t\treturn !!row;\n\t}\n\n\t/**\n\t * Get multiple options at once\n\t */\n\tasync getMany<T = unknown>(names: string[]): Promise<Map<string, T>> {\n\t\tif (names.length === 0) return new Map();\n\n\t\tconst rows = await this.db\n\t\t\t.selectFrom(\"options\")\n\t\t\t.select([\"name\", \"value\"])\n\t\t\t.where(\"name\", \"in\", names)\n\t\t\t.execute();\n\n\t\tconst result = new Map<string, T>();\n\t\tfor (const row of rows) {\n\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- JSON.parse returns any; generic callers provide T\n\t\t\tresult.set(row.name, JSON.parse(row.value) as T);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Set multiple options at once\n\t */\n\tasync setMany<T = unknown>(options: Record<string, T>): Promise<void> {\n\t\tconst entries = Object.entries(options);\n\t\tif (entries.length === 0) return;\n\n\t\tfor (const [name, value] of entries) {\n\t\t\tawait this.set(name, value);\n\t\t}\n\t}\n\n\t/**\n\t * Get all options (use sparingly)\n\t */\n\tasync getAll(): Promise<Map<string, unknown>> {\n\t\tconst rows = await this.db.selectFrom(\"options\").select([\"name\", \"value\"]).execute();\n\n\t\tconst result = new Map<string, unknown>();\n\t\tfor (const row of rows) {\n\t\t\tresult.set(row.name, JSON.parse(row.value));\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get all options matching a prefix\n\t */\n\tasync getByPrefix<T = unknown>(\n\t\tprefix: string,\n\t\toptions: { limit?: number } = {},\n\t): Promise<Map<string, T>> {\n\t\tconst pattern = `${escapeLike(prefix)}%`;\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"options\")\n\t\t\t.select([\"name\", \"value\"])\n\t\t\t.where(sql<SqlBool>`name LIKE ${pattern} ESCAPE '\\\\'`)\n\t\t\t.orderBy(\"name\", \"asc\");\n\t\tif (options.limit !== undefined) query = query.limit(Math.max(0, options.limit));\n\t\tconst rows = await query.execute();\n\n\t\tconst result = new Map<string, T>();\n\t\tfor (const row of rows) {\n\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- JSON.parse returns any; generic callers provide T\n\t\t\tresult.set(row.name, JSON.parse(row.value) as T);\n\t\t}\n\t\treturn result;\n\t}\n\n\tasync getVersionedByPrefix<T = unknown>(\n\t\tprefix: string,\n\t\toptions: { limit?: number } = {},\n\t): Promise<Map<string, VersionedValue<T>>> {\n\t\tconst pattern = `${escapeLike(prefix)}%`;\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"options\")\n\t\t\t.select([\"name\", \"value\", \"revision\"])\n\t\t\t.where(sql<SqlBool>`name LIKE ${pattern} ESCAPE '\\\\'`)\n\t\t\t.orderBy(\"name\", \"asc\");\n\t\tif (options.limit !== undefined) query = query.limit(Math.max(0, options.limit));\n\t\tconst rows = await query.execute();\n\n\t\tconst result = new Map<string, VersionedValue<T>>();\n\t\tfor (const row of rows) {\n\t\t\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- JSON.parse returns any; generic callers provide T\n\t\t\tresult.set(row.name, { value: JSON.parse(row.value) as T, revision: row.revision });\n\t\t}\n\t\treturn result;\n\t}\n\n\tasync countByPrefix(prefix: string): Promise<number> {\n\t\tconst pattern = `${escapeLike(prefix)}%`;\n\t\tconst row = await this.db\n\t\t\t.selectFrom(\"options\")\n\t\t\t.select((eb) => eb.fn.countAll<number>().as(\"count\"))\n\t\t\t.where(sql<SqlBool>`name LIKE ${pattern} ESCAPE '\\\\'`)\n\t\t\t.executeTakeFirst();\n\t\treturn Number(row?.count ?? 0);\n\t}\n\n\t/**\n\t * Delete all options matching a prefix\n\t */\n\tasync deleteByPrefix(prefix: string): Promise<number> {\n\t\tconst pattern = `${escapeLike(prefix)}%`;\n\t\tconst result = await this.db\n\t\t\t.deleteFrom(\"options\")\n\t\t\t.where(sql<SqlBool>`name LIKE ${pattern} ESCAPE '\\\\'`)\n\t\t\t.executeTakeFirst();\n\n\t\treturn Number(result.numDeletedRows ?? 0);\n\t}\n}\n"],"mappings":"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"}
@@ -1,77 +0,0 @@
1
- import { t as Database } from "./types-CbwqGOXm.mjs";
2
- import { In as VersionedValue, _ as ConditionalDeleteResult, v as ConditionalWriteResult } from "./types-DEHidMEk.mjs";
3
- import { Kysely } from "kysely";
4
-
5
- //#region src/database/repositories/options.d.ts
6
- /**
7
- * Options repository for key-value settings storage
8
- *
9
- * Used for site settings, plugin configuration, and other arbitrary key-value data.
10
- * Values are stored as JSON for flexibility.
11
- */
12
- declare class OptionsRepository {
13
- private db;
14
- constructor(db: Kysely<Database>);
15
- /**
16
- * Get an option value
17
- */
18
- get<T = unknown>(name: string): Promise<T | null>;
19
- /**
20
- * Get an option value with a default
21
- */
22
- getOrDefault<T>(name: string, defaultValue: T): Promise<T>;
23
- /**
24
- * Set an option value (creates or updates)
25
- */
26
- set<T = unknown>(name: string, value: T): Promise<void>;
27
- setVersioned<T = unknown>(name: string, value: T): Promise<string>;
28
- /**
29
- * Set an option value only if no row with that name exists. Atomic at the
30
- * database level via INSERT ... ON CONFLICT DO NOTHING, so concurrent
31
- * callers can't race past the check.
32
- *
33
- * Returns true when the row was inserted, false when a row already
34
- * existed (regardless of its value — even an empty string or null).
35
- */
36
- setIfAbsent<T = unknown>(name: string, value: T): Promise<boolean>;
37
- getVersioned<T = unknown>(name: string): Promise<VersionedValue<T> | null>;
38
- compareAndSet(name: string, expectedRevision: string | null, value: unknown): Promise<ConditionalWriteResult>;
39
- compareAndDelete(name: string, expectedRevision: string): Promise<ConditionalDeleteResult>;
40
- /**
41
- * Delete an option
42
- */
43
- delete(name: string): Promise<boolean>;
44
- /**
45
- * Check if an option exists
46
- */
47
- exists(name: string): Promise<boolean>;
48
- /**
49
- * Get multiple options at once
50
- */
51
- getMany<T = unknown>(names: string[]): Promise<Map<string, T>>;
52
- /**
53
- * Set multiple options at once
54
- */
55
- setMany<T = unknown>(options: Record<string, T>): Promise<void>;
56
- /**
57
- * Get all options (use sparingly)
58
- */
59
- getAll(): Promise<Map<string, unknown>>;
60
- /**
61
- * Get all options matching a prefix
62
- */
63
- getByPrefix<T = unknown>(prefix: string, options?: {
64
- limit?: number;
65
- }): Promise<Map<string, T>>;
66
- getVersionedByPrefix<T = unknown>(prefix: string, options?: {
67
- limit?: number;
68
- }): Promise<Map<string, VersionedValue<T>>>;
69
- countByPrefix(prefix: string): Promise<number>;
70
- /**
71
- * Delete all options matching a prefix
72
- */
73
- deleteByPrefix(prefix: string): Promise<number>;
74
- }
75
- //#endregion
76
- export { OptionsRepository as t };
77
- //# sourceMappingURL=options-DAknChnw.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"options-DAknChnw.d.mts","names":[],"sources":["../src/database/repositories/options.ts"],"mappings":";;;;;;;AAwBA;;;;cAAa,iBAAA;EAAA,QACQ,EAAA;cAAA,EAAA,EAAI,MAAA,CAAO,QAAA;EAoBmB;;;EAf5C,GAAA,aAAA,CAAiB,IAAA,WAAe,OAAA,CAAQ,CAAA;EAuBE;;;EAR1C,YAAA,GAAA,CAAgB,IAAA,UAAc,YAAA,EAAc,CAAA,GAAI,OAAA,CAAQ,CAAA;EAuCN;;;EA/BlD,GAAA,aAAA,CAAiB,IAAA,UAAc,KAAA,EAAO,CAAA,GAAI,OAAA;EAI1C,YAAA,aAAA,CAA0B,IAAA,UAAc,KAAA,EAAO,CAAA,GAAI,OAAA;EA4DtD;;;;;;;;EAjCG,WAAA,aAAA,CAAyB,IAAA,UAAc,KAAA,EAAO,CAAA,GAAI,OAAA;EAkBlD,YAAA,aAAA,CAA0B,IAAA,WAAe,OAAA,CAAQ,cAAA,CAAe,CAAA;EAWhE,aAAA,CACL,IAAA,UACA,gBAAA,iBACA,KAAA,YACE,OAAA,CAAQ,sBAAA;EAuBL,gBAAA,CAAiB,IAAA,UAAc,gBAAA,WAA2B,OAAA,CAAQ,uBAAA;EAqExD;;;EAtDV,MAAA,CAAO,IAAA,WAAe,OAAA;EA2FU;;;EAlFhC,MAAA,CAAO,IAAA,WAAe,OAAA;EAoGS;;;EAvF/B,OAAA,aAAA,CAAqB,KAAA,aAAkB,OAAA,CAAQ,GAAA,SAAY,CAAA;EAxJ7C;;;EA4Kd,OAAA,aAAA,CAAqB,OAAA,EAAS,MAAA,SAAe,CAAA,IAAK,OAAA;EA5KpC;;;EAwLd,MAAA,CAAA,GAAU,OAAA,CAAQ,GAAA;EAnLc;;;EAgMhC,WAAA,aAAA,CACL,MAAA,UACA,OAAA;IAAW,KAAA;EAAA,IACT,OAAA,CAAQ,GAAA,SAAY,CAAA;EAkBjB,oBAAA,aAAA,CACL,MAAA,UACA,OAAA;IAAW,KAAA;EAAA,IACT,OAAA,CAAQ,GAAA,SAAY,cAAA,CAAe,CAAA;EAkBhC,aAAA,CAAc,MAAA,WAAiB,OAAA;EAnN3B;;;EAgOJ,cAAA,CAAe,MAAA,WAAiB,OAAA;AAAA"}
@@ -1,81 +0,0 @@
1
- import { t as apiError } from "./error-CCTCskie.mjs";
2
- import { z } from "zod";
3
-
4
- //#region src/api/parse.ts
5
- /** Maximum allowed JSON request body size (10 MB). */
6
- const MAX_BODY_SIZE = 10 * 1024 * 1024;
7
- /**
8
- * Parse and validate a JSON request body against a Zod schema.
9
- *
10
- * Returns the validated data on success, or a 400 Response on failure.
11
- * Replaces all `(await request.json()) as T` casts.
12
- */
13
- async function parseBody(request, schema) {
14
- const contentLength = request.headers.get("Content-Length");
15
- if (contentLength && parseInt(contentLength, 10) > MAX_BODY_SIZE) return apiError("PAYLOAD_TOO_LARGE", "Request body too large", 413);
16
- let raw;
17
- try {
18
- raw = await request.json();
19
- } catch {
20
- return apiError("INVALID_JSON", "Request body must be valid JSON", 400);
21
- }
22
- return validate(schema, raw);
23
- }
24
- /**
25
- * Parse and validate an optional JSON request body.
26
- *
27
- * Returns `defaultValue` if the body is empty, or the validated data if present.
28
- * For endpoints where the body is optional (e.g., preview-url, confirm).
29
- */
30
- async function parseOptionalBody(request, schema, defaultValue) {
31
- const contentLength = request.headers.get("Content-Length");
32
- if (contentLength && parseInt(contentLength, 10) > MAX_BODY_SIZE) return apiError("PAYLOAD_TOO_LARGE", "Request body too large", 413);
33
- let text;
34
- try {
35
- text = await request.text();
36
- } catch {
37
- return defaultValue;
38
- }
39
- if (!text.trim()) return defaultValue;
40
- let raw;
41
- try {
42
- raw = JSON.parse(text);
43
- } catch {
44
- return apiError("INVALID_JSON", "Request body must be valid JSON", 400);
45
- }
46
- return validate(schema, raw);
47
- }
48
- /**
49
- * Parse and validate URL search params against a Zod schema.
50
- *
51
- * Converts searchParams to a plain object before validation.
52
- * Zod coercion handles string -> number/boolean conversion.
53
- * Replaces manual `url.searchParams.get()` + `parseInt()` patterns.
54
- */
55
- function parseQuery(url, schema) {
56
- const raw = {};
57
- for (const [key, value] of url.searchParams) raw[key] = value;
58
- return validate(schema, raw);
59
- }
60
- /**
61
- * Validate raw data against a schema. Returns data or error Response.
62
- */
63
- function validate(schema, data) {
64
- const result = schema.safeParse(data);
65
- if (result.success) return result.data;
66
- return apiError("VALIDATION_ERROR", "Invalid request data", 400, { issues: result.error.issues.map((issue) => ({
67
- path: issue.path.join("."),
68
- message: issue.message
69
- })) });
70
- }
71
- /**
72
- * Type guard to check if a ParseResult is an error Response.
73
- * Usage: `if (isParseError(result)) return result;`
74
- */
75
- function isParseError(result) {
76
- return result instanceof Response;
77
- }
78
-
79
- //#endregion
80
- export { parseQuery as i, parseBody as n, parseOptionalBody as r, isParseError as t };
81
- //# sourceMappingURL=parse-Cr379Av9.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse-Cr379Av9.mjs","names":[],"sources":["../src/api/parse.ts"],"sourcesContent":["/**\n * Request body and query parameter parsing with Zod validation.\n *\n * All API routes should use these utilities instead of `request.json() as T`\n * or raw `url.searchParams.get()` with manual coercion.\n */\n\nimport { z } from \"zod\";\n\nimport { apiError } from \"./error.js\";\n\n/** Maximum allowed JSON request body size (10 MB). */\nconst MAX_BODY_SIZE = 10 * 1024 * 1024;\n\n/**\n * Result of parsing: either the validated data or an error Response.\n * Routes should check `if (result instanceof Response) return result;`\n */\nexport type ParseResult<T> = T | Response;\n\n/**\n * Parse and validate a JSON request body against a Zod schema.\n *\n * Returns the validated data on success, or a 400 Response on failure.\n * Replaces all `(await request.json()) as T` casts.\n */\nexport async function parseBody<T extends z.ZodType>(\n\trequest: Request,\n\tschema: T,\n): Promise<ParseResult<z.infer<T>>> {\n\t// Best-effort size check via Content-Length (can be absent with chunked encoding)\n\tconst contentLength = request.headers.get(\"Content-Length\");\n\tif (contentLength && parseInt(contentLength, 10) > MAX_BODY_SIZE) {\n\t\treturn apiError(\"PAYLOAD_TOO_LARGE\", \"Request body too large\", 413);\n\t}\n\n\tlet raw: unknown;\n\ttry {\n\t\traw = await request.json();\n\t} catch {\n\t\treturn apiError(\"INVALID_JSON\", \"Request body must be valid JSON\", 400);\n\t}\n\n\treturn validate(schema, raw);\n}\n\n/**\n * Parse and validate an optional JSON request body.\n *\n * Returns `defaultValue` if the body is empty, or the validated data if present.\n * For endpoints where the body is optional (e.g., preview-url, confirm).\n */\nexport async function parseOptionalBody<T extends z.ZodType>(\n\trequest: Request,\n\tschema: T,\n\tdefaultValue: z.infer<T>,\n): Promise<ParseResult<z.infer<T>>> {\n\t// Best-effort size check via Content-Length (can be absent with chunked encoding)\n\tconst contentLength = request.headers.get(\"Content-Length\");\n\tif (contentLength && parseInt(contentLength, 10) > MAX_BODY_SIZE) {\n\t\treturn apiError(\"PAYLOAD_TOO_LARGE\", \"Request body too large\", 413);\n\t}\n\n\tlet text: string;\n\ttry {\n\t\ttext = await request.text();\n\t} catch {\n\t\treturn defaultValue;\n\t}\n\n\tif (!text.trim()) {\n\t\treturn defaultValue;\n\t}\n\n\tlet raw: unknown;\n\ttry {\n\t\traw = JSON.parse(text);\n\t} catch {\n\t\treturn apiError(\"INVALID_JSON\", \"Request body must be valid JSON\", 400);\n\t}\n\n\treturn validate(schema, raw);\n}\n\n/**\n * Parse and validate URL search params against a Zod schema.\n *\n * Converts searchParams to a plain object before validation.\n * Zod coercion handles string -> number/boolean conversion.\n * Replaces manual `url.searchParams.get()` + `parseInt()` patterns.\n */\nexport function parseQuery<T extends z.ZodType>(url: URL, schema: T): ParseResult<z.infer<T>> {\n\tconst raw: Record<string, string> = {};\n\tfor (const [key, value] of url.searchParams) {\n\t\traw[key] = value;\n\t}\n\treturn validate(schema, raw);\n}\n\n/**\n * Validate raw data against a schema. Returns data or error Response.\n */\nfunction validate<T extends z.ZodType>(schema: T, data: unknown): ParseResult<z.infer<T>> {\n\tconst result = schema.safeParse(data);\n\n\tif (result.success) {\n\t\treturn result.data;\n\t}\n\n\t// Format Zod errors into a readable structure\n\tconst issues = result.error.issues.map((issue: z.core.$ZodIssue) => ({\n\t\tpath: issue.path.join(\".\"),\n\t\tmessage: issue.message,\n\t}));\n\n\treturn apiError(\"VALIDATION_ERROR\", \"Invalid request data\", 400, { issues });\n}\n\n/**\n * Type guard to check if a ParseResult is an error Response.\n * Usage: `if (isParseError(result)) return result;`\n */\nexport function isParseError<T>(result: ParseResult<T>): result is Response {\n\treturn result instanceof Response;\n}\n"],"mappings":";;;;;AAYA,MAAM,gBAAgB,KAAK,OAAO;;;;;;;AAclC,eAAsB,UACrB,SACA,QACmC;CAEnC,MAAM,gBAAgB,QAAQ,QAAQ,IAAI,iBAAiB;AAC3D,KAAI,iBAAiB,SAAS,eAAe,GAAG,GAAG,cAClD,QAAO,SAAS,qBAAqB,0BAA0B,IAAI;CAGpE,IAAI;AACJ,KAAI;AACH,QAAM,MAAM,QAAQ,MAAM;SACnB;AACP,SAAO,SAAS,gBAAgB,mCAAmC,IAAI;;AAGxE,QAAO,SAAS,QAAQ,IAAI;;;;;;;;AAS7B,eAAsB,kBACrB,SACA,QACA,cACmC;CAEnC,MAAM,gBAAgB,QAAQ,QAAQ,IAAI,iBAAiB;AAC3D,KAAI,iBAAiB,SAAS,eAAe,GAAG,GAAG,cAClD,QAAO,SAAS,qBAAqB,0BAA0B,IAAI;CAGpE,IAAI;AACJ,KAAI;AACH,SAAO,MAAM,QAAQ,MAAM;SACpB;AACP,SAAO;;AAGR,KAAI,CAAC,KAAK,MAAM,CACf,QAAO;CAGR,IAAI;AACJ,KAAI;AACH,QAAM,KAAK,MAAM,KAAK;SACf;AACP,SAAO,SAAS,gBAAgB,mCAAmC,IAAI;;AAGxE,QAAO,SAAS,QAAQ,IAAI;;;;;;;;;AAU7B,SAAgB,WAAgC,KAAU,QAAoC;CAC7F,MAAM,MAA8B,EAAE;AACtC,MAAK,MAAM,CAAC,KAAK,UAAU,IAAI,aAC9B,KAAI,OAAO;AAEZ,QAAO,SAAS,QAAQ,IAAI;;;;;AAM7B,SAAS,SAA8B,QAAW,MAAwC;CACzF,MAAM,SAAS,OAAO,UAAU,KAAK;AAErC,KAAI,OAAO,QACV,QAAO,OAAO;AASf,QAAO,SAAS,oBAAoB,wBAAwB,KAAK,EAAE,QALpD,OAAO,MAAM,OAAO,KAAK,WAA6B;EACpE,MAAM,MAAM,KAAK,KAAK,IAAI;EAC1B,SAAS,MAAM;EACf,EAAE,EAEwE,CAAC;;;;;;AAO7E,SAAgB,aAAgB,QAA4C;AAC3E,QAAO,kBAAkB"}