emdash 0.40.0 → 0.41.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 (1258) hide show
  1. package/dist/action-token-CbKDcPJi.mjs +26 -0
  2. package/dist/action-token-CbKDcPJi.mjs.map +1 -0
  3. package/dist/activation-PtniBLt9.mjs +382 -0
  4. package/dist/activation-PtniBLt9.mjs.map +1 -0
  5. package/dist/adapters-C_Tf5x90.d.mts +171 -0
  6. package/dist/adapters-C_Tf5x90.d.mts.map +1 -0
  7. package/dist/allowed-origins-U1z4TdEZ.mjs +116 -0
  8. package/dist/allowed-origins-U1z4TdEZ.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +46 -45
  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 +10 -10
  14. package/dist/api-CXwQkV_m.mjs +5122 -0
  15. package/dist/api-CXwQkV_m.mjs.map +1 -0
  16. package/dist/api-tokens-89WlohEN.mjs +166 -0
  17. package/dist/api-tokens-89WlohEN.mjs.map +1 -0
  18. package/dist/apply-Do3KNnUk.mjs +1659 -0
  19. package/dist/apply-Do3KNnUk.mjs.map +1 -0
  20. package/dist/approvals-CAX9Yw33.mjs +460 -0
  21. package/dist/approvals-CAX9Yw33.mjs.map +1 -0
  22. package/dist/artifact-fetch-B9W4CEST.mjs +659 -0
  23. package/dist/artifact-fetch-B9W4CEST.mjs.map +1 -0
  24. package/dist/astro/index.d.mts +14 -14
  25. package/dist/astro/index.mjs +26 -30
  26. package/dist/astro/index.mjs.map +1 -1
  27. package/dist/astro/middleware/auth.d.mts +12 -12
  28. package/dist/astro/middleware/auth.mjs +10 -10
  29. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  30. package/dist/astro/middleware/redirect.mjs +7 -7
  31. package/dist/astro/middleware/request-context.mjs +3 -3
  32. package/dist/astro/middleware/setup.mjs +1 -1
  33. package/dist/astro/middleware.d.mts +12 -12
  34. package/dist/astro/middleware.d.mts.map +1 -1
  35. package/dist/astro/middleware.mjs +110 -106
  36. package/dist/astro/middleware.mjs.map +1 -1
  37. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
  38. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
  39. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  40. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  41. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +7 -7
  42. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +17 -17
  43. package/dist/astro/routes/api/admin/byline-fields/index.mjs +17 -17
  44. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +17 -17
  45. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +23 -23
  46. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +23 -23
  47. package/dist/astro/routes/api/admin/bylines/index.mjs +23 -23
  48. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
  49. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
  50. package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
  51. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
  52. package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
  53. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  54. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  55. package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
  56. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +22 -22
  57. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +22 -22
  58. package/dist/astro/routes/api/admin/media-usage/progress.mjs +25 -25
  59. package/dist/astro/routes/api/admin/media-usage/repair.mjs +31 -31
  60. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +22 -22
  61. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +22 -22
  62. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  63. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  64. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  65. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  66. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -68
  67. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  68. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  69. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -67
  70. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  71. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +72 -68
  72. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  73. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +82 -78
  74. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  75. package/dist/astro/routes/api/admin/plugins/index.mjs +72 -68
  76. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  77. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +5 -5
  78. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -67
  79. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +81 -77
  81. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -67
  83. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +72 -68
  85. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +83 -79
  87. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -9
  89. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +74 -70
  90. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  92. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -68
  93. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -67
  95. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
  97. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -67
  98. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +5 -5
  100. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -67
  101. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  103. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +40 -40
  104. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +40 -40
  105. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +42 -42
  106. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +42 -42
  107. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +42 -42
  108. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +43 -43
  109. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +43 -43
  110. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +42 -42
  111. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +43 -43
  112. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +44 -44
  113. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +42 -42
  114. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +42 -42
  115. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +44 -44
  116. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +42 -42
  117. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +44 -44
  118. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +42 -42
  119. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +42 -42
  120. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +44 -44
  121. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +42 -42
  122. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +42 -42
  123. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +44 -44
  124. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
  125. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  126. package/dist/astro/routes/api/admin/users/_id_/index.mjs +15 -15
  127. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  128. package/dist/astro/routes/api/admin/users/index.mjs +14 -14
  129. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  130. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  131. package/dist/astro/routes/api/auth/invite/complete.mjs +18 -18
  132. package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
  133. package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
  134. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  135. package/dist/astro/routes/api/auth/magic-link/send.mjs +18 -18
  136. package/dist/astro/routes/api/auth/magic-link/verify.mjs +14 -14
  137. package/dist/astro/routes/api/auth/me.mjs +15 -15
  138. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  139. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  140. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  141. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -14
  142. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  143. package/dist/astro/routes/api/auth/passkey/options.mjs +19 -19
  144. package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
  145. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
  146. package/dist/astro/routes/api/auth/passkey/verify.mjs +18 -18
  147. package/dist/astro/routes/api/auth/signup/complete.mjs +18 -18
  148. package/dist/astro/routes/api/auth/signup/request.mjs +17 -17
  149. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  150. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
  151. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
  152. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  153. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +17 -17
  154. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  155. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +17 -17
  156. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
  157. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
  158. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +31 -31
  159. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +17 -17
  160. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts +1 -2
  161. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -1
  162. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +42 -53
  163. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  164. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -29
  165. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  166. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  167. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  168. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +17 -17
  169. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +25 -24
  170. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  171. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  172. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +17 -17
  173. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  174. package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -18
  175. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  176. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  177. package/dist/astro/routes/api/content/_collection_/index.mjs +15 -15
  178. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
  179. package/dist/astro/routes/api/dashboard.mjs +10 -9
  180. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  181. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  182. package/dist/astro/routes/api/health.mjs +6 -6
  183. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  184. package/dist/astro/routes/api/import/probe.mjs +23 -23
  185. package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
  186. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
  187. package/dist/astro/routes/api/import/wordpress/execute.mjs +16 -16
  188. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  189. package/dist/astro/routes/api/import/wordpress/media.mjs +19 -19
  190. package/dist/astro/routes/api/import/wordpress/prepare.mjs +18 -18
  191. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  192. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +28 -28
  193. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  194. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +23 -23
  195. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  196. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +34 -34
  197. package/dist/astro/routes/api/manifest.mjs +6 -6
  198. package/dist/astro/routes/api/mcp.mjs +98 -118
  199. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  200. package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -19
  201. package/dist/astro/routes/api/media/_id_/replace.mjs +16 -16
  202. package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
  203. package/dist/astro/routes/api/media/_id_/usage.mjs +33 -33
  204. package/dist/astro/routes/api/media/_id_.mjs +31 -31
  205. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  206. package/dist/astro/routes/api/media/file/_...key_.mjs +9 -9
  207. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
  208. package/dist/astro/routes/api/media/folders/index.mjs +16 -16
  209. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  210. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  211. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  212. package/dist/astro/routes/api/media/upload-url.mjs +18 -18
  213. package/dist/astro/routes/api/media.mjs +35 -35
  214. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +17 -17
  215. package/dist/astro/routes/api/menus/_name_/items.mjs +17 -17
  216. package/dist/astro/routes/api/menus/_name_/reorder.mjs +17 -17
  217. package/dist/astro/routes/api/menus/_name_/translations.mjs +17 -17
  218. package/dist/astro/routes/api/menus/_name_.mjs +17 -17
  219. package/dist/astro/routes/api/menus/index.mjs +17 -17
  220. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  221. package/dist/astro/routes/api/oauth/device/authorize.d.mts +2 -1
  222. package/dist/astro/routes/api/oauth/device/authorize.d.mts.map +1 -1
  223. package/dist/astro/routes/api/oauth/device/authorize.mjs +23 -9
  224. package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
  225. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  226. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  227. package/dist/astro/routes/api/oauth/register.mjs +5 -5
  228. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  229. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  230. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  231. package/dist/astro/routes/api/openapi.json.mjs +20 -20
  232. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
  233. package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
  234. package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
  235. package/dist/astro/routes/api/redirects/_id_.mjs +19 -19
  236. package/dist/astro/routes/api/redirects/index.mjs +19 -19
  237. package/dist/astro/routes/api/relations/_id_/index.mjs +34 -29
  238. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  239. package/dist/astro/routes/api/relations/index.mjs +36 -31
  240. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  241. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  242. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
  243. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +71 -67
  244. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  245. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +71 -67
  246. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  247. package/dist/astro/routes/api/schema/block-types/index.mjs +71 -67
  248. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  249. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +73 -69
  250. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  251. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +71 -67
  252. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  253. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +71 -67
  254. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  255. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -67
  256. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  257. package/dist/astro/routes/api/schema/collections/index.mjs +71 -67
  258. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  259. package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -67
  260. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  261. package/dist/astro/routes/api/schema/index.mjs +16 -16
  262. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -67
  263. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  264. package/dist/astro/routes/api/schema/orphans/index.mjs +71 -67
  265. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  266. package/dist/astro/routes/api/search/enable.mjs +19 -19
  267. package/dist/astro/routes/api/search/index.mjs +18 -18
  268. package/dist/astro/routes/api/search/rebuild.mjs +19 -19
  269. package/dist/astro/routes/api/search/stats.mjs +9 -9
  270. package/dist/astro/routes/api/search/suggest.mjs +18 -18
  271. package/dist/astro/routes/api/sections/_slug_.mjs +18 -18
  272. package/dist/astro/routes/api/sections/index.mjs +18 -18
  273. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  274. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  275. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  276. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  277. package/dist/astro/routes/api/settings/email.mjs +6 -6
  278. package/dist/astro/routes/api/settings.mjs +21 -21
  279. package/dist/astro/routes/api/setup/admin-verify.mjs +19 -19
  280. package/dist/astro/routes/api/setup/admin.mjs +18 -18
  281. package/dist/astro/routes/api/setup/dev-bypass.mjs +45 -39
  282. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  283. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  284. package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
  285. package/dist/astro/routes/api/setup/index.mjs +80 -49
  286. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  287. package/dist/astro/routes/api/setup/status.mjs +6 -6
  288. package/dist/astro/routes/api/snapshot.mjs +9 -9
  289. package/dist/astro/routes/api/snapshot.mjs.map +1 -1
  290. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -23
  291. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -23
  292. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +23 -23
  293. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -23
  294. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -22
  295. package/dist/astro/routes/api/taxonomies/_name_.mjs +23 -23
  296. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +36 -35
  297. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  298. package/dist/astro/routes/api/taxonomies/index.mjs +23 -23
  299. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  300. package/dist/astro/routes/api/typegen.mjs +8 -8
  301. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  302. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +19 -19
  303. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  304. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  305. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  306. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  307. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +16 -16
  308. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +19 -19
  309. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +19 -19
  310. package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
  311. package/dist/astro/routes/api/widget-areas/index.mjs +19 -19
  312. package/dist/astro/routes/api/widget-components.mjs +5 -5
  313. package/dist/astro/routes/robots.txt.mjs +6 -6
  314. package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
  315. package/dist/astro/routes/sitemap.xml.mjs +7 -7
  316. package/dist/astro/types.d.mts +28 -18
  317. package/dist/astro/types.d.mts.map +1 -1
  318. package/dist/audit-CrgmE9LE.mjs +127 -0
  319. package/dist/audit-CrgmE9LE.mjs.map +1 -0
  320. package/dist/auth/providers/github.d.mts +1 -1
  321. package/dist/auth/providers/google.d.mts +1 -1
  322. package/dist/authoritative-records-C2YzIdbu.mjs +5172 -0
  323. package/dist/authoritative-records-C2YzIdbu.mjs.map +1 -0
  324. package/dist/authorize-WgdKF8QY.mjs +49 -0
  325. package/dist/authorize-WgdKF8QY.mjs.map +1 -0
  326. package/dist/backup-Ck8_lMO3.mjs +246 -0
  327. package/dist/backup-Ck8_lMO3.mjs.map +1 -0
  328. package/dist/block-types-BQ90asVI.mjs +132 -0
  329. package/dist/block-types-BQ90asVI.mjs.map +1 -0
  330. package/dist/block-values-ACFqgB1D.mjs +175 -0
  331. package/dist/block-values-ACFqgB1D.mjs.map +1 -0
  332. package/dist/bundle-Db1iNMv_.mjs +667 -0
  333. package/dist/bundle-Db1iNMv_.mjs.map +1 -0
  334. package/dist/byline-BayaYGoj.mjs +909 -0
  335. package/dist/byline-BayaYGoj.mjs.map +1 -0
  336. package/dist/byline-fields-B8HH-35f.mjs +254 -0
  337. package/dist/byline-fields-B8HH-35f.mjs.map +1 -0
  338. package/dist/byline-fields-hMPjf6Eu.mjs +123 -0
  339. package/dist/byline-fields-hMPjf6Eu.mjs.map +1 -0
  340. package/dist/byline-registry-B_EK_TQf.mjs +406 -0
  341. package/dist/byline-registry-B_EK_TQf.mjs.map +1 -0
  342. package/dist/bylines-DFAaFXWi.mjs +214 -0
  343. package/dist/bylines-DFAaFXWi.mjs.map +1 -0
  344. package/dist/bylines-DkIxUxmr.mjs +232 -0
  345. package/dist/bylines-DkIxUxmr.mjs.map +1 -0
  346. package/dist/cache-DkvhQ8XE.mjs +108 -0
  347. package/dist/cache-DkvhQ8XE.mjs.map +1 -0
  348. package/dist/canonical-CcSuuTlH.mjs +174 -0
  349. package/dist/canonical-CcSuuTlH.mjs.map +1 -0
  350. package/dist/capture-triggers-DJEoOTOq.mjs +362 -0
  351. package/dist/capture-triggers-DJEoOTOq.mjs.map +1 -0
  352. package/dist/challenge-store-CvBl81AQ.mjs +51 -0
  353. package/dist/challenge-store-CvBl81AQ.mjs.map +1 -0
  354. package/dist/checksum-CClweQzI.mjs +162 -0
  355. package/dist/checksum-CClweQzI.mjs.map +1 -0
  356. package/dist/chrome-tags-D5caJwwp.mjs +24 -0
  357. package/dist/chrome-tags-D5caJwwp.mjs.map +1 -0
  358. package/dist/chunks-DwBaj8aT.mjs +25 -0
  359. package/dist/chunks-DwBaj8aT.mjs.map +1 -0
  360. package/dist/cli/index.mjs +374 -761
  361. package/dist/cli/index.mjs.map +1 -1
  362. package/dist/client/cf-access.d.mts +1 -1
  363. package/dist/client/index.d.mts +18 -18
  364. package/dist/client/index.mjs +2 -2
  365. package/dist/collection-deletion-CLCdXsnV.mjs +436 -0
  366. package/dist/collection-deletion-CLCdXsnV.mjs.map +1 -0
  367. package/dist/collection-deletion-processor-hNw8x01F.mjs +217 -0
  368. package/dist/collection-deletion-processor-hNw8x01F.mjs.map +1 -0
  369. package/dist/collection-slugs-cache-CUuiduLq.mjs +85 -0
  370. package/dist/collection-slugs-cache-CUuiduLq.mjs.map +1 -0
  371. package/dist/comment-D2uvL63j.mjs +313 -0
  372. package/dist/comment-D2uvL63j.mjs.map +1 -0
  373. package/dist/comment-reaction-DevUuzg4.mjs +85 -0
  374. package/dist/comment-reaction-DevUuzg4.mjs.map +1 -0
  375. package/dist/comments-Cq0s7_hO.mjs +195 -0
  376. package/dist/comments-Cq0s7_hO.mjs.map +1 -0
  377. package/dist/comments-M4EDYAHw.mjs +99 -0
  378. package/dist/comments-M4EDYAHw.mjs.map +1 -0
  379. package/dist/components-CuIGwXMs.mjs +108 -0
  380. package/dist/components-CuIGwXMs.mjs.map +1 -0
  381. package/dist/config-52Ea5IWt.d.mts +39 -0
  382. package/dist/config-52Ea5IWt.d.mts.map +1 -0
  383. package/dist/config-CCz3xOLc.mjs +242 -0
  384. package/dist/config-CCz3xOLc.mjs.map +1 -0
  385. package/dist/config-D3d5Qudq.d.mts +6669 -0
  386. package/dist/config-D3d5Qudq.d.mts.map +1 -0
  387. package/dist/content-CbnufDsM.mjs +2018 -0
  388. package/dist/content-CbnufDsM.mjs.map +1 -0
  389. package/dist/content-list-query-D_7B1FE5.d.mts +26 -0
  390. package/dist/content-list-query-D_7B1FE5.d.mts.map +1 -0
  391. package/dist/content-policy-CYu6K1KB.mjs +46 -0
  392. package/dist/content-policy-CYu6K1KB.mjs.map +1 -0
  393. package/dist/content-repair-DlDUgFGp.mjs +442 -0
  394. package/dist/content-repair-DlDUgFGp.mjs.map +1 -0
  395. package/dist/context-CGQLA1-a.mjs +1922 -0
  396. package/dist/context-CGQLA1-a.mjs.map +1 -0
  397. package/dist/cron-c4D5C5Fx.mjs +284 -0
  398. package/dist/cron-c4D5C5Fx.mjs.map +1 -0
  399. package/dist/dashboard-CBq9kmOn.mjs +151 -0
  400. package/dist/dashboard-CBq9kmOn.mjs.map +1 -0
  401. package/dist/db/index.d.mts +3 -3
  402. package/dist/db/index.mjs +1 -1
  403. package/dist/db/libsql-migrations.d.mts +1 -1
  404. package/dist/db/libsql-migrations.mjs +4 -4
  405. package/dist/db/libsql.d.mts +1 -1
  406. package/dist/db/postgres-migrations.d.mts +1 -1
  407. package/dist/db/postgres-migrations.mjs +4 -4
  408. package/dist/db/postgres.d.mts +1 -1
  409. package/dist/db/sqlite-migrations.d.mts +1 -1
  410. package/dist/db/sqlite-migrations.mjs +4 -4
  411. package/dist/db/sqlite.d.mts +1 -1
  412. package/dist/db/sqlite.mjs +1 -1
  413. package/dist/default-DPsys51U.mjs +81 -0
  414. package/dist/default-DPsys51U.mjs.map +1 -0
  415. package/dist/deferred-tasks-CZ7rzBdo.d.mts +9 -0
  416. package/dist/deferred-tasks-CZ7rzBdo.d.mts.map +1 -0
  417. package/dist/dev-typegen-HRxwLRcT.mjs +29 -0
  418. package/dist/dev-typegen-HRxwLRcT.mjs.map +1 -0
  419. package/dist/device-flow-OcSqE9uY.mjs +521 -0
  420. package/dist/device-flow-OcSqE9uY.mjs.map +1 -0
  421. package/dist/digest-DVZ--cE9.mjs +194 -0
  422. package/dist/digest-DVZ--cE9.mjs.map +1 -0
  423. package/dist/direct-executor-DyjAqkpT.mjs +104 -0
  424. package/dist/direct-executor-DyjAqkpT.mjs.map +1 -0
  425. package/dist/dist-FPR93_xf.mjs +810 -0
  426. package/dist/dist-FPR93_xf.mjs.map +1 -0
  427. package/dist/email-console-DyQIgEnz.mjs +50 -0
  428. package/dist/email-console-DyQIgEnz.mjs.map +1 -0
  429. package/dist/email-locale-BYb16rVd.mjs +25 -0
  430. package/dist/email-locale-BYb16rVd.mjs.map +1 -0
  431. package/dist/emdash-runtime-CrzxJFmF.mjs +4214 -0
  432. package/dist/emdash-runtime-CrzxJFmF.mjs.map +1 -0
  433. package/dist/enrich-DBtCncE2.mjs +194 -0
  434. package/dist/enrich-DBtCncE2.mjs.map +1 -0
  435. package/dist/entry-lock-BN5y4YbO.d.mts +4481 -0
  436. package/dist/entry-lock-BN5y4YbO.d.mts.map +1 -0
  437. package/dist/entry-lock-BaRBHCsH.mjs +1173 -0
  438. package/dist/entry-lock-BaRBHCsH.mjs.map +1 -0
  439. package/dist/entry-lock-C6NcnZPV.mjs +163 -0
  440. package/dist/entry-lock-C6NcnZPV.mjs.map +1 -0
  441. package/dist/entry-locks-BTyQLdbC.mjs +167 -0
  442. package/dist/entry-locks-BTyQLdbC.mjs.map +1 -0
  443. package/dist/error-BfsNNrIE.mjs +90 -0
  444. package/dist/error-BfsNNrIE.mjs.map +1 -0
  445. package/dist/errors-BN1QAnEY.mjs +460 -0
  446. package/dist/errors-BN1QAnEY.mjs.map +1 -0
  447. package/dist/errors-Bt3goF8I.mjs +120 -0
  448. package/dist/errors-Bt3goF8I.mjs.map +1 -0
  449. package/dist/escape-BveidMa2.mjs +9 -0
  450. package/dist/escape-BveidMa2.mjs.map +1 -0
  451. package/dist/fence-Bb_IbCxI.mjs +162 -0
  452. package/dist/fence-Bb_IbCxI.mjs.map +1 -0
  453. package/dist/field-defs-cache-CsZctvbu.mjs +77 -0
  454. package/dist/field-defs-cache-CsZctvbu.mjs.map +1 -0
  455. package/dist/field-map-6m9rF49t.mjs +83 -0
  456. package/dist/field-map-6m9rF49t.mjs.map +1 -0
  457. package/dist/focal-point-CZ3d1wK5.mjs +23 -0
  458. package/dist/focal-point-CZ3d1wK5.mjs.map +1 -0
  459. package/dist/fts-manager-CCaZTp8y.mjs +443 -0
  460. package/dist/fts-manager-CCaZTp8y.mjs.map +1 -0
  461. package/dist/gc-xowRjczI.mjs +75 -0
  462. package/dist/gc-xowRjczI.mjs.map +1 -0
  463. package/dist/hash-COVK27Pc.mjs +37 -0
  464. package/dist/hash-COVK27Pc.mjs.map +1 -0
  465. package/dist/hook-result-CYSk0XFe.d.mts +31 -0
  466. package/dist/hook-result-CYSk0XFe.d.mts.map +1 -0
  467. package/dist/hreflang-CChPV7jx.mjs +105 -0
  468. package/dist/hreflang-CChPV7jx.mjs.map +1 -0
  469. package/dist/hreflang-DRslq3QI.d.mts +50 -0
  470. package/dist/hreflang-DRslq3QI.d.mts.map +1 -0
  471. package/dist/http-route-dispatch-CAdp2onn.mjs +339 -0
  472. package/dist/http-route-dispatch-CAdp2onn.mjs.map +1 -0
  473. package/dist/identity-NVTOOQyq.mjs +35 -0
  474. package/dist/identity-NVTOOQyq.mjs.map +1 -0
  475. package/dist/import-wpSO2N0x.mjs +2020 -0
  476. package/dist/import-wpSO2N0x.mjs.map +1 -0
  477. package/dist/index-CDs2wq4X.d.mts +623 -0
  478. package/dist/index-CDs2wq4X.d.mts.map +1 -0
  479. package/dist/index.d.mts +24 -24
  480. package/dist/index.mjs +103 -101
  481. package/dist/install-finalization-D9R9R-W8.mjs +58 -0
  482. package/dist/install-finalization-D9R9R-W8.mjs.map +1 -0
  483. package/dist/keys-Bck6LBfF.mjs +61 -0
  484. package/dist/keys-Bck6LBfF.mjs.map +1 -0
  485. package/dist/kinds-CYmRESWj.mjs +974 -0
  486. package/dist/kinds-CYmRESWj.mjs.map +1 -0
  487. package/dist/lifecycle-C815ZQfV.mjs +25 -0
  488. package/dist/lifecycle-C815ZQfV.mjs.map +1 -0
  489. package/dist/load-D99axixL.mjs +28 -0
  490. package/dist/load-D99axixL.mjs.map +1 -0
  491. package/dist/loader-CrRPfkHS.mjs +1197 -0
  492. package/dist/loader-CrRPfkHS.mjs.map +1 -0
  493. package/dist/loops-DMKlygqX.mjs +203 -0
  494. package/dist/loops-DMKlygqX.mjs.map +1 -0
  495. package/dist/manifest-builder-BQzCHNgB.mjs +189 -0
  496. package/dist/manifest-builder-BQzCHNgB.mjs.map +1 -0
  497. package/dist/manifest-schema-Ci2gmd0u.mjs +492 -0
  498. package/dist/manifest-schema-Ci2gmd0u.mjs.map +1 -0
  499. package/dist/media/image-endpoint.mjs +1 -1
  500. package/dist/media/index.d.mts +1 -1
  501. package/dist/media/index.mjs +4 -4
  502. package/dist/media/local-runtime.d.mts +14 -14
  503. package/dist/media/local-runtime.mjs +6 -6
  504. package/dist/media-BUQePMxP.mjs +373 -0
  505. package/dist/media-BUQePMxP.mjs.map +1 -0
  506. package/dist/media-DH8ibNlY.mjs +294 -0
  507. package/dist/media-DH8ibNlY.mjs.map +1 -0
  508. package/dist/media-OEIQ3bVc.mjs +408 -0
  509. package/dist/media-OEIQ3bVc.mjs.map +1 -0
  510. package/dist/media-allowlist-pYtaBA95.mjs +44 -0
  511. package/dist/media-allowlist-pYtaBA95.mjs.map +1 -0
  512. package/dist/media-folders-Bf8_s4de.mjs +210 -0
  513. package/dist/media-folders-Bf8_s4de.mjs.map +1 -0
  514. package/dist/media-url-C6klEuNd.mjs +43 -0
  515. package/dist/media-url-C6klEuNd.mjs.map +1 -0
  516. package/dist/media-usage-D7Y64m6v.mjs +1629 -0
  517. package/dist/media-usage-D7Y64m6v.mjs.map +1 -0
  518. package/dist/media-usage-activation-DrqbmgLA.mjs +78 -0
  519. package/dist/media-usage-activation-DrqbmgLA.mjs.map +1 -0
  520. package/dist/media-usage-work-DommYhYA.mjs +152 -0
  521. package/dist/media-usage-work-DommYhYA.mjs.map +1 -0
  522. package/dist/media-usage-work-HU63hNDu.mjs +586 -0
  523. package/dist/media-usage-work-HU63hNDu.mjs.map +1 -0
  524. package/dist/menus-BQfusWEC.mjs +3608 -0
  525. package/dist/menus-BQfusWEC.mjs.map +1 -0
  526. package/dist/menus-BtwjQt5s.mjs +753 -0
  527. package/dist/menus-BtwjQt5s.mjs.map +1 -0
  528. package/dist/menus-p_M1V7J_.mjs +139 -0
  529. package/dist/menus-p_M1V7J_.mjs.map +1 -0
  530. package/dist/migrations/index.d.mts +1 -1
  531. package/dist/migrations/index.mjs +3 -3
  532. package/dist/mime-C94qBG-P.mjs +36 -0
  533. package/dist/mime-C94qBG-P.mjs.map +1 -0
  534. package/dist/mode-DpYW3w6U.mjs +23 -0
  535. package/dist/mode-DpYW3w6U.mjs.map +1 -0
  536. package/dist/node-sqlite-compat-pWFw0lcc.mjs +46 -0
  537. package/dist/node-sqlite-compat-pWFw0lcc.mjs.map +1 -0
  538. package/dist/normalize-DduyxBjf.mjs +191 -0
  539. package/dist/normalize-DduyxBjf.mjs.map +1 -0
  540. package/dist/oauth-authorization-DAXsH1H9.mjs +274 -0
  541. package/dist/oauth-authorization-DAXsH1H9.mjs.map +1 -0
  542. package/dist/oauth-clients-DENiDQri.mjs +266 -0
  543. package/dist/oauth-clients-DENiDQri.mjs.map +1 -0
  544. package/dist/oauth-state-store-y8mEYVq9.mjs +50 -0
  545. package/dist/oauth-state-store-y8mEYVq9.mjs.map +1 -0
  546. package/dist/oauth-user-lookup-CtTYAy-O.mjs +26 -0
  547. package/dist/oauth-user-lookup-CtTYAy-O.mjs.map +1 -0
  548. package/dist/object-cache/memory.d.mts +1 -1
  549. package/dist/options-BYa1FgIM.d.mts +81 -0
  550. package/dist/options-BYa1FgIM.d.mts.map +1 -0
  551. package/dist/page/index.d.mts +2 -2
  552. package/dist/page/index.mjs +5 -5
  553. package/dist/parse-CORGGhHf.mjs +81 -0
  554. package/dist/parse-CORGGhHf.mjs.map +1 -0
  555. package/dist/parse-avNM1xWV.d.mts +168 -0
  556. package/dist/parse-avNM1xWV.d.mts.map +1 -0
  557. package/dist/passkey-config-Dih5YeIS.mjs +46 -0
  558. package/dist/passkey-config-Dih5YeIS.mjs.map +1 -0
  559. package/dist/paths-d51RFm8M.mjs +77 -0
  560. package/dist/paths-d51RFm8M.mjs.map +1 -0
  561. package/dist/patterns-CoqlXUvk.mjs +145 -0
  562. package/dist/patterns-CoqlXUvk.mjs.map +1 -0
  563. package/dist/placeholder-D2aksPMF.d.mts +306 -0
  564. package/dist/placeholder-D2aksPMF.d.mts.map +1 -0
  565. package/dist/plan-DqeZKuaR.mjs +135 -0
  566. package/dist/plan-DqeZKuaR.mjs.map +1 -0
  567. package/dist/plugin-test-runtime.d.mts +14 -14
  568. package/dist/plugin-test-runtime.mjs +110 -107
  569. package/dist/plugin-types.d.mts +2 -2
  570. package/dist/plugin-utils.d.mts +12 -12
  571. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  572. package/dist/plugins/adapt-sandbox-entry.mjs +3 -3
  573. package/dist/plugins/host.d.mts +5 -5
  574. package/dist/plugins/host.mjs +42 -41
  575. package/dist/plugins-Bb7oqjQA.mjs +277 -0
  576. package/dist/plugins-Bb7oqjQA.mjs.map +1 -0
  577. package/dist/policy-BcEqut3n.mjs +45 -0
  578. package/dist/policy-BcEqut3n.mjs.map +1 -0
  579. package/dist/portable-text-DXE8ymtD.mjs +307 -0
  580. package/dist/portable-text-DXE8ymtD.mjs.map +1 -0
  581. package/dist/preview-DEDWbwA_.mjs +107 -0
  582. package/dist/preview-DEDWbwA_.mjs.map +1 -0
  583. package/dist/protocol-BJbTzvwl.d.mts +61 -0
  584. package/dist/protocol-BJbTzvwl.d.mts.map +1 -0
  585. package/dist/public-submission-D9c9S14m.mjs +250 -0
  586. package/dist/public-submission-D9c9S14m.mjs.map +1 -0
  587. package/dist/public-url-CIRe-2T6.mjs +101 -0
  588. package/dist/public-url-CIRe-2T6.mjs.map +1 -0
  589. package/dist/query-BzifXlPS.mjs +1156 -0
  590. package/dist/query-BzifXlPS.mjs.map +1 -0
  591. package/dist/query-OzMJ6vJP.mjs +41 -0
  592. package/dist/query-OzMJ6vJP.mjs.map +1 -0
  593. package/dist/rate-limit-Csp60Vik.mjs +120 -0
  594. package/dist/rate-limit-Csp60Vik.mjs.map +1 -0
  595. package/dist/receipt-B-aU4hpJ.mjs +43 -0
  596. package/dist/receipt-B-aU4hpJ.mjs.map +1 -0
  597. package/dist/redirect-CDSw1sU3.mjs +17 -0
  598. package/dist/redirect-CDSw1sU3.mjs.map +1 -0
  599. package/dist/redirect-D1ArbO85.mjs +411 -0
  600. package/dist/redirect-D1ArbO85.mjs.map +1 -0
  601. package/dist/redirects-BjTwDTsV.mjs +148 -0
  602. package/dist/redirects-BjTwDTsV.mjs.map +1 -0
  603. package/dist/redirects-Ck50kH3n.mjs +446 -0
  604. package/dist/redirects-Ck50kH3n.mjs.map +1 -0
  605. package/dist/registry/testing.mjs +3 -3
  606. package/dist/registry-CFcNCayZ.mjs +6754 -0
  607. package/dist/registry-CFcNCayZ.mjs.map +1 -0
  608. package/dist/relations-Cfaa1fDl.mjs +776 -0
  609. package/dist/relations-Cfaa1fDl.mjs.map +1 -0
  610. package/dist/request-cache-iHRlHx1d.mjs +104 -0
  611. package/dist/request-cache-iHRlHx1d.mjs.map +1 -0
  612. package/dist/request-context.d.mts +1 -1
  613. package/dist/request-meta-D47mqyev.mjs +141 -0
  614. package/dist/request-meta-D47mqyev.mjs.map +1 -0
  615. package/dist/resolve-BPE8sMvx.mjs +99 -0
  616. package/dist/resolve-BPE8sMvx.mjs.map +1 -0
  617. package/dist/resolve-C0s1E_fH.mjs +199 -0
  618. package/dist/resolve-C0s1E_fH.mjs.map +1 -0
  619. package/dist/revision-j1p4-bOj.mjs +302 -0
  620. package/dist/revision-j1p4-bOj.mjs.map +1 -0
  621. package/dist/route-wire-C9PJV9aL.mjs +197 -0
  622. package/dist/route-wire-C9PJV9aL.mjs.map +1 -0
  623. package/dist/routes-lyYw0mMf.mjs +272 -0
  624. package/dist/routes-lyYw0mMf.mjs.map +1 -0
  625. package/dist/runner-B3eyB9Gb.mjs +6121 -0
  626. package/dist/runner-B3eyB9Gb.mjs.map +1 -0
  627. package/dist/runner-DoYH2Jcu.d.mts +68 -0
  628. package/dist/runner-DoYH2Jcu.d.mts.map +1 -0
  629. package/dist/runtime.d.mts +13 -13
  630. package/dist/runtime.mjs +3 -3
  631. package/dist/schema-BAayK46S.mjs +13 -0
  632. package/dist/schema-BAayK46S.mjs.map +1 -0
  633. package/dist/schema-Gqcl-8G4.mjs +815 -0
  634. package/dist/schema-Gqcl-8G4.mjs.map +1 -0
  635. package/dist/scopes-BqPOKoKf.mjs +34 -0
  636. package/dist/scopes-BqPOKoKf.mjs.map +1 -0
  637. package/dist/search-YJKPIEV6.mjs +448 -0
  638. package/dist/search-YJKPIEV6.mjs.map +1 -0
  639. package/dist/sections-BR_e-wK5.mjs +346 -0
  640. package/dist/sections-BR_e-wK5.mjs.map +1 -0
  641. package/dist/seed/index.d.mts +2 -2
  642. package/dist/seed/index.mjs +37 -31
  643. package/dist/seo/index.d.mts +3 -3
  644. package/dist/seo/index.mjs +22 -21
  645. package/dist/seo/index.mjs.map +1 -1
  646. package/dist/seo-Dsj8hy3j.mjs +114 -0
  647. package/dist/seo-Dsj8hy3j.mjs.map +1 -0
  648. package/dist/seo-XvH4LNNp.mjs +133 -0
  649. package/dist/seo-XvH4LNNp.mjs.map +1 -0
  650. package/dist/service-BsVG05gS.mjs +150 -0
  651. package/dist/service-BsVG05gS.mjs.map +1 -0
  652. package/dist/session-user-DgKbYrlj.mjs +51 -0
  653. package/dist/session-user-DgKbYrlj.mjs.map +1 -0
  654. package/dist/settings-CNPUntkh.mjs +51 -0
  655. package/dist/settings-CNPUntkh.mjs.map +1 -0
  656. package/dist/settings-D5EHi0Tk.mjs +439 -0
  657. package/dist/settings-D5EHi0Tk.mjs.map +1 -0
  658. package/dist/settings-DSfE7wOa.mjs +61 -0
  659. package/dist/settings-DSfE7wOa.mjs.map +1 -0
  660. package/dist/setup-complete-B8W8sJ9v.mjs +26 -0
  661. package/dist/setup-complete-B8W8sJ9v.mjs.map +1 -0
  662. package/dist/setup-nonce-DnSBP260.mjs +25 -0
  663. package/dist/setup-nonce-DnSBP260.mjs.map +1 -0
  664. package/dist/site-settings-NGzdrt7O.mjs +50 -0
  665. package/dist/site-settings-NGzdrt7O.mjs.map +1 -0
  666. package/dist/site-url-D6JB7tLW.mjs +16 -0
  667. package/dist/site-url-D6JB7tLW.mjs.map +1 -0
  668. package/dist/snapshot-CdcwwWAf.mjs +414 -0
  669. package/dist/snapshot-CdcwwWAf.mjs.map +1 -0
  670. package/dist/ssrf-Dv0_tRpo.mjs +406 -0
  671. package/dist/ssrf-Dv0_tRpo.mjs.map +1 -0
  672. package/dist/stage-CUjhED3P.mjs +662 -0
  673. package/dist/stage-CUjhED3P.mjs.map +1 -0
  674. package/dist/staged-C36IWXff.mjs +659 -0
  675. package/dist/staged-C36IWXff.mjs.map +1 -0
  676. package/dist/state-CKouMCSY.mjs +153 -0
  677. package/dist/state-CKouMCSY.mjs.map +1 -0
  678. package/dist/status-lzyj4Uu7.mjs +30 -0
  679. package/dist/status-lzyj4Uu7.mjs.map +1 -0
  680. package/dist/storage/local.d.mts +1 -1
  681. package/dist/storage/local.mjs +1 -1
  682. package/dist/storage/s3.d.mts +1 -1
  683. package/dist/storage/s3.mjs +1 -1
  684. package/dist/storage-query-B-cWcTjJ.d.mts +1594 -0
  685. package/dist/storage-query-B-cWcTjJ.d.mts.map +1 -0
  686. package/dist/tar-DsTXX6ch.mjs +449 -0
  687. package/dist/tar-DsTXX6ch.mjs.map +1 -0
  688. package/dist/target-DLQCwp_Z.mjs +27 -0
  689. package/dist/target-DLQCwp_Z.mjs.map +1 -0
  690. package/dist/taxonomies-BlAjr4BL.mjs +697 -0
  691. package/dist/taxonomies-BlAjr4BL.mjs.map +1 -0
  692. package/dist/taxonomies-Byyo7LOZ.mjs +939 -0
  693. package/dist/taxonomies-Byyo7LOZ.mjs.map +1 -0
  694. package/dist/taxonomy-CKDwM61Y.mjs +525 -0
  695. package/dist/taxonomy-CKDwM61Y.mjs.map +1 -0
  696. package/dist/tokens-BojXlk49.mjs +171 -0
  697. package/dist/tokens-BojXlk49.mjs.map +1 -0
  698. package/dist/transaction-DLPQWik1.mjs +29 -0
  699. package/dist/transaction-DLPQWik1.mjs.map +1 -0
  700. package/dist/transfer-XSTh2BCr.mjs +8706 -0
  701. package/dist/transfer-XSTh2BCr.mjs.map +1 -0
  702. package/dist/transfer-download-DkoCDA9d.mjs +33 -0
  703. package/dist/transfer-download-DkoCDA9d.mjs.map +1 -0
  704. package/dist/transfer-iQ26J-RT.mjs +166 -0
  705. package/dist/transfer-iQ26J-RT.mjs.map +1 -0
  706. package/dist/transformations-C7RQabKQ.mjs +196 -0
  707. package/dist/transformations-C7RQabKQ.mjs.map +1 -0
  708. package/dist/transport-D3RulfD6.mjs +136 -0
  709. package/dist/transport-D3RulfD6.mjs.map +1 -0
  710. package/dist/transport-DhlZlf4D.d.mts +42 -0
  711. package/dist/transport-DhlZlf4D.d.mts.map +1 -0
  712. package/dist/trusted-proxy-B6ECOZJc.mjs +51 -0
  713. package/dist/trusted-proxy-B6ECOZJc.mjs.map +1 -0
  714. package/dist/turnstile-lqUiY7lP.mjs +53 -0
  715. package/dist/turnstile-lqUiY7lP.mjs.map +1 -0
  716. package/dist/types-4Dn9bZhu.mjs +77 -0
  717. package/dist/types-4Dn9bZhu.mjs.map +1 -0
  718. package/dist/types-5LSo7PPx.d.mts +85 -0
  719. package/dist/types-5LSo7PPx.d.mts.map +1 -0
  720. package/dist/types-BQ3hwYJT.d.mts +896 -0
  721. package/dist/types-BQ3hwYJT.d.mts.map +1 -0
  722. package/dist/types-BYEk7qo3.d.mts +198 -0
  723. package/dist/types-BYEk7qo3.d.mts.map +1 -0
  724. package/dist/types-CJKsWVFR.mjs +199 -0
  725. package/dist/types-CJKsWVFR.mjs.map +1 -0
  726. package/dist/types-Ca_w8mmY.d.mts +363 -0
  727. package/dist/types-Ca_w8mmY.d.mts.map +1 -0
  728. package/dist/types-CkE41ZAG.mjs +18 -0
  729. package/dist/types-CkE41ZAG.mjs.map +1 -0
  730. package/dist/types-D0aJW2uR.d.mts +1641 -0
  731. package/dist/types-D0aJW2uR.d.mts.map +1 -0
  732. package/dist/types-DbpN4Qto.d.mts +372 -0
  733. package/dist/types-DbpN4Qto.d.mts.map +1 -0
  734. package/dist/types-ILDI1sdY.mjs +16 -0
  735. package/dist/types-ILDI1sdY.mjs.map +1 -0
  736. package/dist/types-OC5c-edM.mjs +22 -0
  737. package/dist/types-OC5c-edM.mjs.map +1 -0
  738. package/dist/types-aOOxRSx6.mjs +103 -0
  739. package/dist/types-aOOxRSx6.mjs.map +1 -0
  740. package/dist/types-m1WbUffD.d.mts +198 -0
  741. package/dist/types-m1WbUffD.d.mts.map +1 -0
  742. package/dist/types-uxLoPBio.d.mts +124 -0
  743. package/dist/types-uxLoPBio.d.mts.map +1 -0
  744. package/dist/types-we5uR-tV.d.mts +287 -0
  745. package/dist/types-we5uR-tV.d.mts.map +1 -0
  746. package/dist/upload-attempts-DduMy6B0.mjs +32 -0
  747. package/dist/upload-attempts-DduMy6B0.mjs.map +1 -0
  748. package/dist/url-pattern-B3EwxAAk.mjs +33 -0
  749. package/dist/url-pattern-B3EwxAAk.mjs.map +1 -0
  750. package/dist/user-ElwQjTQT.mjs +171 -0
  751. package/dist/user-ElwQjTQT.mjs.map +1 -0
  752. package/dist/utils-BlAXmfOG.mjs +439 -0
  753. package/dist/utils-BlAXmfOG.mjs.map +1 -0
  754. package/dist/validate-CH0X5b2c.d.mts +468 -0
  755. package/dist/validate-CH0X5b2c.d.mts.map +1 -0
  756. package/dist/validate-CfgRpcjA.mjs +492 -0
  757. package/dist/validate-CfgRpcjA.mjs.map +1 -0
  758. package/dist/validation-DvYJtv4k.mjs +218 -0
  759. package/dist/validation-DvYJtv4k.mjs.map +1 -0
  760. package/dist/version-DgYjhTud.mjs +9 -0
  761. package/dist/version-DgYjhTud.mjs.map +1 -0
  762. package/dist/version-Dq71scUb.mjs +7 -0
  763. package/dist/version-Dq71scUb.mjs.map +1 -0
  764. package/dist/widgets-ChFIj0be.mjs +126 -0
  765. package/dist/widgets-ChFIj0be.mjs.map +1 -0
  766. package/dist/wxr-taxonomies-CBZMp2YX.mjs +372 -0
  767. package/dist/wxr-taxonomies-CBZMp2YX.mjs.map +1 -0
  768. package/dist/wxr-taxonomies-DlKDpWN1.d.mts +34 -0
  769. package/dist/wxr-taxonomies-DlKDpWN1.d.mts.map +1 -0
  770. package/dist/zod-generator-DmTKI-Ig.mjs +426 -0
  771. package/dist/zod-generator-DmTKI-Ig.mjs.map +1 -0
  772. package/package.json +7 -6
  773. package/src/api/handlers/content.ts +593 -16
  774. package/src/api/handlers/device-flow.ts +74 -21
  775. package/src/api/handlers/index.ts +1 -0
  776. package/src/api/handlers/manifest.ts +79 -5
  777. package/src/api/handlers/media-upload.ts +17 -71
  778. package/src/api/handlers/media.ts +97 -3
  779. package/src/api/handlers/relations.ts +638 -157
  780. package/src/api/handlers/revision.ts +30 -0
  781. package/src/api/handlers/schema.ts +403 -1
  782. package/src/api/handlers/snapshot.ts +257 -3
  783. package/src/api/handlers/staged-references.ts +142 -0
  784. package/src/api/handlers/validate-references.ts +146 -0
  785. package/src/api/schemas/content.ts +13 -0
  786. package/src/api/schemas/relations.ts +54 -44
  787. package/src/api/schemas/schema.ts +14 -0
  788. package/src/astro/integration/routes.ts +15 -19
  789. package/src/astro/integration/vite-config.ts +10 -4
  790. package/src/astro/middleware.ts +1 -0
  791. package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +11 -54
  792. package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
  793. package/src/astro/routes/api/oauth/device/authorize.ts +33 -4
  794. package/src/astro/routes/api/relations/index.ts +4 -4
  795. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +6 -2
  796. package/src/astro/routes/api/setup/index.ts +66 -23
  797. package/src/astro/routes/api/snapshot.ts +2 -1
  798. package/src/astro/types.ts +10 -0
  799. package/src/cleanup.ts +10 -0
  800. package/src/cli/commands/export-seed.ts +510 -89
  801. package/src/components/Columns.astro +3 -1
  802. package/src/components/Cover.astro +3 -1
  803. package/src/components/WidgetArea.astro +3 -2
  804. package/src/database/migrations/086_relations_structural.ts +197 -0
  805. package/src/database/migrations/087_reference_field_relations.ts +407 -0
  806. package/src/database/migrations/runner.ts +4 -0
  807. package/src/database/reference-backfill.ts +141 -0
  808. package/src/database/repositories/content.ts +43 -8
  809. package/src/database/repositories/media.ts +40 -1
  810. package/src/database/repositories/redirect.ts +17 -34
  811. package/src/database/repositories/relation.ts +620 -208
  812. package/src/database/repositories/revision.ts +16 -0
  813. package/src/database/repositories/types.ts +38 -0
  814. package/src/database/transaction.ts +12 -1
  815. package/src/database/types.ts +14 -5
  816. package/src/emdash-runtime.ts +114 -11
  817. package/src/index.ts +11 -0
  818. package/src/loader.ts +169 -22
  819. package/src/mcp/server.ts +13 -48
  820. package/src/query.ts +455 -25
  821. package/src/references/field-map.ts +115 -0
  822. package/src/references/resolve.ts +160 -0
  823. package/src/references/staged.ts +117 -0
  824. package/src/references/types.ts +16 -0
  825. package/src/registry/artifact-fetch.ts +45 -271
  826. package/src/schema/registry.ts +99 -24
  827. package/src/schema/types.ts +58 -0
  828. package/src/schema/zod-generator.ts +67 -1
  829. package/src/seed/apply.ts +841 -103
  830. package/src/seed/types.ts +36 -2
  831. package/src/seed/validate.ts +78 -2
  832. package/src/transfer/analyze/unique-keys.ts +3 -12
  833. package/src/transfer/analyze/validate.ts +65 -39
  834. package/src/transfer/analyze/values.ts +12 -1
  835. package/src/transfer/export/readers.ts +12 -8
  836. package/src/transfer/format/columns.ts +26 -6
  837. package/src/transfer/format/kinds.ts +21 -5
  838. package/src/transfer/import/context.ts +8 -1
  839. package/src/transfer/ops/package-index.ts +1 -1
  840. package/dist/action-token-DYwe4Pk0.mjs +0 -26
  841. package/dist/action-token-DYwe4Pk0.mjs.map +0 -1
  842. package/dist/activation-LOkDM5WT.mjs +0 -382
  843. package/dist/activation-LOkDM5WT.mjs.map +0 -1
  844. package/dist/adapters-B64LbYcB.d.mts +0 -171
  845. package/dist/adapters-B64LbYcB.d.mts.map +0 -1
  846. package/dist/allowed-origins-CHB8oZNM.mjs +0 -116
  847. package/dist/allowed-origins-CHB8oZNM.mjs.map +0 -1
  848. package/dist/api-cFFZpyS0.mjs +0 -4718
  849. package/dist/api-cFFZpyS0.mjs.map +0 -1
  850. package/dist/api-tokens-s4i4aUp_.mjs +0 -166
  851. package/dist/api-tokens-s4i4aUp_.mjs.map +0 -1
  852. package/dist/apply-CoT603H3.mjs +0 -1163
  853. package/dist/apply-CoT603H3.mjs.map +0 -1
  854. package/dist/approvals-CqMfNxak.mjs +0 -460
  855. package/dist/approvals-CqMfNxak.mjs.map +0 -1
  856. package/dist/artifact-fetch-DZMOGZ3-.mjs +0 -818
  857. package/dist/artifact-fetch-DZMOGZ3-.mjs.map +0 -1
  858. package/dist/astro/routes/api/relations/_id_/translations.d.mts +0 -8
  859. package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +0 -1
  860. package/dist/astro/routes/api/relations/_id_/translations.mjs +0 -47
  861. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +0 -1
  862. package/dist/audit-RfCugiSB.mjs +0 -127
  863. package/dist/audit-RfCugiSB.mjs.map +0 -1
  864. package/dist/authoritative-records-CoJvBXAD.mjs +0 -5172
  865. package/dist/authoritative-records-CoJvBXAD.mjs.map +0 -1
  866. package/dist/authorize-seCifOMJ.mjs +0 -49
  867. package/dist/authorize-seCifOMJ.mjs.map +0 -1
  868. package/dist/backup-CBu0LrXf.mjs +0 -246
  869. package/dist/backup-CBu0LrXf.mjs.map +0 -1
  870. package/dist/block-type-registry-DUI_3KxT.mjs +0 -6709
  871. package/dist/block-type-registry-DUI_3KxT.mjs.map +0 -1
  872. package/dist/block-types-BmZmLmAD.mjs +0 -132
  873. package/dist/block-types-BmZmLmAD.mjs.map +0 -1
  874. package/dist/block-values-C_VIPr5t.mjs +0 -175
  875. package/dist/block-values-C_VIPr5t.mjs.map +0 -1
  876. package/dist/byline-DYmkXqvo.mjs +0 -909
  877. package/dist/byline-DYmkXqvo.mjs.map +0 -1
  878. package/dist/byline-fields-D28AT-Fh.mjs +0 -123
  879. package/dist/byline-fields-D28AT-Fh.mjs.map +0 -1
  880. package/dist/byline-registry-gnKscbQX.mjs +0 -406
  881. package/dist/byline-registry-gnKscbQX.mjs.map +0 -1
  882. package/dist/bylines-BPwJqoYH.mjs +0 -232
  883. package/dist/bylines-BPwJqoYH.mjs.map +0 -1
  884. package/dist/bylines-ukLaYpVZ.mjs +0 -214
  885. package/dist/bylines-ukLaYpVZ.mjs.map +0 -1
  886. package/dist/cache-m7UEkRFV.mjs +0 -108
  887. package/dist/cache-m7UEkRFV.mjs.map +0 -1
  888. package/dist/canonical-YhEQezjg.mjs +0 -174
  889. package/dist/canonical-YhEQezjg.mjs.map +0 -1
  890. package/dist/capture-triggers-kJyl_yyM.mjs +0 -362
  891. package/dist/capture-triggers-kJyl_yyM.mjs.map +0 -1
  892. package/dist/challenge-store-ppU6Uv13.mjs +0 -51
  893. package/dist/challenge-store-ppU6Uv13.mjs.map +0 -1
  894. package/dist/checksum-B2IINIlN.mjs +0 -162
  895. package/dist/checksum-B2IINIlN.mjs.map +0 -1
  896. package/dist/chrome-tags-DApCQSIk.mjs +0 -24
  897. package/dist/chrome-tags-DApCQSIk.mjs.map +0 -1
  898. package/dist/chunks-Dms7Uxbt.mjs +0 -25
  899. package/dist/chunks-Dms7Uxbt.mjs.map +0 -1
  900. package/dist/collection-deletion-BIm28mo3.mjs +0 -436
  901. package/dist/collection-deletion-BIm28mo3.mjs.map +0 -1
  902. package/dist/collection-deletion-processor-Br6rxs3u.mjs +0 -217
  903. package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +0 -1
  904. package/dist/collection-slugs-cache-CjGk__zp.mjs +0 -85
  905. package/dist/collection-slugs-cache-CjGk__zp.mjs.map +0 -1
  906. package/dist/comment-CrBl22OF.mjs +0 -313
  907. package/dist/comment-CrBl22OF.mjs.map +0 -1
  908. package/dist/comment-reaction-JEQ2Fpd8.mjs +0 -85
  909. package/dist/comment-reaction-JEQ2Fpd8.mjs.map +0 -1
  910. package/dist/comments-2ah9du9y.mjs +0 -195
  911. package/dist/comments-2ah9du9y.mjs.map +0 -1
  912. package/dist/comments-fHZ8ON9O.mjs +0 -99
  913. package/dist/comments-fHZ8ON9O.mjs.map +0 -1
  914. package/dist/components-CXbq7CSM.mjs +0 -108
  915. package/dist/components-CXbq7CSM.mjs.map +0 -1
  916. package/dist/config-5ii2haYu.d.mts +0 -6528
  917. package/dist/config-5ii2haYu.d.mts.map +0 -1
  918. package/dist/config-IhybvkIQ.mjs +0 -242
  919. package/dist/config-IhybvkIQ.mjs.map +0 -1
  920. package/dist/config-Py43JK9r.d.mts +0 -39
  921. package/dist/config-Py43JK9r.d.mts.map +0 -1
  922. package/dist/content-DFaIEDj9.mjs +0 -2281
  923. package/dist/content-DFaIEDj9.mjs.map +0 -1
  924. package/dist/content-list-query-Dra4Dalc.d.mts +0 -26
  925. package/dist/content-list-query-Dra4Dalc.d.mts.map +0 -1
  926. package/dist/content-policy-DFNw91-d.mjs +0 -46
  927. package/dist/content-policy-DFNw91-d.mjs.map +0 -1
  928. package/dist/content-repair-Q8IUrpLL.mjs +0 -442
  929. package/dist/content-repair-Q8IUrpLL.mjs.map +0 -1
  930. package/dist/context-BeGccdUX.mjs +0 -1921
  931. package/dist/context-BeGccdUX.mjs.map +0 -1
  932. package/dist/cron-7DCJwPXq.mjs +0 -284
  933. package/dist/cron-7DCJwPXq.mjs.map +0 -1
  934. package/dist/dashboard-DjrB-xxZ.mjs +0 -151
  935. package/dist/dashboard-DjrB-xxZ.mjs.map +0 -1
  936. package/dist/default-DQ6vsviu.mjs +0 -81
  937. package/dist/default-DQ6vsviu.mjs.map +0 -1
  938. package/dist/deferred-tasks-BPxXUB4x.d.mts +0 -9
  939. package/dist/deferred-tasks-BPxXUB4x.d.mts.map +0 -1
  940. package/dist/dev-typegen-CZaPLl3V.mjs +0 -29
  941. package/dist/dev-typegen-CZaPLl3V.mjs.map +0 -1
  942. package/dist/device-flow-CRd6DXmW.mjs +0 -466
  943. package/dist/device-flow-CRd6DXmW.mjs.map +0 -1
  944. package/dist/digest-BarSh-pN.mjs +0 -194
  945. package/dist/digest-BarSh-pN.mjs.map +0 -1
  946. package/dist/direct-executor-BmuFJJZV.mjs +0 -104
  947. package/dist/direct-executor-BmuFJJZV.mjs.map +0 -1
  948. package/dist/dist-BNwANFJR.mjs +0 -810
  949. package/dist/dist-BNwANFJR.mjs.map +0 -1
  950. package/dist/email-console-bJn3ctqA.mjs +0 -50
  951. package/dist/email-console-bJn3ctqA.mjs.map +0 -1
  952. package/dist/email-locale-CN6WAMx0.mjs +0 -25
  953. package/dist/email-locale-CN6WAMx0.mjs.map +0 -1
  954. package/dist/emdash-runtime-DAjghyEG.mjs +0 -4186
  955. package/dist/emdash-runtime-DAjghyEG.mjs.map +0 -1
  956. package/dist/enrich-Dl3kZ-lP.mjs +0 -194
  957. package/dist/enrich-Dl3kZ-lP.mjs.map +0 -1
  958. package/dist/entry-lock-BJYdBfXb.mjs +0 -1097
  959. package/dist/entry-lock-BJYdBfXb.mjs.map +0 -1
  960. package/dist/entry-lock-DHQOxN7R.mjs +0 -163
  961. package/dist/entry-lock-DHQOxN7R.mjs.map +0 -1
  962. package/dist/entry-lock-DVhCt49A.d.mts +0 -4368
  963. package/dist/entry-lock-DVhCt49A.d.mts.map +0 -1
  964. package/dist/entry-locks-D0foLdjQ.mjs +0 -167
  965. package/dist/entry-locks-D0foLdjQ.mjs.map +0 -1
  966. package/dist/error-CfvOHP0M.mjs +0 -90
  967. package/dist/error-CfvOHP0M.mjs.map +0 -1
  968. package/dist/errors-BF0_LFhW.mjs +0 -460
  969. package/dist/errors-BF0_LFhW.mjs.map +0 -1
  970. package/dist/errors-DgE1zJGG.mjs +0 -120
  971. package/dist/errors-DgE1zJGG.mjs.map +0 -1
  972. package/dist/escape-CuaZhZvL.mjs +0 -9
  973. package/dist/escape-CuaZhZvL.mjs.map +0 -1
  974. package/dist/fence-CMDXJYc_.mjs +0 -162
  975. package/dist/fence-CMDXJYc_.mjs.map +0 -1
  976. package/dist/field-defs-cache-HIgBbqZZ.mjs +0 -77
  977. package/dist/field-defs-cache-HIgBbqZZ.mjs.map +0 -1
  978. package/dist/focal-point-Gr34o-4o.mjs +0 -23
  979. package/dist/focal-point-Gr34o-4o.mjs.map +0 -1
  980. package/dist/fts-manager-S-K0laoS.mjs +0 -443
  981. package/dist/fts-manager-S-K0laoS.mjs.map +0 -1
  982. package/dist/gc-DjKY0Ay1.mjs +0 -75
  983. package/dist/gc-DjKY0Ay1.mjs.map +0 -1
  984. package/dist/hash-SDAW6zC-.mjs +0 -37
  985. package/dist/hash-SDAW6zC-.mjs.map +0 -1
  986. package/dist/hook-result-B5bXDgS2.d.mts +0 -31
  987. package/dist/hook-result-B5bXDgS2.d.mts.map +0 -1
  988. package/dist/hreflang-D5uNnsGJ.d.mts +0 -50
  989. package/dist/hreflang-D5uNnsGJ.d.mts.map +0 -1
  990. package/dist/hreflang-DMFBL2eb.mjs +0 -105
  991. package/dist/hreflang-DMFBL2eb.mjs.map +0 -1
  992. package/dist/http-route-dispatch-BitqzwMy.mjs +0 -339
  993. package/dist/http-route-dispatch-BitqzwMy.mjs.map +0 -1
  994. package/dist/identity-IyNWwXr6.mjs +0 -35
  995. package/dist/identity-IyNWwXr6.mjs.map +0 -1
  996. package/dist/import-C3JZplWq.mjs +0 -2020
  997. package/dist/import-C3JZplWq.mjs.map +0 -1
  998. package/dist/index-D-hdtLe8.d.mts +0 -623
  999. package/dist/index-D-hdtLe8.d.mts.map +0 -1
  1000. package/dist/install-finalization-DfM1fj5x.mjs +0 -58
  1001. package/dist/install-finalization-DfM1fj5x.mjs.map +0 -1
  1002. package/dist/keys-yxLm5l35.mjs +0 -61
  1003. package/dist/keys-yxLm5l35.mjs.map +0 -1
  1004. package/dist/kinds-CRu_T5T5.mjs +0 -961
  1005. package/dist/kinds-CRu_T5T5.mjs.map +0 -1
  1006. package/dist/lifecycle-BzeGPeQ-.mjs +0 -25
  1007. package/dist/lifecycle-BzeGPeQ-.mjs.map +0 -1
  1008. package/dist/load-XgJiE6_3.mjs +0 -28
  1009. package/dist/load-XgJiE6_3.mjs.map +0 -1
  1010. package/dist/loader-BzqeR1ZN.mjs +0 -1086
  1011. package/dist/loader-BzqeR1ZN.mjs.map +0 -1
  1012. package/dist/loops-BQSzv5Zn.mjs +0 -203
  1013. package/dist/loops-BQSzv5Zn.mjs.map +0 -1
  1014. package/dist/manifest-builder-B8zR-73J.mjs +0 -189
  1015. package/dist/manifest-builder-B8zR-73J.mjs.map +0 -1
  1016. package/dist/manifest-schema-CY3zng_M.mjs +0 -492
  1017. package/dist/manifest-schema-CY3zng_M.mjs.map +0 -1
  1018. package/dist/media-Pu1L6xir.mjs +0 -408
  1019. package/dist/media-Pu1L6xir.mjs.map +0 -1
  1020. package/dist/media-Qp5S3eH3.mjs +0 -355
  1021. package/dist/media-Qp5S3eH3.mjs.map +0 -1
  1022. package/dist/media-allowlist-BSoa9Vvm.mjs +0 -44
  1023. package/dist/media-allowlist-BSoa9Vvm.mjs.map +0 -1
  1024. package/dist/media-folders-BE0oo2eX.mjs +0 -210
  1025. package/dist/media-folders-BE0oo2eX.mjs.map +0 -1
  1026. package/dist/media-h7tOiDLj.mjs +0 -221
  1027. package/dist/media-h7tOiDLj.mjs.map +0 -1
  1028. package/dist/media-url-jArBpzIG.mjs +0 -43
  1029. package/dist/media-url-jArBpzIG.mjs.map +0 -1
  1030. package/dist/media-usage-My-Vi-ex.mjs +0 -1629
  1031. package/dist/media-usage-My-Vi-ex.mjs.map +0 -1
  1032. package/dist/media-usage-activation-HKp7zk7W.mjs +0 -78
  1033. package/dist/media-usage-activation-HKp7zk7W.mjs.map +0 -1
  1034. package/dist/media-usage-work-C2OZLCAd.mjs +0 -586
  1035. package/dist/media-usage-work-C2OZLCAd.mjs.map +0 -1
  1036. package/dist/media-usage-work-DwUNbgvS.mjs +0 -152
  1037. package/dist/media-usage-work-DwUNbgvS.mjs.map +0 -1
  1038. package/dist/menus-BM7BPLOb.mjs +0 -139
  1039. package/dist/menus-BM7BPLOb.mjs.map +0 -1
  1040. package/dist/menus-ITeAbcIF.mjs +0 -753
  1041. package/dist/menus-ITeAbcIF.mjs.map +0 -1
  1042. package/dist/menus-TsSGmSR4.mjs +0 -3608
  1043. package/dist/menus-TsSGmSR4.mjs.map +0 -1
  1044. package/dist/mime-ChLqYwDk.mjs +0 -36
  1045. package/dist/mime-ChLqYwDk.mjs.map +0 -1
  1046. package/dist/mode-CCuKXUci.mjs +0 -23
  1047. package/dist/mode-CCuKXUci.mjs.map +0 -1
  1048. package/dist/node-sqlite-compat-CONMsl-x.mjs +0 -46
  1049. package/dist/node-sqlite-compat-CONMsl-x.mjs.map +0 -1
  1050. package/dist/normalize-CO2P8-iE.mjs +0 -191
  1051. package/dist/normalize-CO2P8-iE.mjs.map +0 -1
  1052. package/dist/oauth-authorization-DlMIL5_h.mjs +0 -274
  1053. package/dist/oauth-authorization-DlMIL5_h.mjs.map +0 -1
  1054. package/dist/oauth-clients-Djq9r_KP.mjs +0 -266
  1055. package/dist/oauth-clients-Djq9r_KP.mjs.map +0 -1
  1056. package/dist/oauth-state-store-BbjnZXNC.mjs +0 -50
  1057. package/dist/oauth-state-store-BbjnZXNC.mjs.map +0 -1
  1058. package/dist/oauth-user-lookup-vue9a64A.mjs +0 -26
  1059. package/dist/oauth-user-lookup-vue9a64A.mjs.map +0 -1
  1060. package/dist/options-SQCHQCPH.d.mts +0 -81
  1061. package/dist/options-SQCHQCPH.d.mts.map +0 -1
  1062. package/dist/parse-CVgO-Qai.d.mts +0 -168
  1063. package/dist/parse-CVgO-Qai.d.mts.map +0 -1
  1064. package/dist/parse-DY6OD1j_.mjs +0 -81
  1065. package/dist/parse-DY6OD1j_.mjs.map +0 -1
  1066. package/dist/passkey-config-X_H8128a.mjs +0 -46
  1067. package/dist/passkey-config-X_H8128a.mjs.map +0 -1
  1068. package/dist/paths-JxokKIbr.mjs +0 -77
  1069. package/dist/paths-JxokKIbr.mjs.map +0 -1
  1070. package/dist/patterns-BhAvqO0S.mjs +0 -145
  1071. package/dist/patterns-BhAvqO0S.mjs.map +0 -1
  1072. package/dist/placeholder-MSEd8gty.d.mts +0 -306
  1073. package/dist/placeholder-MSEd8gty.d.mts.map +0 -1
  1074. package/dist/plan-xjcWrAah.mjs +0 -135
  1075. package/dist/plan-xjcWrAah.mjs.map +0 -1
  1076. package/dist/plugins-DUXUt8B9.mjs +0 -277
  1077. package/dist/plugins-DUXUt8B9.mjs.map +0 -1
  1078. package/dist/policy-CUvwAARc.mjs +0 -45
  1079. package/dist/policy-CUvwAARc.mjs.map +0 -1
  1080. package/dist/portable-text-5O_ZGUjB.mjs +0 -307
  1081. package/dist/portable-text-5O_ZGUjB.mjs.map +0 -1
  1082. package/dist/preview-CIUcPYr6.mjs +0 -107
  1083. package/dist/preview-CIUcPYr6.mjs.map +0 -1
  1084. package/dist/protocol-B97DZaFr.d.mts +0 -61
  1085. package/dist/protocol-B97DZaFr.d.mts.map +0 -1
  1086. package/dist/public-submission-BFBUrqst.mjs +0 -250
  1087. package/dist/public-submission-BFBUrqst.mjs.map +0 -1
  1088. package/dist/public-url-Bn7U0D7-.mjs +0 -101
  1089. package/dist/public-url-Bn7U0D7-.mjs.map +0 -1
  1090. package/dist/query-B48peoRT.mjs +0 -890
  1091. package/dist/query-B48peoRT.mjs.map +0 -1
  1092. package/dist/query-C4IH0uhR.mjs +0 -41
  1093. package/dist/query-C4IH0uhR.mjs.map +0 -1
  1094. package/dist/rate-limit-BZ6nybgc.mjs +0 -120
  1095. package/dist/rate-limit-BZ6nybgc.mjs.map +0 -1
  1096. package/dist/receipt-B4wJj5Jq.mjs +0 -43
  1097. package/dist/receipt-B4wJj5Jq.mjs.map +0 -1
  1098. package/dist/redirect-Cd1E7VUt.mjs +0 -17
  1099. package/dist/redirect-Cd1E7VUt.mjs.map +0 -1
  1100. package/dist/redirect-iJf5fltD.mjs +0 -415
  1101. package/dist/redirect-iJf5fltD.mjs.map +0 -1
  1102. package/dist/redirects-CYu1u1aK.mjs +0 -446
  1103. package/dist/redirects-CYu1u1aK.mjs.map +0 -1
  1104. package/dist/redirects-Cv9apQKj.mjs +0 -148
  1105. package/dist/redirects-Cv9apQKj.mjs.map +0 -1
  1106. package/dist/relation-M4NUCb0b.mjs +0 -334
  1107. package/dist/relation-M4NUCb0b.mjs.map +0 -1
  1108. package/dist/relations-CCif47Oq.mjs +0 -403
  1109. package/dist/relations-CCif47Oq.mjs.map +0 -1
  1110. package/dist/relations-CK9CYUyr.mjs +0 -310
  1111. package/dist/relations-CK9CYUyr.mjs.map +0 -1
  1112. package/dist/request-cache-DzLYKm_x.mjs +0 -104
  1113. package/dist/request-cache-DzLYKm_x.mjs.map +0 -1
  1114. package/dist/request-meta-sZXt3sRo.mjs +0 -141
  1115. package/dist/request-meta-sZXt3sRo.mjs.map +0 -1
  1116. package/dist/resolve-2WbQsCvT.mjs +0 -199
  1117. package/dist/resolve-2WbQsCvT.mjs.map +0 -1
  1118. package/dist/route-wire--1hLuACz.mjs +0 -197
  1119. package/dist/route-wire--1hLuACz.mjs.map +0 -1
  1120. package/dist/routes-CUsM40Cc.mjs +0 -272
  1121. package/dist/routes-CUsM40Cc.mjs.map +0 -1
  1122. package/dist/runner-1y4J9fJB.mjs +0 -5742
  1123. package/dist/runner-1y4J9fJB.mjs.map +0 -1
  1124. package/dist/runner-D5_LzKXI.d.mts +0 -68
  1125. package/dist/runner-D5_LzKXI.d.mts.map +0 -1
  1126. package/dist/schema-BABiRdsH.mjs +0 -13
  1127. package/dist/schema-BABiRdsH.mjs.map +0 -1
  1128. package/dist/schema-Du3MzCG0.mjs +0 -446
  1129. package/dist/schema-Du3MzCG0.mjs.map +0 -1
  1130. package/dist/scopes-Dbk-ElhT.mjs +0 -34
  1131. package/dist/scopes-Dbk-ElhT.mjs.map +0 -1
  1132. package/dist/search-Bt1PL1jf.mjs +0 -448
  1133. package/dist/search-Bt1PL1jf.mjs.map +0 -1
  1134. package/dist/sections-Ddptx_o9.mjs +0 -346
  1135. package/dist/sections-Ddptx_o9.mjs.map +0 -1
  1136. package/dist/seo-CZT2oLtT.mjs +0 -114
  1137. package/dist/seo-CZT2oLtT.mjs.map +0 -1
  1138. package/dist/seo-D5w3-Azy.mjs +0 -133
  1139. package/dist/seo-D5w3-Azy.mjs.map +0 -1
  1140. package/dist/service-DuykXPyW.mjs +0 -150
  1141. package/dist/service-DuykXPyW.mjs.map +0 -1
  1142. package/dist/session-user-BhaVp8w0.mjs +0 -51
  1143. package/dist/session-user-BhaVp8w0.mjs.map +0 -1
  1144. package/dist/settings-2xNYr90o.mjs +0 -51
  1145. package/dist/settings-2xNYr90o.mjs.map +0 -1
  1146. package/dist/settings-CgjRWGW9.mjs +0 -439
  1147. package/dist/settings-CgjRWGW9.mjs.map +0 -1
  1148. package/dist/settings-DYidIB26.mjs +0 -61
  1149. package/dist/settings-DYidIB26.mjs.map +0 -1
  1150. package/dist/setup-complete-bOogcHWG.mjs +0 -26
  1151. package/dist/setup-complete-bOogcHWG.mjs.map +0 -1
  1152. package/dist/setup-nonce-0EGuKM4s.mjs +0 -25
  1153. package/dist/setup-nonce-0EGuKM4s.mjs.map +0 -1
  1154. package/dist/site-settings-DOgRUoFX.mjs +0 -50
  1155. package/dist/site-settings-DOgRUoFX.mjs.map +0 -1
  1156. package/dist/site-url-BU_bbxwj.mjs +0 -16
  1157. package/dist/site-url-BU_bbxwj.mjs.map +0 -1
  1158. package/dist/snapshot-CugwUqKQ.mjs +0 -237
  1159. package/dist/snapshot-CugwUqKQ.mjs.map +0 -1
  1160. package/dist/ssrf-CJUnJymJ.mjs +0 -406
  1161. package/dist/ssrf-CJUnJymJ.mjs.map +0 -1
  1162. package/dist/stage-DgrBz_du.mjs +0 -662
  1163. package/dist/stage-DgrBz_du.mjs.map +0 -1
  1164. package/dist/state-DDiPySSG.mjs +0 -153
  1165. package/dist/state-DDiPySSG.mjs.map +0 -1
  1166. package/dist/status-DZKIG4a9.mjs +0 -30
  1167. package/dist/status-DZKIG4a9.mjs.map +0 -1
  1168. package/dist/storage-query-Bdv7A62k.d.mts +0 -1576
  1169. package/dist/storage-query-Bdv7A62k.d.mts.map +0 -1
  1170. package/dist/tar-_1AgTYFu.mjs +0 -449
  1171. package/dist/tar-_1AgTYFu.mjs.map +0 -1
  1172. package/dist/target-_7pn2Gbg.mjs +0 -27
  1173. package/dist/target-_7pn2Gbg.mjs.map +0 -1
  1174. package/dist/taxonomies-C1IwNe8Q.mjs +0 -697
  1175. package/dist/taxonomies-C1IwNe8Q.mjs.map +0 -1
  1176. package/dist/taxonomies-C_XMoRcX.mjs +0 -939
  1177. package/dist/taxonomies-C_XMoRcX.mjs.map +0 -1
  1178. package/dist/taxonomy-C3Fu1YeH.mjs +0 -525
  1179. package/dist/taxonomy-C3Fu1YeH.mjs.map +0 -1
  1180. package/dist/tokens-u78jETkX.mjs +0 -171
  1181. package/dist/tokens-u78jETkX.mjs.map +0 -1
  1182. package/dist/transaction-BcJO4Tmc.mjs +0 -29
  1183. package/dist/transaction-BcJO4Tmc.mjs.map +0 -1
  1184. package/dist/transfer-BhUCrgDc.mjs +0 -8675
  1185. package/dist/transfer-BhUCrgDc.mjs.map +0 -1
  1186. package/dist/transfer-DIGvR9Af.mjs +0 -166
  1187. package/dist/transfer-DIGvR9Af.mjs.map +0 -1
  1188. package/dist/transfer-download-Pml7RMio.mjs +0 -33
  1189. package/dist/transfer-download-Pml7RMio.mjs.map +0 -1
  1190. package/dist/transformations-9gfpwY65.mjs +0 -196
  1191. package/dist/transformations-9gfpwY65.mjs.map +0 -1
  1192. package/dist/transport-BIfH7_hx.d.mts +0 -42
  1193. package/dist/transport-BIfH7_hx.d.mts.map +0 -1
  1194. package/dist/transport-DKWIq53q.mjs +0 -136
  1195. package/dist/transport-DKWIq53q.mjs.map +0 -1
  1196. package/dist/trusted-proxy-tKiVtyTD.mjs +0 -51
  1197. package/dist/trusted-proxy-tKiVtyTD.mjs.map +0 -1
  1198. package/dist/turnstile-DpsoyOfg.mjs +0 -53
  1199. package/dist/turnstile-DpsoyOfg.mjs.map +0 -1
  1200. package/dist/types-B4sUC2p1.d.mts +0 -198
  1201. package/dist/types-B4sUC2p1.d.mts.map +0 -1
  1202. package/dist/types-B7Lmsh1E.d.mts +0 -887
  1203. package/dist/types-B7Lmsh1E.d.mts.map +0 -1
  1204. package/dist/types-BZakh7Ym.mjs +0 -22
  1205. package/dist/types-BZakh7Ym.mjs.map +0 -1
  1206. package/dist/types-B_CppEmv.d.mts +0 -264
  1207. package/dist/types-B_CppEmv.d.mts.map +0 -1
  1208. package/dist/types-BcrBrE6-.mjs +0 -159
  1209. package/dist/types-BcrBrE6-.mjs.map +0 -1
  1210. package/dist/types-BkUg2yHx.mjs +0 -92
  1211. package/dist/types-BkUg2yHx.mjs.map +0 -1
  1212. package/dist/types-CAZgq9fO.d.mts +0 -124
  1213. package/dist/types-CAZgq9fO.d.mts.map +0 -1
  1214. package/dist/types-Cd-O03VG.d.mts +0 -363
  1215. package/dist/types-Cd-O03VG.d.mts.map +0 -1
  1216. package/dist/types-Cr-Kg-3D.d.mts +0 -1641
  1217. package/dist/types-Cr-Kg-3D.d.mts.map +0 -1
  1218. package/dist/types-D2fvWd1i.d.mts +0 -359
  1219. package/dist/types-D2fvWd1i.d.mts.map +0 -1
  1220. package/dist/types-D7HUsguf.mjs +0 -77
  1221. package/dist/types-D7HUsguf.mjs.map +0 -1
  1222. package/dist/types-DA1Te3Oy.d.mts +0 -198
  1223. package/dist/types-DA1Te3Oy.d.mts.map +0 -1
  1224. package/dist/types-DhV6Q5bP.mjs +0 -18
  1225. package/dist/types-DhV6Q5bP.mjs.map +0 -1
  1226. package/dist/types-DnnVSl6Y.d.mts +0 -85
  1227. package/dist/types-DnnVSl6Y.d.mts.map +0 -1
  1228. package/dist/types-VT4-BugW.mjs +0 -16
  1229. package/dist/types-VT4-BugW.mjs.map +0 -1
  1230. package/dist/upload-attempts-B68ZGNu9.mjs +0 -32
  1231. package/dist/upload-attempts-B68ZGNu9.mjs.map +0 -1
  1232. package/dist/url-pattern-CCeZMGOh.mjs +0 -33
  1233. package/dist/url-pattern-CCeZMGOh.mjs.map +0 -1
  1234. package/dist/user-DDSL-sGw.mjs +0 -171
  1235. package/dist/user-DDSL-sGw.mjs.map +0 -1
  1236. package/dist/utils-DdhmO9w9.mjs +0 -439
  1237. package/dist/utils-DdhmO9w9.mjs.map +0 -1
  1238. package/dist/validate-CHosPEhs.mjs +0 -453
  1239. package/dist/validate-CHosPEhs.mjs.map +0 -1
  1240. package/dist/validate-CM79QXYE.d.mts +0 -432
  1241. package/dist/validate-CM79QXYE.d.mts.map +0 -1
  1242. package/dist/validation-BFecQczG.mjs +0 -218
  1243. package/dist/validation-BFecQczG.mjs.map +0 -1
  1244. package/dist/version-BRZXVifl.mjs +0 -9
  1245. package/dist/version-BRZXVifl.mjs.map +0 -1
  1246. package/dist/version-DUQDHgrf.mjs +0 -7
  1247. package/dist/version-DUQDHgrf.mjs.map +0 -1
  1248. package/dist/widgets-WdV72brA.mjs +0 -126
  1249. package/dist/widgets-WdV72brA.mjs.map +0 -1
  1250. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +0 -34
  1251. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +0 -1
  1252. package/dist/wxr-taxonomies-DP6ESgMN.mjs +0 -372
  1253. package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +0 -1
  1254. package/dist/zod-generator-D6uE4WiS.mjs +0 -389
  1255. package/dist/zod-generator-D6uE4WiS.mjs.map +0 -1
  1256. package/src/astro/routes/api/relations/[id]/translations.ts +0 -33
  1257. /package/dist/{api-tokens-CE1ECIg0.mjs → api-tokens-FaG1zPsj.mjs} +0 -0
  1258. /package/dist/{ssrf-DpBH7aOt.mjs → ssrf-DZOt8Qof.mjs} +0 -0
@@ -0,0 +1,120 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/transfer/errors.ts
4
+ /**
5
+ * Stable error codes for site transfer (export, analysis, import).
6
+ *
7
+ * Every code is `SCREAMING_SNAKE_CASE` with the `TRANSFER_` prefix and has a
8
+ * fixed HTTP status. `mapErrorStatus` in `api/errors.ts` consults
9
+ * {@link transferErrorStatus} first, so handlers can return these codes in an
10
+ * `ApiResult` and `unwrapResult` picks the right status.
11
+ */
12
+ const TransferErrorCode = {
13
+ TRANSFER_IMPORT_IN_PROGRESS: "TRANSFER_IMPORT_IN_PROGRESS",
14
+ TRANSFER_FENCE_CHECK_FAILED: "TRANSFER_FENCE_CHECK_FAILED",
15
+ TRANSFER_EXPORT_CONCURRENT_WRITES: "TRANSFER_EXPORT_CONCURRENT_WRITES",
16
+ TRANSFER_OPERATION_NOT_FOUND: "TRANSFER_OPERATION_NOT_FOUND",
17
+ TRANSFER_INVALID_STATE: "TRANSFER_INVALID_STATE",
18
+ TRANSFER_LEASE_ACTIVE: "TRANSFER_LEASE_ACTIVE",
19
+ TRANSFER_LEASE_LOST: "TRANSFER_LEASE_LOST",
20
+ TRANSFER_RUNTIME_MISMATCH: "TRANSFER_RUNTIME_MISMATCH",
21
+ TRANSFER_IDEMPOTENCY_CONFLICT: "TRANSFER_IDEMPOTENCY_CONFLICT",
22
+ TRANSFER_TARGET_NOT_EMPTY: "TRANSFER_TARGET_NOT_EMPTY",
23
+ TRANSFER_EXPIRED: "TRANSFER_EXPIRED",
24
+ TRANSFER_MANIFEST_INVALID: "TRANSFER_MANIFEST_INVALID",
25
+ TRANSFER_UNSUPPORTED_FORMAT: "TRANSFER_UNSUPPORTED_FORMAT",
26
+ TRANSFER_UNSUPPORTED_FEATURE: "TRANSFER_UNSUPPORTED_FEATURE",
27
+ TRANSFER_PATH_INVALID: "TRANSFER_PATH_INVALID",
28
+ TRANSFER_FILE_NOT_DECLARED: "TRANSFER_FILE_NOT_DECLARED",
29
+ TRANSFER_FILE_MISSING: "TRANSFER_FILE_MISSING",
30
+ TRANSFER_FILE_SIZE_MISMATCH: "TRANSFER_FILE_SIZE_MISMATCH",
31
+ TRANSFER_FILE_DIGEST_MISMATCH: "TRANSFER_FILE_DIGEST_MISMATCH",
32
+ TRANSFER_CONTAINER_INVALID: "TRANSFER_CONTAINER_INVALID",
33
+ TRANSFER_LIMIT_EXCEEDED: "TRANSFER_LIMIT_EXCEEDED",
34
+ TRANSFER_RECORD_INVALID: "TRANSFER_RECORD_INVALID",
35
+ TRANSFER_REFERENCE_INVALID: "TRANSFER_REFERENCE_INVALID",
36
+ TRANSFER_MEDIA_REF_INVALID: "TRANSFER_MEDIA_REF_INVALID",
37
+ TRANSFER_MEDIA_BLOB_MISSING: "TRANSFER_MEDIA_BLOB_MISSING",
38
+ TRANSFER_SCHEMA_UNCLASSIFIED: "TRANSFER_SCHEMA_UNCLASSIFIED",
39
+ TRANSFER_PACKAGE_DIGEST_MISMATCH: "TRANSFER_PACKAGE_DIGEST_MISMATCH",
40
+ TRANSFER_PLAN_DIGEST_MISMATCH: "TRANSFER_PLAN_DIGEST_MISMATCH",
41
+ TRANSFER_PLAN_BLOCKED: "TRANSFER_PLAN_BLOCKED",
42
+ TRANSFER_DECISIONS_INVALID: "TRANSFER_DECISIONS_INVALID",
43
+ TRANSFER_VERIFICATION_FAILED: "TRANSFER_VERIFICATION_FAILED",
44
+ TRANSFER_APPROVAL_REQUIRED: "TRANSFER_APPROVAL_REQUIRED",
45
+ TRANSFER_APPROVAL_INVALID: "TRANSFER_APPROVAL_INVALID",
46
+ TRANSFER_STORAGE_ERROR: "TRANSFER_STORAGE_ERROR",
47
+ TRANSFER_EXPORT_ERROR: "TRANSFER_EXPORT_ERROR",
48
+ TRANSFER_ANALYZE_ERROR: "TRANSFER_ANALYZE_ERROR",
49
+ TRANSFER_IMPORT_ERROR: "TRANSFER_IMPORT_ERROR"
50
+ };
51
+ const TRANSFER_ERROR_STATUS = Object.freeze({
52
+ TRANSFER_IMPORT_IN_PROGRESS: 503,
53
+ TRANSFER_FENCE_CHECK_FAILED: 503,
54
+ TRANSFER_EXPORT_CONCURRENT_WRITES: 409,
55
+ TRANSFER_OPERATION_NOT_FOUND: 404,
56
+ TRANSFER_INVALID_STATE: 409,
57
+ TRANSFER_LEASE_ACTIVE: 409,
58
+ TRANSFER_LEASE_LOST: 409,
59
+ TRANSFER_RUNTIME_MISMATCH: 409,
60
+ TRANSFER_IDEMPOTENCY_CONFLICT: 409,
61
+ TRANSFER_TARGET_NOT_EMPTY: 409,
62
+ TRANSFER_EXPIRED: 410,
63
+ TRANSFER_MANIFEST_INVALID: 422,
64
+ TRANSFER_UNSUPPORTED_FORMAT: 422,
65
+ TRANSFER_UNSUPPORTED_FEATURE: 422,
66
+ TRANSFER_PATH_INVALID: 422,
67
+ TRANSFER_FILE_NOT_DECLARED: 422,
68
+ TRANSFER_FILE_MISSING: 422,
69
+ TRANSFER_FILE_SIZE_MISMATCH: 422,
70
+ TRANSFER_FILE_DIGEST_MISMATCH: 422,
71
+ TRANSFER_CONTAINER_INVALID: 422,
72
+ TRANSFER_LIMIT_EXCEEDED: 413,
73
+ TRANSFER_RECORD_INVALID: 422,
74
+ TRANSFER_REFERENCE_INVALID: 422,
75
+ TRANSFER_MEDIA_REF_INVALID: 422,
76
+ TRANSFER_MEDIA_BLOB_MISSING: 422,
77
+ TRANSFER_SCHEMA_UNCLASSIFIED: 500,
78
+ TRANSFER_PACKAGE_DIGEST_MISMATCH: 409,
79
+ TRANSFER_PLAN_DIGEST_MISMATCH: 409,
80
+ TRANSFER_PLAN_BLOCKED: 409,
81
+ TRANSFER_DECISIONS_INVALID: 422,
82
+ TRANSFER_VERIFICATION_FAILED: 422,
83
+ TRANSFER_APPROVAL_REQUIRED: 403,
84
+ TRANSFER_APPROVAL_INVALID: 403,
85
+ TRANSFER_STORAGE_ERROR: 500,
86
+ TRANSFER_EXPORT_ERROR: 500,
87
+ TRANSFER_ANALYZE_ERROR: 500,
88
+ TRANSFER_IMPORT_ERROR: 500
89
+ });
90
+ function isTransferErrorCode(code) {
91
+ return code !== void 0 && Object.hasOwn(TRANSFER_ERROR_STATUS, code);
92
+ }
93
+ function transferErrorStatus(code) {
94
+ return isTransferErrorCode(code) ? TRANSFER_ERROR_STATUS[code] : void 0;
95
+ }
96
+ const transferErrorDetailSchema = z.record(z.string(), z.union([
97
+ z.string(),
98
+ z.number(),
99
+ z.boolean(),
100
+ z.null()
101
+ ]));
102
+ var TransferError = class extends Error {
103
+ code;
104
+ status;
105
+ detail;
106
+ constructor(code, message, options = {}) {
107
+ super(message, options.cause === void 0 ? void 0 : { cause: options.cause });
108
+ this.name = "TransferError";
109
+ this.code = code;
110
+ this.status = TRANSFER_ERROR_STATUS[code];
111
+ this.detail = options.detail;
112
+ }
113
+ };
114
+ function isTransferError(error) {
115
+ return error instanceof TransferError;
116
+ }
117
+
118
+ //#endregion
119
+ export { transferErrorStatus as a, transferErrorDetailSchema as i, TransferErrorCode as n, isTransferError as r, TransferError as t };
120
+ //# sourceMappingURL=errors-Bt3goF8I.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors-Bt3goF8I.mjs","names":[],"sources":["../src/transfer/errors.ts"],"sourcesContent":["/**\n * Stable error codes for site transfer (export, analysis, import).\n *\n * Every code is `SCREAMING_SNAKE_CASE` with the `TRANSFER_` prefix and has a\n * fixed HTTP status. `mapErrorStatus` in `api/errors.ts` consults\n * {@link transferErrorStatus} first, so handlers can return these codes in an\n * `ApiResult` and `unwrapResult` picks the right status.\n */\n\nimport { z } from \"zod\";\n\nexport const TransferErrorCode = {\n\tTRANSFER_IMPORT_IN_PROGRESS: \"TRANSFER_IMPORT_IN_PROGRESS\",\n\tTRANSFER_FENCE_CHECK_FAILED: \"TRANSFER_FENCE_CHECK_FAILED\",\n\tTRANSFER_EXPORT_CONCURRENT_WRITES: \"TRANSFER_EXPORT_CONCURRENT_WRITES\",\n\tTRANSFER_OPERATION_NOT_FOUND: \"TRANSFER_OPERATION_NOT_FOUND\",\n\tTRANSFER_INVALID_STATE: \"TRANSFER_INVALID_STATE\",\n\tTRANSFER_LEASE_ACTIVE: \"TRANSFER_LEASE_ACTIVE\",\n\tTRANSFER_LEASE_LOST: \"TRANSFER_LEASE_LOST\",\n\tTRANSFER_RUNTIME_MISMATCH: \"TRANSFER_RUNTIME_MISMATCH\",\n\tTRANSFER_IDEMPOTENCY_CONFLICT: \"TRANSFER_IDEMPOTENCY_CONFLICT\",\n\tTRANSFER_TARGET_NOT_EMPTY: \"TRANSFER_TARGET_NOT_EMPTY\",\n\tTRANSFER_EXPIRED: \"TRANSFER_EXPIRED\",\n\tTRANSFER_MANIFEST_INVALID: \"TRANSFER_MANIFEST_INVALID\",\n\tTRANSFER_UNSUPPORTED_FORMAT: \"TRANSFER_UNSUPPORTED_FORMAT\",\n\tTRANSFER_UNSUPPORTED_FEATURE: \"TRANSFER_UNSUPPORTED_FEATURE\",\n\tTRANSFER_PATH_INVALID: \"TRANSFER_PATH_INVALID\",\n\tTRANSFER_FILE_NOT_DECLARED: \"TRANSFER_FILE_NOT_DECLARED\",\n\tTRANSFER_FILE_MISSING: \"TRANSFER_FILE_MISSING\",\n\tTRANSFER_FILE_SIZE_MISMATCH: \"TRANSFER_FILE_SIZE_MISMATCH\",\n\tTRANSFER_FILE_DIGEST_MISMATCH: \"TRANSFER_FILE_DIGEST_MISMATCH\",\n\tTRANSFER_CONTAINER_INVALID: \"TRANSFER_CONTAINER_INVALID\",\n\tTRANSFER_LIMIT_EXCEEDED: \"TRANSFER_LIMIT_EXCEEDED\",\n\tTRANSFER_RECORD_INVALID: \"TRANSFER_RECORD_INVALID\",\n\tTRANSFER_REFERENCE_INVALID: \"TRANSFER_REFERENCE_INVALID\",\n\tTRANSFER_MEDIA_REF_INVALID: \"TRANSFER_MEDIA_REF_INVALID\",\n\tTRANSFER_MEDIA_BLOB_MISSING: \"TRANSFER_MEDIA_BLOB_MISSING\",\n\tTRANSFER_SCHEMA_UNCLASSIFIED: \"TRANSFER_SCHEMA_UNCLASSIFIED\",\n\tTRANSFER_PACKAGE_DIGEST_MISMATCH: \"TRANSFER_PACKAGE_DIGEST_MISMATCH\",\n\tTRANSFER_PLAN_DIGEST_MISMATCH: \"TRANSFER_PLAN_DIGEST_MISMATCH\",\n\tTRANSFER_PLAN_BLOCKED: \"TRANSFER_PLAN_BLOCKED\",\n\tTRANSFER_DECISIONS_INVALID: \"TRANSFER_DECISIONS_INVALID\",\n\tTRANSFER_VERIFICATION_FAILED: \"TRANSFER_VERIFICATION_FAILED\",\n\tTRANSFER_APPROVAL_REQUIRED: \"TRANSFER_APPROVAL_REQUIRED\",\n\tTRANSFER_APPROVAL_INVALID: \"TRANSFER_APPROVAL_INVALID\",\n\tTRANSFER_STORAGE_ERROR: \"TRANSFER_STORAGE_ERROR\",\n\tTRANSFER_EXPORT_ERROR: \"TRANSFER_EXPORT_ERROR\",\n\tTRANSFER_ANALYZE_ERROR: \"TRANSFER_ANALYZE_ERROR\",\n\tTRANSFER_IMPORT_ERROR: \"TRANSFER_IMPORT_ERROR\",\n} as const;\n\nexport type TransferErrorCode = (typeof TransferErrorCode)[keyof typeof TransferErrorCode];\n\nexport const TRANSFER_ERROR_STATUS: Readonly<Record<TransferErrorCode, number>> = Object.freeze({\n\tTRANSFER_IMPORT_IN_PROGRESS: 503,\n\tTRANSFER_FENCE_CHECK_FAILED: 503,\n\tTRANSFER_EXPORT_CONCURRENT_WRITES: 409,\n\tTRANSFER_OPERATION_NOT_FOUND: 404,\n\tTRANSFER_INVALID_STATE: 409,\n\tTRANSFER_LEASE_ACTIVE: 409,\n\tTRANSFER_LEASE_LOST: 409,\n\tTRANSFER_RUNTIME_MISMATCH: 409,\n\tTRANSFER_IDEMPOTENCY_CONFLICT: 409,\n\tTRANSFER_TARGET_NOT_EMPTY: 409,\n\tTRANSFER_EXPIRED: 410,\n\tTRANSFER_MANIFEST_INVALID: 422,\n\tTRANSFER_UNSUPPORTED_FORMAT: 422,\n\tTRANSFER_UNSUPPORTED_FEATURE: 422,\n\tTRANSFER_PATH_INVALID: 422,\n\tTRANSFER_FILE_NOT_DECLARED: 422,\n\tTRANSFER_FILE_MISSING: 422,\n\tTRANSFER_FILE_SIZE_MISMATCH: 422,\n\tTRANSFER_FILE_DIGEST_MISMATCH: 422,\n\tTRANSFER_CONTAINER_INVALID: 422,\n\tTRANSFER_LIMIT_EXCEEDED: 413,\n\tTRANSFER_RECORD_INVALID: 422,\n\tTRANSFER_REFERENCE_INVALID: 422,\n\tTRANSFER_MEDIA_REF_INVALID: 422,\n\tTRANSFER_MEDIA_BLOB_MISSING: 422,\n\tTRANSFER_SCHEMA_UNCLASSIFIED: 500,\n\tTRANSFER_PACKAGE_DIGEST_MISMATCH: 409,\n\tTRANSFER_PLAN_DIGEST_MISMATCH: 409,\n\tTRANSFER_PLAN_BLOCKED: 409,\n\tTRANSFER_DECISIONS_INVALID: 422,\n\tTRANSFER_VERIFICATION_FAILED: 422,\n\tTRANSFER_APPROVAL_REQUIRED: 403,\n\tTRANSFER_APPROVAL_INVALID: 403,\n\tTRANSFER_STORAGE_ERROR: 500,\n\tTRANSFER_EXPORT_ERROR: 500,\n\tTRANSFER_ANALYZE_ERROR: 500,\n\tTRANSFER_IMPORT_ERROR: 500,\n});\n\nexport function isTransferErrorCode(code: string | undefined): code is TransferErrorCode {\n\treturn code !== undefined && Object.hasOwn(TRANSFER_ERROR_STATUS, code);\n}\n\nexport function transferErrorStatus(code: string | undefined): number | undefined {\n\treturn isTransferErrorCode(code) ? TRANSFER_ERROR_STATUS[code] : undefined;\n}\n\n/**\n * JSON-safe, bounded detail attached to a transfer error. Never put record\n * contents, credentials, or storage keys here: details reach API clients and\n * operation rows.\n */\nexport type TransferErrorDetail = Readonly<Record<string, string | number | boolean | null>>;\n\nexport const transferErrorDetailSchema = z.record(\n\tz.string(),\n\tz.union([z.string(), z.number(), z.boolean(), z.null()]),\n);\n\nexport class TransferError extends Error {\n\treadonly code: TransferErrorCode;\n\treadonly status: number;\n\treadonly detail: TransferErrorDetail | undefined;\n\n\tconstructor(\n\t\tcode: TransferErrorCode,\n\t\tmessage: string,\n\t\toptions: { detail?: TransferErrorDetail; cause?: unknown } = {},\n\t) {\n\t\tsuper(message, options.cause === undefined ? undefined : { cause: options.cause });\n\t\tthis.name = \"TransferError\";\n\t\tthis.code = code;\n\t\tthis.status = TRANSFER_ERROR_STATUS[code];\n\t\tthis.detail = options.detail;\n\t}\n}\n\nexport function isTransferError(error: unknown): error is TransferError {\n\treturn error instanceof TransferError;\n}\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,oBAAoB;CAChC,6BAA6B;CAC7B,6BAA6B;CAC7B,mCAAmC;CACnC,8BAA8B;CAC9B,wBAAwB;CACxB,uBAAuB;CACvB,qBAAqB;CACrB,2BAA2B;CAC3B,+BAA+B;CAC/B,2BAA2B;CAC3B,kBAAkB;CAClB,2BAA2B;CAC3B,6BAA6B;CAC7B,8BAA8B;CAC9B,uBAAuB;CACvB,4BAA4B;CAC5B,uBAAuB;CACvB,6BAA6B;CAC7B,+BAA+B;CAC/B,4BAA4B;CAC5B,yBAAyB;CACzB,yBAAyB;CACzB,4BAA4B;CAC5B,4BAA4B;CAC5B,6BAA6B;CAC7B,8BAA8B;CAC9B,kCAAkC;CAClC,+BAA+B;CAC/B,uBAAuB;CACvB,4BAA4B;CAC5B,8BAA8B;CAC9B,4BAA4B;CAC5B,2BAA2B;CAC3B,wBAAwB;CACxB,uBAAuB;CACvB,wBAAwB;CACxB,uBAAuB;CACvB;AAID,MAAa,wBAAqE,OAAO,OAAO;CAC/F,6BAA6B;CAC7B,6BAA6B;CAC7B,mCAAmC;CACnC,8BAA8B;CAC9B,wBAAwB;CACxB,uBAAuB;CACvB,qBAAqB;CACrB,2BAA2B;CAC3B,+BAA+B;CAC/B,2BAA2B;CAC3B,kBAAkB;CAClB,2BAA2B;CAC3B,6BAA6B;CAC7B,8BAA8B;CAC9B,uBAAuB;CACvB,4BAA4B;CAC5B,uBAAuB;CACvB,6BAA6B;CAC7B,+BAA+B;CAC/B,4BAA4B;CAC5B,yBAAyB;CACzB,yBAAyB;CACzB,4BAA4B;CAC5B,4BAA4B;CAC5B,6BAA6B;CAC7B,8BAA8B;CAC9B,kCAAkC;CAClC,+BAA+B;CAC/B,uBAAuB;CACvB,4BAA4B;CAC5B,8BAA8B;CAC9B,4BAA4B;CAC5B,2BAA2B;CAC3B,wBAAwB;CACxB,uBAAuB;CACvB,wBAAwB;CACxB,uBAAuB;CACvB,CAAC;AAEF,SAAgB,oBAAoB,MAAqD;AACxF,QAAO,SAAS,UAAa,OAAO,OAAO,uBAAuB,KAAK;;AAGxE,SAAgB,oBAAoB,MAA8C;AACjF,QAAO,oBAAoB,KAAK,GAAG,sBAAsB,QAAQ;;AAUlE,MAAa,4BAA4B,EAAE,OAC1C,EAAE,QAAQ,EACV,EAAE,MAAM;CAAC,EAAE,QAAQ;CAAE,EAAE,QAAQ;CAAE,EAAE,SAAS;CAAE,EAAE,MAAM;CAAC,CAAC,CACxD;AAED,IAAa,gBAAb,cAAmC,MAAM;CACxC,AAAS;CACT,AAAS;CACT,AAAS;CAET,YACC,MACA,SACA,UAA6D,EAAE,EAC9D;AACD,QAAM,SAAS,QAAQ,UAAU,SAAY,SAAY,EAAE,OAAO,QAAQ,OAAO,CAAC;AAClF,OAAK,OAAO;AACZ,OAAK,OAAO;AACZ,OAAK,SAAS,sBAAsB;AACpC,OAAK,SAAS,QAAQ;;;AAIxB,SAAgB,gBAAgB,OAAwC;AACvE,QAAO,iBAAiB"}
@@ -0,0 +1,9 @@
1
+ //#region src/api/escape.ts
2
+ /** HTML-escape a string to prevent XSS when interpolated into HTML/JS */
3
+ function escapeHtml(str) {
4
+ return str.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&#x27;");
5
+ }
6
+
7
+ //#endregion
8
+ export { escapeHtml as t };
9
+ //# sourceMappingURL=escape-BveidMa2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escape-BveidMa2.mjs","names":[],"sources":["../src/api/escape.ts"],"sourcesContent":["/** HTML-escape a string to prevent XSS when interpolated into HTML/JS */\nexport function escapeHtml(str: string): string {\n\treturn str\n\t\t.replaceAll(\"&\", \"&amp;\")\n\t\t.replaceAll(\"<\", \"&lt;\")\n\t\t.replaceAll(\">\", \"&gt;\")\n\t\t.replaceAll('\"', \"&quot;\")\n\t\t.replaceAll(\"'\", \"&#x27;\");\n}\n"],"mappings":";;AACA,SAAgB,WAAW,KAAqB;AAC/C,QAAO,IACL,WAAW,KAAK,QAAQ,CACxB,WAAW,KAAK,OAAO,CACvB,WAAW,KAAK,OAAO,CACvB,WAAW,MAAK,SAAS,CACzB,WAAW,KAAK,SAAS"}
@@ -0,0 +1,162 @@
1
+ import { n as isMissingTableError } from "./db-errors-CBD5yMro.mjs";
2
+ import { y as tableExists } from "./dialect-helpers-7_IqPdh9.mjs";
3
+ import { t as apiError } from "./error-BfsNNrIE.mjs";
4
+ import { sql } from "kysely";
5
+
6
+ //#region src/api/media-usage-write-fence.ts
7
+ /**
8
+ * The media usage activation fence alone. Write paths use the unified site
9
+ * write fence in `transfer/fence.ts`, which falls back to this before the
10
+ * transfer tables exist.
11
+ */
12
+ async function findMediaUsageActivationWriteFenceError(db) {
13
+ if (!await tableExists(db, "_emdash_media_usage_activation")) return null;
14
+ try {
15
+ if ((await db.selectFrom("_emdash_media_usage_activation").select("state").where("task_key", "=", "incremental_capture").executeTakeFirst())?.state === "activating") return {
16
+ code: "MEDIA_USAGE_ACTIVATION_IN_PROGRESS",
17
+ message: "Media usage activation is in progress",
18
+ status: 503
19
+ };
20
+ } catch (error) {
21
+ console.error("[media-usage] Failed to check the activation write fence:", error);
22
+ return {
23
+ code: "MEDIA_USAGE_ACTIVATION_CHECK_FAILED",
24
+ message: "Unable to verify media usage activation state",
25
+ status: 503
26
+ };
27
+ }
28
+ return null;
29
+ }
30
+
31
+ //#endregion
32
+ //#region src/transfer/fence.ts
33
+ /**
34
+ * Unified site write fence: media-usage activation and transfer imports.
35
+ *
36
+ * One query answers both questions, so a fenced write path pays a single
37
+ * round trip. A transfer import fences writes while it executes and, after a
38
+ * failure or cancellation once writing started, until it is abandoned. The
39
+ * same query reports whether an export is running, so a fenced write can
40
+ * bump the export's write epoch without an extra query when none is.
41
+ */
42
+ var SiteWriteBlockedError = class extends Error {
43
+ code;
44
+ status;
45
+ operationId;
46
+ constructor(error) {
47
+ super(error.message);
48
+ this.name = error.code;
49
+ this.code = error.code;
50
+ this.status = error.status;
51
+ this.operationId = error.operationId;
52
+ }
53
+ };
54
+ const CHECK_FAILED = {
55
+ code: "TRANSFER_FENCE_CHECK_FAILED",
56
+ message: "Unable to verify whether site writes are allowed",
57
+ status: 503
58
+ };
59
+ /** Read both fences and the running-export flag with one query. */
60
+ async function readSiteWriteFence(db, scope = {}) {
61
+ const mediaUsage = scope.mediaUsage !== false;
62
+ const transfer = scope.transfer !== false;
63
+ let row;
64
+ try {
65
+ row = (await sql`
66
+ SELECT
67
+ (
68
+ SELECT state FROM _emdash_media_usage_activation
69
+ WHERE task_key = 'incremental_capture'
70
+ ) AS media_state,
71
+ (
72
+ SELECT id FROM _emdash_transfer_operations
73
+ WHERE kind = 'import'
74
+ AND (
75
+ state IN ('running', 'verifying')
76
+ OR (state IN ('failed', 'cancelled') AND mutation_started_at IS NOT NULL)
77
+ )
78
+ LIMIT 1
79
+ ) AS import_id,
80
+ (
81
+ SELECT id FROM _emdash_transfer_operations
82
+ WHERE kind = 'export' AND state = 'running'
83
+ LIMIT 1
84
+ ) AS export_id
85
+ `.execute(db)).rows[0];
86
+ } catch (error) {
87
+ if (isMissingTableError(error)) return {
88
+ error: mediaUsage ? await findMediaUsageActivationWriteFenceError(db) : null,
89
+ exportRunning: false
90
+ };
91
+ console.error("[transfer] Failed to check the site write fence:", error);
92
+ return {
93
+ error: CHECK_FAILED,
94
+ exportRunning: false
95
+ };
96
+ }
97
+ const exportRunning = Boolean(row?.export_id);
98
+ if (transfer && row?.import_id) return {
99
+ error: {
100
+ code: "TRANSFER_IMPORT_IN_PROGRESS",
101
+ message: "A site import is in progress or incomplete; writes are disabled",
102
+ status: 503,
103
+ operationId: row.import_id
104
+ },
105
+ exportRunning
106
+ };
107
+ if (mediaUsage && row?.media_state === "activating") return {
108
+ error: {
109
+ code: "MEDIA_USAGE_ACTIVATION_IN_PROGRESS",
110
+ message: "Media usage activation is in progress",
111
+ status: 503
112
+ },
113
+ exportRunning
114
+ };
115
+ return {
116
+ error: null,
117
+ exportRunning
118
+ };
119
+ }
120
+ /**
121
+ * Tell running exports that a fenced write happened, so their consistency
122
+ * fence restarts them. Failures are logged, not thrown: the write itself is
123
+ * allowed either way.
124
+ */
125
+ async function recordSiteWrite(db) {
126
+ try {
127
+ await bumpRunningExportWriteEpochs(db);
128
+ } catch (error) {
129
+ console.error("[transfer] Failed to record a write for running exports:", error);
130
+ }
131
+ }
132
+ /** Increments the write epoch of every running export; returns how many there were. */
133
+ async function bumpRunningExportWriteEpochs(db) {
134
+ const result = await db.updateTable("_emdash_transfer_operations").set({ write_epoch: sql`write_epoch + 1` }).where("kind", "=", "export").where("state", "=", "running").executeTakeFirst();
135
+ return Number(result.numUpdatedRows ?? 0n);
136
+ }
137
+ const NOTHING_TO_RECORD = async () => {};
138
+ /**
139
+ * Throw {@link SiteWriteBlockedError} when a fence blocks writes. Call it
140
+ * immediately before the write, and call the returned function once the
141
+ * write has succeeded: recording it afterwards means an export whose fence
142
+ * was captured while the write ran still sees it.
143
+ */
144
+ async function assertSiteWriteAllowed(db) {
145
+ const status = await readSiteWriteFence(db);
146
+ if (status.error) throw new SiteWriteBlockedError(status.error);
147
+ return status.exportRunning ? () => recordSiteWrite(db) : NOTHING_TO_RECORD;
148
+ }
149
+ /**
150
+ * The fence as an API error response, or null when writes are allowed.
151
+ * Records nothing: for the plugin lifecycle routes that call it, the fence
152
+ * middleware records a successful response's write.
153
+ */
154
+ async function checkSiteWriteFence(db) {
155
+ const status = await readSiteWriteFence(db);
156
+ if (status.error) return apiError(status.error.code, status.error.message, status.error.status);
157
+ return null;
158
+ }
159
+
160
+ //#endregion
161
+ export { readSiteWriteFence as a, checkSiteWriteFence as i, assertSiteWriteAllowed as n, recordSiteWrite as o, bumpRunningExportWriteEpochs as r, SiteWriteBlockedError as t };
162
+ //# sourceMappingURL=fence-Bb_IbCxI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fence-Bb_IbCxI.mjs","names":[],"sources":["../src/api/media-usage-write-fence.ts","../src/transfer/fence.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\n\nimport { tableExists } from \"../database/dialect-helpers.js\";\nimport type { Database } from \"../database/types.js\";\n\nexport interface MediaUsageActivationWriteFenceError {\n\tcode: \"MEDIA_USAGE_ACTIVATION_IN_PROGRESS\" | \"MEDIA_USAGE_ACTIVATION_CHECK_FAILED\";\n\tmessage: string;\n\tstatus: 503;\n}\n\n/**\n * The media usage activation fence alone. Write paths use the unified site\n * write fence in `transfer/fence.ts`, which falls back to this before the\n * transfer tables exist.\n */\nexport async function findMediaUsageActivationWriteFenceError(\n\tdb: Kysely<Database>,\n): Promise<MediaUsageActivationWriteFenceError | null> {\n\tif (!(await tableExists(db, \"_emdash_media_usage_activation\"))) return null;\n\ttry {\n\t\tconst row = await db\n\t\t\t.selectFrom(\"_emdash_media_usage_activation\")\n\t\t\t.select(\"state\")\n\t\t\t.where(\"task_key\", \"=\", \"incremental_capture\")\n\t\t\t.executeTakeFirst();\n\t\tif (row?.state === \"activating\") {\n\t\t\treturn {\n\t\t\t\tcode: \"MEDIA_USAGE_ACTIVATION_IN_PROGRESS\",\n\t\t\t\tmessage: \"Media usage activation is in progress\",\n\t\t\t\tstatus: 503,\n\t\t\t};\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(\"[media-usage] Failed to check the activation write fence:\", error);\n\t\treturn {\n\t\t\tcode: \"MEDIA_USAGE_ACTIVATION_CHECK_FAILED\",\n\t\t\tmessage: \"Unable to verify media usage activation state\",\n\t\t\tstatus: 503,\n\t\t};\n\t}\n\treturn null;\n}\n","/**\n * Unified site write fence: media-usage activation and transfer imports.\n *\n * One query answers both questions, so a fenced write path pays a single\n * round trip. A transfer import fences writes while it executes and, after a\n * failure or cancellation once writing started, until it is abandoned. The\n * same query reports whether an export is running, so a fenced write can\n * bump the export's write epoch without an extra query when none is.\n */\n\nimport { sql, type Kysely } from \"kysely\";\n\nimport { apiError } from \"../api/error.js\";\nimport { findMediaUsageActivationWriteFenceError } from \"../api/media-usage-write-fence.js\";\nimport type { Database } from \"../database/types.js\";\nimport { isMissingTableError } from \"../utils/db-errors.js\";\n\nexport type SiteWriteFenceCode =\n\t| \"MEDIA_USAGE_ACTIVATION_IN_PROGRESS\"\n\t| \"MEDIA_USAGE_ACTIVATION_CHECK_FAILED\"\n\t| \"TRANSFER_IMPORT_IN_PROGRESS\"\n\t| \"TRANSFER_FENCE_CHECK_FAILED\";\n\nexport interface SiteWriteFenceError {\n\tcode: SiteWriteFenceCode;\n\tmessage: string;\n\tstatus: 503;\n\t/** The fencing import, when the fence is a transfer import. */\n\toperationId?: string;\n}\n\nexport class SiteWriteBlockedError extends Error {\n\treadonly code: SiteWriteFenceCode;\n\treadonly status: 503;\n\treadonly operationId: string | undefined;\n\n\tconstructor(error: SiteWriteFenceError) {\n\t\tsuper(error.message);\n\t\tthis.name = error.code;\n\t\tthis.code = error.code;\n\t\tthis.status = error.status;\n\t\tthis.operationId = error.operationId;\n\t}\n}\n\n/** Which fences apply to a write. Both apply unless one is turned off. */\nexport interface SiteWriteFenceScope {\n\tmediaUsage?: boolean;\n\ttransfer?: boolean;\n}\n\nexport interface SiteWriteFenceStatus {\n\terror: SiteWriteFenceError | null;\n\t/** Whether an export was running when the fence was read. */\n\texportRunning: boolean;\n}\n\nconst CHECK_FAILED: SiteWriteFenceError = {\n\tcode: \"TRANSFER_FENCE_CHECK_FAILED\",\n\tmessage: \"Unable to verify whether site writes are allowed\",\n\tstatus: 503,\n};\n\n/** Read both fences and the running-export flag with one query. */\nexport async function readSiteWriteFence(\n\tdb: Kysely<Database>,\n\tscope: SiteWriteFenceScope = {},\n): Promise<SiteWriteFenceStatus> {\n\tconst mediaUsage = scope.mediaUsage !== false;\n\tconst transfer = scope.transfer !== false;\n\tlet row:\n\t\t| { media_state: string | null; import_id: string | null; export_id: string | null }\n\t\t| undefined;\n\ttry {\n\t\tconst result = await sql<{\n\t\t\tmedia_state: string | null;\n\t\t\timport_id: string | null;\n\t\t\texport_id: string | null;\n\t\t}>`\n\t\t\tSELECT\n\t\t\t\t(\n\t\t\t\t\tSELECT state FROM _emdash_media_usage_activation\n\t\t\t\t\tWHERE task_key = 'incremental_capture'\n\t\t\t\t) AS media_state,\n\t\t\t\t(\n\t\t\t\t\tSELECT id FROM _emdash_transfer_operations\n\t\t\t\t\tWHERE kind = 'import'\n\t\t\t\t\t\tAND (\n\t\t\t\t\t\t\tstate IN ('running', 'verifying')\n\t\t\t\t\t\t\tOR (state IN ('failed', 'cancelled') AND mutation_started_at IS NOT NULL)\n\t\t\t\t\t\t)\n\t\t\t\t\tLIMIT 1\n\t\t\t\t) AS import_id,\n\t\t\t\t(\n\t\t\t\t\tSELECT id FROM _emdash_transfer_operations\n\t\t\t\t\tWHERE kind = 'export' AND state = 'running'\n\t\t\t\t\tLIMIT 1\n\t\t\t\t) AS export_id\n\t\t`.execute(db);\n\t\trow = result.rows[0];\n\t} catch (error) {\n\t\tif (isMissingTableError(error)) {\n\t\t\treturn {\n\t\t\t\terror: mediaUsage ? await findMediaUsageActivationWriteFenceError(db) : null,\n\t\t\t\texportRunning: false,\n\t\t\t};\n\t\t}\n\t\tconsole.error(\"[transfer] Failed to check the site write fence:\", error);\n\t\treturn { error: CHECK_FAILED, exportRunning: false };\n\t}\n\n\tconst exportRunning = Boolean(row?.export_id);\n\tif (transfer && row?.import_id) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\tcode: \"TRANSFER_IMPORT_IN_PROGRESS\",\n\t\t\t\tmessage: \"A site import is in progress or incomplete; writes are disabled\",\n\t\t\t\tstatus: 503,\n\t\t\t\toperationId: row.import_id,\n\t\t\t},\n\t\t\texportRunning,\n\t\t};\n\t}\n\tif (mediaUsage && row?.media_state === \"activating\") {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\tcode: \"MEDIA_USAGE_ACTIVATION_IN_PROGRESS\",\n\t\t\t\tmessage: \"Media usage activation is in progress\",\n\t\t\t\tstatus: 503,\n\t\t\t},\n\t\t\texportRunning,\n\t\t};\n\t}\n\treturn { error: null, exportRunning };\n}\n\nexport async function findSiteWriteFenceError(\n\tdb: Kysely<Database>,\n): Promise<SiteWriteFenceError | null> {\n\treturn (await readSiteWriteFence(db)).error;\n}\n\n/**\n * Tell running exports that a fenced write happened, so their consistency\n * fence restarts them. Failures are logged, not thrown: the write itself is\n * allowed either way.\n */\nexport async function recordSiteWrite(db: Kysely<Database>): Promise<void> {\n\ttry {\n\t\tawait bumpRunningExportWriteEpochs(db);\n\t} catch (error) {\n\t\tconsole.error(\"[transfer] Failed to record a write for running exports:\", error);\n\t}\n}\n\n/** Increments the write epoch of every running export; returns how many there were. */\nexport async function bumpRunningExportWriteEpochs(db: Kysely<Database>): Promise<number> {\n\tconst result = await db\n\t\t.updateTable(\"_emdash_transfer_operations\")\n\t\t.set({ write_epoch: sql<number>`write_epoch + 1` })\n\t\t.where(\"kind\", \"=\", \"export\")\n\t\t.where(\"state\", \"=\", \"running\")\n\t\t.executeTakeFirst();\n\treturn Number(result.numUpdatedRows ?? 0n);\n}\n\n/** Records a completed write for running exports; a no-op when none was running. */\nexport type RecordSiteWrite = () => Promise<void>;\n\nconst NOTHING_TO_RECORD: RecordSiteWrite = async () => {};\n\n/**\n * Throw {@link SiteWriteBlockedError} when a fence blocks writes. Call it\n * immediately before the write, and call the returned function once the\n * write has succeeded: recording it afterwards means an export whose fence\n * was captured while the write ran still sees it.\n */\nexport async function assertSiteWriteAllowed(db: Kysely<Database>): Promise<RecordSiteWrite> {\n\tconst status = await readSiteWriteFence(db);\n\tif (status.error) throw new SiteWriteBlockedError(status.error);\n\treturn status.exportRunning ? () => recordSiteWrite(db) : NOTHING_TO_RECORD;\n}\n\n/**\n * The fence as an API error response, or null when writes are allowed.\n * Records nothing: for the plugin lifecycle routes that call it, the fence\n * middleware records a successful response's write.\n */\nexport async function checkSiteWriteFence(db: Kysely<Database>): Promise<Response | null> {\n\tconst status = await readSiteWriteFence(db);\n\tif (status.error) return apiError(status.error.code, status.error.message, status.error.status);\n\treturn null;\n}\n"],"mappings":";;;;;;;;;;;AAgBA,eAAsB,wCACrB,IACsD;AACtD,KAAI,CAAE,MAAM,YAAY,IAAI,iCAAiC,CAAG,QAAO;AACvE,KAAI;AAMH,OALY,MAAM,GAChB,WAAW,iCAAiC,CAC5C,OAAO,QAAQ,CACf,MAAM,YAAY,KAAK,sBAAsB,CAC7C,kBAAkB,GACX,UAAU,aAClB,QAAO;GACN,MAAM;GACN,SAAS;GACT,QAAQ;GACR;UAEM,OAAO;AACf,UAAQ,MAAM,6DAA6D,MAAM;AACjF,SAAO;GACN,MAAM;GACN,SAAS;GACT,QAAQ;GACR;;AAEF,QAAO;;;;;;;;;;;;;;ACVR,IAAa,wBAAb,cAA2C,MAAM;CAChD,AAAS;CACT,AAAS;CACT,AAAS;CAET,YAAY,OAA4B;AACvC,QAAM,MAAM,QAAQ;AACpB,OAAK,OAAO,MAAM;AAClB,OAAK,OAAO,MAAM;AAClB,OAAK,SAAS,MAAM;AACpB,OAAK,cAAc,MAAM;;;AAgB3B,MAAM,eAAoC;CACzC,MAAM;CACN,SAAS;CACT,QAAQ;CACR;;AAGD,eAAsB,mBACrB,IACA,QAA6B,EAAE,EACC;CAChC,MAAM,aAAa,MAAM,eAAe;CACxC,MAAM,WAAW,MAAM,aAAa;CACpC,IAAI;AAGJ,KAAI;AA0BH,SAzBe,MAAM,GAInB;;;;;;;;;;;;;;;;;;;;IAoBA,QAAQ,GAAG,EACA,KAAK;UACV,OAAO;AACf,MAAI,oBAAoB,MAAM,CAC7B,QAAO;GACN,OAAO,aAAa,MAAM,wCAAwC,GAAG,GAAG;GACxE,eAAe;GACf;AAEF,UAAQ,MAAM,oDAAoD,MAAM;AACxE,SAAO;GAAE,OAAO;GAAc,eAAe;GAAO;;CAGrD,MAAM,gBAAgB,QAAQ,KAAK,UAAU;AAC7C,KAAI,YAAY,KAAK,UACpB,QAAO;EACN,OAAO;GACN,MAAM;GACN,SAAS;GACT,QAAQ;GACR,aAAa,IAAI;GACjB;EACD;EACA;AAEF,KAAI,cAAc,KAAK,gBAAgB,aACtC,QAAO;EACN,OAAO;GACN,MAAM;GACN,SAAS;GACT,QAAQ;GACR;EACD;EACA;AAEF,QAAO;EAAE,OAAO;EAAM;EAAe;;;;;;;AActC,eAAsB,gBAAgB,IAAqC;AAC1E,KAAI;AACH,QAAM,6BAA6B,GAAG;UAC9B,OAAO;AACf,UAAQ,MAAM,4DAA4D,MAAM;;;;AAKlF,eAAsB,6BAA6B,IAAuC;CACzF,MAAM,SAAS,MAAM,GACnB,YAAY,8BAA8B,CAC1C,IAAI,EAAE,aAAa,GAAW,mBAAmB,CAAC,CAClD,MAAM,QAAQ,KAAK,SAAS,CAC5B,MAAM,SAAS,KAAK,UAAU,CAC9B,kBAAkB;AACpB,QAAO,OAAO,OAAO,kBAAkB,GAAG;;AAM3C,MAAM,oBAAqC,YAAY;;;;;;;AAQvD,eAAsB,uBAAuB,IAAgD;CAC5F,MAAM,SAAS,MAAM,mBAAmB,GAAG;AAC3C,KAAI,OAAO,MAAO,OAAM,IAAI,sBAAsB,OAAO,MAAM;AAC/D,QAAO,OAAO,sBAAsB,gBAAgB,GAAG,GAAG;;;;;;;AAQ3D,eAAsB,oBAAoB,IAAgD;CACzF,MAAM,SAAS,MAAM,mBAAmB,GAAG;AAC3C,KAAI,OAAO,MAAO,QAAO,SAAS,OAAO,MAAM,MAAM,OAAO,MAAM,SAAS,OAAO,MAAM,OAAO;AAC/F,QAAO"}
@@ -0,0 +1,77 @@
1
+ import { u as __exportAll } from "./runner-B3eyB9Gb.mjs";
2
+ import { t as after } from "./after-PcEvMY_6.mjs";
3
+ import { getRequestContext } from "./request-context.mjs";
4
+ import { n as initWithLock, t as createInitLock } from "./init-lock-4eRRB4Le.mjs";
5
+ import { r as requestCached } from "./request-cache-iHRlHx1d.mjs";
6
+ import { n as BylineSchemaRegistry } from "./byline-registry-B_EK_TQf.mjs";
7
+
8
+ //#region src/bylines/field-defs-cache.ts
9
+ var field_defs_cache_exports = /* @__PURE__ */ __exportAll({ getBylineFieldDefs: () => getBylineFieldDefs });
10
+ const HOLDER_KEY = Symbol.for("emdash:byline-field-defs");
11
+ const g = globalThis;
12
+ const holder = g[HOLDER_KEY] ?? (() => {
13
+ const h = {
14
+ value: null,
15
+ hasValue: false,
16
+ cachedVersion: -1,
17
+ lock: createInitLock()
18
+ };
19
+ g[HOLDER_KEY] = h;
20
+ return h;
21
+ })();
22
+ const REQUEST_CACHE_KEY_VERSION = "byline-fields-version";
23
+ const REQUEST_CACHE_KEY_DEFS_PREFIX = "byline-field-defs:";
24
+ /**
25
+ * Reclaim window for the single-flight lock: if an owner holds it past
26
+ * this without publishing (e.g. its request was cancelled and the
27
+ * anchored fetch hasn't completed yet), the next reader reclaims and
28
+ * refetches. `listFields` is a single fast SELECT, so this only needs to
29
+ * cover a genuinely slow/stranded query. Mutable solely so tests can
30
+ * shorten it; production never changes it.
31
+ */
32
+ let reclaimDeadlineMs = 1e4;
33
+ /**
34
+ * Read the persisted `options.byline_fields_version` counter. Cached for
35
+ * the duration of the current request via `requestCached`. Returns `0`
36
+ * when the row is missing (matches `BylineSchemaRegistry.getVersion`).
37
+ */
38
+ async function getBylineFieldsVersion(db) {
39
+ return requestCached(REQUEST_CACHE_KEY_VERSION, () => new BylineSchemaRegistry(db).getVersion());
40
+ }
41
+ /**
42
+ * Resolve registered byline custom-field definitions. Two-tier cache:
43
+ * per-request via `requestCached`, then per-isolate via the global
44
+ * holder.
45
+ *
46
+ * The global holder is bypassed for isolated requests (playground / DO
47
+ * preview, which point at a divergent schema) and for dirty versions
48
+ * (odd counter — see `BylineSchemaRegistry`'s class JSDoc — indicates
49
+ * an in-flight or crashed mutation). Both bypass paths still hit the
50
+ * per-request cache, so a single render dedupes within itself.
51
+ *
52
+ * Always returns an array. Empty = no custom fields registered.
53
+ */
54
+ async function getBylineFieldDefs(db) {
55
+ const isolated = getRequestContext()?.dbIsIsolated === true;
56
+ const version = await getBylineFieldsVersion(db);
57
+ const dirty = version % 2 !== 0;
58
+ return requestCached(`${REQUEST_CACHE_KEY_DEFS_PREFIX}${version}`, async () => {
59
+ if (isolated || dirty) return new BylineSchemaRegistry(db).listFields();
60
+ return initWithLock(holder.lock, () => holder.hasValue && holder.cachedVersion === version ? holder.value : null, (isCurrentClaim) => (async () => {
61
+ const defs = await new BylineSchemaRegistry(db).listFields();
62
+ if (isCurrentClaim() && version >= holder.cachedVersion) {
63
+ holder.value = defs;
64
+ holder.hasValue = true;
65
+ holder.cachedVersion = version;
66
+ }
67
+ return defs;
68
+ })(), {
69
+ deadlineMs: reclaimDeadlineMs,
70
+ anchor: (promise) => after(() => promise)
71
+ });
72
+ });
73
+ }
74
+
75
+ //#endregion
76
+ export { getBylineFieldDefs as n, field_defs_cache_exports as t };
77
+ //# sourceMappingURL=field-defs-cache-CsZctvbu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-defs-cache-CsZctvbu.mjs","names":[],"sources":["../src/bylines/field-defs-cache.ts"],"sourcesContent":["/**\n * Byline field-definitions cache\n *\n * Discussion #1174 / Phase 3. Two-tier cache for the byline custom-field\n * registry, mirroring the `settings/index.ts` pattern.\n *\n * **Tier 1 — per-isolate (globalThis).** Field definitions change rarely\n * but are read on every byline hydration (admin pages, content rendering,\n * API responses). Caching at the isolate level drops the SELECT-from-\n * `_emdash_byline_fields` from once-per-hydration to once-per-isolate-\n * after-bump. The cache holds the resolved *value* behind a reclaimable\n * single-flight lock (see `utils/single-flight-cache.ts`), never an\n * in-flight promise: concurrent cold-isolate readers coalesce onto one\n * query by polling the published value, so a reader whose request is\n * cancelled mid-query can never strand later byline hydrations on the\n * isolate (the workerd never-settling-promise hazard that produced 524s).\n *\n * Stored on globalThis under `Symbol.for(\"emdash:byline-field-defs\")` so\n * Vite SSR chunk duplication can't produce two independent caches (same\n * pattern as `request-cache.ts` and `request-context.ts`).\n *\n * **Tier 2 — per-request.** Wraps both the version read and the defs\n * fetch in `requestCached` so a single page render that hits byline\n * hydration multiple times (e.g. list view + individual byline lookups\n * in a sidebar) pays at most one version read and one defs fetch in\n * total. The defs cache key includes the version, so a (highly\n * unlikely) mid-request bump still produces a self-consistent view —\n * the second call sees a different key and refetches.\n *\n * **Invalidation.** `options.byline_fields_version` is bumped by every\n * `BylineSchemaRegistry` mutation (Phase 2). Each isolate independently\n * reads the persisted version on the next request and compares against\n * its cached version; mismatch triggers a refetch and overwrite. Other\n * isolates see the change within one request after the bump propagates.\n *\n * **Isolated databases bypass the global cache.** Playground and DO\n * preview sessions set `requestContext.dbIsIsolated = true`, signalling\n * the per-request `db` points at an isolated schema that may diverge\n * from the singleton. Schema-derived caches keyed by the singleton's\n * version would silently leak the singleton's defs into the isolated\n * request. We follow the `loader.ts:74` `getTaxonomyNames` precedent:\n * skip both reading from and writing to the global holder when the\n * request is isolated. The per-request cache (`requestCached`) is keyed\n * by the WeakMap'd `EmDashRequestContext`, so it can't cross-pollinate\n * between requests — it stays in play even for isolated DBs.\n *\n * **Why a versioned cache and not a TTL?** The version counter gives\n * deterministic invalidation without the staleness window a TTL would\n * impose. Field-definition changes need to be visible to the next\n * request, not eventually. The cost is one cheap `options` read per\n * request — cheaper than the field-defs fetch it replaces, and cheaper\n * than maintaining a TTL state machine.\n */\n\nimport type { Kysely } from \"kysely\";\n\nimport { after } from \"../after.js\";\nimport type { Database } from \"../database/types.js\";\nimport { requestCached } from \"../request-cache.js\";\nimport { getRequestContext } from \"../request-context.js\";\nimport { BylineSchemaRegistry } from \"../schema/byline-registry.js\";\nimport type { BylineFieldDefinition } from \"../schema/types.js\";\nimport { createInitLock, type InitLock, initWithLock } from \"../utils/init-lock.js\";\n\ninterface FieldDefsHolder {\n\t/** Last resolved defs, valid only when `hasValue` is true. */\n\tvalue: BylineFieldDefinition[] | null;\n\t/** Presence flag, separate from `value` so an empty-array result still caches. */\n\thasValue: boolean;\n\t/** Persisted-version value that `value` was fetched against. */\n\tcachedVersion: number;\n\t/** Reclaimable single-flight lock so a cancelled owner can't wedge readers. */\n\tlock: InitLock;\n}\n\nconst HOLDER_KEY = Symbol.for(\"emdash:byline-field-defs\");\nconst g = globalThis as Record<symbol, unknown>;\nconst holder: FieldDefsHolder =\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- globalThis singleton pattern (see request-cache.ts)\n\t(g[HOLDER_KEY] as FieldDefsHolder | undefined) ??\n\t(() => {\n\t\tconst h: FieldDefsHolder = {\n\t\t\tvalue: null,\n\t\t\thasValue: false,\n\t\t\tcachedVersion: -1,\n\t\t\tlock: createInitLock(),\n\t\t};\n\t\tg[HOLDER_KEY] = h;\n\t\treturn h;\n\t})();\n\nconst REQUEST_CACHE_KEY_VERSION = \"byline-fields-version\";\nconst REQUEST_CACHE_KEY_DEFS_PREFIX = \"byline-field-defs:\";\n\n/**\n * Reclaim window for the single-flight lock: if an owner holds it past\n * this without publishing (e.g. its request was cancelled and the\n * anchored fetch hasn't completed yet), the next reader reclaims and\n * refetches. `listFields` is a single fast SELECT, so this only needs to\n * cover a genuinely slow/stranded query. Mutable solely so tests can\n * shorten it; production never changes it.\n */\nlet reclaimDeadlineMs = 10_000;\n\n/**\n * Read the persisted `options.byline_fields_version` counter. Cached for\n * the duration of the current request via `requestCached`. Returns `0`\n * when the row is missing (matches `BylineSchemaRegistry.getVersion`).\n */\nasync function getBylineFieldsVersion(db: Kysely<Database>): Promise<number> {\n\treturn requestCached(REQUEST_CACHE_KEY_VERSION, () => new BylineSchemaRegistry(db).getVersion());\n}\n\n/**\n * Resolve registered byline custom-field definitions. Two-tier cache:\n * per-request via `requestCached`, then per-isolate via the global\n * holder.\n *\n * The global holder is bypassed for isolated requests (playground / DO\n * preview, which point at a divergent schema) and for dirty versions\n * (odd counter — see `BylineSchemaRegistry`'s class JSDoc — indicates\n * an in-flight or crashed mutation). Both bypass paths still hit the\n * per-request cache, so a single render dedupes within itself.\n *\n * Always returns an array. Empty = no custom fields registered.\n */\nexport async function getBylineFieldDefs(db: Kysely<Database>): Promise<BylineFieldDefinition[]> {\n\tconst isolated = getRequestContext()?.dbIsIsolated === true;\n\tconst version = await getBylineFieldsVersion(db);\n\tconst dirty = version % 2 !== 0;\n\treturn requestCached(`${REQUEST_CACHE_KEY_DEFS_PREFIX}${version}`, async () => {\n\t\tif (isolated || dirty) {\n\t\t\treturn new BylineSchemaRegistry(db).listFields();\n\t\t}\n\t\t// Per-isolate single-flight cache keyed on the persisted version.\n\t\t// Coalesce concurrent cold readers via the lock and read the\n\t\t// published value; never await another request's in-flight promise\n\t\t// (a cancelled owner would otherwise strand every later byline\n\t\t// hydration on the isolate). The fetch is anchored so a cancelled\n\t\t// originator still drives it to completion and populates the cache.\n\t\treturn initWithLock<BylineFieldDefinition[]>(\n\t\t\tholder.lock,\n\t\t\t() => (holder.hasValue && holder.cachedVersion === version ? holder.value : null),\n\t\t\t(isCurrentClaim) =>\n\t\t\t\t(async () => {\n\t\t\t\t\tconst defs = await new BylineSchemaRegistry(db).listFields();\n\t\t\t\t\t// Publish only while still the current claim, and never\n\t\t\t\t\t// regress over a newer version a concurrent reader stored.\n\t\t\t\t\tif (isCurrentClaim() && version >= holder.cachedVersion) {\n\t\t\t\t\t\tholder.value = defs;\n\t\t\t\t\t\tholder.hasValue = true;\n\t\t\t\t\t\tholder.cachedVersion = version;\n\t\t\t\t\t}\n\t\t\t\t\treturn defs;\n\t\t\t\t})(),\n\t\t\t{ deadlineMs: reclaimDeadlineMs, anchor: (promise) => after(() => promise) },\n\t\t);\n\t});\n}\n\n/**\n * Test/internal helper: clear the per-isolate cache. Useful for unit\n * tests that mutate the registry directly and need to force a refetch\n * without going through the full version-bump path.\n *\n * Production code paths should rely on the version counter for\n * invalidation — calling this from a write path would bypass the\n * coordination that lets other isolates see the change.\n */\nexport function resetBylineFieldDefsCacheForTests(): void {\n\tholder.value = null;\n\tholder.hasValue = false;\n\tholder.cachedVersion = -1;\n\tholder.lock.ownerStartedAt = null;\n\tholder.lock.generation = 0;\n\treclaimDeadlineMs = 10_000;\n}\n\n/**\n * Test-only: shorten the single-flight reclaim window so a \"stranded\n * owner\" scenario can be exercised without waiting out the production\n * deadline. Reset by `resetBylineFieldDefsCacheForTests`.\n *\n * @internal\n */\nexport function setBylineFieldDefsReclaimDeadlineForTests(ms: number): void {\n\treclaimDeadlineMs = ms;\n}\n"],"mappings":";;;;;;;;;AA2EA,MAAM,aAAa,OAAO,IAAI,2BAA2B;AACzD,MAAM,IAAI;AACV,MAAM,SAEJ,EAAE,sBACI;CACN,MAAM,IAAqB;EAC1B,OAAO;EACP,UAAU;EACV,eAAe;EACf,MAAM,gBAAgB;EACtB;AACD,GAAE,cAAc;AAChB,QAAO;IACJ;AAEL,MAAM,4BAA4B;AAClC,MAAM,gCAAgC;;;;;;;;;AAUtC,IAAI,oBAAoB;;;;;;AAOxB,eAAe,uBAAuB,IAAuC;AAC5E,QAAO,cAAc,iCAAiC,IAAI,qBAAqB,GAAG,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;AAgBjG,eAAsB,mBAAmB,IAAwD;CAChG,MAAM,WAAW,mBAAmB,EAAE,iBAAiB;CACvD,MAAM,UAAU,MAAM,uBAAuB,GAAG;CAChD,MAAM,QAAQ,UAAU,MAAM;AAC9B,QAAO,cAAc,GAAG,gCAAgC,WAAW,YAAY;AAC9E,MAAI,YAAY,MACf,QAAO,IAAI,qBAAqB,GAAG,CAAC,YAAY;AAQjD,SAAO,aACN,OAAO,YACA,OAAO,YAAY,OAAO,kBAAkB,UAAU,OAAO,QAAQ,OAC3E,oBACC,YAAY;GACZ,MAAM,OAAO,MAAM,IAAI,qBAAqB,GAAG,CAAC,YAAY;AAG5D,OAAI,gBAAgB,IAAI,WAAW,OAAO,eAAe;AACxD,WAAO,QAAQ;AACf,WAAO,WAAW;AAClB,WAAO,gBAAgB;;AAExB,UAAO;MACJ,EACL;GAAE,YAAY;GAAmB,SAAS,YAAY,YAAY,QAAQ;GAAE,CAC5E;GACA"}
@@ -0,0 +1,83 @@
1
+ import { u as __exportAll } from "./runner-B3eyB9Gb.mjs";
2
+ import { n as isMissingTableError } from "./db-errors-CBD5yMro.mjs";
3
+ import { f as jsonExtractExpr } from "./dialect-helpers-7_IqPdh9.mjs";
4
+ import { n as cachedQuery, t as CacheNamespace } from "./object-cache-CqWNY5uP.mjs";
5
+ import { r as requestCached } from "./request-cache-iHRlHx1d.mjs";
6
+ import { s as getDb } from "./loader-CrRPfkHS.mjs";
7
+ import { sql } from "kysely";
8
+
9
+ //#region src/references/field-map.ts
10
+ /**
11
+ * The reference fields a collection carries, for the public query path.
12
+ *
13
+ * `referenceFieldConstraints` (api/handlers) answers the write question — how
14
+ * many entries may a field select, and is it required. Rendering asks a
15
+ * different one: which collection do I load, and which end of the relation am I
16
+ * standing on. Both read the same rows; keeping them apart keeps the render
17
+ * path off the relation table, which the constraints map has to read for its
18
+ * limits.
19
+ */
20
+ var field_map_exports = /* @__PURE__ */ __exportAll({ getReferenceFieldMap: () => getReferenceFieldMap });
21
+ function isRecord(value) {
22
+ return typeof value === "object" && value !== null && !Array.isArray(value);
23
+ }
24
+ async function loadBindings(db, collection) {
25
+ const relationSlug = jsonExtractExpr(db, "validation", "relation");
26
+ let rows;
27
+ try {
28
+ rows = (await sql`
29
+ SELECT f.slug AS slug, f.validation AS validation, r.id AS relation_id
30
+ FROM ${sql.ref("_emdash_fields")} AS f
31
+ INNER JOIN ${sql.ref("_emdash_collections")} AS c ON c.id = f.collection_id
32
+ LEFT JOIN ${sql.ref("_emdash_relations")} AS r ON r.slug = ${sql.raw(relationSlug)}
33
+ WHERE c.slug = ${collection} AND f.type = 'reference'
34
+ `.execute(db)).rows;
35
+ } catch (error) {
36
+ if (isMissingTableError(error)) return [];
37
+ throw error;
38
+ }
39
+ const bindings = [];
40
+ for (const row of rows) {
41
+ if (!row.validation) continue;
42
+ let parsed;
43
+ try {
44
+ parsed = JSON.parse(row.validation);
45
+ } catch {
46
+ continue;
47
+ }
48
+ if (!isRecord(parsed)) continue;
49
+ const { relation, targetCollection } = parsed;
50
+ if (typeof relation !== "string" || typeof targetCollection !== "string") continue;
51
+ if (!row.relation_id) continue;
52
+ bindings.push({
53
+ slug: row.slug,
54
+ relation,
55
+ relationId: row.relation_id,
56
+ targetCollection,
57
+ side: parsed.relationSide === "child" ? "child" : "parent"
58
+ });
59
+ }
60
+ return bindings;
61
+ }
62
+ /**
63
+ * Every bound reference field on `collection`, by field slug.
64
+ *
65
+ * Cached twice over: once per request, and once in the schema object-cache
66
+ * namespace, which a schema edit already bumps. A render that asks for
67
+ * references therefore pays for this lookup at most once per isolate between
68
+ * schema changes, and a render that asks for none never issues it.
69
+ */
70
+ function getReferenceFieldMap(collection) {
71
+ return requestCached(`reference-field-map:${collection}`, async () => {
72
+ const bindings = await cachedQuery({
73
+ namespace: CacheNamespace.SCHEMA,
74
+ key: `reference-field-map:${collection}`,
75
+ load: async () => loadBindings(await getDb(), collection)
76
+ });
77
+ return new Map(bindings.map((binding) => [binding.slug, binding]));
78
+ });
79
+ }
80
+
81
+ //#endregion
82
+ export { getReferenceFieldMap as n, field_map_exports as t };
83
+ //# sourceMappingURL=field-map-6m9rF49t.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-map-6m9rF49t.mjs","names":[],"sources":["../src/references/field-map.ts"],"sourcesContent":["/**\n * The reference fields a collection carries, for the public query path.\n *\n * `referenceFieldConstraints` (api/handlers) answers the write question — how\n * many entries may a field select, and is it required. Rendering asks a\n * different one: which collection do I load, and which end of the relation am I\n * standing on. Both read the same rows; keeping them apart keeps the render\n * path off the relation table, which the constraints map has to read for its\n * limits.\n */\n\nimport { sql, type Kysely } from \"kysely\";\n\nimport { jsonExtractExpr } from \"../database/dialect-helpers.js\";\nimport type { Database } from \"../database/types.js\";\nimport { getDb } from \"../loader.js\";\nimport { cachedQuery, CacheNamespace } from \"../object-cache/index.js\";\nimport { requestCached } from \"../request-cache.js\";\nimport { isMissingTableError } from \"../utils/db-errors.js\";\n\n/** One reference field, as a render needs it. */\nexport interface ReferenceFieldBinding {\n\t/** Field slug — the key a caller names a selection under. */\n\tslug: string;\n\t/** Relation slug the field binds to. */\n\trelation: string;\n\t/**\n\t * The relation's id, read in the same statement as the binding. Rendering\n\t * pages the link table by id, so carrying it here is what keeps a field's\n\t * cost at one link read rather than a slug lookup and then the read.\n\t */\n\trelationId: string;\n\t/** Which end of the relation this field's own collection sits on. */\n\tside: \"parent\" | \"child\";\n\t/** The collection at the other end. */\n\ttargetCollection: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function loadBindings(\n\tdb: Kysely<Database>,\n\tcollection: string,\n): Promise<ReferenceFieldBinding[]> {\n\t// The relation's id joins in here rather than being looked up per field at\n\t// render time: the field stores a slug, but the link table is keyed by id.\n\tconst relationSlug = jsonExtractExpr(db, \"validation\", \"relation\");\n\tlet rows: { slug: string; validation: string | null; relation_id: string | null }[];\n\ttry {\n\t\tconst result = await sql<{\n\t\t\tslug: string;\n\t\t\tvalidation: string | null;\n\t\t\trelation_id: string | null;\n\t\t}>`\n\t\t\tSELECT f.slug AS slug, f.validation AS validation, r.id AS relation_id\n\t\t\tFROM ${sql.ref(\"_emdash_fields\")} AS f\n\t\t\tINNER JOIN ${sql.ref(\"_emdash_collections\")} AS c ON c.id = f.collection_id\n\t\t\tLEFT JOIN ${sql.ref(\"_emdash_relations\")} AS r ON r.slug = ${sql.raw(relationSlug)}\n\t\t\tWHERE c.slug = ${collection} AND f.type = 'reference'\n\t\t`.execute(db);\n\t\trows = result.rows;\n\t} catch (error) {\n\t\tif (isMissingTableError(error)) return [];\n\t\tthrow error;\n\t}\n\n\tconst bindings: ReferenceFieldBinding[] = [];\n\tfor (const row of rows) {\n\t\tif (!row.validation) continue;\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(row.validation);\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isRecord(parsed)) continue;\n\t\tconst { relation, targetCollection } = parsed;\n\t\t// A field with neither is unbound: it keeps its own column, and its value\n\t\t// is already in `data`. There is nothing to resolve. Nor is there when the\n\t\t// named relation is gone — the join leaves no id to page by.\n\t\tif (typeof relation !== \"string\" || typeof targetCollection !== \"string\") continue;\n\t\tif (!row.relation_id) continue;\n\t\tbindings.push({\n\t\t\tslug: row.slug,\n\t\t\trelation,\n\t\t\trelationId: row.relation_id,\n\t\t\ttargetCollection,\n\t\t\tside: parsed.relationSide === \"child\" ? \"child\" : \"parent\",\n\t\t});\n\t}\n\treturn bindings;\n}\n\n/**\n * Every bound reference field on `collection`, by field slug.\n *\n * Cached twice over: once per request, and once in the schema object-cache\n * namespace, which a schema edit already bumps. A render that asks for\n * references therefore pays for this lookup at most once per isolate between\n * schema changes, and a render that asks for none never issues it.\n */\nexport function getReferenceFieldMap(\n\tcollection: string,\n): Promise<Map<string, ReferenceFieldBinding>> {\n\treturn requestCached(`reference-field-map:${collection}`, async () => {\n\t\tconst bindings = await cachedQuery({\n\t\t\tnamespace: CacheNamespace.SCHEMA,\n\t\t\tkey: `reference-field-map:${collection}`,\n\t\t\tload: async () => loadBindings(await getDb(), collection),\n\t\t});\n\t\treturn new Map(bindings.map((binding) => [binding.slug, binding]));\n\t});\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAsCA,SAAS,SAAS,OAAkD;AACnE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM;;AAG5E,eAAe,aACd,IACA,YACmC;CAGnC,MAAM,eAAe,gBAAgB,IAAI,cAAc,WAAW;CAClE,IAAI;AACJ,KAAI;AAYH,UAXe,MAAM,GAInB;;UAEM,IAAI,IAAI,iBAAiB,CAAC;gBACpB,IAAI,IAAI,sBAAsB,CAAC;eAChC,IAAI,IAAI,oBAAoB,CAAC,oBAAoB,IAAI,IAAI,aAAa,CAAC;oBAClE,WAAW;IAC3B,QAAQ,GAAG,EACC;UACN,OAAO;AACf,MAAI,oBAAoB,MAAM,CAAE,QAAO,EAAE;AACzC,QAAM;;CAGP,MAAM,WAAoC,EAAE;AAC5C,MAAK,MAAM,OAAO,MAAM;AACvB,MAAI,CAAC,IAAI,WAAY;EACrB,IAAI;AACJ,MAAI;AACH,YAAS,KAAK,MAAM,IAAI,WAAW;UAC5B;AACP;;AAED,MAAI,CAAC,SAAS,OAAO,CAAE;EACvB,MAAM,EAAE,UAAU,qBAAqB;AAIvC,MAAI,OAAO,aAAa,YAAY,OAAO,qBAAqB,SAAU;AAC1E,MAAI,CAAC,IAAI,YAAa;AACtB,WAAS,KAAK;GACb,MAAM,IAAI;GACV;GACA,YAAY,IAAI;GAChB;GACA,MAAM,OAAO,iBAAiB,UAAU,UAAU;GAClD,CAAC;;AAEH,QAAO;;;;;;;;;;AAWR,SAAgB,qBACf,YAC8C;AAC9C,QAAO,cAAc,uBAAuB,cAAc,YAAY;EACrE,MAAM,WAAW,MAAM,YAAY;GAClC,WAAW,eAAe;GAC1B,KAAK,uBAAuB;GAC5B,MAAM,YAAY,aAAa,MAAM,OAAO,EAAE,WAAW;GACzD,CAAC;AACF,SAAO,IAAI,IAAI,SAAS,KAAK,YAAY,CAAC,QAAQ,MAAM,QAAQ,CAAC,CAAC;GACjE"}
@@ -0,0 +1,23 @@
1
+ //#region src/media/focal-point.ts
2
+ function isFocalCoordinate(value) {
3
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 1;
4
+ }
5
+ function normalizeFocalPoint(focalX, focalY) {
6
+ if (!isFocalCoordinate(focalX) || !isFocalCoordinate(focalY)) return null;
7
+ return {
8
+ focalX,
9
+ focalY
10
+ };
11
+ }
12
+ function isValidFocalPointUpdate(input) {
13
+ const hasX = input.focalX !== void 0;
14
+ const hasY = input.focalY !== void 0;
15
+ if (!hasX && !hasY) return true;
16
+ if (!hasX || !hasY) return false;
17
+ if (input.focalX === null || input.focalY === null) return input.focalX === null && input.focalY === null;
18
+ return normalizeFocalPoint(input.focalX, input.focalY) !== null;
19
+ }
20
+
21
+ //#endregion
22
+ export { normalizeFocalPoint as n, isValidFocalPointUpdate as t };
23
+ //# sourceMappingURL=focal-point-CZ3d1wK5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focal-point-CZ3d1wK5.mjs","names":[],"sources":["../src/media/focal-point.ts"],"sourcesContent":["export interface FocalPoint {\n\tfocalX: number;\n\tfocalY: number;\n}\n\nexport interface FocalPointUpdate {\n\tfocalX?: number | null;\n\tfocalY?: number | null;\n}\n\nfunction isFocalCoordinate(value: unknown): value is number {\n\treturn typeof value === \"number\" && Number.isFinite(value) && value >= 0 && value <= 1;\n}\n\nexport function normalizeFocalPoint(focalX: unknown, focalY: unknown): FocalPoint | null {\n\tif (!isFocalCoordinate(focalX) || !isFocalCoordinate(focalY)) return null;\n\treturn { focalX, focalY };\n}\n\nexport function isValidFocalPointUpdate(input: FocalPointUpdate): boolean {\n\tconst hasX = input.focalX !== undefined;\n\tconst hasY = input.focalY !== undefined;\n\tif (!hasX && !hasY) return true;\n\tif (!hasX || !hasY) return false;\n\tif (input.focalX === null || input.focalY === null) {\n\t\treturn input.focalX === null && input.focalY === null;\n\t}\n\treturn normalizeFocalPoint(input.focalX, input.focalY) !== null;\n}\n\nexport function focalPointToObjectPosition(focalX: unknown, focalY: unknown): string | undefined {\n\tconst point = normalizeFocalPoint(focalX, focalY);\n\tif (!point) return undefined;\n\tconst x = Math.round(point.focalX * 10_000) / 100;\n\tconst y = Math.round(point.focalY * 10_000) / 100;\n\treturn `${x}% ${y}%`;\n}\n"],"mappings":";AAUA,SAAS,kBAAkB,OAAiC;AAC3D,QAAO,OAAO,UAAU,YAAY,OAAO,SAAS,MAAM,IAAI,SAAS,KAAK,SAAS;;AAGtF,SAAgB,oBAAoB,QAAiB,QAAoC;AACxF,KAAI,CAAC,kBAAkB,OAAO,IAAI,CAAC,kBAAkB,OAAO,CAAE,QAAO;AACrE,QAAO;EAAE;EAAQ;EAAQ;;AAG1B,SAAgB,wBAAwB,OAAkC;CACzE,MAAM,OAAO,MAAM,WAAW;CAC9B,MAAM,OAAO,MAAM,WAAW;AAC9B,KAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,KAAI,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3B,KAAI,MAAM,WAAW,QAAQ,MAAM,WAAW,KAC7C,QAAO,MAAM,WAAW,QAAQ,MAAM,WAAW;AAElD,QAAO,oBAAoB,MAAM,QAAQ,MAAM,OAAO,KAAK"}