emdash 0.38.0 → 0.39.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 (1394) hide show
  1. package/dist/action-token-On1sot_c.mjs +26 -0
  2. package/dist/action-token-On1sot_c.mjs.map +1 -0
  3. package/dist/activation-CaMfdBt1.mjs +382 -0
  4. package/dist/activation-CaMfdBt1.mjs.map +1 -0
  5. package/dist/adapters-Cq10K4_c.d.mts +171 -0
  6. package/dist/adapters-Cq10K4_c.d.mts.map +1 -0
  7. package/dist/after-PcEvMY_6.mjs +96 -0
  8. package/dist/after-PcEvMY_6.mjs.map +1 -0
  9. package/dist/allowed-origins-1Sa-2wZK.mjs +116 -0
  10. package/dist/allowed-origins-1Sa-2wZK.mjs.map +1 -0
  11. package/dist/api/route-utils.d.mts +4 -3
  12. package/dist/api/route-utils.d.mts.map +1 -1
  13. package/dist/api/route-utils.mjs +45 -30
  14. package/dist/api/route-utils.mjs.map +1 -1
  15. package/dist/api/schemas/index.d.mts +2 -2
  16. package/dist/api/schemas/index.mjs +7 -6
  17. package/dist/api-DmjKxPCY.mjs +4831 -0
  18. package/dist/api-DmjKxPCY.mjs.map +1 -0
  19. package/dist/api-tokens-BIXItFKV.mjs +163 -0
  20. package/dist/api-tokens-BIXItFKV.mjs.map +1 -0
  21. package/dist/apply-drpfmqrR.mjs +1005 -0
  22. package/dist/apply-drpfmqrR.mjs.map +1 -0
  23. package/dist/artifact-fetch-COiMhVgk.mjs +813 -0
  24. package/dist/artifact-fetch-COiMhVgk.mjs.map +1 -0
  25. package/dist/astro/index.d.mts +14 -12
  26. package/dist/astro/index.d.mts.map +1 -1
  27. package/dist/astro/index.mjs +99 -15
  28. package/dist/astro/index.mjs.map +1 -1
  29. package/dist/astro/middleware/auth.d.mts +12 -10
  30. package/dist/astro/middleware/auth.d.mts.map +1 -1
  31. package/dist/astro/middleware/auth.mjs +20 -11
  32. package/dist/astro/middleware/auth.mjs.map +1 -1
  33. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  34. package/dist/astro/middleware/redirect.mjs +11 -11
  35. package/dist/astro/middleware/request-context.d.mts +1 -1
  36. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  37. package/dist/astro/middleware/request-context.mjs +154 -28
  38. package/dist/astro/middleware/request-context.mjs.map +1 -1
  39. package/dist/astro/middleware/setup.mjs +1 -1
  40. package/dist/astro/middleware.d.mts +13 -10
  41. package/dist/astro/middleware.d.mts.map +1 -1
  42. package/dist/astro/middleware.mjs +114 -3062
  43. package/dist/astro/middleware.mjs.map +1 -1
  44. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +10 -9
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
  46. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +10 -9
  47. package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
  48. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +5 -5
  49. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  50. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
  51. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +13 -12
  52. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
  53. package/dist/astro/routes/api/admin/byline-fields/index.mjs +13 -12
  54. package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
  55. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +13 -12
  56. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
  57. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +22 -21
  58. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +22 -21
  60. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  61. package/dist/astro/routes/api/admin/bylines/index.mjs +22 -21
  62. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  63. package/dist/astro/routes/api/admin/comments/_id_/status.d.mts.map +1 -1
  64. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +21 -54
  65. package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
  66. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  67. package/dist/astro/routes/api/admin/comments/bulk.mjs +15 -14
  68. package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
  69. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  70. package/dist/astro/routes/api/admin/comments/index.mjs +15 -14
  71. package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
  72. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  73. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  74. package/dist/astro/routes/api/admin/media-usage/activation.mjs +17 -16
  75. package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -1
  76. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +19 -18
  77. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
  78. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +19 -18
  79. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/media-usage/progress.mjs +17 -17
  81. package/dist/astro/routes/api/admin/media-usage/repair.mjs +21 -20
  82. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  83. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +19 -18
  84. package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
  85. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +19 -18
  86. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
  87. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +5 -5
  88. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +5 -5
  89. package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts.map +1 -1
  90. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +9 -69
  91. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  92. package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts.map +1 -1
  93. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +9 -72
  94. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  95. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +66 -62
  96. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  97. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -6
  98. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +65 -62
  99. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  100. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +70 -64
  101. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts.map +1 -1
  103. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +87 -66
  104. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  105. package/dist/astro/routes/api/admin/plugins/index.mjs +66 -62
  106. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  107. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -4
  108. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +65 -62
  109. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  110. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts.map +1 -1
  111. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +85 -66
  112. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  113. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +65 -62
  114. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  115. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +70 -64
  116. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  117. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -1
  118. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +90 -69
  119. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  120. package/dist/astro/routes/api/admin/plugins/registry/artifact.d.mts.map +1 -1
  121. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -8
  122. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  123. package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -1
  124. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +77 -66
  125. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  126. package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts.map +1 -1
  127. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +67 -64
  128. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/plugins/updates.d.mts.map +1 -1
  130. package/dist/astro/routes/api/admin/plugins/updates.mjs +66 -63
  131. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.d.mts +8 -0
  133. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.d.mts.map +1 -0
  134. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +27 -0
  135. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs.map +1 -0
  136. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +65 -62
  137. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  138. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +4 -4
  139. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +65 -62
  140. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  141. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
  142. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
  143. package/dist/astro/routes/api/admin/users/_id_/index.mjs +11 -10
  144. package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
  145. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +5 -5
  146. package/dist/astro/routes/api/admin/users/index.mjs +10 -9
  147. package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
  148. package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
  149. package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
  150. package/dist/astro/routes/api/auth/invite/complete.mjs +15 -14
  151. package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
  152. package/dist/astro/routes/api/auth/invite/index.mjs +12 -11
  153. package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
  154. package/dist/astro/routes/api/auth/invite/register-options.mjs +14 -13
  155. package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
  156. package/dist/astro/routes/api/auth/logout.mjs +4 -4
  157. package/dist/astro/routes/api/auth/magic-link/send.mjs +14 -13
  158. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  159. package/dist/astro/routes/api/auth/magic-link/verify.mjs +4 -4
  160. package/dist/astro/routes/api/auth/me.mjs +11 -10
  161. package/dist/astro/routes/api/auth/me.mjs.map +1 -1
  162. package/dist/astro/routes/api/auth/mode.mjs +4 -4
  163. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
  164. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  165. package/dist/astro/routes/api/auth/passkey/_id_.mjs +10 -9
  166. package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
  167. package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
  168. package/dist/astro/routes/api/auth/passkey/options.mjs +16 -15
  169. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
  170. package/dist/astro/routes/api/auth/passkey/register/options.mjs +14 -13
  171. package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
  172. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +15 -14
  173. package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
  174. package/dist/astro/routes/api/auth/passkey/verify.mjs +15 -14
  175. package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
  176. package/dist/astro/routes/api/auth/signup/complete.mjs +15 -14
  177. package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
  178. package/dist/astro/routes/api/auth/signup/request.mjs +14 -13
  179. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  180. package/dist/astro/routes/api/auth/signup/verify.mjs +3 -3
  181. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts.map +1 -1
  182. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -211
  183. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
  184. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -17
  185. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
  186. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
  187. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +15 -14
  188. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  189. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  190. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +15 -14
  191. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  192. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -4
  193. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.d.mts +8 -0
  194. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.d.mts.map +1 -0
  195. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +35 -0
  196. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs.map +1 -0
  197. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +16 -15
  198. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  199. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts +9 -2
  200. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
  201. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +25 -18
  202. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  203. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +27 -25
  204. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  205. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +27 -25
  206. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  207. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  208. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
  209. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
  210. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +23 -15
  211. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  212. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +23 -21
  213. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  214. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -4
  215. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +23 -15
  216. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  217. package/dist/astro/routes/api/content/_collection_/_id_.mjs +15 -14
  218. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  219. package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -4
  220. package/dist/astro/routes/api/content/_collection_/index.mjs +12 -11
  221. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  222. package/dist/astro/routes/api/content/_collection_/trash.mjs +11 -10
  223. package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
  224. package/dist/astro/routes/api/dashboard.mjs +14 -12
  225. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  226. package/dist/astro/routes/api/dev/emails.mjs +4 -4
  227. package/dist/astro/routes/api/health.d.mts +8 -0
  228. package/dist/astro/routes/api/health.d.mts.map +1 -0
  229. package/dist/astro/routes/api/health.mjs +21 -0
  230. package/dist/astro/routes/api/health.mjs.map +1 -0
  231. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  232. package/dist/astro/routes/api/import/probe.mjs +25 -23
  233. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  234. package/dist/astro/routes/api/import/wordpress/analyze.mjs +5 -5
  235. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -11
  236. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  237. package/dist/astro/routes/api/import/wordpress/execute.mjs +20 -20
  238. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -10
  239. package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -1
  240. package/dist/astro/routes/api/import/wordpress/media.mjs +15 -14
  241. package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
  242. package/dist/astro/routes/api/import/wordpress/prepare.mjs +14 -13
  243. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  244. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -11
  245. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
  246. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +18 -17
  247. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  248. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  249. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -23
  250. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  251. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
  252. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -11
  253. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  254. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +36 -34
  255. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  256. package/dist/astro/routes/api/manifest.mjs +17 -9
  257. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  258. package/dist/astro/routes/api/mcp.d.mts.map +1 -1
  259. package/dist/astro/routes/api/mcp.mjs +167 -101
  260. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  261. package/dist/astro/routes/api/media/_id_/confirm.mjs +15 -14
  262. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  263. package/dist/astro/routes/api/media/_id_/replace.mjs +12 -11
  264. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -1
  265. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -8
  266. package/dist/astro/routes/api/media/_id_/usage.mjs +23 -22
  267. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  268. package/dist/astro/routes/api/media/_id_.mjs +22 -21
  269. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  270. package/dist/astro/routes/api/media/asset/_id_/_filename_.d.mts +8 -0
  271. package/dist/astro/routes/api/media/asset/_id_/_filename_.d.mts.map +1 -0
  272. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +52 -0
  273. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs.map +1 -0
  274. package/dist/astro/routes/api/media/file/_...key_.mjs +3 -3
  275. package/dist/astro/routes/api/media/folders/_id_.mjs +12 -11
  276. package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -1
  277. package/dist/astro/routes/api/media/folders/index.mjs +12 -11
  278. package/dist/astro/routes/api/media/folders/index.mjs.map +1 -1
  279. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -4
  280. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -4
  281. package/dist/astro/routes/api/media/providers/index.mjs +4 -4
  282. package/dist/astro/routes/api/media/upload-url.mjs +14 -13
  283. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  284. package/dist/astro/routes/api/media.mjs +26 -25
  285. package/dist/astro/routes/api/media.mjs.map +1 -1
  286. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +15 -14
  287. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  288. package/dist/astro/routes/api/menus/_name_/items.mjs +15 -14
  289. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  290. package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -14
  291. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  292. package/dist/astro/routes/api/menus/_name_/translations.mjs +15 -14
  293. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  294. package/dist/astro/routes/api/menus/_name_.mjs +15 -14
  295. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  296. package/dist/astro/routes/api/menus/index.mjs +15 -14
  297. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  298. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  299. package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -7
  300. package/dist/astro/routes/api/oauth/device/code.mjs +10 -10
  301. package/dist/astro/routes/api/oauth/device/token.mjs +9 -9
  302. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  303. package/dist/astro/routes/api/oauth/token/refresh.mjs +7 -7
  304. package/dist/astro/routes/api/oauth/token/revoke.mjs +7 -7
  305. package/dist/astro/routes/api/oauth/token.mjs +7 -7
  306. package/dist/astro/routes/api/openapi.json.mjs +28 -23
  307. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  308. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts +2 -1
  309. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts.map +1 -1
  310. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +22 -40
  311. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
  312. package/dist/astro/routes/api/redirects/404s/index.mjs +18 -15
  313. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  314. package/dist/astro/routes/api/redirects/404s/summary.mjs +18 -15
  315. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  316. package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -1
  317. package/dist/astro/routes/api/redirects/_id_.mjs +20 -23
  318. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  319. package/dist/astro/routes/api/redirects/index.d.mts.map +1 -1
  320. package/dist/astro/routes/api/redirects/index.mjs +19 -20
  321. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  322. package/dist/astro/routes/api/relations/_id_/index.mjs +27 -25
  323. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  324. package/dist/astro/routes/api/relations/_id_/translations.mjs +21 -20
  325. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
  326. package/dist/astro/routes/api/relations/index.mjs +27 -25
  327. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  328. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
  329. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
  330. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +65 -62
  331. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  332. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +65 -62
  333. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  334. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +65 -62
  335. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  336. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +65 -62
  337. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  338. package/dist/astro/routes/api/schema/collections/index.mjs +65 -62
  339. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  340. package/dist/astro/routes/api/schema/collections/reorder.mjs +65 -62
  341. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  342. package/dist/astro/routes/api/schema/index.mjs +16 -16
  343. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +65 -62
  344. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  345. package/dist/astro/routes/api/schema/orphans/index.mjs +65 -62
  346. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  347. package/dist/astro/routes/api/search/enable.mjs +16 -15
  348. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  349. package/dist/astro/routes/api/search/index.mjs +17 -15
  350. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  351. package/dist/astro/routes/api/search/rebuild.mjs +16 -15
  352. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  353. package/dist/astro/routes/api/search/stats.mjs +10 -10
  354. package/dist/astro/routes/api/search/suggest.mjs +15 -14
  355. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  356. package/dist/astro/routes/api/sections/_slug_.mjs +15 -14
  357. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  358. package/dist/astro/routes/api/sections/index.mjs +15 -14
  359. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  360. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +9 -9
  361. package/dist/astro/routes/api/settings/backups/archives/index.mjs +8 -8
  362. package/dist/astro/routes/api/settings/backups/export.mjs +9 -9
  363. package/dist/astro/routes/api/settings/backups/index.mjs +10 -10
  364. package/dist/astro/routes/api/settings/email.mjs +6 -6
  365. package/dist/astro/routes/api/settings.mjs +22 -20
  366. package/dist/astro/routes/api/settings.mjs.map +1 -1
  367. package/dist/astro/routes/api/setup/admin-verify.mjs +16 -15
  368. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  369. package/dist/astro/routes/api/setup/admin.mjs +15 -14
  370. package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
  371. package/dist/astro/routes/api/setup/dev-bypass.mjs +42 -40
  372. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  373. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  374. package/dist/astro/routes/api/setup/index.mjs +43 -40
  375. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  376. package/dist/astro/routes/api/setup/status.mjs +5 -5
  377. package/dist/astro/routes/api/snapshot.mjs +11 -11
  378. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -22
  379. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  380. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -22
  381. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  382. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +23 -22
  383. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  384. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -22
  385. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  386. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -21
  387. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  388. package/dist/astro/routes/api/taxonomies/_name_.mjs +23 -22
  389. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  390. package/dist/astro/routes/api/taxonomies/index.mjs +23 -22
  391. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  392. package/dist/astro/routes/api/themes/preview.mjs +8 -8
  393. package/dist/astro/routes/api/typegen.mjs +6 -6
  394. package/dist/astro/routes/api/visual-editing/action-token.d.mts +8 -0
  395. package/dist/astro/routes/api/visual-editing/action-token.d.mts.map +1 -0
  396. package/dist/astro/routes/api/visual-editing/action-token.mjs +25 -0
  397. package/dist/astro/routes/api/visual-editing/action-token.mjs.map +1 -0
  398. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.d.mts +8 -0
  399. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.d.mts.map +1 -0
  400. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +37 -0
  401. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs.map +1 -0
  402. package/dist/astro/routes/api/visual-editing/toolbar-labels.d.mts +8 -0
  403. package/dist/astro/routes/api/visual-editing/toolbar-labels.d.mts.map +1 -0
  404. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +20 -0
  405. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs.map +1 -0
  406. package/dist/astro/routes/api/well-known/auth.mjs +2 -2
  407. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  408. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  409. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +12 -11
  410. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  411. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +16 -15
  412. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  413. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +16 -15
  414. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  415. package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -10
  416. package/dist/astro/routes/api/widget-areas/index.mjs +16 -15
  417. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  418. package/dist/astro/routes/api/widget-components.mjs +4 -4
  419. package/dist/astro/routes/robots.txt.mjs +13 -12
  420. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  421. package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -1
  422. package/dist/astro/routes/sitemap-_collection_.xml.mjs +23 -19
  423. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  424. package/dist/astro/routes/sitemap.xml.mjs +14 -13
  425. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  426. package/dist/astro/types.d.mts +61 -23
  427. package/dist/astro/types.d.mts.map +1 -1
  428. package/dist/auth/providers/github.d.mts +1 -1
  429. package/dist/auth/providers/google.d.mts +1 -1
  430. package/dist/authoritative-records-DbqshfKD.mjs +5172 -0
  431. package/dist/authoritative-records-DbqshfKD.mjs.map +1 -0
  432. package/dist/authorize-BXpfMpp0.mjs +40 -0
  433. package/dist/authorize-BXpfMpp0.mjs.map +1 -0
  434. package/dist/backup-BsPQdwnS.mjs +246 -0
  435. package/dist/backup-BsPQdwnS.mjs.map +1 -0
  436. package/dist/base64-DvnNgP7e.mjs +63 -0
  437. package/dist/base64-DvnNgP7e.mjs.map +1 -0
  438. package/dist/byline-Doh-wt99.mjs +906 -0
  439. package/dist/byline-Doh-wt99.mjs.map +1 -0
  440. package/dist/byline-fields-CsrdvaLV.mjs +123 -0
  441. package/dist/byline-fields-CsrdvaLV.mjs.map +1 -0
  442. package/dist/byline-registry-D6lWzXk6.mjs +406 -0
  443. package/dist/byline-registry-D6lWzXk6.mjs.map +1 -0
  444. package/dist/bylines-Cop0hkoy.mjs +214 -0
  445. package/dist/bylines-Cop0hkoy.mjs.map +1 -0
  446. package/dist/bylines-kpBzHPr8.mjs +232 -0
  447. package/dist/bylines-kpBzHPr8.mjs.map +1 -0
  448. package/dist/cache-B0pOlXdM.mjs +108 -0
  449. package/dist/cache-B0pOlXdM.mjs.map +1 -0
  450. package/dist/capture-triggers-gxQxnxrJ.mjs +362 -0
  451. package/dist/capture-triggers-gxQxnxrJ.mjs.map +1 -0
  452. package/dist/challenge-store-CkRdSdd8.mjs +51 -0
  453. package/dist/challenge-store-CkRdSdd8.mjs.map +1 -0
  454. package/dist/checksum-Bsi2D9M1.mjs +162 -0
  455. package/dist/checksum-Bsi2D9M1.mjs.map +1 -0
  456. package/dist/chrome-tags-D7LGB91U.mjs +24 -0
  457. package/dist/chrome-tags-D7LGB91U.mjs.map +1 -0
  458. package/dist/chunks-BmWyou79.mjs +25 -0
  459. package/dist/chunks-BmWyou79.mjs.map +1 -0
  460. package/dist/cli/index.mjs +889 -102
  461. package/dist/cli/index.mjs.map +1 -1
  462. package/dist/client/cf-access.d.mts +1 -1
  463. package/dist/client/index.d.mts +2 -2
  464. package/dist/client/index.mjs +2 -2
  465. package/dist/collection-deletion-C3Xixmkx.mjs +436 -0
  466. package/dist/collection-deletion-C3Xixmkx.mjs.map +1 -0
  467. package/dist/collection-slugs-cache-D9auiKmI.mjs +85 -0
  468. package/dist/collection-slugs-cache-D9auiKmI.mjs.map +1 -0
  469. package/dist/comment-DcT8qdPK.mjs +313 -0
  470. package/dist/comment-DcT8qdPK.mjs.map +1 -0
  471. package/dist/comment-reaction-DY5-y8Y5.mjs +85 -0
  472. package/dist/comment-reaction-DY5-y8Y5.mjs.map +1 -0
  473. package/dist/comments-B67VRNGw.mjs +204 -0
  474. package/dist/comments-B67VRNGw.mjs.map +1 -0
  475. package/dist/comments-BVzzt6x5.mjs +99 -0
  476. package/dist/comments-BVzzt6x5.mjs.map +1 -0
  477. package/dist/components-DIl9Qzh6.mjs +108 -0
  478. package/dist/components-DIl9Qzh6.mjs.map +1 -0
  479. package/dist/config-B2acLeC5.mjs +242 -0
  480. package/dist/config-B2acLeC5.mjs.map +1 -0
  481. package/dist/config-CGVeT8Hc.mjs +73 -0
  482. package/dist/config-CGVeT8Hc.mjs.map +1 -0
  483. package/dist/config-D3HhLON3.d.mts +39 -0
  484. package/dist/config-D3HhLON3.d.mts.map +1 -0
  485. package/dist/config-DS7e4EZ9.d.mts +6387 -0
  486. package/dist/config-DS7e4EZ9.d.mts.map +1 -0
  487. package/dist/content-DZ3B5qtA.mjs +2216 -0
  488. package/dist/content-DZ3B5qtA.mjs.map +1 -0
  489. package/dist/content-list-query-CbPdzsna.d.mts +26 -0
  490. package/dist/content-list-query-CbPdzsna.d.mts.map +1 -0
  491. package/dist/content-policy-CM4skrNi.mjs +46 -0
  492. package/dist/content-policy-CM4skrNi.mjs.map +1 -0
  493. package/dist/content-refresh-BHLHJgyt.mjs +3599 -0
  494. package/dist/content-refresh-BHLHJgyt.mjs.map +1 -0
  495. package/dist/content-repair-BVll5WNl.mjs +440 -0
  496. package/dist/content-repair-BVll5WNl.mjs.map +1 -0
  497. package/dist/context-B195kjqZ.mjs +1835 -0
  498. package/dist/context-B195kjqZ.mjs.map +1 -0
  499. package/dist/cron-BcR3RN4K.mjs +282 -0
  500. package/dist/cron-BcR3RN4K.mjs.map +1 -0
  501. package/dist/dashboard-CZD4G7k_.mjs +151 -0
  502. package/dist/dashboard-CZD4G7k_.mjs.map +1 -0
  503. package/dist/database/migration-lock.d.mts +37 -0
  504. package/dist/database/migration-lock.d.mts.map +1 -0
  505. package/dist/database/migration-lock.mjs +76 -0
  506. package/dist/database/migration-lock.mjs.map +1 -0
  507. package/dist/database/pg-migration-lock.d.mts +1 -1
  508. package/dist/database/pg-migration-lock.mjs +1 -1
  509. package/dist/database/pg-migration-lock.mjs.map +1 -1
  510. package/dist/datetime-normalization-PeiEdcRY.mjs +187 -0
  511. package/dist/datetime-normalization-PeiEdcRY.mjs.map +1 -0
  512. package/dist/db/index.d.mts +3 -3
  513. package/dist/db/index.mjs +4 -3
  514. package/dist/db/index.mjs.map +1 -1
  515. package/dist/db/libsql-migrations.d.mts +1 -1
  516. package/dist/db/libsql-migrations.mjs +7 -6
  517. package/dist/db/libsql-migrations.mjs.map +1 -1
  518. package/dist/db/libsql.d.mts +1 -1
  519. package/dist/db/postgres-migrations.d.mts +1 -1
  520. package/dist/db/postgres-migrations.mjs +7 -6
  521. package/dist/db/postgres-migrations.mjs.map +1 -1
  522. package/dist/db/postgres.d.mts +1 -1
  523. package/dist/db/sqlite-migrations.d.mts +1 -1
  524. package/dist/db/sqlite-migrations.mjs +7 -6
  525. package/dist/db/sqlite-migrations.mjs.map +1 -1
  526. package/dist/db/sqlite.d.mts +1 -1
  527. package/dist/db/sqlite.mjs +1 -1
  528. package/dist/db-errors-CBD5yMro.mjs +55 -0
  529. package/dist/db-errors-CBD5yMro.mjs.map +1 -0
  530. package/dist/default-BtlxWgh9.mjs +81 -0
  531. package/dist/default-BtlxWgh9.mjs.map +1 -0
  532. package/dist/deferred-tasks-Ba9fphlE.d.mts +9 -0
  533. package/dist/deferred-tasks-Ba9fphlE.d.mts.map +1 -0
  534. package/dist/dev-typegen-CZaPLl3V.mjs +29 -0
  535. package/dist/dev-typegen-CZaPLl3V.mjs.map +1 -0
  536. package/dist/device-flow-3E5l0fpH.mjs +466 -0
  537. package/dist/device-flow-3E5l0fpH.mjs.map +1 -0
  538. package/dist/dialect-helpers-CtYdsX4W.mjs +307 -0
  539. package/dist/dialect-helpers-CtYdsX4W.mjs.map +1 -0
  540. package/dist/direct-executor-ZI8E01Yt.mjs +104 -0
  541. package/dist/direct-executor-ZI8E01Yt.mjs.map +1 -0
  542. package/dist/dist-2hDLsLeq.mjs +810 -0
  543. package/dist/dist-2hDLsLeq.mjs.map +1 -0
  544. package/dist/email-console-gc-E3Eqj.mjs +50 -0
  545. package/dist/email-console-gc-E3Eqj.mjs.map +1 -0
  546. package/dist/emdash-runtime-DZGinqTL.mjs +4041 -0
  547. package/dist/emdash-runtime-DZGinqTL.mjs.map +1 -0
  548. package/dist/enrich-C2Mk0lwE.mjs +194 -0
  549. package/dist/enrich-C2Mk0lwE.mjs.map +1 -0
  550. package/dist/entry-lock-D3C99MXS.mjs +1520 -0
  551. package/dist/entry-lock-D3C99MXS.mjs.map +1 -0
  552. package/dist/entry-lock-D9rnj2Lu.mjs +163 -0
  553. package/dist/entry-lock-D9rnj2Lu.mjs.map +1 -0
  554. package/dist/entry-lock-DX7QkqEg.d.mts +3503 -0
  555. package/dist/entry-lock-DX7QkqEg.d.mts.map +1 -0
  556. package/dist/entry-locks-CO_KaoU5.mjs +167 -0
  557. package/dist/entry-locks-CO_KaoU5.mjs.map +1 -0
  558. package/dist/error-CCTCskie.mjs +90 -0
  559. package/dist/error-CCTCskie.mjs.map +1 -0
  560. package/dist/errors-W3PA8HqB.mjs +447 -0
  561. package/dist/errors-W3PA8HqB.mjs.map +1 -0
  562. package/dist/escape-DN4Qmjsl.mjs +9 -0
  563. package/dist/escape-DN4Qmjsl.mjs.map +1 -0
  564. package/dist/field-defs-cache-B337z8UJ.mjs +77 -0
  565. package/dist/field-defs-cache-B337z8UJ.mjs.map +1 -0
  566. package/dist/focal-point-Gr34o-4o.mjs +23 -0
  567. package/dist/focal-point-Gr34o-4o.mjs.map +1 -0
  568. package/dist/fts-manager-DMb0sbIQ.mjs +413 -0
  569. package/dist/fts-manager-DMb0sbIQ.mjs.map +1 -0
  570. package/dist/hash-CLVFzWvx.mjs +37 -0
  571. package/dist/hash-CLVFzWvx.mjs.map +1 -0
  572. package/dist/hook-result-KY1jq21o.d.mts +31 -0
  573. package/dist/hook-result-KY1jq21o.d.mts.map +1 -0
  574. package/dist/hreflang-BgS2FqhH.d.mts +50 -0
  575. package/dist/hreflang-BgS2FqhH.d.mts.map +1 -0
  576. package/dist/hreflang-CrJwqoeb.mjs +105 -0
  577. package/dist/hreflang-CrJwqoeb.mjs.map +1 -0
  578. package/dist/http-route-dispatch-DAKlanXb.mjs +339 -0
  579. package/dist/http-route-dispatch-DAKlanXb.mjs.map +1 -0
  580. package/dist/identity-DRGSHEEr.mjs +35 -0
  581. package/dist/identity-DRGSHEEr.mjs.map +1 -0
  582. package/dist/import-DFr5B_hC.mjs +2020 -0
  583. package/dist/import-DFr5B_hC.mjs.map +1 -0
  584. package/dist/index-CDwKDkTq.d.mts +623 -0
  585. package/dist/index-CDwKDkTq.d.mts.map +1 -0
  586. package/dist/index.d.mts +27 -22
  587. package/dist/index.mjs +101 -89
  588. package/dist/init-lock-4eRRB4Le.mjs +56 -0
  589. package/dist/init-lock-4eRRB4Le.mjs.map +1 -0
  590. package/dist/install-finalization-5Os-QZ-2.mjs +58 -0
  591. package/dist/install-finalization-5Os-QZ-2.mjs.map +1 -0
  592. package/dist/lifecycle-7e-Lt_kX.mjs +25 -0
  593. package/dist/lifecycle-7e-Lt_kX.mjs.map +1 -0
  594. package/dist/load-Cu5bvCZh.mjs +28 -0
  595. package/dist/load-Cu5bvCZh.mjs.map +1 -0
  596. package/dist/loader-t4TxaFiQ.mjs +1004 -0
  597. package/dist/loader-t4TxaFiQ.mjs.map +1 -0
  598. package/dist/manifest-builder-D31UoJCu.mjs +189 -0
  599. package/dist/manifest-builder-D31UoJCu.mjs.map +1 -0
  600. package/dist/manifest-schema-Bkh8SeHd.mjs +491 -0
  601. package/dist/manifest-schema-Bkh8SeHd.mjs.map +1 -0
  602. package/dist/media/image-endpoint.mjs +1 -1
  603. package/dist/media/index.d.mts +1 -1
  604. package/dist/media/index.mjs +4 -4
  605. package/dist/media/local-runtime.d.mts +14 -12
  606. package/dist/media/local-runtime.d.mts.map +1 -1
  607. package/dist/media/local-runtime.mjs +12 -11
  608. package/dist/media/local-runtime.mjs.map +1 -1
  609. package/dist/media-TBlKCwo7.mjs +334 -0
  610. package/dist/media-TBlKCwo7.mjs.map +1 -0
  611. package/dist/media-allowlist-s60eAIf6.mjs +44 -0
  612. package/dist/media-allowlist-s60eAIf6.mjs.map +1 -0
  613. package/dist/media-folders-ClIRLUQv.mjs +210 -0
  614. package/dist/media-folders-ClIRLUQv.mjs.map +1 -0
  615. package/dist/media-url-DY_ijO3B.mjs +43 -0
  616. package/dist/media-url-DY_ijO3B.mjs.map +1 -0
  617. package/dist/media-usage-C4NolTpQ.mjs +1833 -0
  618. package/dist/media-usage-C4NolTpQ.mjs.map +1 -0
  619. package/dist/media-usage-activation-CAhmb14O.mjs +78 -0
  620. package/dist/media-usage-activation-CAhmb14O.mjs.map +1 -0
  621. package/dist/media-usage-work-Cu5DqewW.mjs +586 -0
  622. package/dist/media-usage-work-Cu5DqewW.mjs.map +1 -0
  623. package/dist/media-usage-work-DJr3rOEN.mjs +152 -0
  624. package/dist/media-usage-work-DJr3rOEN.mjs.map +1 -0
  625. package/dist/media-usage-write-fence-DW5oHT7q.mjs +42 -0
  626. package/dist/media-usage-write-fence-DW5oHT7q.mjs.map +1 -0
  627. package/dist/menus-DbgU9z5Q.mjs +3732 -0
  628. package/dist/menus-DbgU9z5Q.mjs.map +1 -0
  629. package/dist/menus-Wy8m5NcH.mjs +753 -0
  630. package/dist/menus-Wy8m5NcH.mjs.map +1 -0
  631. package/dist/migrations/index.d.mts +2 -2
  632. package/dist/migrations/index.d.mts.map +1 -1
  633. package/dist/migrations/index.mjs +6 -5
  634. package/dist/mime-CCYRC4r1.mjs +36 -0
  635. package/dist/mime-CCYRC4r1.mjs.map +1 -0
  636. package/dist/mode-CkmOhFqj.mjs +23 -0
  637. package/dist/mode-CkmOhFqj.mjs.map +1 -0
  638. package/dist/node-sqlite-compat-vpVaILnb.mjs +46 -0
  639. package/dist/node-sqlite-compat-vpVaILnb.mjs.map +1 -0
  640. package/dist/normalize-dChXQjwS.mjs +191 -0
  641. package/dist/normalize-dChXQjwS.mjs.map +1 -0
  642. package/dist/oauth-authorization-DZ-R-hmx.mjs +274 -0
  643. package/dist/oauth-authorization-DZ-R-hmx.mjs.map +1 -0
  644. package/dist/oauth-clients-BMPA8vjl.mjs +266 -0
  645. package/dist/oauth-clients-BMPA8vjl.mjs.map +1 -0
  646. package/dist/oauth-state-store-0gIdb48-.mjs +50 -0
  647. package/dist/oauth-state-store-0gIdb48-.mjs.map +1 -0
  648. package/dist/oauth-user-lookup-ChVW4UWu.mjs +26 -0
  649. package/dist/oauth-user-lookup-ChVW4UWu.mjs.map +1 -0
  650. package/dist/object-cache/memory.d.mts +1 -1
  651. package/dist/object-cache-DlSVbn5Y.mjs +534 -0
  652. package/dist/object-cache-DlSVbn5Y.mjs.map +1 -0
  653. package/dist/options-D5WcorD5.mjs +200 -0
  654. package/dist/options-D5WcorD5.mjs.map +1 -0
  655. package/dist/options-DAknChnw.d.mts +77 -0
  656. package/dist/options-DAknChnw.d.mts.map +1 -0
  657. package/dist/page/index.d.mts +2 -2
  658. package/dist/page/index.mjs +12 -11
  659. package/dist/page/index.mjs.map +1 -1
  660. package/dist/parse-Cr379Av9.mjs +81 -0
  661. package/dist/parse-Cr379Av9.mjs.map +1 -0
  662. package/dist/parse-tj9XLNO_.d.mts +165 -0
  663. package/dist/parse-tj9XLNO_.d.mts.map +1 -0
  664. package/dist/passkey-config-BD-wMaCf.mjs +46 -0
  665. package/dist/passkey-config-BD-wMaCf.mjs.map +1 -0
  666. package/dist/patterns-Do3iqi7N.mjs +145 -0
  667. package/dist/patterns-Do3iqi7N.mjs.map +1 -0
  668. package/dist/placeholder-CubPFn_L.d.mts +306 -0
  669. package/dist/placeholder-CubPFn_L.d.mts.map +1 -0
  670. package/dist/plugin-test-runtime.d.mts +97 -0
  671. package/dist/plugin-test-runtime.d.mts.map +1 -0
  672. package/dist/plugin-test-runtime.mjs +105 -0
  673. package/dist/plugin-types.d.mts +53 -15
  674. package/dist/plugin-types.d.mts.map +1 -1
  675. package/dist/plugin-types.mjs +18 -1
  676. package/dist/plugin-types.mjs.map +1 -0
  677. package/dist/plugin-utils.d.mts +12 -10
  678. package/dist/plugin-utils.d.mts.map +1 -1
  679. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -10
  680. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  681. package/dist/plugins/adapt-sandbox-entry.mjs +18 -13
  682. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  683. package/dist/plugins/host.d.mts +7 -0
  684. package/dist/plugins/host.mjs +45 -0
  685. package/dist/plugins/http-wire.d.mts +25 -0
  686. package/dist/plugins/http-wire.d.mts.map +1 -0
  687. package/dist/plugins/http-wire.mjs +148 -0
  688. package/dist/plugins/http-wire.mjs.map +1 -0
  689. package/dist/plugins/secret-redactor.d.mts +9 -0
  690. package/dist/plugins/secret-redactor.d.mts.map +1 -0
  691. package/dist/plugins/secret-redactor.mjs +51 -0
  692. package/dist/plugins/secret-redactor.mjs.map +1 -0
  693. package/dist/plugins-DHurtdXQ.mjs +277 -0
  694. package/dist/plugins-DHurtdXQ.mjs.map +1 -0
  695. package/dist/policy-lyZnjpwz.mjs +45 -0
  696. package/dist/policy-lyZnjpwz.mjs.map +1 -0
  697. package/dist/portable-text-oAwodbPS.mjs +286 -0
  698. package/dist/portable-text-oAwodbPS.mjs.map +1 -0
  699. package/dist/preview-Cup2bj8c.mjs +107 -0
  700. package/dist/preview-Cup2bj8c.mjs.map +1 -0
  701. package/dist/protocol-C1CNiKX4.d.mts +61 -0
  702. package/dist/protocol-C1CNiKX4.d.mts.map +1 -0
  703. package/dist/public-submission-Cs-pFMQK.mjs +245 -0
  704. package/dist/public-submission-Cs-pFMQK.mjs.map +1 -0
  705. package/dist/public-url-BWVHsfQv.mjs +101 -0
  706. package/dist/public-url-BWVHsfQv.mjs.map +1 -0
  707. package/dist/query-D-lxiOgn.mjs +890 -0
  708. package/dist/query-D-lxiOgn.mjs.map +1 -0
  709. package/dist/query-D7kHKOws.mjs +41 -0
  710. package/dist/query-D7kHKOws.mjs.map +1 -0
  711. package/dist/rate-limit-CqJn-w4h.mjs +120 -0
  712. package/dist/rate-limit-CqJn-w4h.mjs.map +1 -0
  713. package/dist/redirect-BrChFPIu.mjs +17 -0
  714. package/dist/redirect-BrChFPIu.mjs.map +1 -0
  715. package/dist/redirect-D2Yo-b6S.mjs +415 -0
  716. package/dist/redirect-D2Yo-b6S.mjs.map +1 -0
  717. package/dist/redirects-BCiTaIQ-.mjs +146 -0
  718. package/dist/redirects-BCiTaIQ-.mjs.map +1 -0
  719. package/dist/redirects-ByItliuu.mjs +644 -0
  720. package/dist/redirects-ByItliuu.mjs.map +1 -0
  721. package/dist/registry/testing.d.mts +14 -0
  722. package/dist/registry/testing.d.mts.map +1 -0
  723. package/dist/registry/testing.mjs +255 -0
  724. package/dist/registry/testing.mjs.map +1 -0
  725. package/dist/registry-CkuPoZs7.mjs +1222 -0
  726. package/dist/registry-CkuPoZs7.mjs.map +1 -0
  727. package/dist/relation-XTAtOpJO.mjs +334 -0
  728. package/dist/relation-XTAtOpJO.mjs.map +1 -0
  729. package/dist/relations-B4w-G5U9.mjs +309 -0
  730. package/dist/relations-B4w-G5U9.mjs.map +1 -0
  731. package/dist/relations-O63JWBRj.mjs +403 -0
  732. package/dist/relations-O63JWBRj.mjs.map +1 -0
  733. package/dist/request-cache-DaMhSQdx.mjs +104 -0
  734. package/dist/request-cache-DaMhSQdx.mjs.map +1 -0
  735. package/dist/request-context.d.mts +1 -1
  736. package/dist/request-meta-C8yl_sIs.mjs +141 -0
  737. package/dist/request-meta-C8yl_sIs.mjs.map +1 -0
  738. package/dist/resolve-BJIS8wKr.mjs +199 -0
  739. package/dist/resolve-BJIS8wKr.mjs.map +1 -0
  740. package/dist/route-wire-D66L2oaZ.mjs +197 -0
  741. package/dist/route-wire-D66L2oaZ.mjs.map +1 -0
  742. package/dist/routes-DYsTe-oR.mjs +321 -0
  743. package/dist/routes-DYsTe-oR.mjs.map +1 -0
  744. package/dist/runner-3gfxRsJG.d.mts +68 -0
  745. package/dist/runner-3gfxRsJG.d.mts.map +1 -0
  746. package/dist/runner-ClrleR8A.mjs +5502 -0
  747. package/dist/runner-ClrleR8A.mjs.map +1 -0
  748. package/dist/runtime.d.mts +13 -11
  749. package/dist/runtime.d.mts.map +1 -1
  750. package/dist/runtime.mjs +6 -6
  751. package/dist/schema-CPhPM9Do.mjs +420 -0
  752. package/dist/schema-CPhPM9Do.mjs.map +1 -0
  753. package/dist/schema-DEERRrKS.mjs +9 -0
  754. package/dist/schema-DEERRrKS.mjs.map +1 -0
  755. package/dist/scopes-Bn8_rCSt.mjs +27 -0
  756. package/dist/scopes-Bn8_rCSt.mjs.map +1 -0
  757. package/dist/search-lami_Ota.mjs +448 -0
  758. package/dist/search-lami_Ota.mjs.map +1 -0
  759. package/dist/secrets-DNgVgz_e.mjs +341 -0
  760. package/dist/secrets-DNgVgz_e.mjs.map +1 -0
  761. package/dist/sections-BIpd4Cxf.mjs +346 -0
  762. package/dist/sections-BIpd4Cxf.mjs.map +1 -0
  763. package/dist/seed/index.d.mts +2 -2
  764. package/dist/seed/index.mjs +35 -33
  765. package/dist/seo/index.d.mts +3 -3
  766. package/dist/seo/index.mjs +26 -24
  767. package/dist/seo/index.mjs.map +1 -1
  768. package/dist/seo-BtU70b7l.mjs +114 -0
  769. package/dist/seo-BtU70b7l.mjs.map +1 -0
  770. package/dist/seo-_4qmazxz.mjs +133 -0
  771. package/dist/seo-_4qmazxz.mjs.map +1 -0
  772. package/dist/service-Bpy5iTX0.mjs +150 -0
  773. package/dist/service-Bpy5iTX0.mjs.map +1 -0
  774. package/dist/session-user-BQeS2Mrb.mjs +51 -0
  775. package/dist/session-user-BQeS2Mrb.mjs.map +1 -0
  776. package/dist/settings-DmroR53o.mjs +420 -0
  777. package/dist/settings-DmroR53o.mjs.map +1 -0
  778. package/dist/settings-g2F2a3Ub.mjs +51 -0
  779. package/dist/settings-g2F2a3Ub.mjs.map +1 -0
  780. package/dist/setup-complete-BrZaXpVV.mjs +26 -0
  781. package/dist/setup-complete-BrZaXpVV.mjs.map +1 -0
  782. package/dist/setup-nonce-Cb9-884O.mjs +25 -0
  783. package/dist/setup-nonce-Cb9-884O.mjs.map +1 -0
  784. package/dist/single-flight-cache-B5O2qhO1.mjs +104 -0
  785. package/dist/single-flight-cache-B5O2qhO1.mjs.map +1 -0
  786. package/dist/site-url-DjhYCaep.mjs +16 -0
  787. package/dist/site-url-DjhYCaep.mjs.map +1 -0
  788. package/dist/slugify-T5GHH42D.mjs +17 -0
  789. package/dist/slugify-T5GHH42D.mjs.map +1 -0
  790. package/dist/snapshot-C32Xuv3o.mjs +233 -0
  791. package/dist/snapshot-C32Xuv3o.mjs.map +1 -0
  792. package/dist/ssrf-Co1GGFZz.mjs +406 -0
  793. package/dist/ssrf-Co1GGFZz.mjs.map +1 -0
  794. package/dist/state-C7gCoiHr.mjs +153 -0
  795. package/dist/state-C7gCoiHr.mjs.map +1 -0
  796. package/dist/status-DLoBmcDz.mjs +30 -0
  797. package/dist/status-DLoBmcDz.mjs.map +1 -0
  798. package/dist/storage/local.d.mts +1 -1
  799. package/dist/storage/local.mjs +1 -1
  800. package/dist/storage/s3.d.mts +1 -1
  801. package/dist/storage/s3.mjs +1 -1
  802. package/dist/storage-query-CPctdMKX.d.mts +1519 -0
  803. package/dist/storage-query-CPctdMKX.d.mts.map +1 -0
  804. package/dist/target-CUKlGrXb.mjs +27 -0
  805. package/dist/target-CUKlGrXb.mjs.map +1 -0
  806. package/dist/taxonomies-BpqpXJUE.mjs +707 -0
  807. package/dist/taxonomies-BpqpXJUE.mjs.map +1 -0
  808. package/dist/taxonomies-ClCo4IGO.mjs +899 -0
  809. package/dist/taxonomies-ClCo4IGO.mjs.map +1 -0
  810. package/dist/taxonomy-Dj1vpw5E.mjs +508 -0
  811. package/dist/taxonomy-Dj1vpw5E.mjs.map +1 -0
  812. package/dist/tokens-Ns02GAma.mjs +171 -0
  813. package/dist/tokens-Ns02GAma.mjs.map +1 -0
  814. package/dist/transaction-BcJO4Tmc.mjs +29 -0
  815. package/dist/transaction-BcJO4Tmc.mjs.map +1 -0
  816. package/dist/transport-B8P1xsqk.mjs +136 -0
  817. package/dist/transport-B8P1xsqk.mjs.map +1 -0
  818. package/dist/transport-BLHZZcD_.d.mts +42 -0
  819. package/dist/transport-BLHZZcD_.d.mts.map +1 -0
  820. package/dist/trusted-proxy-Cg7SuD15.mjs +51 -0
  821. package/dist/trusted-proxy-Cg7SuD15.mjs.map +1 -0
  822. package/dist/turnstile-DWCSh_Qc.mjs +53 -0
  823. package/dist/turnstile-DWCSh_Qc.mjs.map +1 -0
  824. package/dist/types-B3RkqvDW.mjs +156 -0
  825. package/dist/types-B3RkqvDW.mjs.map +1 -0
  826. package/dist/types-BkUg2yHx.mjs +92 -0
  827. package/dist/types-BkUg2yHx.mjs.map +1 -0
  828. package/dist/types-BtuppOTV.mjs +16 -0
  829. package/dist/types-BtuppOTV.mjs.map +1 -0
  830. package/dist/types-CCR3ivXE.d.mts +363 -0
  831. package/dist/types-CCR3ivXE.d.mts.map +1 -0
  832. package/dist/types-CSHgU_-_.mjs +18 -0
  833. package/dist/types-CSHgU_-_.mjs.map +1 -0
  834. package/dist/types-CbwqGOXm.d.mts +766 -0
  835. package/dist/types-CbwqGOXm.d.mts.map +1 -0
  836. package/dist/types-D4RGIc2I.d.mts +198 -0
  837. package/dist/types-D4RGIc2I.d.mts.map +1 -0
  838. package/dist/types-DEHidMEk.d.mts +1637 -0
  839. package/dist/types-DEHidMEk.d.mts.map +1 -0
  840. package/dist/types-DQeU2SR7.d.mts +279 -0
  841. package/dist/types-DQeU2SR7.d.mts.map +1 -0
  842. package/dist/types-DxQWoQLA.d.mts +264 -0
  843. package/dist/types-DxQWoQLA.d.mts.map +1 -0
  844. package/dist/types-FBBnGZ2Y.d.mts +198 -0
  845. package/dist/types-FBBnGZ2Y.d.mts.map +1 -0
  846. package/dist/types-ZCnlropY.mjs +69 -0
  847. package/dist/types-ZCnlropY.mjs.map +1 -0
  848. package/dist/types-_Qtyawiy.d.mts +124 -0
  849. package/dist/types-_Qtyawiy.d.mts.map +1 -0
  850. package/dist/types-gC6FAoa_.d.mts +75 -0
  851. package/dist/types-gC6FAoa_.d.mts.map +1 -0
  852. package/dist/types-k--LneIF.mjs +22 -0
  853. package/dist/types-k--LneIF.mjs.map +1 -0
  854. package/dist/upload-attempts-2xdnoKGe.mjs +27 -0
  855. package/dist/upload-attempts-2xdnoKGe.mjs.map +1 -0
  856. package/dist/url-pattern-3m3reMzr.mjs +33 -0
  857. package/dist/url-pattern-3m3reMzr.mjs.map +1 -0
  858. package/dist/user-DroRntkx.mjs +171 -0
  859. package/dist/user-DroRntkx.mjs.map +1 -0
  860. package/dist/utils-CC2oNGV8.mjs +435 -0
  861. package/dist/utils-CC2oNGV8.mjs.map +1 -0
  862. package/dist/validate-BCP9HNDn.mjs +384 -0
  863. package/dist/validate-BCP9HNDn.mjs.map +1 -0
  864. package/dist/validate-CyQ7I3xF.d.mts +410 -0
  865. package/dist/validate-CyQ7I3xF.d.mts.map +1 -0
  866. package/dist/validate-DANX1-Qi.mjs +120 -0
  867. package/dist/validate-DANX1-Qi.mjs.map +1 -0
  868. package/dist/validation-DBy6WF94.mjs +216 -0
  869. package/dist/validation-DBy6WF94.mjs.map +1 -0
  870. package/dist/version-B57E4Uo7.mjs +7 -0
  871. package/dist/version-B57E4Uo7.mjs.map +1 -0
  872. package/dist/widgets-wQ7Xcgq8.mjs +126 -0
  873. package/dist/widgets-wQ7Xcgq8.mjs.map +1 -0
  874. package/dist/wxr-taxonomies-DIHfvEDt.mjs +406 -0
  875. package/dist/wxr-taxonomies-DIHfvEDt.mjs.map +1 -0
  876. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts +34 -0
  877. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts.map +1 -0
  878. package/dist/zod-generator-D_yHIWfs.mjs +329 -0
  879. package/dist/zod-generator-D_yHIWfs.mjs.map +1 -0
  880. package/package.json +36 -11
  881. package/src/api/errors.ts +16 -0
  882. package/src/api/handlers/backup.ts +11 -5
  883. package/src/api/handlers/content.ts +160 -6
  884. package/src/api/handlers/dashboard.ts +31 -1
  885. package/src/api/handlers/index.ts +3 -0
  886. package/src/api/handlers/manifest.ts +4 -6
  887. package/src/api/handlers/marketplace.ts +99 -15
  888. package/src/api/handlers/media-upload.ts +31 -4
  889. package/src/api/handlers/plugin-settings.ts +35 -3
  890. package/src/api/handlers/redirects.ts +221 -138
  891. package/src/api/handlers/registry.ts +62 -21
  892. package/src/api/handlers/revision.ts +14 -26
  893. package/src/api/handlers/snapshot.ts +4 -1
  894. package/src/api/handlers/taxonomies.ts +70 -5
  895. package/src/api/handlers/validation.ts +120 -19
  896. package/src/api/openapi/document.ts +34 -17
  897. package/src/api/schemas/content.ts +26 -14
  898. package/src/api/schemas/entry-lock.ts +9 -0
  899. package/src/api/schemas/search.ts +4 -0
  900. package/src/api/types.ts +2 -0
  901. package/src/astro/integration/index.ts +16 -3
  902. package/src/astro/integration/routes.ts +84 -0
  903. package/src/astro/integration/runtime.ts +31 -23
  904. package/src/astro/integration/virtual-modules.ts +4 -0
  905. package/src/astro/integration/vite-config.ts +1 -0
  906. package/src/astro/middleware/auth.ts +25 -4
  907. package/src/astro/middleware/request-context.ts +28 -10
  908. package/src/astro/middleware.ts +17 -1
  909. package/src/astro/prefetch.ts +2 -2
  910. package/src/astro/routes/api/admin/comments/[id]/status.ts +22 -58
  911. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +2 -15
  912. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +2 -25
  913. package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +1 -0
  914. package/src/astro/routes/api/admin/plugins/[id]/update.ts +23 -4
  915. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +12 -2
  916. package/src/astro/routes/api/admin/plugins/registry/[id]/uninstall.ts +1 -0
  917. package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +29 -10
  918. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +8 -2
  919. package/src/astro/routes/api/admin/plugins/registry/install.ts +15 -4
  920. package/src/astro/routes/api/admin/plugins/registry/verify.ts +2 -1
  921. package/src/astro/routes/api/admin/plugins/updates.ts +6 -1
  922. package/src/astro/routes/api/admin/scheduled-policy-rejections/[collection]/[id].ts +34 -0
  923. package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +4 -259
  924. package/src/astro/routes/api/content/[collection]/[id]/plugin-extensions/[pluginId]/[kind]/[extensionId].ts +29 -0
  925. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +10 -3
  926. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +10 -1
  927. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +5 -1
  928. package/src/astro/routes/api/health.ts +23 -0
  929. package/src/astro/routes/api/manifest.ts +14 -4
  930. package/src/astro/routes/api/mcp.ts +2 -1
  931. package/src/astro/routes/api/media/asset/[id]/[filename].ts +50 -0
  932. package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +13 -81
  933. package/src/astro/routes/api/redirects/[id].ts +0 -3
  934. package/src/astro/routes/api/redirects/index.ts +0 -2
  935. package/src/astro/routes/api/search/index.ts +1 -0
  936. package/src/astro/routes/api/visual-editing/action-token.ts +36 -0
  937. package/src/astro/routes/api/visual-editing/content/[collection]/[id]/publish.ts +32 -0
  938. package/src/astro/routes/api/visual-editing/toolbar-labels.ts +16 -0
  939. package/src/astro/routes/sitemap-[collection].xml.ts +7 -4
  940. package/src/astro/types.ts +70 -9
  941. package/src/cli/commands/bundle-utils.ts +19 -19
  942. package/src/cli/commands/bundle.ts +9 -6
  943. package/src/cli/commands/content.ts +1 -1
  944. package/src/cli/commands/doctor.ts +25 -0
  945. package/src/cli/commands/export-seed.ts +193 -56
  946. package/src/cli/commands/migrate.ts +71 -23
  947. package/src/cli/commands/publish.ts +2 -2
  948. package/src/comments/public-submission.ts +246 -0
  949. package/src/comments/service.ts +59 -12
  950. package/src/components/EmDashHead.astro +1 -0
  951. package/src/components/widgets/Archives.astro +6 -5
  952. package/src/config/secrets.ts +25 -11
  953. package/src/content/known-fields.ts +44 -0
  954. package/src/database/connection.ts +5 -1
  955. package/src/database/content-datetime.ts +123 -0
  956. package/src/database/datetime-storage.ts +452 -0
  957. package/src/database/dialect-helpers.ts +36 -1
  958. package/src/database/migration-lock.ts +140 -0
  959. package/src/database/migrations/078_menu_item_translation_groups.ts +15 -0
  960. package/src/database/migrations/079_datetime_normalization.ts +13 -0
  961. package/src/database/migrations/080_content_translation_locale_unique.ts +88 -0
  962. package/src/database/migrations/081_redirect_write_guards.ts +257 -0
  963. package/src/database/migrations/082_taxonomy_translation_locale_unique.ts +49 -0
  964. package/src/database/migrations/runner.ts +57 -15
  965. package/src/database/pg-migration-lock.ts +2 -2
  966. package/src/database/repositories/byline.ts +9 -0
  967. package/src/database/repositories/comment.ts +86 -0
  968. package/src/database/repositories/content.ts +391 -69
  969. package/src/database/repositories/media.ts +35 -4
  970. package/src/database/repositories/menu.ts +1 -0
  971. package/src/database/repositories/options.ts +46 -4
  972. package/src/database/repositories/redirect.ts +259 -64
  973. package/src/database/repositories/revision.ts +116 -17
  974. package/src/database/repositories/taxonomy.ts +34 -0
  975. package/src/database/repositories/types.ts +2 -0
  976. package/src/database/types.ts +11 -0
  977. package/src/datetime-normalization.ts +311 -0
  978. package/src/db/node-sqlite-compat.ts +3 -2
  979. package/src/emdash-runtime.ts +1925 -422
  980. package/src/fields/image.ts +2 -0
  981. package/src/i18n/config.ts +6 -6
  982. package/src/i18n/resolve.ts +54 -11
  983. package/src/index.ts +87 -0
  984. package/src/loader.ts +14 -0
  985. package/src/mcp/server.ts +194 -64
  986. package/src/media/usage/extractor.ts +50 -15
  987. package/src/media/usage/types.ts +1 -1
  988. package/src/menus/index.ts +49 -16
  989. package/src/migrations/direct-executor.ts +40 -2
  990. package/src/migrations/index.ts +1 -0
  991. package/src/migrations/protocol.ts +11 -1
  992. package/src/plugin-test-runtime.ts +17 -0
  993. package/src/plugin-types.ts +119 -21
  994. package/src/plugins/adapt-sandbox-entry.ts +34 -27
  995. package/src/plugins/content-access.ts +170 -0
  996. package/src/plugins/content-policy.ts +74 -0
  997. package/src/plugins/context.ts +742 -150
  998. package/src/plugins/cron.ts +18 -10
  999. package/src/plugins/define-plugin.ts +55 -54
  1000. package/src/plugins/editor-draft.ts +257 -0
  1001. package/src/plugins/hooks.ts +129 -2
  1002. package/src/plugins/host.ts +29 -0
  1003. package/src/plugins/http-route-dispatch.ts +389 -0
  1004. package/src/plugins/http-wire.ts +180 -0
  1005. package/src/plugins/index.ts +88 -3
  1006. package/src/plugins/install-finalization.ts +77 -0
  1007. package/src/plugins/lifecycle.ts +47 -0
  1008. package/src/plugins/manifest-schema.ts +314 -58
  1009. package/src/plugins/media.ts +166 -0
  1010. package/src/plugins/request-meta.ts +12 -2
  1011. package/src/plugins/route-wire.ts +304 -0
  1012. package/src/plugins/routes.ts +38 -5
  1013. package/src/plugins/sandbox/index.ts +4 -0
  1014. package/src/plugins/sandbox/proxy.ts +129 -0
  1015. package/src/plugins/sandbox/types.ts +67 -5
  1016. package/src/plugins/secret-redactor.ts +65 -0
  1017. package/src/plugins/settings.ts +303 -0
  1018. package/src/plugins/state.ts +26 -0
  1019. package/src/plugins/types.ts +488 -15
  1020. package/src/query.ts +55 -1
  1021. package/src/registry/authoritative-records.ts +26 -0
  1022. package/src/registry/config.ts +70 -22
  1023. package/src/registry/testing.ts +100 -0
  1024. package/src/registry/types.ts +7 -64
  1025. package/src/scheduled-publish.ts +70 -3
  1026. package/src/schema/index.ts +1 -0
  1027. package/src/schema/registry.ts +45 -1
  1028. package/src/schema/types.ts +7 -0
  1029. package/src/schema/zod-generator.ts +5 -13
  1030. package/src/search/fts-manager.ts +3 -3
  1031. package/src/search/query.ts +32 -5
  1032. package/src/search/types.ts +8 -0
  1033. package/src/seed/apply.ts +37 -3
  1034. package/src/seed/types.ts +6 -1
  1035. package/src/seo/hreflang.ts +9 -6
  1036. package/src/settings/index.ts +53 -11
  1037. package/src/visual-editing/action-token.ts +31 -0
  1038. package/src/visual-editing/toolbar-bootstrap.ts +31 -6
  1039. package/src/visual-editing/toolbar.ts +103 -12
  1040. package/src/widgets/archives.ts +10 -9
  1041. package/src/widgets/index.ts +11 -1
  1042. package/dist/activation-DyNTe_Tl.mjs +0 -382
  1043. package/dist/activation-DyNTe_Tl.mjs.map +0 -1
  1044. package/dist/adapters-DCEgOBXi.d.mts +0 -171
  1045. package/dist/adapters-DCEgOBXi.d.mts.map +0 -1
  1046. package/dist/after-CBU2vkoO.mjs +0 -96
  1047. package/dist/after-CBU2vkoO.mjs.map +0 -1
  1048. package/dist/allowed-origins-GFUVavRj.mjs +0 -116
  1049. package/dist/allowed-origins-GFUVavRj.mjs.map +0 -1
  1050. package/dist/api-BvxJmnFY.mjs +0 -10094
  1051. package/dist/api-BvxJmnFY.mjs.map +0 -1
  1052. package/dist/api-tokens-xpGqMHrC.mjs +0 -163
  1053. package/dist/api-tokens-xpGqMHrC.mjs.map +0 -1
  1054. package/dist/apply-DLmM3R7f.mjs +0 -984
  1055. package/dist/apply-DLmM3R7f.mjs.map +0 -1
  1056. package/dist/artifact-fetch-P2JXVwOq.mjs +0 -972
  1057. package/dist/artifact-fetch-P2JXVwOq.mjs.map +0 -1
  1058. package/dist/authorize-C2QHlWSS.mjs +0 -40
  1059. package/dist/authorize-C2QHlWSS.mjs.map +0 -1
  1060. package/dist/backup-oS8ft5Cm.mjs +0 -241
  1061. package/dist/backup-oS8ft5Cm.mjs.map +0 -1
  1062. package/dist/base64-CvLhUKQv.mjs +0 -63
  1063. package/dist/base64-CvLhUKQv.mjs.map +0 -1
  1064. package/dist/bundle-CL0JjIPx.mjs +0 -663
  1065. package/dist/bundle-CL0JjIPx.mjs.map +0 -1
  1066. package/dist/byline-Vdi85CsZ.mjs +0 -902
  1067. package/dist/byline-Vdi85CsZ.mjs.map +0 -1
  1068. package/dist/byline-fields-DPVRFMz2.mjs +0 -123
  1069. package/dist/byline-fields-DPVRFMz2.mjs.map +0 -1
  1070. package/dist/byline-registry-BxDGIO0I.mjs +0 -406
  1071. package/dist/byline-registry-BxDGIO0I.mjs.map +0 -1
  1072. package/dist/bylines-BX8QhcTk.mjs +0 -232
  1073. package/dist/bylines-BX8QhcTk.mjs.map +0 -1
  1074. package/dist/bylines-w-E1IEQd.mjs +0 -214
  1075. package/dist/bylines-w-E1IEQd.mjs.map +0 -1
  1076. package/dist/cache--7HKu5Xm.mjs +0 -108
  1077. package/dist/cache--7HKu5Xm.mjs.map +0 -1
  1078. package/dist/capture-triggers-CeAsC76Z.mjs +0 -362
  1079. package/dist/capture-triggers-CeAsC76Z.mjs.map +0 -1
  1080. package/dist/challenge-store-BIOak-tp.mjs +0 -51
  1081. package/dist/challenge-store-BIOak-tp.mjs.map +0 -1
  1082. package/dist/chrome-tags-DzDQBCjX.mjs +0 -24
  1083. package/dist/chrome-tags-DzDQBCjX.mjs.map +0 -1
  1084. package/dist/chunks-VG_tyqnP.mjs +0 -25
  1085. package/dist/chunks-VG_tyqnP.mjs.map +0 -1
  1086. package/dist/collection-deletion-BCwaWTDw.mjs +0 -436
  1087. package/dist/collection-deletion-BCwaWTDw.mjs.map +0 -1
  1088. package/dist/collection-slugs-cache-7lTmNzeA.mjs +0 -85
  1089. package/dist/collection-slugs-cache-7lTmNzeA.mjs.map +0 -1
  1090. package/dist/comment-reaction-CDyvPQRj.mjs +0 -85
  1091. package/dist/comment-reaction-CDyvPQRj.mjs.map +0 -1
  1092. package/dist/comment-vxOzWbZN.mjs +0 -255
  1093. package/dist/comment-vxOzWbZN.mjs.map +0 -1
  1094. package/dist/comments-VzmVLyaC.mjs +0 -204
  1095. package/dist/comments-VzmVLyaC.mjs.map +0 -1
  1096. package/dist/components-CL6Wkdk-.mjs +0 -108
  1097. package/dist/components-CL6Wkdk-.mjs.map +0 -1
  1098. package/dist/config--eWjQJE5.mjs +0 -217
  1099. package/dist/config--eWjQJE5.mjs.map +0 -1
  1100. package/dist/config-C3EBstHi.mjs +0 -72
  1101. package/dist/config-C3EBstHi.mjs.map +0 -1
  1102. package/dist/config-CGAhyOjP.d.mts +0 -6653
  1103. package/dist/config-CGAhyOjP.d.mts.map +0 -1
  1104. package/dist/config-ChFzshGd.d.mts +0 -34
  1105. package/dist/config-ChFzshGd.d.mts.map +0 -1
  1106. package/dist/content-CNfMWuhY.mjs +0 -1841
  1107. package/dist/content-CNfMWuhY.mjs.map +0 -1
  1108. package/dist/content-list-query-B8d4UQp9.d.mts +0 -26
  1109. package/dist/content-list-query-B8d4UQp9.d.mts.map +0 -1
  1110. package/dist/content-refresh-GTMyi2Xy.mjs +0 -3588
  1111. package/dist/content-refresh-GTMyi2Xy.mjs.map +0 -1
  1112. package/dist/content-repair-CIMt5C0U.mjs +0 -440
  1113. package/dist/content-repair-CIMt5C0U.mjs.map +0 -1
  1114. package/dist/context-C9PB8vGd.mjs +0 -1308
  1115. package/dist/context-C9PB8vGd.mjs.map +0 -1
  1116. package/dist/cron-DHAy9oyq.mjs +0 -277
  1117. package/dist/cron-DHAy9oyq.mjs.map +0 -1
  1118. package/dist/dashboard-BNSvAN8A.mjs +0 -140
  1119. package/dist/dashboard-BNSvAN8A.mjs.map +0 -1
  1120. package/dist/db-errors-Cl-sKYTm.mjs +0 -55
  1121. package/dist/db-errors-Cl-sKYTm.mjs.map +0 -1
  1122. package/dist/default-ByZ0JqZo.mjs +0 -81
  1123. package/dist/default-ByZ0JqZo.mjs.map +0 -1
  1124. package/dist/deferred-tasks-Cu4NSJpa.d.mts +0 -9
  1125. package/dist/deferred-tasks-Cu4NSJpa.d.mts.map +0 -1
  1126. package/dist/dev-typegen-DHT7lcMU.mjs +0 -29
  1127. package/dist/dev-typegen-DHT7lcMU.mjs.map +0 -1
  1128. package/dist/device-flow-Cf6bhCCT.mjs +0 -466
  1129. package/dist/device-flow-Cf6bhCCT.mjs.map +0 -1
  1130. package/dist/dialect-helpers-BcQvkHgn.mjs +0 -283
  1131. package/dist/dialect-helpers-BcQvkHgn.mjs.map +0 -1
  1132. package/dist/direct-executor-yAyUGSqB.mjs +0 -85
  1133. package/dist/direct-executor-yAyUGSqB.mjs.map +0 -1
  1134. package/dist/dist-BAsh8dbf.mjs +0 -810
  1135. package/dist/dist-BAsh8dbf.mjs.map +0 -1
  1136. package/dist/email-console-DNup1Fku.mjs +0 -50
  1137. package/dist/email-console-DNup1Fku.mjs.map +0 -1
  1138. package/dist/enrich-t2Xvjdqa.mjs +0 -194
  1139. package/dist/enrich-t2Xvjdqa.mjs.map +0 -1
  1140. package/dist/entry-lock-BEr8gDkG.mjs +0 -163
  1141. package/dist/entry-lock-BEr8gDkG.mjs.map +0 -1
  1142. package/dist/entry-lock-CGAtrwAR.d.mts +0 -3409
  1143. package/dist/entry-lock-CGAtrwAR.d.mts.map +0 -1
  1144. package/dist/entry-lock-DIYHAaSw.mjs +0 -1281
  1145. package/dist/entry-lock-DIYHAaSw.mjs.map +0 -1
  1146. package/dist/entry-locks-BEcX7ET0.mjs +0 -167
  1147. package/dist/entry-locks-BEcX7ET0.mjs.map +0 -1
  1148. package/dist/error-BDcFyoRt.mjs +0 -90
  1149. package/dist/error-BDcFyoRt.mjs.map +0 -1
  1150. package/dist/errors-DvMdNrgf.mjs +0 -434
  1151. package/dist/errors-DvMdNrgf.mjs.map +0 -1
  1152. package/dist/escape-B3asJC6W.mjs +0 -9
  1153. package/dist/escape-B3asJC6W.mjs.map +0 -1
  1154. package/dist/field-defs-cache-Cf5FHK0M.mjs +0 -77
  1155. package/dist/field-defs-cache-Cf5FHK0M.mjs.map +0 -1
  1156. package/dist/focal-point-BeWFo6Xx.mjs +0 -23
  1157. package/dist/focal-point-BeWFo6Xx.mjs.map +0 -1
  1158. package/dist/fts-manager-iddym8cd.mjs +0 -413
  1159. package/dist/fts-manager-iddym8cd.mjs.map +0 -1
  1160. package/dist/hash-BRweX6jz.mjs +0 -37
  1161. package/dist/hash-BRweX6jz.mjs.map +0 -1
  1162. package/dist/hook-result-BrshYHLx.d.mts +0 -31
  1163. package/dist/hook-result-BrshYHLx.d.mts.map +0 -1
  1164. package/dist/hreflang-CQpu5bMy.d.mts +0 -48
  1165. package/dist/hreflang-CQpu5bMy.d.mts.map +0 -1
  1166. package/dist/hreflang-DshnweTC.mjs +0 -103
  1167. package/dist/hreflang-DshnweTC.mjs.map +0 -1
  1168. package/dist/identity-CjGKDq8J.mjs +0 -35
  1169. package/dist/identity-CjGKDq8J.mjs.map +0 -1
  1170. package/dist/import-D96g2otw.mjs +0 -2020
  1171. package/dist/import-D96g2otw.mjs.map +0 -1
  1172. package/dist/index-1ECYpfiF.d.mts +0 -278
  1173. package/dist/index-1ECYpfiF.d.mts.map +0 -1
  1174. package/dist/init-lock-CFNBe_iH.mjs +0 -56
  1175. package/dist/init-lock-CFNBe_iH.mjs.map +0 -1
  1176. package/dist/load-DPtY9cZo.mjs +0 -28
  1177. package/dist/load-DPtY9cZo.mjs.map +0 -1
  1178. package/dist/loader-WJi6GFRn.mjs +0 -1004
  1179. package/dist/loader-WJi6GFRn.mjs.map +0 -1
  1180. package/dist/manifest-builder-BfNlGQIA.mjs +0 -189
  1181. package/dist/manifest-builder-BfNlGQIA.mjs.map +0 -1
  1182. package/dist/manifest-schema-CILooI5J.mjs +0 -301
  1183. package/dist/manifest-schema-CILooI5J.mjs.map +0 -1
  1184. package/dist/media-BBm8Wg3f.mjs +0 -318
  1185. package/dist/media-BBm8Wg3f.mjs.map +0 -1
  1186. package/dist/media-C1EIZKh1.mjs +0 -464
  1187. package/dist/media-C1EIZKh1.mjs.map +0 -1
  1188. package/dist/media-allowlist-elXJgb_K.mjs +0 -44
  1189. package/dist/media-allowlist-elXJgb_K.mjs.map +0 -1
  1190. package/dist/media-folders-DASfX_DH.mjs +0 -210
  1191. package/dist/media-folders-DASfX_DH.mjs.map +0 -1
  1192. package/dist/media-upload-C7_AQJ5v.mjs +0 -147
  1193. package/dist/media-upload-C7_AQJ5v.mjs.map +0 -1
  1194. package/dist/media-url-8dVl1loq.mjs +0 -43
  1195. package/dist/media-url-8dVl1loq.mjs.map +0 -1
  1196. package/dist/media-usage-C1EswMTq.mjs +0 -1833
  1197. package/dist/media-usage-C1EswMTq.mjs.map +0 -1
  1198. package/dist/media-usage-activation-CrHNltlL.mjs +0 -78
  1199. package/dist/media-usage-activation-CrHNltlL.mjs.map +0 -1
  1200. package/dist/media-usage-work-C5B1zT1c.mjs +0 -586
  1201. package/dist/media-usage-work-C5B1zT1c.mjs.map +0 -1
  1202. package/dist/media-usage-work-IkQx_Yz6.mjs +0 -152
  1203. package/dist/media-usage-work-IkQx_Yz6.mjs.map +0 -1
  1204. package/dist/media-usage-write-fence-B9anjOSg.mjs +0 -42
  1205. package/dist/media-usage-write-fence-B9anjOSg.mjs.map +0 -1
  1206. package/dist/menus-D8mC4eaN.mjs +0 -3989
  1207. package/dist/menus-D8mC4eaN.mjs.map +0 -1
  1208. package/dist/menus-UdwjHZJC.mjs +0 -752
  1209. package/dist/menus-UdwjHZJC.mjs.map +0 -1
  1210. package/dist/mime-DYpsOAny.mjs +0 -36
  1211. package/dist/mime-DYpsOAny.mjs.map +0 -1
  1212. package/dist/mode-Dm4BHhRH.mjs +0 -23
  1213. package/dist/mode-Dm4BHhRH.mjs.map +0 -1
  1214. package/dist/node-sqlite-compat-2sezm-Zd.mjs +0 -46
  1215. package/dist/node-sqlite-compat-2sezm-Zd.mjs.map +0 -1
  1216. package/dist/normalize-4nkKGsuW.mjs +0 -191
  1217. package/dist/normalize-4nkKGsuW.mjs.map +0 -1
  1218. package/dist/oauth-authorization-BxE_lURD.mjs +0 -274
  1219. package/dist/oauth-authorization-BxE_lURD.mjs.map +0 -1
  1220. package/dist/oauth-clients-DJIdOdq0.mjs +0 -266
  1221. package/dist/oauth-clients-DJIdOdq0.mjs.map +0 -1
  1222. package/dist/oauth-state-store-CsdxP57n.mjs +0 -50
  1223. package/dist/oauth-state-store-CsdxP57n.mjs.map +0 -1
  1224. package/dist/oauth-user-lookup-HzzW-dkF.mjs +0 -26
  1225. package/dist/oauth-user-lookup-HzzW-dkF.mjs.map +0 -1
  1226. package/dist/object-cache-DVKnyOfy.mjs +0 -534
  1227. package/dist/object-cache-DVKnyOfy.mjs.map +0 -1
  1228. package/dist/options-D1FBiAv1.mjs +0 -172
  1229. package/dist/options-D1FBiAv1.mjs.map +0 -1
  1230. package/dist/options-D8Y0VHc7.d.mts +0 -227
  1231. package/dist/options-D8Y0VHc7.d.mts.map +0 -1
  1232. package/dist/parse-WRg5C3NX.mjs +0 -81
  1233. package/dist/parse-WRg5C3NX.mjs.map +0 -1
  1234. package/dist/passkey-config-qIdO-wF6.mjs +0 -46
  1235. package/dist/passkey-config-qIdO-wF6.mjs.map +0 -1
  1236. package/dist/patterns-DC8CLptu.mjs +0 -145
  1237. package/dist/patterns-DC8CLptu.mjs.map +0 -1
  1238. package/dist/placeholder-COrvARyD.d.mts +0 -306
  1239. package/dist/placeholder-COrvARyD.d.mts.map +0 -1
  1240. package/dist/policy-XCfb-IE9.mjs +0 -45
  1241. package/dist/policy-XCfb-IE9.mjs.map +0 -1
  1242. package/dist/portable-text-BS3d5n-0.mjs +0 -286
  1243. package/dist/portable-text-BS3d5n-0.mjs.map +0 -1
  1244. package/dist/preview-BxwsGgGp.mjs +0 -107
  1245. package/dist/preview-BxwsGgGp.mjs.map +0 -1
  1246. package/dist/protocol-CLn58-nw.d.mts +0 -52
  1247. package/dist/protocol-CLn58-nw.d.mts.map +0 -1
  1248. package/dist/public-url-FWWAvnre.mjs +0 -101
  1249. package/dist/public-url-FWWAvnre.mjs.map +0 -1
  1250. package/dist/query-DygOte9M.mjs +0 -890
  1251. package/dist/query-DygOte9M.mjs.map +0 -1
  1252. package/dist/query-gtXT03Wc.mjs +0 -41
  1253. package/dist/query-gtXT03Wc.mjs.map +0 -1
  1254. package/dist/rate-limit-CQUPm0dh.mjs +0 -120
  1255. package/dist/rate-limit-CQUPm0dh.mjs.map +0 -1
  1256. package/dist/redirect-D1cWafi6.mjs +0 -17
  1257. package/dist/redirect-D1cWafi6.mjs.map +0 -1
  1258. package/dist/redirect-DId44BS1.mjs +0 -326
  1259. package/dist/redirect-DId44BS1.mjs.map +0 -1
  1260. package/dist/redirects-DN-ZE33W.mjs +0 -579
  1261. package/dist/redirects-DN-ZE33W.mjs.map +0 -1
  1262. package/dist/registry-DTqaqxed.mjs +0 -1195
  1263. package/dist/registry-DTqaqxed.mjs.map +0 -1
  1264. package/dist/relation-DxgCHOBw.mjs +0 -334
  1265. package/dist/relation-DxgCHOBw.mjs.map +0 -1
  1266. package/dist/relations-KKDSLUwS.mjs +0 -403
  1267. package/dist/relations-KKDSLUwS.mjs.map +0 -1
  1268. package/dist/relations-rOmbndUJ.mjs +0 -309
  1269. package/dist/relations-rOmbndUJ.mjs.map +0 -1
  1270. package/dist/request-cache-DAZZmesc.mjs +0 -104
  1271. package/dist/request-cache-DAZZmesc.mjs.map +0 -1
  1272. package/dist/request-meta-BgjUQLQ-.mjs +0 -140
  1273. package/dist/request-meta-BgjUQLQ-.mjs.map +0 -1
  1274. package/dist/resolve-Cy0aWSRj.mjs +0 -176
  1275. package/dist/resolve-Cy0aWSRj.mjs.map +0 -1
  1276. package/dist/runner-CfwysRM0.d.mts +0 -67
  1277. package/dist/runner-CfwysRM0.d.mts.map +0 -1
  1278. package/dist/runner-nEzvnogG.mjs +0 -4800
  1279. package/dist/runner-nEzvnogG.mjs.map +0 -1
  1280. package/dist/schema-CRu38Pr5.mjs +0 -9
  1281. package/dist/schema-CRu38Pr5.mjs.map +0 -1
  1282. package/dist/schema-DifxndJx.mjs +0 -420
  1283. package/dist/schema-DifxndJx.mjs.map +0 -1
  1284. package/dist/scopes-D5A1OZbq.mjs +0 -27
  1285. package/dist/scopes-D5A1OZbq.mjs.map +0 -1
  1286. package/dist/search-DEPFSBFq.mjs +0 -439
  1287. package/dist/search-DEPFSBFq.mjs.map +0 -1
  1288. package/dist/secrets-CdfzLdoO.mjs +0 -330
  1289. package/dist/secrets-CdfzLdoO.mjs.map +0 -1
  1290. package/dist/sections-3X52kmIR.mjs +0 -346
  1291. package/dist/sections-3X52kmIR.mjs.map +0 -1
  1292. package/dist/seo-Bw68KxRc.mjs +0 -133
  1293. package/dist/seo-Bw68KxRc.mjs.map +0 -1
  1294. package/dist/seo-C4AmbsMU.mjs +0 -114
  1295. package/dist/seo-C4AmbsMU.mjs.map +0 -1
  1296. package/dist/service-J_-Vgo7R.mjs +0 -195
  1297. package/dist/service-J_-Vgo7R.mjs.map +0 -1
  1298. package/dist/session-user-CbnMMwk6.mjs +0 -51
  1299. package/dist/session-user-CbnMMwk6.mjs.map +0 -1
  1300. package/dist/settings-AnEFYICn.mjs +0 -51
  1301. package/dist/settings-AnEFYICn.mjs.map +0 -1
  1302. package/dist/settings-DcMjREe5.mjs +0 -258
  1303. package/dist/settings-DcMjREe5.mjs.map +0 -1
  1304. package/dist/setup-complete-BClXXTvr.mjs +0 -26
  1305. package/dist/setup-complete-BClXXTvr.mjs.map +0 -1
  1306. package/dist/setup-nonce-BheRa4RG.mjs +0 -25
  1307. package/dist/setup-nonce-BheRa4RG.mjs.map +0 -1
  1308. package/dist/single-flight-cache-jaswDzmQ.mjs +0 -104
  1309. package/dist/single-flight-cache-jaswDzmQ.mjs.map +0 -1
  1310. package/dist/site-url-Bqf-ea3N.mjs +0 -16
  1311. package/dist/site-url-Bqf-ea3N.mjs.map +0 -1
  1312. package/dist/slugify-B994zkXC.mjs +0 -17
  1313. package/dist/slugify-B994zkXC.mjs.map +0 -1
  1314. package/dist/snapshot-C4CtXntb.mjs +0 -232
  1315. package/dist/snapshot-C4CtXntb.mjs.map +0 -1
  1316. package/dist/ssrf-gl4gFNhw.mjs +0 -406
  1317. package/dist/ssrf-gl4gFNhw.mjs.map +0 -1
  1318. package/dist/state-1F6IOhdQ.mjs +0 -136
  1319. package/dist/state-1F6IOhdQ.mjs.map +0 -1
  1320. package/dist/status-Cenfk_r5.mjs +0 -30
  1321. package/dist/status-Cenfk_r5.mjs.map +0 -1
  1322. package/dist/target-CRzeTs8G.mjs +0 -27
  1323. package/dist/target-CRzeTs8G.mjs.map +0 -1
  1324. package/dist/taxonomies-BOdxuZpV.mjs +0 -844
  1325. package/dist/taxonomies-BOdxuZpV.mjs.map +0 -1
  1326. package/dist/taxonomies-NcFDq5Gg.mjs +0 -707
  1327. package/dist/taxonomies-NcFDq5Gg.mjs.map +0 -1
  1328. package/dist/taxonomy-DP1vny4K.mjs +0 -492
  1329. package/dist/taxonomy-DP1vny4K.mjs.map +0 -1
  1330. package/dist/tokens-CDk8ox9p.mjs +0 -171
  1331. package/dist/tokens-CDk8ox9p.mjs.map +0 -1
  1332. package/dist/transaction-0KOpOyMu.mjs +0 -29
  1333. package/dist/transaction-0KOpOyMu.mjs.map +0 -1
  1334. package/dist/transport-BVn4tVb9.d.mts +0 -42
  1335. package/dist/transport-BVn4tVb9.d.mts.map +0 -1
  1336. package/dist/transport-DP0JI-8i.mjs +0 -136
  1337. package/dist/transport-DP0JI-8i.mjs.map +0 -1
  1338. package/dist/trusted-proxy-BTM6UxqD.mjs +0 -51
  1339. package/dist/trusted-proxy-BTM6UxqD.mjs.map +0 -1
  1340. package/dist/types-2n848aVW.d.mts +0 -198
  1341. package/dist/types-2n848aVW.d.mts.map +0 -1
  1342. package/dist/types-A2cN6a4a.mjs +0 -3
  1343. package/dist/types-BMXnRIrX.mjs +0 -144
  1344. package/dist/types-BMXnRIrX.mjs.map +0 -1
  1345. package/dist/types-BouXpOsa.d.mts +0 -1446
  1346. package/dist/types-BouXpOsa.d.mts.map +0 -1
  1347. package/dist/types-ByG2coLw.mjs +0 -16
  1348. package/dist/types-ByG2coLw.mjs.map +0 -1
  1349. package/dist/types-CQPWhPxE.mjs +0 -92
  1350. package/dist/types-CQPWhPxE.mjs.map +0 -1
  1351. package/dist/types-DEfNJ__A.d.mts +0 -75
  1352. package/dist/types-DEfNJ__A.d.mts.map +0 -1
  1353. package/dist/types-DKcKSbtB.d.mts +0 -273
  1354. package/dist/types-DKcKSbtB.d.mts.map +0 -1
  1355. package/dist/types-DRYs7uTL.d.mts +0 -198
  1356. package/dist/types-DRYs7uTL.d.mts.map +0 -1
  1357. package/dist/types-DaEg7KX2.d.mts +0 -363
  1358. package/dist/types-DaEg7KX2.d.mts.map +0 -1
  1359. package/dist/types-LU8utpP_.d.mts +0 -262
  1360. package/dist/types-LU8utpP_.d.mts.map +0 -1
  1361. package/dist/types-VpYfPUxN.d.mts +0 -124
  1362. package/dist/types-VpYfPUxN.d.mts.map +0 -1
  1363. package/dist/types-c9GP7Dj5.mjs +0 -18
  1364. package/dist/types-c9GP7Dj5.mjs.map +0 -1
  1365. package/dist/types-tJWDK__M.d.mts +0 -756
  1366. package/dist/types-tJWDK__M.d.mts.map +0 -1
  1367. package/dist/upload-attempts-C6S2y-lp.mjs +0 -27
  1368. package/dist/upload-attempts-C6S2y-lp.mjs.map +0 -1
  1369. package/dist/url-pattern-UYtxVTuj.mjs +0 -33
  1370. package/dist/url-pattern-UYtxVTuj.mjs.map +0 -1
  1371. package/dist/user-DIsIXogT.mjs +0 -171
  1372. package/dist/user-DIsIXogT.mjs.map +0 -1
  1373. package/dist/utils-BicP5Qbg.mjs +0 -435
  1374. package/dist/utils-BicP5Qbg.mjs.map +0 -1
  1375. package/dist/validate-BpwoDOgt.mjs +0 -120
  1376. package/dist/validate-BpwoDOgt.mjs.map +0 -1
  1377. package/dist/validate-D8VPn4Hv.mjs +0 -384
  1378. package/dist/validate-D8VPn4Hv.mjs.map +0 -1
  1379. package/dist/validate-Df6Dvwbw.d.mts +0 -405
  1380. package/dist/validate-Df6Dvwbw.d.mts.map +0 -1
  1381. package/dist/validation-CzMJn9Ku.mjs +0 -155
  1382. package/dist/validation-CzMJn9Ku.mjs.map +0 -1
  1383. package/dist/version-CK67_SXX.mjs +0 -7
  1384. package/dist/version-CK67_SXX.mjs.map +0 -1
  1385. package/dist/widgets-RFVAxQl3.mjs +0 -122
  1386. package/dist/widgets-RFVAxQl3.mjs.map +0 -1
  1387. package/dist/wxr-taxonomies-BX4yQL9s.d.mts +0 -34
  1388. package/dist/wxr-taxonomies-BX4yQL9s.d.mts.map +0 -1
  1389. package/dist/wxr-taxonomies-Csdp7yde.mjs +0 -406
  1390. package/dist/wxr-taxonomies-Csdp7yde.mjs.map +0 -1
  1391. package/dist/zod-generator-CNRGdnBY.mjs +0 -331
  1392. package/dist/zod-generator-CNRGdnBY.mjs.map +0 -1
  1393. /package/dist/{api-tokens-B_lfpmH3.mjs → api-tokens-DS1VzN7_.mjs} +0 -0
  1394. /package/dist/{ssrf-TQhaljuI.mjs → ssrf-BRpTDMV6.mjs} +0 -0
@@ -1,58 +1,62 @@
1
1
  #!/usr/bin/env node
2
- import { a as getMigrationStatus, c as __exportAll, s as runMigrations } from "../runner-nEzvnogG.mjs";
2
+ import { a as getMigrationStatus, c as formatDatetimeStorageReport, i as getExactMigrationStatus, l as scanDatetimeStorage, s as runMigrations, u as __exportAll } from "../runner-ClrleR8A.mjs";
3
3
  import { t as EmDashDatabaseError } from "../errors-9P_FDrJ_.mjs";
4
- import { t as validateIdentifier } from "../validate-BpwoDOgt.mjs";
5
- import { d as listTablesLike } from "../dialect-helpers-BcQvkHgn.mjs";
6
- import { i as isI18nEnabled, r as getI18nConfig } from "../config-C3EBstHi.mjs";
7
- import "../after-CBU2vkoO.mjs";
8
- import "../object-cache-DVKnyOfy.mjs";
9
- import { t as ContentRepository } from "../content-CNfMWuhY.mjs";
10
- import { n as isMissingTableError } from "../db-errors-Cl-sKYTm.mjs";
11
- import { n as slugify } from "../slugify-B994zkXC.mjs";
12
- import { a as encodeBase64url } from "../base64-CvLhUKQv.mjs";
13
- import "../types-CQPWhPxE.mjs";
14
- import { t as MediaRepository } from "../media-BBm8Wg3f.mjs";
15
- import { t as TaxonomyRepository } from "../taxonomy-DP1vny4K.mjs";
16
- import { t as OptionsRepository } from "../options-D1FBiAv1.mjs";
17
- import "../resolve-Cy0aWSRj.mjs";
18
- import "../redirect-DId44BS1.mjs";
19
- import "../request-cache-DAZZmesc.mjs";
20
- import "../byline-registry-BxDGIO0I.mjs";
21
- import "../field-defs-cache-Cf5FHK0M.mjs";
22
- import { t as BylineRepository } from "../byline-Vdi85CsZ.mjs";
23
- import "../dist-BAsh8dbf.mjs";
24
- import "../fts-manager-iddym8cd.mjs";
4
+ import { n as isMissingTableError } from "../db-errors-CBD5yMro.mjs";
5
+ import { busyLockHeldSince, migrationLockHeldMessage } from "../database/migration-lock.mjs";
6
+ import { t as validateIdentifier } from "../validate-DANX1-Qi.mjs";
7
+ import { p as listTablesLike } from "../dialect-helpers-CtYdsX4W.mjs";
8
+ import { i as isI18nEnabled, r as getI18nConfig } from "../config-CGVeT8Hc.mjs";
9
+ import "../datetime-normalization-PeiEdcRY.mjs";
10
+ import "../after-PcEvMY_6.mjs";
11
+ import { t as OptionsRepository } from "../options-D5WcorD5.mjs";
12
+ import { a as encodeBase64url } from "../base64-DvnNgP7e.mjs";
13
+ import { n as fingerprintKey, r as generateEncryptionKey, t as EmDashSecretsError } from "../secrets-DNgVgz_e.mjs";
14
+ import { t as ContentRepository } from "../content-DZ3B5qtA.mjs";
15
+ import "../object-cache-DlSVbn5Y.mjs";
16
+ import { n as slugify } from "../slugify-T5GHH42D.mjs";
17
+ import "../types-BkUg2yHx.mjs";
18
+ import { t as MediaRepository } from "../media-TBlKCwo7.mjs";
19
+ import { t as TaxonomyRepository } from "../taxonomy-Dj1vpw5E.mjs";
20
+ import "../resolve-BJIS8wKr.mjs";
21
+ import "../redirect-D2Yo-b6S.mjs";
22
+ import "../request-cache-DaMhSQdx.mjs";
23
+ import "../byline-registry-D6lWzXk6.mjs";
24
+ import "../field-defs-cache-B337z8UJ.mjs";
25
+ import { t as BylineRepository } from "../byline-Doh-wt99.mjs";
26
+ import { t as imageSize } from "../dist-2hDLsLeq.mjs";
27
+ import "../fts-manager-DMb0sbIQ.mjs";
25
28
  import { kyselyLogOption } from "../database/instrumentation.mjs";
26
- import "../loader-WJi6GFRn.mjs";
27
- import "../collection-slugs-cache-7lTmNzeA.mjs";
28
- import "../capture-triggers-CeAsC76Z.mjs";
29
- import "../activation-DyNTe_Tl.mjs";
30
- import "../collection-deletion-BCwaWTDw.mjs";
31
- import "../content-refresh-GTMyi2Xy.mjs";
32
- import { n as SchemaRegistry } from "../registry-DTqaqxed.mjs";
33
- import "../settings-DcMjREe5.mjs";
34
- import { i as pluginManifestSchema } from "../manifest-schema-CILooI5J.mjs";
35
- import { r as isDeprecatedCapability, t as CAPABILITY_RENAMES } from "../types-A2cN6a4a.mjs";
36
- import "../ssrf-gl4gFNhw.mjs";
37
- import "../ssrf-TQhaljuI.mjs";
38
- import { t as validateSeed } from "../validate-D8VPn4Hv.mjs";
39
- import { t as applySeed } from "../apply-DLmM3R7f.mjs";
40
- import { a as MigrationManifestValidationError, c as normalizeAstroI18n, i as getMigrationIntegrationMetadata, n as MIGRATION_CONFIG_SYMBOL, s as validateMigrationManifest, t as buildMigrationManifest } from "../manifest-builder-BfNlGQIA.mjs";
41
- import "../identity-CjGKDq8J.mjs";
42
- import { n as fingerprintKey, r as generateEncryptionKey, t as EmDashSecretsError } from "../secrets-CdfzLdoO.mjs";
43
- import { t as openNodeSqliteDatabase } from "../node-sqlite-compat-2sezm-Zd.mjs";
29
+ import "../loader-t4TxaFiQ.mjs";
30
+ import "../collection-slugs-cache-D9auiKmI.mjs";
31
+ import "../capture-triggers-gxQxnxrJ.mjs";
32
+ import "../activation-CaMfdBt1.mjs";
33
+ import "../collection-deletion-C3Xixmkx.mjs";
34
+ import "../content-refresh-BHLHJgyt.mjs";
35
+ import { n as SchemaRegistry } from "../registry-CkuPoZs7.mjs";
36
+ import "../settings-DmroR53o.mjs";
37
+ import { a as pluginManifestBaseSchema } from "../manifest-schema-Bkh8SeHd.mjs";
38
+ import { i as isDeprecatedCapability, n as capabilitiesToDeclaredAccess$1, r as declaredAccessToCapabilities$1, t as CAPABILITY_RENAMES } from "../types-k--LneIF.mjs";
39
+ import "../ssrf-Co1GGFZz.mjs";
40
+ import "../ssrf-BRpTDMV6.mjs";
41
+ import { t as validateSeed } from "../validate-BCP9HNDn.mjs";
42
+ import { t as applySeed } from "../apply-drpfmqrR.mjs";
43
+ import { a as MigrationManifestValidationError, c as normalizeAstroI18n, i as getMigrationIntegrationMetadata, n as MIGRATION_CONFIG_SYMBOL, s as validateMigrationManifest, t as buildMigrationManifest } from "../manifest-builder-D31UoJCu.mjs";
44
+ import "../identity-DRGSHEEr.mjs";
45
+ import { t as openNodeSqliteDatabase } from "../node-sqlite-compat-vpVaILnb.mjs";
44
46
  import { LocalStorage } from "../storage/local.mjs";
45
- import { t as convertDataForRead } from "../portable-text-BS3d5n-0.mjs";
47
+ import { t as convertDataForRead } from "../portable-text-oAwodbPS.mjs";
46
48
  import { createHeaderAwareFetch, customHeadersInterceptor, getCachedAccessToken, isAccessRedirect, resolveCustomHeaders, runCloudflaredLogin } from "../client/cf-access.mjs";
47
49
  import { EmDashClient } from "../client/index.mjs";
48
- import { r as fileExists$4, t as bundleCommand } from "../bundle-CL0JjIPx.mjs";
49
50
  import { createRequire } from "node:module";
50
51
  import { Kysely, SqliteDialect, sql } from "kysely";
52
+ import { z } from "zod";
53
+ import { extractManifestRoute, extractRouteOptions, isJsonPostRouteContract } from "@emdash-cms/plugin-types";
51
54
  import { createGzipDecoder, unpackTar } from "modern-tar";
52
55
  import { pathToFileURL } from "node:url";
53
- import { access, mkdir, readFile, stat, writeFile } from "node:fs/promises";
54
- import { basename, dirname, isAbsolute, join, parse, resolve } from "node:path";
55
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
56
+ import { createHash } from "node:crypto";
57
+ import { access, copyFile, mkdir, readFile, readdir, rm, stat, symlink, writeFile } from "node:fs/promises";
58
+ import { basename, dirname, extname, isAbsolute, join, parse, resolve } from "node:path";
59
+ import { createWriteStream, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
56
60
  import { defineCommand, runCommand, runMain } from "citty";
57
61
  import consola, { consola as consola$1 } from "consola";
58
62
  import pc from "picocolors";
@@ -61,6 +65,8 @@ import { homedir } from "node:os";
61
65
  import { parse as parse$1, printParseErrorCode } from "jsonc-parser";
62
66
  import { parse as parse$2 } from "smol-toml";
63
67
  import { createInterface } from "node:readline/promises";
68
+ import { pipeline } from "node:stream/promises";
69
+ import { packTar } from "modern-tar/fs";
64
70
 
65
71
  //#region src/cli/commands/auth.ts
66
72
  /**
@@ -789,7 +795,7 @@ const scheduleCommand = defineCommand({
789
795
  },
790
796
  at: {
791
797
  type: "string",
792
- description: "ISO 8601 datetime to publish at",
798
+ description: "ISO 8601 datetime with Z or an explicit UTC offset to publish at",
793
799
  required: true
794
800
  },
795
801
  "override-lock": {
@@ -902,7 +908,10 @@ const contentCommand = defineCommand({
902
908
  function createDatabase(config) {
903
909
  try {
904
910
  if (config.url.startsWith("file:") || config.url === ":memory:") return new Kysely({
905
- dialect: new SqliteDialect({ database: openNodeSqliteDatabase(config.url === ":memory:" ? ":memory:" : config.url.replace("file:", ""), { journalMode: "wal" }) }),
911
+ dialect: new SqliteDialect({ database: openNodeSqliteDatabase(config.url === ":memory:" ? ":memory:" : config.url.replace("file:", ""), {
912
+ journalMode: "wal",
913
+ readOnly: config.readOnly
914
+ }) }),
906
915
  log: kyselyLogOption()
907
916
  });
908
917
  if (config.url.startsWith("libsql:")) {
@@ -932,7 +941,7 @@ async function readPackageJson$2(cwd) {
932
941
  return null;
933
942
  }
934
943
  }
935
- async function fileExists$3(path) {
944
+ async function fileExists$4(path) {
936
945
  try {
937
946
  await access(path);
938
947
  return true;
@@ -984,7 +993,7 @@ const devCommand = defineCommand({
984
993
  process.exit(1);
985
994
  }
986
995
  const dbPath = resolve(cwd, args.database);
987
- if (!await fileExists$3(dbPath)) consola.start("Database not found, initializing...");
996
+ if (!await fileExists$4(dbPath)) consola.start("Database not found, initializing...");
988
997
  const db = createDatabase({ url: `file:${dbPath}` });
989
998
  try {
990
999
  consola.start("Checking database migrations...");
@@ -1023,8 +1032,8 @@ const devCommand = defineCommand({
1023
1032
  "--port",
1024
1033
  args.port
1025
1034
  ];
1026
- const pnpmLockExists = await fileExists$3(resolve(cwd, "pnpm-lock.yaml"));
1027
- const yarnLockExists = await fileExists$3(resolve(cwd, "yarn.lock"));
1035
+ const pnpmLockExists = await fileExists$4(resolve(cwd, "pnpm-lock.yaml"));
1036
+ const yarnLockExists = await fileExists$4(resolve(cwd, "yarn.lock"));
1028
1037
  let cmd;
1029
1038
  let cmdArgs;
1030
1039
  if (pnpmLockExists) {
@@ -1087,7 +1096,7 @@ function triggerFix(configPath) {
1087
1096
  function mainFix(configPath) {
1088
1097
  return configPath.endsWith(".toml") ? MAIN_FIX_TOML : MAIN_FIX_JSONC;
1089
1098
  }
1090
- async function fileExists$2(path) {
1099
+ async function fileExists$3(path) {
1091
1100
  try {
1092
1101
  await access(path);
1093
1102
  return true;
@@ -1108,7 +1117,7 @@ function sourcePosition(source, offset) {
1108
1117
  async function findWranglerConfig(cwd) {
1109
1118
  for (const filename of WRANGLER_CONFIG_FILES) {
1110
1119
  const path = resolve(cwd, filename);
1111
- if (await fileExists$2(path)) return path;
1120
+ if (await fileExists$3(path)) return path;
1112
1121
  }
1113
1122
  return null;
1114
1123
  }
@@ -1203,7 +1212,7 @@ function printResult(result) {
1203
1212
  }
1204
1213
  async function checkDatabase(dbPath) {
1205
1214
  const results = [];
1206
- if (!await fileExists$2(dbPath)) {
1215
+ if (!await fileExists$3(dbPath)) {
1207
1216
  results.push({
1208
1217
  name: "database",
1209
1218
  status: "fail",
@@ -1255,6 +1264,21 @@ async function checkDatabase(dbPath) {
1255
1264
  status: "warn",
1256
1265
  message: `found ${orphaned.length}: ${orphaned.join(", ")}`
1257
1266
  });
1267
+ try {
1268
+ const report = await scanDatetimeStorage(db);
1269
+ const clean = report.noncanonicalCount === 0 && report.manualReviewCount === 0 && report.inspectionErrorCount === 0;
1270
+ results.push({
1271
+ name: "datetime storage",
1272
+ status: clean ? "pass" : "fail",
1273
+ message: clean ? `all stored content datetimes are canonical (${report.timezone})` : formatDatetimeStorageReport(report)
1274
+ });
1275
+ } catch (error) {
1276
+ results.push({
1277
+ name: "datetime storage",
1278
+ status: "fail",
1279
+ message: `could not inspect stored datetimes: ${error instanceof Error ? error.message : String(error)}`
1280
+ });
1281
+ }
1258
1282
  } catch {}
1259
1283
  try {
1260
1284
  const count = (await sql`SELECT COUNT(id) as count FROM users`.execute(db)).rows[0]?.count ?? 0;
@@ -1364,12 +1388,17 @@ const exportSeedCommand = defineCommand({
1364
1388
  },
1365
1389
  async run({ args }) {
1366
1390
  const dbPath = resolve(resolve(args.cwd), args.database);
1367
- consola.info(`Database: ${dbPath}`);
1368
- const db = createDatabase({ url: `file:${dbPath}` });
1391
+ process.stderr.write(`Database: ${dbPath}\n`);
1392
+ const db = createDatabase({
1393
+ url: `file:${dbPath}`,
1394
+ readOnly: true
1395
+ });
1369
1396
  try {
1370
- await runMigrations(db);
1397
+ const { pending, unknownApplied } = await getExactMigrationStatus(db);
1398
+ if (unknownApplied.length > 0) throw new Error("The database was migrated by a newer EmDash version. Upgrade EmDash before exporting it.");
1399
+ if (pending.length > 0) throw new Error(`The database has ${pending.length} pending migration${pending.length === 1 ? "" : "s"}. Run \`emdash migrate\` before exporting it.`);
1371
1400
  } catch (error) {
1372
- consola.error("Migration failed:", error);
1401
+ consola.error("Export requires a current database schema:", error);
1373
1402
  await db.destroy();
1374
1403
  process.exit(1);
1375
1404
  }
@@ -1559,7 +1588,7 @@ async function exportCollections(db) {
1559
1588
  * Export taxonomy definitions and terms
1560
1589
  */
1561
1590
  async function exportTaxonomies(db, i18nEnabled) {
1562
- const defs = await db.selectFrom("_emdash_taxonomy_defs").selectAll().orderBy(["name", "locale"]).execute();
1591
+ const defs = await db.selectFrom("_emdash_taxonomy_defs").selectAll().orderBy("name").orderBy("locale").execute();
1563
1592
  const result = [];
1564
1593
  const termRepo = new TaxonomyRepository(db);
1565
1594
  const defGroupToSeedId = /* @__PURE__ */ new Map();
@@ -1616,7 +1645,7 @@ async function exportTaxonomies(db, i18nEnabled) {
1616
1645
  * Export menus with their items
1617
1646
  */
1618
1647
  async function exportMenus(db, i18nEnabled) {
1619
- const menus = await db.selectFrom("_emdash_menus").selectAll().orderBy(["name", "locale"]).execute();
1648
+ const menus = await db.selectFrom("_emdash_menus").selectAll().orderBy("name").orderBy("locale").execute();
1620
1649
  const result = [];
1621
1650
  const groupToSeedId = /* @__PURE__ */ new Map();
1622
1651
  const itemGroupToSeedId = /* @__PURE__ */ new Map();
@@ -1734,6 +1763,57 @@ async function exportWidgetAreas(db) {
1734
1763
  }
1735
1764
  return result;
1736
1765
  }
1766
+ /** A reference field holds a single entry id or an array of them. */
1767
+ function referenceValues(value) {
1768
+ if (typeof value === "string") return [value];
1769
+ if (Array.isArray(value)) return value.filter((v) => typeof v === "string");
1770
+ return [];
1771
+ }
1772
+ /**
1773
+ * For each exported collection, the other exported collections its entries
1774
+ * point into. Read from the values rather than a field's declared target so a
1775
+ * `reference` field without `options.collection` is still accounted for.
1776
+ */
1777
+ function referenceTargets(collected, collectionsBySlug, entryIdToCollection) {
1778
+ const targets = /* @__PURE__ */ new Map();
1779
+ for (const [slug, items] of collected) {
1780
+ const referenceFields = (collectionsBySlug.get(slug)?.fields ?? []).filter((field) => field.type === "reference").map((field) => field.slug);
1781
+ if (referenceFields.length === 0) continue;
1782
+ const found = /* @__PURE__ */ new Set();
1783
+ for (const { item } of items) for (const fieldSlug of referenceFields) for (const value of referenceValues(item.data[fieldSlug])) {
1784
+ const target = entryIdToCollection.get(value);
1785
+ if (target && target !== slug) found.add(target);
1786
+ }
1787
+ if (found.size > 0) targets.set(slug, found);
1788
+ }
1789
+ return targets;
1790
+ }
1791
+ /**
1792
+ * Order collections so a reference's target is written before the entry that
1793
+ * points at it. `applySeed` fills its seed-id map as it walks the file, so a
1794
+ * `$ref` into a collection further down resolves to nothing and is stored
1795
+ * verbatim.
1796
+ *
1797
+ * Depth-first, with the caller's order as the tie-break so an export without
1798
+ * references keeps the collection order it had. A cycle has no valid order;
1799
+ * the collections on it stay where they were rather than failing the export.
1800
+ */
1801
+ function orderByReferenceTargets(slugs, targets) {
1802
+ const exported = new Set(slugs);
1803
+ const ordered = [];
1804
+ const placed = /* @__PURE__ */ new Set();
1805
+ const visiting = /* @__PURE__ */ new Set();
1806
+ const visit = (slug) => {
1807
+ if (placed.has(slug) || visiting.has(slug)) return;
1808
+ visiting.add(slug);
1809
+ for (const target of targets.get(slug) ?? []) if (exported.has(target)) visit(target);
1810
+ visiting.delete(slug);
1811
+ placed.add(slug);
1812
+ ordered.push(slug);
1813
+ };
1814
+ for (const slug of slugs) visit(slug);
1815
+ return ordered;
1816
+ }
1737
1817
  /**
1738
1818
  * Export content from collections
1739
1819
  */
@@ -1760,11 +1840,13 @@ async function exportContent(db, collections, includeCollections, bylineGroupToS
1760
1840
  cursor = result.nextCursor;
1761
1841
  } while (cursor);
1762
1842
  } catch {}
1843
+ const collected = /* @__PURE__ */ new Map();
1844
+ const entryIdToSeedId = /* @__PURE__ */ new Map();
1845
+ const entryIdToCollection = /* @__PURE__ */ new Map();
1763
1846
  for (const collection of collections) {
1764
1847
  if (includeCollections && !includeCollections.includes(collection.slug)) continue;
1765
- const entries = [];
1848
+ const items = [];
1766
1849
  let cursor;
1767
- const translationGroupToSeedId = /* @__PURE__ */ new Map();
1768
1850
  do {
1769
1851
  const result = await contentRepo.findMany(collection.slug, {
1770
1852
  limit: 100,
@@ -1772,29 +1854,47 @@ async function exportContent(db, collections, includeCollections, bylineGroupToS
1772
1854
  });
1773
1855
  for (const item of result.items) {
1774
1856
  const seedId = item.slug ? i18nEnabled && item.locale ? `${collection.slug}:${item.slug}:${item.locale}` : `${collection.slug}:${item.slug}` : item.id;
1775
- const processedData = processDataForExport(item.data, collection.fields, mediaMap);
1776
- const entry = {
1777
- id: seedId,
1778
- slug: item.slug?.trim() ? item.slug : collection.routable === false ? void 0 : item.id,
1779
- status: item.status === "published" || item.status === "draft" ? item.status : void 0,
1780
- data: processedData
1781
- };
1782
- if (i18nEnabled && item.locale) {
1783
- entry.locale = item.locale;
1784
- if (item.translationGroup) {
1785
- const sourceSeedId = translationGroupToSeedId.get(item.translationGroup);
1786
- if (sourceSeedId) entry.translationOf = sourceSeedId;
1787
- else translationGroupToSeedId.set(item.translationGroup, seedId);
1788
- }
1789
- }
1790
- const taxonomies = await getTaxonomyAssignments(taxonomyRepo, collection.slug, item.id);
1791
- if (Object.keys(taxonomies).length > 0) entry.taxonomies = taxonomies;
1792
- const bylines = await getBylineCredits(db, collection.slug, item.id, bylineGroupToSeedId);
1793
- if (bylines.length > 0) entry.bylines = bylines;
1794
- entries.push(entry);
1857
+ items.push({
1858
+ item,
1859
+ seedId
1860
+ });
1861
+ entryIdToSeedId.set(item.id, seedId);
1862
+ entryIdToCollection.set(item.id, collection.slug);
1795
1863
  }
1796
1864
  cursor = result.nextCursor;
1797
1865
  } while (cursor);
1866
+ collected.set(collection.slug, items);
1867
+ }
1868
+ const collectionsBySlug = new Map(collections.map((c) => [c.slug, c]));
1869
+ const orderedSlugs = orderByReferenceTargets([...collected.keys()], referenceTargets(collected, collectionsBySlug, entryIdToCollection));
1870
+ for (const slug of orderedSlugs) {
1871
+ const collection = collectionsBySlug.get(slug);
1872
+ const items = collected.get(slug);
1873
+ if (!collection || !items) continue;
1874
+ const entries = [];
1875
+ const translationGroupToSeedId = /* @__PURE__ */ new Map();
1876
+ for (const { item, seedId } of items) {
1877
+ const processedData = processDataForExport(item.data, collection.fields, mediaMap, entryIdToSeedId);
1878
+ const entry = {
1879
+ id: seedId,
1880
+ slug: item.slug?.trim() ? item.slug : collection.routable === false ? void 0 : item.id,
1881
+ status: item.status === "published" || item.status === "draft" ? item.status : void 0,
1882
+ data: processedData
1883
+ };
1884
+ if (i18nEnabled && item.locale) {
1885
+ entry.locale = item.locale;
1886
+ if (item.translationGroup) {
1887
+ const sourceSeedId = translationGroupToSeedId.get(item.translationGroup);
1888
+ if (sourceSeedId) entry.translationOf = sourceSeedId;
1889
+ else translationGroupToSeedId.set(item.translationGroup, seedId);
1890
+ }
1891
+ }
1892
+ const taxonomies = await getTaxonomyAssignments(taxonomyRepo, collection.slug, item.id);
1893
+ if (Object.keys(taxonomies).length > 0) entry.taxonomies = taxonomies;
1894
+ const bylines = await getBylineCredits(db, collection.slug, item.id, bylineGroupToSeedId);
1895
+ if (bylines.length > 0) entry.bylines = bylines;
1896
+ entries.push(entry);
1897
+ }
1798
1898
  if (i18nEnabled && entries.length > 0) entries.sort((a, b) => {
1799
1899
  if (a.translationOf && !b.translationOf) return 1;
1800
1900
  if (!a.translationOf && b.translationOf) return -1;
@@ -1807,7 +1907,7 @@ async function exportContent(db, collections, includeCollections, bylineGroupToS
1807
1907
  /**
1808
1908
  * Process content data for export, converting image fields to $media syntax
1809
1909
  */
1810
- function processDataForExport(data, fields, mediaMap) {
1910
+ function processDataForExport(data, fields, mediaMap, entryIdToSeedId) {
1811
1911
  const result = {};
1812
1912
  const fieldTypes = /* @__PURE__ */ new Map();
1813
1913
  for (const field of fields) fieldTypes.set(field.slug, field.type);
@@ -1828,9 +1928,9 @@ function processDataForExport(data, fields, mediaMap) {
1828
1928
  }
1829
1929
  }
1830
1930
  result[key] = value;
1831
- } else if (fieldType === "reference" && typeof value === "string") result[key] = `$ref:${value}`;
1931
+ } else if (fieldType === "reference" && typeof value === "string") result[key] = `$ref:${entryIdToSeedId.get(value) ?? value}`;
1832
1932
  else if (Array.isArray(value)) result[key] = value.map((item) => {
1833
- if (typeof item === "string" && fieldType === "reference") return `$ref:${item}`;
1933
+ if (typeof item === "string" && fieldType === "reference") return `$ref:${entryIdToSeedId.get(item) ?? item}`;
1834
1934
  return item;
1835
1935
  });
1836
1936
  else result[key] = value;
@@ -1877,7 +1977,7 @@ async function getTaxonomyAssignments(taxonomyRepo, collection, entryId) {
1877
1977
  *
1878
1978
  * Initialize database from template config in package.json
1879
1979
  */
1880
- async function fileExists$1(path) {
1980
+ async function fileExists$2(path) {
1881
1981
  try {
1882
1982
  await access(path);
1883
1983
  return true;
@@ -1968,7 +2068,7 @@ const initCommand = defineCommand({
1968
2068
  if (alreadyInitialized && args.force) consola.warn("Re-initializing (--force)...");
1969
2069
  if (config?.schema) {
1970
2070
  const schemaPath = resolve(cwd, config.schema);
1971
- if (await fileExists$1(schemaPath)) {
2071
+ if (await fileExists$2(schemaPath)) {
1972
2072
  consola.start(`Running schema: ${config.schema}`);
1973
2073
  try {
1974
2074
  await runSqlFile(db, schemaPath);
@@ -2735,6 +2835,9 @@ const SAFE_TARGET_KIND_PATTERN = /^[a-z][a-z0-9_-]*$/;
2735
2835
  const SAFE_MIGRATION_NAME_PATTERN = /^[A-Za-z0-9_.-]+$/;
2736
2836
  const CREDENTIAL_URL_PATTERN = /:\/\/[^/\s]+@/;
2737
2837
  const CREDENTIAL_QUERY_PATTERN = /[?&](?:auth|credential|key|password|secret|signature|token)=/i;
2838
+ const LOCK_ID_PATTERN = /^[1-9]\d{0,15}$/;
2839
+ const ISO_TIMESTAMP_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
2840
+ const MAX_DATE_MS = 864e13;
2738
2841
  const MIGRATE_EXIT_CODES = Object.freeze({
2739
2842
  success: 0,
2740
2843
  error: 1,
@@ -2856,6 +2959,10 @@ function validateOptions(options) {
2856
2959
  if (options.manifest && options.fromConfig) throw new MigrateCommandError("--manifest and --from-config cannot be used together.");
2857
2960
  if (options.config && !options.fromConfig) throw new MigrateCommandError("--config requires --from-config.");
2858
2961
  if (options.check && options.status) throw new MigrateCommandError("--check and --status cannot be used together.");
2962
+ if (options.releaseLock !== void 0) {
2963
+ if (options.check || options.status) throw new MigrateCommandError("--release-lock cannot be used with --check or --status.");
2964
+ if (!LOCK_ID_PATTERN.test(options.releaseLock)) throw new MigrateCommandError("--release-lock requires the lock id shown by --status.");
2965
+ }
2859
2966
  if (options.expectedTargetFingerprint && !FINGERPRINT_PATTERN.test(options.expectedTargetFingerprint)) throw new MigrateCommandError("--expected-target-fingerprint must be a SHA-256 fingerprint.");
2860
2967
  }
2861
2968
  function hasControlCharacter(value) {
@@ -2897,13 +3004,22 @@ function safeReport(value, target) {
2897
3004
  if (!isRecord(value)) throw new MigrateCommandError("The migration executor returned an invalid report.");
2898
3005
  const reportTarget = immutableTarget(value.target);
2899
3006
  if (reportTarget.kind !== target.kind || reportTarget.label !== target.label || reportTarget.fingerprint !== target.fingerprint || reportTarget.accountId !== target.accountId || reportTarget.environment !== target.environment || reportTarget.resourceId !== target.resourceId) throw new MigrateCommandError("The migration executor report target does not match the confirmed target.");
2900
- return {
3007
+ const report = {
2901
3008
  target: { ...reportTarget },
2902
3009
  knownApplied: safeMigrationNames(value.knownApplied, "knownApplied"),
2903
3010
  pending: safeMigrationNames(value.pending, "pending"),
2904
3011
  unknownApplied: safeMigrationNames(value.unknownApplied, "unknownApplied"),
2905
3012
  executed: safeMigrationNames(value.executed, "executed")
2906
3013
  };
3014
+ if (value.lock !== void 0) {
3015
+ const lock = value.lock;
3016
+ if (!isRecord(lock) || typeof lock.id !== "string" || !LOCK_ID_PATTERN.test(lock.id) || typeof lock.heldSince !== "string" || !ISO_TIMESTAMP_PATTERN.test(lock.heldSince)) throw new MigrateCommandError("The migration executor returned an invalid lock report.");
3017
+ report.lock = {
3018
+ id: lock.id,
3019
+ heldSince: lock.heldSince
3020
+ };
3021
+ }
3022
+ return report;
2907
3023
  }
2908
3024
  function printTarget(target, write) {
2909
3025
  write(`Migration target: ${target.kind} ${target.label}`);
@@ -2916,6 +3032,7 @@ function printNameSet(label, names, write) {
2916
3032
  write(`${label}: ${names.length === 0 ? "none" : names.join(", ")}`);
2917
3033
  }
2918
3034
  function printHumanReport(report, write) {
3035
+ if (report.lock) write(`Migration lock: held since ${report.lock.heldSince} (id ${report.lock.id})`);
2919
3036
  printNameSet("Known applied", report.knownApplied, write);
2920
3037
  printNameSet("Pending", report.pending, write);
2921
3038
  printNameSet("Unknown applied", report.unknownApplied, write);
@@ -2961,6 +3078,10 @@ function redactExecutorMessage(message, env) {
2961
3078
  }
2962
3079
  function safeCommandMessage(error, env) {
2963
3080
  if (error instanceof MigrateCommandError || error instanceof MigrationManifestValidationError) return error.message;
3081
+ if (error instanceof Error && error.name === "MigrationLockHeldError") {
3082
+ const heldSince = busyLockHeldSince(error);
3083
+ if (heldSince !== void 0 && Number.isSafeInteger(heldSince) && heldSince <= MAX_DATE_MS) return migrationLockHeldMessage(heldSince);
3084
+ }
2964
3085
  if (error instanceof Error && error.message) return redactExecutorMessage(error.message, env);
2965
3086
  return "Migration command failed. Check the project configuration, target, and credentials.";
2966
3087
  }
@@ -2998,9 +3119,11 @@ async function runMigrateCommand(options, dependencies = defaultDependencies) {
2998
3119
  resolveInterruption?.();
2999
3120
  };
3000
3121
  removeSignalHandlers.push(dependencies.onSignal("SIGINT", onSignal), dependencies.onSignal("SIGTERM", onSignal));
3001
- const applying = !options.check && !options.status;
3002
- if (applying && target.kind === "d1") dependencies.writeStderr("Warning: D1 migration jobs must be serialized externally by Cloudflare account and database UUID; this command does not coordinate concurrent applies.");
3003
- if (applying) {
3122
+ const releasing = options.releaseLock !== void 0;
3123
+ const applying = !options.check && !options.status && !releasing;
3124
+ if (applying || releasing) {
3125
+ const operation = releasing ? "lock release" : "apply";
3126
+ const question = releasing ? `Release migration lock ${options.releaseLock} on ${target.label}? Release it only when no migration is running.` : `Apply EmDash migrations to ${target.label}?`;
3004
3127
  if (options.expectedTargetFingerprint) {
3005
3128
  if (options.expectedTargetFingerprint !== target.fingerprint) {
3006
3129
  dependencies.writeStderr("Expected target fingerprint does not match the target.");
@@ -3008,30 +3131,39 @@ async function runMigrateCommand(options, dependencies = defaultDependencies) {
3008
3131
  return exitCode;
3009
3132
  }
3010
3133
  } else if (!dependencies.interactive || options.json) {
3011
- dependencies.writeStderr("Noninteractive apply requires --expected-target-fingerprint with the displayed fingerprint.");
3134
+ dependencies.writeStderr(`Noninteractive ${operation} requires --expected-target-fingerprint with the displayed fingerprint.`);
3012
3135
  exitCode = MIGRATE_EXIT_CODES.confirmation;
3013
3136
  return exitCode;
3014
- } else if (!await dependencies.confirm(`Apply EmDash migrations to ${target.label}?`)) {
3015
- dependencies.writeStderr("Migration cancelled.");
3137
+ } else if (!await dependencies.confirm(question)) {
3138
+ dependencies.writeStderr(releasing ? "Lock release cancelled." : "Migration cancelled.");
3016
3139
  exitCode = MIGRATE_EXIT_CODES.confirmation;
3017
3140
  return exitCode;
3018
3141
  }
3019
3142
  }
3020
- const rawReport = await Promise.race([executor.execute({
3021
- action: applying ? "apply" : "check",
3143
+ const request = {
3144
+ action: "check",
3022
3145
  i18n: manifest.i18n,
3023
3146
  artifact: {
3024
3147
  emdashVersion: manifest.emdashVersion,
3025
3148
  migrationSetFingerprint: manifest.migrationSet.fingerprint
3026
3149
  }
3027
- }), interruption]);
3150
+ };
3151
+ if (applying) request.action = "apply";
3152
+ if (releasing) {
3153
+ request.action = "release-lock";
3154
+ request.lockId = options.releaseLock;
3155
+ }
3156
+ const rawReport = await Promise.race([executor.execute(request), interruption]);
3028
3157
  if (rawReport === interruptedResult || interrupted) {
3029
3158
  exitCode = MIGRATE_EXIT_CODES.interrupted;
3030
3159
  return exitCode;
3031
3160
  }
3032
3161
  const report = safeReport(rawReport, target);
3033
3162
  if (options.json) dependencies.writeStdout(JSON.stringify(report));
3034
- else printHumanReport(report, dependencies.writeStdout);
3163
+ else {
3164
+ if (releasing) dependencies.writeStdout(`Released migration lock ${options.releaseLock}.`);
3165
+ printHumanReport(report, dependencies.writeStdout);
3166
+ }
3035
3167
  exitCode = reportExitCode(options, report);
3036
3168
  return exitCode;
3037
3169
  } catch (error) {
@@ -3086,7 +3218,11 @@ const migrateCommand = defineCommand({
3086
3218
  },
3087
3219
  "expected-target-fingerprint": {
3088
3220
  type: "string",
3089
- description: "Required target fingerprint for noninteractive apply"
3221
+ description: "Required target fingerprint for noninteractive apply or lock release"
3222
+ },
3223
+ "release-lock": {
3224
+ type: "string",
3225
+ description: "Release the migration lock with the id shown by --status"
3090
3226
  },
3091
3227
  database: {
3092
3228
  type: "string",
@@ -3122,6 +3258,7 @@ const migrateCommand = defineCommand({
3122
3258
  status: args.status,
3123
3259
  json: args.json,
3124
3260
  expectedTargetFingerprint: args["expected-target-fingerprint"],
3261
+ releaseLock: args["release-lock"],
3125
3262
  database: args.database,
3126
3263
  databaseUrlEnv: args["database-url-env"],
3127
3264
  d1: args.d1,
@@ -3132,6 +3269,656 @@ const migrateCommand = defineCommand({
3132
3269
  }
3133
3270
  });
3134
3271
 
3272
+ //#endregion
3273
+ //#region src/cli/commands/bundle-utils.ts
3274
+ /**
3275
+ * Bundle utility functions
3276
+ *
3277
+ * Shared logic extracted from the bundle command so it can be tested
3278
+ * without the CLI harness and tsdown dependency.
3279
+ */
3280
+ const MAX_BUNDLE_SIZE = 256 * 1024;
3281
+ const MAX_FILE_SIZE = 128 * 1024;
3282
+ const MAX_FILE_COUNT = 20;
3283
+ const MAX_SCREENSHOTS = 5;
3284
+ const MAX_SCREENSHOT_WIDTH = 1920;
3285
+ const MAX_SCREENSHOT_HEIGHT = 1080;
3286
+ const ICON_SIZE = 256;
3287
+ const MCP_TOOL_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
3288
+ /**
3289
+ * Matches Node.js built-in imports in bundled output:
3290
+ * - require("node:xxx") / require("xxx")
3291
+ * - import("node:xxx") / import("xxx")
3292
+ * - import X from "node:xxx" / import { X } from "node:xxx"
3293
+ * - import * as X from "node:xxx"
3294
+ * - export { X } from "node:xxx"
3295
+ * Captures the base module name (e.g. "fs" from "node:fs/promises").
3296
+ */
3297
+ const NODE_BUILTIN_IMPORT_RE = /(?:import|export|require)\s*(?:\(|[^(]*?\bfrom\s+)["'](?:node:)?([a-z_]+)(?:\/[^"']*)?\s*["']\)?/g;
3298
+ const LEADING_DOT_SLASH_RE = /^\.\//;
3299
+ const DIST_PREFIX_RE = /^dist\//;
3300
+ const MJS_EXT_RE = /\.m?js$/;
3301
+ const TS_TO_TSX_RE = /\.ts$/;
3302
+ /** Node.js built-in modules that shouldn't appear in sandbox code */
3303
+ const NODE_BUILTINS = new Set([
3304
+ "assert",
3305
+ "buffer",
3306
+ "child_process",
3307
+ "cluster",
3308
+ "crypto",
3309
+ "dgram",
3310
+ "dns",
3311
+ "domain",
3312
+ "events",
3313
+ "fs",
3314
+ "http",
3315
+ "http2",
3316
+ "https",
3317
+ "inspector",
3318
+ "module",
3319
+ "net",
3320
+ "os",
3321
+ "path",
3322
+ "perf_hooks",
3323
+ "process",
3324
+ "punycode",
3325
+ "querystring",
3326
+ "readline",
3327
+ "repl",
3328
+ "stream",
3329
+ "string_decoder",
3330
+ "sys",
3331
+ "timers",
3332
+ "tls",
3333
+ "trace_events",
3334
+ "tty",
3335
+ "url",
3336
+ "util",
3337
+ "v8",
3338
+ "vm",
3339
+ "wasi",
3340
+ "worker_threads",
3341
+ "zlib"
3342
+ ]);
3343
+ async function fileExists$1(path) {
3344
+ try {
3345
+ await access(path);
3346
+ return true;
3347
+ } catch {
3348
+ return false;
3349
+ }
3350
+ }
3351
+ /** Convert an absolute build artifact path into a portable ESM import specifier. */
3352
+ function toFileImportSpecifier(path) {
3353
+ return pathToFileURL(path).href;
3354
+ }
3355
+ /**
3356
+ * Read image dimensions from a buffer.
3357
+ * Returns [width, height] or null if the format is unrecognized.
3358
+ */
3359
+ function readImageDimensions(buf) {
3360
+ try {
3361
+ const result = imageSize(buf);
3362
+ if (result.width != null && result.height != null) return [result.width, result.height];
3363
+ return null;
3364
+ } catch {
3365
+ return null;
3366
+ }
3367
+ }
3368
+ /**
3369
+ * Extract manifest metadata from a ResolvedPlugin.
3370
+ * Strips functions (hooks, route handlers) and keeps only serializable metadata.
3371
+ */
3372
+ function extractManifest(plugin) {
3373
+ if ((plugin.admin.pages?.length ?? 0) > 0 || (plugin.admin.widgets?.length ?? 0) > 0) {
3374
+ const adminRoute = plugin.routes.admin;
3375
+ if (adminRoute && (adminRoute.public === true || !isJsonPostRouteContract(adminRoute))) throw new Error("Block Kit admin route must accept POST JSON requests and return JSON");
3376
+ }
3377
+ const declaredAccess = capabilitiesToDeclaredAccess$1(plugin.capabilities, plugin.allowedHosts);
3378
+ const enforcedAccess = declaredAccessToCapabilities$1(declaredAccess);
3379
+ const hooks = [];
3380
+ for (const [name, resolved] of Object.entries(plugin.hooks)) {
3381
+ if (!resolved) continue;
3382
+ if (resolved.exclusive || resolved.priority !== 100 || resolved.timeout !== 5e3) {
3383
+ const entry = { name };
3384
+ if (resolved.exclusive) entry.exclusive = true;
3385
+ if (resolved.priority !== 100) entry.priority = resolved.priority;
3386
+ if (resolved.timeout !== 5e3) entry.timeout = resolved.timeout;
3387
+ hooks.push(entry);
3388
+ } else hooks.push(name);
3389
+ }
3390
+ const routes = Object.entries(plugin.routes).map(([name, route]) => extractManifestRoute(name, route));
3391
+ const tools = Object.entries(plugin.mcp?.tools ?? {}).map(([name, tool]) => {
3392
+ if (!MCP_TOOL_NAME_PATTERN.test(name)) throw new Error(`Invalid MCP tool name "${name}"`);
3393
+ const route = plugin.routes[tool.route];
3394
+ if (!route?.permission || route.public || route.response === "raw") throw new Error(`MCP tool "${name}" must reference a private route with a permission`);
3395
+ if (!isJsonPostRouteContract(route)) throw new Error(`MCP tool "${name}" must reference a POST-compatible JSON route`);
3396
+ return {
3397
+ name,
3398
+ description: tool.description,
3399
+ route: tool.route,
3400
+ permission: route.permission,
3401
+ destructive: tool.destructive ?? false,
3402
+ inputSchema: z.toJSONSchema(tool.input, { target: "draft-7" }),
3403
+ ...tool.output ? { outputSchema: z.toJSONSchema(tool.output, { target: "draft-7" }) } : {}
3404
+ };
3405
+ });
3406
+ return {
3407
+ id: plugin.id,
3408
+ version: plugin.version,
3409
+ declaredAccess,
3410
+ capabilities: enforcedAccess.capabilities,
3411
+ allowedHosts: plugin.allowedHosts,
3412
+ storage: plugin.storage,
3413
+ hooks,
3414
+ routes,
3415
+ ...tools.length > 0 ? { mcp: { tools } } : {},
3416
+ admin: {
3417
+ settingsSchema: plugin.admin.settingsSchema,
3418
+ pages: plugin.admin.pages,
3419
+ widgets: plugin.admin.widgets,
3420
+ editorPanels: plugin.admin.editorPanels,
3421
+ editorActions: plugin.admin.editorActions
3422
+ }
3423
+ };
3424
+ }
3425
+ /**
3426
+ * Scan bundled code for Node.js built-in imports.
3427
+ * Matches require("node:xxx"), require("xxx"), import("node:xxx") — the patterns
3428
+ * that appear in bundled ESM/CJS output (not source-level named imports).
3429
+ * Returns deduplicated array of built-in module names found.
3430
+ */
3431
+ function findNodeBuiltinImports(code) {
3432
+ const found = [];
3433
+ NODE_BUILTIN_IMPORT_RE.lastIndex = 0;
3434
+ let match;
3435
+ while ((match = NODE_BUILTIN_IMPORT_RE.exec(code)) !== null) {
3436
+ const mod = match[1];
3437
+ if (NODE_BUILTINS.has(mod)) found.push(mod);
3438
+ }
3439
+ return [...new Set(found)];
3440
+ }
3441
+ /**
3442
+ * Find a build output file by base name, checking common extensions.
3443
+ * tsdown may output .mjs, .js, or .cjs depending on format and config.
3444
+ */
3445
+ async function findBuildOutput(dir, baseName) {
3446
+ for (const ext of [
3447
+ ".mjs",
3448
+ ".js",
3449
+ ".cjs"
3450
+ ]) {
3451
+ const candidate = join(dir, `${baseName}${ext}`);
3452
+ if (await fileExists$1(candidate)) return candidate;
3453
+ }
3454
+ }
3455
+ /**
3456
+ * Resolve a dist/built path back to its source .ts/.tsx equivalent.
3457
+ * E.g., "./dist/index.mjs" → "src/index.ts"
3458
+ */
3459
+ async function resolveSourceEntry(pluginDir, distPath) {
3460
+ const cleaned = distPath.replace(LEADING_DOT_SLASH_RE, "");
3461
+ const srcPath = cleaned.replace(DIST_PREFIX_RE, "src/").replace(MJS_EXT_RE, ".ts");
3462
+ const srcFull = resolve(pluginDir, srcPath);
3463
+ if (await fileExists$1(srcFull)) return srcFull;
3464
+ const tsxFull = resolve(pluginDir, srcPath.replace(TS_TO_TSX_RE, ".tsx"));
3465
+ if (await fileExists$1(tsxFull)) return tsxFull;
3466
+ const direct = resolve(pluginDir, cleaned);
3467
+ if (await fileExists$1(direct)) return direct;
3468
+ }
3469
+ const TS_SOURCE_EXPORT_RE = /\.(?:ts|tsx|mts|cts|jsx)$/;
3470
+ /**
3471
+ * Find package.json exports that point to source files instead of built output.
3472
+ * Returns an array of `{ exportPath, resolvedPath }` for each offending export.
3473
+ */
3474
+ function findSourceExports(exports) {
3475
+ const issues = [];
3476
+ for (const [exportPath, exportValue] of Object.entries(exports)) {
3477
+ const resolved = typeof exportValue === "string" ? exportValue : exportValue && typeof exportValue === "object" && "import" in exportValue ? exportValue.import : null;
3478
+ if (resolved && TS_SOURCE_EXPORT_RE.test(resolved)) issues.push({
3479
+ exportPath,
3480
+ resolvedPath: resolved
3481
+ });
3482
+ }
3483
+ return issues;
3484
+ }
3485
+ /**
3486
+ * Recursively walk a staging directory and return a flat list of all files
3487
+ * with sizes. Names are relative to `dir` so they match what would appear
3488
+ * as the tarball entry name.
3489
+ */
3490
+ async function collectBundleEntries(dir) {
3491
+ const entries = [];
3492
+ await walkBundle(dir, "", entries);
3493
+ return entries;
3494
+ }
3495
+ async function walkBundle(dir, prefix, into) {
3496
+ const items = await readdir(dir, { withFileTypes: true });
3497
+ for (const item of items) {
3498
+ const fullPath = join(dir, item.name);
3499
+ const relPath = prefix ? `${prefix}/${item.name}` : item.name;
3500
+ if (item.isFile()) {
3501
+ const s = await stat(fullPath);
3502
+ into.push({
3503
+ name: relPath,
3504
+ bytes: s.size
3505
+ });
3506
+ } else if (item.isDirectory()) await walkBundle(fullPath, relPath, into);
3507
+ }
3508
+ }
3509
+ /**
3510
+ * Sum the byte sizes of all entries.
3511
+ */
3512
+ function totalBundleBytes(entries) {
3513
+ let total = 0;
3514
+ for (const e of entries) total += e.bytes;
3515
+ return total;
3516
+ }
3517
+ /**
3518
+ * Check a bundle against the three size caps from RFC 0001:
3519
+ * - total decompressed ≤ MAX_BUNDLE_SIZE
3520
+ * - per-file decompressed ≤ MAX_FILE_SIZE
3521
+ * - file count ≤ MAX_FILE_COUNT
3522
+ *
3523
+ * Returns a list of violation messages (empty if the bundle is within all
3524
+ * caps). Messages are deterministic per input — the total/count violations
3525
+ * come first, then oversized files in alphabetical order — so the same
3526
+ * bundle always produces the same error text.
3527
+ */
3528
+ function validateBundleSize(entries) {
3529
+ const violations = [];
3530
+ const total = totalBundleBytes(entries);
3531
+ if (total > MAX_BUNDLE_SIZE) violations.push(`Bundle size ${formatBytes(total)} exceeds maximum of ${formatBytes(MAX_BUNDLE_SIZE)}.`);
3532
+ if (entries.length > MAX_FILE_COUNT) violations.push(`Bundle contains ${entries.length} files, exceeds maximum of ${MAX_FILE_COUNT}.`);
3533
+ const oversized = entries.filter((e) => e.bytes > MAX_FILE_SIZE).toSorted((a, b) => a.name.localeCompare(b.name));
3534
+ for (const e of oversized) violations.push(`File ${e.name} is ${formatBytes(e.bytes)}, exceeds per-file maximum of ${formatBytes(MAX_FILE_SIZE)}.`);
3535
+ return violations;
3536
+ }
3537
+ /**
3538
+ * Render a byte count as a human-friendly string (e.g. "256.0 KB").
3539
+ */
3540
+ function formatBytes(n) {
3541
+ if (n < 1024) return `${n} B`;
3542
+ if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)} KB`;
3543
+ return `${(n / 1024 / 1024).toFixed(2)} MB`;
3544
+ }
3545
+ /**
3546
+ * Create a gzipped tarball from a directory.
3547
+ */
3548
+ async function createTarball(sourceDir, outputPath) {
3549
+ const { createGzip } = await import("node:zlib");
3550
+ await pipeline(packTar(sourceDir), createGzip({ level: 9 }), createWriteStream(outputPath));
3551
+ }
3552
+
3553
+ //#endregion
3554
+ //#region src/cli/commands/bundle.ts
3555
+ /**
3556
+ * emdash plugin bundle
3557
+ *
3558
+ * Produces a publishable plugin tarball from a plugin source directory.
3559
+ *
3560
+ * Steps:
3561
+ * 1. Resolve plugin entrypoint (finds definePlugin() export)
3562
+ * 2. Bundle backend code with tsdown → backend.js (single ES module, tree-shaken)
3563
+ * 3. Bundle admin code if present → admin.js
3564
+ * 4. Extract manifest from definePlugin() → manifest.json
3565
+ * 5. Collect assets (README.md, icon.png, screenshots/)
3566
+ * 6. Validate bundle (manifest schema, size limits, no Node.js builtins)
3567
+ * 7. Create tarball ({id}-{version}.tar.gz)
3568
+ */
3569
+ var bundle_exports = /* @__PURE__ */ __exportAll({ bundleCommand: () => bundleCommand });
3570
+ const TS_EXT_RE = /\.(tsx?|[mc]?js)$/;
3571
+ const SLASH_RE = /\//g;
3572
+ const LEADING_AT_RE = /^@/;
3573
+ const emdash_SCOPE_RE = /^@emdash-cms\//;
3574
+ const bundleCommand = defineCommand({
3575
+ meta: {
3576
+ name: "bundle",
3577
+ description: "Bundle a plugin for marketplace distribution"
3578
+ },
3579
+ args: {
3580
+ dir: {
3581
+ type: "string",
3582
+ description: "Plugin directory (default: current directory)",
3583
+ default: process.cwd()
3584
+ },
3585
+ outDir: {
3586
+ type: "string",
3587
+ alias: "o",
3588
+ description: "Output directory for the tarball (default: ./dist)",
3589
+ default: "dist"
3590
+ },
3591
+ validateOnly: {
3592
+ type: "boolean",
3593
+ description: "Run validation only, skip tarball creation",
3594
+ default: false
3595
+ }
3596
+ },
3597
+ async run({ args }) {
3598
+ const pluginDir = resolve(args.dir);
3599
+ const outDir = resolve(pluginDir, args.outDir);
3600
+ const validateOnly = args.validateOnly;
3601
+ consola.start(validateOnly ? "Validating plugin..." : "Bundling plugin...");
3602
+ const pkgPath = join(pluginDir, "package.json");
3603
+ if (!await fileExists$1(pkgPath)) {
3604
+ consola.error("No package.json found in", pluginDir);
3605
+ process.exit(1);
3606
+ }
3607
+ const pkg = JSON.parse(await readFile(pkgPath, "utf-8"));
3608
+ let backendEntry;
3609
+ let adminEntry;
3610
+ if (pkg.exports) {
3611
+ const sandboxExport = pkg.exports["./sandbox"];
3612
+ if (typeof sandboxExport === "string") backendEntry = await resolveSourceEntry(pluginDir, sandboxExport);
3613
+ else if (sandboxExport && typeof sandboxExport === "object" && "import" in sandboxExport) backendEntry = await resolveSourceEntry(pluginDir, sandboxExport.import);
3614
+ const adminExport = pkg.exports["./admin"];
3615
+ if (typeof adminExport === "string") adminEntry = await resolveSourceEntry(pluginDir, adminExport);
3616
+ else if (adminExport && typeof adminExport === "object" && "import" in adminExport) adminEntry = await resolveSourceEntry(pluginDir, adminExport.import);
3617
+ }
3618
+ if (!backendEntry) {
3619
+ const defaultSandbox = join(pluginDir, "src/sandbox-entry.ts");
3620
+ if (await fileExists$1(defaultSandbox)) backendEntry = defaultSandbox;
3621
+ }
3622
+ let mainEntry;
3623
+ if (pkg.exports?.["."] !== void 0) {
3624
+ const mainExport = pkg.exports["."];
3625
+ if (typeof mainExport === "string") mainEntry = await resolveSourceEntry(pluginDir, mainExport);
3626
+ else if (mainExport && typeof mainExport === "object" && "import" in mainExport) mainEntry = await resolveSourceEntry(pluginDir, mainExport.import);
3627
+ }
3628
+ if (!mainEntry && pkg.main) mainEntry = await resolveSourceEntry(pluginDir, pkg.main);
3629
+ if (!mainEntry) {
3630
+ const defaultMain = join(pluginDir, "src/index.ts");
3631
+ if (await fileExists$1(defaultMain)) mainEntry = defaultMain;
3632
+ }
3633
+ if (!mainEntry) {
3634
+ consola.error("Cannot find plugin entrypoint. Expected src/index.ts or main/exports in package.json");
3635
+ process.exit(1);
3636
+ }
3637
+ consola.info(`Main entry: ${mainEntry}`);
3638
+ if (backendEntry) consola.info(`Backend entry: ${backendEntry}`);
3639
+ if (adminEntry) consola.info(`Admin entry: ${adminEntry}`);
3640
+ consola.start("Extracting plugin manifest...");
3641
+ const { build } = await import("tsdown");
3642
+ const tmpDir = join(pluginDir, ".emdash-bundle-tmp");
3643
+ try {
3644
+ await rm(tmpDir, {
3645
+ recursive: true,
3646
+ force: true
3647
+ });
3648
+ await mkdir(tmpDir, { recursive: true });
3649
+ const mainOutDir = join(tmpDir, "main");
3650
+ await build({
3651
+ config: false,
3652
+ entry: [mainEntry],
3653
+ format: "esm",
3654
+ outDir: mainOutDir,
3655
+ dts: false,
3656
+ platform: "node",
3657
+ external: ["emdash", emdash_SCOPE_RE]
3658
+ });
3659
+ const pluginNodeModules = join(pluginDir, "node_modules");
3660
+ const tmpNodeModules = join(mainOutDir, "node_modules");
3661
+ if (await fileExists$1(pluginNodeModules)) await symlink(pluginNodeModules, tmpNodeModules, "junction");
3662
+ const mainOutputPath = await findBuildOutput(mainOutDir, basename(mainEntry).replace(TS_EXT_RE, ""));
3663
+ if (!mainOutputPath) {
3664
+ consola.error("Failed to build main entry — no output found in", mainOutDir);
3665
+ process.exit(1);
3666
+ }
3667
+ const pluginModule = await import(toFileImportSpecifier(mainOutputPath));
3668
+ let resolvedPlugin;
3669
+ if (typeof pluginModule.createPlugin === "function") resolvedPlugin = pluginModule.createPlugin();
3670
+ else if (typeof pluginModule.default === "function") resolvedPlugin = pluginModule.default();
3671
+ else if (typeof pluginModule.default === "object" && pluginModule.default !== null) {
3672
+ const defaultExport = pluginModule.default;
3673
+ if ("id" in defaultExport && "version" in defaultExport) resolvedPlugin = defaultExport;
3674
+ }
3675
+ if (!resolvedPlugin) for (const [key, value] of Object.entries(pluginModule)) {
3676
+ if (key === "default" || typeof value !== "function") continue;
3677
+ try {
3678
+ const result = value();
3679
+ if (result && typeof result === "object" && "id" in result && "version" in result) {
3680
+ resolvedPlugin = {
3681
+ id: result.id,
3682
+ version: result.version,
3683
+ capabilities: result.capabilities ?? [],
3684
+ allowedHosts: result.allowedHosts ?? [],
3685
+ storage: result.storage ?? {},
3686
+ hooks: {},
3687
+ routes: {},
3688
+ admin: {
3689
+ pages: result.adminPages,
3690
+ widgets: result.adminWidgets
3691
+ }
3692
+ };
3693
+ if (backendEntry) {
3694
+ const backendProbeDir = join(tmpDir, "backend-probe");
3695
+ const probeShimDir = join(tmpDir, "probe-shims");
3696
+ await mkdir(probeShimDir, { recursive: true });
3697
+ await writeFile(join(probeShimDir, "emdash.mjs"), "export const definePlugin = (d) => d;\n");
3698
+ await build({
3699
+ config: false,
3700
+ entry: [backendEntry],
3701
+ format: "esm",
3702
+ outDir: backendProbeDir,
3703
+ dts: false,
3704
+ platform: "neutral",
3705
+ external: [],
3706
+ alias: { emdash: join(probeShimDir, "emdash.mjs") },
3707
+ treeshake: true
3708
+ });
3709
+ const backendProbePath = await findBuildOutput(backendProbeDir, basename(backendEntry).replace(TS_EXT_RE, ""));
3710
+ if (backendProbePath) {
3711
+ const standardDef = (await import(toFileImportSpecifier(backendProbePath))).default ?? {};
3712
+ const hooks = standardDef.hooks;
3713
+ const routes = standardDef.routes;
3714
+ if (hooks) for (const hookName of Object.keys(hooks)) {
3715
+ const hookEntry = hooks[hookName];
3716
+ const isConfig = typeof hookEntry === "object" && hookEntry !== null && "handler" in hookEntry;
3717
+ const config = isConfig ? hookEntry : {};
3718
+ resolvedPlugin.hooks[hookName] = {
3719
+ handler: isConfig ? hookEntry.handler : hookEntry,
3720
+ priority: config.priority ?? 100,
3721
+ timeout: config.timeout ?? 5e3,
3722
+ dependencies: config.dependencies ?? [],
3723
+ errorPolicy: config.errorPolicy ?? "abort",
3724
+ exclusive: config.exclusive ?? false,
3725
+ pluginId: result.id
3726
+ };
3727
+ }
3728
+ if (routes) for (const [name, route] of Object.entries(routes)) {
3729
+ const routeObj = typeof route === "object" && route !== null ? route : {};
3730
+ resolvedPlugin.routes[name] = {
3731
+ handler: typeof route === "function" ? route : routeObj.handler,
3732
+ ...extractRouteOptions(route)
3733
+ };
3734
+ }
3735
+ }
3736
+ }
3737
+ break;
3738
+ }
3739
+ } catch (error) {
3740
+ if (resolvedPlugin) throw error;
3741
+ }
3742
+ }
3743
+ if (!resolvedPlugin?.id || !resolvedPlugin?.version) {
3744
+ consola.error("Could not extract plugin definition. Expected one of:\n - createPlugin() export (native format)\n - Descriptor factory function returning { id, version, ... } (standard format)");
3745
+ process.exit(1);
3746
+ }
3747
+ const manifest = extractManifest(resolvedPlugin);
3748
+ if (resolvedPlugin.admin?.entry) {
3749
+ consola.error("Plugin declares adminEntry — React admin components require native/trusted mode. Use Block Kit for sandboxed admin pages, or remove adminEntry.");
3750
+ process.exit(1);
3751
+ }
3752
+ if (resolvedPlugin.admin?.portableTextBlocks && resolvedPlugin.admin.portableTextBlocks.length > 0) {
3753
+ consola.error("Plugin declares portableTextBlocks — these require native/trusted mode and cannot be bundled for the marketplace.");
3754
+ process.exit(1);
3755
+ }
3756
+ consola.success(`Plugin: ${manifest.id}@${manifest.version}`);
3757
+ consola.info(` Capabilities: ${manifest.capabilities.length > 0 ? manifest.capabilities.join(", ") : "(none)"}`);
3758
+ consola.info(` Hooks: ${manifest.hooks.length > 0 ? manifest.hooks.map((h) => typeof h === "string" ? h : h.name).join(", ") : "(none)"}`);
3759
+ consola.info(` Routes: ${manifest.routes.length > 0 ? manifest.routes.map((r) => typeof r === "string" ? r : r.name).join(", ") : "(none)"}`);
3760
+ const bundleDir = join(tmpDir, "bundle");
3761
+ await mkdir(bundleDir, { recursive: true });
3762
+ if (backendEntry) {
3763
+ consola.start("Bundling backend...");
3764
+ const shimDir = join(tmpDir, "shims");
3765
+ await mkdir(shimDir, { recursive: true });
3766
+ await writeFile(join(shimDir, "emdash.mjs"), "export const definePlugin = (d) => d;\n");
3767
+ await build({
3768
+ config: false,
3769
+ entry: [backendEntry],
3770
+ format: "esm",
3771
+ outDir: join(tmpDir, "backend"),
3772
+ dts: false,
3773
+ platform: "neutral",
3774
+ external: [],
3775
+ alias: { emdash: join(shimDir, "emdash.mjs") },
3776
+ minify: true,
3777
+ treeshake: true
3778
+ });
3779
+ const backendBaseName = basename(backendEntry).replace(TS_EXT_RE, "");
3780
+ const backendOutputPath = await findBuildOutput(join(tmpDir, "backend"), backendBaseName);
3781
+ if (backendOutputPath) {
3782
+ await copyFile(backendOutputPath, join(bundleDir, "backend.js"));
3783
+ consola.success("Built backend.js");
3784
+ } else {
3785
+ consola.error("Backend build produced no output");
3786
+ process.exit(1);
3787
+ }
3788
+ } else {
3789
+ consola.warn("No sandbox entry found — bundle will have no backend.js");
3790
+ consola.warn(" Add a \"sandbox-entry.ts\" in src/ or a \"./sandbox\" export in package.json");
3791
+ }
3792
+ if (adminEntry) {
3793
+ consola.start("Bundling admin...");
3794
+ await build({
3795
+ config: false,
3796
+ entry: [adminEntry],
3797
+ format: "esm",
3798
+ outDir: join(tmpDir, "admin"),
3799
+ dts: false,
3800
+ platform: "neutral",
3801
+ external: [],
3802
+ minify: true,
3803
+ treeshake: true
3804
+ });
3805
+ const adminBaseName = basename(adminEntry).replace(TS_EXT_RE, "");
3806
+ const adminOutputPath = await findBuildOutput(join(tmpDir, "admin"), adminBaseName);
3807
+ if (adminOutputPath) {
3808
+ await copyFile(adminOutputPath, join(bundleDir, "admin.js"));
3809
+ consola.success("Built admin.js");
3810
+ }
3811
+ }
3812
+ await writeFile(join(bundleDir, "manifest.json"), JSON.stringify(manifest, null, 2));
3813
+ consola.start("Collecting assets...");
3814
+ const readmePath = join(pluginDir, "README.md");
3815
+ if (await fileExists$1(readmePath)) {
3816
+ await copyFile(readmePath, join(bundleDir, "README.md"));
3817
+ consola.success("Included README.md");
3818
+ }
3819
+ const iconPath = join(pluginDir, "icon.png");
3820
+ if (await fileExists$1(iconPath)) {
3821
+ const dims = readImageDimensions(await readFile(iconPath));
3822
+ if (!dims) consola.warn("icon.png is not a valid PNG — skipping");
3823
+ else if (dims[0] !== ICON_SIZE || dims[1] !== ICON_SIZE) {
3824
+ consola.warn(`icon.png is ${dims[0]}x${dims[1]}, expected ${ICON_SIZE}x${ICON_SIZE} — including anyway`);
3825
+ await copyFile(iconPath, join(bundleDir, "icon.png"));
3826
+ } else {
3827
+ await copyFile(iconPath, join(bundleDir, "icon.png"));
3828
+ consola.success("Included icon.png");
3829
+ }
3830
+ }
3831
+ const screenshotsDir = join(pluginDir, "screenshots");
3832
+ if (await fileExists$1(screenshotsDir)) {
3833
+ const screenshotFiles = (await readdir(screenshotsDir)).filter((f) => {
3834
+ const ext = extname(f).toLowerCase();
3835
+ return ext === ".png" || ext === ".jpg" || ext === ".jpeg";
3836
+ }).toSorted().slice(0, MAX_SCREENSHOTS);
3837
+ if (screenshotFiles.length > 0) {
3838
+ await mkdir(join(bundleDir, "screenshots"), { recursive: true });
3839
+ for (const file of screenshotFiles) {
3840
+ const filePath = join(screenshotsDir, file);
3841
+ const dims = readImageDimensions(await readFile(filePath));
3842
+ if (!dims) {
3843
+ consola.warn(`screenshots/${file} — cannot read dimensions, skipping`);
3844
+ continue;
3845
+ }
3846
+ if (dims[0] > MAX_SCREENSHOT_WIDTH || dims[1] > MAX_SCREENSHOT_HEIGHT) consola.warn(`screenshots/${file} is ${dims[0]}x${dims[1]}, max ${MAX_SCREENSHOT_WIDTH}x${MAX_SCREENSHOT_HEIGHT} — including anyway`);
3847
+ await copyFile(filePath, join(bundleDir, "screenshots", file));
3848
+ }
3849
+ consola.success(`Included ${screenshotFiles.length} screenshot(s)`);
3850
+ }
3851
+ }
3852
+ consola.start("Validating bundle...");
3853
+ let hasErrors = false;
3854
+ if (pkg.exports) for (const issue of findSourceExports(pkg.exports)) {
3855
+ consola.error(`Export "${issue.exportPath}" points to source (${issue.resolvedPath}). Package exports must point to built files (e.g. dist/*.mjs). Add a build step and update the exports map.`);
3856
+ hasErrors = true;
3857
+ }
3858
+ const backendPath = join(bundleDir, "backend.js");
3859
+ if (await fileExists$1(backendPath)) {
3860
+ const builtins = findNodeBuiltinImports(await readFile(backendPath, "utf-8"));
3861
+ if (builtins.length > 0) {
3862
+ consola.error(`backend.js imports Node.js built-in modules: ${builtins.join(", ")}`);
3863
+ consola.error("Sandboxed plugins cannot use Node.js APIs");
3864
+ hasErrors = true;
3865
+ }
3866
+ }
3867
+ const declaresUnrestricted = manifest.capabilities.includes("network:request:unrestricted") || manifest.capabilities.includes("network:fetch:any");
3868
+ const declaresHostRestricted = manifest.capabilities.includes("network:request") || manifest.capabilities.includes("network:fetch");
3869
+ if (declaresUnrestricted) consola.warn("Plugin declares unrestricted network access (network:request:unrestricted) — it can make requests to any host");
3870
+ else if (declaresHostRestricted && manifest.allowedHosts.length === 0) consola.warn("Plugin declares network:request capability but no allowedHosts — all requests will be blocked");
3871
+ const deprecatedCaps = manifest.capabilities.filter(isDeprecatedCapability);
3872
+ if (deprecatedCaps.length > 0) {
3873
+ consola.warn("Plugin uses deprecated capability names. Rename them before publishing:");
3874
+ for (const cap of deprecatedCaps) {
3875
+ const replacement = CAPABILITY_RENAMES[cap];
3876
+ consola.warn(` ${cap} → ${replacement}`);
3877
+ }
3878
+ }
3879
+ if (resolvedPlugin.admin?.portableTextBlocks && resolvedPlugin.admin.portableTextBlocks.length > 0) consola.warn("Plugin declares portableTextBlocks — these require trusted mode and will be ignored in sandboxed plugins");
3880
+ if (resolvedPlugin.admin?.entry) consola.warn("Plugin declares admin.entry — custom React components require trusted mode. Use Block Kit for sandboxed admin pages");
3881
+ if (resolvedPlugin.hooks["page:fragments"]) consola.warn("Plugin declares page:fragments hook — this is trusted-only and will not work in sandboxed mode");
3882
+ const hasAdminPages = (manifest.admin?.pages?.length ?? 0) > 0;
3883
+ const hasAdminWidgets = (manifest.admin?.widgets?.length ?? 0) > 0;
3884
+ if (hasAdminPages || hasAdminWidgets) {
3885
+ if (!manifest.routes.map((r) => typeof r === "string" ? r : r.name).includes("admin")) {
3886
+ consola.error(`Plugin declares ${hasAdminPages ? "adminPages" : ""}${hasAdminPages && hasAdminWidgets ? " and " : ""}${hasAdminWidgets ? "adminWidgets" : ""} but the sandbox entry has no "admin" route. Add an admin route handler to serve Block Kit pages.`);
3887
+ hasErrors = true;
3888
+ }
3889
+ }
3890
+ const bundleEntries = await collectBundleEntries(bundleDir);
3891
+ const sizeViolations = validateBundleSize(bundleEntries);
3892
+ if (sizeViolations.length > 0) {
3893
+ for (const v of sizeViolations) consola.error(v);
3894
+ hasErrors = true;
3895
+ } else consola.info(`Bundle size: ${formatBytes(totalBundleBytes(bundleEntries))} across ${bundleEntries.length} file${bundleEntries.length === 1 ? "" : "s"}`);
3896
+ if (hasErrors) {
3897
+ consola.error("Bundle validation failed");
3898
+ process.exit(1);
3899
+ }
3900
+ consola.success("Validation passed");
3901
+ if (validateOnly) return;
3902
+ await mkdir(outDir, { recursive: true });
3903
+ const tarballName = `${manifest.id.replace(SLASH_RE, "-").replace(LEADING_AT_RE, "")}-${manifest.version}.tar.gz`;
3904
+ const tarballPath = join(outDir, tarballName);
3905
+ consola.start("Creating tarball...");
3906
+ await createTarball(bundleDir, tarballPath);
3907
+ const tarballSizeKB = ((await stat(tarballPath)).size / 1024).toFixed(1);
3908
+ const tarballBuf = await readFile(tarballPath);
3909
+ const checksum = createHash("sha256").update(tarballBuf).digest("hex");
3910
+ consola.success(`Created ${tarballName} (${tarballSizeKB}KB)`);
3911
+ consola.info(` SHA-256: ${checksum}`);
3912
+ consola.info(` Path: ${tarballPath}`);
3913
+ } finally {
3914
+ if (tmpDir.endsWith(".emdash-bundle-tmp")) await rm(tmpDir, {
3915
+ recursive: true,
3916
+ force: true
3917
+ });
3918
+ }
3919
+ }
3920
+ });
3921
+
3135
3922
  //#endregion
3136
3923
  //#region src/cli/commands/plugin-init.ts
3137
3924
  /**
@@ -3192,7 +3979,7 @@ const pluginInitCommand = defineCommand({
3192
3979
  process.exit(1);
3193
3980
  }
3194
3981
  const srcDir = join(targetDir, "src");
3195
- if (await fileExists$4(join(targetDir, "package.json"))) {
3982
+ if (await fileExists$1(join(targetDir, "package.json"))) {
3196
3983
  consola.error(`package.json already exists in ${targetDir}`);
3197
3984
  process.exit(1);
3198
3985
  }
@@ -3569,7 +4356,7 @@ async function pollGitHubDeviceFlow(tokenEndpoint, clientId, deviceCode, interva
3569
4356
  }
3570
4357
  throw new Error("Device code expired (timeout). Please try again.");
3571
4358
  }
3572
- const manifestSummarySchema = pluginManifestSchema.pick({
4359
+ const manifestSummarySchema = pluginManifestBaseSchema.pick({
3573
4360
  id: true,
3574
4361
  version: true,
3575
4362
  capabilities: true,
@@ -3674,7 +4461,7 @@ const publishCommand = defineCommand({
3674
4461
  const pluginDir = resolve(args.dir);
3675
4462
  try {
3676
4463
  const { runCommand } = await import("citty");
3677
- const { bundleCommand } = await import("../bundle-CL0JjIPx.mjs").then((n) => n.n);
4464
+ const { bundleCommand } = await Promise.resolve().then(() => bundle_exports);
3678
4465
  await runCommand(bundleCommand, { rawArgs: ["--dir", pluginDir] });
3679
4466
  } catch {
3680
4467
  consola.error("Build failed");