emdash 1.1.0 → 1.3.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 (1571) hide show
  1. package/dist/action-token-SK8zyN7w.mjs +26 -0
  2. package/dist/action-token-SK8zyN7w.mjs.map +1 -0
  3. package/dist/activation-Dim4YMM7.mjs +387 -0
  4. package/dist/activation-Dim4YMM7.mjs.map +1 -0
  5. package/dist/adapters-F_xorvWv.d.mts +173 -0
  6. package/dist/adapters-F_xorvWv.d.mts.map +1 -0
  7. package/dist/allowed-origins-CEug-p0t.mjs +116 -0
  8. package/dist/allowed-origins-CEug-p0t.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.d.mts.map +1 -1
  11. package/dist/api/route-utils.mjs +48 -46
  12. package/dist/api/route-utils.mjs.map +1 -1
  13. package/dist/api/schemas/index.d.mts +2 -2
  14. package/dist/api/schemas/index.mjs +10 -10
  15. package/dist/api-D-7BNHoz.mjs +5025 -0
  16. package/dist/api-D-7BNHoz.mjs.map +1 -0
  17. package/dist/api-tokens-Bx38ZCQp.mjs +173 -0
  18. package/dist/api-tokens-Bx38ZCQp.mjs.map +1 -0
  19. package/dist/apply-T7ATgzCh.mjs +1702 -0
  20. package/dist/apply-T7ATgzCh.mjs.map +1 -0
  21. package/dist/approvals-D-m6wvGl.mjs +460 -0
  22. package/dist/approvals-D-m6wvGl.mjs.map +1 -0
  23. package/dist/artifact-fetch-DIh7iyOV.mjs +659 -0
  24. package/dist/artifact-fetch-DIh7iyOV.mjs.map +1 -0
  25. package/dist/artifacts-htGyfCSt.mjs +307 -0
  26. package/dist/artifacts-htGyfCSt.mjs.map +1 -0
  27. package/dist/astro/image-endpoint.d.mts.map +1 -1
  28. package/dist/astro/image-endpoint.mjs +26 -6
  29. package/dist/astro/image-endpoint.mjs.map +1 -1
  30. package/dist/astro/index.d.mts +14 -14
  31. package/dist/astro/index.d.mts.map +1 -1
  32. package/dist/astro/index.mjs +324 -23
  33. package/dist/astro/index.mjs.map +1 -1
  34. package/dist/astro/middleware/auth.d.mts +12 -12
  35. package/dist/astro/middleware/auth.d.mts.map +1 -1
  36. package/dist/astro/middleware/auth.mjs +18 -13
  37. package/dist/astro/middleware/auth.mjs.map +1 -1
  38. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  39. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  40. package/dist/astro/middleware/redirect.mjs +81 -46
  41. package/dist/astro/middleware/redirect.mjs.map +1 -1
  42. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  43. package/dist/astro/middleware/request-context.mjs +117 -56
  44. package/dist/astro/middleware/request-context.mjs.map +1 -1
  45. package/dist/astro/middleware/setup.mjs +1 -1
  46. package/dist/astro/middleware.d.mts +12 -12
  47. package/dist/astro/middleware.d.mts.map +1 -1
  48. package/dist/astro/middleware.mjs +145 -415
  49. package/dist/astro/middleware.mjs.map +1 -1
  50. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
  51. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
  52. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +7 -6
  53. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs.map +1 -1
  54. package/dist/astro/routes/api/admin/api-tokens/index.mjs +8 -7
  55. package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
  56. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
  57. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +16 -16
  58. package/dist/astro/routes/api/admin/byline-fields/index.mjs +16 -16
  59. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +16 -16
  60. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +22 -21
  61. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  62. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +22 -21
  63. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  64. package/dist/astro/routes/api/admin/bylines/index.mjs +22 -21
  65. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  66. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
  67. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
  68. package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
  69. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
  70. package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
  71. package/dist/astro/routes/api/admin/core-update.mjs +7 -7
  72. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  73. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  74. package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
  75. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +21 -21
  76. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +21 -21
  77. package/dist/astro/routes/api/admin/media-usage/progress.mjs +23 -22
  78. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  79. package/dist/astro/routes/api/admin/media-usage/repair.mjs +29 -28
  80. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  81. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +21 -21
  82. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +21 -21
  83. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  84. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  85. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  86. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  87. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -70
  88. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  89. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  90. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -69
  91. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  92. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +71 -70
  93. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +80 -79
  95. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/plugins/index.mjs +72 -70
  97. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  98. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +7 -7
  99. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -69
  100. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  101. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +79 -78
  102. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  103. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -69
  104. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  105. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +71 -70
  106. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  107. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +81 -80
  108. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  109. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +10 -10
  110. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  111. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +73 -72
  112. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  113. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  114. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -70
  115. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  116. package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -69
  117. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  118. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +5 -5
  119. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -69
  120. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  121. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +7 -7
  122. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -69
  123. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  125. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +38 -37
  126. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
  127. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +38 -37
  128. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +40 -39
  130. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
  131. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +40 -39
  132. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
  133. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +40 -39
  134. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
  135. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +41 -40
  136. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
  137. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +41 -40
  138. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
  139. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +40 -39
  140. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
  141. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +41 -40
  142. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
  143. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +42 -41
  144. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
  145. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +40 -39
  146. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
  147. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +40 -39
  148. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
  149. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +42 -41
  150. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
  151. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +40 -39
  152. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
  153. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +42 -41
  154. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
  155. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +40 -39
  156. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
  157. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +40 -39
  158. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
  159. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +42 -41
  160. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
  161. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +40 -39
  162. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
  163. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +40 -39
  164. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
  165. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +42 -41
  166. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
  167. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
  168. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  169. package/dist/astro/routes/api/admin/users/_id_/index.mjs +14 -14
  170. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  171. package/dist/astro/routes/api/admin/users/index.mjs +14 -14
  172. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  173. package/dist/astro/routes/api/auth/handover.d.mts +8 -0
  174. package/dist/astro/routes/api/auth/handover.d.mts.map +1 -0
  175. package/dist/astro/routes/api/auth/handover.mjs +49 -0
  176. package/dist/astro/routes/api/auth/handover.mjs.map +1 -0
  177. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  178. package/dist/astro/routes/api/auth/invite/complete.mjs +19 -19
  179. package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
  180. package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
  181. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  182. package/dist/astro/routes/api/auth/magic-link/send.mjs +19 -18
  183. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  184. package/dist/astro/routes/api/auth/magic-link/verify.d.mts.map +1 -1
  185. package/dist/astro/routes/api/auth/magic-link/verify.mjs +23 -17
  186. package/dist/astro/routes/api/auth/magic-link/verify.mjs.map +1 -1
  187. package/dist/astro/routes/api/auth/me.mjs +15 -15
  188. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  189. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +8 -8
  190. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  191. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -14
  192. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  193. package/dist/astro/routes/api/auth/passkey/options.d.mts.map +1 -1
  194. package/dist/astro/routes/api/auth/passkey/options.mjs +27 -20
  195. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
  196. package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
  197. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
  198. package/dist/astro/routes/api/auth/passkey/verify.mjs +19 -19
  199. package/dist/astro/routes/api/auth/signup/complete.mjs +19 -19
  200. package/dist/astro/routes/api/auth/signup/request.mjs +18 -17
  201. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  202. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  203. package/dist/astro/routes/api/calendar.mjs +15 -15
  204. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
  205. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
  206. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  207. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
  208. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -17
  209. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  210. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +7 -10
  211. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
  212. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +20 -17
  213. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  214. package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts.map +1 -1
  215. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +7 -6
  216. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -1
  217. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
  218. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +30 -29
  219. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  220. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
  221. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -17
  222. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  223. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +35 -34
  224. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  225. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +35 -34
  226. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  227. package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts.map +1 -1
  228. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +7 -6
  229. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
  230. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  231. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
  232. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +19 -18
  233. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  234. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
  235. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +31 -26
  236. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  237. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  238. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
  239. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -17
  240. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  241. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  242. package/dist/astro/routes/api/content/_collection_/_id_.mjs +27 -20
  243. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  244. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  245. package/dist/astro/routes/api/content/_collection_/index.mjs +18 -21
  246. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  247. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
  248. package/dist/astro/routes/api/dashboard.d.mts.map +1 -1
  249. package/dist/astro/routes/api/dashboard.mjs +18 -12
  250. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  251. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  252. package/dist/astro/routes/api/dev/scheduled-tasks.d.mts +12 -0
  253. package/dist/astro/routes/api/dev/scheduled-tasks.d.mts.map +1 -0
  254. package/dist/astro/routes/api/dev/scheduled-tasks.mjs +140 -0
  255. package/dist/astro/routes/api/dev/scheduled-tasks.mjs.map +1 -0
  256. package/dist/astro/routes/api/health.mjs +6 -6
  257. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  258. package/dist/astro/routes/api/import/probe.mjs +25 -23
  259. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  260. package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -1
  261. package/dist/astro/routes/api/import/wordpress/analyze.mjs +7 -20
  262. package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
  263. package/dist/astro/routes/api/import/wordpress/execute.d.mts +15 -14
  264. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  265. package/dist/astro/routes/api/import/wordpress/execute.mjs +36 -30
  266. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  267. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  268. package/dist/astro/routes/api/import/wordpress/media.mjs +17 -17
  269. package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -17
  270. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  271. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts +8 -0
  272. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts.map +1 -1
  273. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs +67 -31
  274. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs.map +1 -1
  275. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  276. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +27 -26
  277. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  278. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  279. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +26 -23
  280. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  281. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  282. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  283. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +63 -35
  284. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  285. package/dist/astro/routes/api/manifest.mjs +9 -6
  286. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  287. package/dist/astro/routes/api/mcp.mjs +135 -101
  288. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  289. package/dist/astro/routes/api/media/_id_/confirm.d.mts.map +1 -1
  290. package/dist/astro/routes/api/media/_id_/confirm.mjs +34 -18
  291. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  292. package/dist/astro/routes/api/media/_id_/replace.mjs +15 -15
  293. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -8
  294. package/dist/astro/routes/api/media/_id_/usage.mjs +31 -30
  295. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  296. package/dist/astro/routes/api/media/_id_.mjs +29 -28
  297. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  298. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  299. package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
  300. package/dist/astro/routes/api/media/file/_...key_.mjs +45 -15
  301. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
  302. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
  303. package/dist/astro/routes/api/media/folders/index.mjs +16 -16
  304. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  305. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  306. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  307. package/dist/astro/routes/api/media/upload-url.mjs +40 -20
  308. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  309. package/dist/astro/routes/api/media.d.mts.map +1 -1
  310. package/dist/astro/routes/api/media.mjs +40 -29
  311. package/dist/astro/routes/api/media.mjs.map +1 -1
  312. package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
  313. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +19 -18
  314. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  315. package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
  316. package/dist/astro/routes/api/menus/_name_/items.mjs +18 -17
  317. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  318. package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
  319. package/dist/astro/routes/api/menus/_name_/reorder.mjs +18 -17
  320. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  321. package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
  322. package/dist/astro/routes/api/menus/_name_/translations.mjs +18 -17
  323. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  324. package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
  325. package/dist/astro/routes/api/menus/_name_.mjs +19 -18
  326. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  327. package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
  328. package/dist/astro/routes/api/menus/index.mjs +18 -17
  329. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  330. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  331. package/dist/astro/routes/api/oauth/device/authorize.mjs +8 -8
  332. package/dist/astro/routes/api/oauth/device/code.mjs +12 -11
  333. package/dist/astro/routes/api/oauth/device/code.mjs.map +1 -1
  334. package/dist/astro/routes/api/oauth/device/token.mjs +11 -10
  335. package/dist/astro/routes/api/oauth/device/token.mjs.map +1 -1
  336. package/dist/astro/routes/api/oauth/register.mjs +8 -7
  337. package/dist/astro/routes/api/oauth/register.mjs.map +1 -1
  338. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  339. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  340. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  341. package/dist/astro/routes/api/openapi.json.mjs +22 -22
  342. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  343. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
  344. package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
  345. package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
  346. package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -1
  347. package/dist/astro/routes/api/redirects/_id_.mjs +32 -23
  348. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  349. package/dist/astro/routes/api/redirects/index.d.mts.map +1 -1
  350. package/dist/astro/routes/api/redirects/index.mjs +24 -21
  351. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  352. package/dist/astro/routes/api/relations/_id_/index.mjs +35 -34
  353. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  354. package/dist/astro/routes/api/relations/index.mjs +35 -34
  355. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  356. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  357. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +16 -16
  358. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +71 -69
  359. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  360. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +71 -69
  361. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  362. package/dist/astro/routes/api/schema/block-types/index.mjs +71 -69
  363. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  364. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +71 -69
  365. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  366. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +71 -69
  367. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  368. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +71 -69
  369. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  370. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -69
  371. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  372. package/dist/astro/routes/api/schema/collections/index.mjs +71 -69
  373. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  374. package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -69
  375. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  376. package/dist/astro/routes/api/schema/index.mjs +17 -16
  377. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  378. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -69
  379. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  380. package/dist/astro/routes/api/schema/orphans/index.mjs +71 -69
  381. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  382. package/dist/astro/routes/api/search/enable.mjs +19 -18
  383. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  384. package/dist/astro/routes/api/search/index.mjs +18 -17
  385. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  386. package/dist/astro/routes/api/search/rebuild.mjs +19 -18
  387. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  388. package/dist/astro/routes/api/search/stats.mjs +9 -8
  389. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  390. package/dist/astro/routes/api/search/suggest.mjs +18 -17
  391. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  392. package/dist/astro/routes/api/sections/_slug_.mjs +18 -17
  393. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  394. package/dist/astro/routes/api/sections/index.mjs +18 -17
  395. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  396. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  397. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  398. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  399. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  400. package/dist/astro/routes/api/settings/domain-notify.d.mts +8 -0
  401. package/dist/astro/routes/api/settings/domain-notify.d.mts.map +1 -0
  402. package/dist/astro/routes/api/settings/domain-notify.mjs +125 -0
  403. package/dist/astro/routes/api/settings/domain-notify.mjs.map +1 -0
  404. package/dist/astro/routes/api/settings/domain.d.mts +9 -0
  405. package/dist/astro/routes/api/settings/domain.d.mts.map +1 -0
  406. package/dist/astro/routes/api/settings/domain.mjs +64 -0
  407. package/dist/astro/routes/api/settings/domain.mjs.map +1 -0
  408. package/dist/astro/routes/api/settings/email.mjs +6 -6
  409. package/dist/astro/routes/api/settings.d.mts.map +1 -1
  410. package/dist/astro/routes/api/settings.mjs +23 -20
  411. package/dist/astro/routes/api/settings.mjs.map +1 -1
  412. package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -1
  413. package/dist/astro/routes/api/setup/admin-verify.mjs +25 -21
  414. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  415. package/dist/astro/routes/api/setup/admin.mjs +18 -18
  416. package/dist/astro/routes/api/setup/dev-bypass.mjs +43 -41
  417. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  418. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  419. package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
  420. package/dist/astro/routes/api/setup/index.mjs +53 -47
  421. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  422. package/dist/astro/routes/api/setup/status.mjs +6 -6
  423. package/dist/astro/routes/api/site/domain-proof.d.mts +8 -0
  424. package/dist/astro/routes/api/site/domain-proof.d.mts.map +1 -0
  425. package/dist/astro/routes/api/site/domain-proof.mjs +35 -0
  426. package/dist/astro/routes/api/site/domain-proof.mjs.map +1 -0
  427. package/dist/astro/routes/api/snapshot.mjs +8 -8
  428. package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
  429. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +24 -22
  430. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  431. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
  432. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +24 -22
  433. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  434. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
  435. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -23
  436. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  437. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
  438. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +24 -22
  439. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  440. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -21
  441. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  442. package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
  443. package/dist/astro/routes/api/taxonomies/_name_.mjs +25 -23
  444. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  445. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +35 -34
  446. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  447. package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
  448. package/dist/astro/routes/api/taxonomies/index.mjs +24 -22
  449. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  450. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  451. package/dist/astro/routes/api/typegen.mjs +6 -6
  452. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  453. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +18 -18
  454. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  455. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  456. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  457. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  458. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
  459. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +17 -16
  460. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  461. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
  462. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +21 -19
  463. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  464. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
  465. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -18
  466. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  467. package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
  468. package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -8
  469. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  470. package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
  471. package/dist/astro/routes/api/widget-areas/index.mjs +20 -18
  472. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  473. package/dist/astro/routes/api/widget-components.mjs +5 -5
  474. package/dist/astro/routes/robots.txt.d.mts.map +1 -1
  475. package/dist/astro/routes/robots.txt.mjs +38 -5
  476. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  477. package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -1
  478. package/dist/astro/routes/sitemap-_collection_.xml.mjs +33 -11
  479. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  480. package/dist/astro/routes/sitemap.xml.d.mts.map +1 -1
  481. package/dist/astro/routes/sitemap.xml.mjs +17 -11
  482. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  483. package/dist/astro/types.d.mts +32 -18
  484. package/dist/astro/types.d.mts.map +1 -1
  485. package/dist/audit-_gieLVGU.mjs +127 -0
  486. package/dist/audit-_gieLVGU.mjs.map +1 -0
  487. package/dist/auth/providers/github.d.mts +1 -1
  488. package/dist/auth/providers/google.d.mts +1 -1
  489. package/dist/auth/providers/microsoft.d.mts +1 -1
  490. package/dist/authoritative-records-CQlB3JzE.mjs +5183 -0
  491. package/dist/authoritative-records-CQlB3JzE.mjs.map +1 -0
  492. package/dist/authorize-DPFBGbE6.mjs +74 -0
  493. package/dist/authorize-DPFBGbE6.mjs.map +1 -0
  494. package/dist/backup-3FgVxiDJ.mjs +246 -0
  495. package/dist/backup-3FgVxiDJ.mjs.map +1 -0
  496. package/dist/block-types-CYcG56JB.mjs +132 -0
  497. package/dist/block-types-CYcG56JB.mjs.map +1 -0
  498. package/dist/block-values-gCX4HBSl.mjs +215 -0
  499. package/dist/block-values-gCX4HBSl.mjs.map +1 -0
  500. package/dist/byline-BR1qhyiw.mjs +909 -0
  501. package/dist/byline-BR1qhyiw.mjs.map +1 -0
  502. package/dist/byline-fields-4ClDC88c.mjs +123 -0
  503. package/dist/byline-fields-4ClDC88c.mjs.map +1 -0
  504. package/dist/byline-fields-BLXZnX7N.mjs +280 -0
  505. package/dist/byline-fields-BLXZnX7N.mjs.map +1 -0
  506. package/dist/bylines-CVOvRUL7.mjs +234 -0
  507. package/dist/bylines-CVOvRUL7.mjs.map +1 -0
  508. package/dist/bylines-DxOs9B7z.mjs +150 -0
  509. package/dist/bylines-DxOs9B7z.mjs.map +1 -0
  510. package/dist/cache-CEU9wo_h.mjs +151 -0
  511. package/dist/cache-CEU9wo_h.mjs.map +1 -0
  512. package/dist/canonical-BudtH-Fx.mjs +174 -0
  513. package/dist/canonical-BudtH-Fx.mjs.map +1 -0
  514. package/dist/capture-triggers-CT6dK9zd.mjs +362 -0
  515. package/dist/capture-triggers-CT6dK9zd.mjs.map +1 -0
  516. package/dist/challenge-store-C17BYx2-.mjs +51 -0
  517. package/dist/challenge-store-C17BYx2-.mjs.map +1 -0
  518. package/dist/checksum-CEqvfxGX.mjs +162 -0
  519. package/dist/checksum-CEqvfxGX.mjs.map +1 -0
  520. package/dist/chunks-xC4UD5-S.mjs +25 -0
  521. package/dist/chunks-xC4UD5-S.mjs.map +1 -0
  522. package/dist/cli/index.mjs +134 -118
  523. package/dist/cli/index.mjs.map +1 -1
  524. package/dist/client/cf-access.d.mts +1 -1
  525. package/dist/client/index.d.mts +122 -122
  526. package/dist/client/index.d.mts.map +1 -1
  527. package/dist/client/index.mjs +12 -10
  528. package/dist/client/index.mjs.map +1 -1
  529. package/dist/collection-slugs-cache-e09QeJQt.mjs +85 -0
  530. package/dist/collection-slugs-cache-e09QeJQt.mjs.map +1 -0
  531. package/dist/comment-UvIWDKcW.mjs +325 -0
  532. package/dist/comment-UvIWDKcW.mjs.map +1 -0
  533. package/dist/comment-reaction-dGp6_FRo.mjs +85 -0
  534. package/dist/comment-reaction-dGp6_FRo.mjs.map +1 -0
  535. package/dist/comments-pej-_BUO.mjs +195 -0
  536. package/dist/comments-pej-_BUO.mjs.map +1 -0
  537. package/dist/comments-yiRFx3w5.mjs +99 -0
  538. package/dist/comments-yiRFx3w5.mjs.map +1 -0
  539. package/dist/components-Brp__9xo.mjs +112 -0
  540. package/dist/components-Brp__9xo.mjs.map +1 -0
  541. package/dist/config-Bsm_u_oE.d.mts +6799 -0
  542. package/dist/config-Bsm_u_oE.d.mts.map +1 -0
  543. package/dist/config-CFMojMFK.d.mts +39 -0
  544. package/dist/config-CFMojMFK.d.mts.map +1 -0
  545. package/dist/config-DBU6iUQB.mjs +228 -0
  546. package/dist/config-DBU6iUQB.mjs.map +1 -0
  547. package/dist/connection-BtEN_lP9.mjs +36 -0
  548. package/dist/connection-BtEN_lP9.mjs.map +1 -0
  549. package/dist/content-DQSRZTVw.mjs +2075 -0
  550. package/dist/content-DQSRZTVw.mjs.map +1 -0
  551. package/dist/content-list-query-CYKcY6Vi.d.mts +26 -0
  552. package/dist/content-list-query-CYKcY6Vi.d.mts.map +1 -0
  553. package/dist/content-repair-DNh5--x5.mjs +442 -0
  554. package/dist/content-repair-DNh5--x5.mjs.map +1 -0
  555. package/dist/context-BYptmCN0.mjs +2090 -0
  556. package/dist/context-BYptmCN0.mjs.map +1 -0
  557. package/dist/credits-B9iORdWB.mjs +110 -0
  558. package/dist/credits-B9iORdWB.mjs.map +1 -0
  559. package/dist/cron-D7obTIfk.mjs +306 -0
  560. package/dist/cron-D7obTIfk.mjs.map +1 -0
  561. package/dist/dashboard-D0jcgBD7.mjs +167 -0
  562. package/dist/dashboard-D0jcgBD7.mjs.map +1 -0
  563. package/dist/database/migration-lock.d.mts +17 -4
  564. package/dist/database/migration-lock.d.mts.map +1 -1
  565. package/dist/database/migration-lock.mjs +32 -5
  566. package/dist/database/migration-lock.mjs.map +1 -1
  567. package/dist/db/index.d.mts +3 -3
  568. package/dist/db/index.mjs +1 -1
  569. package/dist/db/libsql-migrations.d.mts +1 -1
  570. package/dist/db/libsql-migrations.mjs +4 -4
  571. package/dist/db/libsql.d.mts +1 -1
  572. package/dist/db/postgres-migrations.d.mts +1 -1
  573. package/dist/db/postgres-migrations.mjs +4 -4
  574. package/dist/db/postgres.d.mts +1 -1
  575. package/dist/db/sqlite-migrations.d.mts +1 -1
  576. package/dist/db/sqlite-migrations.mjs +4 -4
  577. package/dist/db/sqlite.d.mts +1 -1
  578. package/dist/db/sqlite.mjs +1 -1
  579. package/dist/default-C0W-PhAp.mjs +81 -0
  580. package/dist/default-C0W-PhAp.mjs.map +1 -0
  581. package/dist/deferred-tasks-ZvUECSzI.d.mts +9 -0
  582. package/dist/deferred-tasks-ZvUECSzI.d.mts.map +1 -0
  583. package/dist/dev-typegen-EBni_pOQ.mjs +29 -0
  584. package/dist/dev-typegen-EBni_pOQ.mjs.map +1 -0
  585. package/dist/device-flow-BkFKBoAn.mjs +521 -0
  586. package/dist/device-flow-BkFKBoAn.mjs.map +1 -0
  587. package/dist/digest-DJ1tHCgy.mjs +194 -0
  588. package/dist/digest-DJ1tHCgy.mjs.map +1 -0
  589. package/dist/direct-executor-Cbxzg4qe.mjs +117 -0
  590. package/dist/direct-executor-Cbxzg4qe.mjs.map +1 -0
  591. package/dist/email-console-FFVJWb9N.mjs +50 -0
  592. package/dist/email-console-FFVJWb9N.mjs.map +1 -0
  593. package/dist/email-locale-BJ8DjTzZ.mjs +25 -0
  594. package/dist/email-locale-BJ8DjTzZ.mjs.map +1 -0
  595. package/dist/emdash-runtime-DVi7vtXC.mjs +4379 -0
  596. package/dist/emdash-runtime-DVi7vtXC.mjs.map +1 -0
  597. package/dist/entry-lock-C7VX0NGK.d.mts +4568 -0
  598. package/dist/entry-lock-C7VX0NGK.d.mts.map +1 -0
  599. package/dist/entry-lock-DLxCffFW.mjs +163 -0
  600. package/dist/entry-lock-DLxCffFW.mjs.map +1 -0
  601. package/dist/entry-lock-Df6-XhIu.mjs +1211 -0
  602. package/dist/entry-lock-Df6-XhIu.mjs.map +1 -0
  603. package/dist/env-types-C3FCVBWe.mjs +38 -0
  604. package/dist/env-types-C3FCVBWe.mjs.map +1 -0
  605. package/dist/error-CVWeIOku.mjs +90 -0
  606. package/dist/error-CVWeIOku.mjs.map +1 -0
  607. package/dist/errors-B4f4It-2.mjs +120 -0
  608. package/dist/errors-B4f4It-2.mjs.map +1 -0
  609. package/dist/errors-BOYNdIo3.mjs +479 -0
  610. package/dist/errors-BOYNdIo3.mjs.map +1 -0
  611. package/dist/escape-lsNq38PP.mjs +9 -0
  612. package/dist/escape-lsNq38PP.mjs.map +1 -0
  613. package/dist/fence-C3MUitUN.mjs +162 -0
  614. package/dist/fence-C3MUitUN.mjs.map +1 -0
  615. package/dist/field-defs-cache-Dez5iWJJ.mjs +77 -0
  616. package/dist/field-defs-cache-Dez5iWJJ.mjs.map +1 -0
  617. package/dist/field-map-Bft9LKak.mjs +83 -0
  618. package/dist/field-map-Bft9LKak.mjs.map +1 -0
  619. package/dist/fts-manager-Beg3e4bI.mjs +443 -0
  620. package/dist/fts-manager-Beg3e4bI.mjs.map +1 -0
  621. package/dist/gc-ByyAYiYE.mjs +75 -0
  622. package/dist/gc-ByyAYiYE.mjs.map +1 -0
  623. package/dist/hash-BJaeek87.mjs +37 -0
  624. package/dist/hash-BJaeek87.mjs.map +1 -0
  625. package/dist/hook-result-BrdLyOdI.d.mts +31 -0
  626. package/dist/hook-result-BrdLyOdI.d.mts.map +1 -0
  627. package/dist/hreflang-C8Jb-hrf.mjs +105 -0
  628. package/dist/hreflang-C8Jb-hrf.mjs.map +1 -0
  629. package/dist/hreflang-CY_F5OjF.d.mts +50 -0
  630. package/dist/hreflang-CY_F5OjF.d.mts.map +1 -0
  631. package/dist/http-route-dispatch-CyeW6iPv.mjs +342 -0
  632. package/dist/http-route-dispatch-CyeW6iPv.mjs.map +1 -0
  633. package/dist/identity-Cael5uTT.mjs +35 -0
  634. package/dist/identity-Cael5uTT.mjs.map +1 -0
  635. package/dist/import-BUXjdZUn.mjs +2126 -0
  636. package/dist/import-BUXjdZUn.mjs.map +1 -0
  637. package/dist/index-BB9sVisO.d.mts +623 -0
  638. package/dist/index-BB9sVisO.d.mts.map +1 -0
  639. package/dist/index.d.mts +24 -24
  640. package/dist/index.mjs +97 -95
  641. package/dist/install-finalization-3JX5qQEA.mjs +58 -0
  642. package/dist/install-finalization-3JX5qQEA.mjs.map +1 -0
  643. package/dist/json-recordset-BUjxhr77.mjs +12 -0
  644. package/dist/json-recordset-BUjxhr77.mjs.map +1 -0
  645. package/dist/json-schema-v_D_pPNG.mjs +15 -0
  646. package/dist/json-schema-v_D_pPNG.mjs.map +1 -0
  647. package/dist/keys-CifIkT0N.mjs +61 -0
  648. package/dist/keys-CifIkT0N.mjs.map +1 -0
  649. package/dist/kinds-B_Qcl5pz.mjs +974 -0
  650. package/dist/kinds-B_Qcl5pz.mjs.map +1 -0
  651. package/dist/lifecycle-7vUJeFRe.mjs +25 -0
  652. package/dist/lifecycle-7vUJeFRe.mjs.map +1 -0
  653. package/dist/load-CdAG9wz-.mjs +28 -0
  654. package/dist/load-CdAG9wz-.mjs.map +1 -0
  655. package/dist/loader-CswroUbe.mjs +1380 -0
  656. package/dist/loader-CswroUbe.mjs.map +1 -0
  657. package/dist/loops-uA4iTOzd.mjs +205 -0
  658. package/dist/loops-uA4iTOzd.mjs.map +1 -0
  659. package/dist/manifest-builder-B8zjuH3f.mjs +189 -0
  660. package/dist/manifest-builder-B8zjuH3f.mjs.map +1 -0
  661. package/dist/manifest-schema-DNb4XmTS.mjs +497 -0
  662. package/dist/manifest-schema-DNb4XmTS.mjs.map +1 -0
  663. package/dist/marketplace-CqbgeIa7.mjs +257 -0
  664. package/dist/marketplace-CqbgeIa7.mjs.map +1 -0
  665. package/dist/media/image-endpoint.d.mts +26 -2
  666. package/dist/media/image-endpoint.d.mts.map +1 -1
  667. package/dist/media/image-endpoint.mjs +73 -3
  668. package/dist/media/image-endpoint.mjs.map +1 -1
  669. package/dist/media/index.d.mts +1 -1
  670. package/dist/media/local-runtime.d.mts +14 -14
  671. package/dist/media/local-runtime.mjs +10 -5
  672. package/dist/media/local-runtime.mjs.map +1 -1
  673. package/dist/media--dJRU6i2.mjs +294 -0
  674. package/dist/media--dJRU6i2.mjs.map +1 -0
  675. package/dist/media-1WC65OCB.mjs +416 -0
  676. package/dist/media-1WC65OCB.mjs.map +1 -0
  677. package/dist/media-Bws9f18T.mjs +373 -0
  678. package/dist/media-Bws9f18T.mjs.map +1 -0
  679. package/dist/media-allowlist-BJB7MFx6.mjs +45 -0
  680. package/dist/media-allowlist-BJB7MFx6.mjs.map +1 -0
  681. package/dist/media-folders-Dn3C16B8.mjs +210 -0
  682. package/dist/media-folders-Dn3C16B8.mjs.map +1 -0
  683. package/dist/media-url-BQgKvpQ5.mjs +43 -0
  684. package/dist/media-url-BQgKvpQ5.mjs.map +1 -0
  685. package/dist/media-usage-CF0WVcLO.mjs +282 -0
  686. package/dist/media-usage-CF0WVcLO.mjs.map +1 -0
  687. package/dist/media-usage-activation-C9HwVw5w.mjs +78 -0
  688. package/dist/media-usage-activation-C9HwVw5w.mjs.map +1 -0
  689. package/dist/media-usage-work-CkLa5-nc.mjs +1036 -0
  690. package/dist/media-usage-work-CkLa5-nc.mjs.map +1 -0
  691. package/dist/media-usage-work-m3AWTmmC.mjs +151 -0
  692. package/dist/media-usage-work-m3AWTmmC.mjs.map +1 -0
  693. package/dist/menus-BCVSSp1z.mjs +753 -0
  694. package/dist/menus-BCVSSp1z.mjs.map +1 -0
  695. package/dist/menus-BSzwObhV.mjs +92 -0
  696. package/dist/menus-BSzwObhV.mjs.map +1 -0
  697. package/dist/menus-Cl4kwdt7.mjs +3721 -0
  698. package/dist/menus-Cl4kwdt7.mjs.map +1 -0
  699. package/dist/migrations/index.d.mts +1 -1
  700. package/dist/migrations/index.d.mts.map +1 -1
  701. package/dist/migrations/index.mjs +3 -3
  702. package/dist/mode-C-D3qICy.mjs +23 -0
  703. package/dist/mode-C-D3qICy.mjs.map +1 -0
  704. package/dist/node-sqlite-compat-CrKzRr0J.mjs +63 -0
  705. package/dist/node-sqlite-compat-CrKzRr0J.mjs.map +1 -0
  706. package/dist/oauth-authorization-TpEJrYB7.mjs +274 -0
  707. package/dist/oauth-authorization-TpEJrYB7.mjs.map +1 -0
  708. package/dist/oauth-clients-BT0Pg-MO.mjs +266 -0
  709. package/dist/oauth-clients-BT0Pg-MO.mjs.map +1 -0
  710. package/dist/oauth-state-store-CHMn_mwc.mjs +50 -0
  711. package/dist/oauth-state-store-CHMn_mwc.mjs.map +1 -0
  712. package/dist/oauth-user-lookup-BDgF6IVG.mjs +26 -0
  713. package/dist/oauth-user-lookup-BDgF6IVG.mjs.map +1 -0
  714. package/dist/object-cache/memory.d.mts +1 -1
  715. package/dist/options-DJWaq3Ie.d.mts +81 -0
  716. package/dist/options-DJWaq3Ie.d.mts.map +1 -0
  717. package/dist/ownership-MiyA7qKO.mjs +12 -0
  718. package/dist/ownership-MiyA7qKO.mjs.map +1 -0
  719. package/dist/page/index.d.mts +2 -2
  720. package/dist/page/index.mjs +9 -4
  721. package/dist/page/index.mjs.map +1 -1
  722. package/dist/parse-CWHOFc6z.d.mts +176 -0
  723. package/dist/parse-CWHOFc6z.d.mts.map +1 -0
  724. package/dist/parse-DgQ2NABT.mjs +81 -0
  725. package/dist/parse-DgQ2NABT.mjs.map +1 -0
  726. package/dist/passkey-config-D0kdzEao.mjs +46 -0
  727. package/dist/passkey-config-D0kdzEao.mjs.map +1 -0
  728. package/dist/paths-biDzFTY2.mjs +77 -0
  729. package/dist/paths-biDzFTY2.mjs.map +1 -0
  730. package/dist/patterns-CMNnYCgf.mjs +159 -0
  731. package/dist/patterns-CMNnYCgf.mjs.map +1 -0
  732. package/dist/placeholder-D41vk11_.d.mts +306 -0
  733. package/dist/placeholder-D41vk11_.d.mts.map +1 -0
  734. package/dist/plan-CCoqxNoU.mjs +135 -0
  735. package/dist/plan-CCoqxNoU.mjs.map +1 -0
  736. package/dist/plugin-test-runtime.d.mts +14 -14
  737. package/dist/plugin-test-runtime.d.mts.map +1 -1
  738. package/dist/plugin-test-runtime.mjs +110 -108
  739. package/dist/plugin-tool-name-DDUgN_0p.mjs +27 -0
  740. package/dist/plugin-tool-name-DDUgN_0p.mjs.map +1 -0
  741. package/dist/plugin-types.d.mts +2 -2
  742. package/dist/plugin-utils.d.mts +12 -12
  743. package/dist/plugin-utils.mjs +1 -1
  744. package/dist/plugin-utils.mjs.map +1 -1
  745. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  746. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  747. package/dist/plugins/adapt-sandbox-entry.mjs +9 -8
  748. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  749. package/dist/plugins/host.d.mts +5 -5
  750. package/dist/plugins/host.mjs +46 -42
  751. package/dist/plugins-COJ2L49n.mjs +261 -0
  752. package/dist/plugins-COJ2L49n.mjs.map +1 -0
  753. package/dist/policy-DLQ--Hnm.mjs +45 -0
  754. package/dist/policy-DLQ--Hnm.mjs.map +1 -0
  755. package/dist/portable-text-BH4zgkSm.mjs +311 -0
  756. package/dist/portable-text-BH4zgkSm.mjs.map +1 -0
  757. package/dist/preview-DLexxwp3.mjs +107 -0
  758. package/dist/preview-DLexxwp3.mjs.map +1 -0
  759. package/dist/protocol-79kUO7jP.d.mts +65 -0
  760. package/dist/protocol-79kUO7jP.d.mts.map +1 -0
  761. package/dist/public-plugin-api-routes-BuAMJ8nN.mjs +316 -0
  762. package/dist/public-plugin-api-routes-BuAMJ8nN.mjs.map +1 -0
  763. package/dist/public-submission-Di3TsgzX.mjs +251 -0
  764. package/dist/public-submission-Di3TsgzX.mjs.map +1 -0
  765. package/dist/public-url-Bt98vysr.mjs +101 -0
  766. package/dist/public-url-Bt98vysr.mjs.map +1 -0
  767. package/dist/query-CpnRlBh8.mjs +1156 -0
  768. package/dist/query-CpnRlBh8.mjs.map +1 -0
  769. package/dist/query-haKvLAWl.mjs +41 -0
  770. package/dist/query-haKvLAWl.mjs.map +1 -0
  771. package/dist/range-CYfeXgGK.mjs +51 -0
  772. package/dist/range-CYfeXgGK.mjs.map +1 -0
  773. package/dist/rate-limit-Xp4d0NBY.mjs +127 -0
  774. package/dist/rate-limit-Xp4d0NBY.mjs.map +1 -0
  775. package/dist/receipt-BUsQCOeM.mjs +43 -0
  776. package/dist/receipt-BUsQCOeM.mjs.map +1 -0
  777. package/dist/redirect-CQAV7mCo.mjs +19 -0
  778. package/dist/redirect-CQAV7mCo.mjs.map +1 -0
  779. package/dist/redirect-DiS_3mA4.mjs +423 -0
  780. package/dist/redirect-DiS_3mA4.mjs.map +1 -0
  781. package/dist/redirect-paths-CNYq7w80.mjs +36 -0
  782. package/dist/redirect-paths-CNYq7w80.mjs.map +1 -0
  783. package/dist/redirects-BEVSRMa2.mjs +148 -0
  784. package/dist/redirects-BEVSRMa2.mjs.map +1 -0
  785. package/dist/redirects-BHpy-VsZ.mjs +446 -0
  786. package/dist/redirects-BHpy-VsZ.mjs.map +1 -0
  787. package/dist/registry/testing.mjs +3 -3
  788. package/dist/registry-TUVaid9Z.mjs +8369 -0
  789. package/dist/registry-TUVaid9Z.mjs.map +1 -0
  790. package/dist/relations-CA_QuMTU.mjs +776 -0
  791. package/dist/relations-CA_QuMTU.mjs.map +1 -0
  792. package/dist/request-context.d.mts +1 -1
  793. package/dist/request-meta-bwZ_NsvU.mjs +141 -0
  794. package/dist/request-meta-bwZ_NsvU.mjs.map +1 -0
  795. package/dist/resolve-DwNM-CXl.mjs +101 -0
  796. package/dist/resolve-DwNM-CXl.mjs.map +1 -0
  797. package/dist/revision-BVp8S0e_.mjs +374 -0
  798. package/dist/revision-BVp8S0e_.mjs.map +1 -0
  799. package/dist/route-cache-QSOyDEw0.mjs +20 -0
  800. package/dist/route-cache-QSOyDEw0.mjs.map +1 -0
  801. package/dist/route-wire-Ca_HWCZ5.mjs +197 -0
  802. package/dist/route-wire-Ca_HWCZ5.mjs.map +1 -0
  803. package/dist/routes-BerZFrvV.mjs +272 -0
  804. package/dist/routes-BerZFrvV.mjs.map +1 -0
  805. package/dist/runner-BObHz5FC.d.mts +68 -0
  806. package/dist/runner-BObHz5FC.d.mts.map +1 -0
  807. package/dist/runner-C5NeAkBQ.mjs +6595 -0
  808. package/dist/runner-C5NeAkBQ.mjs.map +1 -0
  809. package/dist/runtime.d.mts +13 -13
  810. package/dist/runtime.mjs +3 -2
  811. package/dist/runtime.mjs.map +1 -1
  812. package/dist/schema/project-env-types.mjs +40 -36
  813. package/dist/schema/project-env-types.mjs.map +1 -1
  814. package/dist/schema-C4OBuv6Z.mjs +13 -0
  815. package/dist/schema-C4OBuv6Z.mjs.map +1 -0
  816. package/dist/schema-DJRfvM_o.mjs +815 -0
  817. package/dist/schema-DJRfvM_o.mjs.map +1 -0
  818. package/dist/scopes-BU03K7Uo.mjs +34 -0
  819. package/dist/scopes-BU03K7Uo.mjs.map +1 -0
  820. package/dist/search-DfVzks89.mjs +450 -0
  821. package/dist/search-DfVzks89.mjs.map +1 -0
  822. package/dist/sections-BMy4JVUz.mjs +346 -0
  823. package/dist/sections-BMy4JVUz.mjs.map +1 -0
  824. package/dist/seed/index.d.mts +2 -2
  825. package/dist/seed/index.mjs +38 -34
  826. package/dist/seo/index.d.mts +3 -3
  827. package/dist/seo/index.mjs +25 -21
  828. package/dist/seo/index.mjs.map +1 -1
  829. package/dist/seo-ClB-dw9w.mjs +188 -0
  830. package/dist/seo-ClB-dw9w.mjs.map +1 -0
  831. package/dist/seo-VZYOEy8f.mjs +133 -0
  832. package/dist/seo-VZYOEy8f.mjs.map +1 -0
  833. package/dist/service-Bo_usgSk.mjs +150 -0
  834. package/dist/service-Bo_usgSk.mjs.map +1 -0
  835. package/dist/session-user-DlpPdf8L.mjs +61 -0
  836. package/dist/session-user-DlpPdf8L.mjs.map +1 -0
  837. package/dist/settings-CWb84sDm.mjs +452 -0
  838. package/dist/settings-CWb84sDm.mjs.map +1 -0
  839. package/dist/settings-DS914jjE.mjs +66 -0
  840. package/dist/settings-DS914jjE.mjs.map +1 -0
  841. package/dist/settings-Dd1uivmQ.mjs +73 -0
  842. package/dist/settings-Dd1uivmQ.mjs.map +1 -0
  843. package/dist/setup-complete-BuNxAUiN.mjs +65 -0
  844. package/dist/setup-complete-BuNxAUiN.mjs.map +1 -0
  845. package/dist/setup-nonce-BnEAX0iy.mjs +25 -0
  846. package/dist/setup-nonce-BnEAX0iy.mjs.map +1 -0
  847. package/dist/site-domain-Bq5j5bVg.mjs +131 -0
  848. package/dist/site-domain-Bq5j5bVg.mjs.map +1 -0
  849. package/dist/site-settings-DRHfX7bq.mjs +50 -0
  850. package/dist/site-settings-DRHfX7bq.mjs.map +1 -0
  851. package/dist/site-url-MB685I5X.mjs +45 -0
  852. package/dist/site-url-MB685I5X.mjs.map +1 -0
  853. package/dist/sitemap-name-BTg2NJJv.mjs +26 -0
  854. package/dist/sitemap-name-BTg2NJJv.mjs.map +1 -0
  855. package/dist/slug-aVnUV4SL.mjs +16 -0
  856. package/dist/slug-aVnUV4SL.mjs.map +1 -0
  857. package/dist/slugify-bu2-jKia.mjs +22 -0
  858. package/dist/slugify-bu2-jKia.mjs.map +1 -0
  859. package/dist/snapshot-DYsG4uOq.mjs +414 -0
  860. package/dist/snapshot-DYsG4uOq.mjs.map +1 -0
  861. package/dist/ssrf-BcYjyM4M.mjs +406 -0
  862. package/dist/ssrf-BcYjyM4M.mjs.map +1 -0
  863. package/dist/stage-D8DWgPcO.mjs +662 -0
  864. package/dist/stage-D8DWgPcO.mjs.map +1 -0
  865. package/dist/staged-CD_imitH.mjs +686 -0
  866. package/dist/staged-CD_imitH.mjs.map +1 -0
  867. package/dist/state-CFbGZziM.mjs +178 -0
  868. package/dist/state-CFbGZziM.mjs.map +1 -0
  869. package/dist/status-BFNdxzKc.mjs +30 -0
  870. package/dist/status-BFNdxzKc.mjs.map +1 -0
  871. package/dist/storage/local.d.mts +2 -2
  872. package/dist/storage/local.d.mts.map +1 -1
  873. package/dist/storage/local.mjs +12 -5
  874. package/dist/storage/local.mjs.map +1 -1
  875. package/dist/storage/s3.d.mts +4 -2
  876. package/dist/storage/s3.d.mts.map +1 -1
  877. package/dist/storage/s3.mjs +56 -9
  878. package/dist/storage/s3.mjs.map +1 -1
  879. package/dist/storage-query-DRyu3bSU.d.mts +1615 -0
  880. package/dist/storage-query-DRyu3bSU.d.mts.map +1 -0
  881. package/dist/tar-DFjExb9X.mjs +449 -0
  882. package/dist/tar-DFjExb9X.mjs.map +1 -0
  883. package/dist/target-CWZs2-o6.mjs +27 -0
  884. package/dist/target-CWZs2-o6.mjs.map +1 -0
  885. package/dist/taxonomies-ChnU7Mc8.mjs +697 -0
  886. package/dist/taxonomies-ChnU7Mc8.mjs.map +1 -0
  887. package/dist/taxonomies-Dd9JJv_a.mjs +939 -0
  888. package/dist/taxonomies-Dd9JJv_a.mjs.map +1 -0
  889. package/dist/taxonomy-C_C_LBAU.mjs +550 -0
  890. package/dist/taxonomy-C_C_LBAU.mjs.map +1 -0
  891. package/dist/tokens-BnhSnGwJ.mjs +171 -0
  892. package/dist/tokens-BnhSnGwJ.mjs.map +1 -0
  893. package/dist/transfer-ClH6w6BV.mjs +8873 -0
  894. package/dist/transfer-ClH6w6BV.mjs.map +1 -0
  895. package/dist/transfer-WmWiR3xf.mjs +166 -0
  896. package/dist/transfer-WmWiR3xf.mjs.map +1 -0
  897. package/dist/transfer-download--ofRj9Cw.mjs +33 -0
  898. package/dist/transfer-download--ofRj9Cw.mjs.map +1 -0
  899. package/dist/transformations-Bx4lYY0Y.mjs +196 -0
  900. package/dist/transformations-Bx4lYY0Y.mjs.map +1 -0
  901. package/dist/transport-BjbqNiPI.mjs +136 -0
  902. package/dist/transport-BjbqNiPI.mjs.map +1 -0
  903. package/dist/transport-DxiXnbXk.d.mts +42 -0
  904. package/dist/transport-DxiXnbXk.d.mts.map +1 -0
  905. package/dist/trusted-proxy-BU3Nx9g1.mjs +51 -0
  906. package/dist/trusted-proxy-BU3Nx9g1.mjs.map +1 -0
  907. package/dist/turnstile-CJwvsOqw.mjs +58 -0
  908. package/dist/turnstile-CJwvsOqw.mjs.map +1 -0
  909. package/dist/types-BA3ey2QH.d.mts +87 -0
  910. package/dist/types-BA3ey2QH.d.mts.map +1 -0
  911. package/dist/types-Bwpzb5o6.d.mts +227 -0
  912. package/dist/types-Bwpzb5o6.d.mts.map +1 -0
  913. package/dist/types-CNB-dj6F.d.mts +289 -0
  914. package/dist/types-CNB-dj6F.d.mts.map +1 -0
  915. package/dist/types-CgfFGfO5.mjs +16 -0
  916. package/dist/types-CgfFGfO5.mjs.map +1 -0
  917. package/dist/types-D2NEXtgB.mjs +127 -0
  918. package/dist/types-D2NEXtgB.mjs.map +1 -0
  919. package/dist/types-DCFavOii.d.mts +916 -0
  920. package/dist/types-DCFavOii.d.mts.map +1 -0
  921. package/dist/types-DHO7Pd25.d.mts +366 -0
  922. package/dist/types-DHO7Pd25.d.mts.map +1 -0
  923. package/dist/types-DvqVxZXa.d.mts +125 -0
  924. package/dist/types-DvqVxZXa.d.mts.map +1 -0
  925. package/dist/types-QoPHm-2w.d.mts +1741 -0
  926. package/dist/types-QoPHm-2w.d.mts.map +1 -0
  927. package/dist/types-RLgeIpnF.d.mts +374 -0
  928. package/dist/types-RLgeIpnF.d.mts.map +1 -0
  929. package/dist/types-qHVygneX.mjs +77 -0
  930. package/dist/types-qHVygneX.mjs.map +1 -0
  931. package/dist/types-sUHaH7lC.mjs +37 -0
  932. package/dist/types-sUHaH7lC.mjs.map +1 -0
  933. package/dist/types-slSqujQL.d.mts +204 -0
  934. package/dist/types-slSqujQL.d.mts.map +1 -0
  935. package/dist/update-check-BxNg9T6N.mjs +161 -0
  936. package/dist/update-check-BxNg9T6N.mjs.map +1 -0
  937. package/dist/upload-attempts-DPFC4COv.mjs +32 -0
  938. package/dist/upload-attempts-DPFC4COv.mjs.map +1 -0
  939. package/dist/url-pattern-QATUE_rv.mjs +41 -0
  940. package/dist/url-pattern-QATUE_rv.mjs.map +1 -0
  941. package/dist/user-BlCTKVAm.mjs +171 -0
  942. package/dist/user-BlCTKVAm.mjs.map +1 -0
  943. package/dist/utils-TPt7w2cS.mjs +442 -0
  944. package/dist/utils-TPt7w2cS.mjs.map +1 -0
  945. package/dist/validate-DxYhJQA-.mjs +524 -0
  946. package/dist/validate-DxYhJQA-.mjs.map +1 -0
  947. package/dist/validate-emKxGC5F.d.mts +468 -0
  948. package/dist/validate-emKxGC5F.d.mts.map +1 -0
  949. package/dist/validation-Ckq4vsVg.mjs +220 -0
  950. package/dist/validation-Ckq4vsVg.mjs.map +1 -0
  951. package/dist/version-BZj18Q7G.mjs +9 -0
  952. package/dist/version-BZj18Q7G.mjs.map +1 -0
  953. package/dist/version-DHmGpcch.mjs +7 -0
  954. package/dist/version-DHmGpcch.mjs.map +1 -0
  955. package/dist/video-DytCnw3L.mjs +54 -0
  956. package/dist/video-DytCnw3L.mjs.map +1 -0
  957. package/dist/virtual-modules-DO954n7P.mjs +515 -0
  958. package/dist/virtual-modules-DO954n7P.mjs.map +1 -0
  959. package/dist/widgets-DA5XmvVC.mjs +121 -0
  960. package/dist/widgets-DA5XmvVC.mjs.map +1 -0
  961. package/dist/wxr-taxonomies-CrMonejI.d.mts +34 -0
  962. package/dist/wxr-taxonomies-CrMonejI.d.mts.map +1 -0
  963. package/dist/wxr-taxonomies-RgRG0d5e.mjs +453 -0
  964. package/dist/wxr-taxonomies-RgRG0d5e.mjs.map +1 -0
  965. package/dist/zod-generator-D0JKy94C.mjs +424 -0
  966. package/dist/zod-generator-D0JKy94C.mjs.map +1 -0
  967. package/package.json +15 -11
  968. package/src/api/authorize.ts +42 -0
  969. package/src/api/errors.ts +9 -0
  970. package/src/api/handlers/api-tokens.ts +12 -6
  971. package/src/api/handlers/content.ts +57 -8
  972. package/src/api/handlers/dashboard.ts +33 -10
  973. package/src/api/handlers/domain-move-notice.ts +94 -0
  974. package/src/api/handlers/index.ts +2 -0
  975. package/src/api/handlers/manifest.ts +6 -0
  976. package/src/api/handlers/media-usage.ts +2 -1
  977. package/src/api/handlers/media.ts +1 -0
  978. package/src/api/handlers/plugins.ts +1 -0
  979. package/src/api/handlers/revision.ts +6 -2
  980. package/src/api/handlers/seo.ts +155 -59
  981. package/src/api/handlers/settings.ts +31 -1
  982. package/src/api/handlers/site-domain.ts +159 -0
  983. package/src/api/openapi/document.ts +2 -2
  984. package/src/api/public-url.ts +1 -1
  985. package/src/api/schemas/content.ts +20 -0
  986. package/src/api/schemas/media-usage.ts +7 -1
  987. package/src/api/schemas/media.ts +12 -0
  988. package/src/api/schemas/settings.ts +2 -0
  989. package/src/api/site-url.ts +53 -5
  990. package/src/api/types.ts +4 -0
  991. package/src/astro/image-endpoint.ts +46 -4
  992. package/src/astro/integration/admin-locales.ts +168 -0
  993. package/src/astro/integration/dev-env.ts +84 -0
  994. package/src/astro/integration/dev-scheduler-bridge.ts +91 -0
  995. package/src/astro/integration/index.ts +97 -10
  996. package/src/astro/integration/routes.ts +28 -0
  997. package/src/astro/integration/runtime.ts +17 -1
  998. package/src/astro/integration/virtual-modules.ts +9 -16
  999. package/src/astro/integration/vite-config.ts +22 -16
  1000. package/src/astro/middleware/auth.ts +19 -4
  1001. package/src/astro/middleware/csp.ts +1 -0
  1002. package/src/astro/middleware/redirect.ts +94 -50
  1003. package/src/astro/middleware/request-context.ts +12 -6
  1004. package/src/astro/middleware.ts +71 -17
  1005. package/src/astro/prefetch.ts +7 -5
  1006. package/src/astro/public-plugin-api-routes.ts +10 -2
  1007. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +1 -1
  1008. package/src/astro/routes/api/auth/handover.ts +58 -0
  1009. package/src/astro/routes/api/auth/magic-link/verify.ts +11 -3
  1010. package/src/astro/routes/api/auth/passkey/options.ts +10 -2
  1011. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +2 -1
  1012. package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +1 -5
  1013. package/src/astro/routes/api/content/[collection]/[id]/lock.ts +2 -2
  1014. package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +2 -1
  1015. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -1
  1016. package/src/astro/routes/api/content/[collection]/[id]/restore.ts +2 -1
  1017. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +3 -2
  1018. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +5 -4
  1019. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +2 -1
  1020. package/src/astro/routes/api/content/[collection]/[id].ts +18 -6
  1021. package/src/astro/routes/api/content/[collection]/index.ts +1 -5
  1022. package/src/astro/routes/api/dashboard.ts +4 -1
  1023. package/src/astro/routes/api/dev/scheduled-tasks.ts +20 -0
  1024. package/src/astro/routes/api/import/wordpress/analyze.ts +1 -16
  1025. package/src/astro/routes/api/import/wordpress/execute.ts +27 -3
  1026. package/src/astro/routes/api/import/wordpress/rewrite-url-helpers.ts +80 -42
  1027. package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +4 -1
  1028. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +49 -5
  1029. package/src/astro/routes/api/manifest.ts +10 -0
  1030. package/src/astro/routes/api/media/[id]/confirm.ts +19 -0
  1031. package/src/astro/routes/api/media/file/[...key].ts +60 -12
  1032. package/src/astro/routes/api/media/upload-url.ts +28 -4
  1033. package/src/astro/routes/api/media.ts +15 -0
  1034. package/src/astro/routes/api/menus/[name]/items/[id].ts +3 -2
  1035. package/src/astro/routes/api/menus/[name]/items.ts +2 -1
  1036. package/src/astro/routes/api/menus/[name]/reorder.ts +2 -1
  1037. package/src/astro/routes/api/menus/[name]/translations.ts +2 -1
  1038. package/src/astro/routes/api/menus/[name].ts +3 -2
  1039. package/src/astro/routes/api/menus/index.ts +2 -1
  1040. package/src/astro/routes/api/redirects/[id].ts +15 -2
  1041. package/src/astro/routes/api/redirects/index.ts +5 -1
  1042. package/src/astro/routes/api/schema/index.ts +1 -1
  1043. package/src/astro/routes/api/settings/domain-notify.ts +76 -0
  1044. package/src/astro/routes/api/settings/domain.ts +64 -0
  1045. package/src/astro/routes/api/settings.ts +2 -1
  1046. package/src/astro/routes/api/setup/admin-verify.ts +7 -1
  1047. package/src/astro/routes/api/setup/index.ts +7 -0
  1048. package/src/astro/routes/api/site/domain-proof.ts +28 -0
  1049. package/src/astro/routes/api/taxonomies/[name]/reorder.ts +2 -1
  1050. package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +2 -1
  1051. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +3 -2
  1052. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +2 -1
  1053. package/src/astro/routes/api/taxonomies/[name].ts +3 -2
  1054. package/src/astro/routes/api/taxonomies/index.ts +2 -1
  1055. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +2 -1
  1056. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +3 -2
  1057. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +2 -1
  1058. package/src/astro/routes/api/widget-areas/[name].ts +2 -1
  1059. package/src/astro/routes/api/widget-areas/index.ts +2 -1
  1060. package/src/astro/routes/robots.txt.ts +33 -2
  1061. package/src/astro/routes/sitemap-[collection].xml.ts +31 -8
  1062. package/src/astro/routes/sitemap.xml.ts +12 -10
  1063. package/src/astro/types.ts +23 -2
  1064. package/src/auth/rate-limit.ts +18 -13
  1065. package/src/auth/types.ts +11 -4
  1066. package/src/aws-sdk.d.ts +2 -1
  1067. package/src/cache/redirect-paths.ts +56 -0
  1068. package/src/cache/route-cache.ts +22 -0
  1069. package/src/cleanup.ts +26 -0
  1070. package/src/cli/commands/export-seed.ts +2 -0
  1071. package/src/cli/commands/import/wordpress.ts +3 -27
  1072. package/src/cli/commands/login.ts +35 -43
  1073. package/src/cli/commands/migrate.ts +36 -4
  1074. package/src/cli/commands/seed.ts +23 -12
  1075. package/src/cli/wxr/parser.ts +2 -2
  1076. package/src/client/index.ts +18 -3
  1077. package/src/client/portable-text.ts +21 -7
  1078. package/src/comments/public-submission.ts +15 -8
  1079. package/src/comments/query.ts +8 -2
  1080. package/src/components/CommentForm.astro +50 -10
  1081. package/src/components/Comments.astro +51 -29
  1082. package/src/components/EmDashImage.astro +6 -4
  1083. package/src/components/Gallery.astro +4 -3
  1084. package/src/components/Image.astro +4 -3
  1085. package/src/components/InlinePortableTextEditor.tsx +269 -1320
  1086. package/src/components/Video.astro +100 -0
  1087. package/src/components/index.ts +4 -1
  1088. package/src/components/inline-block-types.ts +278 -0
  1089. package/src/components/inline-bubble-menu.tsx +696 -0
  1090. package/src/components/inline-code-block.tsx +8 -0
  1091. package/src/components/inline-editor-ui.tsx +1192 -0
  1092. package/src/components/inline-image.tsx +722 -0
  1093. package/src/components/inline-media-picker.tsx +1221 -0
  1094. package/src/components/inline-slash-menu.tsx +556 -0
  1095. package/src/components/webmcp-search.ts +15 -19
  1096. package/src/components/widgets/RecentPosts.astro +57 -17
  1097. package/src/content/converters/mark-safety.ts +3 -3
  1098. package/src/content/converters/portable-text-identity.ts +1 -0
  1099. package/src/content/converters/portable-text-to-prosemirror.ts +7 -0
  1100. package/src/content/converters/prosemirror-to-portable-text.ts +16 -0
  1101. package/src/content/converters/types.ts +22 -0
  1102. package/src/content/converters/video.ts +77 -0
  1103. package/src/database/collection-cleanup.ts +30 -0
  1104. package/src/database/datetime-storage.ts +337 -60
  1105. package/src/database/migration-lock.ts +43 -7
  1106. package/src/database/migrations/runner.ts +13 -1
  1107. package/src/database/repositories/comment.ts +17 -3
  1108. package/src/database/repositories/content.ts +25 -4
  1109. package/src/database/repositories/plugin-storage.ts +137 -27
  1110. package/src/database/repositories/redirect.ts +24 -2
  1111. package/src/database/repositories/revision.ts +24 -6
  1112. package/src/database/repositories/taxonomy.ts +61 -46
  1113. package/src/database/repositories/types.ts +67 -7
  1114. package/src/emdash-runtime.ts +393 -228
  1115. package/src/import/index.ts +1 -0
  1116. package/src/import/registry.ts +17 -0
  1117. package/src/import/sources/wordpress-plugin.ts +154 -11
  1118. package/src/import/types.ts +3 -0
  1119. package/src/import/utils.ts +7 -3
  1120. package/src/index.ts +3 -0
  1121. package/src/loader.ts +170 -45
  1122. package/src/mcp/json-schema.ts +14 -0
  1123. package/src/mcp/plugin-tool-name.ts +36 -0
  1124. package/src/mcp/server.ts +74 -15
  1125. package/src/media/image-endpoint.ts +101 -1
  1126. package/src/media/responsive.ts +14 -7
  1127. package/src/media/usage/collection-deletion.ts +4 -0
  1128. package/src/media/usage/extractor.ts +19 -2
  1129. package/src/media/usage/types.ts +5 -1
  1130. package/src/migrations/direct-executor.ts +42 -12
  1131. package/src/migrations/protocol.ts +6 -2
  1132. package/src/plugin-utils.ts +1 -1
  1133. package/src/plugins/adapt-sandbox-entry.ts +16 -6
  1134. package/src/plugins/context.ts +3 -7
  1135. package/src/plugins/hooks.ts +1 -1
  1136. package/src/plugins/http-route-dispatch.ts +5 -1
  1137. package/src/plugins/manifest-schema.ts +1 -0
  1138. package/src/plugins/route-error.ts +14 -0
  1139. package/src/plugins/routes.ts +2 -2
  1140. package/src/plugins/state.ts +41 -8
  1141. package/src/plugins/types.ts +6 -0
  1142. package/src/query.ts +59 -10
  1143. package/src/redirects/cache.ts +34 -2
  1144. package/src/redirects/patterns.ts +26 -2
  1145. package/src/schema/block-values.ts +80 -17
  1146. package/src/schema/registry.ts +16 -5
  1147. package/src/schema/slug.ts +19 -0
  1148. package/src/search/query.ts +3 -1
  1149. package/src/search/text-extraction.ts +6 -1
  1150. package/src/seed/apply.ts +32 -8
  1151. package/src/seed/validate.ts +31 -0
  1152. package/src/seo/sitemap-name.ts +22 -0
  1153. package/src/settings/index.ts +20 -0
  1154. package/src/settings/types.ts +2 -0
  1155. package/src/storage/index.ts +2 -0
  1156. package/src/storage/local.ts +10 -2
  1157. package/src/storage/range.ts +54 -0
  1158. package/src/storage/s3.ts +52 -8
  1159. package/src/storage/types.ts +30 -3
  1160. package/src/ui.ts +1 -0
  1161. package/src/utils/slugify.ts +6 -1
  1162. package/src/visual-editing/toolbar.ts +126 -47
  1163. package/src/widgets/components.ts +4 -0
  1164. package/src/widgets/index.ts +74 -82
  1165. package/src/widgets/recent-posts.ts +62 -0
  1166. package/dist/action-token-AgOs1UWD.mjs +0 -26
  1167. package/dist/action-token-AgOs1UWD.mjs.map +0 -1
  1168. package/dist/activation-xomsCMJg.mjs +0 -387
  1169. package/dist/activation-xomsCMJg.mjs.map +0 -1
  1170. package/dist/adapters-DM1oyHIN.d.mts +0 -173
  1171. package/dist/adapters-DM1oyHIN.d.mts.map +0 -1
  1172. package/dist/allowed-origins-CFtudhyw.mjs +0 -116
  1173. package/dist/allowed-origins-CFtudhyw.mjs.map +0 -1
  1174. package/dist/api-CltsXhiX.mjs +0 -4980
  1175. package/dist/api-CltsXhiX.mjs.map +0 -1
  1176. package/dist/api-tokens-P3mAaQgr.mjs +0 -166
  1177. package/dist/api-tokens-P3mAaQgr.mjs.map +0 -1
  1178. package/dist/apply-Q7uvzBWW.mjs +0 -1680
  1179. package/dist/apply-Q7uvzBWW.mjs.map +0 -1
  1180. package/dist/approvals-DycwI6lZ.mjs +0 -460
  1181. package/dist/approvals-DycwI6lZ.mjs.map +0 -1
  1182. package/dist/artifact-fetch-CWxyELVI.mjs +0 -659
  1183. package/dist/artifact-fetch-CWxyELVI.mjs.map +0 -1
  1184. package/dist/artifacts-UzWbysb8.mjs +0 -307
  1185. package/dist/artifacts-UzWbysb8.mjs.map +0 -1
  1186. package/dist/audit-CCH3MA4Y.mjs +0 -127
  1187. package/dist/audit-CCH3MA4Y.mjs.map +0 -1
  1188. package/dist/authoritative-records-dSvXCfzb.mjs +0 -5172
  1189. package/dist/authoritative-records-dSvXCfzb.mjs.map +0 -1
  1190. package/dist/authorize-DeWfk--K.mjs +0 -49
  1191. package/dist/authorize-DeWfk--K.mjs.map +0 -1
  1192. package/dist/backup-CFnbdTSJ.mjs +0 -246
  1193. package/dist/backup-CFnbdTSJ.mjs.map +0 -1
  1194. package/dist/block-types-C0YFSfR7.mjs +0 -132
  1195. package/dist/block-types-C0YFSfR7.mjs.map +0 -1
  1196. package/dist/block-values-H4E0XwE8.mjs +0 -175
  1197. package/dist/block-values-H4E0XwE8.mjs.map +0 -1
  1198. package/dist/byline-BhVslYLz.mjs +0 -909
  1199. package/dist/byline-BhVslYLz.mjs.map +0 -1
  1200. package/dist/byline-fields-DHJs0Mja.mjs +0 -280
  1201. package/dist/byline-fields-DHJs0Mja.mjs.map +0 -1
  1202. package/dist/byline-fields-xdxE9kxZ.mjs +0 -123
  1203. package/dist/byline-fields-xdxE9kxZ.mjs.map +0 -1
  1204. package/dist/bylines-B_nN9liM.mjs +0 -234
  1205. package/dist/bylines-B_nN9liM.mjs.map +0 -1
  1206. package/dist/bylines-C71YACkL.mjs +0 -150
  1207. package/dist/bylines-C71YACkL.mjs.map +0 -1
  1208. package/dist/cache-aTYCL9nK.mjs +0 -133
  1209. package/dist/cache-aTYCL9nK.mjs.map +0 -1
  1210. package/dist/canonical-Y1dpjCnp.mjs +0 -174
  1211. package/dist/canonical-Y1dpjCnp.mjs.map +0 -1
  1212. package/dist/capture-triggers-C9JKoIdT.mjs +0 -362
  1213. package/dist/capture-triggers-C9JKoIdT.mjs.map +0 -1
  1214. package/dist/challenge-store-CxZxPqaw.mjs +0 -51
  1215. package/dist/challenge-store-CxZxPqaw.mjs.map +0 -1
  1216. package/dist/checksum-DtH6m5uk.mjs +0 -162
  1217. package/dist/checksum-DtH6m5uk.mjs.map +0 -1
  1218. package/dist/chunks-zlGB5IQP.mjs +0 -25
  1219. package/dist/chunks-zlGB5IQP.mjs.map +0 -1
  1220. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs +0 -85
  1221. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs.map +0 -1
  1222. package/dist/comment-Bu08Wvr3.mjs +0 -313
  1223. package/dist/comment-Bu08Wvr3.mjs.map +0 -1
  1224. package/dist/comment-reaction-B8SfT-yM.mjs +0 -85
  1225. package/dist/comment-reaction-B8SfT-yM.mjs.map +0 -1
  1226. package/dist/comments-BRtp992B.mjs +0 -99
  1227. package/dist/comments-BRtp992B.mjs.map +0 -1
  1228. package/dist/comments-DVUYqdyC.mjs +0 -195
  1229. package/dist/comments-DVUYqdyC.mjs.map +0 -1
  1230. package/dist/components-CQY-Sgm-.mjs +0 -108
  1231. package/dist/components-CQY-Sgm-.mjs.map +0 -1
  1232. package/dist/config-B-uePMLj.d.mts +0 -39
  1233. package/dist/config-B-uePMLj.d.mts.map +0 -1
  1234. package/dist/config-B6BDSsz2.d.mts +0 -6712
  1235. package/dist/config-B6BDSsz2.d.mts.map +0 -1
  1236. package/dist/config-BsJHiQxC.mjs +0 -228
  1237. package/dist/config-BsJHiQxC.mjs.map +0 -1
  1238. package/dist/connection-B9pIasFd.mjs +0 -36
  1239. package/dist/connection-B9pIasFd.mjs.map +0 -1
  1240. package/dist/content-Dji9vEiW.mjs +0 -2063
  1241. package/dist/content-Dji9vEiW.mjs.map +0 -1
  1242. package/dist/content-list-query-DiNwyKtd.d.mts +0 -26
  1243. package/dist/content-list-query-DiNwyKtd.d.mts.map +0 -1
  1244. package/dist/content-repair-B7wnbzhN.mjs +0 -442
  1245. package/dist/content-repair-B7wnbzhN.mjs.map +0 -1
  1246. package/dist/context-Ctcxc8Ia.mjs +0 -2026
  1247. package/dist/context-Ctcxc8Ia.mjs.map +0 -1
  1248. package/dist/credits-Bu7dlobo.mjs +0 -110
  1249. package/dist/credits-Bu7dlobo.mjs.map +0 -1
  1250. package/dist/cron-xe5XKqA-.mjs +0 -306
  1251. package/dist/cron-xe5XKqA-.mjs.map +0 -1
  1252. package/dist/dashboard-B5hVHOtf.mjs +0 -151
  1253. package/dist/dashboard-B5hVHOtf.mjs.map +0 -1
  1254. package/dist/default-DaoYyFRS.mjs +0 -81
  1255. package/dist/default-DaoYyFRS.mjs.map +0 -1
  1256. package/dist/deferred-tasks-BYcDx2o_.d.mts +0 -9
  1257. package/dist/deferred-tasks-BYcDx2o_.d.mts.map +0 -1
  1258. package/dist/dev-typegen-Dtl8AfS6.mjs +0 -29
  1259. package/dist/dev-typegen-Dtl8AfS6.mjs.map +0 -1
  1260. package/dist/device-flow-Ma5P5d2e.mjs +0 -521
  1261. package/dist/device-flow-Ma5P5d2e.mjs.map +0 -1
  1262. package/dist/digest-xIpR3o64.mjs +0 -194
  1263. package/dist/digest-xIpR3o64.mjs.map +0 -1
  1264. package/dist/direct-executor-DMWwCey3.mjs +0 -104
  1265. package/dist/direct-executor-DMWwCey3.mjs.map +0 -1
  1266. package/dist/email-console-DmqVF5J_.mjs +0 -50
  1267. package/dist/email-console-DmqVF5J_.mjs.map +0 -1
  1268. package/dist/email-locale-Cc5YSXfJ.mjs +0 -25
  1269. package/dist/email-locale-Cc5YSXfJ.mjs.map +0 -1
  1270. package/dist/emdash-runtime-BlybX9Ui.mjs +0 -4249
  1271. package/dist/emdash-runtime-BlybX9Ui.mjs.map +0 -1
  1272. package/dist/entry-lock-De1L8qUQ.mjs +0 -163
  1273. package/dist/entry-lock-De1L8qUQ.mjs.map +0 -1
  1274. package/dist/entry-lock-esmMbgI9.d.mts +0 -4551
  1275. package/dist/entry-lock-esmMbgI9.d.mts.map +0 -1
  1276. package/dist/entry-lock-sxz2PGAT.mjs +0 -1197
  1277. package/dist/entry-lock-sxz2PGAT.mjs.map +0 -1
  1278. package/dist/env-types-BkjCtN13.mjs +0 -38
  1279. package/dist/env-types-BkjCtN13.mjs.map +0 -1
  1280. package/dist/error-B0rgPgsQ.mjs +0 -90
  1281. package/dist/error-B0rgPgsQ.mjs.map +0 -1
  1282. package/dist/errors-CuHQRiBW.mjs +0 -120
  1283. package/dist/errors-CuHQRiBW.mjs.map +0 -1
  1284. package/dist/errors-DTE6C3K_.mjs +0 -470
  1285. package/dist/errors-DTE6C3K_.mjs.map +0 -1
  1286. package/dist/escape-nJW7dR0s.mjs +0 -9
  1287. package/dist/escape-nJW7dR0s.mjs.map +0 -1
  1288. package/dist/fence-CGw57S4v.mjs +0 -162
  1289. package/dist/fence-CGw57S4v.mjs.map +0 -1
  1290. package/dist/field-defs-cache-Bw8w499w.mjs +0 -77
  1291. package/dist/field-defs-cache-Bw8w499w.mjs.map +0 -1
  1292. package/dist/field-map-hn-D-SyH.mjs +0 -83
  1293. package/dist/field-map-hn-D-SyH.mjs.map +0 -1
  1294. package/dist/fts-manager-DacCYIe4.mjs +0 -443
  1295. package/dist/fts-manager-DacCYIe4.mjs.map +0 -1
  1296. package/dist/gc-BBplHrv6.mjs +0 -75
  1297. package/dist/gc-BBplHrv6.mjs.map +0 -1
  1298. package/dist/hash-C4DFoJ7Z.mjs +0 -37
  1299. package/dist/hash-C4DFoJ7Z.mjs.map +0 -1
  1300. package/dist/hook-result-DSRRxu_-.d.mts +0 -31
  1301. package/dist/hook-result-DSRRxu_-.d.mts.map +0 -1
  1302. package/dist/hreflang-CKPunvU0.mjs +0 -105
  1303. package/dist/hreflang-CKPunvU0.mjs.map +0 -1
  1304. package/dist/hreflang-egumj6WF.d.mts +0 -50
  1305. package/dist/hreflang-egumj6WF.d.mts.map +0 -1
  1306. package/dist/http-route-dispatch-DjNFZcJ2.mjs +0 -339
  1307. package/dist/http-route-dispatch-DjNFZcJ2.mjs.map +0 -1
  1308. package/dist/identity-Dfrx2_Bc.mjs +0 -35
  1309. package/dist/identity-Dfrx2_Bc.mjs.map +0 -1
  1310. package/dist/import-ROBvhbNc.mjs +0 -2021
  1311. package/dist/import-ROBvhbNc.mjs.map +0 -1
  1312. package/dist/index-B4sIdCAT.d.mts +0 -623
  1313. package/dist/index-B4sIdCAT.d.mts.map +0 -1
  1314. package/dist/install-finalization-CPM7Gged.mjs +0 -58
  1315. package/dist/install-finalization-CPM7Gged.mjs.map +0 -1
  1316. package/dist/keys-DxqxcAD4.mjs +0 -61
  1317. package/dist/keys-DxqxcAD4.mjs.map +0 -1
  1318. package/dist/kinds-BQl5gN6e.mjs +0 -974
  1319. package/dist/kinds-BQl5gN6e.mjs.map +0 -1
  1320. package/dist/lifecycle-DGQI7itS.mjs +0 -25
  1321. package/dist/lifecycle-DGQI7itS.mjs.map +0 -1
  1322. package/dist/load-DMxRl4VK.mjs +0 -28
  1323. package/dist/load-DMxRl4VK.mjs.map +0 -1
  1324. package/dist/loader-1DMiOq5s.mjs +0 -1303
  1325. package/dist/loader-1DMiOq5s.mjs.map +0 -1
  1326. package/dist/loops-Dn1i16FP.mjs +0 -205
  1327. package/dist/loops-Dn1i16FP.mjs.map +0 -1
  1328. package/dist/manifest-builder-CTw4FmZk.mjs +0 -189
  1329. package/dist/manifest-builder-CTw4FmZk.mjs.map +0 -1
  1330. package/dist/manifest-schema-gy37bD_D.mjs +0 -496
  1331. package/dist/manifest-schema-gy37bD_D.mjs.map +0 -1
  1332. package/dist/marketplace-tHWSsCUo.mjs +0 -257
  1333. package/dist/marketplace-tHWSsCUo.mjs.map +0 -1
  1334. package/dist/media-Bw-Q65ve.mjs +0 -294
  1335. package/dist/media-Bw-Q65ve.mjs.map +0 -1
  1336. package/dist/media-BzUDu7nl.mjs +0 -373
  1337. package/dist/media-BzUDu7nl.mjs.map +0 -1
  1338. package/dist/media-aahnKHze.mjs +0 -408
  1339. package/dist/media-aahnKHze.mjs.map +0 -1
  1340. package/dist/media-allowlist-RMrjo8TU.mjs +0 -45
  1341. package/dist/media-allowlist-RMrjo8TU.mjs.map +0 -1
  1342. package/dist/media-folders-kabR1oJf.mjs +0 -210
  1343. package/dist/media-folders-kabR1oJf.mjs.map +0 -1
  1344. package/dist/media-url-DloW2xrP.mjs +0 -43
  1345. package/dist/media-url-DloW2xrP.mjs.map +0 -1
  1346. package/dist/media-usage-CHHpV7ee.mjs +0 -282
  1347. package/dist/media-usage-CHHpV7ee.mjs.map +0 -1
  1348. package/dist/media-usage-activation-BinYqC_r.mjs +0 -78
  1349. package/dist/media-usage-activation-BinYqC_r.mjs.map +0 -1
  1350. package/dist/media-usage-work-C734aq6s.mjs +0 -1015
  1351. package/dist/media-usage-work-C734aq6s.mjs.map +0 -1
  1352. package/dist/media-usage-work-lxvV0-UO.mjs +0 -151
  1353. package/dist/media-usage-work-lxvV0-UO.mjs.map +0 -1
  1354. package/dist/menus-6RHNq4ZK.mjs +0 -753
  1355. package/dist/menus-6RHNq4ZK.mjs.map +0 -1
  1356. package/dist/menus-AuCTaO9W.mjs +0 -3704
  1357. package/dist/menus-AuCTaO9W.mjs.map +0 -1
  1358. package/dist/menus-BQKqf0Up.mjs +0 -92
  1359. package/dist/menus-BQKqf0Up.mjs.map +0 -1
  1360. package/dist/mode-nh0ppSX5.mjs +0 -23
  1361. package/dist/mode-nh0ppSX5.mjs.map +0 -1
  1362. package/dist/node-sqlite-compat-CDOEcc97.mjs +0 -63
  1363. package/dist/node-sqlite-compat-CDOEcc97.mjs.map +0 -1
  1364. package/dist/oauth-authorization-BtYQ80uU.mjs +0 -274
  1365. package/dist/oauth-authorization-BtYQ80uU.mjs.map +0 -1
  1366. package/dist/oauth-clients-C1S4NQHh.mjs +0 -266
  1367. package/dist/oauth-clients-C1S4NQHh.mjs.map +0 -1
  1368. package/dist/oauth-state-store-CpGi2FZH.mjs +0 -50
  1369. package/dist/oauth-state-store-CpGi2FZH.mjs.map +0 -1
  1370. package/dist/oauth-user-lookup-BNp1aFAr.mjs +0 -26
  1371. package/dist/oauth-user-lookup-BNp1aFAr.mjs.map +0 -1
  1372. package/dist/options-B41aLm1I.d.mts +0 -81
  1373. package/dist/options-B41aLm1I.d.mts.map +0 -1
  1374. package/dist/ownership-DoeAIuTg.mjs +0 -12
  1375. package/dist/ownership-DoeAIuTg.mjs.map +0 -1
  1376. package/dist/parse-CmFDTGzp.mjs +0 -81
  1377. package/dist/parse-CmFDTGzp.mjs.map +0 -1
  1378. package/dist/parse-QVS0t5oR.d.mts +0 -172
  1379. package/dist/parse-QVS0t5oR.d.mts.map +0 -1
  1380. package/dist/passkey-config-C-MxsV22.mjs +0 -46
  1381. package/dist/passkey-config-C-MxsV22.mjs.map +0 -1
  1382. package/dist/paths-kr8hAMMI.mjs +0 -77
  1383. package/dist/paths-kr8hAMMI.mjs.map +0 -1
  1384. package/dist/patterns-DyZJ67I7.mjs +0 -140
  1385. package/dist/patterns-DyZJ67I7.mjs.map +0 -1
  1386. package/dist/placeholder-Dn7MMdWr.d.mts +0 -306
  1387. package/dist/placeholder-Dn7MMdWr.d.mts.map +0 -1
  1388. package/dist/plan-CuQOeU9g.mjs +0 -135
  1389. package/dist/plan-CuQOeU9g.mjs.map +0 -1
  1390. package/dist/plugins-CGb-G98c.mjs +0 -261
  1391. package/dist/plugins-CGb-G98c.mjs.map +0 -1
  1392. package/dist/policy-C5wrDXYV.mjs +0 -45
  1393. package/dist/policy-C5wrDXYV.mjs.map +0 -1
  1394. package/dist/portable-text-BnRuiR1-.mjs +0 -307
  1395. package/dist/portable-text-BnRuiR1-.mjs.map +0 -1
  1396. package/dist/preview-xWNSR1Li.mjs +0 -107
  1397. package/dist/preview-xWNSR1Li.mjs.map +0 -1
  1398. package/dist/protocol-ClxN-m1e.d.mts +0 -61
  1399. package/dist/protocol-ClxN-m1e.d.mts.map +0 -1
  1400. package/dist/public-submission-CkmT2SKv.mjs +0 -250
  1401. package/dist/public-submission-CkmT2SKv.mjs.map +0 -1
  1402. package/dist/public-url-B5a0QAh6.mjs +0 -101
  1403. package/dist/public-url-B5a0QAh6.mjs.map +0 -1
  1404. package/dist/query-DHqFiqqH.mjs +0 -41
  1405. package/dist/query-DHqFiqqH.mjs.map +0 -1
  1406. package/dist/query-DT85BehD.mjs +0 -1125
  1407. package/dist/query-DT85BehD.mjs.map +0 -1
  1408. package/dist/rate-limit-iMvcu3eu.mjs +0 -120
  1409. package/dist/rate-limit-iMvcu3eu.mjs.map +0 -1
  1410. package/dist/receipt-Dpp1uaX9.mjs +0 -43
  1411. package/dist/receipt-Dpp1uaX9.mjs.map +0 -1
  1412. package/dist/redirect-BRoLiWQE.mjs +0 -19
  1413. package/dist/redirect-BRoLiWQE.mjs.map +0 -1
  1414. package/dist/redirect-xZNpBoGp.mjs +0 -417
  1415. package/dist/redirect-xZNpBoGp.mjs.map +0 -1
  1416. package/dist/redirects-D4EWeXAo.mjs +0 -148
  1417. package/dist/redirects-D4EWeXAo.mjs.map +0 -1
  1418. package/dist/redirects-DCKqwiWp.mjs +0 -446
  1419. package/dist/redirects-DCKqwiWp.mjs.map +0 -1
  1420. package/dist/registry-DaXmUsD4.mjs +0 -8369
  1421. package/dist/registry-DaXmUsD4.mjs.map +0 -1
  1422. package/dist/relations-JvBP8nGP.mjs +0 -776
  1423. package/dist/relations-JvBP8nGP.mjs.map +0 -1
  1424. package/dist/request-meta-B6blULFY.mjs +0 -141
  1425. package/dist/request-meta-B6blULFY.mjs.map +0 -1
  1426. package/dist/resolve-DAhHi5tn.mjs +0 -100
  1427. package/dist/resolve-DAhHi5tn.mjs.map +0 -1
  1428. package/dist/revision-BWEH2qQB.mjs +0 -368
  1429. package/dist/revision-BWEH2qQB.mjs.map +0 -1
  1430. package/dist/route-wire-DK600v4u.mjs +0 -197
  1431. package/dist/route-wire-DK600v4u.mjs.map +0 -1
  1432. package/dist/routes-BeZyaCzv.mjs +0 -272
  1433. package/dist/routes-BeZyaCzv.mjs.map +0 -1
  1434. package/dist/runner-CskI4Hmq.mjs +0 -6372
  1435. package/dist/runner-CskI4Hmq.mjs.map +0 -1
  1436. package/dist/runner-J3Cj6DGk.d.mts +0 -68
  1437. package/dist/runner-J3Cj6DGk.d.mts.map +0 -1
  1438. package/dist/schema-CK0ihqMR.mjs +0 -815
  1439. package/dist/schema-CK0ihqMR.mjs.map +0 -1
  1440. package/dist/schema-VtaZSrC-.mjs +0 -13
  1441. package/dist/schema-VtaZSrC-.mjs.map +0 -1
  1442. package/dist/scopes-BRnGlL9t.mjs +0 -34
  1443. package/dist/scopes-BRnGlL9t.mjs.map +0 -1
  1444. package/dist/search-D6-XK1Sn.mjs +0 -448
  1445. package/dist/search-D6-XK1Sn.mjs.map +0 -1
  1446. package/dist/sections-CBDCf7qR.mjs +0 -346
  1447. package/dist/sections-CBDCf7qR.mjs.map +0 -1
  1448. package/dist/seo-BdeEPDNW.mjs +0 -133
  1449. package/dist/seo-BdeEPDNW.mjs.map +0 -1
  1450. package/dist/seo-C61bnPuV.mjs +0 -114
  1451. package/dist/seo-C61bnPuV.mjs.map +0 -1
  1452. package/dist/service-BuRKLMxa.mjs +0 -150
  1453. package/dist/service-BuRKLMxa.mjs.map +0 -1
  1454. package/dist/session-user-CqkPtrPL.mjs +0 -61
  1455. package/dist/session-user-CqkPtrPL.mjs.map +0 -1
  1456. package/dist/settings-0u0lTthS.mjs +0 -51
  1457. package/dist/settings-0u0lTthS.mjs.map +0 -1
  1458. package/dist/settings-WHr45II1.mjs +0 -61
  1459. package/dist/settings-WHr45II1.mjs.map +0 -1
  1460. package/dist/settings-m5tIYnF0.mjs +0 -443
  1461. package/dist/settings-m5tIYnF0.mjs.map +0 -1
  1462. package/dist/setup-complete-B2_dhZZz.mjs +0 -65
  1463. package/dist/setup-complete-B2_dhZZz.mjs.map +0 -1
  1464. package/dist/setup-nonce-CJV9ftSK.mjs +0 -25
  1465. package/dist/setup-nonce-CJV9ftSK.mjs.map +0 -1
  1466. package/dist/site-settings-KJOqJW6W.mjs +0 -50
  1467. package/dist/site-settings-KJOqJW6W.mjs.map +0 -1
  1468. package/dist/site-url-Ceq_AUK0.mjs +0 -16
  1469. package/dist/site-url-Ceq_AUK0.mjs.map +0 -1
  1470. package/dist/slugify-T5GHH42D.mjs +0 -17
  1471. package/dist/slugify-T5GHH42D.mjs.map +0 -1
  1472. package/dist/snapshot-Dzsn3NZa.mjs +0 -414
  1473. package/dist/snapshot-Dzsn3NZa.mjs.map +0 -1
  1474. package/dist/ssrf-DsmvZB80.mjs +0 -406
  1475. package/dist/ssrf-DsmvZB80.mjs.map +0 -1
  1476. package/dist/stage-Csnh_yEd.mjs +0 -662
  1477. package/dist/stage-Csnh_yEd.mjs.map +0 -1
  1478. package/dist/staged-Q7pnEVvI.mjs +0 -686
  1479. package/dist/staged-Q7pnEVvI.mjs.map +0 -1
  1480. package/dist/state-kGdOMQRY.mjs +0 -153
  1481. package/dist/state-kGdOMQRY.mjs.map +0 -1
  1482. package/dist/status-D39Fpy8R.mjs +0 -30
  1483. package/dist/status-D39Fpy8R.mjs.map +0 -1
  1484. package/dist/storage-query-C7iy6eUb.d.mts +0 -1615
  1485. package/dist/storage-query-C7iy6eUb.d.mts.map +0 -1
  1486. package/dist/tar-BWiraSUY.mjs +0 -449
  1487. package/dist/tar-BWiraSUY.mjs.map +0 -1
  1488. package/dist/target-DOFs5oUC.mjs +0 -27
  1489. package/dist/target-DOFs5oUC.mjs.map +0 -1
  1490. package/dist/taxonomies-BS40Wxvi.mjs +0 -939
  1491. package/dist/taxonomies-BS40Wxvi.mjs.map +0 -1
  1492. package/dist/taxonomies-DAZU9VDd.mjs +0 -697
  1493. package/dist/taxonomies-DAZU9VDd.mjs.map +0 -1
  1494. package/dist/taxonomy-XzLE95Vx.mjs +0 -525
  1495. package/dist/taxonomy-XzLE95Vx.mjs.map +0 -1
  1496. package/dist/tokens-DSQan4p7.mjs +0 -171
  1497. package/dist/tokens-DSQan4p7.mjs.map +0 -1
  1498. package/dist/transfer-BcCVxDgf.mjs +0 -166
  1499. package/dist/transfer-BcCVxDgf.mjs.map +0 -1
  1500. package/dist/transfer-OMrancOt.mjs +0 -8873
  1501. package/dist/transfer-OMrancOt.mjs.map +0 -1
  1502. package/dist/transfer-download-Dc-ltjZY.mjs +0 -33
  1503. package/dist/transfer-download-Dc-ltjZY.mjs.map +0 -1
  1504. package/dist/transformations-Ddx7UtrY.mjs +0 -196
  1505. package/dist/transformations-Ddx7UtrY.mjs.map +0 -1
  1506. package/dist/transport-flR-Zmds.d.mts +0 -42
  1507. package/dist/transport-flR-Zmds.d.mts.map +0 -1
  1508. package/dist/transport-umzEbgYO.mjs +0 -136
  1509. package/dist/transport-umzEbgYO.mjs.map +0 -1
  1510. package/dist/trusted-proxy-BqfQFs6a.mjs +0 -51
  1511. package/dist/trusted-proxy-BqfQFs6a.mjs.map +0 -1
  1512. package/dist/turnstile-Do60baId.mjs +0 -58
  1513. package/dist/turnstile-Do60baId.mjs.map +0 -1
  1514. package/dist/types-BT1p3uyb.d.mts +0 -1735
  1515. package/dist/types-BT1p3uyb.d.mts.map +0 -1
  1516. package/dist/types-BYaPWs_F.d.mts +0 -198
  1517. package/dist/types-BYaPWs_F.d.mts.map +0 -1
  1518. package/dist/types-C-Xp0CcN.mjs +0 -103
  1519. package/dist/types-C-Xp0CcN.mjs.map +0 -1
  1520. package/dist/types-CLTQ9b_r.d.mts +0 -374
  1521. package/dist/types-CLTQ9b_r.d.mts.map +0 -1
  1522. package/dist/types-CPkQw2T2.d.mts +0 -85
  1523. package/dist/types-CPkQw2T2.d.mts.map +0 -1
  1524. package/dist/types-CQLvuXoZ.d.mts +0 -198
  1525. package/dist/types-CQLvuXoZ.d.mts.map +0 -1
  1526. package/dist/types-CV5xszpF.d.mts +0 -363
  1527. package/dist/types-CV5xszpF.d.mts.map +0 -1
  1528. package/dist/types-CdEMurNh.mjs +0 -77
  1529. package/dist/types-CdEMurNh.mjs.map +0 -1
  1530. package/dist/types-CxwtnuSS.mjs +0 -37
  1531. package/dist/types-CxwtnuSS.mjs.map +0 -1
  1532. package/dist/types-DGw8KMX_.mjs +0 -16
  1533. package/dist/types-DGw8KMX_.mjs.map +0 -1
  1534. package/dist/types-DOfVMPoo.d.mts +0 -125
  1535. package/dist/types-DOfVMPoo.d.mts.map +0 -1
  1536. package/dist/types-LtS0SM4F.d.mts +0 -287
  1537. package/dist/types-LtS0SM4F.d.mts.map +0 -1
  1538. package/dist/types-ifgOkcBa.d.mts +0 -916
  1539. package/dist/types-ifgOkcBa.d.mts.map +0 -1
  1540. package/dist/update-check-DOc2aBIU.mjs +0 -161
  1541. package/dist/update-check-DOc2aBIU.mjs.map +0 -1
  1542. package/dist/upload-attempts-nzdc3cay.mjs +0 -32
  1543. package/dist/upload-attempts-nzdc3cay.mjs.map +0 -1
  1544. package/dist/url-pattern-hVbqpXs6.mjs +0 -41
  1545. package/dist/url-pattern-hVbqpXs6.mjs.map +0 -1
  1546. package/dist/user-Dnp53zTq.mjs +0 -171
  1547. package/dist/user-Dnp53zTq.mjs.map +0 -1
  1548. package/dist/utils-CoV-PYhg.mjs +0 -439
  1549. package/dist/utils-CoV-PYhg.mjs.map +0 -1
  1550. package/dist/validate-CfQ9_YlD.d.mts +0 -468
  1551. package/dist/validate-CfQ9_YlD.d.mts.map +0 -1
  1552. package/dist/validate-DBX3DKtL.mjs +0 -516
  1553. package/dist/validate-DBX3DKtL.mjs.map +0 -1
  1554. package/dist/validation-BJMiDhB1.mjs +0 -219
  1555. package/dist/validation-BJMiDhB1.mjs.map +0 -1
  1556. package/dist/version-BaT8yKIT.mjs +0 -7
  1557. package/dist/version-BaT8yKIT.mjs.map +0 -1
  1558. package/dist/version-BwEGkqkx.mjs +0 -9
  1559. package/dist/version-BwEGkqkx.mjs.map +0 -1
  1560. package/dist/virtual-modules-B6vJW15k.mjs +0 -516
  1561. package/dist/virtual-modules-B6vJW15k.mjs.map +0 -1
  1562. package/dist/widgets-BkxBAgZ_.mjs +0 -126
  1563. package/dist/widgets-BkxBAgZ_.mjs.map +0 -1
  1564. package/dist/wxr-taxonomies-D7gAJyOF.mjs +0 -453
  1565. package/dist/wxr-taxonomies-D7gAJyOF.mjs.map +0 -1
  1566. package/dist/wxr-taxonomies-DM5J9AsT.d.mts +0 -34
  1567. package/dist/wxr-taxonomies-DM5J9AsT.d.mts.map +0 -1
  1568. package/dist/zod-generator-BQilAboC.mjs +0 -424
  1569. package/dist/zod-generator-BQilAboC.mjs.map +0 -1
  1570. /package/dist/{api-tokens-BLz2MtQs.mjs → api-tokens-CdP49zVF.mjs} +0 -0
  1571. /package/dist/{ssrf-tA45vIPX.mjs → ssrf-DM0E-D_8.mjs} +0 -0
@@ -0,0 +1,2126 @@
1
+ import { t as OptionsRepository } from "./options-DhrI7eMv.mjs";
2
+ import { d as invalidateMenuObjectCache, u as invalidateCommentObjectCache } from "./object-cache-Bo6DGaC9.mjs";
3
+ import { n as slugify } from "./slugify-bu2-jKia.mjs";
4
+ import { c as invalidateSiteSettingsCache } from "./settings-CWb84sDm.mjs";
5
+ import { a as ssrfSafeFetch, r as resolveAndValidateExternalUrl, s as validateExternalUrl } from "./ssrf-BcYjyM4M.mjs";
6
+ import { a as getFilenameFromUrl, c as isInternalMetaKey, d as isTypeCompatible, f as mapMetaKeyToField, g as relativizeContentLinks, h as normalizeUrl$1, i as checkSchemaCompatibility, l as isInternalPostType, m as mapWpStatus, n as FEATURED_IMAGE_FIELD, o as guessMimeType, p as mapPostTypeToCollection, r as buildAttachmentMap, s as inferMetaType, t as BASE_REQUIRED_FIELDS, u as isPluginBookkeepingMeta, v as sanitizeFieldSlug } from "./utils-TPt7w2cS.mjs";
7
+ import { ulid } from "ulidx";
8
+ import sax from "sax";
9
+ import { gutenbergToPortableText } from "@emdash-cms/gutenberg-to-portable-text";
10
+
11
+ //#region src/cli/wxr/parser.ts
12
+ const PHP_SERIALIZED_STRING_PATTERN = /s:\d+:"([^"]+)"/g;
13
+ const PHP_SERIALIZED_STRING_MATCH_PATTERN = /s:\d+:"([^"]+)"/;
14
+ /**
15
+ * WPML stores per-post language in postmeta as `_icl_lang_code`. The shared
16
+ * translation id is `trid` (this is the group ID -- every translation of the
17
+ * same content shares it). `_icl_translation_id` exists on some exports too
18
+ * but is a per-translation row id from `wp_icl_translations`, NOT the group
19
+ * id, so it must NOT be used as the group key. We accept it only when `trid`
20
+ * is absent and trust the export to be internally consistent (the only case
21
+ * where that's reasonable is single-post exports with no real grouping).
22
+ *
23
+ * See `wpml_element_trid` in the WPML hook docs: "the ID of the translation
24
+ * group".
25
+ */
26
+ const WPML_LOCALE_META_KEYS = ["_icl_lang_code"];
27
+ const WPML_TRID_META_KEYS = ["trid", "_icl_translation_id"];
28
+ /**
29
+ * Polylang stores per-post language in postmeta as `_locale` on newer
30
+ * exports. The actual language taxonomy assignment lives on
31
+ * `customTaxonomies.language`, which we use as a fallback. Translation
32
+ * grouping is encoded in `_translations` as a serialized PHP map of
33
+ * `{ lang_code => post_id }`; we synthesize a stable group key from the
34
+ * sorted IDs so every member of the group resolves to the same string.
35
+ */
36
+ const POLYLANG_LOCALE_META_KEY = "_locale";
37
+ const POLYLANG_TRANSLATIONS_META_KEY = "_translations";
38
+ const POLYLANG_LANG_TAXONOMY = "language";
39
+ /**
40
+ * Extract a list of post-IDs from Polylang's `_translations` PHP-serialized
41
+ * value. The format we care about is roughly:
42
+ *
43
+ * a:2:{s:2:"en";i:1;s:2:"ar";i:7;}
44
+ *
45
+ * We don't need to round-trip the PHP value -- we just need a stable group
46
+ * key shared by every translation of the same content. Concatenating the
47
+ * sorted IDs gives us exactly that: every post in the group derives the
48
+ * same key from its own copy of `_translations`.
49
+ *
50
+ * Naïve `/i:(\d+);/g` would also match `i:N;` literals embedded INSIDE
51
+ * string values (e.g. `s:11:"i:42;hello";`), which would silently corrupt
52
+ * the group key. We walk the serialized blob token-by-token instead.
53
+ *
54
+ * PHP serializes `s:LEN:"..."` with LEN counted in BYTES, not characters
55
+ * (UTF-8 byte length). JS string positions are UTF-16 code units, so we
56
+ * encode to bytes via `TextEncoder` and walk byte offsets. Single-byte-only
57
+ * inputs (the common case for Polylang's `_translations` which only stores
58
+ * ASCII locale codes) take the same path; the encoder is cheap.
59
+ */
60
+ function polylangTranslationGroupFromMeta(serialized) {
61
+ const bytes = new TextEncoder().encode(serialized);
62
+ const decoder = new TextDecoder("utf-8");
63
+ const ids = [];
64
+ let i = 0;
65
+ const n = bytes.length;
66
+ const CHAR_S = 115;
67
+ const CHAR_I = 105;
68
+ const CHAR_COLON = 58;
69
+ const CHAR_SEMI = 59;
70
+ const CHAR_QUOTE = 34;
71
+ const indexOf = (byte, from) => {
72
+ for (let k = from; k < n; k++) if (bytes[k] === byte) return k;
73
+ return -1;
74
+ };
75
+ while (i < n) {
76
+ const ch = bytes[i];
77
+ if (ch === CHAR_S && bytes[i + 1] === CHAR_COLON) {
78
+ const lenStart = i + 2;
79
+ const lenEnd = indexOf(CHAR_COLON, lenStart);
80
+ if (lenEnd === -1) break;
81
+ const lenText = decoder.decode(bytes.slice(lenStart, lenEnd));
82
+ const len = Number.parseInt(lenText, 10);
83
+ if (!Number.isFinite(len) || len < 0) {
84
+ i = lenEnd + 1;
85
+ continue;
86
+ }
87
+ if (bytes[lenEnd + 1] !== CHAR_QUOTE) {
88
+ i = lenEnd + 1;
89
+ continue;
90
+ }
91
+ i = lenEnd + 2 + len + 2;
92
+ continue;
93
+ }
94
+ if (ch === CHAR_I && bytes[i + 1] === CHAR_COLON) {
95
+ const valStart = i + 2;
96
+ const valEnd = indexOf(CHAR_SEMI, valStart);
97
+ if (valEnd === -1) break;
98
+ const idText = decoder.decode(bytes.slice(valStart, valEnd));
99
+ const id = Number.parseInt(idText, 10);
100
+ if (Number.isFinite(id)) ids.push(id);
101
+ i = valEnd + 1;
102
+ continue;
103
+ }
104
+ i++;
105
+ }
106
+ if (ids.length === 0) return void 0;
107
+ return `pll:${[...new Set(ids)].toSorted((a, b) => a - b).join(",")}`;
108
+ }
109
+ /**
110
+ * Promote multilingual-plugin metadata from `post.meta` and
111
+ * `post.customTaxonomies` into `post.locale` / `post.translationGroup`.
112
+ *
113
+ * Called once per `<item>` after all of its `<wp:postmeta>` and per-item
114
+ * `<category>` entries have been parsed. Safe to call on posts that have no
115
+ * multilingual metadata -- it's a no-op in that case.
116
+ *
117
+ * WPML wins over Polylang when both are present (they shouldn't co-exist on
118
+ * the same site, but defensive precedence avoids ambiguity).
119
+ */
120
+ function promoteI18nMetadata(post) {
121
+ for (const key of WPML_LOCALE_META_KEYS) {
122
+ const value = post.meta.get(key);
123
+ if (value) {
124
+ post.locale = value;
125
+ break;
126
+ }
127
+ }
128
+ for (const key of WPML_TRID_META_KEYS) {
129
+ const value = post.meta.get(key);
130
+ if (value) {
131
+ post.translationGroup = `wpml:${value}`;
132
+ break;
133
+ }
134
+ }
135
+ if (!post.locale) {
136
+ const pllLocale = post.meta.get(POLYLANG_LOCALE_META_KEY);
137
+ if (pllLocale) post.locale = pllLocale;
138
+ else {
139
+ const firstLang = (post.customTaxonomies?.get(POLYLANG_LANG_TAXONOMY))?.[0];
140
+ if (firstLang) post.locale = firstLang;
141
+ }
142
+ }
143
+ if (!post.translationGroup) {
144
+ const pllTranslations = post.meta.get(POLYLANG_TRANSLATIONS_META_KEY);
145
+ if (pllTranslations) {
146
+ const group = polylangTranslationGroupFromMeta(pllTranslations);
147
+ if (group) post.translationGroup = group;
148
+ }
149
+ }
150
+ }
151
+ /** Extract string value from a SAX attribute (handles both Tag and QualifiedTag) */
152
+ function attrStr(attr) {
153
+ if (typeof attr === "string") return attr;
154
+ if (attr && typeof attr === "object" && "value" in attr) return attr.value;
155
+ return "";
156
+ }
157
+ /**
158
+ * Normalise a `<category domain="...">` value to the matching EmDash
159
+ * taxonomy name so per-item label captures can be retrieved later using
160
+ * the same key.
161
+ */
162
+ function normaliseDomain(domain) {
163
+ if (domain === "post_tag") return "tag";
164
+ return domain;
165
+ }
166
+ /**
167
+ * Persist the human label of a `<category>` text body keyed by the
168
+ * normalised `(taxonomy, slug)` pair. Skips trivial labels that equal the
169
+ * slug (no information vs. just storing the slug).
170
+ */
171
+ function captureItemCategoryLabel(item, pair, label) {
172
+ if (!label || label === pair.nicename) return;
173
+ if (!item.taxonomyLabels) item.taxonomyLabels = /* @__PURE__ */ new Map();
174
+ const key = `${normaliseDomain(pair.domain)}\u0000${pair.nicename}`;
175
+ if (!item.taxonomyLabels.has(key)) item.taxonomyLabels.set(key, label);
176
+ }
177
+ /** Type guard for complete WxrTerm (all required fields present) */
178
+ function isCompleteWxrTerm(term) {
179
+ return term.id !== void 0 && term.taxonomy !== void 0 && term.slug !== void 0 && term.name !== void 0;
180
+ }
181
+ /**
182
+ * Parse a WordPress WXR export file
183
+ */
184
+ function parseWxr(stream) {
185
+ return new Promise((resolve, reject) => {
186
+ const parser = sax.createStream(true, { trim: true });
187
+ const data = {
188
+ site: {},
189
+ posts: [],
190
+ attachments: [],
191
+ categories: [],
192
+ tags: [],
193
+ authors: [],
194
+ terms: [],
195
+ navMenus: []
196
+ };
197
+ let currentPath = [];
198
+ let currentText = "";
199
+ let currentItem = null;
200
+ let currentAttachment = null;
201
+ let currentCategory = null;
202
+ let currentTag = null;
203
+ let currentAuthor = null;
204
+ let currentTerm = null;
205
+ let currentMetaKey = "";
206
+ let pendingItemCategory = null;
207
+ const navMenuItemPosts = [];
208
+ const menuTermsBySlug = /* @__PURE__ */ new Map();
209
+ parser.on("opentag", (node) => {
210
+ const tagName = node.name.toLowerCase();
211
+ currentPath.push(tagName);
212
+ currentText = "";
213
+ if (tagName === "item") currentItem = {
214
+ categories: [],
215
+ tags: [],
216
+ customTaxonomies: /* @__PURE__ */ new Map(),
217
+ meta: /* @__PURE__ */ new Map()
218
+ };
219
+ else if (tagName === "wp:category") currentCategory = {};
220
+ else if (tagName === "wp:tag") currentTag = {};
221
+ else if (tagName === "wp:author") currentAuthor = {};
222
+ else if (tagName === "wp:term") currentTerm = {};
223
+ if (tagName === "category" && currentItem && node.attributes) {
224
+ const domain = attrStr(node.attributes.domain);
225
+ const nicename = attrStr(node.attributes.nicename);
226
+ if (domain === "category" && nicename) {
227
+ currentItem.categories.push(nicename);
228
+ pendingItemCategory = {
229
+ domain,
230
+ nicename
231
+ };
232
+ } else if (domain === "post_tag" && nicename) {
233
+ currentItem.tags.push(nicename);
234
+ pendingItemCategory = {
235
+ domain,
236
+ nicename
237
+ };
238
+ } else if (domain && nicename && domain !== "category" && domain !== "post_tag") {
239
+ if (!currentItem.customTaxonomies) currentItem.customTaxonomies = /* @__PURE__ */ new Map();
240
+ const existing = currentItem.customTaxonomies.get(domain) || [];
241
+ existing.push(nicename);
242
+ currentItem.customTaxonomies.set(domain, existing);
243
+ pendingItemCategory = {
244
+ domain,
245
+ nicename
246
+ };
247
+ }
248
+ }
249
+ });
250
+ parser.on("text", (text) => {
251
+ currentText += text;
252
+ });
253
+ parser.on("cdata", (cdata) => {
254
+ currentText += cdata;
255
+ });
256
+ parser.on("closetag", (tagName) => {
257
+ const tag = tagName.toLowerCase();
258
+ const text = currentText.trim();
259
+ if (currentPath.includes("channel") && !currentItem) switch (tag) {
260
+ case "title":
261
+ if (!data.site.title) data.site.title = text;
262
+ break;
263
+ case "link":
264
+ if (!data.site.link) data.site.link = text;
265
+ break;
266
+ case "description":
267
+ if (!data.site.description) data.site.description = text;
268
+ break;
269
+ case "language":
270
+ data.site.language = text;
271
+ break;
272
+ case "wp:base_site_url":
273
+ data.site.baseSiteUrl = text;
274
+ break;
275
+ case "wp:base_blog_url":
276
+ data.site.baseBlogUrl = text;
277
+ break;
278
+ }
279
+ if (currentItem) switch (tag) {
280
+ case "title":
281
+ currentItem.title = text;
282
+ break;
283
+ case "link":
284
+ currentItem.link = text;
285
+ break;
286
+ case "pubdate":
287
+ currentItem.pubDate = text;
288
+ break;
289
+ case "dc:creator":
290
+ currentItem.creator = text;
291
+ break;
292
+ case "guid":
293
+ currentItem.guid = text;
294
+ break;
295
+ case "description":
296
+ currentItem.description = text;
297
+ break;
298
+ case "content:encoded":
299
+ currentItem.content = text;
300
+ break;
301
+ case "excerpt:encoded":
302
+ currentItem.excerpt = text;
303
+ break;
304
+ case "wp:post_id":
305
+ currentItem.id = parseInt(text, 10);
306
+ break;
307
+ case "wp:post_date":
308
+ currentItem.postDate = text;
309
+ break;
310
+ case "wp:post_date_gmt":
311
+ currentItem.postDateGmt = text;
312
+ break;
313
+ case "wp:post_modified":
314
+ currentItem.postModified = text;
315
+ break;
316
+ case "wp:post_modified_gmt":
317
+ currentItem.postModifiedGmt = text;
318
+ break;
319
+ case "wp:comment_status":
320
+ currentItem.commentStatus = text;
321
+ break;
322
+ case "wp:ping_status":
323
+ currentItem.pingStatus = text;
324
+ break;
325
+ case "wp:status":
326
+ currentItem.status = text;
327
+ break;
328
+ case "wp:post_type":
329
+ currentItem.postType = text;
330
+ break;
331
+ case "wp:post_name":
332
+ currentItem.postName = text;
333
+ break;
334
+ case "wp:post_parent":
335
+ currentItem.postParent = parseInt(text, 10);
336
+ break;
337
+ case "wp:menu_order":
338
+ currentItem.menuOrder = parseInt(text, 10);
339
+ break;
340
+ case "wp:post_password":
341
+ currentItem.postPassword = text || void 0;
342
+ break;
343
+ case "wp:is_sticky":
344
+ currentItem.isSticky = text === "1";
345
+ break;
346
+ case "wp:meta_key":
347
+ currentMetaKey = text;
348
+ break;
349
+ case "wp:meta_value":
350
+ if (currentMetaKey) {
351
+ currentItem.meta.set(currentMetaKey, text);
352
+ currentMetaKey = "";
353
+ }
354
+ break;
355
+ case "wp:attachment_url":
356
+ if (currentItem.postType === "attachment") currentAttachment = {
357
+ id: currentItem.id,
358
+ title: currentItem.title,
359
+ url: text,
360
+ postDate: currentItem.postDate,
361
+ meta: currentItem.meta
362
+ };
363
+ break;
364
+ case "category":
365
+ if (pendingItemCategory && text) captureItemCategoryLabel(currentItem, pendingItemCategory, text);
366
+ pendingItemCategory = null;
367
+ break;
368
+ case "item":
369
+ if (currentAttachment) {
370
+ data.attachments.push(currentAttachment);
371
+ currentAttachment = null;
372
+ } else if (currentItem.postType === "nav_menu_item") {
373
+ navMenuItemPosts.push(currentItem);
374
+ data.posts.push(currentItem);
375
+ } else if (currentItem.postType !== "attachment") {
376
+ promoteI18nMetadata(currentItem);
377
+ data.posts.push(currentItem);
378
+ }
379
+ currentItem = null;
380
+ break;
381
+ }
382
+ if (currentCategory) switch (tag) {
383
+ case "wp:term_id":
384
+ currentCategory.id = parseInt(text, 10);
385
+ break;
386
+ case "wp:category_nicename":
387
+ currentCategory.nicename = text;
388
+ break;
389
+ case "wp:cat_name":
390
+ currentCategory.name = text;
391
+ break;
392
+ case "wp:category_parent":
393
+ currentCategory.parent = text || void 0;
394
+ break;
395
+ case "wp:category_description":
396
+ currentCategory.description = text || void 0;
397
+ break;
398
+ case "wp:category":
399
+ if (currentCategory.name) data.categories.push(currentCategory);
400
+ currentCategory = null;
401
+ break;
402
+ }
403
+ if (currentTag) switch (tag) {
404
+ case "wp:term_id":
405
+ currentTag.id = parseInt(text, 10);
406
+ break;
407
+ case "wp:tag_slug":
408
+ currentTag.slug = text;
409
+ break;
410
+ case "wp:tag_name":
411
+ currentTag.name = text;
412
+ break;
413
+ case "wp:tag_description":
414
+ currentTag.description = text || void 0;
415
+ break;
416
+ case "wp:tag":
417
+ if (currentTag.name) data.tags.push(currentTag);
418
+ currentTag = null;
419
+ break;
420
+ }
421
+ if (currentAuthor) switch (tag) {
422
+ case "wp:author_id":
423
+ currentAuthor.id = parseInt(text, 10);
424
+ break;
425
+ case "wp:author_login":
426
+ currentAuthor.login = text;
427
+ break;
428
+ case "wp:author_email":
429
+ currentAuthor.email = text;
430
+ break;
431
+ case "wp:author_display_name":
432
+ currentAuthor.displayName = text;
433
+ break;
434
+ case "wp:author_first_name":
435
+ currentAuthor.firstName = text;
436
+ break;
437
+ case "wp:author_last_name":
438
+ currentAuthor.lastName = text;
439
+ break;
440
+ case "wp:author":
441
+ if (currentAuthor.login) data.authors.push(currentAuthor);
442
+ currentAuthor = null;
443
+ break;
444
+ }
445
+ if (currentTerm) switch (tag) {
446
+ case "wp:term_id":
447
+ currentTerm.id = parseInt(text, 10);
448
+ break;
449
+ case "wp:term_taxonomy":
450
+ currentTerm.taxonomy = text;
451
+ break;
452
+ case "wp:term_slug":
453
+ currentTerm.slug = text;
454
+ break;
455
+ case "wp:term_name":
456
+ currentTerm.name = text;
457
+ break;
458
+ case "wp:term_parent":
459
+ currentTerm.parent = text || void 0;
460
+ break;
461
+ case "wp:term_description":
462
+ currentTerm.description = text || void 0;
463
+ break;
464
+ case "wp:term":
465
+ if (isCompleteWxrTerm(currentTerm)) {
466
+ data.terms.push(currentTerm);
467
+ if (currentTerm.taxonomy === "nav_menu") menuTermsBySlug.set(currentTerm.slug, currentTerm.id);
468
+ }
469
+ currentTerm = null;
470
+ break;
471
+ }
472
+ currentPath.pop();
473
+ currentText = "";
474
+ });
475
+ parser.on("error", (err) => {
476
+ reject(/* @__PURE__ */ new Error(`XML parsing error: ${err.message}`));
477
+ });
478
+ parser.on("end", () => {
479
+ data.navMenus = buildNavMenus(navMenuItemPosts, menuTermsBySlug);
480
+ resolve(data);
481
+ });
482
+ stream.pipe(parser);
483
+ });
484
+ }
485
+ /**
486
+ * Parse a WordPress WXR export from a string
487
+ *
488
+ * Uses the non-streaming SAX parser API for compatibility with
489
+ * environments that don't have Node.js streams (e.g., Cloudflare Workers).
490
+ */
491
+ function parseWxrString(xml) {
492
+ return new Promise((resolve, reject) => {
493
+ const parser = sax.parser(true, {
494
+ trim: false,
495
+ normalize: false
496
+ });
497
+ const data = {
498
+ site: {},
499
+ posts: [],
500
+ attachments: [],
501
+ categories: [],
502
+ tags: [],
503
+ authors: [],
504
+ terms: [],
505
+ navMenus: []
506
+ };
507
+ let currentPath = [];
508
+ let currentText = "";
509
+ let currentItem = null;
510
+ let currentAttachment = null;
511
+ let currentCategory = null;
512
+ let currentTag = null;
513
+ let currentAuthor = null;
514
+ let currentTerm = null;
515
+ let currentMetaKey = "";
516
+ let pendingItemCategory = null;
517
+ const navMenuItemPosts = [];
518
+ const menuTermsBySlug = /* @__PURE__ */ new Map();
519
+ parser.onopentag = (node) => {
520
+ const tag = node.name.toLowerCase();
521
+ currentPath.push(tag);
522
+ currentText = "";
523
+ if (tag === "item") currentItem = {
524
+ categories: [],
525
+ tags: [],
526
+ customTaxonomies: /* @__PURE__ */ new Map(),
527
+ meta: /* @__PURE__ */ new Map()
528
+ };
529
+ else if (tag === "wp:category") currentCategory = {};
530
+ else if (tag === "wp:tag") currentTag = {};
531
+ else if (tag === "wp:author") currentAuthor = {};
532
+ else if (tag === "wp:term") currentTerm = {};
533
+ if (tag === "category" && currentItem && node.attributes) {
534
+ const domain = attrStr(node.attributes.domain);
535
+ const nicename = attrStr(node.attributes.nicename);
536
+ if (domain === "category" && nicename) {
537
+ currentItem.categories.push(nicename);
538
+ pendingItemCategory = {
539
+ domain,
540
+ nicename
541
+ };
542
+ } else if (domain === "post_tag" && nicename) {
543
+ currentItem.tags.push(nicename);
544
+ pendingItemCategory = {
545
+ domain,
546
+ nicename
547
+ };
548
+ } else if (domain && nicename && domain !== "category" && domain !== "post_tag") {
549
+ if (!currentItem.customTaxonomies) currentItem.customTaxonomies = /* @__PURE__ */ new Map();
550
+ const existing = currentItem.customTaxonomies.get(domain) || [];
551
+ existing.push(nicename);
552
+ currentItem.customTaxonomies.set(domain, existing);
553
+ pendingItemCategory = {
554
+ domain,
555
+ nicename
556
+ };
557
+ }
558
+ }
559
+ };
560
+ parser.ontext = (text) => {
561
+ currentText += text;
562
+ };
563
+ parser.oncdata = (cdata) => {
564
+ currentText += cdata;
565
+ };
566
+ parser.onclosetag = (tagName) => {
567
+ const tag = tagName.toLowerCase();
568
+ const text = currentText.trim();
569
+ if (currentPath.length === 3 && currentPath[1] === "channel") switch (tag) {
570
+ case "title":
571
+ data.site.title = text;
572
+ break;
573
+ case "link":
574
+ data.site.link = text;
575
+ break;
576
+ case "description":
577
+ data.site.description = text;
578
+ break;
579
+ case "language":
580
+ data.site.language = text;
581
+ break;
582
+ case "wp:base_site_url":
583
+ data.site.baseSiteUrl = text;
584
+ break;
585
+ case "wp:base_blog_url":
586
+ data.site.baseBlogUrl = text;
587
+ break;
588
+ }
589
+ if (currentItem) switch (tag) {
590
+ case "title":
591
+ currentItem.title = text;
592
+ break;
593
+ case "link":
594
+ currentItem.link = text;
595
+ break;
596
+ case "pubdate":
597
+ currentItem.pubDate = text;
598
+ break;
599
+ case "dc:creator":
600
+ currentItem.creator = text;
601
+ break;
602
+ case "guid":
603
+ currentItem.guid = text;
604
+ break;
605
+ case "description":
606
+ currentItem.description = text;
607
+ break;
608
+ case "content:encoded":
609
+ currentItem.content = text;
610
+ break;
611
+ case "excerpt:encoded":
612
+ currentItem.excerpt = text;
613
+ break;
614
+ case "wp:post_id":
615
+ currentItem.id = parseInt(text, 10);
616
+ break;
617
+ case "wp:post_date":
618
+ currentItem.postDate = text;
619
+ break;
620
+ case "wp:post_date_gmt":
621
+ currentItem.postDateGmt = text;
622
+ break;
623
+ case "wp:post_modified":
624
+ currentItem.postModified = text;
625
+ break;
626
+ case "wp:post_modified_gmt":
627
+ currentItem.postModifiedGmt = text;
628
+ break;
629
+ case "wp:comment_status":
630
+ currentItem.commentStatus = text;
631
+ break;
632
+ case "wp:ping_status":
633
+ currentItem.pingStatus = text;
634
+ break;
635
+ case "wp:post_name":
636
+ currentItem.postName = text;
637
+ break;
638
+ case "wp:status":
639
+ currentItem.status = text;
640
+ break;
641
+ case "wp:post_parent":
642
+ currentItem.postParent = parseInt(text, 10);
643
+ break;
644
+ case "wp:menu_order":
645
+ currentItem.menuOrder = parseInt(text, 10);
646
+ break;
647
+ case "wp:post_type":
648
+ currentItem.postType = text;
649
+ if (text === "attachment") currentAttachment = {
650
+ id: currentItem.id,
651
+ title: currentItem.title,
652
+ url: currentItem.link,
653
+ postDate: currentItem.postDate,
654
+ meta: /* @__PURE__ */ new Map()
655
+ };
656
+ break;
657
+ case "wp:post_password":
658
+ currentItem.postPassword = text || void 0;
659
+ break;
660
+ case "wp:is_sticky":
661
+ currentItem.isSticky = text === "1";
662
+ break;
663
+ case "wp:attachment_url":
664
+ if (currentAttachment) currentAttachment.url = text;
665
+ break;
666
+ case "wp:meta_key":
667
+ currentMetaKey = text;
668
+ break;
669
+ case "wp:meta_value":
670
+ if (currentMetaKey && currentItem.meta) currentItem.meta.set(currentMetaKey, text);
671
+ break;
672
+ case "category":
673
+ if (pendingItemCategory && text) captureItemCategoryLabel(currentItem, pendingItemCategory, text);
674
+ pendingItemCategory = null;
675
+ break;
676
+ case "item":
677
+ if (currentAttachment) {
678
+ data.attachments.push(currentAttachment);
679
+ currentAttachment = null;
680
+ } else if (currentItem.postType === "nav_menu_item") {
681
+ navMenuItemPosts.push(currentItem);
682
+ data.posts.push(currentItem);
683
+ } else if (currentItem.postType !== "attachment") {
684
+ promoteI18nMetadata(currentItem);
685
+ data.posts.push(currentItem);
686
+ }
687
+ currentItem = null;
688
+ break;
689
+ }
690
+ if (currentCategory) switch (tag) {
691
+ case "wp:term_id":
692
+ currentCategory.id = parseInt(text, 10);
693
+ break;
694
+ case "wp:category_nicename":
695
+ currentCategory.nicename = text;
696
+ break;
697
+ case "wp:cat_name":
698
+ currentCategory.name = text;
699
+ break;
700
+ case "wp:category_parent":
701
+ currentCategory.parent = text || void 0;
702
+ break;
703
+ case "wp:category_description":
704
+ currentCategory.description = text || void 0;
705
+ break;
706
+ case "wp:category":
707
+ if (currentCategory.name) data.categories.push(currentCategory);
708
+ currentCategory = null;
709
+ break;
710
+ }
711
+ if (currentTag) switch (tag) {
712
+ case "wp:term_id":
713
+ currentTag.id = parseInt(text, 10);
714
+ break;
715
+ case "wp:tag_slug":
716
+ currentTag.slug = text;
717
+ break;
718
+ case "wp:tag_name":
719
+ currentTag.name = text;
720
+ break;
721
+ case "wp:tag_description":
722
+ currentTag.description = text || void 0;
723
+ break;
724
+ case "wp:tag":
725
+ if (currentTag.name) data.tags.push(currentTag);
726
+ currentTag = null;
727
+ break;
728
+ }
729
+ if (currentAuthor) switch (tag) {
730
+ case "wp:author_id":
731
+ currentAuthor.id = parseInt(text, 10);
732
+ break;
733
+ case "wp:author_login":
734
+ currentAuthor.login = text;
735
+ break;
736
+ case "wp:author_email":
737
+ currentAuthor.email = text;
738
+ break;
739
+ case "wp:author_display_name":
740
+ currentAuthor.displayName = text;
741
+ break;
742
+ case "wp:author_first_name":
743
+ currentAuthor.firstName = text;
744
+ break;
745
+ case "wp:author_last_name":
746
+ currentAuthor.lastName = text;
747
+ break;
748
+ case "wp:author":
749
+ if (currentAuthor.login) data.authors.push(currentAuthor);
750
+ currentAuthor = null;
751
+ break;
752
+ }
753
+ if (currentTerm) switch (tag) {
754
+ case "wp:term_id":
755
+ currentTerm.id = parseInt(text, 10);
756
+ break;
757
+ case "wp:term_taxonomy":
758
+ currentTerm.taxonomy = text;
759
+ break;
760
+ case "wp:term_slug":
761
+ currentTerm.slug = text;
762
+ break;
763
+ case "wp:term_name":
764
+ currentTerm.name = text;
765
+ break;
766
+ case "wp:term_parent":
767
+ currentTerm.parent = text || void 0;
768
+ break;
769
+ case "wp:term_description":
770
+ currentTerm.description = text || void 0;
771
+ break;
772
+ case "wp:term":
773
+ if (isCompleteWxrTerm(currentTerm)) {
774
+ data.terms.push(currentTerm);
775
+ if (currentTerm.taxonomy === "nav_menu") menuTermsBySlug.set(currentTerm.slug, currentTerm.id);
776
+ }
777
+ currentTerm = null;
778
+ break;
779
+ }
780
+ currentPath.pop();
781
+ currentText = "";
782
+ };
783
+ parser.onerror = (err) => {
784
+ reject(/* @__PURE__ */ new Error(`XML parsing error: ${err.message}`));
785
+ };
786
+ parser.onend = () => {
787
+ data.navMenus = buildNavMenus(navMenuItemPosts, menuTermsBySlug);
788
+ resolve(data);
789
+ };
790
+ parser.write(xml).close();
791
+ });
792
+ }
793
+ /**
794
+ * Build structured navigation menus from nav_menu_item posts
795
+ */
796
+ function buildNavMenus(navMenuItemPosts, menuTermsBySlug) {
797
+ const menuItemsByMenu = /* @__PURE__ */ new Map();
798
+ for (const post of navMenuItemPosts) {
799
+ const navMenuSlugs = post.customTaxonomies?.get("nav_menu");
800
+ if (!navMenuSlugs || navMenuSlugs.length === 0) continue;
801
+ const menuSlug = navMenuSlugs[0];
802
+ if (!menuSlug) continue;
803
+ const items = menuItemsByMenu.get(menuSlug) || [];
804
+ items.push(post);
805
+ menuItemsByMenu.set(menuSlug, items);
806
+ }
807
+ const menus = [];
808
+ for (const [menuSlug, posts] of menuItemsByMenu) {
809
+ const menuId = menuTermsBySlug.get(menuSlug) || 0;
810
+ const items = posts.map((post) => {
811
+ const meta = post.meta;
812
+ const menuItemTypeRaw = meta.get("_menu_item_type") || "custom";
813
+ const menuItemType = menuItemTypeRaw === "post_type" || menuItemTypeRaw === "taxonomy" ? menuItemTypeRaw : "custom";
814
+ const objectType = meta.get("_menu_item_object");
815
+ const objectIdStr = meta.get("_menu_item_object_id");
816
+ const url = meta.get("_menu_item_url");
817
+ const parentIdStr = meta.get("_menu_item_menu_item_parent");
818
+ const target = meta.get("_menu_item_target");
819
+ const classesStr = meta.get("_menu_item_classes");
820
+ let classes;
821
+ if (classesStr) {
822
+ const matches = classesStr.match(PHP_SERIALIZED_STRING_PATTERN);
823
+ if (matches) classes = matches.map((m) => m.match(PHP_SERIALIZED_STRING_MATCH_PATTERN)?.[1]).filter(Boolean).join(" ");
824
+ }
825
+ return {
826
+ id: post.id || 0,
827
+ menuId,
828
+ parentId: parentIdStr ? parseInt(parentIdStr, 10) || void 0 : void 0,
829
+ sortOrder: post.menuOrder || 0,
830
+ type: menuItemType,
831
+ objectType: objectType || void 0,
832
+ objectId: objectIdStr ? parseInt(objectIdStr, 10) : void 0,
833
+ url: url || void 0,
834
+ title: post.title || "",
835
+ target: target || void 0,
836
+ classes: classes || void 0
837
+ };
838
+ });
839
+ items.sort((a, b) => a.sortOrder - b.sortOrder);
840
+ menus.push({
841
+ id: menuId,
842
+ name: menuSlug,
843
+ label: menuSlug,
844
+ items
845
+ });
846
+ }
847
+ return menus;
848
+ }
849
+
850
+ //#endregion
851
+ //#region src/import/menus.ts
852
+ /**
853
+ * Import navigation menus from Plugin API
854
+ *
855
+ * @param menus - Menus from plugin API
856
+ * @param db - Database connection
857
+ * @param contentIdMap - Map from WP post ID to EmDash content ID
858
+ * @returns Import result with counts and ID mapping
859
+ */
860
+ async function importMenusFromPlugin(menus, db, contentIdMap) {
861
+ const result = {
862
+ menusCreated: 0,
863
+ itemsCreated: 0,
864
+ menuIdMap: /* @__PURE__ */ new Map(),
865
+ errors: []
866
+ };
867
+ for (const menu of menus) try {
868
+ const existing = await db.selectFrom("_emdash_menus").select("id").where("name", "=", menu.name).executeTakeFirst();
869
+ if (existing) {
870
+ result.menuIdMap.set(menu.name, existing.id);
871
+ continue;
872
+ }
873
+ const menuId = ulid();
874
+ await db.insertInto("_emdash_menus").values({
875
+ id: menuId,
876
+ name: menu.name,
877
+ label: menu.label
878
+ }).execute();
879
+ result.menusCreated++;
880
+ result.menuIdMap.set(menu.name, menuId);
881
+ const itemsCreated = await importPluginMenuItems(menu.items, menuId, db, contentIdMap);
882
+ result.itemsCreated += itemsCreated;
883
+ } catch (error) {
884
+ result.errors.push({
885
+ menu: menu.name,
886
+ error: error instanceof Error ? error.message : String(error)
887
+ });
888
+ }
889
+ if (result.menusCreated > 0) invalidateMenuObjectCache();
890
+ return result;
891
+ }
892
+ /**
893
+ * Import menu items from Plugin API format
894
+ */
895
+ async function importPluginMenuItems(items, menuId, db, contentIdMap) {
896
+ const itemIdMap = /* @__PURE__ */ new Map();
897
+ let count = 0;
898
+ const sortedItems = items.toSorted((a, b) => a.sort_order - b.sort_order);
899
+ for (const item of sortedItems) {
900
+ const itemId = ulid();
901
+ itemIdMap.set(item.id, itemId);
902
+ const { type, collection, referenceId, customUrl } = mapPluginMenuItem(item, contentIdMap);
903
+ await db.insertInto("_emdash_menu_items").values({
904
+ id: itemId,
905
+ menu_id: menuId,
906
+ parent_id: null,
907
+ sort_order: item.sort_order,
908
+ type,
909
+ reference_collection: collection,
910
+ reference_id: referenceId,
911
+ custom_url: customUrl,
912
+ label: item.title,
913
+ title_attr: null,
914
+ target: item.target || null,
915
+ css_classes: item.classes || null
916
+ }).execute();
917
+ count++;
918
+ }
919
+ for (const item of sortedItems) if (item.parent_id) {
920
+ const itemId = itemIdMap.get(item.id);
921
+ const parentId = itemIdMap.get(item.parent_id);
922
+ if (itemId && parentId) await db.updateTable("_emdash_menu_items").set({ parent_id: parentId }).where("id", "=", itemId).execute();
923
+ }
924
+ return count;
925
+ }
926
+ /**
927
+ * Map Plugin menu item to EmDash format
928
+ */
929
+ function mapPluginMenuItem(item, contentIdMap) {
930
+ switch (item.type) {
931
+ case "custom": return {
932
+ type: "custom",
933
+ collection: null,
934
+ referenceId: null,
935
+ customUrl: item.url || "#"
936
+ };
937
+ case "post_type": {
938
+ const collection = mapObjectToCollection(item.object);
939
+ const referenceId = item.object_id ? contentIdMap.get(item.object_id) || null : null;
940
+ if (!referenceId && item.url) return {
941
+ type: "custom",
942
+ collection: null,
943
+ referenceId: null,
944
+ customUrl: item.url
945
+ };
946
+ return {
947
+ type: collection === "pages" ? "page" : "post",
948
+ collection,
949
+ referenceId,
950
+ customUrl: null
951
+ };
952
+ }
953
+ case "taxonomy": return {
954
+ type: "custom",
955
+ collection: null,
956
+ referenceId: null,
957
+ customUrl: item.url || "#"
958
+ };
959
+ default: return {
960
+ type: "custom",
961
+ collection: null,
962
+ referenceId: null,
963
+ customUrl: item.url || "#"
964
+ };
965
+ }
966
+ }
967
+ /**
968
+ * Map WordPress object type to EmDash collection name
969
+ */
970
+ function mapObjectToCollection(objectType) {
971
+ if (!objectType) return "posts";
972
+ return {
973
+ post: "posts",
974
+ page: "pages",
975
+ product: "products",
976
+ portfolio: "portfolio"
977
+ }[objectType] || objectType;
978
+ }
979
+
980
+ //#endregion
981
+ //#region src/import/sections.ts
982
+ /**
983
+ * Import reusable blocks (wp_block post type) from WXR as sections
984
+ *
985
+ * @param posts - All posts from WXR (will filter to wp_block)
986
+ * @param db - Database connection
987
+ * @returns Import result with counts
988
+ */
989
+ async function importReusableBlocksAsSections(posts, db) {
990
+ const result = {
991
+ sectionsCreated: 0,
992
+ sectionsSkipped: 0,
993
+ errors: []
994
+ };
995
+ const reusableBlocks = posts.filter((post) => post.postType === "wp_block");
996
+ if (reusableBlocks.length === 0) return result;
997
+ for (const block of reusableBlocks) try {
998
+ const slug = block.postName || slugify(block.title || `block-${block.id || Date.now()}`);
999
+ if (await db.selectFrom("_emdash_sections").select("id").where("slug", "=", slug).executeTakeFirst()) {
1000
+ result.sectionsSkipped++;
1001
+ continue;
1002
+ }
1003
+ const content = block.content ? gutenbergToPortableText(block.content) : [];
1004
+ const id = ulid();
1005
+ const now = (/* @__PURE__ */ new Date()).toISOString();
1006
+ await db.insertInto("_emdash_sections").values({
1007
+ id,
1008
+ slug,
1009
+ title: block.title || "Untitled Block",
1010
+ description: null,
1011
+ keywords: null,
1012
+ content: JSON.stringify(content),
1013
+ preview_media_id: null,
1014
+ source: "import",
1015
+ theme_id: null,
1016
+ created_at: now,
1017
+ updated_at: now
1018
+ }).execute();
1019
+ result.sectionsCreated++;
1020
+ } catch (error) {
1021
+ result.errors.push({
1022
+ title: block.title || "Untitled Block",
1023
+ error: error instanceof Error ? error.message : String(error)
1024
+ });
1025
+ }
1026
+ return result;
1027
+ }
1028
+
1029
+ //#endregion
1030
+ //#region src/import/comments.ts
1031
+ /**
1032
+ * Import comments from the plugin API.
1033
+ *
1034
+ * Preserves original timestamps and threading. Comments whose post was
1035
+ * not imported (no entry in `contentIdMap`) are skipped. Re-running the
1036
+ * import is idempotent: a comment with the same post, author email, and
1037
+ * timestamp is not created twice.
1038
+ *
1039
+ * @param comments - Comments from the plugin API (all pages, flat)
1040
+ * @param db - Database connection
1041
+ * @param contentIdMap - WP post ID -> EmDash content ID
1042
+ * @param collectionMap - WP post ID -> EmDash collection slug
1043
+ * @param rootIds - Optional pre-seeded WP-comment-ID -> EmDash-root-ID map.
1044
+ * The chunked import passes the map accumulated from earlier pages so a
1045
+ * reply in page N can thread onto a parent imported in page N-1; the
1046
+ * function adds this page's entries to it.
1047
+ */
1048
+ async function importCommentsFromPlugin(comments, db, contentIdMap, collectionMap, rootIds) {
1049
+ const result = {
1050
+ imported: 0,
1051
+ skipped: 0,
1052
+ errors: []
1053
+ };
1054
+ const commentIdMap = /* @__PURE__ */ new Map();
1055
+ const rootIdMap = rootIds ?? /* @__PURE__ */ new Map();
1056
+ const sorted = comments.toSorted((a, b) => a.id - b.id);
1057
+ for (const comment of sorted) {
1058
+ const label = `${comment.author_name || "Anonymous"} (${comment.date_gmt})`;
1059
+ try {
1060
+ const contentId = contentIdMap.get(comment.post_id);
1061
+ const collection = collectionMap.get(comment.post_id);
1062
+ if (!contentId || !collection) {
1063
+ result.skipped++;
1064
+ continue;
1065
+ }
1066
+ const parsed = new Date(comment.date_gmt);
1067
+ const createdAt = Number.isNaN(parsed.getTime()) ? (/* @__PURE__ */ new Date()).toISOString() : parsed.toISOString();
1068
+ const existing = await db.selectFrom("_emdash_comments").select("id").where("content_id", "=", contentId).where("author_email", "=", comment.author_email).where("created_at", "=", createdAt).where("body", "=", comment.body).executeTakeFirst();
1069
+ const parentId = comment.parent_id !== null ? rootIdMap.get(comment.parent_id) ?? null : null;
1070
+ if (existing) {
1071
+ commentIdMap.set(comment.id, existing.id);
1072
+ rootIdMap.set(comment.id, parentId ?? existing.id);
1073
+ result.skipped++;
1074
+ continue;
1075
+ }
1076
+ const id = ulid();
1077
+ await db.insertInto("_emdash_comments").values({
1078
+ id,
1079
+ collection,
1080
+ content_id: contentId,
1081
+ parent_id: parentId,
1082
+ author_name: comment.author_name || "Anonymous",
1083
+ author_email: comment.author_email,
1084
+ author_user_id: null,
1085
+ body: comment.body,
1086
+ status: comment.status,
1087
+ ip_hash: null,
1088
+ user_agent: null,
1089
+ moderation_metadata: null,
1090
+ created_at: createdAt,
1091
+ updated_at: createdAt
1092
+ }).execute();
1093
+ commentIdMap.set(comment.id, id);
1094
+ rootIdMap.set(comment.id, parentId ?? id);
1095
+ result.imported++;
1096
+ } catch (error) {
1097
+ result.errors.push({
1098
+ comment: label,
1099
+ error: error instanceof Error ? error.message : String(error)
1100
+ });
1101
+ }
1102
+ }
1103
+ if (result.imported > 0) invalidateCommentObjectCache();
1104
+ return result;
1105
+ }
1106
+
1107
+ //#endregion
1108
+ //#region src/import/settings.ts
1109
+ /** Options key prefix used by the site settings module (`settings/index.ts`). */
1110
+ const SETTINGS_PREFIX = "site:";
1111
+ /**
1112
+ * Import site settings from analysis into EmDash site settings.
1113
+ *
1114
+ * Writes the `site:*` options consumed by `getSiteSettings()` and
1115
+ * invalidates the settings cache. Logo/favicon are only applied when
1116
+ * the caller resolved them to EmDash media IDs.
1117
+ *
1118
+ * @param settings - Site settings analysis
1119
+ * @param db - Database connection
1120
+ * @param overwrite - Whether to overwrite existing settings (a fresh
1121
+ * site's seed already sets title/tagline, so migrations pass true)
1122
+ * @param media - Resolved media IDs for logo/favicon
1123
+ */
1124
+ async function importSiteSettings(settings, db, overwrite = false, media = {}) {
1125
+ const result = {
1126
+ applied: [],
1127
+ skipped: [],
1128
+ errors: []
1129
+ };
1130
+ const updates = [];
1131
+ if (settings.title) updates.push({
1132
+ setting: "title",
1133
+ value: settings.title
1134
+ });
1135
+ if (settings.tagline) updates.push({
1136
+ setting: "tagline",
1137
+ value: settings.tagline
1138
+ });
1139
+ if (media.logoMediaId) updates.push({
1140
+ setting: "logo",
1141
+ value: { mediaId: media.logoMediaId }
1142
+ });
1143
+ if (media.faviconMediaId) updates.push({
1144
+ setting: "favicon",
1145
+ value: { mediaId: media.faviconMediaId }
1146
+ });
1147
+ if (updates.length === 0) return result;
1148
+ const options = new OptionsRepository(db);
1149
+ try {
1150
+ for (const { setting, value } of updates) try {
1151
+ const key = `${SETTINGS_PREFIX}${setting}`;
1152
+ if (!overwrite) {
1153
+ if (await options.get(key) !== null) {
1154
+ result.skipped.push(setting);
1155
+ continue;
1156
+ }
1157
+ }
1158
+ await options.set(key, value);
1159
+ result.applied.push(setting);
1160
+ } catch (error) {
1161
+ result.errors.push({
1162
+ setting,
1163
+ error: error instanceof Error ? error.message : String(error)
1164
+ });
1165
+ }
1166
+ } finally {
1167
+ if (result.applied.length > 0) invalidateSiteSettingsCache();
1168
+ }
1169
+ return result;
1170
+ }
1171
+ /**
1172
+ * Parse site settings from WordPress plugin options response
1173
+ */
1174
+ function parseSiteSettingsFromPlugin(options) {
1175
+ const settings = {};
1176
+ if (typeof options.blogname === "string" && options.blogname.trim() !== "") settings.title = options.blogname;
1177
+ if (typeof options.blogdescription === "string" && options.blogdescription.trim() !== "") settings.tagline = options.blogdescription;
1178
+ if (typeof options.custom_logo_url === "string" && options.custom_logo_url !== "") settings.logo = {
1179
+ url: options.custom_logo_url,
1180
+ id: typeof options.custom_logo === "number" ? options.custom_logo : void 0
1181
+ };
1182
+ if (typeof options.site_icon_url === "string" && options.site_icon_url !== "") settings.favicon = {
1183
+ url: options.site_icon_url,
1184
+ id: typeof options.site_icon === "number" ? options.site_icon : void 0
1185
+ };
1186
+ return settings;
1187
+ }
1188
+
1189
+ //#endregion
1190
+ //#region src/import/registry.ts
1191
+ /**
1192
+ * Import source registry
1193
+ *
1194
+ * Manages available import sources and provides URL probing.
1195
+ */
1196
+ const TRAILING_SLASHES_PATTERN = /\/+$/;
1197
+ /** Registered import sources */
1198
+ const sources = /* @__PURE__ */ new Map();
1199
+ /**
1200
+ * A bot-protection challenge page (for example Cloudflare's "Just a moment...")
1201
+ * answered instead of the source's API. Server-side requests can't solve it,
1202
+ * so the site owner has to let the importer's requests through.
1203
+ */
1204
+ var SiteChallengeError = class extends Error {
1205
+ constructor() {
1206
+ super("Cloudflare's bot protection answered with a challenge page instead of the EmDash Exporter API. Let requests to /wp-json/emdash/v1/ and ?rest_route=/emdash/v1/ through (for example with a WAF custom rule that skips bot protection), or pause bot protection during the migration.");
1207
+ this.name = "SiteChallengeError";
1208
+ }
1209
+ };
1210
+ /**
1211
+ * Register an import source
1212
+ */
1213
+ function registerSource(source) {
1214
+ sources.set(source.id, source);
1215
+ }
1216
+ /**
1217
+ * Get a source by ID
1218
+ */
1219
+ function getSource(id) {
1220
+ return sources.get(id);
1221
+ }
1222
+ /**
1223
+ * Get all registered sources
1224
+ */
1225
+ function getAllSources() {
1226
+ return [...sources.values()];
1227
+ }
1228
+ /**
1229
+ * Get sources that can handle file uploads
1230
+ */
1231
+ function getFileSources() {
1232
+ return getAllSources().filter((s) => s.requiresFile);
1233
+ }
1234
+ /**
1235
+ * Get sources that can probe URLs
1236
+ */
1237
+ function getUrlSources() {
1238
+ return getAllSources().filter((s) => s.canProbe);
1239
+ }
1240
+ /**
1241
+ * Probe a URL against all registered sources
1242
+ *
1243
+ * Returns probe results sorted by confidence (definite > likely > possible)
1244
+ */
1245
+ async function probeUrl(url) {
1246
+ let normalizedUrl = url.trim();
1247
+ if (!normalizedUrl.startsWith("http")) normalizedUrl = `https://${normalizedUrl}`;
1248
+ normalizedUrl = normalizedUrl.replace(TRAILING_SLASHES_PATTERN, "");
1249
+ await resolveAndValidateExternalUrl(normalizedUrl);
1250
+ const results = [];
1251
+ const urlSources = getUrlSources();
1252
+ let challenged = false;
1253
+ const probePromises = urlSources.map(async (source) => {
1254
+ try {
1255
+ const result = await source.probe?.(normalizedUrl);
1256
+ if (result) return result;
1257
+ } catch (error) {
1258
+ if (error instanceof SiteChallengeError) challenged = true;
1259
+ console.debug(`Probe failed for ${source.id}:`, error);
1260
+ }
1261
+ return null;
1262
+ });
1263
+ const probeResults = await Promise.allSettled(probePromises);
1264
+ for (const result of probeResults) if (result.status === "fulfilled" && result.value) results.push(result.value);
1265
+ const confidenceOrder = {
1266
+ definite: 0,
1267
+ likely: 1,
1268
+ possible: 2
1269
+ };
1270
+ results.sort((a, b) => confidenceOrder[a.confidence] - confidenceOrder[b.confidence]);
1271
+ return {
1272
+ url: normalizedUrl,
1273
+ isWordPress: results.length > 0,
1274
+ bestMatch: results[0] ?? null,
1275
+ allMatches: results,
1276
+ ...challenged && results.length === 0 ? { challenged: true } : {}
1277
+ };
1278
+ }
1279
+ /**
1280
+ * Clear all registered sources (useful for testing)
1281
+ */
1282
+ function clearSources() {
1283
+ sources.clear();
1284
+ }
1285
+
1286
+ //#endregion
1287
+ //#region src/import/sources/wxr.ts
1288
+ /**
1289
+ * WXR (WordPress eXtended RSS) import source
1290
+ *
1291
+ * Handles WordPress export file uploads (.xml).
1292
+ * This wraps the existing WXR parsing and analysis logic.
1293
+ */
1294
+ const wxrSource = {
1295
+ id: "wxr",
1296
+ name: "WordPress Export File",
1297
+ description: "Upload a WordPress export file (.xml)",
1298
+ icon: "upload",
1299
+ requiresFile: true,
1300
+ canProbe: false,
1301
+ async analyze(input, context) {
1302
+ if (input.type !== "file") throw new Error("WXR source requires a file input");
1303
+ return analyzeWxrData(await parseWxrString(await input.file.text()), context.getExistingCollections ? await context.getExistingCollections() : /* @__PURE__ */ new Map());
1304
+ },
1305
+ async *fetchContent(input, options) {
1306
+ if (input.type !== "file") throw new Error("WXR source requires a file input");
1307
+ const wxr = await parseWxrString(await input.file.text());
1308
+ const attachmentMap = buildAttachmentMap(wxr.attachments);
1309
+ let count = 0;
1310
+ for (const post of wxr.posts) {
1311
+ const postType = post.postType || "post";
1312
+ if (!options.postTypes.includes(postType)) continue;
1313
+ if (isInternalPostType(postType)) continue;
1314
+ if (!options.includeDrafts && post.status !== "publish") continue;
1315
+ yield wxrPostToNormalizedItem(post, attachmentMap, wxr.site.link || "");
1316
+ count++;
1317
+ if (options.limit && count >= options.limit) break;
1318
+ }
1319
+ }
1320
+ };
1321
+ /**
1322
+ * Analyze WXR data and return normalized ImportAnalysis
1323
+ */
1324
+ function analyzeWxrData(wxr, existingCollections) {
1325
+ const postTypeCounts = /* @__PURE__ */ new Map();
1326
+ const postTypesWithThumbnails = /* @__PURE__ */ new Set();
1327
+ const metaKeys = /* @__PURE__ */ new Map();
1328
+ const authorPostCounts = /* @__PURE__ */ new Map();
1329
+ for (const post of wxr.posts) {
1330
+ const type = post.postType || "post";
1331
+ postTypeCounts.set(type, (postTypeCounts.get(type) || 0) + 1);
1332
+ if (post.creator) authorPostCounts.set(post.creator, (authorPostCounts.get(post.creator) || 0) + 1);
1333
+ if (post.meta.has("_thumbnail_id")) postTypesWithThumbnails.add(type);
1334
+ for (const [key, value] of post.meta) {
1335
+ const existing = metaKeys.get(key);
1336
+ if (existing) {
1337
+ existing.count++;
1338
+ if (existing.samples.length < 3 && value) existing.samples.push(value.slice(0, 100));
1339
+ } else metaKeys.set(key, {
1340
+ count: 1,
1341
+ samples: value ? [value.slice(0, 100)] : [],
1342
+ isInternal: isInternalMetaKey(key)
1343
+ });
1344
+ }
1345
+ }
1346
+ const customFields = [...metaKeys.entries()].filter(([_, info]) => !info.isInternal).map(([key, info]) => ({
1347
+ key,
1348
+ count: info.count,
1349
+ samples: info.samples,
1350
+ suggestedField: mapMetaKeyToField(key),
1351
+ suggestedType: inferMetaType(key, info.samples[0]),
1352
+ isInternal: info.isInternal
1353
+ })).toSorted((a, b) => b.count - a.count);
1354
+ const postTypes = [...postTypeCounts.entries()].filter(([type]) => !isInternalPostType(type)).map(([name, count]) => {
1355
+ const suggestedCollection = mapPostTypeToCollection(name);
1356
+ const existingCollection = existingCollections.get(suggestedCollection);
1357
+ const requiredFields = [...BASE_REQUIRED_FIELDS];
1358
+ if (postTypesWithThumbnails.has(name)) requiredFields.push(FEATURED_IMAGE_FIELD);
1359
+ return {
1360
+ name,
1361
+ count,
1362
+ suggestedCollection,
1363
+ requiredFields,
1364
+ schemaStatus: checkSchemaCompatibility(requiredFields, existingCollection)
1365
+ };
1366
+ }).toSorted((a, b) => b.count - a.count);
1367
+ const attachmentItems = wxr.attachments.map((att) => {
1368
+ const filename = att.url ? getFilenameFromUrl(att.url) : void 0;
1369
+ const mimeType = filename ? guessMimeType(filename) : void 0;
1370
+ return {
1371
+ id: att.id,
1372
+ title: att.title,
1373
+ url: att.url,
1374
+ filename,
1375
+ mimeType
1376
+ };
1377
+ });
1378
+ const navMenus = wxr.navMenus.map((menu) => ({
1379
+ name: menu.name,
1380
+ label: menu.label,
1381
+ itemCount: menu.items.length
1382
+ }));
1383
+ const taxonomyMap = /* @__PURE__ */ new Map();
1384
+ for (const term of wxr.terms) {
1385
+ if (term.taxonomy === "category" || term.taxonomy === "post_tag" || term.taxonomy === "nav_menu") continue;
1386
+ const existing = taxonomyMap.get(term.taxonomy);
1387
+ if (existing) {
1388
+ existing.count++;
1389
+ if (existing.samples.length < 3) existing.samples.push(term.name);
1390
+ } else taxonomyMap.set(term.taxonomy, {
1391
+ count: 1,
1392
+ samples: [term.name]
1393
+ });
1394
+ }
1395
+ const customTaxonomies = Array.from(taxonomyMap.entries(), ([slug, info]) => ({
1396
+ slug,
1397
+ termCount: info.count,
1398
+ sampleTerms: info.samples
1399
+ })).toSorted((a, b) => b.termCount - a.termCount);
1400
+ const reusableBlocks = wxr.posts.filter((post) => post.postType === "wp_block").map((post) => ({
1401
+ id: post.id || 0,
1402
+ title: post.title || "Untitled Block",
1403
+ slug: post.postName || slugify(post.title || `block-${post.id || Date.now()}`)
1404
+ }));
1405
+ return {
1406
+ sourceId: "wxr",
1407
+ site: {
1408
+ title: wxr.site.title || "WordPress Site",
1409
+ url: wxr.site.link || ""
1410
+ },
1411
+ postTypes,
1412
+ attachments: {
1413
+ count: wxr.attachments.length,
1414
+ items: attachmentItems
1415
+ },
1416
+ categories: wxr.categories.length,
1417
+ tags: wxr.tags.length,
1418
+ authors: wxr.authors.map((a) => ({
1419
+ id: a.id,
1420
+ login: a.login,
1421
+ email: a.email,
1422
+ displayName: a.displayName || a.login || "Unknown",
1423
+ postCount: a.login ? authorPostCounts.get(a.login) || 0 : 0
1424
+ })),
1425
+ navMenus: navMenus.length > 0 ? navMenus : void 0,
1426
+ customTaxonomies: customTaxonomies.length > 0 ? customTaxonomies : void 0,
1427
+ reusableBlocks: reusableBlocks.length > 0 ? reusableBlocks : void 0,
1428
+ customFields
1429
+ };
1430
+ }
1431
+ /**
1432
+ * Convert a WXR post to a normalized item
1433
+ */
1434
+ function wxrPostToNormalizedItem(post, attachmentMap, siteUrl) {
1435
+ const content = post.content ? gutenbergToPortableText(post.content) : [];
1436
+ if (siteUrl) relativizeContentLinks(content, siteUrl);
1437
+ const thumbnailId = post.meta.get("_thumbnail_id");
1438
+ const featuredImage = thumbnailId ? attachmentMap.get(String(thumbnailId)) : void 0;
1439
+ let customTaxonomies;
1440
+ if (post.customTaxonomies && post.customTaxonomies.size > 0) {
1441
+ const filtered = Object.fromEntries([...post.customTaxonomies].filter(([taxonomy]) => taxonomy !== "language"));
1442
+ if (Object.keys(filtered).length > 0) customTaxonomies = filtered;
1443
+ }
1444
+ return {
1445
+ sourceId: post.id || 0,
1446
+ postType: post.postType || "post",
1447
+ status: mapWpStatus(post.status),
1448
+ slug: post.postName || slugify(post.title || `post-${post.id || Date.now()}`),
1449
+ title: post.title || "Untitled",
1450
+ content,
1451
+ excerpt: post.excerpt,
1452
+ date: parseWxrDate(post.postDateGmt, post.pubDate, post.postDate) ?? /* @__PURE__ */ new Date(),
1453
+ modified: parseWxrDate(post.postModifiedGmt, void 0, post.postModified),
1454
+ author: post.creator,
1455
+ categories: post.categories,
1456
+ tags: post.tags,
1457
+ meta: Object.fromEntries(post.meta),
1458
+ featuredImage,
1459
+ parentId: post.postParent && post.postParent !== 0 ? post.postParent : void 0,
1460
+ menuOrder: post.menuOrder,
1461
+ customTaxonomies,
1462
+ locale: post.locale,
1463
+ translationGroup: post.translationGroup
1464
+ };
1465
+ }
1466
+ /**
1467
+ * WordPress uses "0000-00-00 00:00:00" as a sentinel for missing GMT dates
1468
+ * (e.g. unpublished drafts). This must be treated as absent.
1469
+ */
1470
+ const WXR_ZERO_DATE = "0000-00-00 00:00:00";
1471
+ /**
1472
+ * Parse a WXR date with the correct fallback chain:
1473
+ * 1. GMT date (always UTC, most reliable)
1474
+ * 2. pubDate (RFC 2822, includes timezone offset)
1475
+ * 3. Site-local date (MySQL datetime without timezone, imprecise but best available)
1476
+ *
1477
+ * Returns undefined when none of the inputs yield a valid date.
1478
+ * Callers that need a guaranteed Date should use `?? new Date()`.
1479
+ */
1480
+ function parseWxrDate(gmtDate, pubDate, localDate) {
1481
+ if (gmtDate && gmtDate !== WXR_ZERO_DATE) return /* @__PURE__ */ new Date(gmtDate.replace(" ", "T") + "Z");
1482
+ if (pubDate) {
1483
+ const d = new Date(pubDate);
1484
+ if (!isNaN(d.getTime())) return d;
1485
+ }
1486
+ if (localDate) {
1487
+ const d = new Date(localDate.replace(" ", "T"));
1488
+ if (!isNaN(d.getTime())) return d;
1489
+ }
1490
+ }
1491
+
1492
+ //#endregion
1493
+ //#region src/import/sources/wordpress-rest.ts
1494
+ /**
1495
+ * WordPress REST API probe
1496
+ *
1497
+ * Probes self-hosted WordPress sites to detect capabilities.
1498
+ * This source is probe-only - it tells users what's available
1499
+ * and suggests next steps (usually: upload WXR file).
1500
+ */
1501
+ const TRAILING_SLASHES = /\/+$/;
1502
+ const WP_JSON_SUFFIX = /\/wp-json\/?$/;
1503
+ const wordpressRestSource = {
1504
+ id: "wordpress-rest",
1505
+ name: "WordPress Site",
1506
+ description: "Connect to a self-hosted WordPress site",
1507
+ icon: "globe",
1508
+ requiresFile: false,
1509
+ canProbe: true,
1510
+ async probe(url) {
1511
+ try {
1512
+ const siteUrl = normalizeUrl(url);
1513
+ validateExternalUrl(siteUrl);
1514
+ const response = await ssrfSafeFetch(`${siteUrl}/wp-json/`, {
1515
+ headers: { Accept: "application/json" },
1516
+ signal: AbortSignal.timeout(1e4)
1517
+ });
1518
+ if (!response.ok) {
1519
+ if (!(await ssrfSafeFetch(`${siteUrl}/?rest_route=/`, {
1520
+ headers: { Accept: "application/json" },
1521
+ signal: AbortSignal.timeout(1e4)
1522
+ })).ok) return null;
1523
+ }
1524
+ const data = await response.json();
1525
+ if (!data.namespaces?.includes("wp/v2")) return null;
1526
+ const preview = await getPublicContentCounts(siteUrl);
1527
+ const hasAppPasswords = !!data.authentication?.["application-passwords"];
1528
+ return {
1529
+ sourceId: "wordpress-rest",
1530
+ confidence: "definite",
1531
+ detected: {
1532
+ platform: "wordpress",
1533
+ siteTitle: data.name,
1534
+ siteUrl: data.url || data.home || siteUrl
1535
+ },
1536
+ capabilities: {
1537
+ publicContent: true,
1538
+ privateContent: false,
1539
+ customPostTypes: false,
1540
+ allMeta: false,
1541
+ mediaStream: true
1542
+ },
1543
+ auth: hasAppPasswords ? {
1544
+ type: "password",
1545
+ instructions: "To import drafts and private content, create an Application Password in WordPress → Users → Your Profile → Application Passwords"
1546
+ } : void 0,
1547
+ preview,
1548
+ suggestedAction: {
1549
+ type: "upload",
1550
+ instructions: "For a complete import including drafts, custom post types, and all metadata, export your content from WordPress (Tools → Export) and upload the file here."
1551
+ }
1552
+ };
1553
+ } catch {
1554
+ return null;
1555
+ }
1556
+ },
1557
+ async analyze(_input, _context) {
1558
+ throw new Error("Direct REST API import not implemented. Please upload a WXR export file.");
1559
+ },
1560
+ async *fetchContent(_input, _options) {
1561
+ throw new Error("Direct REST API import not implemented. Please upload a WXR export file.");
1562
+ }
1563
+ };
1564
+ /**
1565
+ * Normalize a URL for API requests
1566
+ */
1567
+ function normalizeUrl(url) {
1568
+ let normalized = url.trim();
1569
+ if (!normalized.startsWith("http")) normalized = `https://${normalized}`;
1570
+ normalized = normalized.replace(TRAILING_SLASHES, "");
1571
+ normalized = normalized.replace(WP_JSON_SUFFIX, "");
1572
+ return normalized;
1573
+ }
1574
+ /**
1575
+ * Get public content counts from REST API
1576
+ */
1577
+ async function getPublicContentCounts(siteUrl) {
1578
+ const result = {};
1579
+ try {
1580
+ const [postsRes, pagesRes, mediaRes] = await Promise.allSettled([
1581
+ ssrfSafeFetch(`${siteUrl}/wp-json/wp/v2/posts?per_page=1`, { signal: AbortSignal.timeout(5e3) }),
1582
+ ssrfSafeFetch(`${siteUrl}/wp-json/wp/v2/pages?per_page=1`, { signal: AbortSignal.timeout(5e3) }),
1583
+ ssrfSafeFetch(`${siteUrl}/wp-json/wp/v2/media?per_page=1`, { signal: AbortSignal.timeout(5e3) })
1584
+ ]);
1585
+ if (postsRes.status === "fulfilled" && postsRes.value.ok) {
1586
+ const total = postsRes.value.headers.get("X-WP-Total");
1587
+ if (total) result.posts = parseInt(total, 10);
1588
+ }
1589
+ if (pagesRes.status === "fulfilled" && pagesRes.value.ok) {
1590
+ const total = pagesRes.value.headers.get("X-WP-Total");
1591
+ if (total) result.pages = parseInt(total, 10);
1592
+ }
1593
+ if (mediaRes.status === "fulfilled" && mediaRes.value.ok) {
1594
+ const total = mediaRes.value.headers.get("X-WP-Total");
1595
+ if (total) result.media = parseInt(total, 10);
1596
+ }
1597
+ } catch {}
1598
+ return result;
1599
+ }
1600
+
1601
+ //#endregion
1602
+ //#region src/import/sources/wordpress-plugin.ts
1603
+ /**
1604
+ * WordPress Plugin (EmDash Exporter) import source
1605
+ *
1606
+ * Connects to self-hosted WordPress sites running the EmDash Exporter plugin.
1607
+ * Provides full access to all content including drafts, custom post types, and ACF fields.
1608
+ */
1609
+ /**
1610
+ * Identifying User-Agent for outbound WordPress plugin importer requests.
1611
+ *
1612
+ * The importer sends this on both plugin API calls and direct media downloads.
1613
+ * Cloudflare Workers' fetch() has no default User-Agent, and some hosts reject
1614
+ * requests without one (returning 403). Using the same value everywhere keeps
1615
+ * behavior predictable when the importer is retried against a bot-filtered host.
1616
+ */
1617
+ const IMPORTER_USER_AGENT = "EmDash-Importer/1.0";
1618
+ /**
1619
+ * Build the REST API URL for a plugin endpoint.
1620
+ *
1621
+ * `restRoute: false` uses the pretty form (`/wp-json/emdash/v1/...`),
1622
+ * `restRoute: true` uses the `?rest_route=` form that works on sites with
1623
+ * plain permalinks (where `/wp-json/` doesn't exist).
1624
+ */
1625
+ function pluginApiUrl(siteUrl, path, params = {}, restRoute = false) {
1626
+ if (restRoute) {
1627
+ const url = new URL(siteUrl + "/");
1628
+ url.searchParams.set("rest_route", `/emdash/v1/${path}`);
1629
+ for (const [key, value] of Object.entries(params)) url.searchParams.set(key, value);
1630
+ return url.toString();
1631
+ }
1632
+ const url = new URL(`${siteUrl}/wp-json/emdash/v1/${path}`);
1633
+ for (const [key, value] of Object.entries(params)) url.searchParams.set(key, value);
1634
+ return url.toString();
1635
+ }
1636
+ /**
1637
+ * Fetch a plugin API endpoint, falling back to the `?rest_route=` form when
1638
+ * the pretty `/wp-json/` route 404s or is unreachable. Sites with "Plain"
1639
+ * permalinks have no `/wp-json/` rewrite, so without this fallback they
1640
+ * always fail with a misleading 404.
1641
+ */
1642
+ async function fetchPluginApi(siteUrl, path, params, headersInit, timeoutMs) {
1643
+ const headers = new Headers(headersInit);
1644
+ headers.set("User-Agent", IMPORTER_USER_AGENT);
1645
+ let pretty = null;
1646
+ try {
1647
+ pretty = await ssrfSafeFetch(pluginApiUrl(siteUrl, path, params), {
1648
+ headers,
1649
+ signal: AbortSignal.timeout(timeoutMs)
1650
+ });
1651
+ } catch {}
1652
+ const response = pretty && pretty.status !== 404 ? pretty : await ssrfSafeFetch(pluginApiUrl(siteUrl, path, params, true), {
1653
+ headers,
1654
+ signal: AbortSignal.timeout(timeoutMs)
1655
+ });
1656
+ if (response.headers.get("cf-mitigated") === "challenge") throw new SiteChallengeError();
1657
+ return response;
1658
+ }
1659
+ const wordpressPluginSource = {
1660
+ id: "wordpress-plugin",
1661
+ name: "WordPress (EmDash Exporter)",
1662
+ description: "Import from WordPress sites with the EmDash Exporter plugin installed",
1663
+ icon: "plug",
1664
+ requiresFile: false,
1665
+ canProbe: true,
1666
+ async probe(url) {
1667
+ try {
1668
+ const siteUrl = normalizeUrl$1(url);
1669
+ validateExternalUrl(siteUrl);
1670
+ const response = await fetchPluginApi(siteUrl, "probe", {}, { Accept: "application/json" }, 1e4);
1671
+ if (!response.ok) return null;
1672
+ const data = await response.json();
1673
+ if (!data.emdash_exporter) return null;
1674
+ return {
1675
+ sourceId: "wordpress-plugin",
1676
+ confidence: "definite",
1677
+ detected: {
1678
+ platform: "wordpress",
1679
+ version: data.wordpress_version,
1680
+ siteTitle: data.site.title,
1681
+ siteUrl: data.site.url
1682
+ },
1683
+ capabilities: {
1684
+ publicContent: true,
1685
+ privateContent: true,
1686
+ customPostTypes: true,
1687
+ allMeta: true,
1688
+ mediaStream: true
1689
+ },
1690
+ auth: data.capabilities.application_passwords ? {
1691
+ type: "password",
1692
+ instructions: data.auth_instructions.instructions
1693
+ } : void 0,
1694
+ preview: {
1695
+ posts: data.post_types.find((p) => p.name === "post")?.count,
1696
+ pages: data.post_types.find((p) => p.name === "page")?.count,
1697
+ media: data.media_count
1698
+ },
1699
+ suggestedAction: { type: "proceed" },
1700
+ i18n: pluginI18nToDetection(data.i18n)
1701
+ };
1702
+ } catch (error) {
1703
+ if (error instanceof SiteChallengeError) throw error;
1704
+ return null;
1705
+ }
1706
+ },
1707
+ async analyze(input, context) {
1708
+ const { siteUrl, headers } = getRequestConfig(input);
1709
+ const response = await fetchPluginApi(siteUrl, "analyze", {}, headers, 3e4);
1710
+ if (!response.ok) {
1711
+ const body = await response.json().catch(() => void 0);
1712
+ const message = typeof body === "object" && body !== null && "message" in body && typeof body.message === "string" ? body.message : "";
1713
+ throw new Error(message || `Failed to analyze site: ${response.statusText}`);
1714
+ }
1715
+ const data = await response.json();
1716
+ const existingCollections = context.getExistingCollections ? await context.getExistingCollections() : /* @__PURE__ */ new Map();
1717
+ const postTypes = data.post_types.filter((pt) => pt.total > 0).map((pt) => {
1718
+ const suggestedCollection = mapPostTypeToCollection(pt.name);
1719
+ const existingCollection = existingCollections.get(suggestedCollection);
1720
+ const requiredFields = pt.supports && "thumbnail" in pt.supports ? [...BASE_REQUIRED_FIELDS, FEATURED_IMAGE_FIELD] : [...BASE_REQUIRED_FIELDS];
1721
+ const knownSlugs = new Set(requiredFields.map((f) => f.slug));
1722
+ const metaTypes = new Map((pt.custom_fields ?? []).map((field) => [sanitizeFieldSlug(field.key), mapInferredFieldType(field.inferred_type)]));
1723
+ const jsonAcfFields = [];
1724
+ for (const acfField of acfFieldsForPostType(data.acf, pt.name)) {
1725
+ const slug = sanitizeFieldSlug(acfField.name);
1726
+ if (knownSlugs.has(slug)) continue;
1727
+ knownSlugs.add(slug);
1728
+ const type = acfImportFieldType(acfField, existingCollection?.fields.get(slug)?.type, metaTypes.get(slug));
1729
+ if (type === "json") jsonAcfFields.push(acfField);
1730
+ requiredFields.push({
1731
+ slug,
1732
+ label: acfField.label || fieldLabelFromKey(acfField.name),
1733
+ type,
1734
+ required: false
1735
+ });
1736
+ }
1737
+ for (const customField of pt.custom_fields ?? []) {
1738
+ if (isPluginBookkeepingMeta(customField.key)) continue;
1739
+ if (isAcfRowMeta(customField.key, jsonAcfFields)) continue;
1740
+ const slug = sanitizeFieldSlug(customField.key);
1741
+ if (knownSlugs.has(slug)) continue;
1742
+ knownSlugs.add(slug);
1743
+ requiredFields.push({
1744
+ slug,
1745
+ label: fieldLabelFromKey(customField.key),
1746
+ type: mapInferredFieldType(customField.inferred_type),
1747
+ required: false
1748
+ });
1749
+ }
1750
+ return {
1751
+ name: pt.name,
1752
+ count: pt.total,
1753
+ suggestedCollection,
1754
+ requiredFields,
1755
+ schemaStatus: checkSchemaCompatibility(requiredFields, existingCollection)
1756
+ };
1757
+ });
1758
+ const attachments = [];
1759
+ if (data.attachments.count > 0) try {
1760
+ let page = 1;
1761
+ let totalPages = 1;
1762
+ while (page <= totalPages) {
1763
+ const mediaResponse = await fetchPluginApi(siteUrl, "media", {
1764
+ per_page: "500",
1765
+ page: String(page)
1766
+ }, headers, 3e4);
1767
+ if (!mediaResponse.ok) break;
1768
+ const mediaData = await mediaResponse.json();
1769
+ totalPages = mediaData.pages;
1770
+ for (const item of mediaData.items) attachments.push({
1771
+ id: item.id,
1772
+ url: item.url,
1773
+ filename: item.filename,
1774
+ mimeType: item.mime_type,
1775
+ title: item.title,
1776
+ alt: item.alt,
1777
+ caption: item.caption,
1778
+ width: item.width,
1779
+ height: item.height
1780
+ });
1781
+ page++;
1782
+ }
1783
+ } catch (e) {
1784
+ if (e instanceof SiteChallengeError) throw e;
1785
+ console.warn("Failed to fetch media list:", e);
1786
+ }
1787
+ const categoryTaxonomy = data.taxonomies.find((t) => t.name === "category");
1788
+ const tagTaxonomy = data.taxonomies.find((t) => t.name === "post_tag");
1789
+ return {
1790
+ sourceId: "wordpress-plugin",
1791
+ site: {
1792
+ title: data.site.title,
1793
+ url: data.site.url
1794
+ },
1795
+ postTypes,
1796
+ attachments: {
1797
+ count: data.attachments.count,
1798
+ items: attachments
1799
+ },
1800
+ categories: categoryTaxonomy?.term_count ?? 0,
1801
+ tags: tagTaxonomy?.term_count ?? 0,
1802
+ authors: data.authors.map((a) => ({
1803
+ id: a.id,
1804
+ login: a.login,
1805
+ email: a.email,
1806
+ displayName: a.display_name,
1807
+ postCount: a.post_count
1808
+ })),
1809
+ i18n: pluginI18nToDetection(data.i18n)
1810
+ };
1811
+ },
1812
+ async *fetchContent(input, options) {
1813
+ const { siteUrl, headers } = getRequestConfig(input);
1814
+ for (const postType of options.postTypes) {
1815
+ let page = 1;
1816
+ let totalPages = 1;
1817
+ let yielded = 0;
1818
+ while (page <= totalPages) {
1819
+ const response = await fetchPluginApi(siteUrl, "content", {
1820
+ post_type: postType,
1821
+ status: options.includeDrafts ? "any" : "publish",
1822
+ per_page: "100",
1823
+ page: String(page)
1824
+ }, headers, 6e4);
1825
+ if (!response.ok) throw new Error(`Failed to fetch ${postType}: ${response.statusText}`);
1826
+ const data = await response.json();
1827
+ totalPages = data.pages;
1828
+ for (const post of data.items) {
1829
+ yield pluginPostToNormalizedItem(post, siteUrl);
1830
+ yielded++;
1831
+ if (options.limit && yielded >= options.limit) return;
1832
+ }
1833
+ page++;
1834
+ }
1835
+ }
1836
+ },
1837
+ async fetchMedia(url, _input) {
1838
+ validateExternalUrl(url);
1839
+ const response = await ssrfSafeFetch(url, { headers: { "User-Agent": IMPORTER_USER_AGENT } });
1840
+ if (!response.ok) throw new Error(`Failed to fetch media: ${response.statusText}`);
1841
+ return response.blob();
1842
+ }
1843
+ };
1844
+ /**
1845
+ * Fetch a single page of content for one post type. This is the unit of
1846
+ * work for the chunked import: one Worker invocation imports one page,
1847
+ * keeping each request far below Cloudflare's CPU and subrequest limits
1848
+ * (see issue #475).
1849
+ */
1850
+ async function fetchPluginContentPage(options) {
1851
+ const { siteUrl, headers } = getRequestConfig({
1852
+ type: "url",
1853
+ url: options.siteUrl,
1854
+ token: options.token
1855
+ });
1856
+ const response = await fetchPluginApi(siteUrl, "content", {
1857
+ post_type: options.postType,
1858
+ status: options.includeDrafts ? "any" : "publish",
1859
+ per_page: String(options.perPage),
1860
+ page: String(options.page)
1861
+ }, headers, 6e4);
1862
+ if (!response.ok) throw new Error(`Failed to fetch ${options.postType}: ${response.statusText}`);
1863
+ const data = await response.json();
1864
+ return {
1865
+ items: data.items.map((post) => pluginPostToNormalizedItem(post, siteUrl)),
1866
+ totalPages: data.pages
1867
+ };
1868
+ }
1869
+ /** Plugin `inferred_type` values that are valid EmDash field types as-is */
1870
+ const VALID_INFERRED_TYPES = new Set([
1871
+ "string",
1872
+ "text",
1873
+ "number",
1874
+ "integer",
1875
+ "boolean",
1876
+ "datetime",
1877
+ "json",
1878
+ "reference"
1879
+ ]);
1880
+ /**
1881
+ * Map the plugin's inferred custom-field type to an EmDash field type.
1882
+ * Unknown values fall back to string (always safe for TEXT storage).
1883
+ */
1884
+ function mapInferredFieldType(inferredType) {
1885
+ return VALID_INFERRED_TYPES.has(inferredType) ? inferredType : "string";
1886
+ }
1887
+ /**
1888
+ * EmDash field types for ACF field types that hold a single value and return
1889
+ * a scalar by default. When a return format makes `get_fields()` give an
1890
+ * array, the raw meta value fills the field instead. Every other ACF type
1891
+ * (select, checkbox, relationship, repeater, gallery, ...) can return several
1892
+ * values or an object and is stored as JSON.
1893
+ */
1894
+ const ACF_FIELD_TYPES = {
1895
+ text: "string",
1896
+ email: "string",
1897
+ url: "string",
1898
+ password: "string",
1899
+ radio: "string",
1900
+ button_group: "string",
1901
+ color_picker: "string",
1902
+ oembed: "string",
1903
+ date_picker: "string",
1904
+ date_time_picker: "string",
1905
+ time_picker: "string",
1906
+ textarea: "text",
1907
+ wysiwyg: "text",
1908
+ number: "number",
1909
+ range: "number",
1910
+ true_false: "boolean"
1911
+ };
1912
+ /**
1913
+ * The field type for an ACF field. A collection created by an earlier
1914
+ * import holds the type the raw meta suggested for that key; that type is
1915
+ * kept so the collection still imports, and the field's flattened row
1916
+ * keys then keep filling their own fields.
1917
+ */
1918
+ function acfImportFieldType(field, existingType, metaType) {
1919
+ const acfType = ACF_FIELD_TYPES[field.type] ?? "json";
1920
+ if (existingType && metaType && !isTypeCompatible(acfType, existingType) && isTypeCompatible(metaType, existingType)) return existingType;
1921
+ return acfType;
1922
+ }
1923
+ /** ACF layout-only field types that hold no value */
1924
+ const ACF_LAYOUT_TYPES = new Set([
1925
+ "tab",
1926
+ "message",
1927
+ "accordion"
1928
+ ]);
1929
+ /** Fields of the ACF field groups whose location rules include `post_type == <postType>` */
1930
+ function acfFieldsForPostType(groups, postType) {
1931
+ const fields = [];
1932
+ for (const group of groups ?? []) {
1933
+ if (!group.location?.some((rules) => rules.some((rule) => rule.param === "post_type" && rule.operator === "==" && rule.value === postType))) continue;
1934
+ for (const field of group.fields) if (field.name && !ACF_LAYOUT_TYPES.has(field.type)) fields.push(field);
1935
+ }
1936
+ return fields;
1937
+ }
1938
+ const ACF_ROW_SUFFIX = /^_\d+_/;
1939
+ /**
1940
+ * ACF stores repeater and flexible content rows as `<name>_<row>_<sub>`
1941
+ * meta keys. Their values already arrive whole under the parent field in
1942
+ * `get_fields()`.
1943
+ */
1944
+ function isAcfRowMeta(key, acfFields) {
1945
+ return acfFields.some((field) => (field.type === "repeater" || field.type === "flexible_content") && key.startsWith(field.name) && ACF_ROW_SUFFIX.test(key.slice(field.name.length)));
1946
+ }
1947
+ const FIELD_KEY_SEPARATORS = /[_-]+/;
1948
+ /** Derive a human label from a meta key: "event_start-date" -> "Event Start Date" */
1949
+ function fieldLabelFromKey(key) {
1950
+ return key.split(FIELD_KEY_SEPARATORS).filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
1951
+ }
1952
+ /**
1953
+ * Convert plugin i18n info to the shared I18nDetection type.
1954
+ * Returns undefined when no multilingual plugin is detected.
1955
+ */
1956
+ function pluginI18nToDetection(i18n) {
1957
+ if (!i18n) return void 0;
1958
+ return {
1959
+ plugin: i18n.plugin,
1960
+ defaultLocale: i18n.default_locale,
1961
+ locales: i18n.locales
1962
+ };
1963
+ }
1964
+ /**
1965
+ * Get request configuration from input
1966
+ */
1967
+ function getRequestConfig(input) {
1968
+ if (input.type === "url") {
1969
+ const siteUrl = normalizeUrl$1(input.url);
1970
+ validateExternalUrl(siteUrl);
1971
+ const headers = { Accept: "application/json" };
1972
+ if (input.token) headers["Authorization"] = `Basic ${input.token}`;
1973
+ return {
1974
+ siteUrl,
1975
+ headers
1976
+ };
1977
+ }
1978
+ if (input.type === "oauth") {
1979
+ const oauthSiteUrl = normalizeUrl$1(input.url);
1980
+ validateExternalUrl(oauthSiteUrl);
1981
+ return {
1982
+ siteUrl: oauthSiteUrl,
1983
+ headers: {
1984
+ Accept: "application/json",
1985
+ Authorization: `Bearer ${input.accessToken}`
1986
+ }
1987
+ };
1988
+ }
1989
+ throw new Error("WordPress plugin source requires URL or OAuth input");
1990
+ }
1991
+ /**
1992
+ * Convert plugin post to normalized item
1993
+ */
1994
+ function pluginPostToNormalizedItem(post, siteUrl) {
1995
+ const content = post.content ? gutenbergToPortableText(post.content) : [];
1996
+ relativizeContentLinks(content, siteUrl);
1997
+ const categories = post.taxonomies?.category?.map((c) => c.slug) ?? post.taxonomies?.categories?.map((c) => c.slug) ?? [];
1998
+ const tags = post.taxonomies?.post_tag?.map((t) => t.slug) ?? post.taxonomies?.tags?.map((t) => t.slug) ?? [];
1999
+ const customTaxonomies = {};
2000
+ for (const [name, terms] of Object.entries(post.taxonomies ?? {})) {
2001
+ if ([
2002
+ "category",
2003
+ "categories",
2004
+ "post_tag",
2005
+ "tags"
2006
+ ].includes(name)) continue;
2007
+ if (Array.isArray(terms) && terms.length > 0) customTaxonomies[name] = terms.map((t) => t.slug);
2008
+ }
2009
+ const meta = { ...post.meta };
2010
+ if (post.acf) meta._acf = post.acf;
2011
+ if (post.yoast) meta._yoast = post.yoast;
2012
+ if (post.rankmath) meta._rankmath = post.rankmath;
2013
+ return {
2014
+ sourceId: post.id,
2015
+ postType: post.post_type,
2016
+ status: mapWpStatus(post.status),
2017
+ slug: post.slug,
2018
+ title: post.title,
2019
+ content,
2020
+ excerpt: post.excerpt || void 0,
2021
+ date: parseWxrDate(post.date_gmt, void 0, post.date) ?? /* @__PURE__ */ new Date(NaN),
2022
+ modified: parseWxrDate(post.modified_gmt, void 0, post.modified),
2023
+ author: post.author?.login,
2024
+ categories,
2025
+ tags,
2026
+ customTaxonomies: Object.keys(customTaxonomies).length > 0 ? customTaxonomies : void 0,
2027
+ meta,
2028
+ featuredImage: post.featured_image?.url,
2029
+ locale: post.locale,
2030
+ translationGroup: post.translation_group
2031
+ };
2032
+ }
2033
+ /**
2034
+ * Fetch taxonomies from plugin API
2035
+ */
2036
+ async function fetchPluginTaxonomies(siteUrl, authToken) {
2037
+ const normalizedSiteUrl = normalizeUrl$1(siteUrl);
2038
+ validateExternalUrl(normalizedSiteUrl);
2039
+ const response = await fetchPluginApi(normalizedSiteUrl, "taxonomies", {}, {
2040
+ Accept: "application/json",
2041
+ Authorization: `Basic ${authToken}`
2042
+ }, 3e4);
2043
+ if (!response.ok) throw new Error(`Failed to fetch taxonomies: ${response.statusText}`);
2044
+ return response.json();
2045
+ }
2046
+ /**
2047
+ * Fetch navigation menus from plugin API (added in emdash-exporter 1.1.0).
2048
+ * Returns an empty array when the endpoint doesn't exist (older plugin).
2049
+ */
2050
+ async function fetchPluginMenus(siteUrl, authToken) {
2051
+ const normalizedSiteUrl = normalizeUrl$1(siteUrl);
2052
+ validateExternalUrl(normalizedSiteUrl);
2053
+ const response = await fetchPluginApi(normalizedSiteUrl, "menus", {}, {
2054
+ Accept: "application/json",
2055
+ Authorization: `Basic ${authToken}`
2056
+ }, 3e4);
2057
+ if (response.status === 404) return [];
2058
+ if (!response.ok) throw new Error(`Failed to fetch menus: ${response.statusText}`);
2059
+ return response.json();
2060
+ }
2061
+ /**
2062
+ * Fetch site options from plugin API (title, tagline, logo, favicon, ...)
2063
+ */
2064
+ async function fetchPluginOptions(siteUrl, authToken) {
2065
+ const normalizedSiteUrl = normalizeUrl$1(siteUrl);
2066
+ validateExternalUrl(normalizedSiteUrl);
2067
+ const response = await fetchPluginApi(normalizedSiteUrl, "options", {}, {
2068
+ Accept: "application/json",
2069
+ Authorization: `Basic ${authToken}`
2070
+ }, 3e4);
2071
+ if (!response.ok) throw new Error(`Failed to fetch options: ${response.statusText}`);
2072
+ return response.json();
2073
+ }
2074
+ /**
2075
+ * Fetch a single page of comments from the plugin API (added in
2076
+ * emdash-exporter 1.2.0). The exporter orders by comment ID ascending, so
2077
+ * parents always appear before their children across pages. Returns
2078
+ * `totalPages: 0` when the endpoint doesn't exist (older plugin).
2079
+ */
2080
+ async function fetchPluginCommentsPage(siteUrl, authToken, page) {
2081
+ const normalizedSiteUrl = normalizeUrl$1(siteUrl);
2082
+ validateExternalUrl(normalizedSiteUrl);
2083
+ const response = await fetchPluginApi(normalizedSiteUrl, "comments", {
2084
+ per_page: "500",
2085
+ page: String(page)
2086
+ }, {
2087
+ Accept: "application/json",
2088
+ Authorization: `Basic ${authToken}`
2089
+ }, 3e4);
2090
+ if (response.status === 404) return {
2091
+ items: [],
2092
+ totalPages: 0
2093
+ };
2094
+ if (!response.ok) throw new Error(`Failed to fetch comments: ${response.statusText}`);
2095
+ const data = await response.json();
2096
+ return {
2097
+ items: data.items,
2098
+ totalPages: data.pages
2099
+ };
2100
+ }
2101
+ /**
2102
+ * Fetch all comments from plugin API, paginating through every page.
2103
+ * Returns an empty array when the endpoint doesn't exist (older plugin).
2104
+ */
2105
+ async function fetchPluginComments(siteUrl, authToken) {
2106
+ const comments = [];
2107
+ let page = 1;
2108
+ let totalPages = 1;
2109
+ while (page <= totalPages) {
2110
+ const result = await fetchPluginCommentsPage(siteUrl, authToken, page);
2111
+ totalPages = result.totalPages;
2112
+ comments.push(...result.items);
2113
+ page++;
2114
+ }
2115
+ return comments;
2116
+ }
2117
+
2118
+ //#endregion
2119
+ //#region src/import/index.ts
2120
+ registerSource(wordpressPluginSource);
2121
+ registerSource(wordpressRestSource);
2122
+ registerSource(wxrSource);
2123
+
2124
+ //#endregion
2125
+ export { parseWxr as C, importMenusFromPlugin as S, registerSource as _, fetchPluginOptions as a, importCommentsFromPlugin as b, parseWxrDate as c, clearSources as d, getAllSources as f, probeUrl as g, getUrlSources as h, fetchPluginMenus as i, wxrSource as l, getSource as m, fetchPluginCommentsPage as n, fetchPluginTaxonomies as o, getFileSources as p, fetchPluginContentPage as r, wordpressRestSource as s, fetchPluginComments as t, SiteChallengeError as u, importSiteSettings as v, parseWxrString as w, importReusableBlocksAsSections as x, parseSiteSettingsFromPlugin as y };
2126
+ //# sourceMappingURL=import-BUXjdZUn.mjs.map