emdash 0.40.0 → 0.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1258) hide show
  1. package/dist/action-token-CbKDcPJi.mjs +26 -0
  2. package/dist/action-token-CbKDcPJi.mjs.map +1 -0
  3. package/dist/activation-PtniBLt9.mjs +382 -0
  4. package/dist/activation-PtniBLt9.mjs.map +1 -0
  5. package/dist/adapters-C_Tf5x90.d.mts +171 -0
  6. package/dist/adapters-C_Tf5x90.d.mts.map +1 -0
  7. package/dist/allowed-origins-U1z4TdEZ.mjs +116 -0
  8. package/dist/allowed-origins-U1z4TdEZ.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +46 -45
  11. package/dist/api/route-utils.mjs.map +1 -1
  12. package/dist/api/schemas/index.d.mts +2 -2
  13. package/dist/api/schemas/index.mjs +10 -10
  14. package/dist/api-CXwQkV_m.mjs +5122 -0
  15. package/dist/api-CXwQkV_m.mjs.map +1 -0
  16. package/dist/api-tokens-89WlohEN.mjs +166 -0
  17. package/dist/api-tokens-89WlohEN.mjs.map +1 -0
  18. package/dist/apply-Do3KNnUk.mjs +1659 -0
  19. package/dist/apply-Do3KNnUk.mjs.map +1 -0
  20. package/dist/approvals-CAX9Yw33.mjs +460 -0
  21. package/dist/approvals-CAX9Yw33.mjs.map +1 -0
  22. package/dist/artifact-fetch-B9W4CEST.mjs +659 -0
  23. package/dist/artifact-fetch-B9W4CEST.mjs.map +1 -0
  24. package/dist/astro/index.d.mts +14 -14
  25. package/dist/astro/index.mjs +26 -30
  26. package/dist/astro/index.mjs.map +1 -1
  27. package/dist/astro/middleware/auth.d.mts +12 -12
  28. package/dist/astro/middleware/auth.mjs +10 -10
  29. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  30. package/dist/astro/middleware/redirect.mjs +7 -7
  31. package/dist/astro/middleware/request-context.mjs +3 -3
  32. package/dist/astro/middleware/setup.mjs +1 -1
  33. package/dist/astro/middleware.d.mts +12 -12
  34. package/dist/astro/middleware.d.mts.map +1 -1
  35. package/dist/astro/middleware.mjs +110 -106
  36. package/dist/astro/middleware.mjs.map +1 -1
  37. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
  38. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
  39. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  40. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  41. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +7 -7
  42. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +17 -17
  43. package/dist/astro/routes/api/admin/byline-fields/index.mjs +17 -17
  44. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +17 -17
  45. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +23 -23
  46. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +23 -23
  47. package/dist/astro/routes/api/admin/bylines/index.mjs +23 -23
  48. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
  49. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
  50. package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
  51. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
  52. package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
  53. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  54. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  55. package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
  56. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +22 -22
  57. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +22 -22
  58. package/dist/astro/routes/api/admin/media-usage/progress.mjs +25 -25
  59. package/dist/astro/routes/api/admin/media-usage/repair.mjs +31 -31
  60. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +22 -22
  61. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +22 -22
  62. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  63. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  64. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  65. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  66. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -68
  67. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  68. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  69. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -67
  70. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  71. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +72 -68
  72. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  73. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +82 -78
  74. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  75. package/dist/astro/routes/api/admin/plugins/index.mjs +72 -68
  76. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  77. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +5 -5
  78. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -67
  79. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +81 -77
  81. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -67
  83. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +72 -68
  85. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +83 -79
  87. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -9
  89. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +74 -70
  90. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  92. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -68
  93. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -67
  95. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
  97. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -67
  98. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +5 -5
  100. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -67
  101. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  103. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +40 -40
  104. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +40 -40
  105. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +42 -42
  106. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +42 -42
  107. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +42 -42
  108. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +43 -43
  109. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +43 -43
  110. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +42 -42
  111. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +43 -43
  112. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +44 -44
  113. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +42 -42
  114. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +42 -42
  115. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +44 -44
  116. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +42 -42
  117. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +44 -44
  118. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +42 -42
  119. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +42 -42
  120. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +44 -44
  121. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +42 -42
  122. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +42 -42
  123. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +44 -44
  124. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
  125. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  126. package/dist/astro/routes/api/admin/users/_id_/index.mjs +15 -15
  127. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  128. package/dist/astro/routes/api/admin/users/index.mjs +14 -14
  129. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  130. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  131. package/dist/astro/routes/api/auth/invite/complete.mjs +18 -18
  132. package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
  133. package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
  134. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  135. package/dist/astro/routes/api/auth/magic-link/send.mjs +18 -18
  136. package/dist/astro/routes/api/auth/magic-link/verify.mjs +14 -14
  137. package/dist/astro/routes/api/auth/me.mjs +15 -15
  138. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  139. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  140. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  141. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -14
  142. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  143. package/dist/astro/routes/api/auth/passkey/options.mjs +19 -19
  144. package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
  145. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
  146. package/dist/astro/routes/api/auth/passkey/verify.mjs +18 -18
  147. package/dist/astro/routes/api/auth/signup/complete.mjs +18 -18
  148. package/dist/astro/routes/api/auth/signup/request.mjs +17 -17
  149. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  150. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
  151. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
  152. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  153. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +17 -17
  154. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  155. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +17 -17
  156. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
  157. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
  158. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +31 -31
  159. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +17 -17
  160. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts +1 -2
  161. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -1
  162. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +42 -53
  163. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  164. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -29
  165. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  166. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  167. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  168. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +17 -17
  169. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +25 -24
  170. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  171. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  172. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +17 -17
  173. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  174. package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -18
  175. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  176. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  177. package/dist/astro/routes/api/content/_collection_/index.mjs +15 -15
  178. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
  179. package/dist/astro/routes/api/dashboard.mjs +10 -9
  180. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  181. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  182. package/dist/astro/routes/api/health.mjs +6 -6
  183. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  184. package/dist/astro/routes/api/import/probe.mjs +23 -23
  185. package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
  186. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
  187. package/dist/astro/routes/api/import/wordpress/execute.mjs +16 -16
  188. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  189. package/dist/astro/routes/api/import/wordpress/media.mjs +19 -19
  190. package/dist/astro/routes/api/import/wordpress/prepare.mjs +18 -18
  191. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  192. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +28 -28
  193. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  194. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +23 -23
  195. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  196. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +34 -34
  197. package/dist/astro/routes/api/manifest.mjs +6 -6
  198. package/dist/astro/routes/api/mcp.mjs +98 -118
  199. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  200. package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -19
  201. package/dist/astro/routes/api/media/_id_/replace.mjs +16 -16
  202. package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
  203. package/dist/astro/routes/api/media/_id_/usage.mjs +33 -33
  204. package/dist/astro/routes/api/media/_id_.mjs +31 -31
  205. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  206. package/dist/astro/routes/api/media/file/_...key_.mjs +9 -9
  207. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
  208. package/dist/astro/routes/api/media/folders/index.mjs +16 -16
  209. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  210. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  211. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  212. package/dist/astro/routes/api/media/upload-url.mjs +18 -18
  213. package/dist/astro/routes/api/media.mjs +35 -35
  214. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +17 -17
  215. package/dist/astro/routes/api/menus/_name_/items.mjs +17 -17
  216. package/dist/astro/routes/api/menus/_name_/reorder.mjs +17 -17
  217. package/dist/astro/routes/api/menus/_name_/translations.mjs +17 -17
  218. package/dist/astro/routes/api/menus/_name_.mjs +17 -17
  219. package/dist/astro/routes/api/menus/index.mjs +17 -17
  220. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  221. package/dist/astro/routes/api/oauth/device/authorize.d.mts +2 -1
  222. package/dist/astro/routes/api/oauth/device/authorize.d.mts.map +1 -1
  223. package/dist/astro/routes/api/oauth/device/authorize.mjs +23 -9
  224. package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
  225. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  226. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  227. package/dist/astro/routes/api/oauth/register.mjs +5 -5
  228. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  229. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  230. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  231. package/dist/astro/routes/api/openapi.json.mjs +20 -20
  232. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
  233. package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
  234. package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
  235. package/dist/astro/routes/api/redirects/_id_.mjs +19 -19
  236. package/dist/astro/routes/api/redirects/index.mjs +19 -19
  237. package/dist/astro/routes/api/relations/_id_/index.mjs +34 -29
  238. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  239. package/dist/astro/routes/api/relations/index.mjs +36 -31
  240. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  241. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  242. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
  243. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +71 -67
  244. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  245. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +71 -67
  246. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  247. package/dist/astro/routes/api/schema/block-types/index.mjs +71 -67
  248. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  249. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +73 -69
  250. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  251. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +71 -67
  252. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  253. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +71 -67
  254. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  255. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -67
  256. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  257. package/dist/astro/routes/api/schema/collections/index.mjs +71 -67
  258. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  259. package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -67
  260. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  261. package/dist/astro/routes/api/schema/index.mjs +16 -16
  262. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -67
  263. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  264. package/dist/astro/routes/api/schema/orphans/index.mjs +71 -67
  265. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  266. package/dist/astro/routes/api/search/enable.mjs +19 -19
  267. package/dist/astro/routes/api/search/index.mjs +18 -18
  268. package/dist/astro/routes/api/search/rebuild.mjs +19 -19
  269. package/dist/astro/routes/api/search/stats.mjs +9 -9
  270. package/dist/astro/routes/api/search/suggest.mjs +18 -18
  271. package/dist/astro/routes/api/sections/_slug_.mjs +18 -18
  272. package/dist/astro/routes/api/sections/index.mjs +18 -18
  273. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  274. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  275. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  276. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  277. package/dist/astro/routes/api/settings/email.mjs +6 -6
  278. package/dist/astro/routes/api/settings.mjs +21 -21
  279. package/dist/astro/routes/api/setup/admin-verify.mjs +19 -19
  280. package/dist/astro/routes/api/setup/admin.mjs +18 -18
  281. package/dist/astro/routes/api/setup/dev-bypass.mjs +45 -39
  282. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  283. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  284. package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
  285. package/dist/astro/routes/api/setup/index.mjs +80 -49
  286. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  287. package/dist/astro/routes/api/setup/status.mjs +6 -6
  288. package/dist/astro/routes/api/snapshot.mjs +9 -9
  289. package/dist/astro/routes/api/snapshot.mjs.map +1 -1
  290. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -23
  291. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -23
  292. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +23 -23
  293. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -23
  294. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -22
  295. package/dist/astro/routes/api/taxonomies/_name_.mjs +23 -23
  296. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +36 -35
  297. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  298. package/dist/astro/routes/api/taxonomies/index.mjs +23 -23
  299. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  300. package/dist/astro/routes/api/typegen.mjs +8 -8
  301. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  302. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +19 -19
  303. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  304. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  305. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  306. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  307. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +16 -16
  308. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +19 -19
  309. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +19 -19
  310. package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
  311. package/dist/astro/routes/api/widget-areas/index.mjs +19 -19
  312. package/dist/astro/routes/api/widget-components.mjs +5 -5
  313. package/dist/astro/routes/robots.txt.mjs +6 -6
  314. package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
  315. package/dist/astro/routes/sitemap.xml.mjs +7 -7
  316. package/dist/astro/types.d.mts +28 -18
  317. package/dist/astro/types.d.mts.map +1 -1
  318. package/dist/audit-CrgmE9LE.mjs +127 -0
  319. package/dist/audit-CrgmE9LE.mjs.map +1 -0
  320. package/dist/auth/providers/github.d.mts +1 -1
  321. package/dist/auth/providers/google.d.mts +1 -1
  322. package/dist/authoritative-records-C2YzIdbu.mjs +5172 -0
  323. package/dist/authoritative-records-C2YzIdbu.mjs.map +1 -0
  324. package/dist/authorize-WgdKF8QY.mjs +49 -0
  325. package/dist/authorize-WgdKF8QY.mjs.map +1 -0
  326. package/dist/backup-Ck8_lMO3.mjs +246 -0
  327. package/dist/backup-Ck8_lMO3.mjs.map +1 -0
  328. package/dist/block-types-BQ90asVI.mjs +132 -0
  329. package/dist/block-types-BQ90asVI.mjs.map +1 -0
  330. package/dist/block-values-ACFqgB1D.mjs +175 -0
  331. package/dist/block-values-ACFqgB1D.mjs.map +1 -0
  332. package/dist/bundle-Db1iNMv_.mjs +667 -0
  333. package/dist/bundle-Db1iNMv_.mjs.map +1 -0
  334. package/dist/byline-BayaYGoj.mjs +909 -0
  335. package/dist/byline-BayaYGoj.mjs.map +1 -0
  336. package/dist/byline-fields-B8HH-35f.mjs +254 -0
  337. package/dist/byline-fields-B8HH-35f.mjs.map +1 -0
  338. package/dist/byline-fields-hMPjf6Eu.mjs +123 -0
  339. package/dist/byline-fields-hMPjf6Eu.mjs.map +1 -0
  340. package/dist/byline-registry-B_EK_TQf.mjs +406 -0
  341. package/dist/byline-registry-B_EK_TQf.mjs.map +1 -0
  342. package/dist/bylines-DFAaFXWi.mjs +214 -0
  343. package/dist/bylines-DFAaFXWi.mjs.map +1 -0
  344. package/dist/bylines-DkIxUxmr.mjs +232 -0
  345. package/dist/bylines-DkIxUxmr.mjs.map +1 -0
  346. package/dist/cache-DkvhQ8XE.mjs +108 -0
  347. package/dist/cache-DkvhQ8XE.mjs.map +1 -0
  348. package/dist/canonical-CcSuuTlH.mjs +174 -0
  349. package/dist/canonical-CcSuuTlH.mjs.map +1 -0
  350. package/dist/capture-triggers-DJEoOTOq.mjs +362 -0
  351. package/dist/capture-triggers-DJEoOTOq.mjs.map +1 -0
  352. package/dist/challenge-store-CvBl81AQ.mjs +51 -0
  353. package/dist/challenge-store-CvBl81AQ.mjs.map +1 -0
  354. package/dist/checksum-CClweQzI.mjs +162 -0
  355. package/dist/checksum-CClweQzI.mjs.map +1 -0
  356. package/dist/chrome-tags-D5caJwwp.mjs +24 -0
  357. package/dist/chrome-tags-D5caJwwp.mjs.map +1 -0
  358. package/dist/chunks-DwBaj8aT.mjs +25 -0
  359. package/dist/chunks-DwBaj8aT.mjs.map +1 -0
  360. package/dist/cli/index.mjs +374 -761
  361. package/dist/cli/index.mjs.map +1 -1
  362. package/dist/client/cf-access.d.mts +1 -1
  363. package/dist/client/index.d.mts +18 -18
  364. package/dist/client/index.mjs +2 -2
  365. package/dist/collection-deletion-CLCdXsnV.mjs +436 -0
  366. package/dist/collection-deletion-CLCdXsnV.mjs.map +1 -0
  367. package/dist/collection-deletion-processor-hNw8x01F.mjs +217 -0
  368. package/dist/collection-deletion-processor-hNw8x01F.mjs.map +1 -0
  369. package/dist/collection-slugs-cache-CUuiduLq.mjs +85 -0
  370. package/dist/collection-slugs-cache-CUuiduLq.mjs.map +1 -0
  371. package/dist/comment-D2uvL63j.mjs +313 -0
  372. package/dist/comment-D2uvL63j.mjs.map +1 -0
  373. package/dist/comment-reaction-DevUuzg4.mjs +85 -0
  374. package/dist/comment-reaction-DevUuzg4.mjs.map +1 -0
  375. package/dist/comments-Cq0s7_hO.mjs +195 -0
  376. package/dist/comments-Cq0s7_hO.mjs.map +1 -0
  377. package/dist/comments-M4EDYAHw.mjs +99 -0
  378. package/dist/comments-M4EDYAHw.mjs.map +1 -0
  379. package/dist/components-CuIGwXMs.mjs +108 -0
  380. package/dist/components-CuIGwXMs.mjs.map +1 -0
  381. package/dist/config-52Ea5IWt.d.mts +39 -0
  382. package/dist/config-52Ea5IWt.d.mts.map +1 -0
  383. package/dist/config-CCz3xOLc.mjs +242 -0
  384. package/dist/config-CCz3xOLc.mjs.map +1 -0
  385. package/dist/config-D3d5Qudq.d.mts +6669 -0
  386. package/dist/config-D3d5Qudq.d.mts.map +1 -0
  387. package/dist/content-CbnufDsM.mjs +2018 -0
  388. package/dist/content-CbnufDsM.mjs.map +1 -0
  389. package/dist/content-list-query-D_7B1FE5.d.mts +26 -0
  390. package/dist/content-list-query-D_7B1FE5.d.mts.map +1 -0
  391. package/dist/content-policy-CYu6K1KB.mjs +46 -0
  392. package/dist/content-policy-CYu6K1KB.mjs.map +1 -0
  393. package/dist/content-repair-DlDUgFGp.mjs +442 -0
  394. package/dist/content-repair-DlDUgFGp.mjs.map +1 -0
  395. package/dist/context-CGQLA1-a.mjs +1922 -0
  396. package/dist/context-CGQLA1-a.mjs.map +1 -0
  397. package/dist/cron-c4D5C5Fx.mjs +284 -0
  398. package/dist/cron-c4D5C5Fx.mjs.map +1 -0
  399. package/dist/dashboard-CBq9kmOn.mjs +151 -0
  400. package/dist/dashboard-CBq9kmOn.mjs.map +1 -0
  401. package/dist/db/index.d.mts +3 -3
  402. package/dist/db/index.mjs +1 -1
  403. package/dist/db/libsql-migrations.d.mts +1 -1
  404. package/dist/db/libsql-migrations.mjs +4 -4
  405. package/dist/db/libsql.d.mts +1 -1
  406. package/dist/db/postgres-migrations.d.mts +1 -1
  407. package/dist/db/postgres-migrations.mjs +4 -4
  408. package/dist/db/postgres.d.mts +1 -1
  409. package/dist/db/sqlite-migrations.d.mts +1 -1
  410. package/dist/db/sqlite-migrations.mjs +4 -4
  411. package/dist/db/sqlite.d.mts +1 -1
  412. package/dist/db/sqlite.mjs +1 -1
  413. package/dist/default-DPsys51U.mjs +81 -0
  414. package/dist/default-DPsys51U.mjs.map +1 -0
  415. package/dist/deferred-tasks-CZ7rzBdo.d.mts +9 -0
  416. package/dist/deferred-tasks-CZ7rzBdo.d.mts.map +1 -0
  417. package/dist/dev-typegen-HRxwLRcT.mjs +29 -0
  418. package/dist/dev-typegen-HRxwLRcT.mjs.map +1 -0
  419. package/dist/device-flow-OcSqE9uY.mjs +521 -0
  420. package/dist/device-flow-OcSqE9uY.mjs.map +1 -0
  421. package/dist/digest-DVZ--cE9.mjs +194 -0
  422. package/dist/digest-DVZ--cE9.mjs.map +1 -0
  423. package/dist/direct-executor-DyjAqkpT.mjs +104 -0
  424. package/dist/direct-executor-DyjAqkpT.mjs.map +1 -0
  425. package/dist/dist-FPR93_xf.mjs +810 -0
  426. package/dist/dist-FPR93_xf.mjs.map +1 -0
  427. package/dist/email-console-DyQIgEnz.mjs +50 -0
  428. package/dist/email-console-DyQIgEnz.mjs.map +1 -0
  429. package/dist/email-locale-BYb16rVd.mjs +25 -0
  430. package/dist/email-locale-BYb16rVd.mjs.map +1 -0
  431. package/dist/emdash-runtime-CrzxJFmF.mjs +4214 -0
  432. package/dist/emdash-runtime-CrzxJFmF.mjs.map +1 -0
  433. package/dist/enrich-DBtCncE2.mjs +194 -0
  434. package/dist/enrich-DBtCncE2.mjs.map +1 -0
  435. package/dist/entry-lock-BN5y4YbO.d.mts +4481 -0
  436. package/dist/entry-lock-BN5y4YbO.d.mts.map +1 -0
  437. package/dist/entry-lock-BaRBHCsH.mjs +1173 -0
  438. package/dist/entry-lock-BaRBHCsH.mjs.map +1 -0
  439. package/dist/entry-lock-C6NcnZPV.mjs +163 -0
  440. package/dist/entry-lock-C6NcnZPV.mjs.map +1 -0
  441. package/dist/entry-locks-BTyQLdbC.mjs +167 -0
  442. package/dist/entry-locks-BTyQLdbC.mjs.map +1 -0
  443. package/dist/error-BfsNNrIE.mjs +90 -0
  444. package/dist/error-BfsNNrIE.mjs.map +1 -0
  445. package/dist/errors-BN1QAnEY.mjs +460 -0
  446. package/dist/errors-BN1QAnEY.mjs.map +1 -0
  447. package/dist/errors-Bt3goF8I.mjs +120 -0
  448. package/dist/errors-Bt3goF8I.mjs.map +1 -0
  449. package/dist/escape-BveidMa2.mjs +9 -0
  450. package/dist/escape-BveidMa2.mjs.map +1 -0
  451. package/dist/fence-Bb_IbCxI.mjs +162 -0
  452. package/dist/fence-Bb_IbCxI.mjs.map +1 -0
  453. package/dist/field-defs-cache-CsZctvbu.mjs +77 -0
  454. package/dist/field-defs-cache-CsZctvbu.mjs.map +1 -0
  455. package/dist/field-map-6m9rF49t.mjs +83 -0
  456. package/dist/field-map-6m9rF49t.mjs.map +1 -0
  457. package/dist/focal-point-CZ3d1wK5.mjs +23 -0
  458. package/dist/focal-point-CZ3d1wK5.mjs.map +1 -0
  459. package/dist/fts-manager-CCaZTp8y.mjs +443 -0
  460. package/dist/fts-manager-CCaZTp8y.mjs.map +1 -0
  461. package/dist/gc-xowRjczI.mjs +75 -0
  462. package/dist/gc-xowRjczI.mjs.map +1 -0
  463. package/dist/hash-COVK27Pc.mjs +37 -0
  464. package/dist/hash-COVK27Pc.mjs.map +1 -0
  465. package/dist/hook-result-CYSk0XFe.d.mts +31 -0
  466. package/dist/hook-result-CYSk0XFe.d.mts.map +1 -0
  467. package/dist/hreflang-CChPV7jx.mjs +105 -0
  468. package/dist/hreflang-CChPV7jx.mjs.map +1 -0
  469. package/dist/hreflang-DRslq3QI.d.mts +50 -0
  470. package/dist/hreflang-DRslq3QI.d.mts.map +1 -0
  471. package/dist/http-route-dispatch-CAdp2onn.mjs +339 -0
  472. package/dist/http-route-dispatch-CAdp2onn.mjs.map +1 -0
  473. package/dist/identity-NVTOOQyq.mjs +35 -0
  474. package/dist/identity-NVTOOQyq.mjs.map +1 -0
  475. package/dist/import-wpSO2N0x.mjs +2020 -0
  476. package/dist/import-wpSO2N0x.mjs.map +1 -0
  477. package/dist/index-CDs2wq4X.d.mts +623 -0
  478. package/dist/index-CDs2wq4X.d.mts.map +1 -0
  479. package/dist/index.d.mts +24 -24
  480. package/dist/index.mjs +103 -101
  481. package/dist/install-finalization-D9R9R-W8.mjs +58 -0
  482. package/dist/install-finalization-D9R9R-W8.mjs.map +1 -0
  483. package/dist/keys-Bck6LBfF.mjs +61 -0
  484. package/dist/keys-Bck6LBfF.mjs.map +1 -0
  485. package/dist/kinds-CYmRESWj.mjs +974 -0
  486. package/dist/kinds-CYmRESWj.mjs.map +1 -0
  487. package/dist/lifecycle-C815ZQfV.mjs +25 -0
  488. package/dist/lifecycle-C815ZQfV.mjs.map +1 -0
  489. package/dist/load-D99axixL.mjs +28 -0
  490. package/dist/load-D99axixL.mjs.map +1 -0
  491. package/dist/loader-CrRPfkHS.mjs +1197 -0
  492. package/dist/loader-CrRPfkHS.mjs.map +1 -0
  493. package/dist/loops-DMKlygqX.mjs +203 -0
  494. package/dist/loops-DMKlygqX.mjs.map +1 -0
  495. package/dist/manifest-builder-BQzCHNgB.mjs +189 -0
  496. package/dist/manifest-builder-BQzCHNgB.mjs.map +1 -0
  497. package/dist/manifest-schema-Ci2gmd0u.mjs +492 -0
  498. package/dist/manifest-schema-Ci2gmd0u.mjs.map +1 -0
  499. package/dist/media/image-endpoint.mjs +1 -1
  500. package/dist/media/index.d.mts +1 -1
  501. package/dist/media/index.mjs +4 -4
  502. package/dist/media/local-runtime.d.mts +14 -14
  503. package/dist/media/local-runtime.mjs +6 -6
  504. package/dist/media-BUQePMxP.mjs +373 -0
  505. package/dist/media-BUQePMxP.mjs.map +1 -0
  506. package/dist/media-DH8ibNlY.mjs +294 -0
  507. package/dist/media-DH8ibNlY.mjs.map +1 -0
  508. package/dist/media-OEIQ3bVc.mjs +408 -0
  509. package/dist/media-OEIQ3bVc.mjs.map +1 -0
  510. package/dist/media-allowlist-pYtaBA95.mjs +44 -0
  511. package/dist/media-allowlist-pYtaBA95.mjs.map +1 -0
  512. package/dist/media-folders-Bf8_s4de.mjs +210 -0
  513. package/dist/media-folders-Bf8_s4de.mjs.map +1 -0
  514. package/dist/media-url-C6klEuNd.mjs +43 -0
  515. package/dist/media-url-C6klEuNd.mjs.map +1 -0
  516. package/dist/media-usage-D7Y64m6v.mjs +1629 -0
  517. package/dist/media-usage-D7Y64m6v.mjs.map +1 -0
  518. package/dist/media-usage-activation-DrqbmgLA.mjs +78 -0
  519. package/dist/media-usage-activation-DrqbmgLA.mjs.map +1 -0
  520. package/dist/media-usage-work-DommYhYA.mjs +152 -0
  521. package/dist/media-usage-work-DommYhYA.mjs.map +1 -0
  522. package/dist/media-usage-work-HU63hNDu.mjs +586 -0
  523. package/dist/media-usage-work-HU63hNDu.mjs.map +1 -0
  524. package/dist/menus-BQfusWEC.mjs +3608 -0
  525. package/dist/menus-BQfusWEC.mjs.map +1 -0
  526. package/dist/menus-BtwjQt5s.mjs +753 -0
  527. package/dist/menus-BtwjQt5s.mjs.map +1 -0
  528. package/dist/menus-p_M1V7J_.mjs +139 -0
  529. package/dist/menus-p_M1V7J_.mjs.map +1 -0
  530. package/dist/migrations/index.d.mts +1 -1
  531. package/dist/migrations/index.mjs +3 -3
  532. package/dist/mime-C94qBG-P.mjs +36 -0
  533. package/dist/mime-C94qBG-P.mjs.map +1 -0
  534. package/dist/mode-DpYW3w6U.mjs +23 -0
  535. package/dist/mode-DpYW3w6U.mjs.map +1 -0
  536. package/dist/node-sqlite-compat-pWFw0lcc.mjs +46 -0
  537. package/dist/node-sqlite-compat-pWFw0lcc.mjs.map +1 -0
  538. package/dist/normalize-DduyxBjf.mjs +191 -0
  539. package/dist/normalize-DduyxBjf.mjs.map +1 -0
  540. package/dist/oauth-authorization-DAXsH1H9.mjs +274 -0
  541. package/dist/oauth-authorization-DAXsH1H9.mjs.map +1 -0
  542. package/dist/oauth-clients-DENiDQri.mjs +266 -0
  543. package/dist/oauth-clients-DENiDQri.mjs.map +1 -0
  544. package/dist/oauth-state-store-y8mEYVq9.mjs +50 -0
  545. package/dist/oauth-state-store-y8mEYVq9.mjs.map +1 -0
  546. package/dist/oauth-user-lookup-CtTYAy-O.mjs +26 -0
  547. package/dist/oauth-user-lookup-CtTYAy-O.mjs.map +1 -0
  548. package/dist/object-cache/memory.d.mts +1 -1
  549. package/dist/options-BYa1FgIM.d.mts +81 -0
  550. package/dist/options-BYa1FgIM.d.mts.map +1 -0
  551. package/dist/page/index.d.mts +2 -2
  552. package/dist/page/index.mjs +5 -5
  553. package/dist/parse-CORGGhHf.mjs +81 -0
  554. package/dist/parse-CORGGhHf.mjs.map +1 -0
  555. package/dist/parse-avNM1xWV.d.mts +168 -0
  556. package/dist/parse-avNM1xWV.d.mts.map +1 -0
  557. package/dist/passkey-config-Dih5YeIS.mjs +46 -0
  558. package/dist/passkey-config-Dih5YeIS.mjs.map +1 -0
  559. package/dist/paths-d51RFm8M.mjs +77 -0
  560. package/dist/paths-d51RFm8M.mjs.map +1 -0
  561. package/dist/patterns-CoqlXUvk.mjs +145 -0
  562. package/dist/patterns-CoqlXUvk.mjs.map +1 -0
  563. package/dist/placeholder-D2aksPMF.d.mts +306 -0
  564. package/dist/placeholder-D2aksPMF.d.mts.map +1 -0
  565. package/dist/plan-DqeZKuaR.mjs +135 -0
  566. package/dist/plan-DqeZKuaR.mjs.map +1 -0
  567. package/dist/plugin-test-runtime.d.mts +14 -14
  568. package/dist/plugin-test-runtime.mjs +110 -107
  569. package/dist/plugin-types.d.mts +2 -2
  570. package/dist/plugin-utils.d.mts +12 -12
  571. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  572. package/dist/plugins/adapt-sandbox-entry.mjs +3 -3
  573. package/dist/plugins/host.d.mts +5 -5
  574. package/dist/plugins/host.mjs +42 -41
  575. package/dist/plugins-Bb7oqjQA.mjs +277 -0
  576. package/dist/plugins-Bb7oqjQA.mjs.map +1 -0
  577. package/dist/policy-BcEqut3n.mjs +45 -0
  578. package/dist/policy-BcEqut3n.mjs.map +1 -0
  579. package/dist/portable-text-DXE8ymtD.mjs +307 -0
  580. package/dist/portable-text-DXE8ymtD.mjs.map +1 -0
  581. package/dist/preview-DEDWbwA_.mjs +107 -0
  582. package/dist/preview-DEDWbwA_.mjs.map +1 -0
  583. package/dist/protocol-BJbTzvwl.d.mts +61 -0
  584. package/dist/protocol-BJbTzvwl.d.mts.map +1 -0
  585. package/dist/public-submission-D9c9S14m.mjs +250 -0
  586. package/dist/public-submission-D9c9S14m.mjs.map +1 -0
  587. package/dist/public-url-CIRe-2T6.mjs +101 -0
  588. package/dist/public-url-CIRe-2T6.mjs.map +1 -0
  589. package/dist/query-BzifXlPS.mjs +1156 -0
  590. package/dist/query-BzifXlPS.mjs.map +1 -0
  591. package/dist/query-OzMJ6vJP.mjs +41 -0
  592. package/dist/query-OzMJ6vJP.mjs.map +1 -0
  593. package/dist/rate-limit-Csp60Vik.mjs +120 -0
  594. package/dist/rate-limit-Csp60Vik.mjs.map +1 -0
  595. package/dist/receipt-B-aU4hpJ.mjs +43 -0
  596. package/dist/receipt-B-aU4hpJ.mjs.map +1 -0
  597. package/dist/redirect-CDSw1sU3.mjs +17 -0
  598. package/dist/redirect-CDSw1sU3.mjs.map +1 -0
  599. package/dist/redirect-D1ArbO85.mjs +411 -0
  600. package/dist/redirect-D1ArbO85.mjs.map +1 -0
  601. package/dist/redirects-BjTwDTsV.mjs +148 -0
  602. package/dist/redirects-BjTwDTsV.mjs.map +1 -0
  603. package/dist/redirects-Ck50kH3n.mjs +446 -0
  604. package/dist/redirects-Ck50kH3n.mjs.map +1 -0
  605. package/dist/registry/testing.mjs +3 -3
  606. package/dist/registry-CFcNCayZ.mjs +6754 -0
  607. package/dist/registry-CFcNCayZ.mjs.map +1 -0
  608. package/dist/relations-Cfaa1fDl.mjs +776 -0
  609. package/dist/relations-Cfaa1fDl.mjs.map +1 -0
  610. package/dist/request-cache-iHRlHx1d.mjs +104 -0
  611. package/dist/request-cache-iHRlHx1d.mjs.map +1 -0
  612. package/dist/request-context.d.mts +1 -1
  613. package/dist/request-meta-D47mqyev.mjs +141 -0
  614. package/dist/request-meta-D47mqyev.mjs.map +1 -0
  615. package/dist/resolve-BPE8sMvx.mjs +99 -0
  616. package/dist/resolve-BPE8sMvx.mjs.map +1 -0
  617. package/dist/resolve-C0s1E_fH.mjs +199 -0
  618. package/dist/resolve-C0s1E_fH.mjs.map +1 -0
  619. package/dist/revision-j1p4-bOj.mjs +302 -0
  620. package/dist/revision-j1p4-bOj.mjs.map +1 -0
  621. package/dist/route-wire-C9PJV9aL.mjs +197 -0
  622. package/dist/route-wire-C9PJV9aL.mjs.map +1 -0
  623. package/dist/routes-lyYw0mMf.mjs +272 -0
  624. package/dist/routes-lyYw0mMf.mjs.map +1 -0
  625. package/dist/runner-B3eyB9Gb.mjs +6121 -0
  626. package/dist/runner-B3eyB9Gb.mjs.map +1 -0
  627. package/dist/runner-DoYH2Jcu.d.mts +68 -0
  628. package/dist/runner-DoYH2Jcu.d.mts.map +1 -0
  629. package/dist/runtime.d.mts +13 -13
  630. package/dist/runtime.mjs +3 -3
  631. package/dist/schema-BAayK46S.mjs +13 -0
  632. package/dist/schema-BAayK46S.mjs.map +1 -0
  633. package/dist/schema-Gqcl-8G4.mjs +815 -0
  634. package/dist/schema-Gqcl-8G4.mjs.map +1 -0
  635. package/dist/scopes-BqPOKoKf.mjs +34 -0
  636. package/dist/scopes-BqPOKoKf.mjs.map +1 -0
  637. package/dist/search-YJKPIEV6.mjs +448 -0
  638. package/dist/search-YJKPIEV6.mjs.map +1 -0
  639. package/dist/sections-BR_e-wK5.mjs +346 -0
  640. package/dist/sections-BR_e-wK5.mjs.map +1 -0
  641. package/dist/seed/index.d.mts +2 -2
  642. package/dist/seed/index.mjs +37 -31
  643. package/dist/seo/index.d.mts +3 -3
  644. package/dist/seo/index.mjs +22 -21
  645. package/dist/seo/index.mjs.map +1 -1
  646. package/dist/seo-Dsj8hy3j.mjs +114 -0
  647. package/dist/seo-Dsj8hy3j.mjs.map +1 -0
  648. package/dist/seo-XvH4LNNp.mjs +133 -0
  649. package/dist/seo-XvH4LNNp.mjs.map +1 -0
  650. package/dist/service-BsVG05gS.mjs +150 -0
  651. package/dist/service-BsVG05gS.mjs.map +1 -0
  652. package/dist/session-user-DgKbYrlj.mjs +51 -0
  653. package/dist/session-user-DgKbYrlj.mjs.map +1 -0
  654. package/dist/settings-CNPUntkh.mjs +51 -0
  655. package/dist/settings-CNPUntkh.mjs.map +1 -0
  656. package/dist/settings-D5EHi0Tk.mjs +439 -0
  657. package/dist/settings-D5EHi0Tk.mjs.map +1 -0
  658. package/dist/settings-DSfE7wOa.mjs +61 -0
  659. package/dist/settings-DSfE7wOa.mjs.map +1 -0
  660. package/dist/setup-complete-B8W8sJ9v.mjs +26 -0
  661. package/dist/setup-complete-B8W8sJ9v.mjs.map +1 -0
  662. package/dist/setup-nonce-DnSBP260.mjs +25 -0
  663. package/dist/setup-nonce-DnSBP260.mjs.map +1 -0
  664. package/dist/site-settings-NGzdrt7O.mjs +50 -0
  665. package/dist/site-settings-NGzdrt7O.mjs.map +1 -0
  666. package/dist/site-url-D6JB7tLW.mjs +16 -0
  667. package/dist/site-url-D6JB7tLW.mjs.map +1 -0
  668. package/dist/snapshot-CdcwwWAf.mjs +414 -0
  669. package/dist/snapshot-CdcwwWAf.mjs.map +1 -0
  670. package/dist/ssrf-Dv0_tRpo.mjs +406 -0
  671. package/dist/ssrf-Dv0_tRpo.mjs.map +1 -0
  672. package/dist/stage-CUjhED3P.mjs +662 -0
  673. package/dist/stage-CUjhED3P.mjs.map +1 -0
  674. package/dist/staged-C36IWXff.mjs +659 -0
  675. package/dist/staged-C36IWXff.mjs.map +1 -0
  676. package/dist/state-CKouMCSY.mjs +153 -0
  677. package/dist/state-CKouMCSY.mjs.map +1 -0
  678. package/dist/status-lzyj4Uu7.mjs +30 -0
  679. package/dist/status-lzyj4Uu7.mjs.map +1 -0
  680. package/dist/storage/local.d.mts +1 -1
  681. package/dist/storage/local.mjs +1 -1
  682. package/dist/storage/s3.d.mts +1 -1
  683. package/dist/storage/s3.mjs +1 -1
  684. package/dist/storage-query-B-cWcTjJ.d.mts +1594 -0
  685. package/dist/storage-query-B-cWcTjJ.d.mts.map +1 -0
  686. package/dist/tar-DsTXX6ch.mjs +449 -0
  687. package/dist/tar-DsTXX6ch.mjs.map +1 -0
  688. package/dist/target-DLQCwp_Z.mjs +27 -0
  689. package/dist/target-DLQCwp_Z.mjs.map +1 -0
  690. package/dist/taxonomies-BlAjr4BL.mjs +697 -0
  691. package/dist/taxonomies-BlAjr4BL.mjs.map +1 -0
  692. package/dist/taxonomies-Byyo7LOZ.mjs +939 -0
  693. package/dist/taxonomies-Byyo7LOZ.mjs.map +1 -0
  694. package/dist/taxonomy-CKDwM61Y.mjs +525 -0
  695. package/dist/taxonomy-CKDwM61Y.mjs.map +1 -0
  696. package/dist/tokens-BojXlk49.mjs +171 -0
  697. package/dist/tokens-BojXlk49.mjs.map +1 -0
  698. package/dist/transaction-DLPQWik1.mjs +29 -0
  699. package/dist/transaction-DLPQWik1.mjs.map +1 -0
  700. package/dist/transfer-XSTh2BCr.mjs +8706 -0
  701. package/dist/transfer-XSTh2BCr.mjs.map +1 -0
  702. package/dist/transfer-download-DkoCDA9d.mjs +33 -0
  703. package/dist/transfer-download-DkoCDA9d.mjs.map +1 -0
  704. package/dist/transfer-iQ26J-RT.mjs +166 -0
  705. package/dist/transfer-iQ26J-RT.mjs.map +1 -0
  706. package/dist/transformations-C7RQabKQ.mjs +196 -0
  707. package/dist/transformations-C7RQabKQ.mjs.map +1 -0
  708. package/dist/transport-D3RulfD6.mjs +136 -0
  709. package/dist/transport-D3RulfD6.mjs.map +1 -0
  710. package/dist/transport-DhlZlf4D.d.mts +42 -0
  711. package/dist/transport-DhlZlf4D.d.mts.map +1 -0
  712. package/dist/trusted-proxy-B6ECOZJc.mjs +51 -0
  713. package/dist/trusted-proxy-B6ECOZJc.mjs.map +1 -0
  714. package/dist/turnstile-lqUiY7lP.mjs +53 -0
  715. package/dist/turnstile-lqUiY7lP.mjs.map +1 -0
  716. package/dist/types-4Dn9bZhu.mjs +77 -0
  717. package/dist/types-4Dn9bZhu.mjs.map +1 -0
  718. package/dist/types-5LSo7PPx.d.mts +85 -0
  719. package/dist/types-5LSo7PPx.d.mts.map +1 -0
  720. package/dist/types-BQ3hwYJT.d.mts +896 -0
  721. package/dist/types-BQ3hwYJT.d.mts.map +1 -0
  722. package/dist/types-BYEk7qo3.d.mts +198 -0
  723. package/dist/types-BYEk7qo3.d.mts.map +1 -0
  724. package/dist/types-CJKsWVFR.mjs +199 -0
  725. package/dist/types-CJKsWVFR.mjs.map +1 -0
  726. package/dist/types-Ca_w8mmY.d.mts +363 -0
  727. package/dist/types-Ca_w8mmY.d.mts.map +1 -0
  728. package/dist/types-CkE41ZAG.mjs +18 -0
  729. package/dist/types-CkE41ZAG.mjs.map +1 -0
  730. package/dist/types-D0aJW2uR.d.mts +1641 -0
  731. package/dist/types-D0aJW2uR.d.mts.map +1 -0
  732. package/dist/types-DbpN4Qto.d.mts +372 -0
  733. package/dist/types-DbpN4Qto.d.mts.map +1 -0
  734. package/dist/types-ILDI1sdY.mjs +16 -0
  735. package/dist/types-ILDI1sdY.mjs.map +1 -0
  736. package/dist/types-OC5c-edM.mjs +22 -0
  737. package/dist/types-OC5c-edM.mjs.map +1 -0
  738. package/dist/types-aOOxRSx6.mjs +103 -0
  739. package/dist/types-aOOxRSx6.mjs.map +1 -0
  740. package/dist/types-m1WbUffD.d.mts +198 -0
  741. package/dist/types-m1WbUffD.d.mts.map +1 -0
  742. package/dist/types-uxLoPBio.d.mts +124 -0
  743. package/dist/types-uxLoPBio.d.mts.map +1 -0
  744. package/dist/types-we5uR-tV.d.mts +287 -0
  745. package/dist/types-we5uR-tV.d.mts.map +1 -0
  746. package/dist/upload-attempts-DduMy6B0.mjs +32 -0
  747. package/dist/upload-attempts-DduMy6B0.mjs.map +1 -0
  748. package/dist/url-pattern-B3EwxAAk.mjs +33 -0
  749. package/dist/url-pattern-B3EwxAAk.mjs.map +1 -0
  750. package/dist/user-ElwQjTQT.mjs +171 -0
  751. package/dist/user-ElwQjTQT.mjs.map +1 -0
  752. package/dist/utils-BlAXmfOG.mjs +439 -0
  753. package/dist/utils-BlAXmfOG.mjs.map +1 -0
  754. package/dist/validate-CH0X5b2c.d.mts +468 -0
  755. package/dist/validate-CH0X5b2c.d.mts.map +1 -0
  756. package/dist/validate-CfgRpcjA.mjs +492 -0
  757. package/dist/validate-CfgRpcjA.mjs.map +1 -0
  758. package/dist/validation-DvYJtv4k.mjs +218 -0
  759. package/dist/validation-DvYJtv4k.mjs.map +1 -0
  760. package/dist/version-DgYjhTud.mjs +9 -0
  761. package/dist/version-DgYjhTud.mjs.map +1 -0
  762. package/dist/version-Dq71scUb.mjs +7 -0
  763. package/dist/version-Dq71scUb.mjs.map +1 -0
  764. package/dist/widgets-ChFIj0be.mjs +126 -0
  765. package/dist/widgets-ChFIj0be.mjs.map +1 -0
  766. package/dist/wxr-taxonomies-CBZMp2YX.mjs +372 -0
  767. package/dist/wxr-taxonomies-CBZMp2YX.mjs.map +1 -0
  768. package/dist/wxr-taxonomies-DlKDpWN1.d.mts +34 -0
  769. package/dist/wxr-taxonomies-DlKDpWN1.d.mts.map +1 -0
  770. package/dist/zod-generator-DmTKI-Ig.mjs +426 -0
  771. package/dist/zod-generator-DmTKI-Ig.mjs.map +1 -0
  772. package/package.json +7 -6
  773. package/src/api/handlers/content.ts +593 -16
  774. package/src/api/handlers/device-flow.ts +74 -21
  775. package/src/api/handlers/index.ts +1 -0
  776. package/src/api/handlers/manifest.ts +79 -5
  777. package/src/api/handlers/media-upload.ts +17 -71
  778. package/src/api/handlers/media.ts +97 -3
  779. package/src/api/handlers/relations.ts +638 -157
  780. package/src/api/handlers/revision.ts +30 -0
  781. package/src/api/handlers/schema.ts +403 -1
  782. package/src/api/handlers/snapshot.ts +257 -3
  783. package/src/api/handlers/staged-references.ts +142 -0
  784. package/src/api/handlers/validate-references.ts +146 -0
  785. package/src/api/schemas/content.ts +13 -0
  786. package/src/api/schemas/relations.ts +54 -44
  787. package/src/api/schemas/schema.ts +14 -0
  788. package/src/astro/integration/routes.ts +15 -19
  789. package/src/astro/integration/vite-config.ts +10 -4
  790. package/src/astro/middleware.ts +1 -0
  791. package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +11 -54
  792. package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
  793. package/src/astro/routes/api/oauth/device/authorize.ts +33 -4
  794. package/src/astro/routes/api/relations/index.ts +4 -4
  795. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +6 -2
  796. package/src/astro/routes/api/setup/index.ts +66 -23
  797. package/src/astro/routes/api/snapshot.ts +2 -1
  798. package/src/astro/types.ts +10 -0
  799. package/src/cleanup.ts +10 -0
  800. package/src/cli/commands/export-seed.ts +510 -89
  801. package/src/components/Columns.astro +3 -1
  802. package/src/components/Cover.astro +3 -1
  803. package/src/components/WidgetArea.astro +3 -2
  804. package/src/database/migrations/086_relations_structural.ts +197 -0
  805. package/src/database/migrations/087_reference_field_relations.ts +407 -0
  806. package/src/database/migrations/runner.ts +4 -0
  807. package/src/database/reference-backfill.ts +141 -0
  808. package/src/database/repositories/content.ts +43 -8
  809. package/src/database/repositories/media.ts +40 -1
  810. package/src/database/repositories/redirect.ts +17 -34
  811. package/src/database/repositories/relation.ts +620 -208
  812. package/src/database/repositories/revision.ts +16 -0
  813. package/src/database/repositories/types.ts +38 -0
  814. package/src/database/transaction.ts +12 -1
  815. package/src/database/types.ts +14 -5
  816. package/src/emdash-runtime.ts +114 -11
  817. package/src/index.ts +11 -0
  818. package/src/loader.ts +169 -22
  819. package/src/mcp/server.ts +13 -48
  820. package/src/query.ts +455 -25
  821. package/src/references/field-map.ts +115 -0
  822. package/src/references/resolve.ts +160 -0
  823. package/src/references/staged.ts +117 -0
  824. package/src/references/types.ts +16 -0
  825. package/src/registry/artifact-fetch.ts +45 -271
  826. package/src/schema/registry.ts +99 -24
  827. package/src/schema/types.ts +58 -0
  828. package/src/schema/zod-generator.ts +67 -1
  829. package/src/seed/apply.ts +841 -103
  830. package/src/seed/types.ts +36 -2
  831. package/src/seed/validate.ts +78 -2
  832. package/src/transfer/analyze/unique-keys.ts +3 -12
  833. package/src/transfer/analyze/validate.ts +65 -39
  834. package/src/transfer/analyze/values.ts +12 -1
  835. package/src/transfer/export/readers.ts +12 -8
  836. package/src/transfer/format/columns.ts +26 -6
  837. package/src/transfer/format/kinds.ts +21 -5
  838. package/src/transfer/import/context.ts +8 -1
  839. package/src/transfer/ops/package-index.ts +1 -1
  840. package/dist/action-token-DYwe4Pk0.mjs +0 -26
  841. package/dist/action-token-DYwe4Pk0.mjs.map +0 -1
  842. package/dist/activation-LOkDM5WT.mjs +0 -382
  843. package/dist/activation-LOkDM5WT.mjs.map +0 -1
  844. package/dist/adapters-B64LbYcB.d.mts +0 -171
  845. package/dist/adapters-B64LbYcB.d.mts.map +0 -1
  846. package/dist/allowed-origins-CHB8oZNM.mjs +0 -116
  847. package/dist/allowed-origins-CHB8oZNM.mjs.map +0 -1
  848. package/dist/api-cFFZpyS0.mjs +0 -4718
  849. package/dist/api-cFFZpyS0.mjs.map +0 -1
  850. package/dist/api-tokens-s4i4aUp_.mjs +0 -166
  851. package/dist/api-tokens-s4i4aUp_.mjs.map +0 -1
  852. package/dist/apply-CoT603H3.mjs +0 -1163
  853. package/dist/apply-CoT603H3.mjs.map +0 -1
  854. package/dist/approvals-CqMfNxak.mjs +0 -460
  855. package/dist/approvals-CqMfNxak.mjs.map +0 -1
  856. package/dist/artifact-fetch-DZMOGZ3-.mjs +0 -818
  857. package/dist/artifact-fetch-DZMOGZ3-.mjs.map +0 -1
  858. package/dist/astro/routes/api/relations/_id_/translations.d.mts +0 -8
  859. package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +0 -1
  860. package/dist/astro/routes/api/relations/_id_/translations.mjs +0 -47
  861. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +0 -1
  862. package/dist/audit-RfCugiSB.mjs +0 -127
  863. package/dist/audit-RfCugiSB.mjs.map +0 -1
  864. package/dist/authoritative-records-CoJvBXAD.mjs +0 -5172
  865. package/dist/authoritative-records-CoJvBXAD.mjs.map +0 -1
  866. package/dist/authorize-seCifOMJ.mjs +0 -49
  867. package/dist/authorize-seCifOMJ.mjs.map +0 -1
  868. package/dist/backup-CBu0LrXf.mjs +0 -246
  869. package/dist/backup-CBu0LrXf.mjs.map +0 -1
  870. package/dist/block-type-registry-DUI_3KxT.mjs +0 -6709
  871. package/dist/block-type-registry-DUI_3KxT.mjs.map +0 -1
  872. package/dist/block-types-BmZmLmAD.mjs +0 -132
  873. package/dist/block-types-BmZmLmAD.mjs.map +0 -1
  874. package/dist/block-values-C_VIPr5t.mjs +0 -175
  875. package/dist/block-values-C_VIPr5t.mjs.map +0 -1
  876. package/dist/byline-DYmkXqvo.mjs +0 -909
  877. package/dist/byline-DYmkXqvo.mjs.map +0 -1
  878. package/dist/byline-fields-D28AT-Fh.mjs +0 -123
  879. package/dist/byline-fields-D28AT-Fh.mjs.map +0 -1
  880. package/dist/byline-registry-gnKscbQX.mjs +0 -406
  881. package/dist/byline-registry-gnKscbQX.mjs.map +0 -1
  882. package/dist/bylines-BPwJqoYH.mjs +0 -232
  883. package/dist/bylines-BPwJqoYH.mjs.map +0 -1
  884. package/dist/bylines-ukLaYpVZ.mjs +0 -214
  885. package/dist/bylines-ukLaYpVZ.mjs.map +0 -1
  886. package/dist/cache-m7UEkRFV.mjs +0 -108
  887. package/dist/cache-m7UEkRFV.mjs.map +0 -1
  888. package/dist/canonical-YhEQezjg.mjs +0 -174
  889. package/dist/canonical-YhEQezjg.mjs.map +0 -1
  890. package/dist/capture-triggers-kJyl_yyM.mjs +0 -362
  891. package/dist/capture-triggers-kJyl_yyM.mjs.map +0 -1
  892. package/dist/challenge-store-ppU6Uv13.mjs +0 -51
  893. package/dist/challenge-store-ppU6Uv13.mjs.map +0 -1
  894. package/dist/checksum-B2IINIlN.mjs +0 -162
  895. package/dist/checksum-B2IINIlN.mjs.map +0 -1
  896. package/dist/chrome-tags-DApCQSIk.mjs +0 -24
  897. package/dist/chrome-tags-DApCQSIk.mjs.map +0 -1
  898. package/dist/chunks-Dms7Uxbt.mjs +0 -25
  899. package/dist/chunks-Dms7Uxbt.mjs.map +0 -1
  900. package/dist/collection-deletion-BIm28mo3.mjs +0 -436
  901. package/dist/collection-deletion-BIm28mo3.mjs.map +0 -1
  902. package/dist/collection-deletion-processor-Br6rxs3u.mjs +0 -217
  903. package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +0 -1
  904. package/dist/collection-slugs-cache-CjGk__zp.mjs +0 -85
  905. package/dist/collection-slugs-cache-CjGk__zp.mjs.map +0 -1
  906. package/dist/comment-CrBl22OF.mjs +0 -313
  907. package/dist/comment-CrBl22OF.mjs.map +0 -1
  908. package/dist/comment-reaction-JEQ2Fpd8.mjs +0 -85
  909. package/dist/comment-reaction-JEQ2Fpd8.mjs.map +0 -1
  910. package/dist/comments-2ah9du9y.mjs +0 -195
  911. package/dist/comments-2ah9du9y.mjs.map +0 -1
  912. package/dist/comments-fHZ8ON9O.mjs +0 -99
  913. package/dist/comments-fHZ8ON9O.mjs.map +0 -1
  914. package/dist/components-CXbq7CSM.mjs +0 -108
  915. package/dist/components-CXbq7CSM.mjs.map +0 -1
  916. package/dist/config-5ii2haYu.d.mts +0 -6528
  917. package/dist/config-5ii2haYu.d.mts.map +0 -1
  918. package/dist/config-IhybvkIQ.mjs +0 -242
  919. package/dist/config-IhybvkIQ.mjs.map +0 -1
  920. package/dist/config-Py43JK9r.d.mts +0 -39
  921. package/dist/config-Py43JK9r.d.mts.map +0 -1
  922. package/dist/content-DFaIEDj9.mjs +0 -2281
  923. package/dist/content-DFaIEDj9.mjs.map +0 -1
  924. package/dist/content-list-query-Dra4Dalc.d.mts +0 -26
  925. package/dist/content-list-query-Dra4Dalc.d.mts.map +0 -1
  926. package/dist/content-policy-DFNw91-d.mjs +0 -46
  927. package/dist/content-policy-DFNw91-d.mjs.map +0 -1
  928. package/dist/content-repair-Q8IUrpLL.mjs +0 -442
  929. package/dist/content-repair-Q8IUrpLL.mjs.map +0 -1
  930. package/dist/context-BeGccdUX.mjs +0 -1921
  931. package/dist/context-BeGccdUX.mjs.map +0 -1
  932. package/dist/cron-7DCJwPXq.mjs +0 -284
  933. package/dist/cron-7DCJwPXq.mjs.map +0 -1
  934. package/dist/dashboard-DjrB-xxZ.mjs +0 -151
  935. package/dist/dashboard-DjrB-xxZ.mjs.map +0 -1
  936. package/dist/default-DQ6vsviu.mjs +0 -81
  937. package/dist/default-DQ6vsviu.mjs.map +0 -1
  938. package/dist/deferred-tasks-BPxXUB4x.d.mts +0 -9
  939. package/dist/deferred-tasks-BPxXUB4x.d.mts.map +0 -1
  940. package/dist/dev-typegen-CZaPLl3V.mjs +0 -29
  941. package/dist/dev-typegen-CZaPLl3V.mjs.map +0 -1
  942. package/dist/device-flow-CRd6DXmW.mjs +0 -466
  943. package/dist/device-flow-CRd6DXmW.mjs.map +0 -1
  944. package/dist/digest-BarSh-pN.mjs +0 -194
  945. package/dist/digest-BarSh-pN.mjs.map +0 -1
  946. package/dist/direct-executor-BmuFJJZV.mjs +0 -104
  947. package/dist/direct-executor-BmuFJJZV.mjs.map +0 -1
  948. package/dist/dist-BNwANFJR.mjs +0 -810
  949. package/dist/dist-BNwANFJR.mjs.map +0 -1
  950. package/dist/email-console-bJn3ctqA.mjs +0 -50
  951. package/dist/email-console-bJn3ctqA.mjs.map +0 -1
  952. package/dist/email-locale-CN6WAMx0.mjs +0 -25
  953. package/dist/email-locale-CN6WAMx0.mjs.map +0 -1
  954. package/dist/emdash-runtime-DAjghyEG.mjs +0 -4186
  955. package/dist/emdash-runtime-DAjghyEG.mjs.map +0 -1
  956. package/dist/enrich-Dl3kZ-lP.mjs +0 -194
  957. package/dist/enrich-Dl3kZ-lP.mjs.map +0 -1
  958. package/dist/entry-lock-BJYdBfXb.mjs +0 -1097
  959. package/dist/entry-lock-BJYdBfXb.mjs.map +0 -1
  960. package/dist/entry-lock-DHQOxN7R.mjs +0 -163
  961. package/dist/entry-lock-DHQOxN7R.mjs.map +0 -1
  962. package/dist/entry-lock-DVhCt49A.d.mts +0 -4368
  963. package/dist/entry-lock-DVhCt49A.d.mts.map +0 -1
  964. package/dist/entry-locks-D0foLdjQ.mjs +0 -167
  965. package/dist/entry-locks-D0foLdjQ.mjs.map +0 -1
  966. package/dist/error-CfvOHP0M.mjs +0 -90
  967. package/dist/error-CfvOHP0M.mjs.map +0 -1
  968. package/dist/errors-BF0_LFhW.mjs +0 -460
  969. package/dist/errors-BF0_LFhW.mjs.map +0 -1
  970. package/dist/errors-DgE1zJGG.mjs +0 -120
  971. package/dist/errors-DgE1zJGG.mjs.map +0 -1
  972. package/dist/escape-CuaZhZvL.mjs +0 -9
  973. package/dist/escape-CuaZhZvL.mjs.map +0 -1
  974. package/dist/fence-CMDXJYc_.mjs +0 -162
  975. package/dist/fence-CMDXJYc_.mjs.map +0 -1
  976. package/dist/field-defs-cache-HIgBbqZZ.mjs +0 -77
  977. package/dist/field-defs-cache-HIgBbqZZ.mjs.map +0 -1
  978. package/dist/focal-point-Gr34o-4o.mjs +0 -23
  979. package/dist/focal-point-Gr34o-4o.mjs.map +0 -1
  980. package/dist/fts-manager-S-K0laoS.mjs +0 -443
  981. package/dist/fts-manager-S-K0laoS.mjs.map +0 -1
  982. package/dist/gc-DjKY0Ay1.mjs +0 -75
  983. package/dist/gc-DjKY0Ay1.mjs.map +0 -1
  984. package/dist/hash-SDAW6zC-.mjs +0 -37
  985. package/dist/hash-SDAW6zC-.mjs.map +0 -1
  986. package/dist/hook-result-B5bXDgS2.d.mts +0 -31
  987. package/dist/hook-result-B5bXDgS2.d.mts.map +0 -1
  988. package/dist/hreflang-D5uNnsGJ.d.mts +0 -50
  989. package/dist/hreflang-D5uNnsGJ.d.mts.map +0 -1
  990. package/dist/hreflang-DMFBL2eb.mjs +0 -105
  991. package/dist/hreflang-DMFBL2eb.mjs.map +0 -1
  992. package/dist/http-route-dispatch-BitqzwMy.mjs +0 -339
  993. package/dist/http-route-dispatch-BitqzwMy.mjs.map +0 -1
  994. package/dist/identity-IyNWwXr6.mjs +0 -35
  995. package/dist/identity-IyNWwXr6.mjs.map +0 -1
  996. package/dist/import-C3JZplWq.mjs +0 -2020
  997. package/dist/import-C3JZplWq.mjs.map +0 -1
  998. package/dist/index-D-hdtLe8.d.mts +0 -623
  999. package/dist/index-D-hdtLe8.d.mts.map +0 -1
  1000. package/dist/install-finalization-DfM1fj5x.mjs +0 -58
  1001. package/dist/install-finalization-DfM1fj5x.mjs.map +0 -1
  1002. package/dist/keys-yxLm5l35.mjs +0 -61
  1003. package/dist/keys-yxLm5l35.mjs.map +0 -1
  1004. package/dist/kinds-CRu_T5T5.mjs +0 -961
  1005. package/dist/kinds-CRu_T5T5.mjs.map +0 -1
  1006. package/dist/lifecycle-BzeGPeQ-.mjs +0 -25
  1007. package/dist/lifecycle-BzeGPeQ-.mjs.map +0 -1
  1008. package/dist/load-XgJiE6_3.mjs +0 -28
  1009. package/dist/load-XgJiE6_3.mjs.map +0 -1
  1010. package/dist/loader-BzqeR1ZN.mjs +0 -1086
  1011. package/dist/loader-BzqeR1ZN.mjs.map +0 -1
  1012. package/dist/loops-BQSzv5Zn.mjs +0 -203
  1013. package/dist/loops-BQSzv5Zn.mjs.map +0 -1
  1014. package/dist/manifest-builder-B8zR-73J.mjs +0 -189
  1015. package/dist/manifest-builder-B8zR-73J.mjs.map +0 -1
  1016. package/dist/manifest-schema-CY3zng_M.mjs +0 -492
  1017. package/dist/manifest-schema-CY3zng_M.mjs.map +0 -1
  1018. package/dist/media-Pu1L6xir.mjs +0 -408
  1019. package/dist/media-Pu1L6xir.mjs.map +0 -1
  1020. package/dist/media-Qp5S3eH3.mjs +0 -355
  1021. package/dist/media-Qp5S3eH3.mjs.map +0 -1
  1022. package/dist/media-allowlist-BSoa9Vvm.mjs +0 -44
  1023. package/dist/media-allowlist-BSoa9Vvm.mjs.map +0 -1
  1024. package/dist/media-folders-BE0oo2eX.mjs +0 -210
  1025. package/dist/media-folders-BE0oo2eX.mjs.map +0 -1
  1026. package/dist/media-h7tOiDLj.mjs +0 -221
  1027. package/dist/media-h7tOiDLj.mjs.map +0 -1
  1028. package/dist/media-url-jArBpzIG.mjs +0 -43
  1029. package/dist/media-url-jArBpzIG.mjs.map +0 -1
  1030. package/dist/media-usage-My-Vi-ex.mjs +0 -1629
  1031. package/dist/media-usage-My-Vi-ex.mjs.map +0 -1
  1032. package/dist/media-usage-activation-HKp7zk7W.mjs +0 -78
  1033. package/dist/media-usage-activation-HKp7zk7W.mjs.map +0 -1
  1034. package/dist/media-usage-work-C2OZLCAd.mjs +0 -586
  1035. package/dist/media-usage-work-C2OZLCAd.mjs.map +0 -1
  1036. package/dist/media-usage-work-DwUNbgvS.mjs +0 -152
  1037. package/dist/media-usage-work-DwUNbgvS.mjs.map +0 -1
  1038. package/dist/menus-BM7BPLOb.mjs +0 -139
  1039. package/dist/menus-BM7BPLOb.mjs.map +0 -1
  1040. package/dist/menus-ITeAbcIF.mjs +0 -753
  1041. package/dist/menus-ITeAbcIF.mjs.map +0 -1
  1042. package/dist/menus-TsSGmSR4.mjs +0 -3608
  1043. package/dist/menus-TsSGmSR4.mjs.map +0 -1
  1044. package/dist/mime-ChLqYwDk.mjs +0 -36
  1045. package/dist/mime-ChLqYwDk.mjs.map +0 -1
  1046. package/dist/mode-CCuKXUci.mjs +0 -23
  1047. package/dist/mode-CCuKXUci.mjs.map +0 -1
  1048. package/dist/node-sqlite-compat-CONMsl-x.mjs +0 -46
  1049. package/dist/node-sqlite-compat-CONMsl-x.mjs.map +0 -1
  1050. package/dist/normalize-CO2P8-iE.mjs +0 -191
  1051. package/dist/normalize-CO2P8-iE.mjs.map +0 -1
  1052. package/dist/oauth-authorization-DlMIL5_h.mjs +0 -274
  1053. package/dist/oauth-authorization-DlMIL5_h.mjs.map +0 -1
  1054. package/dist/oauth-clients-Djq9r_KP.mjs +0 -266
  1055. package/dist/oauth-clients-Djq9r_KP.mjs.map +0 -1
  1056. package/dist/oauth-state-store-BbjnZXNC.mjs +0 -50
  1057. package/dist/oauth-state-store-BbjnZXNC.mjs.map +0 -1
  1058. package/dist/oauth-user-lookup-vue9a64A.mjs +0 -26
  1059. package/dist/oauth-user-lookup-vue9a64A.mjs.map +0 -1
  1060. package/dist/options-SQCHQCPH.d.mts +0 -81
  1061. package/dist/options-SQCHQCPH.d.mts.map +0 -1
  1062. package/dist/parse-CVgO-Qai.d.mts +0 -168
  1063. package/dist/parse-CVgO-Qai.d.mts.map +0 -1
  1064. package/dist/parse-DY6OD1j_.mjs +0 -81
  1065. package/dist/parse-DY6OD1j_.mjs.map +0 -1
  1066. package/dist/passkey-config-X_H8128a.mjs +0 -46
  1067. package/dist/passkey-config-X_H8128a.mjs.map +0 -1
  1068. package/dist/paths-JxokKIbr.mjs +0 -77
  1069. package/dist/paths-JxokKIbr.mjs.map +0 -1
  1070. package/dist/patterns-BhAvqO0S.mjs +0 -145
  1071. package/dist/patterns-BhAvqO0S.mjs.map +0 -1
  1072. package/dist/placeholder-MSEd8gty.d.mts +0 -306
  1073. package/dist/placeholder-MSEd8gty.d.mts.map +0 -1
  1074. package/dist/plan-xjcWrAah.mjs +0 -135
  1075. package/dist/plan-xjcWrAah.mjs.map +0 -1
  1076. package/dist/plugins-DUXUt8B9.mjs +0 -277
  1077. package/dist/plugins-DUXUt8B9.mjs.map +0 -1
  1078. package/dist/policy-CUvwAARc.mjs +0 -45
  1079. package/dist/policy-CUvwAARc.mjs.map +0 -1
  1080. package/dist/portable-text-5O_ZGUjB.mjs +0 -307
  1081. package/dist/portable-text-5O_ZGUjB.mjs.map +0 -1
  1082. package/dist/preview-CIUcPYr6.mjs +0 -107
  1083. package/dist/preview-CIUcPYr6.mjs.map +0 -1
  1084. package/dist/protocol-B97DZaFr.d.mts +0 -61
  1085. package/dist/protocol-B97DZaFr.d.mts.map +0 -1
  1086. package/dist/public-submission-BFBUrqst.mjs +0 -250
  1087. package/dist/public-submission-BFBUrqst.mjs.map +0 -1
  1088. package/dist/public-url-Bn7U0D7-.mjs +0 -101
  1089. package/dist/public-url-Bn7U0D7-.mjs.map +0 -1
  1090. package/dist/query-B48peoRT.mjs +0 -890
  1091. package/dist/query-B48peoRT.mjs.map +0 -1
  1092. package/dist/query-C4IH0uhR.mjs +0 -41
  1093. package/dist/query-C4IH0uhR.mjs.map +0 -1
  1094. package/dist/rate-limit-BZ6nybgc.mjs +0 -120
  1095. package/dist/rate-limit-BZ6nybgc.mjs.map +0 -1
  1096. package/dist/receipt-B4wJj5Jq.mjs +0 -43
  1097. package/dist/receipt-B4wJj5Jq.mjs.map +0 -1
  1098. package/dist/redirect-Cd1E7VUt.mjs +0 -17
  1099. package/dist/redirect-Cd1E7VUt.mjs.map +0 -1
  1100. package/dist/redirect-iJf5fltD.mjs +0 -415
  1101. package/dist/redirect-iJf5fltD.mjs.map +0 -1
  1102. package/dist/redirects-CYu1u1aK.mjs +0 -446
  1103. package/dist/redirects-CYu1u1aK.mjs.map +0 -1
  1104. package/dist/redirects-Cv9apQKj.mjs +0 -148
  1105. package/dist/redirects-Cv9apQKj.mjs.map +0 -1
  1106. package/dist/relation-M4NUCb0b.mjs +0 -334
  1107. package/dist/relation-M4NUCb0b.mjs.map +0 -1
  1108. package/dist/relations-CCif47Oq.mjs +0 -403
  1109. package/dist/relations-CCif47Oq.mjs.map +0 -1
  1110. package/dist/relations-CK9CYUyr.mjs +0 -310
  1111. package/dist/relations-CK9CYUyr.mjs.map +0 -1
  1112. package/dist/request-cache-DzLYKm_x.mjs +0 -104
  1113. package/dist/request-cache-DzLYKm_x.mjs.map +0 -1
  1114. package/dist/request-meta-sZXt3sRo.mjs +0 -141
  1115. package/dist/request-meta-sZXt3sRo.mjs.map +0 -1
  1116. package/dist/resolve-2WbQsCvT.mjs +0 -199
  1117. package/dist/resolve-2WbQsCvT.mjs.map +0 -1
  1118. package/dist/route-wire--1hLuACz.mjs +0 -197
  1119. package/dist/route-wire--1hLuACz.mjs.map +0 -1
  1120. package/dist/routes-CUsM40Cc.mjs +0 -272
  1121. package/dist/routes-CUsM40Cc.mjs.map +0 -1
  1122. package/dist/runner-1y4J9fJB.mjs +0 -5742
  1123. package/dist/runner-1y4J9fJB.mjs.map +0 -1
  1124. package/dist/runner-D5_LzKXI.d.mts +0 -68
  1125. package/dist/runner-D5_LzKXI.d.mts.map +0 -1
  1126. package/dist/schema-BABiRdsH.mjs +0 -13
  1127. package/dist/schema-BABiRdsH.mjs.map +0 -1
  1128. package/dist/schema-Du3MzCG0.mjs +0 -446
  1129. package/dist/schema-Du3MzCG0.mjs.map +0 -1
  1130. package/dist/scopes-Dbk-ElhT.mjs +0 -34
  1131. package/dist/scopes-Dbk-ElhT.mjs.map +0 -1
  1132. package/dist/search-Bt1PL1jf.mjs +0 -448
  1133. package/dist/search-Bt1PL1jf.mjs.map +0 -1
  1134. package/dist/sections-Ddptx_o9.mjs +0 -346
  1135. package/dist/sections-Ddptx_o9.mjs.map +0 -1
  1136. package/dist/seo-CZT2oLtT.mjs +0 -114
  1137. package/dist/seo-CZT2oLtT.mjs.map +0 -1
  1138. package/dist/seo-D5w3-Azy.mjs +0 -133
  1139. package/dist/seo-D5w3-Azy.mjs.map +0 -1
  1140. package/dist/service-DuykXPyW.mjs +0 -150
  1141. package/dist/service-DuykXPyW.mjs.map +0 -1
  1142. package/dist/session-user-BhaVp8w0.mjs +0 -51
  1143. package/dist/session-user-BhaVp8w0.mjs.map +0 -1
  1144. package/dist/settings-2xNYr90o.mjs +0 -51
  1145. package/dist/settings-2xNYr90o.mjs.map +0 -1
  1146. package/dist/settings-CgjRWGW9.mjs +0 -439
  1147. package/dist/settings-CgjRWGW9.mjs.map +0 -1
  1148. package/dist/settings-DYidIB26.mjs +0 -61
  1149. package/dist/settings-DYidIB26.mjs.map +0 -1
  1150. package/dist/setup-complete-bOogcHWG.mjs +0 -26
  1151. package/dist/setup-complete-bOogcHWG.mjs.map +0 -1
  1152. package/dist/setup-nonce-0EGuKM4s.mjs +0 -25
  1153. package/dist/setup-nonce-0EGuKM4s.mjs.map +0 -1
  1154. package/dist/site-settings-DOgRUoFX.mjs +0 -50
  1155. package/dist/site-settings-DOgRUoFX.mjs.map +0 -1
  1156. package/dist/site-url-BU_bbxwj.mjs +0 -16
  1157. package/dist/site-url-BU_bbxwj.mjs.map +0 -1
  1158. package/dist/snapshot-CugwUqKQ.mjs +0 -237
  1159. package/dist/snapshot-CugwUqKQ.mjs.map +0 -1
  1160. package/dist/ssrf-CJUnJymJ.mjs +0 -406
  1161. package/dist/ssrf-CJUnJymJ.mjs.map +0 -1
  1162. package/dist/stage-DgrBz_du.mjs +0 -662
  1163. package/dist/stage-DgrBz_du.mjs.map +0 -1
  1164. package/dist/state-DDiPySSG.mjs +0 -153
  1165. package/dist/state-DDiPySSG.mjs.map +0 -1
  1166. package/dist/status-DZKIG4a9.mjs +0 -30
  1167. package/dist/status-DZKIG4a9.mjs.map +0 -1
  1168. package/dist/storage-query-Bdv7A62k.d.mts +0 -1576
  1169. package/dist/storage-query-Bdv7A62k.d.mts.map +0 -1
  1170. package/dist/tar-_1AgTYFu.mjs +0 -449
  1171. package/dist/tar-_1AgTYFu.mjs.map +0 -1
  1172. package/dist/target-_7pn2Gbg.mjs +0 -27
  1173. package/dist/target-_7pn2Gbg.mjs.map +0 -1
  1174. package/dist/taxonomies-C1IwNe8Q.mjs +0 -697
  1175. package/dist/taxonomies-C1IwNe8Q.mjs.map +0 -1
  1176. package/dist/taxonomies-C_XMoRcX.mjs +0 -939
  1177. package/dist/taxonomies-C_XMoRcX.mjs.map +0 -1
  1178. package/dist/taxonomy-C3Fu1YeH.mjs +0 -525
  1179. package/dist/taxonomy-C3Fu1YeH.mjs.map +0 -1
  1180. package/dist/tokens-u78jETkX.mjs +0 -171
  1181. package/dist/tokens-u78jETkX.mjs.map +0 -1
  1182. package/dist/transaction-BcJO4Tmc.mjs +0 -29
  1183. package/dist/transaction-BcJO4Tmc.mjs.map +0 -1
  1184. package/dist/transfer-BhUCrgDc.mjs +0 -8675
  1185. package/dist/transfer-BhUCrgDc.mjs.map +0 -1
  1186. package/dist/transfer-DIGvR9Af.mjs +0 -166
  1187. package/dist/transfer-DIGvR9Af.mjs.map +0 -1
  1188. package/dist/transfer-download-Pml7RMio.mjs +0 -33
  1189. package/dist/transfer-download-Pml7RMio.mjs.map +0 -1
  1190. package/dist/transformations-9gfpwY65.mjs +0 -196
  1191. package/dist/transformations-9gfpwY65.mjs.map +0 -1
  1192. package/dist/transport-BIfH7_hx.d.mts +0 -42
  1193. package/dist/transport-BIfH7_hx.d.mts.map +0 -1
  1194. package/dist/transport-DKWIq53q.mjs +0 -136
  1195. package/dist/transport-DKWIq53q.mjs.map +0 -1
  1196. package/dist/trusted-proxy-tKiVtyTD.mjs +0 -51
  1197. package/dist/trusted-proxy-tKiVtyTD.mjs.map +0 -1
  1198. package/dist/turnstile-DpsoyOfg.mjs +0 -53
  1199. package/dist/turnstile-DpsoyOfg.mjs.map +0 -1
  1200. package/dist/types-B4sUC2p1.d.mts +0 -198
  1201. package/dist/types-B4sUC2p1.d.mts.map +0 -1
  1202. package/dist/types-B7Lmsh1E.d.mts +0 -887
  1203. package/dist/types-B7Lmsh1E.d.mts.map +0 -1
  1204. package/dist/types-BZakh7Ym.mjs +0 -22
  1205. package/dist/types-BZakh7Ym.mjs.map +0 -1
  1206. package/dist/types-B_CppEmv.d.mts +0 -264
  1207. package/dist/types-B_CppEmv.d.mts.map +0 -1
  1208. package/dist/types-BcrBrE6-.mjs +0 -159
  1209. package/dist/types-BcrBrE6-.mjs.map +0 -1
  1210. package/dist/types-BkUg2yHx.mjs +0 -92
  1211. package/dist/types-BkUg2yHx.mjs.map +0 -1
  1212. package/dist/types-CAZgq9fO.d.mts +0 -124
  1213. package/dist/types-CAZgq9fO.d.mts.map +0 -1
  1214. package/dist/types-Cd-O03VG.d.mts +0 -363
  1215. package/dist/types-Cd-O03VG.d.mts.map +0 -1
  1216. package/dist/types-Cr-Kg-3D.d.mts +0 -1641
  1217. package/dist/types-Cr-Kg-3D.d.mts.map +0 -1
  1218. package/dist/types-D2fvWd1i.d.mts +0 -359
  1219. package/dist/types-D2fvWd1i.d.mts.map +0 -1
  1220. package/dist/types-D7HUsguf.mjs +0 -77
  1221. package/dist/types-D7HUsguf.mjs.map +0 -1
  1222. package/dist/types-DA1Te3Oy.d.mts +0 -198
  1223. package/dist/types-DA1Te3Oy.d.mts.map +0 -1
  1224. package/dist/types-DhV6Q5bP.mjs +0 -18
  1225. package/dist/types-DhV6Q5bP.mjs.map +0 -1
  1226. package/dist/types-DnnVSl6Y.d.mts +0 -85
  1227. package/dist/types-DnnVSl6Y.d.mts.map +0 -1
  1228. package/dist/types-VT4-BugW.mjs +0 -16
  1229. package/dist/types-VT4-BugW.mjs.map +0 -1
  1230. package/dist/upload-attempts-B68ZGNu9.mjs +0 -32
  1231. package/dist/upload-attempts-B68ZGNu9.mjs.map +0 -1
  1232. package/dist/url-pattern-CCeZMGOh.mjs +0 -33
  1233. package/dist/url-pattern-CCeZMGOh.mjs.map +0 -1
  1234. package/dist/user-DDSL-sGw.mjs +0 -171
  1235. package/dist/user-DDSL-sGw.mjs.map +0 -1
  1236. package/dist/utils-DdhmO9w9.mjs +0 -439
  1237. package/dist/utils-DdhmO9w9.mjs.map +0 -1
  1238. package/dist/validate-CHosPEhs.mjs +0 -453
  1239. package/dist/validate-CHosPEhs.mjs.map +0 -1
  1240. package/dist/validate-CM79QXYE.d.mts +0 -432
  1241. package/dist/validate-CM79QXYE.d.mts.map +0 -1
  1242. package/dist/validation-BFecQczG.mjs +0 -218
  1243. package/dist/validation-BFecQczG.mjs.map +0 -1
  1244. package/dist/version-BRZXVifl.mjs +0 -9
  1245. package/dist/version-BRZXVifl.mjs.map +0 -1
  1246. package/dist/version-DUQDHgrf.mjs +0 -7
  1247. package/dist/version-DUQDHgrf.mjs.map +0 -1
  1248. package/dist/widgets-WdV72brA.mjs +0 -126
  1249. package/dist/widgets-WdV72brA.mjs.map +0 -1
  1250. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +0 -34
  1251. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +0 -1
  1252. package/dist/wxr-taxonomies-DP6ESgMN.mjs +0 -372
  1253. package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +0 -1
  1254. package/dist/zod-generator-D6uE4WiS.mjs +0 -389
  1255. package/dist/zod-generator-D6uE4WiS.mjs.map +0 -1
  1256. package/src/astro/routes/api/relations/[id]/translations.ts +0 -33
  1257. /package/dist/{api-tokens-CE1ECIg0.mjs → api-tokens-FaG1zPsj.mjs} +0 -0
  1258. /package/dist/{ssrf-DpBH7aOt.mjs → ssrf-DZOt8Qof.mjs} +0 -0
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as getMigrationStatus, c as formatDatetimeStorageReport, i as getExactMigrationStatus, l as scanDatetimeStorage, s as runMigrations, u as __exportAll } from "../runner-1y4J9fJB.mjs";
2
+ import { a as getMigrationStatus, c as formatDatetimeStorageReport, i as getExactMigrationStatus, l as scanDatetimeStorage, s as runMigrations, u as __exportAll } from "../runner-B3eyB9Gb.mjs";
3
3
  import { t as EmDashDatabaseError } from "../errors-9P_FDrJ_.mjs";
4
4
  import { n as isMissingTableError } from "../db-errors-CBD5yMro.mjs";
5
5
  import { busyLockHeldSince, migrationLockHeldMessage } from "../database/migration-lock.mjs";
@@ -11,64 +11,69 @@ import "../after-PcEvMY_6.mjs";
11
11
  import { t as OptionsRepository } from "../options-DhrI7eMv.mjs";
12
12
  import { a as encodeBase64url } from "../base64-DvnNgP7e.mjs";
13
13
  import { n as fingerprintKey, r as generateEncryptionKey, t as EmDashSecretsError } from "../secrets-CIi0nFiR.mjs";
14
- import { t as ContentRepository } from "../content-DFaIEDj9.mjs";
14
+ import { t as ContentRepository } from "../content-CbnufDsM.mjs";
15
15
  import "../object-cache-CqWNY5uP.mjs";
16
16
  import { n as slugify } from "../slugify-T5GHH42D.mjs";
17
- import "../types-BkUg2yHx.mjs";
18
- import { t as MediaRepository } from "../media-Qp5S3eH3.mjs";
19
- import { t as TaxonomyRepository } from "../taxonomy-C3Fu1YeH.mjs";
20
- import "../resolve-2WbQsCvT.mjs";
21
- import "../redirect-iJf5fltD.mjs";
22
- import "../request-cache-DzLYKm_x.mjs";
23
- import "../byline-registry-gnKscbQX.mjs";
24
- import "../field-defs-cache-HIgBbqZZ.mjs";
25
- import { t as BylineRepository } from "../byline-DYmkXqvo.mjs";
26
- import { t as imageSize } from "../dist-BNwANFJR.mjs";
27
- import "../fts-manager-S-K0laoS.mjs";
28
- import { f as parseTaxonomyCollections, m as selectTaxonomyDefs } from "../loader-BzqeR1ZN.mjs";
17
+ import "../types-aOOxRSx6.mjs";
18
+ import "../revision-j1p4-bOj.mjs";
19
+ import { t as MediaRepository } from "../media-BUQePMxP.mjs";
20
+ import { t as TaxonomyRepository } from "../taxonomy-CKDwM61Y.mjs";
21
+ import "../resolve-C0s1E_fH.mjs";
22
+ import "../redirect-D1ArbO85.mjs";
23
+ import "../request-cache-iHRlHx1d.mjs";
24
+ import "../byline-registry-B_EK_TQf.mjs";
25
+ import "../field-defs-cache-CsZctvbu.mjs";
26
+ import { t as BylineRepository } from "../byline-BayaYGoj.mjs";
27
+ import "../staged-C36IWXff.mjs";
28
+ import "../dist-FPR93_xf.mjs";
29
+ import "../fts-manager-CCaZTp8y.mjs";
30
+ import { h as selectTaxonomyDefs, p as parseTaxonomyCollections } from "../loader-CrRPfkHS.mjs";
29
31
  import { kyselyLogOption } from "../database/instrumentation.mjs";
30
- import "../collection-slugs-cache-CjGk__zp.mjs";
31
- import "../capture-triggers-kJyl_yyM.mjs";
32
- import "../activation-LOkDM5WT.mjs";
33
- import { a as SchemaRegistry, t as BlockTypeRegistry } from "../block-type-registry-DUI_3KxT.mjs";
34
- import "../collection-deletion-BIm28mo3.mjs";
35
- import { r as isTransferError, t as TransferError } from "../errors-DgE1zJGG.mjs";
36
- import "../canonical-YhEQezjg.mjs";
37
- import { d as sha256Hex, i as createSha256, s as packageDigest } from "../digest-BarSh-pN.mjs";
38
- import "../hash-SDAW6zC-.mjs";
39
- import "../zod-generator-D6uE4WiS.mjs";
40
- import "../block-values-C_VIPr5t.mjs";
41
- import "../settings-DYidIB26.mjs";
42
- import "../settings-CgjRWGW9.mjs";
43
- import { a as pluginManifestBaseSchema } from "../manifest-schema-CY3zng_M.mjs";
44
- import { i as isDeprecatedCapability, n as capabilitiesToDeclaredAccess$1, r as declaredAccessToCapabilities$1, t as CAPABILITY_RENAMES } from "../types-BZakh7Ym.mjs";
45
- import "../ssrf-CJUnJymJ.mjs";
46
- import { t as applySeed } from "../apply-CoT603H3.mjs";
47
- import "../ssrf-DpBH7aOt.mjs";
48
- import { n as validateSeed } from "../validate-CHosPEhs.mjs";
49
- import { a as MigrationManifestValidationError, c as normalizeAstroI18n, i as getMigrationIntegrationMetadata, n as MIGRATION_CONFIG_SYMBOL, s as validateMigrationManifest, t as buildMigrationManifest } from "../manifest-builder-B8zR-73J.mjs";
50
- import "../identity-IyNWwXr6.mjs";
51
- import { t as openNodeSqliteDatabase } from "../node-sqlite-compat-CONMsl-x.mjs";
32
+ import "../collection-slugs-cache-CUuiduLq.mjs";
33
+ import "../capture-triggers-DJEoOTOq.mjs";
34
+ import "../activation-PtniBLt9.mjs";
35
+ import "../collection-deletion-CLCdXsnV.mjs";
36
+ import { L as BlockTypeRegistry, n as SchemaRegistry } from "../registry-CFcNCayZ.mjs";
37
+ import "../hash-COVK27Pc.mjs";
38
+ import "../zod-generator-DmTKI-Ig.mjs";
39
+ import { r as isTransferError, t as TransferError } from "../errors-Bt3goF8I.mjs";
40
+ import "../canonical-CcSuuTlH.mjs";
41
+ import { d as sha256Hex, i as createSha256, s as packageDigest } from "../digest-DVZ--cE9.mjs";
42
+ import "../block-values-ACFqgB1D.mjs";
43
+ import "../query-OzMJ6vJP.mjs";
44
+ import "../schema-BAayK46S.mjs";
45
+ import "../relations-Cfaa1fDl.mjs";
46
+ import "../settings-DSfE7wOa.mjs";
47
+ import "../schema-Gqcl-8G4.mjs";
48
+ import "../settings-D5EHi0Tk.mjs";
49
+ import { a as pluginManifestBaseSchema } from "../manifest-schema-Ci2gmd0u.mjs";
50
+ import { i as isDeprecatedCapability, t as CAPABILITY_RENAMES } from "../types-OC5c-edM.mjs";
51
+ import "../ssrf-Dv0_tRpo.mjs";
52
+ import { t as applySeed } from "../apply-Do3KNnUk.mjs";
53
+ import "../ssrf-DZOt8Qof.mjs";
54
+ import { n as validateSeed } from "../validate-CfgRpcjA.mjs";
55
+ import { a as MigrationManifestValidationError, c as normalizeAstroI18n, i as getMigrationIntegrationMetadata, n as MIGRATION_CONFIG_SYMBOL, s as validateMigrationManifest, t as buildMigrationManifest } from "../manifest-builder-BQzCHNgB.mjs";
56
+ import "../identity-NVTOOQyq.mjs";
57
+ import { t as openNodeSqliteDatabase } from "../node-sqlite-compat-pWFw0lcc.mjs";
52
58
  import { LocalStorage } from "../storage/local.mjs";
53
- import { t as convertDataForRead } from "../portable-text-5O_ZGUjB.mjs";
59
+ import { t as convertDataForRead } from "../portable-text-DXE8ymtD.mjs";
54
60
  import { createHeaderAwareFetch, customHeadersInterceptor, getCachedAccessToken, isAccessRedirect, resolveCustomHeaders, runCloudflaredLogin } from "../client/cf-access.mjs";
55
61
  import { EmDashApiError, EmDashClient } from "../client/index.mjs";
56
- import { a as parseIndexLine, n as unpackSitePackage, o as parseManifest, r as decodeUtf8, t as packSitePackage } from "../tar-_1AgTYFu.mjs";
57
- import "../kinds-CRu_T5T5.mjs";
58
- import { t as MANIFEST_PATH } from "../paths-JxokKIbr.mjs";
59
- import "../transformations-9gfpwY65.mjs";
60
- import "../version-BRZXVifl.mjs";
61
- import { r as verifyReceiptDigest } from "../receipt-B4wJj5Jq.mjs";
62
+ import { r as fileExists$4, t as bundleCommand } from "../bundle-Db1iNMv_.mjs";
63
+ import { a as parseIndexLine, n as unpackSitePackage, o as parseManifest, r as decodeUtf8, t as packSitePackage } from "../tar-DsTXX6ch.mjs";
64
+ import "../kinds-CYmRESWj.mjs";
65
+ import { t as MANIFEST_PATH } from "../paths-d51RFm8M.mjs";
66
+ import "../transformations-C7RQabKQ.mjs";
67
+ import "../version-DgYjhTud.mjs";
68
+ import { r as verifyReceiptDigest } from "../receipt-B-aU4hpJ.mjs";
62
69
  import { createRequire } from "node:module";
63
70
  import { Kysely, SqliteDialect, sql } from "kysely";
64
71
  import { z } from "zod";
65
72
  import { ulid } from "ulidx";
66
- import { extractManifestRoute, extractRouteOptions, isJsonPostRouteContract } from "@emdash-cms/plugin-types";
67
73
  import { createGzipDecoder, unpackTar } from "modern-tar";
68
74
  import { pathToFileURL } from "node:url";
69
- import { createHash } from "node:crypto";
70
- import { access, copyFile, mkdir, readFile, readdir, rename, rm, stat, symlink, writeFile } from "node:fs/promises";
71
- import { basename, dirname, extname, isAbsolute, join, parse, resolve } from "node:path";
75
+ import { access, mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
76
+ import { basename, dirname, isAbsolute, join, parse, resolve } from "node:path";
72
77
  import { createReadStream, createWriteStream, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
73
78
  import { Readable, Writable } from "node:stream";
74
79
  import { defineCommand, runCommand, runMain } from "citty";
@@ -79,8 +84,6 @@ import { homedir } from "node:os";
79
84
  import { parse as parse$1, printParseErrorCode } from "jsonc-parser";
80
85
  import { parse as parse$2 } from "smol-toml";
81
86
  import { createInterface } from "node:readline/promises";
82
- import { pipeline } from "node:stream/promises";
83
- import { packTar } from "modern-tar/fs";
84
87
 
85
88
  //#region src/cli/commands/auth.ts
86
89
  /**
@@ -960,7 +963,7 @@ async function readPackageJson$2(cwd) {
960
963
  return null;
961
964
  }
962
965
  }
963
- async function fileExists$4(path) {
966
+ async function fileExists$3(path) {
964
967
  try {
965
968
  await access(path);
966
969
  return true;
@@ -1012,7 +1015,7 @@ const devCommand = defineCommand({
1012
1015
  process.exit(1);
1013
1016
  }
1014
1017
  const dbPath = resolve(cwd, args.database);
1015
- if (!await fileExists$4(dbPath)) consola.start("Database not found, initializing...");
1018
+ if (!await fileExists$3(dbPath)) consola.start("Database not found, initializing...");
1016
1019
  const db = createDatabase({ url: `file:${dbPath}` });
1017
1020
  try {
1018
1021
  consola.start("Checking database migrations...");
@@ -1051,8 +1054,8 @@ const devCommand = defineCommand({
1051
1054
  "--port",
1052
1055
  args.port
1053
1056
  ];
1054
- const pnpmLockExists = await fileExists$4(resolve(cwd, "pnpm-lock.yaml"));
1055
- const yarnLockExists = await fileExists$4(resolve(cwd, "yarn.lock"));
1057
+ const pnpmLockExists = await fileExists$3(resolve(cwd, "pnpm-lock.yaml"));
1058
+ const yarnLockExists = await fileExists$3(resolve(cwd, "yarn.lock"));
1056
1059
  let cmd;
1057
1060
  let cmdArgs;
1058
1061
  if (pnpmLockExists) {
@@ -1115,7 +1118,7 @@ function triggerFix(configPath) {
1115
1118
  function mainFix(configPath) {
1116
1119
  return configPath.endsWith(".toml") ? MAIN_FIX_TOML : MAIN_FIX_JSONC;
1117
1120
  }
1118
- async function fileExists$3(path) {
1121
+ async function fileExists$2(path) {
1119
1122
  try {
1120
1123
  await access(path);
1121
1124
  return true;
@@ -1136,7 +1139,7 @@ function sourcePosition(source, offset) {
1136
1139
  async function findWranglerConfig(cwd) {
1137
1140
  for (const filename of WRANGLER_CONFIG_FILES) {
1138
1141
  const path = resolve(cwd, filename);
1139
- if (await fileExists$3(path)) return path;
1142
+ if (await fileExists$2(path)) return path;
1140
1143
  }
1141
1144
  return null;
1142
1145
  }
@@ -1231,7 +1234,7 @@ function printResult(result) {
1231
1234
  }
1232
1235
  async function checkDatabase(dbPath) {
1233
1236
  const results = [];
1234
- if (!await fileExists$3(dbPath)) {
1237
+ if (!await fileExists$2(dbPath)) {
1235
1238
  results.push({
1236
1239
  name: "database",
1237
1240
  status: "fail",
@@ -1377,6 +1380,7 @@ const doctorCommand = defineCommand({
1377
1380
  * Export current database schema (and optionally content) as a seed file
1378
1381
  */
1379
1382
  const SETTINGS_PREFIX = "site:";
1383
+ const TRAILING_SLASHES = /\/+$/;
1380
1384
  const exportSeedCommand = defineCommand({
1381
1385
  meta: {
1382
1386
  name: "export-seed",
@@ -1403,6 +1407,11 @@ const exportSeedCommand = defineCommand({
1403
1407
  type: "boolean",
1404
1408
  description: "Pretty print JSON output",
1405
1409
  default: true
1410
+ },
1411
+ "media-base-url": {
1412
+ type: "string",
1413
+ description: "Public URL of the site, used to write absolute media URLs",
1414
+ required: false
1406
1415
  }
1407
1416
  },
1408
1417
  async run({ args }) {
@@ -1422,7 +1431,10 @@ const exportSeedCommand = defineCommand({
1422
1431
  process.exit(1);
1423
1432
  }
1424
1433
  try {
1425
- const seed = await exportSeed(db, args["with-content"]);
1434
+ const seed = await exportSeed(db, args["with-content"], {
1435
+ mediaBaseUrl: args["media-base-url"],
1436
+ warn: (message) => process.stderr.write(`Warning: ${message}\n`)
1437
+ });
1426
1438
  const output = args.pretty ? JSON.stringify(seed, null, " ") : JSON.stringify(seed);
1427
1439
  console.log(output);
1428
1440
  } catch (error) {
@@ -1436,7 +1448,9 @@ const exportSeedCommand = defineCommand({
1436
1448
  /**
1437
1449
  * Export database to seed file format
1438
1450
  */
1439
- async function exportSeed(db, withContent) {
1451
+ async function exportSeed(db, withContent, options = {}) {
1452
+ const warn = options.warn ?? (() => {});
1453
+ const mediaUrlPrefix = mediaFileUrlPrefix(options.mediaBaseUrl);
1440
1454
  const seed = {
1441
1455
  $schema: "https://emdashcms.com/seed.schema.json",
1442
1456
  version: "1",
@@ -1448,19 +1462,46 @@ async function exportSeed(db, withContent) {
1448
1462
  seed.settings = await exportSettings(db);
1449
1463
  seed.blockTypes = await exportBlockTypes(db);
1450
1464
  seed.collections = await exportCollections(db);
1465
+ const relations = await exportRelations(db);
1466
+ if (relations.length > 0) seed.relations = relations;
1451
1467
  const { i18nEnabled, defaultLocale } = await detectLocaleInfo(db, seed.collections);
1452
1468
  if (defaultLocale) seed.defaultLocale = defaultLocale;
1453
1469
  seed.taxonomies = await exportTaxonomies(db, i18nEnabled);
1454
- seed.menus = await exportMenus(db, i18nEnabled);
1455
- seed.widgetAreas = await exportWidgetAreas(db);
1456
1470
  const { bylines, groupToSeedId } = await exportBylines(db);
1457
- if (bylines.length > 0) seed.bylines = bylines;
1471
+ let exportedContent;
1458
1472
  if (withContent !== void 0) {
1459
1473
  const collections = withContent === "" || withContent === "true" || withContent === "all" ? null : withContent.split(",").map((s) => s.trim()).filter(Boolean);
1460
- seed.content = await exportContent(db, seed.collections || [], collections, groupToSeedId, i18nEnabled);
1474
+ exportedContent = await exportContent(db, seed.collections || [], collections, groupToSeedId, i18nEnabled, mediaUrlPrefix);
1475
+ }
1476
+ seed.menus = await exportMenus(db, i18nEnabled, exportedContent?.groupSeedIds ?? /* @__PURE__ */ new Map());
1477
+ const redirects = await exportRedirects(db, warn);
1478
+ if (redirects.length > 0) seed.redirects = redirects;
1479
+ seed.widgetAreas = await exportWidgetAreas(db);
1480
+ const sections = await exportSections(db, warn);
1481
+ if (sections.length > 0) seed.sections = sections;
1482
+ if (bylines.length > 0) seed.bylines = bylines;
1483
+ if (exportedContent) {
1484
+ seed.content = exportedContent.content;
1485
+ if (exportedContent.mediaCount > 0 && !options.mediaBaseUrl) warn(`${exportedContent.mediaCount} media reference(s) use site-relative URLs, which \`emdash seed\` cannot download. Pass --media-base-url with the site's public URL to make them importable.`);
1461
1486
  }
1462
1487
  return seed;
1463
1488
  }
1489
+ const MEDIA_FILE_PATH = "/_emdash/api/media/file/";
1490
+ /**
1491
+ * Prefix for `$media` URLs: the site's base URL (without a trailing slash)
1492
+ * plus the public media route, or the bare route when no base is given.
1493
+ */
1494
+ function mediaFileUrlPrefix(mediaBaseUrl) {
1495
+ if (mediaBaseUrl === void 0) return MEDIA_FILE_PATH;
1496
+ let base;
1497
+ try {
1498
+ base = new URL(mediaBaseUrl);
1499
+ } catch {
1500
+ throw new Error(`Invalid media base URL: ${mediaBaseUrl}`);
1501
+ }
1502
+ if (base.protocol !== "http:" && base.protocol !== "https:") throw new Error(`Media base URL must use http or https: ${mediaBaseUrl}`);
1503
+ return `${base.origin}${base.pathname.replace(TRAILING_SLASHES, "")}${MEDIA_FILE_PATH}`;
1504
+ }
1464
1505
  /**
1465
1506
  * Export byline profiles as root-level `bylines[]`.
1466
1507
  *
@@ -1508,7 +1549,7 @@ async function exportBylines(db) {
1508
1549
  * Determine locale-awareness and the data's default locale for the export.
1509
1550
  *
1510
1551
  * The runtime initializes the i18n config in middleware, but the CLI never does,
1511
- * so `isI18nEnabled()` is always false under `emdash export-seed` (#1330). When
1552
+ * so `isI18nEnabled()` is always false under `emdash export-seed`. When
1512
1553
  * the flag is unset, fall back to the data: a project is multi-locale when its
1513
1554
  * i18n-aware tables hold rows in more than one distinct locale. `locale` is
1514
1555
  * NOT NULL (defaulting to the site's default locale), so a per-row presence
@@ -1518,7 +1559,7 @@ async function exportBylines(db) {
1518
1559
  * per-locale suffix they need to avoid duplicate seed ids.
1519
1560
  *
1520
1561
  * `defaultLocale` self-describes the single-locale case so a non-`en` default
1521
- * survives the round-trip (#1421). When more than one locale is present every
1562
+ * survives the round-trip. When more than one locale is present every
1522
1563
  * row already carries its own `locale`, so no fallback is needed and we leave it
1523
1564
  * undefined rather than guess which locale is the "default" without the runtime
1524
1565
  * config.
@@ -1600,6 +1641,9 @@ async function exportCollections(db) {
1600
1641
  hidden: collection.hidden || void 0,
1601
1642
  sortOrder: collection.sortOrder,
1602
1643
  group: collection.group,
1644
+ commentsEnabled: collection.commentsEnabled || void 0,
1645
+ titleField: collection.titleField,
1646
+ dateField: collection.dateField,
1603
1647
  fields: fields.map((field) => ({
1604
1648
  slug: field.slug,
1605
1649
  label: field.label,
@@ -1608,6 +1652,7 @@ async function exportCollections(db) {
1608
1652
  unique: field.unique || void 0,
1609
1653
  searchable: field.searchable || void 0,
1610
1654
  indexed: field.indexed || void 0,
1655
+ translatable: field.translatable === false ? false : void 0,
1611
1656
  defaultValue: field.defaultValue,
1612
1657
  validation: field.validation ? { ...field.validation } : void 0,
1613
1658
  widget: field.widget || void 0,
@@ -1619,6 +1664,36 @@ async function exportCollections(db) {
1619
1664
  return result;
1620
1665
  }
1621
1666
  /**
1667
+ * Export relations as root-level `relations[]`.
1668
+ *
1669
+ * A reference field's `validation.relation` names a relation by slug, and the
1670
+ * field's validation is exported verbatim, so re-applying the seed binds the
1671
+ * field to this relation rather than creating another one.
1672
+ */
1673
+ async function exportRelations(db) {
1674
+ return (await db.selectFrom("_emdash_relations").select([
1675
+ "slug",
1676
+ "parent_collection",
1677
+ "child_collection",
1678
+ "parent_label",
1679
+ "parent_label_singular",
1680
+ "child_label",
1681
+ "child_label_singular",
1682
+ "max_children_per_parent",
1683
+ "max_parents_per_child"
1684
+ ]).orderBy("slug", "asc").execute()).map((row) => ({
1685
+ slug: row.slug,
1686
+ parentCollection: row.parent_collection,
1687
+ childCollection: row.child_collection,
1688
+ parentLabel: row.parent_label,
1689
+ parentLabelSingular: row.parent_label_singular ?? void 0,
1690
+ childLabel: row.child_label,
1691
+ childLabelSingular: row.child_label_singular ?? void 0,
1692
+ maxChildrenPerParent: row.max_children_per_parent,
1693
+ maxParentsPerChild: row.max_parents_per_child
1694
+ }));
1695
+ }
1696
+ /**
1622
1697
  * Export taxonomy definitions and terms
1623
1698
  */
1624
1699
  async function exportTaxonomies(db, i18nEnabled) {
@@ -1678,7 +1753,7 @@ async function exportTaxonomies(db, i18nEnabled) {
1678
1753
  /**
1679
1754
  * Export menus with their items
1680
1755
  */
1681
- async function exportMenus(db, i18nEnabled) {
1756
+ async function exportMenus(db, i18nEnabled, contentGroupSeedIds) {
1682
1757
  const menus = await db.selectFrom("_emdash_menus").selectAll().orderBy("name").orderBy("locale").execute();
1683
1758
  const result = [];
1684
1759
  const groupToSeedId = /* @__PURE__ */ new Map();
@@ -1691,7 +1766,8 @@ async function exportMenus(db, i18nEnabled) {
1691
1766
  menuName: menu.name,
1692
1767
  menuLocale: menu.locale ?? null,
1693
1768
  itemGroupToSeedId,
1694
- usedItemSeedIds
1769
+ usedItemSeedIds,
1770
+ contentGroupSeedIds
1695
1771
  });
1696
1772
  const seedMenu = {
1697
1773
  id: seedId,
@@ -1746,7 +1822,7 @@ function buildMenuItemTree(items, i18nCtx) {
1746
1822
  };
1747
1823
  if (item.type === "custom") seedItem.url = item.custom_url || void 0;
1748
1824
  else {
1749
- seedItem.ref = item.reference_id || void 0;
1825
+ seedItem.ref = (item.type !== "taxonomy" && item.reference_id ? i18nCtx.contentGroupSeedIds.get(item.reference_id) : void 0) ?? (item.reference_id || void 0);
1750
1826
  seedItem.collection = item.reference_collection || void 0;
1751
1827
  }
1752
1828
  if (item.target === "_blank") seedItem.target = "_blank";
@@ -1797,27 +1873,129 @@ async function exportWidgetAreas(db) {
1797
1873
  }
1798
1874
  return result;
1799
1875
  }
1800
- /** A reference field holds a single entry id or an array of them. */
1801
- function referenceValues(value) {
1876
+ function isSeedRedirectType(type) {
1877
+ return type === 301 || type === 302 || type === 307 || type === 308;
1878
+ }
1879
+ /**
1880
+ * Export redirect rules. Terminal rules (410/451) have no seed representation
1881
+ * and are reported through `warn` instead.
1882
+ *
1883
+ * Databases migrated from before the source guard can hold several rows for
1884
+ * one source; only the guarded row is exported, since a seed rejects duplicate
1885
+ * sources.
1886
+ */
1887
+ async function exportRedirects(db, warn) {
1888
+ const rows = await db.selectFrom("_emdash_redirects").select([
1889
+ "source",
1890
+ "destination",
1891
+ "type",
1892
+ "enabled",
1893
+ "group_name",
1894
+ "source_guard"
1895
+ ]).orderBy("created_at").orderBy("id").execute();
1896
+ const guardedRows = /* @__PURE__ */ new Map();
1897
+ for (const row of rows) {
1898
+ const current = guardedRows.get(row.source);
1899
+ if (!current || row.source_guard === 1 && current.source_guard !== 1) guardedRows.set(row.source, row);
1900
+ }
1901
+ const result = [];
1902
+ for (const row of rows) {
1903
+ if (guardedRows.get(row.source) !== row) {
1904
+ warn(`Skipping duplicate rule for "${row.source}" -> "${row.destination}".`);
1905
+ continue;
1906
+ }
1907
+ if (!isSeedRedirectType(row.type)) {
1908
+ warn(`Skipping ${row.type} rule for "${row.source}": seeds only carry 301/302/307/308.`);
1909
+ continue;
1910
+ }
1911
+ const redirect = {
1912
+ source: row.source,
1913
+ destination: row.destination,
1914
+ type: row.type
1915
+ };
1916
+ if (row.enabled === 0) redirect.enabled = false;
1917
+ if (row.group_name) redirect.groupName = row.group_name;
1918
+ result.push(redirect);
1919
+ }
1920
+ return result;
1921
+ }
1922
+ function isSeedSectionSource(source) {
1923
+ return source === "theme" || source === "user" || source === "import";
1924
+ }
1925
+ /** Section slugs a seed accepts. The WordPress importer can store others. */
1926
+ const SEED_SECTION_SLUG_PATTERN = /^[a-z0-9-]+$/;
1927
+ async function exportSections(db, warn) {
1928
+ const rows = await db.selectFrom("_emdash_sections").select([
1929
+ "slug",
1930
+ "title",
1931
+ "description",
1932
+ "keywords",
1933
+ "content",
1934
+ "source"
1935
+ ]).orderBy("slug").execute();
1936
+ const result = [];
1937
+ for (const row of rows) {
1938
+ if (!SEED_SECTION_SLUG_PATTERN.test(row.slug)) {
1939
+ warn(`Skipping section "${row.slug}": seed section slugs may only contain lowercase letters, digits, and hyphens.`);
1940
+ continue;
1941
+ }
1942
+ const section = {
1943
+ slug: row.slug,
1944
+ title: row.title,
1945
+ content: JSON.parse(row.content)
1946
+ };
1947
+ if (row.description) section.description = row.description;
1948
+ if (row.keywords) section.keywords = JSON.parse(row.keywords);
1949
+ if (isSeedSectionSource(row.source)) section.source = row.source;
1950
+ result.push(section);
1951
+ }
1952
+ return result;
1953
+ }
1954
+ async function loadRelations(db) {
1955
+ const rows = await db.selectFrom("_emdash_relations").select([
1956
+ "id",
1957
+ "slug",
1958
+ "child_collection",
1959
+ "max_children_per_parent"
1960
+ ]).execute();
1961
+ return new Map(rows.map((row) => [row.slug, {
1962
+ id: row.id,
1963
+ childCollection: row.child_collection,
1964
+ maxChildrenPerParent: row.max_children_per_parent
1965
+ }]));
1966
+ }
1967
+ /** A legacy reference column holds a single entry id or an array of them. */
1968
+ function legacyReferenceValues(value) {
1802
1969
  if (typeof value === "string") return [value];
1803
1970
  if (Array.isArray(value)) return value.filter((v) => typeof v === "string");
1804
1971
  return [];
1805
1972
  }
1806
1973
  /**
1807
1974
  * For each exported collection, the other exported collections its entries
1808
- * point into. Read from the values rather than a field's declared target so a
1809
- * `reference` field without `options.collection` is still accounted for.
1975
+ * point into.
1976
+ *
1977
+ * A field bound to a relation names its target in the relation, and its links
1978
+ * are not in `data` to be read. A field with no relation still holds entry ids
1979
+ * in its own column; those are read from the values rather than from a declared
1980
+ * target, so a field without `options.collection` is still accounted for.
1810
1981
  */
1811
- function referenceTargets(collected, collectionsBySlug, entryIdToCollection) {
1982
+ function referenceTargets(collected, collectionsBySlug, entryIdToCollection, relations) {
1812
1983
  const targets = /* @__PURE__ */ new Map();
1813
1984
  for (const [slug, items] of collected) {
1814
- const referenceFields = (collectionsBySlug.get(slug)?.fields ?? []).filter((field) => field.type === "reference").map((field) => field.slug);
1985
+ const referenceFields = (collectionsBySlug.get(slug)?.fields ?? []).filter((field) => field.type === "reference");
1815
1986
  if (referenceFields.length === 0) continue;
1816
1987
  const found = /* @__PURE__ */ new Set();
1817
- for (const { item } of items) for (const fieldSlug of referenceFields) for (const value of referenceValues(item.data[fieldSlug])) {
1818
- const target = entryIdToCollection.get(value);
1988
+ const add = (target) => {
1819
1989
  if (target && target !== slug) found.add(target);
1820
- }
1990
+ };
1991
+ for (const field of referenceFields) {
1992
+ const relationSlug = field.validation?.relation;
1993
+ if (typeof relationSlug !== "string") continue;
1994
+ if (field.validation?.relationSide === "child") continue;
1995
+ add(relations.get(relationSlug)?.childCollection);
1996
+ }
1997
+ const columnFields = referenceFields.filter((field) => typeof field.validation?.relation !== "string").map((field) => field.slug);
1998
+ if (columnFields.length > 0) for (const { item } of items) for (const fieldSlug of columnFields) for (const value of legacyReferenceValues(item.data[fieldSlug])) add(entryIdToCollection.get(value));
1821
1999
  if (found.size > 0) targets.set(slug, found);
1822
2000
  }
1823
2001
  return targets;
@@ -1851,8 +2029,9 @@ function orderByReferenceTargets(slugs, targets) {
1851
2029
  /**
1852
2030
  * Export content from collections
1853
2031
  */
1854
- async function exportContent(db, collections, includeCollections, bylineGroupToSeedId, i18nEnabled) {
2032
+ async function exportContent(db, collections, includeCollections, bylineGroupToSeedId, i18nEnabled, mediaUrlPrefix) {
1855
2033
  const content = {};
2034
+ const mediaCounter = { count: 0 };
1856
2035
  const contentRepo = new ContentRepository(db);
1857
2036
  const taxonomyRepo = new TaxonomyRepository(db);
1858
2037
  const mediaRepo = new MediaRepository(db);
@@ -1866,7 +2045,7 @@ async function exportContent(db, collections, includeCollections, bylineGroupToS
1866
2045
  status: "all"
1867
2046
  });
1868
2047
  for (const media of result.items) mediaMap.set(media.id, {
1869
- url: `/_emdash/api/media/file/${media.storageKey}`,
2048
+ url: `${mediaUrlPrefix}${media.storageKey}`,
1870
2049
  filename: media.filename,
1871
2050
  alt: media.alt || void 0,
1872
2051
  caption: media.caption || void 0
@@ -1877,6 +2056,8 @@ async function exportContent(db, collections, includeCollections, bylineGroupToS
1877
2056
  const collected = /* @__PURE__ */ new Map();
1878
2057
  const entryIdToSeedId = /* @__PURE__ */ new Map();
1879
2058
  const entryIdToCollection = /* @__PURE__ */ new Map();
2059
+ const groupToSeedId = /* @__PURE__ */ new Map();
2060
+ const exported = [];
1880
2061
  for (const collection of collections) {
1881
2062
  if (includeCollections && !includeCollections.includes(collection.slug)) continue;
1882
2063
  const items = [];
@@ -1894,13 +2075,16 @@ async function exportContent(db, collections, includeCollections, bylineGroupToS
1894
2075
  });
1895
2076
  entryIdToSeedId.set(item.id, seedId);
1896
2077
  entryIdToCollection.set(item.id, collection.slug);
2078
+ const group = item.translationGroup ?? item.id;
2079
+ if (!groupToSeedId.has(group)) groupToSeedId.set(group, seedId);
1897
2080
  }
1898
2081
  cursor = result.nextCursor;
1899
2082
  } while (cursor);
1900
2083
  collected.set(collection.slug, items);
1901
2084
  }
2085
+ const relations = await loadRelations(db);
1902
2086
  const collectionsBySlug = new Map(collections.map((c) => [c.slug, c]));
1903
- const orderedSlugs = orderByReferenceTargets([...collected.keys()], referenceTargets(collected, collectionsBySlug, entryIdToCollection));
2087
+ const orderedSlugs = orderByReferenceTargets([...collected.keys()], referenceTargets(collected, collectionsBySlug, entryIdToCollection, relations));
1904
2088
  for (const slug of orderedSlugs) {
1905
2089
  const collection = collectionsBySlug.get(slug);
1906
2090
  const items = collected.get(slug);
@@ -1908,11 +2092,11 @@ async function exportContent(db, collections, includeCollections, bylineGroupToS
1908
2092
  const entries = [];
1909
2093
  const translationGroupToSeedId = /* @__PURE__ */ new Map();
1910
2094
  for (const { item, seedId } of items) {
1911
- const processedData = processDataForExport(item.data, collection.fields, mediaMap, entryIdToSeedId);
2095
+ const processedData = processDataForExport(item.data, collection.fields, mediaMap, mediaCounter);
1912
2096
  const entry = {
1913
2097
  id: seedId,
1914
2098
  slug: item.slug?.trim() ? item.slug : collection.routable === false ? void 0 : item.id,
1915
- status: item.status === "published" || item.status === "draft" ? item.status : void 0,
2099
+ status: item.status === "published" ? "published" : "draft",
1916
2100
  data: processedData
1917
2101
  };
1918
2102
  if (i18nEnabled && item.locale) {
@@ -1927,6 +2111,12 @@ async function exportContent(db, collections, includeCollections, bylineGroupToS
1927
2111
  if (Object.keys(taxonomies).length > 0) entry.taxonomies = taxonomies;
1928
2112
  const bylines = await getBylineCredits(db, collection.slug, item.id, bylineGroupToSeedId);
1929
2113
  if (bylines.length > 0) entry.bylines = bylines;
2114
+ exported.push({
2115
+ collection,
2116
+ entry,
2117
+ translationGroup: item.translationGroup ?? null,
2118
+ referenceValues: item.data
2119
+ });
1930
2120
  entries.push(entry);
1931
2121
  }
1932
2122
  if (i18nEnabled && entries.length > 0) entries.sort((a, b) => {
@@ -1936,37 +2126,110 @@ async function exportContent(db, collections, includeCollections, bylineGroupToS
1936
2126
  });
1937
2127
  if (entries.length > 0) content[collection.slug] = entries;
1938
2128
  }
1939
- return content;
2129
+ await addReferenceLinks(db, exported, relations, groupToSeedId, entryIdToSeedId);
2130
+ return {
2131
+ content,
2132
+ groupSeedIds: groupToSeedId,
2133
+ mediaCount: mediaCounter.count
2134
+ };
2135
+ }
2136
+ /**
2137
+ * Write each entry's reference selection into its `data` as `$ref:` values, which
2138
+ * the seed's own content ids resolve on apply.
2139
+ *
2140
+ * A field bound to a relation takes its selection from the link table. Only the
2141
+ * parent side is emitted: both sides view one link set, so a child-side field
2142
+ * would restate links the parent side already carries, and `setReferenceChildren`
2143
+ * accepts them only from the parent. A field with no relation takes the entry id
2144
+ * in its column instead.
2145
+ *
2146
+ * Runs after every collection has been emitted, so the seed id of any target is
2147
+ * known. A target that was not exported has none: a link is then dropped, since
2148
+ * nothing in the seed owns it, while a column value keeps its `$ref:` prefix
2149
+ * around the raw row id. Stripping the prefix there would write a row id that no
2150
+ * restored row carries into the column, and the restore would report success.
2151
+ */
2152
+ async function addReferenceLinks(db, exported, relations, groupToSeedId, entryIdToSeedId) {
2153
+ if (exported.length === 0) return;
2154
+ const linksByRelation = /* @__PURE__ */ new Map();
2155
+ if (relations.size > 0) {
2156
+ const edges = await db.selectFrom("_emdash_content_references").select([
2157
+ "relation_id",
2158
+ "parent_group",
2159
+ "child_group"
2160
+ ]).orderBy("sort_order", "asc").execute();
2161
+ for (const edge of edges) {
2162
+ const byParent = linksByRelation.get(edge.relation_id) ?? /* @__PURE__ */ new Map();
2163
+ const children = byParent.get(edge.parent_group) ?? [];
2164
+ children.push(edge.child_group);
2165
+ byParent.set(edge.parent_group, children);
2166
+ linksByRelation.set(edge.relation_id, byParent);
2167
+ }
2168
+ }
2169
+ for (const { collection, entry, translationGroup, referenceValues } of exported) for (const field of collection.fields) {
2170
+ if (field.type !== "reference") continue;
2171
+ const slug = field.validation?.relation;
2172
+ if (typeof slug !== "string") {
2173
+ const stored = referenceValues[field.slug];
2174
+ const refs = (Array.isArray(stored) ? stored : [stored]).filter((id) => typeof id === "string" && id.length > 0).map((id) => `$ref:${entryIdToSeedId.get(id) ?? id}`);
2175
+ if (refs.length === 0) continue;
2176
+ entry.data[field.slug] = Array.isArray(stored) ? refs : refs[0];
2177
+ continue;
2178
+ }
2179
+ if (field.validation?.relationSide === "child") continue;
2180
+ const relation = relations.get(slug);
2181
+ if (!relation || !translationGroup) continue;
2182
+ const refs = (linksByRelation.get(relation.id)?.get(translationGroup) ?? []).map((group) => groupToSeedId.get(group)).filter((seedId) => seedId !== void 0).map((seedId) => `$ref:${seedId}`);
2183
+ if (refs.length === 0) continue;
2184
+ entry.data[field.slug] = relation.maxChildrenPerParent === 1 ? refs[0] : refs;
2185
+ }
2186
+ }
2187
+ /**
2188
+ * Convert a stored media value (image or file) to `$media` syntax. Values that
2189
+ * don't point at a known media row are kept as they are.
2190
+ */
2191
+ function toSeedMedia(value, mediaMap, mediaCounter) {
2192
+ if (!value || typeof value !== "object") return value;
2193
+ const mediaValue = value;
2194
+ const mediaInfo = typeof mediaValue.id === "string" ? mediaMap.get(mediaValue.id) : void 0;
2195
+ if (!mediaInfo) return value;
2196
+ mediaCounter.count++;
2197
+ return { $media: {
2198
+ url: mediaInfo.url,
2199
+ filename: mediaInfo.filename,
2200
+ alt: typeof mediaValue.alt === "string" && mediaValue.alt || mediaInfo.alt,
2201
+ caption: mediaInfo.caption
2202
+ } };
2203
+ }
2204
+ /** Slugs of a repeater field's `image` sub-fields. */
2205
+ function repeaterImageSubFields(field) {
2206
+ const subFields = field.validation?.subFields;
2207
+ const slugs = /* @__PURE__ */ new Set();
2208
+ if (!Array.isArray(subFields)) return slugs;
2209
+ for (const subField of subFields) if (subField && typeof subField === "object" && subField.type === "image" && typeof subField.slug === "string") slugs.add(subField.slug);
2210
+ return slugs;
1940
2211
  }
1941
2212
  /**
1942
- * Process content data for export, converting image fields to $media syntax
2213
+ * Process content data for export: media values become `$media` references
2214
+ * and reference values become `$ref:` seed ids.
1943
2215
  */
1944
- function processDataForExport(data, fields, mediaMap, entryIdToSeedId) {
2216
+ function processDataForExport(data, fields, mediaMap, mediaCounter) {
1945
2217
  const result = {};
1946
- const fieldTypes = /* @__PURE__ */ new Map();
1947
- for (const field of fields) fieldTypes.set(field.slug, field.type);
2218
+ const fieldsBySlug = /* @__PURE__ */ new Map();
2219
+ for (const field of fields) fieldsBySlug.set(field.slug, field);
1948
2220
  for (const [key, value] of Object.entries(data)) {
1949
- const fieldType = fieldTypes.get(key);
1950
- if (fieldType === "image" && value && typeof value === "object") {
1951
- const imageValue = value;
1952
- if (imageValue.id) {
1953
- const mediaInfo = mediaMap.get(imageValue.id);
1954
- if (mediaInfo) {
1955
- result[key] = { $media: {
1956
- url: mediaInfo.url,
1957
- filename: mediaInfo.filename,
1958
- alt: imageValue.alt || mediaInfo.alt,
1959
- caption: mediaInfo.caption
1960
- } };
1961
- continue;
1962
- }
1963
- }
1964
- result[key] = value;
1965
- } else if (fieldType === "reference" && typeof value === "string") result[key] = `$ref:${entryIdToSeedId.get(value) ?? value}`;
1966
- else if (Array.isArray(value)) result[key] = value.map((item) => {
1967
- if (typeof item === "string" && fieldType === "reference") return `$ref:${entryIdToSeedId.get(item) ?? item}`;
1968
- return item;
1969
- });
2221
+ const field = fieldsBySlug.get(key);
2222
+ const fieldType = field?.type;
2223
+ if (fieldType === "image" || fieldType === "file") result[key] = toSeedMedia(value, mediaMap, mediaCounter);
2224
+ else if (field && fieldType === "repeater" && Array.isArray(value)) {
2225
+ const imageSubFields = repeaterImageSubFields(field);
2226
+ result[key] = value.map((row) => {
2227
+ if (!row || typeof row !== "object" || Array.isArray(row)) return row;
2228
+ const exportedRow = {};
2229
+ for (const [subKey, subValue] of Object.entries(row)) exportedRow[subKey] = imageSubFields.has(subKey) ? toSeedMedia(subValue, mediaMap, mediaCounter) : subValue;
2230
+ return exportedRow;
2231
+ });
2232
+ } else if (fieldType === "reference") continue;
1970
2233
  else result[key] = value;
1971
2234
  }
1972
2235
  return result;
@@ -2011,7 +2274,7 @@ async function getTaxonomyAssignments(taxonomyRepo, collection, entryId) {
2011
2274
  *
2012
2275
  * Initialize database from template config in package.json
2013
2276
  */
2014
- async function fileExists$2(path) {
2277
+ async function fileExists$1(path) {
2015
2278
  try {
2016
2279
  await access(path);
2017
2280
  return true;
@@ -2102,7 +2365,7 @@ const initCommand = defineCommand({
2102
2365
  if (alreadyInitialized && args.force) consola.warn("Re-initializing (--force)...");
2103
2366
  if (config?.schema) {
2104
2367
  const schemaPath = resolve(cwd, config.schema);
2105
- if (await fileExists$2(schemaPath)) {
2368
+ if (await fileExists$1(schemaPath)) {
2106
2369
  consola.start(`Running schema: ${config.schema}`);
2107
2370
  try {
2108
2371
  await runSqlFile(db, schemaPath);
@@ -3303,656 +3566,6 @@ const migrateCommand = defineCommand({
3303
3566
  }
3304
3567
  });
3305
3568
 
3306
- //#endregion
3307
- //#region src/cli/commands/bundle-utils.ts
3308
- /**
3309
- * Bundle utility functions
3310
- *
3311
- * Shared logic extracted from the bundle command so it can be tested
3312
- * without the CLI harness and tsdown dependency.
3313
- */
3314
- const MAX_BUNDLE_SIZE = 256 * 1024;
3315
- const MAX_FILE_SIZE = 128 * 1024;
3316
- const MAX_FILE_COUNT = 20;
3317
- const MAX_SCREENSHOTS = 5;
3318
- const MAX_SCREENSHOT_WIDTH = 1920;
3319
- const MAX_SCREENSHOT_HEIGHT = 1080;
3320
- const ICON_SIZE = 256;
3321
- const MCP_TOOL_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
3322
- /**
3323
- * Matches Node.js built-in imports in bundled output:
3324
- * - require("node:xxx") / require("xxx")
3325
- * - import("node:xxx") / import("xxx")
3326
- * - import X from "node:xxx" / import { X } from "node:xxx"
3327
- * - import * as X from "node:xxx"
3328
- * - export { X } from "node:xxx"
3329
- * Captures the base module name (e.g. "fs" from "node:fs/promises").
3330
- */
3331
- const NODE_BUILTIN_IMPORT_RE = /(?:import|export|require)\s*(?:\(|[^(]*?\bfrom\s+)["'](?:node:)?([a-z_]+)(?:\/[^"']*)?\s*["']\)?/g;
3332
- const LEADING_DOT_SLASH_RE = /^\.\//;
3333
- const DIST_PREFIX_RE = /^dist\//;
3334
- const MJS_EXT_RE = /\.m?js$/;
3335
- const TS_TO_TSX_RE = /\.ts$/;
3336
- /** Node.js built-in modules that shouldn't appear in sandbox code */
3337
- const NODE_BUILTINS = new Set([
3338
- "assert",
3339
- "buffer",
3340
- "child_process",
3341
- "cluster",
3342
- "crypto",
3343
- "dgram",
3344
- "dns",
3345
- "domain",
3346
- "events",
3347
- "fs",
3348
- "http",
3349
- "http2",
3350
- "https",
3351
- "inspector",
3352
- "module",
3353
- "net",
3354
- "os",
3355
- "path",
3356
- "perf_hooks",
3357
- "process",
3358
- "punycode",
3359
- "querystring",
3360
- "readline",
3361
- "repl",
3362
- "stream",
3363
- "string_decoder",
3364
- "sys",
3365
- "timers",
3366
- "tls",
3367
- "trace_events",
3368
- "tty",
3369
- "url",
3370
- "util",
3371
- "v8",
3372
- "vm",
3373
- "wasi",
3374
- "worker_threads",
3375
- "zlib"
3376
- ]);
3377
- async function fileExists$1(path) {
3378
- try {
3379
- await access(path);
3380
- return true;
3381
- } catch {
3382
- return false;
3383
- }
3384
- }
3385
- /** Convert an absolute build artifact path into a portable ESM import specifier. */
3386
- function toFileImportSpecifier(path) {
3387
- return pathToFileURL(path).href;
3388
- }
3389
- /**
3390
- * Read image dimensions from a buffer.
3391
- * Returns [width, height] or null if the format is unrecognized.
3392
- */
3393
- function readImageDimensions(buf) {
3394
- try {
3395
- const result = imageSize(buf);
3396
- if (result.width != null && result.height != null) return [result.width, result.height];
3397
- return null;
3398
- } catch {
3399
- return null;
3400
- }
3401
- }
3402
- /**
3403
- * Extract manifest metadata from a ResolvedPlugin.
3404
- * Strips functions (hooks, route handlers) and keeps only serializable metadata.
3405
- */
3406
- function extractManifest(plugin) {
3407
- if ((plugin.admin.pages?.length ?? 0) > 0 || (plugin.admin.widgets?.length ?? 0) > 0) {
3408
- const adminRoute = plugin.routes.admin;
3409
- if (adminRoute && (adminRoute.public === true || !isJsonPostRouteContract(adminRoute))) throw new Error("Block Kit admin route must accept POST JSON requests and return JSON");
3410
- }
3411
- const declaredAccess = capabilitiesToDeclaredAccess$1(plugin.capabilities, plugin.allowedHosts);
3412
- const enforcedAccess = declaredAccessToCapabilities$1(declaredAccess);
3413
- const hooks = [];
3414
- for (const [name, resolved] of Object.entries(plugin.hooks)) {
3415
- if (!resolved) continue;
3416
- if (resolved.exclusive || resolved.priority !== 100 || resolved.timeout !== 5e3) {
3417
- const entry = { name };
3418
- if (resolved.exclusive) entry.exclusive = true;
3419
- if (resolved.priority !== 100) entry.priority = resolved.priority;
3420
- if (resolved.timeout !== 5e3) entry.timeout = resolved.timeout;
3421
- hooks.push(entry);
3422
- } else hooks.push(name);
3423
- }
3424
- const routes = Object.entries(plugin.routes).map(([name, route]) => extractManifestRoute(name, route));
3425
- const tools = Object.entries(plugin.mcp?.tools ?? {}).map(([name, tool]) => {
3426
- if (!MCP_TOOL_NAME_PATTERN.test(name)) throw new Error(`Invalid MCP tool name "${name}"`);
3427
- const route = plugin.routes[tool.route];
3428
- if (!route?.permission || route.public || route.response === "raw") throw new Error(`MCP tool "${name}" must reference a private route with a permission`);
3429
- if (!isJsonPostRouteContract(route)) throw new Error(`MCP tool "${name}" must reference a POST-compatible JSON route`);
3430
- return {
3431
- name,
3432
- description: tool.description,
3433
- route: tool.route,
3434
- permission: route.permission,
3435
- destructive: tool.destructive ?? false,
3436
- inputSchema: z.toJSONSchema(tool.input, { target: "draft-7" }),
3437
- ...tool.output ? { outputSchema: z.toJSONSchema(tool.output, { target: "draft-7" }) } : {}
3438
- };
3439
- });
3440
- return {
3441
- id: plugin.id,
3442
- version: plugin.version,
3443
- declaredAccess,
3444
- capabilities: enforcedAccess.capabilities,
3445
- allowedHosts: plugin.allowedHosts,
3446
- storage: plugin.storage,
3447
- hooks,
3448
- routes,
3449
- ...tools.length > 0 ? { mcp: { tools } } : {},
3450
- admin: {
3451
- settingsSchema: plugin.admin.settingsSchema,
3452
- pages: plugin.admin.pages,
3453
- widgets: plugin.admin.widgets,
3454
- editorPanels: plugin.admin.editorPanels,
3455
- editorActions: plugin.admin.editorActions
3456
- }
3457
- };
3458
- }
3459
- /**
3460
- * Scan bundled code for Node.js built-in imports.
3461
- * Matches require("node:xxx"), require("xxx"), import("node:xxx") — the patterns
3462
- * that appear in bundled ESM/CJS output (not source-level named imports).
3463
- * Returns deduplicated array of built-in module names found.
3464
- */
3465
- function findNodeBuiltinImports(code) {
3466
- const found = [];
3467
- NODE_BUILTIN_IMPORT_RE.lastIndex = 0;
3468
- let match;
3469
- while ((match = NODE_BUILTIN_IMPORT_RE.exec(code)) !== null) {
3470
- const mod = match[1];
3471
- if (NODE_BUILTINS.has(mod)) found.push(mod);
3472
- }
3473
- return [...new Set(found)];
3474
- }
3475
- /**
3476
- * Find a build output file by base name, checking common extensions.
3477
- * tsdown may output .mjs, .js, or .cjs depending on format and config.
3478
- */
3479
- async function findBuildOutput(dir, baseName) {
3480
- for (const ext of [
3481
- ".mjs",
3482
- ".js",
3483
- ".cjs"
3484
- ]) {
3485
- const candidate = join(dir, `${baseName}${ext}`);
3486
- if (await fileExists$1(candidate)) return candidate;
3487
- }
3488
- }
3489
- /**
3490
- * Resolve a dist/built path back to its source .ts/.tsx equivalent.
3491
- * E.g., "./dist/index.mjs" → "src/index.ts"
3492
- */
3493
- async function resolveSourceEntry(pluginDir, distPath) {
3494
- const cleaned = distPath.replace(LEADING_DOT_SLASH_RE, "");
3495
- const srcPath = cleaned.replace(DIST_PREFIX_RE, "src/").replace(MJS_EXT_RE, ".ts");
3496
- const srcFull = resolve(pluginDir, srcPath);
3497
- if (await fileExists$1(srcFull)) return srcFull;
3498
- const tsxFull = resolve(pluginDir, srcPath.replace(TS_TO_TSX_RE, ".tsx"));
3499
- if (await fileExists$1(tsxFull)) return tsxFull;
3500
- const direct = resolve(pluginDir, cleaned);
3501
- if (await fileExists$1(direct)) return direct;
3502
- }
3503
- const TS_SOURCE_EXPORT_RE = /\.(?:ts|tsx|mts|cts|jsx)$/;
3504
- /**
3505
- * Find package.json exports that point to source files instead of built output.
3506
- * Returns an array of `{ exportPath, resolvedPath }` for each offending export.
3507
- */
3508
- function findSourceExports(exports) {
3509
- const issues = [];
3510
- for (const [exportPath, exportValue] of Object.entries(exports)) {
3511
- const resolved = typeof exportValue === "string" ? exportValue : exportValue && typeof exportValue === "object" && "import" in exportValue ? exportValue.import : null;
3512
- if (resolved && TS_SOURCE_EXPORT_RE.test(resolved)) issues.push({
3513
- exportPath,
3514
- resolvedPath: resolved
3515
- });
3516
- }
3517
- return issues;
3518
- }
3519
- /**
3520
- * Recursively walk a staging directory and return a flat list of all files
3521
- * with sizes. Names are relative to `dir` so they match what would appear
3522
- * as the tarball entry name.
3523
- */
3524
- async function collectBundleEntries(dir) {
3525
- const entries = [];
3526
- await walkBundle(dir, "", entries);
3527
- return entries;
3528
- }
3529
- async function walkBundle(dir, prefix, into) {
3530
- const items = await readdir(dir, { withFileTypes: true });
3531
- for (const item of items) {
3532
- const fullPath = join(dir, item.name);
3533
- const relPath = prefix ? `${prefix}/${item.name}` : item.name;
3534
- if (item.isFile()) {
3535
- const s = await stat(fullPath);
3536
- into.push({
3537
- name: relPath,
3538
- bytes: s.size
3539
- });
3540
- } else if (item.isDirectory()) await walkBundle(fullPath, relPath, into);
3541
- }
3542
- }
3543
- /**
3544
- * Sum the byte sizes of all entries.
3545
- */
3546
- function totalBundleBytes(entries) {
3547
- let total = 0;
3548
- for (const e of entries) total += e.bytes;
3549
- return total;
3550
- }
3551
- /**
3552
- * Check a bundle against the three size caps from RFC 0001:
3553
- * - total decompressed ≤ MAX_BUNDLE_SIZE
3554
- * - per-file decompressed ≤ MAX_FILE_SIZE
3555
- * - file count ≤ MAX_FILE_COUNT
3556
- *
3557
- * Returns a list of violation messages (empty if the bundle is within all
3558
- * caps). Messages are deterministic per input — the total/count violations
3559
- * come first, then oversized files in alphabetical order — so the same
3560
- * bundle always produces the same error text.
3561
- */
3562
- function validateBundleSize(entries) {
3563
- const violations = [];
3564
- const total = totalBundleBytes(entries);
3565
- if (total > MAX_BUNDLE_SIZE) violations.push(`Bundle size ${formatBytes$1(total)} exceeds maximum of ${formatBytes$1(MAX_BUNDLE_SIZE)}.`);
3566
- if (entries.length > MAX_FILE_COUNT) violations.push(`Bundle contains ${entries.length} files, exceeds maximum of ${MAX_FILE_COUNT}.`);
3567
- const oversized = entries.filter((e) => e.bytes > MAX_FILE_SIZE).toSorted((a, b) => a.name.localeCompare(b.name));
3568
- for (const e of oversized) violations.push(`File ${e.name} is ${formatBytes$1(e.bytes)}, exceeds per-file maximum of ${formatBytes$1(MAX_FILE_SIZE)}.`);
3569
- return violations;
3570
- }
3571
- /**
3572
- * Render a byte count as a human-friendly string (e.g. "256.0 KB").
3573
- */
3574
- function formatBytes$1(n) {
3575
- if (n < 1024) return `${n} B`;
3576
- if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)} KB`;
3577
- return `${(n / 1024 / 1024).toFixed(2)} MB`;
3578
- }
3579
- /**
3580
- * Create a gzipped tarball from a directory.
3581
- */
3582
- async function createTarball(sourceDir, outputPath) {
3583
- const { createGzip } = await import("node:zlib");
3584
- await pipeline(packTar(sourceDir), createGzip({ level: 9 }), createWriteStream(outputPath));
3585
- }
3586
-
3587
- //#endregion
3588
- //#region src/cli/commands/bundle.ts
3589
- /**
3590
- * emdash plugin bundle
3591
- *
3592
- * Produces a publishable plugin tarball from a plugin source directory.
3593
- *
3594
- * Steps:
3595
- * 1. Resolve plugin entrypoint (finds definePlugin() export)
3596
- * 2. Bundle backend code with tsdown → backend.js (single ES module, tree-shaken)
3597
- * 3. Bundle admin code if present → admin.js
3598
- * 4. Extract manifest from definePlugin() → manifest.json
3599
- * 5. Collect assets (README.md, icon.png, screenshots/)
3600
- * 6. Validate bundle (manifest schema, size limits, no Node.js builtins)
3601
- * 7. Create tarball ({id}-{version}.tar.gz)
3602
- */
3603
- var bundle_exports = /* @__PURE__ */ __exportAll({ bundleCommand: () => bundleCommand });
3604
- const TS_EXT_RE = /\.(tsx?|[mc]?js)$/;
3605
- const SLASH_RE = /\//g;
3606
- const LEADING_AT_RE = /^@/;
3607
- const emdash_SCOPE_RE = /^@emdash-cms\//;
3608
- const bundleCommand = defineCommand({
3609
- meta: {
3610
- name: "bundle",
3611
- description: "Bundle a plugin for marketplace distribution"
3612
- },
3613
- args: {
3614
- dir: {
3615
- type: "string",
3616
- description: "Plugin directory (default: current directory)",
3617
- default: process.cwd()
3618
- },
3619
- outDir: {
3620
- type: "string",
3621
- alias: "o",
3622
- description: "Output directory for the tarball (default: ./dist)",
3623
- default: "dist"
3624
- },
3625
- validateOnly: {
3626
- type: "boolean",
3627
- description: "Run validation only, skip tarball creation",
3628
- default: false
3629
- }
3630
- },
3631
- async run({ args }) {
3632
- const pluginDir = resolve(args.dir);
3633
- const outDir = resolve(pluginDir, args.outDir);
3634
- const validateOnly = args.validateOnly;
3635
- consola.start(validateOnly ? "Validating plugin..." : "Bundling plugin...");
3636
- const pkgPath = join(pluginDir, "package.json");
3637
- if (!await fileExists$1(pkgPath)) {
3638
- consola.error("No package.json found in", pluginDir);
3639
- process.exit(1);
3640
- }
3641
- const pkg = JSON.parse(await readFile(pkgPath, "utf-8"));
3642
- let backendEntry;
3643
- let adminEntry;
3644
- if (pkg.exports) {
3645
- const sandboxExport = pkg.exports["./sandbox"];
3646
- if (typeof sandboxExport === "string") backendEntry = await resolveSourceEntry(pluginDir, sandboxExport);
3647
- else if (sandboxExport && typeof sandboxExport === "object" && "import" in sandboxExport) backendEntry = await resolveSourceEntry(pluginDir, sandboxExport.import);
3648
- const adminExport = pkg.exports["./admin"];
3649
- if (typeof adminExport === "string") adminEntry = await resolveSourceEntry(pluginDir, adminExport);
3650
- else if (adminExport && typeof adminExport === "object" && "import" in adminExport) adminEntry = await resolveSourceEntry(pluginDir, adminExport.import);
3651
- }
3652
- if (!backendEntry) {
3653
- const defaultSandbox = join(pluginDir, "src/sandbox-entry.ts");
3654
- if (await fileExists$1(defaultSandbox)) backendEntry = defaultSandbox;
3655
- }
3656
- let mainEntry;
3657
- if (pkg.exports?.["."] !== void 0) {
3658
- const mainExport = pkg.exports["."];
3659
- if (typeof mainExport === "string") mainEntry = await resolveSourceEntry(pluginDir, mainExport);
3660
- else if (mainExport && typeof mainExport === "object" && "import" in mainExport) mainEntry = await resolveSourceEntry(pluginDir, mainExport.import);
3661
- }
3662
- if (!mainEntry && pkg.main) mainEntry = await resolveSourceEntry(pluginDir, pkg.main);
3663
- if (!mainEntry) {
3664
- const defaultMain = join(pluginDir, "src/index.ts");
3665
- if (await fileExists$1(defaultMain)) mainEntry = defaultMain;
3666
- }
3667
- if (!mainEntry) {
3668
- consola.error("Cannot find plugin entrypoint. Expected src/index.ts or main/exports in package.json");
3669
- process.exit(1);
3670
- }
3671
- consola.info(`Main entry: ${mainEntry}`);
3672
- if (backendEntry) consola.info(`Backend entry: ${backendEntry}`);
3673
- if (adminEntry) consola.info(`Admin entry: ${adminEntry}`);
3674
- consola.start("Extracting plugin manifest...");
3675
- const { build } = await import("tsdown");
3676
- const tmpDir = join(pluginDir, ".emdash-bundle-tmp");
3677
- try {
3678
- await rm(tmpDir, {
3679
- recursive: true,
3680
- force: true
3681
- });
3682
- await mkdir(tmpDir, { recursive: true });
3683
- const mainOutDir = join(tmpDir, "main");
3684
- await build({
3685
- config: false,
3686
- entry: [mainEntry],
3687
- format: "esm",
3688
- outDir: mainOutDir,
3689
- dts: false,
3690
- platform: "node",
3691
- external: ["emdash", emdash_SCOPE_RE]
3692
- });
3693
- const pluginNodeModules = join(pluginDir, "node_modules");
3694
- const tmpNodeModules = join(mainOutDir, "node_modules");
3695
- if (await fileExists$1(pluginNodeModules)) await symlink(pluginNodeModules, tmpNodeModules, "junction");
3696
- const mainOutputPath = await findBuildOutput(mainOutDir, basename(mainEntry).replace(TS_EXT_RE, ""));
3697
- if (!mainOutputPath) {
3698
- consola.error("Failed to build main entry — no output found in", mainOutDir);
3699
- process.exit(1);
3700
- }
3701
- const pluginModule = await import(toFileImportSpecifier(mainOutputPath));
3702
- let resolvedPlugin;
3703
- if (typeof pluginModule.createPlugin === "function") resolvedPlugin = pluginModule.createPlugin();
3704
- else if (typeof pluginModule.default === "function") resolvedPlugin = pluginModule.default();
3705
- else if (typeof pluginModule.default === "object" && pluginModule.default !== null) {
3706
- const defaultExport = pluginModule.default;
3707
- if ("id" in defaultExport && "version" in defaultExport) resolvedPlugin = defaultExport;
3708
- }
3709
- if (!resolvedPlugin) for (const [key, value] of Object.entries(pluginModule)) {
3710
- if (key === "default" || typeof value !== "function") continue;
3711
- try {
3712
- const result = value();
3713
- if (result && typeof result === "object" && "id" in result && "version" in result) {
3714
- resolvedPlugin = {
3715
- id: result.id,
3716
- version: result.version,
3717
- capabilities: result.capabilities ?? [],
3718
- allowedHosts: result.allowedHosts ?? [],
3719
- storage: result.storage ?? {},
3720
- hooks: {},
3721
- routes: {},
3722
- admin: {
3723
- pages: result.adminPages,
3724
- widgets: result.adminWidgets
3725
- }
3726
- };
3727
- if (backendEntry) {
3728
- const backendProbeDir = join(tmpDir, "backend-probe");
3729
- const probeShimDir = join(tmpDir, "probe-shims");
3730
- await mkdir(probeShimDir, { recursive: true });
3731
- await writeFile(join(probeShimDir, "emdash.mjs"), "export const definePlugin = (d) => d;\n");
3732
- await build({
3733
- config: false,
3734
- entry: [backendEntry],
3735
- format: "esm",
3736
- outDir: backendProbeDir,
3737
- dts: false,
3738
- platform: "neutral",
3739
- external: [],
3740
- alias: { emdash: join(probeShimDir, "emdash.mjs") },
3741
- treeshake: true
3742
- });
3743
- const backendProbePath = await findBuildOutput(backendProbeDir, basename(backendEntry).replace(TS_EXT_RE, ""));
3744
- if (backendProbePath) {
3745
- const standardDef = (await import(toFileImportSpecifier(backendProbePath))).default ?? {};
3746
- const hooks = standardDef.hooks;
3747
- const routes = standardDef.routes;
3748
- if (hooks) for (const hookName of Object.keys(hooks)) {
3749
- const hookEntry = hooks[hookName];
3750
- const isConfig = typeof hookEntry === "object" && hookEntry !== null && "handler" in hookEntry;
3751
- const config = isConfig ? hookEntry : {};
3752
- resolvedPlugin.hooks[hookName] = {
3753
- handler: isConfig ? hookEntry.handler : hookEntry,
3754
- priority: config.priority ?? 100,
3755
- timeout: config.timeout ?? 5e3,
3756
- dependencies: config.dependencies ?? [],
3757
- errorPolicy: config.errorPolicy ?? "abort",
3758
- exclusive: config.exclusive ?? false,
3759
- pluginId: result.id
3760
- };
3761
- }
3762
- if (routes) for (const [name, route] of Object.entries(routes)) {
3763
- const routeObj = typeof route === "object" && route !== null ? route : {};
3764
- resolvedPlugin.routes[name] = {
3765
- handler: typeof route === "function" ? route : routeObj.handler,
3766
- ...extractRouteOptions(route)
3767
- };
3768
- }
3769
- }
3770
- }
3771
- break;
3772
- }
3773
- } catch (error) {
3774
- if (resolvedPlugin) throw error;
3775
- }
3776
- }
3777
- if (!resolvedPlugin?.id || !resolvedPlugin?.version) {
3778
- consola.error("Could not extract plugin definition. Expected one of:\n - createPlugin() export (native format)\n - Descriptor factory function returning { id, version, ... } (standard format)");
3779
- process.exit(1);
3780
- }
3781
- const manifest = extractManifest(resolvedPlugin);
3782
- if (resolvedPlugin.admin?.entry) {
3783
- consola.error("Plugin declares adminEntry — React admin components require native/trusted mode. Use Block Kit for sandboxed admin pages, or remove adminEntry.");
3784
- process.exit(1);
3785
- }
3786
- if (resolvedPlugin.admin?.portableTextBlocks && resolvedPlugin.admin.portableTextBlocks.length > 0) {
3787
- consola.error("Plugin declares portableTextBlocks — these require native/trusted mode and cannot be bundled for the marketplace.");
3788
- process.exit(1);
3789
- }
3790
- consola.success(`Plugin: ${manifest.id}@${manifest.version}`);
3791
- consola.info(` Capabilities: ${manifest.capabilities.length > 0 ? manifest.capabilities.join(", ") : "(none)"}`);
3792
- consola.info(` Hooks: ${manifest.hooks.length > 0 ? manifest.hooks.map((h) => typeof h === "string" ? h : h.name).join(", ") : "(none)"}`);
3793
- consola.info(` Routes: ${manifest.routes.length > 0 ? manifest.routes.map((r) => typeof r === "string" ? r : r.name).join(", ") : "(none)"}`);
3794
- const bundleDir = join(tmpDir, "bundle");
3795
- await mkdir(bundleDir, { recursive: true });
3796
- if (backendEntry) {
3797
- consola.start("Bundling backend...");
3798
- const shimDir = join(tmpDir, "shims");
3799
- await mkdir(shimDir, { recursive: true });
3800
- await writeFile(join(shimDir, "emdash.mjs"), "export const definePlugin = (d) => d;\n");
3801
- await build({
3802
- config: false,
3803
- entry: [backendEntry],
3804
- format: "esm",
3805
- outDir: join(tmpDir, "backend"),
3806
- dts: false,
3807
- platform: "neutral",
3808
- external: [],
3809
- alias: { emdash: join(shimDir, "emdash.mjs") },
3810
- minify: true,
3811
- treeshake: true
3812
- });
3813
- const backendBaseName = basename(backendEntry).replace(TS_EXT_RE, "");
3814
- const backendOutputPath = await findBuildOutput(join(tmpDir, "backend"), backendBaseName);
3815
- if (backendOutputPath) {
3816
- await copyFile(backendOutputPath, join(bundleDir, "backend.js"));
3817
- consola.success("Built backend.js");
3818
- } else {
3819
- consola.error("Backend build produced no output");
3820
- process.exit(1);
3821
- }
3822
- } else {
3823
- consola.warn("No sandbox entry found — bundle will have no backend.js");
3824
- consola.warn(" Add a \"sandbox-entry.ts\" in src/ or a \"./sandbox\" export in package.json");
3825
- }
3826
- if (adminEntry) {
3827
- consola.start("Bundling admin...");
3828
- await build({
3829
- config: false,
3830
- entry: [adminEntry],
3831
- format: "esm",
3832
- outDir: join(tmpDir, "admin"),
3833
- dts: false,
3834
- platform: "neutral",
3835
- external: [],
3836
- minify: true,
3837
- treeshake: true
3838
- });
3839
- const adminBaseName = basename(adminEntry).replace(TS_EXT_RE, "");
3840
- const adminOutputPath = await findBuildOutput(join(tmpDir, "admin"), adminBaseName);
3841
- if (adminOutputPath) {
3842
- await copyFile(adminOutputPath, join(bundleDir, "admin.js"));
3843
- consola.success("Built admin.js");
3844
- }
3845
- }
3846
- await writeFile(join(bundleDir, "manifest.json"), JSON.stringify(manifest, null, 2));
3847
- consola.start("Collecting assets...");
3848
- const readmePath = join(pluginDir, "README.md");
3849
- if (await fileExists$1(readmePath)) {
3850
- await copyFile(readmePath, join(bundleDir, "README.md"));
3851
- consola.success("Included README.md");
3852
- }
3853
- const iconPath = join(pluginDir, "icon.png");
3854
- if (await fileExists$1(iconPath)) {
3855
- const dims = readImageDimensions(await readFile(iconPath));
3856
- if (!dims) consola.warn("icon.png is not a valid PNG — skipping");
3857
- else if (dims[0] !== ICON_SIZE || dims[1] !== ICON_SIZE) {
3858
- consola.warn(`icon.png is ${dims[0]}x${dims[1]}, expected ${ICON_SIZE}x${ICON_SIZE} — including anyway`);
3859
- await copyFile(iconPath, join(bundleDir, "icon.png"));
3860
- } else {
3861
- await copyFile(iconPath, join(bundleDir, "icon.png"));
3862
- consola.success("Included icon.png");
3863
- }
3864
- }
3865
- const screenshotsDir = join(pluginDir, "screenshots");
3866
- if (await fileExists$1(screenshotsDir)) {
3867
- const screenshotFiles = (await readdir(screenshotsDir)).filter((f) => {
3868
- const ext = extname(f).toLowerCase();
3869
- return ext === ".png" || ext === ".jpg" || ext === ".jpeg";
3870
- }).toSorted().slice(0, MAX_SCREENSHOTS);
3871
- if (screenshotFiles.length > 0) {
3872
- await mkdir(join(bundleDir, "screenshots"), { recursive: true });
3873
- for (const file of screenshotFiles) {
3874
- const filePath = join(screenshotsDir, file);
3875
- const dims = readImageDimensions(await readFile(filePath));
3876
- if (!dims) {
3877
- consola.warn(`screenshots/${file} — cannot read dimensions, skipping`);
3878
- continue;
3879
- }
3880
- 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`);
3881
- await copyFile(filePath, join(bundleDir, "screenshots", file));
3882
- }
3883
- consola.success(`Included ${screenshotFiles.length} screenshot(s)`);
3884
- }
3885
- }
3886
- consola.start("Validating bundle...");
3887
- let hasErrors = false;
3888
- if (pkg.exports) for (const issue of findSourceExports(pkg.exports)) {
3889
- 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.`);
3890
- hasErrors = true;
3891
- }
3892
- const backendPath = join(bundleDir, "backend.js");
3893
- if (await fileExists$1(backendPath)) {
3894
- const builtins = findNodeBuiltinImports(await readFile(backendPath, "utf-8"));
3895
- if (builtins.length > 0) {
3896
- consola.error(`backend.js imports Node.js built-in modules: ${builtins.join(", ")}`);
3897
- consola.error("Sandboxed plugins cannot use Node.js APIs");
3898
- hasErrors = true;
3899
- }
3900
- }
3901
- const declaresUnrestricted = manifest.capabilities.includes("network:request:unrestricted") || manifest.capabilities.includes("network:fetch:any");
3902
- const declaresHostRestricted = manifest.capabilities.includes("network:request") || manifest.capabilities.includes("network:fetch");
3903
- if (declaresUnrestricted) consola.warn("Plugin declares unrestricted network access (network:request:unrestricted) — it can make requests to any host");
3904
- else if (declaresHostRestricted && manifest.allowedHosts.length === 0) consola.warn("Plugin declares network:request capability but no allowedHosts — all requests will be blocked");
3905
- const deprecatedCaps = manifest.capabilities.filter(isDeprecatedCapability);
3906
- if (deprecatedCaps.length > 0) {
3907
- consola.warn("Plugin uses deprecated capability names. Rename them before publishing:");
3908
- for (const cap of deprecatedCaps) {
3909
- const replacement = CAPABILITY_RENAMES[cap];
3910
- consola.warn(` ${cap} → ${replacement}`);
3911
- }
3912
- }
3913
- 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");
3914
- if (resolvedPlugin.admin?.entry) consola.warn("Plugin declares admin.entry — custom React components require trusted mode. Use Block Kit for sandboxed admin pages");
3915
- if (resolvedPlugin.hooks["page:fragments"]) consola.warn("Plugin declares page:fragments hook — this is trusted-only and will not work in sandboxed mode");
3916
- const hasAdminPages = (manifest.admin?.pages?.length ?? 0) > 0;
3917
- const hasAdminWidgets = (manifest.admin?.widgets?.length ?? 0) > 0;
3918
- if (hasAdminPages || hasAdminWidgets) {
3919
- if (!manifest.routes.map((r) => typeof r === "string" ? r : r.name).includes("admin")) {
3920
- 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.`);
3921
- hasErrors = true;
3922
- }
3923
- }
3924
- const bundleEntries = await collectBundleEntries(bundleDir);
3925
- const sizeViolations = validateBundleSize(bundleEntries);
3926
- if (sizeViolations.length > 0) {
3927
- for (const v of sizeViolations) consola.error(v);
3928
- hasErrors = true;
3929
- } else consola.info(`Bundle size: ${formatBytes$1(totalBundleBytes(bundleEntries))} across ${bundleEntries.length} file${bundleEntries.length === 1 ? "" : "s"}`);
3930
- if (hasErrors) {
3931
- consola.error("Bundle validation failed");
3932
- process.exit(1);
3933
- }
3934
- consola.success("Validation passed");
3935
- if (validateOnly) return;
3936
- await mkdir(outDir, { recursive: true });
3937
- const tarballName = `${manifest.id.replace(SLASH_RE, "-").replace(LEADING_AT_RE, "")}-${manifest.version}.tar.gz`;
3938
- const tarballPath = join(outDir, tarballName);
3939
- consola.start("Creating tarball...");
3940
- await createTarball(bundleDir, tarballPath);
3941
- const tarballSizeKB = ((await stat(tarballPath)).size / 1024).toFixed(1);
3942
- const tarballBuf = await readFile(tarballPath);
3943
- const checksum = createHash("sha256").update(tarballBuf).digest("hex");
3944
- consola.success(`Created ${tarballName} (${tarballSizeKB}KB)`);
3945
- consola.info(` SHA-256: ${checksum}`);
3946
- consola.info(` Path: ${tarballPath}`);
3947
- } finally {
3948
- if (tmpDir.endsWith(".emdash-bundle-tmp")) await rm(tmpDir, {
3949
- recursive: true,
3950
- force: true
3951
- });
3952
- }
3953
- }
3954
- });
3955
-
3956
3569
  //#endregion
3957
3570
  //#region src/cli/commands/plugin-init.ts
3958
3571
  /**
@@ -4013,7 +3626,7 @@ const pluginInitCommand = defineCommand({
4013
3626
  process.exit(1);
4014
3627
  }
4015
3628
  const srcDir = join(targetDir, "src");
4016
- if (await fileExists$1(join(targetDir, "package.json"))) {
3629
+ if (await fileExists$4(join(targetDir, "package.json"))) {
4017
3630
  consola.error(`package.json already exists in ${targetDir}`);
4018
3631
  process.exit(1);
4019
3632
  }
@@ -4495,7 +4108,7 @@ const publishCommand = defineCommand({
4495
4108
  const pluginDir = resolve(args.dir);
4496
4109
  try {
4497
4110
  const { runCommand } = await import("citty");
4498
- const { bundleCommand } = await Promise.resolve().then(() => bundle_exports);
4111
+ const { bundleCommand } = await import("../bundle-Db1iNMv_.mjs").then((n) => n.n);
4499
4112
  await runCommand(bundleCommand, { rawArgs: ["--dir", pluginDir] });
4500
4113
  } catch {
4501
4114
  consola.error("Build failed");