emdash 0.12.0 → 0.13.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 (1003) hide show
  1. package/dist/{adapters-BktHA7EO.d.mts → adapters-9DybjTO6.d.mts} +1 -1
  2. package/dist/{adapters-BktHA7EO.d.mts.map → adapters-9DybjTO6.d.mts.map} +1 -1
  3. package/dist/allowed-origins-CDdG-4Gd.mjs +116 -0
  4. package/dist/allowed-origins-CDdG-4Gd.mjs.map +1 -0
  5. package/dist/api/route-utils.d.mts +68 -0
  6. package/dist/api/route-utils.d.mts.map +1 -0
  7. package/dist/api/route-utils.mjs +44 -0
  8. package/dist/api/route-utils.mjs.map +1 -0
  9. package/dist/api/schemas/index.d.mts +2 -0
  10. package/dist/api/schemas/index.mjs +4 -0
  11. package/dist/api-ayIQ7rIe.mjs +3941 -0
  12. package/dist/api-ayIQ7rIe.mjs.map +1 -0
  13. package/dist/api-tokens-D3C9v02m.mjs +3 -0
  14. package/dist/api-tokens-eYymBhIT.mjs +153 -0
  15. package/dist/api-tokens-eYymBhIT.mjs.map +1 -0
  16. package/dist/{apply-C1ZORgcy.mjs → apply-v4DBgjPw.mjs} +19 -346
  17. package/dist/apply-v4DBgjPw.mjs.map +1 -0
  18. package/dist/astro/index.d.mts +10 -6
  19. package/dist/astro/index.d.mts.map +1 -1
  20. package/dist/astro/index.mjs +42 -83
  21. package/dist/astro/index.mjs.map +1 -1
  22. package/dist/astro/middleware/auth.d.mts +9 -5
  23. package/dist/astro/middleware/auth.d.mts.map +1 -1
  24. package/dist/astro/middleware/auth.mjs +25 -65
  25. package/dist/astro/middleware/auth.mjs.map +1 -1
  26. package/dist/astro/middleware/redirect.mjs +5 -5
  27. package/dist/astro/middleware/request-context.mjs +4 -4
  28. package/dist/astro/middleware/setup.mjs +1 -1
  29. package/dist/astro/middleware.d.mts.map +1 -1
  30. package/dist/astro/middleware.mjs +140 -69
  31. package/dist/astro/middleware.mjs.map +1 -1
  32. package/dist/astro/routes/PluginRegistry.d.mts +15 -0
  33. package/dist/astro/routes/PluginRegistry.d.mts.map +1 -0
  34. package/dist/astro/routes/PluginRegistry.mjs +25 -0
  35. package/dist/astro/routes/PluginRegistry.mjs.map +1 -0
  36. package/dist/astro/routes/api/admin/allowed-domains/_domain_.d.mts +15 -0
  37. package/dist/astro/routes/api/admin/allowed-domains/_domain_.d.mts.map +1 -0
  38. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +67 -0
  39. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -0
  40. package/dist/astro/routes/api/admin/allowed-domains/index.d.mts +15 -0
  41. package/dist/astro/routes/api/admin/allowed-domains/index.d.mts.map +1 -0
  42. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +67 -0
  43. package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -0
  44. package/dist/astro/routes/api/admin/api-tokens/_id_.d.mts +11 -0
  45. package/dist/astro/routes/api/admin/api-tokens/_id_.d.mts.map +1 -0
  46. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +33 -0
  47. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs.map +1 -0
  48. package/dist/astro/routes/api/admin/api-tokens/index.d.mts +17 -0
  49. package/dist/astro/routes/api/admin/api-tokens/index.d.mts.map +1 -0
  50. package/dist/astro/routes/api/admin/api-tokens/index.mjs +52 -0
  51. package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -0
  52. package/dist/astro/routes/api/admin/bylines/_id_/index.d.mts +10 -0
  53. package/dist/astro/routes/api/admin/bylines/_id_/index.d.mts.map +1 -0
  54. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +74 -0
  55. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -0
  56. package/dist/astro/routes/api/admin/bylines/index.d.mts +9 -0
  57. package/dist/astro/routes/api/admin/bylines/index.d.mts.map +1 -0
  58. package/dist/astro/routes/api/admin/bylines/index.mjs +61 -0
  59. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -0
  60. package/dist/astro/routes/api/admin/comments/_id_/status.d.mts +8 -0
  61. package/dist/astro/routes/api/admin/comments/_id_/status.d.mts.map +1 -0
  62. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +80 -0
  63. package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -0
  64. package/dist/astro/routes/api/admin/comments/_id_.d.mts +15 -0
  65. package/dist/astro/routes/api/admin/comments/_id_.d.mts.map +1 -0
  66. package/dist/astro/routes/api/admin/comments/_id_.mjs +47 -0
  67. package/dist/astro/routes/api/admin/comments/_id_.mjs.map +1 -0
  68. package/dist/astro/routes/api/admin/comments/bulk.d.mts +8 -0
  69. package/dist/astro/routes/api/admin/comments/bulk.d.mts.map +1 -0
  70. package/dist/astro/routes/api/admin/comments/bulk.mjs +36 -0
  71. package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -0
  72. package/dist/astro/routes/api/admin/comments/counts.d.mts +8 -0
  73. package/dist/astro/routes/api/admin/comments/counts.d.mts.map +1 -0
  74. package/dist/astro/routes/api/admin/comments/counts.mjs +25 -0
  75. package/dist/astro/routes/api/admin/comments/counts.mjs.map +1 -0
  76. package/dist/astro/routes/api/admin/comments/index.d.mts +11 -0
  77. package/dist/astro/routes/api/admin/comments/index.d.mts.map +1 -0
  78. package/dist/astro/routes/api/admin/comments/index.mjs +40 -0
  79. package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -0
  80. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.d.mts +8 -0
  81. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.d.mts.map +1 -0
  82. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +48 -0
  83. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs.map +1 -0
  84. package/dist/astro/routes/api/admin/hooks/exclusive/index.d.mts +8 -0
  85. package/dist/astro/routes/api/admin/hooks/exclusive/index.d.mts.map +1 -0
  86. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +36 -0
  87. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs.map +1 -0
  88. package/dist/astro/routes/api/admin/oauth-clients/_id_.d.mts +19 -0
  89. package/dist/astro/routes/api/admin/oauth-clients/_id_.d.mts.map +1 -0
  90. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +69 -0
  91. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs.map +1 -0
  92. package/dist/astro/routes/api/admin/oauth-clients/index.d.mts +15 -0
  93. package/dist/astro/routes/api/admin/oauth-clients/index.d.mts.map +1 -0
  94. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +50 -0
  95. package/dist/astro/routes/api/admin/oauth-clients/index.mjs.map +1 -0
  96. package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts +8 -0
  97. package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts.map +1 -0
  98. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -0
  99. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -0
  100. package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts +8 -0
  101. package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts.map +1 -0
  102. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +59 -0
  103. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -0
  104. package/dist/astro/routes/api/admin/plugins/_id_/index.d.mts +8 -0
  105. package/dist/astro/routes/api/admin/plugins/_id_/index.d.mts.map +1 -0
  106. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +51 -0
  107. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -0
  108. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.d.mts +8 -0
  109. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.d.mts.map +1 -0
  110. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +58 -0
  111. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -0
  112. package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts +8 -0
  113. package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts.map +1 -0
  114. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +66 -0
  115. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -0
  116. package/dist/astro/routes/api/admin/plugins/index.d.mts +8 -0
  117. package/dist/astro/routes/api/admin/plugins/index.d.mts.map +1 -0
  118. package/dist/astro/routes/api/admin/plugins/index.mjs +49 -0
  119. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -0
  120. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.d.mts +8 -0
  121. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.d.mts.map +1 -0
  122. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +39 -0
  123. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs.map +1 -0
  124. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.d.mts +8 -0
  125. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.d.mts.map +1 -0
  126. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +51 -0
  127. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -0
  128. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts +8 -0
  129. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts.map +1 -0
  130. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +69 -0
  131. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -0
  132. package/dist/astro/routes/api/admin/plugins/marketplace/index.d.mts +8 -0
  133. package/dist/astro/routes/api/admin/plugins/marketplace/index.d.mts.map +1 -0
  134. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +58 -0
  135. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -0
  136. package/dist/astro/routes/api/admin/plugins/registry/install.d.mts +8 -0
  137. package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -0
  138. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +72 -0
  139. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -0
  140. package/dist/astro/routes/api/admin/plugins/updates.d.mts +8 -0
  141. package/dist/astro/routes/api/admin/plugins/updates.d.mts.map +1 -0
  142. package/dist/astro/routes/api/admin/plugins/updates.mjs +49 -0
  143. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -0
  144. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.d.mts +8 -0
  145. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.d.mts.map +1 -0
  146. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +51 -0
  147. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -0
  148. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.d.mts +8 -0
  149. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.d.mts.map +1 -0
  150. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +39 -0
  151. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs.map +1 -0
  152. package/dist/astro/routes/api/admin/themes/marketplace/index.d.mts +8 -0
  153. package/dist/astro/routes/api/admin/themes/marketplace/index.d.mts.map +1 -0
  154. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +67 -0
  155. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -0
  156. package/dist/astro/routes/api/admin/users/_id_/disable.d.mts +8 -0
  157. package/dist/astro/routes/api/admin/users/_id_/disable.d.mts.map +1 -0
  158. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +43 -0
  159. package/dist/astro/routes/api/admin/users/_id_/disable.mjs.map +1 -0
  160. package/dist/astro/routes/api/admin/users/_id_/enable.d.mts +8 -0
  161. package/dist/astro/routes/api/admin/users/_id_/enable.d.mts.map +1 -0
  162. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +32 -0
  163. package/dist/astro/routes/api/admin/users/_id_/enable.mjs.map +1 -0
  164. package/dist/astro/routes/api/admin/users/_id_/index.d.mts +9 -0
  165. package/dist/astro/routes/api/admin/users/_id_/index.d.mts.map +1 -0
  166. package/dist/astro/routes/api/admin/users/_id_/index.mjs +106 -0
  167. package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -0
  168. package/dist/astro/routes/api/admin/users/_id_/send-recovery.d.mts +8 -0
  169. package/dist/astro/routes/api/admin/users/_id_/send-recovery.d.mts.map +1 -0
  170. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +46 -0
  171. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs.map +1 -0
  172. package/dist/astro/routes/api/admin/users/index.d.mts +8 -0
  173. package/dist/astro/routes/api/admin/users/index.d.mts.map +1 -0
  174. package/dist/astro/routes/api/admin/users/index.mjs +56 -0
  175. package/dist/astro/routes/api/admin/users/index.mjs.map +1 -0
  176. package/dist/astro/routes/api/auth/dev-bypass.d.mts +9 -0
  177. package/dist/astro/routes/api/auth/dev-bypass.d.mts.map +1 -0
  178. package/dist/astro/routes/api/auth/dev-bypass.mjs +84 -0
  179. package/dist/astro/routes/api/auth/dev-bypass.mjs.map +1 -0
  180. package/dist/astro/routes/api/auth/invite/accept.d.mts +8 -0
  181. package/dist/astro/routes/api/auth/invite/accept.d.mts.map +1 -0
  182. package/dist/astro/routes/api/auth/invite/accept.mjs +34 -0
  183. package/dist/astro/routes/api/auth/invite/accept.mjs.map +1 -0
  184. package/dist/astro/routes/api/auth/invite/complete.d.mts +8 -0
  185. package/dist/astro/routes/api/auth/invite/complete.d.mts.map +1 -0
  186. package/dist/astro/routes/api/auth/invite/complete.mjs +56 -0
  187. package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -0
  188. package/dist/astro/routes/api/auth/invite/index.d.mts +8 -0
  189. package/dist/astro/routes/api/auth/invite/index.d.mts.map +1 -0
  190. package/dist/astro/routes/api/auth/invite/index.mjs +53 -0
  191. package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -0
  192. package/dist/astro/routes/api/auth/invite/register-options.d.mts +8 -0
  193. package/dist/astro/routes/api/auth/invite/register-options.d.mts.map +1 -0
  194. package/dist/astro/routes/api/auth/invite/register-options.mjs +46 -0
  195. package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -0
  196. package/dist/astro/routes/api/auth/logout.d.mts +8 -0
  197. package/dist/astro/routes/api/auth/logout.d.mts.map +1 -0
  198. package/dist/astro/routes/api/auth/logout.mjs +27 -0
  199. package/dist/astro/routes/api/auth/logout.mjs.map +1 -0
  200. package/dist/astro/routes/api/auth/magic-link/send.d.mts +8 -0
  201. package/dist/astro/routes/api/auth/magic-link/send.d.mts.map +1 -0
  202. package/dist/astro/routes/api/auth/magic-link/send.mjs +50 -0
  203. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -0
  204. package/dist/astro/routes/api/auth/magic-link/verify.d.mts +8 -0
  205. package/dist/astro/routes/api/auth/magic-link/verify.d.mts.map +1 -0
  206. package/dist/astro/routes/api/auth/magic-link/verify.mjs +35 -0
  207. package/dist/astro/routes/api/auth/magic-link/verify.mjs.map +1 -0
  208. package/dist/astro/routes/api/auth/me.d.mts +14 -0
  209. package/dist/astro/routes/api/auth/me.d.mts.map +1 -0
  210. package/dist/astro/routes/api/auth/me.mjs +43 -0
  211. package/dist/astro/routes/api/auth/me.mjs.map +1 -0
  212. package/dist/astro/routes/api/auth/mode.d.mts +8 -0
  213. package/dist/astro/routes/api/auth/mode.d.mts.map +1 -0
  214. package/dist/astro/routes/api/auth/mode.mjs +29 -0
  215. package/dist/astro/routes/api/auth/mode.mjs.map +1 -0
  216. package/dist/astro/routes/api/auth/oauth/_provider_/callback.d.mts +8 -0
  217. package/dist/astro/routes/api/auth/oauth/_provider_/callback.d.mts.map +1 -0
  218. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +130 -0
  219. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs.map +1 -0
  220. package/dist/astro/routes/api/auth/oauth/_provider_.d.mts +8 -0
  221. package/dist/astro/routes/api/auth/oauth/_provider_.d.mts.map +1 -0
  222. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +60 -0
  223. package/dist/astro/routes/api/auth/oauth/_provider_.mjs.map +1 -0
  224. package/dist/astro/routes/api/auth/passkey/_id_.d.mts +15 -0
  225. package/dist/astro/routes/api/auth/passkey/_id_.d.mts.map +1 -0
  226. package/dist/astro/routes/api/auth/passkey/_id_.mjs +64 -0
  227. package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -0
  228. package/dist/astro/routes/api/auth/passkey/index.d.mts +8 -0
  229. package/dist/astro/routes/api/auth/passkey/index.d.mts.map +1 -0
  230. package/dist/astro/routes/api/auth/passkey/index.mjs +28 -0
  231. package/dist/astro/routes/api/auth/passkey/index.mjs.map +1 -0
  232. package/dist/astro/routes/api/auth/passkey/options.d.mts +8 -0
  233. package/dist/astro/routes/api/auth/passkey/options.d.mts.map +1 -0
  234. package/dist/astro/routes/api/auth/passkey/options.mjs +48 -0
  235. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -0
  236. package/dist/astro/routes/api/auth/passkey/register/options.d.mts +8 -0
  237. package/dist/astro/routes/api/auth/passkey/register/options.d.mts.map +1 -0
  238. package/dist/astro/routes/api/auth/passkey/register/options.mjs +46 -0
  239. package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -0
  240. package/dist/astro/routes/api/auth/passkey/register/verify.d.mts +8 -0
  241. package/dist/astro/routes/api/auth/passkey/register/verify.d.mts.map +1 -0
  242. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +61 -0
  243. package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -0
  244. package/dist/astro/routes/api/auth/passkey/verify.d.mts +8 -0
  245. package/dist/astro/routes/api/auth/passkey/verify.d.mts.map +1 -0
  246. package/dist/astro/routes/api/auth/passkey/verify.mjs +49 -0
  247. package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -0
  248. package/dist/astro/routes/api/auth/signup/complete.d.mts +8 -0
  249. package/dist/astro/routes/api/auth/signup/complete.d.mts.map +1 -0
  250. package/dist/astro/routes/api/auth/signup/complete.mjs +57 -0
  251. package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -0
  252. package/dist/astro/routes/api/auth/signup/request.d.mts +8 -0
  253. package/dist/astro/routes/api/auth/signup/request.d.mts.map +1 -0
  254. package/dist/astro/routes/api/auth/signup/request.mjs +46 -0
  255. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -0
  256. package/dist/astro/routes/api/auth/signup/verify.d.mts +8 -0
  257. package/dist/astro/routes/api/auth/signup/verify.d.mts.map +1 -0
  258. package/dist/astro/routes/api/auth/signup/verify.mjs +35 -0
  259. package/dist/astro/routes/api/auth/signup/verify.mjs.map +1 -0
  260. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts +15 -0
  261. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts.map +1 -0
  262. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +193 -0
  263. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -0
  264. package/dist/astro/routes/api/content/_collection_/_id_/compare.d.mts +8 -0
  265. package/dist/astro/routes/api/content/_collection_/_id_/compare.d.mts.map +1 -0
  266. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +20 -0
  267. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs.map +1 -0
  268. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts +8 -0
  269. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -0
  270. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +28 -0
  271. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -0
  272. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.d.mts +8 -0
  273. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.d.mts.map +1 -0
  274. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +30 -0
  275. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -0
  276. package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts +8 -0
  277. package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts.map +1 -0
  278. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +23 -0
  279. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -0
  280. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.d.mts +8 -0
  281. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.d.mts.map +1 -0
  282. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +78 -0
  283. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -0
  284. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts +8 -0
  285. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -0
  286. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +48 -0
  287. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -0
  288. package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts +8 -0
  289. package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts.map +1 -0
  290. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +28 -0
  291. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -0
  292. package/dist/astro/routes/api/content/_collection_/_id_/revisions.d.mts +8 -0
  293. package/dist/astro/routes/api/content/_collection_/_id_/revisions.d.mts.map +1 -0
  294. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +22 -0
  295. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs.map +1 -0
  296. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts +9 -0
  297. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -0
  298. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +58 -0
  299. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -0
  300. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts +15 -0
  301. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -0
  302. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +85 -0
  303. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -0
  304. package/dist/astro/routes/api/content/_collection_/_id_/translations.d.mts +8 -0
  305. package/dist/astro/routes/api/content/_collection_/_id_/translations.d.mts.map +1 -0
  306. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +43 -0
  307. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -0
  308. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts +8 -0
  309. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -0
  310. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +28 -0
  311. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -0
  312. package/dist/astro/routes/api/content/_collection_/_id_.d.mts +10 -0
  313. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -0
  314. package/dist/astro/routes/api/content/_collection_/_id_.mjs +88 -0
  315. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -0
  316. package/dist/astro/routes/api/content/_collection_/index.d.mts +9 -0
  317. package/dist/astro/routes/api/content/_collection_/index.d.mts.map +1 -0
  318. package/dist/astro/routes/api/content/_collection_/index.mjs +61 -0
  319. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -0
  320. package/dist/astro/routes/api/content/_collection_/trash.d.mts +8 -0
  321. package/dist/astro/routes/api/content/_collection_/trash.d.mts.map +1 -0
  322. package/dist/astro/routes/api/content/_collection_/trash.mjs +25 -0
  323. package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -0
  324. package/dist/astro/routes/api/dashboard.d.mts +8 -0
  325. package/dist/astro/routes/api/dashboard.d.mts.map +1 -0
  326. package/dist/astro/routes/api/dashboard.mjs +26 -0
  327. package/dist/astro/routes/api/dashboard.mjs.map +1 -0
  328. package/dist/astro/routes/api/dev/emails.d.mts +9 -0
  329. package/dist/astro/routes/api/dev/emails.d.mts.map +1 -0
  330. package/dist/astro/routes/api/dev/emails.mjs +20 -0
  331. package/dist/astro/routes/api/dev/emails.mjs.map +1 -0
  332. package/dist/astro/routes/api/import/probe.d.mts +18 -0
  333. package/dist/astro/routes/api/import/probe.d.mts.map +1 -0
  334. package/dist/astro/routes/api/import/probe.mjs +35 -0
  335. package/dist/astro/routes/api/import/probe.mjs.map +1 -0
  336. package/dist/astro/routes/api/import/wordpress/analyze.d.mts +88 -0
  337. package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -0
  338. package/dist/astro/routes/api/import/wordpress/analyze.mjs +313 -0
  339. package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -0
  340. package/dist/astro/routes/api/import/wordpress/execute.d.mts +93 -0
  341. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -0
  342. package/dist/astro/routes/api/import/wordpress/execute.mjs +593 -0
  343. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -0
  344. package/dist/astro/routes/api/import/wordpress/media.d.mts +36 -0
  345. package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -0
  346. package/dist/astro/routes/api/import/wordpress/media.mjs +225 -0
  347. package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -0
  348. package/dist/astro/routes/api/import/wordpress/prepare.d.mts +20 -0
  349. package/dist/astro/routes/api/import/wordpress/prepare.d.mts.map +1 -0
  350. package/dist/astro/routes/api/import/wordpress/prepare.mjs +120 -0
  351. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -0
  352. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts +49 -0
  353. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.d.mts.map +1 -0
  354. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs +131 -0
  355. package/dist/astro/routes/api/import/wordpress/rewrite-url-helpers.mjs.map +1 -0
  356. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +22 -0
  357. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -0
  358. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +139 -0
  359. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -0
  360. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +16 -0
  361. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts.map +1 -0
  362. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +71 -0
  363. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -0
  364. package/dist/astro/routes/api/import/wordpress-plugin/callback.d.mts +8 -0
  365. package/dist/astro/routes/api/import/wordpress-plugin/callback.d.mts.map +1 -0
  366. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +29 -0
  367. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs.map +1 -0
  368. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +20 -0
  369. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -0
  370. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +219 -0
  371. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -0
  372. package/dist/astro/routes/api/manifest.d.mts +8 -0
  373. package/dist/astro/routes/api/manifest.d.mts.map +1 -0
  374. package/dist/astro/routes/api/manifest.mjs +47 -0
  375. package/dist/astro/routes/api/manifest.mjs.map +1 -0
  376. package/dist/astro/routes/api/mcp.d.mts +16 -0
  377. package/dist/astro/routes/api/mcp.d.mts.map +1 -0
  378. package/dist/astro/routes/api/mcp.mjs +1414 -0
  379. package/dist/astro/routes/api/mcp.mjs.map +1 -0
  380. package/dist/astro/routes/api/media/_id_/confirm.d.mts +11 -0
  381. package/dist/astro/routes/api/media/_id_/confirm.d.mts.map +1 -0
  382. package/dist/astro/routes/api/media/_id_/confirm.mjs +61 -0
  383. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -0
  384. package/dist/astro/routes/api/media/_id_.d.mts +23 -0
  385. package/dist/astro/routes/api/media/_id_.d.mts.map +1 -0
  386. package/dist/astro/routes/api/media/_id_.mjs +83 -0
  387. package/dist/astro/routes/api/media/_id_.mjs.map +1 -0
  388. package/dist/astro/routes/api/media/file/_...key_.d.mts +8 -0
  389. package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -0
  390. package/dist/astro/routes/api/media/file/_...key_.mjs +52 -0
  391. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -0
  392. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.d.mts +15 -0
  393. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.d.mts.map +1 -0
  394. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +52 -0
  395. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs.map +1 -0
  396. package/dist/astro/routes/api/media/providers/_providerId_/index.d.mts +15 -0
  397. package/dist/astro/routes/api/media/providers/_providerId_/index.d.mts.map +1 -0
  398. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +75 -0
  399. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs.map +1 -0
  400. package/dist/astro/routes/api/media/providers/index.d.mts +11 -0
  401. package/dist/astro/routes/api/media/providers/index.d.mts.map +1 -0
  402. package/dist/astro/routes/api/media/providers/index.mjs +21 -0
  403. package/dist/astro/routes/api/media/providers/index.mjs.map +1 -0
  404. package/dist/astro/routes/api/media/upload-url.d.mts +11 -0
  405. package/dist/astro/routes/api/media/upload-url.d.mts.map +1 -0
  406. package/dist/astro/routes/api/media/upload-url.mjs +82 -0
  407. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -0
  408. package/dist/astro/routes/api/media.d.mts +17 -0
  409. package/dist/astro/routes/api/media.d.mts.map +1 -0
  410. package/dist/astro/routes/api/media.mjs +138 -0
  411. package/dist/astro/routes/api/media.mjs.map +1 -0
  412. package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts +9 -0
  413. package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -0
  414. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +48 -0
  415. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -0
  416. package/dist/astro/routes/api/menus/_name_/items.d.mts +8 -0
  417. package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -0
  418. package/dist/astro/routes/api/menus/_name_/items.mjs +31 -0
  419. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -0
  420. package/dist/astro/routes/api/menus/_name_/reorder.d.mts +8 -0
  421. package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -0
  422. package/dist/astro/routes/api/menus/_name_/reorder.mjs +31 -0
  423. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -0
  424. package/dist/astro/routes/api/menus/_name_/translations.d.mts +9 -0
  425. package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -0
  426. package/dist/astro/routes/api/menus/_name_/translations.mjs +62 -0
  427. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -0
  428. package/dist/astro/routes/api/menus/_name_.d.mts +10 -0
  429. package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -0
  430. package/dist/astro/routes/api/menus/_name_.mjs +60 -0
  431. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -0
  432. package/dist/astro/routes/api/menus/index.d.mts +9 -0
  433. package/dist/astro/routes/api/menus/index.d.mts.map +1 -0
  434. package/dist/astro/routes/api/menus/index.mjs +40 -0
  435. package/dist/astro/routes/api/menus/index.mjs.map +1 -0
  436. package/dist/astro/routes/api/oauth/authorize.d.mts +9 -0
  437. package/dist/astro/routes/api/oauth/authorize.d.mts.map +1 -0
  438. package/dist/astro/routes/api/oauth/authorize.mjs +260 -0
  439. package/dist/astro/routes/api/oauth/authorize.mjs.map +1 -0
  440. package/dist/astro/routes/api/oauth/device/authorize.d.mts +8 -0
  441. package/dist/astro/routes/api/oauth/device/authorize.d.mts.map +1 -0
  442. package/dist/astro/routes/api/oauth/device/authorize.mjs +32 -0
  443. package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -0
  444. package/dist/astro/routes/api/oauth/device/code.d.mts +8 -0
  445. package/dist/astro/routes/api/oauth/device/code.d.mts.map +1 -0
  446. package/dist/astro/routes/api/oauth/device/code.mjs +36 -0
  447. package/dist/astro/routes/api/oauth/device/code.mjs.map +1 -0
  448. package/dist/astro/routes/api/oauth/device/token.d.mts +8 -0
  449. package/dist/astro/routes/api/oauth/device/token.d.mts.map +1 -0
  450. package/dist/astro/routes/api/oauth/device/token.mjs +47 -0
  451. package/dist/astro/routes/api/oauth/device/token.mjs.map +1 -0
  452. package/dist/astro/routes/api/oauth/register.d.mts +9 -0
  453. package/dist/astro/routes/api/oauth/register.d.mts.map +1 -0
  454. package/dist/astro/routes/api/oauth/register.mjs +113 -0
  455. package/dist/astro/routes/api/oauth/register.mjs.map +1 -0
  456. package/dist/astro/routes/api/oauth/token/refresh.d.mts +8 -0
  457. package/dist/astro/routes/api/oauth/token/refresh.d.mts.map +1 -0
  458. package/dist/astro/routes/api/oauth/token/refresh.mjs +30 -0
  459. package/dist/astro/routes/api/oauth/token/refresh.mjs.map +1 -0
  460. package/dist/astro/routes/api/oauth/token/revoke.d.mts +8 -0
  461. package/dist/astro/routes/api/oauth/token/revoke.d.mts.map +1 -0
  462. package/dist/astro/routes/api/oauth/token/revoke.mjs +27 -0
  463. package/dist/astro/routes/api/oauth/token/revoke.mjs.map +1 -0
  464. package/dist/astro/routes/api/oauth/token.d.mts +9 -0
  465. package/dist/astro/routes/api/oauth/token.d.mts.map +1 -0
  466. package/dist/astro/routes/api/oauth/token.mjs +141 -0
  467. package/dist/astro/routes/api/oauth/token.mjs.map +1 -0
  468. package/dist/astro/routes/api/openapi.json.d.mts +8 -0
  469. package/dist/astro/routes/api/openapi.json.d.mts.map +1 -0
  470. package/dist/astro/routes/api/openapi.json.mjs +2642 -0
  471. package/dist/astro/routes/api/openapi.json.mjs.map +1 -0
  472. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts +12 -0
  473. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts.map +1 -0
  474. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +78 -0
  475. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -0
  476. package/dist/astro/routes/api/redirects/404s/index.d.mts +10 -0
  477. package/dist/astro/routes/api/redirects/404s/index.d.mts.map +1 -0
  478. package/dist/astro/routes/api/redirects/404s/index.mjs +62 -0
  479. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -0
  480. package/dist/astro/routes/api/redirects/404s/summary.d.mts +8 -0
  481. package/dist/astro/routes/api/redirects/404s/summary.d.mts.map +1 -0
  482. package/dist/astro/routes/api/redirects/404s/summary.mjs +34 -0
  483. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -0
  484. package/dist/astro/routes/api/redirects/_id_.d.mts +10 -0
  485. package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -0
  486. package/dist/astro/routes/api/redirects/_id_.mjs +71 -0
  487. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -0
  488. package/dist/astro/routes/api/redirects/index.d.mts +9 -0
  489. package/dist/astro/routes/api/redirects/index.d.mts.map +1 -0
  490. package/dist/astro/routes/api/redirects/index.mjs +52 -0
  491. package/dist/astro/routes/api/redirects/index.mjs.map +1 -0
  492. package/dist/astro/routes/api/revisions/_revisionId_/index.d.mts +8 -0
  493. package/dist/astro/routes/api/revisions/_revisionId_/index.d.mts.map +1 -0
  494. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +19 -0
  495. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs.map +1 -0
  496. package/dist/astro/routes/api/revisions/_revisionId_/restore.d.mts +8 -0
  497. package/dist/astro/routes/api/revisions/_revisionId_/restore.d.mts.map +1 -0
  498. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +26 -0
  499. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs.map +1 -0
  500. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.d.mts +10 -0
  501. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.d.mts.map +1 -0
  502. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +75 -0
  503. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -0
  504. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.d.mts +9 -0
  505. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.d.mts.map +1 -0
  506. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +63 -0
  507. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -0
  508. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.d.mts +8 -0
  509. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.d.mts.map +1 -0
  510. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +54 -0
  511. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -0
  512. package/dist/astro/routes/api/schema/collections/_slug_/index.d.mts +10 -0
  513. package/dist/astro/routes/api/schema/collections/_slug_/index.d.mts.map +1 -0
  514. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +79 -0
  515. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -0
  516. package/dist/astro/routes/api/schema/collections/index.d.mts +9 -0
  517. package/dist/astro/routes/api/schema/collections/index.d.mts.map +1 -0
  518. package/dist/astro/routes/api/schema/collections/index.mjs +63 -0
  519. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -0
  520. package/dist/astro/routes/api/schema/index.d.mts +8 -0
  521. package/dist/astro/routes/api/schema/index.d.mts.map +1 -0
  522. package/dist/astro/routes/api/schema/index.mjs +82 -0
  523. package/dist/astro/routes/api/schema/index.mjs.map +1 -0
  524. package/dist/astro/routes/api/schema/orphans/_slug_.d.mts +8 -0
  525. package/dist/astro/routes/api/schema/orphans/_slug_.d.mts.map +1 -0
  526. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +55 -0
  527. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -0
  528. package/dist/astro/routes/api/schema/orphans/index.d.mts +8 -0
  529. package/dist/astro/routes/api/schema/orphans/index.d.mts.map +1 -0
  530. package/dist/astro/routes/api/schema/orphans/index.mjs +50 -0
  531. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -0
  532. package/dist/astro/routes/api/search/enable.d.mts +16 -0
  533. package/dist/astro/routes/api/search/enable.d.mts.map +1 -0
  534. package/dist/astro/routes/api/search/enable.mjs +55 -0
  535. package/dist/astro/routes/api/search/enable.mjs.map +1 -0
  536. package/dist/astro/routes/api/search/index.d.mts +17 -0
  537. package/dist/astro/routes/api/search/index.d.mts.map +1 -0
  538. package/dist/astro/routes/api/search/index.mjs +52 -0
  539. package/dist/astro/routes/api/search/index.mjs.map +1 -0
  540. package/dist/astro/routes/api/search/rebuild.d.mts +14 -0
  541. package/dist/astro/routes/api/search/rebuild.d.mts.map +1 -0
  542. package/dist/astro/routes/api/search/rebuild.mjs +48 -0
  543. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -0
  544. package/dist/astro/routes/api/search/stats.d.mts +11 -0
  545. package/dist/astro/routes/api/search/stats.d.mts.map +1 -0
  546. package/dist/astro/routes/api/search/stats.mjs +29 -0
  547. package/dist/astro/routes/api/search/stats.mjs.map +1 -0
  548. package/dist/astro/routes/api/search/suggest.d.mts +16 -0
  549. package/dist/astro/routes/api/search/suggest.d.mts.map +1 -0
  550. package/dist/astro/routes/api/search/suggest.mjs +43 -0
  551. package/dist/astro/routes/api/search/suggest.mjs.map +1 -0
  552. package/dist/astro/routes/api/sections/_slug_.d.mts +10 -0
  553. package/dist/astro/routes/api/sections/_slug_.d.mts.map +1 -0
  554. package/dist/astro/routes/api/sections/_slug_.mjs +65 -0
  555. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -0
  556. package/dist/astro/routes/api/sections/index.d.mts +9 -0
  557. package/dist/astro/routes/api/sections/index.d.mts.map +1 -0
  558. package/dist/astro/routes/api/sections/index.mjs +48 -0
  559. package/dist/astro/routes/api/sections/index.mjs.map +1 -0
  560. package/dist/astro/routes/api/settings/email.d.mts +18 -0
  561. package/dist/astro/routes/api/settings/email.d.mts.map +1 -0
  562. package/dist/astro/routes/api/settings/email.mjs +105 -0
  563. package/dist/astro/routes/api/settings/email.mjs.map +1 -0
  564. package/dist/astro/routes/api/settings.d.mts +21 -0
  565. package/dist/astro/routes/api/settings.d.mts.map +1 -0
  566. package/dist/astro/routes/api/settings.mjs +58 -0
  567. package/dist/astro/routes/api/settings.mjs.map +1 -0
  568. package/dist/astro/routes/api/setup/admin-verify.d.mts +8 -0
  569. package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -0
  570. package/dist/astro/routes/api/setup/admin-verify.mjs +68 -0
  571. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -0
  572. package/dist/astro/routes/api/setup/admin.d.mts +8 -0
  573. package/dist/astro/routes/api/setup/admin.d.mts.map +1 -0
  574. package/dist/astro/routes/api/setup/admin.mjs +69 -0
  575. package/dist/astro/routes/api/setup/admin.mjs.map +1 -0
  576. package/dist/astro/routes/api/setup/dev-bypass.d.mts +9 -0
  577. package/dist/astro/routes/api/setup/dev-bypass.d.mts.map +1 -0
  578. package/dist/astro/routes/api/setup/dev-bypass.mjs +139 -0
  579. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -0
  580. package/dist/astro/routes/api/setup/dev-reset.d.mts +8 -0
  581. package/dist/astro/routes/api/setup/dev-reset.d.mts.map +1 -0
  582. package/dist/astro/routes/api/setup/dev-reset.mjs +25 -0
  583. package/dist/astro/routes/api/setup/dev-reset.mjs.map +1 -0
  584. package/dist/astro/routes/api/setup/index.d.mts +8 -0
  585. package/dist/astro/routes/api/setup/index.d.mts.map +1 -0
  586. package/dist/astro/routes/api/setup/index.mjs +93 -0
  587. package/dist/astro/routes/api/setup/index.mjs.map +1 -0
  588. package/dist/astro/routes/api/setup/status.d.mts +8 -0
  589. package/dist/astro/routes/api/setup/status.d.mts.map +1 -0
  590. package/dist/astro/routes/api/setup/status.mjs +60 -0
  591. package/dist/astro/routes/api/setup/status.mjs.map +1 -0
  592. package/dist/astro/routes/api/snapshot.d.mts +8 -0
  593. package/dist/astro/routes/api/snapshot.d.mts.map +1 -0
  594. package/dist/astro/routes/api/snapshot.mjs +270 -0
  595. package/dist/astro/routes/api/snapshot.mjs.map +1 -0
  596. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts +9 -0
  597. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -0
  598. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +72 -0
  599. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -0
  600. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts +19 -0
  601. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -0
  602. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +80 -0
  603. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -0
  604. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts +15 -0
  605. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -0
  606. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +59 -0
  607. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -0
  608. package/dist/astro/routes/api/taxonomies/index.d.mts +15 -0
  609. package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -0
  610. package/dist/astro/routes/api/taxonomies/index.mjs +55 -0
  611. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -0
  612. package/dist/astro/routes/api/themes/preview.d.mts +8 -0
  613. package/dist/astro/routes/api/themes/preview.d.mts.map +1 -0
  614. package/dist/astro/routes/api/themes/preview.mjs +49 -0
  615. package/dist/astro/routes/api/themes/preview.mjs.map +1 -0
  616. package/dist/astro/routes/api/typegen.d.mts +18 -0
  617. package/dist/astro/routes/api/typegen.d.mts.map +1 -0
  618. package/dist/astro/routes/api/typegen.mjs +78 -0
  619. package/dist/astro/routes/api/typegen.mjs.map +1 -0
  620. package/dist/astro/routes/api/well-known/auth.d.mts +8 -0
  621. package/dist/astro/routes/api/well-known/auth.d.mts.map +1 -0
  622. package/dist/astro/routes/api/well-known/auth.mjs +42 -0
  623. package/dist/astro/routes/api/well-known/auth.mjs.map +1 -0
  624. package/dist/astro/routes/api/well-known/oauth-authorization-server.d.mts +8 -0
  625. package/dist/astro/routes/api/well-known/oauth-authorization-server.d.mts.map +1 -0
  626. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +32 -0
  627. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs.map +1 -0
  628. package/dist/astro/routes/api/well-known/oauth-protected-resource.d.mts +8 -0
  629. package/dist/astro/routes/api/well-known/oauth-protected-resource.d.mts.map +1 -0
  630. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +21 -0
  631. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs.map +1 -0
  632. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts +8 -0
  633. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -0
  634. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +36 -0
  635. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -0
  636. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts +9 -0
  637. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -0
  638. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +62 -0
  639. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -0
  640. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts +8 -0
  641. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -0
  642. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +49 -0
  643. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -0
  644. package/dist/astro/routes/api/widget-areas/_name_.d.mts +9 -0
  645. package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -0
  646. package/dist/astro/routes/api/widget-areas/_name_.mjs +49 -0
  647. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -0
  648. package/dist/astro/routes/api/widget-areas/index.d.mts +9 -0
  649. package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -0
  650. package/dist/astro/routes/api/widget-areas/index.mjs +59 -0
  651. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -0
  652. package/dist/astro/routes/api/widget-components.d.mts +8 -0
  653. package/dist/astro/routes/api/widget-components.d.mts.map +1 -0
  654. package/dist/astro/routes/api/widget-components.mjs +18 -0
  655. package/dist/astro/routes/api/widget-components.mjs.map +1 -0
  656. package/dist/astro/routes/robots.txt.d.mts +8 -0
  657. package/dist/astro/routes/robots.txt.d.mts.map +1 -0
  658. package/dist/astro/routes/robots.txt.mjs +61 -0
  659. package/dist/astro/routes/robots.txt.mjs.map +1 -0
  660. package/dist/astro/routes/sitemap-_collection_.xml.d.mts +8 -0
  661. package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -0
  662. package/dist/astro/routes/sitemap-_collection_.xml.mjs +71 -0
  663. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -0
  664. package/dist/astro/routes/sitemap.xml.d.mts +8 -0
  665. package/dist/astro/routes/sitemap.xml.d.mts.map +1 -0
  666. package/dist/astro/routes/sitemap.xml.mjs +64 -0
  667. package/dist/astro/routes/sitemap.xml.mjs.map +1 -0
  668. package/dist/astro/types.d.mts +48 -8
  669. package/dist/astro/types.d.mts.map +1 -1
  670. package/dist/auth/providers/github.d.mts +13 -0
  671. package/dist/auth/providers/github.d.mts.map +1 -0
  672. package/dist/auth/providers/github.mjs +18 -0
  673. package/dist/auth/providers/github.mjs.map +1 -0
  674. package/dist/auth/providers/google.d.mts +13 -0
  675. package/dist/auth/providers/google.d.mts.map +1 -0
  676. package/dist/auth/providers/google.mjs +18 -0
  677. package/dist/auth/providers/google.mjs.map +1 -0
  678. package/dist/authorize-BlyCH-96.mjs +37 -0
  679. package/dist/authorize-BlyCH-96.mjs.map +1 -0
  680. package/dist/{base64-MBPo9ozB.mjs → base64-CqR-7kqF.mjs} +1 -1
  681. package/dist/{base64-MBPo9ozB.mjs.map → base64-CqR-7kqF.mjs.map} +1 -1
  682. package/dist/{byline-gFn1r0vA.mjs → byline-D09BaS4j.mjs} +4 -4
  683. package/dist/{byline-gFn1r0vA.mjs.map → byline-D09BaS4j.mjs.map} +1 -1
  684. package/dist/{bylines-DTFI8nDM.mjs → bylines-BTM2xtP8.mjs} +6 -6
  685. package/dist/{bylines-DTFI8nDM.mjs.map → bylines-BTM2xtP8.mjs.map} +1 -1
  686. package/dist/bylines-C6eYUWlZ.d.mts +1971 -0
  687. package/dist/bylines-C6eYUWlZ.d.mts.map +1 -0
  688. package/dist/{cache-BAJbeoZ8.mjs → cache-CXCpjWiL.mjs} +3 -3
  689. package/dist/{cache-BAJbeoZ8.mjs.map → cache-CXCpjWiL.mjs.map} +1 -1
  690. package/dist/challenge-store-CJ0OOHOr.mjs +49 -0
  691. package/dist/challenge-store-CJ0OOHOr.mjs.map +1 -0
  692. package/dist/{chunks-BK1oZS-l.mjs → chunks-DyGtu1Bv.mjs} +2 -2
  693. package/dist/{chunks-BK1oZS-l.mjs.map → chunks-DyGtu1Bv.mjs.map} +1 -1
  694. package/dist/cli/index.mjs +23 -18
  695. package/dist/cli/index.mjs.map +1 -1
  696. package/dist/client/cf-access.d.mts +1 -1
  697. package/dist/client/index.d.mts +1 -1
  698. package/dist/client/index.d.mts.map +1 -1
  699. package/dist/client/index.mjs +2 -2
  700. package/dist/client/index.mjs.map +1 -1
  701. package/dist/comment-Dd9MI82-.mjs +247 -0
  702. package/dist/comment-Dd9MI82-.mjs.map +1 -0
  703. package/dist/comments-koGI0FrK.mjs +204 -0
  704. package/dist/comments-koGI0FrK.mjs.map +1 -0
  705. package/dist/components-mZem7pbe.mjs +108 -0
  706. package/dist/components-mZem7pbe.mjs.map +1 -0
  707. package/dist/{content-CERxPUN0.mjs → content-D6YG26WG.mjs} +10 -34
  708. package/dist/content-D6YG26WG.mjs.map +1 -0
  709. package/dist/context-qF8d3IPR.mjs +879 -0
  710. package/dist/context-qF8d3IPR.mjs.map +1 -0
  711. package/dist/cron-H8eJ46dv.mjs +264 -0
  712. package/dist/cron-H8eJ46dv.mjs.map +1 -0
  713. package/dist/dashboard-BmWSIUwY.mjs +105 -0
  714. package/dist/dashboard-BmWSIUwY.mjs.map +1 -0
  715. package/dist/db/index.d.mts +3 -3
  716. package/dist/db/index.mjs +1 -1
  717. package/dist/db/libsql.d.mts +1 -1
  718. package/dist/db/postgres.d.mts +1 -1
  719. package/dist/db/sqlite.d.mts +1 -1
  720. package/dist/{db-errors-B7P2pSCn.mjs → db-errors-CGN9kJfo.mjs} +1 -1
  721. package/dist/{db-errors-B7P2pSCn.mjs.map → db-errors-CGN9kJfo.mjs.map} +1 -1
  722. package/dist/{default-pHuz9WF6.mjs → default-Dbs22Gg4.mjs} +1 -1
  723. package/dist/{default-pHuz9WF6.mjs.map → default-Dbs22Gg4.mjs.map} +1 -1
  724. package/dist/device-flow-BqJRxa0Q.mjs +467 -0
  725. package/dist/device-flow-BqJRxa0Q.mjs.map +1 -0
  726. package/dist/email-console-Dmp5Q-P2.mjs +50 -0
  727. package/dist/email-console-Dmp5Q-P2.mjs.map +1 -0
  728. package/dist/error-tSQWIl5U.mjs +437 -0
  729. package/dist/error-tSQWIl5U.mjs.map +1 -0
  730. package/dist/escape-B8bdIryO.mjs +9 -0
  731. package/dist/escape-B8bdIryO.mjs.map +1 -0
  732. package/dist/fts-manager-B633C-kQ.mjs +339 -0
  733. package/dist/fts-manager-B633C-kQ.mjs.map +1 -0
  734. package/dist/hash-DlUxGhQS.mjs +33 -0
  735. package/dist/hash-DlUxGhQS.mjs.map +1 -0
  736. package/dist/import-CNfLOgDE.mjs +1531 -0
  737. package/dist/import-CNfLOgDE.mjs.map +1 -0
  738. package/dist/index-D2gvztOP.d.mts +262 -0
  739. package/dist/index-D2gvztOP.d.mts.map +1 -0
  740. package/dist/{index-Dlkzhb4C.d.mts → index-UmOMt9T-.d.mts} +310 -911
  741. package/dist/index-UmOMt9T-.d.mts.map +1 -0
  742. package/dist/index.d.mts +17 -11
  743. package/dist/index.mjs +57 -28
  744. package/dist/{load-DR1VwFXR.mjs → load-QzYRpVN3.mjs} +2 -2
  745. package/dist/{load-DR1VwFXR.mjs.map → load-QzYRpVN3.mjs.map} +1 -1
  746. package/dist/{loader-ou_PXAjg.mjs → loader-Cs6-Bqe6.mjs} +4 -4
  747. package/dist/{loader-ou_PXAjg.mjs.map → loader-Cs6-Bqe6.mjs.map} +1 -1
  748. package/dist/{manifest-schema-Bp6d4d4n.mjs → manifest-schema-HCtSh4Jq.mjs} +1 -1
  749. package/dist/{manifest-schema-Bp6d4d4n.mjs.map → manifest-schema-HCtSh4Jq.mjs.map} +1 -1
  750. package/dist/media/index.d.mts +1 -1
  751. package/dist/media/index.mjs +2 -1
  752. package/dist/media/index.mjs.map +1 -1
  753. package/dist/media/local-runtime.d.mts +11 -7
  754. package/dist/media/local-runtime.d.mts.map +1 -1
  755. package/dist/media/local-runtime.mjs +7 -6
  756. package/dist/media/local-runtime.mjs.map +1 -1
  757. package/dist/media-Dg7he9uK.mjs +209 -0
  758. package/dist/media-Dg7he9uK.mjs.map +1 -0
  759. package/dist/media-allowlist-B8EX01DH.mjs +32 -0
  760. package/dist/media-allowlist-B8EX01DH.mjs.map +1 -0
  761. package/dist/menus-DOzIecHi.mjs +723 -0
  762. package/dist/menus-DOzIecHi.mjs.map +1 -0
  763. package/dist/menus-X4Z-eBA1.mjs +2788 -0
  764. package/dist/menus-X4Z-eBA1.mjs.map +1 -0
  765. package/dist/mime-KV5TqkMN.mjs +36 -0
  766. package/dist/mime-KV5TqkMN.mjs.map +1 -0
  767. package/dist/{mode-YhqNVef_.mjs → mode-DPRPvJYm.mjs} +1 -1
  768. package/dist/{mode-YhqNVef_.mjs.map → mode-DPRPvJYm.mjs.map} +1 -1
  769. package/dist/normalize-CN5kRSMC.mjs +151 -0
  770. package/dist/normalize-CN5kRSMC.mjs.map +1 -0
  771. package/dist/oauth-authorization-62GmpGIH.mjs +275 -0
  772. package/dist/oauth-authorization-62GmpGIH.mjs.map +1 -0
  773. package/dist/oauth-clients-D_B0_-Bz.mjs +266 -0
  774. package/dist/oauth-clients-D_B0_-Bz.mjs.map +1 -0
  775. package/dist/oauth-state-store-DpsZViTu.mjs +49 -0
  776. package/dist/oauth-state-store-DpsZViTu.mjs.map +1 -0
  777. package/dist/oauth-user-lookup-meyS2oB1.mjs +26 -0
  778. package/dist/oauth-user-lookup-meyS2oB1.mjs.map +1 -0
  779. package/dist/{options-nPxWnrya.mjs → options-BL4X94qY.mjs} +1 -1
  780. package/dist/{options-nPxWnrya.mjs.map → options-BL4X94qY.mjs.map} +1 -1
  781. package/dist/options-Cq64Wx0O.d.mts +207 -0
  782. package/dist/options-Cq64Wx0O.d.mts.map +1 -0
  783. package/dist/page/index.d.mts +2 -2
  784. package/dist/parse-BFTPon-J.mjs +89 -0
  785. package/dist/parse-BFTPon-J.mjs.map +1 -0
  786. package/dist/passkey-config-Cg86_ISa.mjs +46 -0
  787. package/dist/passkey-config-Cg86_ISa.mjs.map +1 -0
  788. package/dist/{patterns-DsUZ4uxI.mjs → patterns-CqG5Ya3i.mjs} +54 -2
  789. package/dist/{patterns-DsUZ4uxI.mjs.map → patterns-CqG5Ya3i.mjs.map} +1 -1
  790. package/dist/{placeholder-CDPtkelt.d.mts → placeholder-D3cFCU9y.d.mts} +2 -1
  791. package/dist/{placeholder-CDPtkelt.d.mts.map → placeholder-D3cFCU9y.d.mts.map} +1 -1
  792. package/dist/placeholder-LqmHqvBw.mjs +143 -0
  793. package/dist/placeholder-LqmHqvBw.mjs.map +1 -0
  794. package/dist/plugin-types.d.mts +122 -0
  795. package/dist/plugin-types.d.mts.map +1 -0
  796. package/dist/plugin-types.mjs +1 -0
  797. package/dist/plugins/adapt-sandbox-entry.d.mts +20 -12
  798. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  799. package/dist/plugins/adapt-sandbox-entry.mjs +46 -23
  800. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  801. package/dist/preview-C1LOEbWZ.mjs +107 -0
  802. package/dist/preview-C1LOEbWZ.mjs.map +1 -0
  803. package/dist/{public-url-B1AxbbbQ.mjs → public-url-CseXl9Fv.mjs} +39 -2
  804. package/dist/{public-url-B1AxbbbQ.mjs.map → public-url-CseXl9Fv.mjs.map} +1 -1
  805. package/dist/{query-yA3-rFji.mjs → query-axZmO6Tn.mjs} +12 -12
  806. package/dist/{query-yA3-rFji.mjs.map → query-axZmO6Tn.mjs.map} +1 -1
  807. package/dist/rate-limit-t5CVjCO6.mjs +120 -0
  808. package/dist/rate-limit-t5CVjCO6.mjs.map +1 -0
  809. package/dist/redirect-DGRsLO2I.mjs +17 -0
  810. package/dist/redirect-DGRsLO2I.mjs.map +1 -0
  811. package/dist/{redirect-C5H7VGIX.mjs → redirect-DkaDxq8e.mjs} +3 -3
  812. package/dist/{redirect-C5H7VGIX.mjs.map → redirect-DkaDxq8e.mjs.map} +1 -1
  813. package/dist/redirects-D1fdd68T.mjs +573 -0
  814. package/dist/redirects-D1fdd68T.mjs.map +1 -0
  815. package/dist/redirects-Dmj6KRU3.mjs +1141 -0
  816. package/dist/redirects-Dmj6KRU3.mjs.map +1 -0
  817. package/dist/{registry-Do34mz_P.mjs → registry-BnCeHYsf.mjs} +8 -300
  818. package/dist/registry-BnCeHYsf.mjs.map +1 -0
  819. package/dist/{request-cache-D4I69LeL.mjs → request-cache-dzCt8TZB.mjs} +1 -1
  820. package/dist/{request-cache-D4I69LeL.mjs.map → request-cache-dzCt8TZB.mjs.map} +1 -1
  821. package/dist/request-meta-CLCwSQOS.mjs +140 -0
  822. package/dist/request-meta-CLCwSQOS.mjs.map +1 -0
  823. package/dist/{runner-Iu3IZSDM.d.mts → runner-DcfZewkO.d.mts} +2 -2
  824. package/dist/{runner-Iu3IZSDM.d.mts.map → runner-DcfZewkO.d.mts.map} +1 -1
  825. package/dist/{runner-DIcU2UCC.mjs → runner-DdnQIwz_.mjs} +436 -187
  826. package/dist/runner-DdnQIwz_.mjs.map +1 -0
  827. package/dist/runtime.d.mts +10 -6
  828. package/dist/runtime.d.mts.map +1 -1
  829. package/dist/runtime.mjs +3 -3
  830. package/dist/schema-BmqagCwG.mjs +41 -0
  831. package/dist/schema-BmqagCwG.mjs.map +1 -0
  832. package/dist/search-CPrvO5u8.mjs +376 -0
  833. package/dist/search-CPrvO5u8.mjs.map +1 -0
  834. package/dist/{secrets-CZ8rxLX3.mjs → secrets-6pgZyq0K.mjs} +3 -3
  835. package/dist/{secrets-CZ8rxLX3.mjs.map → secrets-6pgZyq0K.mjs.map} +1 -1
  836. package/dist/sections-Cm-zb-gZ.mjs +346 -0
  837. package/dist/sections-Cm-zb-gZ.mjs.map +1 -0
  838. package/dist/seed/index.d.mts +2 -2
  839. package/dist/seed/index.mjs +19 -15
  840. package/dist/seo/index.d.mts +1 -1
  841. package/dist/seo-BoR4wCUh.mjs +86 -0
  842. package/dist/seo-BoR4wCUh.mjs.map +1 -0
  843. package/dist/seo-DRq9-EPP.mjs +130 -0
  844. package/dist/seo-DRq9-EPP.mjs.map +1 -0
  845. package/dist/service-vByySp-2.mjs +195 -0
  846. package/dist/service-vByySp-2.mjs.map +1 -0
  847. package/dist/settings-CBBj7HUd.mjs +51 -0
  848. package/dist/settings-CBBj7HUd.mjs.map +1 -0
  849. package/dist/settings-xQKsWnzQ.mjs +235 -0
  850. package/dist/settings-xQKsWnzQ.mjs.map +1 -0
  851. package/dist/setup-BGAJ2uXs.mjs +137 -0
  852. package/dist/setup-BGAJ2uXs.mjs.map +1 -0
  853. package/dist/setup-complete-C6ZCLhKo.mjs +26 -0
  854. package/dist/setup-complete-C6ZCLhKo.mjs.map +1 -0
  855. package/dist/setup-nonce-CY1gQiAU.mjs +25 -0
  856. package/dist/setup-nonce-CY1gQiAU.mjs.map +1 -0
  857. package/dist/site-url-D-M4Fd8O.mjs +13 -0
  858. package/dist/site-url-D-M4Fd8O.mjs.map +1 -0
  859. package/dist/slugify-Cjh1ssOZ.mjs +30 -0
  860. package/dist/slugify-Cjh1ssOZ.mjs.map +1 -0
  861. package/dist/ssrf-CTul4uQi.mjs +1 -0
  862. package/dist/ssrf-DzFN_qV-.mjs +332 -0
  863. package/dist/ssrf-DzFN_qV-.mjs.map +1 -0
  864. package/dist/storage/local.d.mts +1 -1
  865. package/dist/storage/local.mjs +1 -1
  866. package/dist/storage/s3.d.mts +1 -1
  867. package/dist/storage/s3.mjs +1 -1
  868. package/dist/{taxonomies-JmQQZiG1.mjs → taxonomies-Cn9UpaR2.mjs} +7 -7
  869. package/dist/{taxonomies-JmQQZiG1.mjs.map → taxonomies-Cn9UpaR2.mjs.map} +1 -1
  870. package/dist/taxonomies-Dc0mzlms.mjs +508 -0
  871. package/dist/taxonomies-Dc0mzlms.mjs.map +1 -0
  872. package/dist/{taxonomy-D6NvlKo8.mjs → taxonomy-wPfusMK9.mjs} +3 -3
  873. package/dist/{taxonomy-D6NvlKo8.mjs.map → taxonomy-wPfusMK9.mjs.map} +1 -1
  874. package/dist/{tokens-CyRDPVW2.mjs → tokens-DILYNZMi.mjs} +2 -2
  875. package/dist/{tokens-CyRDPVW2.mjs.map → tokens-DILYNZMi.mjs.map} +1 -1
  876. package/dist/{transaction-D44LBXvU.mjs → transaction-NQj4VJ7Z.mjs} +1 -1
  877. package/dist/{transaction-D44LBXvU.mjs.map → transaction-NQj4VJ7Z.mjs.map} +1 -1
  878. package/dist/{transport-DX_5rpsq.d.mts → transport-GeXlLscf.d.mts} +1 -1
  879. package/dist/{transport-DX_5rpsq.d.mts.map → transport-GeXlLscf.d.mts.map} +1 -1
  880. package/dist/{transport-xpzIjCIB.mjs → transport-fw-mKJzT.mjs} +1 -1
  881. package/dist/{transport-xpzIjCIB.mjs.map → transport-fw-mKJzT.mjs.map} +1 -1
  882. package/dist/trusted-proxy-CJhQIk65.mjs +51 -0
  883. package/dist/trusted-proxy-CJhQIk65.mjs.map +1 -0
  884. package/dist/{types-DgSc9Rpc.d.mts → types-B05e2naf.d.mts} +5 -59
  885. package/dist/types-B05e2naf.d.mts.map +1 -0
  886. package/dist/{types-B1gLSAH2.d.mts → types-BWhaSS7U.d.mts} +2 -75
  887. package/dist/types-BWhaSS7U.d.mts.map +1 -0
  888. package/dist/{types-BQx6ZXpR.d.mts → types-C1KKK4VP.d.mts} +3 -1
  889. package/dist/{types-BQx6ZXpR.d.mts.map → types-C1KKK4VP.d.mts.map} +1 -1
  890. package/dist/types-Cb2UCDJg.d.mts +345 -0
  891. package/dist/types-Cb2UCDJg.d.mts.map +1 -0
  892. package/dist/{types-BIgulNsW.mjs → types-CwXMEPRr.mjs} +10 -3
  893. package/dist/types-CwXMEPRr.mjs.map +1 -0
  894. package/dist/{types-B_CXXnzh.d.mts → types-CzvJd1ND.d.mts} +7 -1
  895. package/dist/{types-B_CXXnzh.d.mts.map → types-CzvJd1ND.d.mts.map} +1 -1
  896. package/dist/types-DFowNO60.d.mts +198 -0
  897. package/dist/types-DFowNO60.d.mts.map +1 -0
  898. package/dist/{types-56BKbld_.mjs → types-DSZl1Dsv.mjs} +1 -1
  899. package/dist/{types-56BKbld_.mjs.map → types-DSZl1Dsv.mjs.map} +1 -1
  900. package/dist/types-DW1l0gCv.d.mts +75 -0
  901. package/dist/types-DW1l0gCv.d.mts.map +1 -0
  902. package/dist/types-Db67HHlU.mjs +3 -0
  903. package/dist/{types-C-aFbqmA.d.mts → types-DmxPPXGf.d.mts} +1 -1
  904. package/dist/{types-C-aFbqmA.d.mts.map → types-DmxPPXGf.d.mts.map} +1 -1
  905. package/dist/{types-PafqtQuM.mjs → types-Dz9CGX_d.mjs} +1 -1
  906. package/dist/{types-PafqtQuM.mjs.map → types-Dz9CGX_d.mjs.map} +1 -1
  907. package/dist/user-Dr1bOCqS.mjs +155 -0
  908. package/dist/user-Dr1bOCqS.mjs.map +1 -0
  909. package/dist/utils-_F-rWBTN.mjs +286 -0
  910. package/dist/utils-_F-rWBTN.mjs.map +1 -0
  911. package/dist/{validate-BcC3m2O7.d.mts → validate-BpQGsmd7.d.mts} +5 -4
  912. package/dist/validate-BpQGsmd7.d.mts.map +1 -0
  913. package/dist/{validate-UK4Ja1uo.mjs → validate-DlFxcVVK.mjs} +3 -3
  914. package/dist/{validate-UK4Ja1uo.mjs.map → validate-DlFxcVVK.mjs.map} +1 -1
  915. package/dist/{validation-Vc5DQkJa.mjs → validation-BiFJqUp5.mjs} +6 -5
  916. package/dist/{validation-Vc5DQkJa.mjs.map → validation-BiFJqUp5.mjs.map} +1 -1
  917. package/dist/version-Dw7Z5PVU.mjs +7 -0
  918. package/dist/{version-BdP--J1g.mjs.map → version-Dw7Z5PVU.mjs.map} +1 -1
  919. package/dist/widgets-B9j_yzlk.mjs +106 -0
  920. package/dist/widgets-B9j_yzlk.mjs.map +1 -0
  921. package/dist/zod-generator-DSyz01KE.mjs +234 -0
  922. package/dist/zod-generator-DSyz01KE.mjs.map +1 -0
  923. package/locals.d.ts +1 -1
  924. package/package.json +37 -14
  925. package/src/api/handlers/content.ts +1 -0
  926. package/src/api/handlers/index.ts +7 -0
  927. package/src/api/handlers/marketplace.ts +27 -6
  928. package/src/api/handlers/menus.ts +157 -580
  929. package/src/api/handlers/plugins.ts +77 -31
  930. package/src/api/handlers/registry.ts +1086 -0
  931. package/src/api/openapi/document.ts +10 -4
  932. package/src/api/schemas/content.ts +1 -0
  933. package/src/api/schemas/menus.ts +27 -23
  934. package/src/api/types.ts +6 -0
  935. package/src/astro/integration/index.ts +1 -0
  936. package/src/astro/integration/route-naming.ts +19 -0
  937. package/src/astro/integration/routes.ts +25 -3
  938. package/src/astro/integration/runtime.ts +35 -8
  939. package/src/astro/middleware/auth.ts +8 -2
  940. package/src/astro/middleware/csp.ts +25 -3
  941. package/src/astro/middleware.ts +3 -0
  942. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +10 -0
  943. package/src/astro/routes/api/admin/plugins/registry/install.ts +107 -0
  944. package/src/astro/routes/api/auth/invite/register-options.ts +8 -1
  945. package/src/astro/routes/api/import/wordpress/execute.ts +185 -6
  946. package/src/astro/routes/api/menus/[name]/items/[id].ts +69 -0
  947. package/src/astro/routes/api/menus/[name]/items.ts +4 -65
  948. package/src/astro/types.ts +38 -0
  949. package/src/cli/wxr/parser.ts +263 -0
  950. package/src/client/index.ts +2 -1
  951. package/src/database/migrations/036_i18n_menus_and_taxonomies.ts +166 -49
  952. package/src/database/migrations/038_registry_plugin_state.ts +130 -0
  953. package/src/database/migrations/039_fix_fts5_triggers.ts +264 -0
  954. package/src/database/migrations/runner.ts +4 -0
  955. package/src/database/repositories/content.ts +5 -1
  956. package/src/database/repositories/index.ts +14 -0
  957. package/src/database/repositories/menu.ts +644 -0
  958. package/src/database/repositories/types.ts +6 -0
  959. package/src/database/types.ts +5 -1
  960. package/src/emdash-runtime.ts +122 -34
  961. package/src/import/sources/wordpress-plugin.ts +9 -2
  962. package/src/import/sources/wxr.ts +16 -2
  963. package/src/import/ssrf.ts +20 -500
  964. package/src/import/wxr-taxonomies.ts +730 -0
  965. package/src/index.ts +3 -10
  966. package/src/media/normalize.ts +37 -4
  967. package/src/plugin-types.ts +240 -0
  968. package/src/plugins/adapt-sandbox-entry.ts +115 -39
  969. package/src/plugins/define-plugin.ts +34 -56
  970. package/src/plugins/index.ts +1 -9
  971. package/src/plugins/marketplace.ts +63 -4
  972. package/src/plugins/sandbox/index.ts +1 -1
  973. package/src/plugins/sandbox/noop.ts +2 -2
  974. package/src/plugins/sandbox/types.ts +7 -4
  975. package/src/plugins/state.ts +84 -38
  976. package/src/plugins/types.ts +2 -79
  977. package/src/registry/config.ts +311 -0
  978. package/src/registry/plugin-id.ts +116 -0
  979. package/src/registry/types.ts +206 -0
  980. package/src/search/fts-manager.ts +77 -15
  981. package/src/security/ssrf.ts +501 -0
  982. package/dist/apply-C1ZORgcy.mjs.map +0 -1
  983. package/dist/content-CERxPUN0.mjs.map +0 -1
  984. package/dist/error-D6LuHLw9.mjs +0 -27
  985. package/dist/error-D6LuHLw9.mjs.map +0 -1
  986. package/dist/index-Dlkzhb4C.d.mts.map +0 -1
  987. package/dist/placeholder-Ci0RLeCk.mjs +0 -268
  988. package/dist/placeholder-Ci0RLeCk.mjs.map +0 -1
  989. package/dist/registry-Do34mz_P.mjs.map +0 -1
  990. package/dist/runner-DIcU2UCC.mjs.map +0 -1
  991. package/dist/search-n-ZCMfr3.mjs +0 -9914
  992. package/dist/search-n-ZCMfr3.mjs.map +0 -1
  993. package/dist/settings-nTXPRi3D.mjs +0 -440
  994. package/dist/settings-nTXPRi3D.mjs.map +0 -1
  995. package/dist/types-B1gLSAH2.d.mts.map +0 -1
  996. package/dist/types-BIgulNsW.mjs.map +0 -1
  997. package/dist/types-Cug_RO3W.mjs +0 -16
  998. package/dist/types-Cug_RO3W.mjs.map +0 -1
  999. package/dist/types-DgSc9Rpc.d.mts.map +0 -1
  1000. package/dist/validate-BcC3m2O7.d.mts.map +0 -1
  1001. package/dist/version-BdP--J1g.mjs +0 -7
  1002. package/dist/zod-generator-CHnJUP2l.mjs +0 -137
  1003. package/dist/zod-generator-CHnJUP2l.mjs.map +0 -1
@@ -0,0 +1,1531 @@
1
+ import { n as slugify } from "./slugify-Cjh1ssOZ.mjs";
2
+ import { a as validateExternalUrl, n as resolveAndValidateExternalUrl, r as ssrfSafeFetch } from "./ssrf-DzFN_qV-.mjs";
3
+ import { a as getFilenameFromUrl, c as isInternalMetaKey, d as mapPostTypeToCollection, f as mapWpStatus, i as checkSchemaCompatibility, l as isInternalPostType, n as FEATURED_IMAGE_FIELD, o as guessMimeType, p as normalizeUrl$1, r as buildAttachmentMap, s as inferMetaType, t as BASE_REQUIRED_FIELDS, u as mapMetaKeyToField } from "./utils-_F-rWBTN.mjs";
4
+ import { ulid } from "ulidx";
5
+ import sax from "sax";
6
+ import { gutenbergToPortableText } from "@emdash-cms/gutenberg-to-portable-text";
7
+
8
+ //#region src/cli/wxr/parser.ts
9
+ const PHP_SERIALIZED_STRING_PATTERN = /s:\d+:"([^"]+)"/g;
10
+ const PHP_SERIALIZED_STRING_MATCH_PATTERN = /s:\d+:"([^"]+)"/;
11
+ /**
12
+ * WPML stores per-post language in postmeta as `_icl_lang_code`. The shared
13
+ * translation id is `trid` (this is the group ID -- every translation of the
14
+ * same content shares it). `_icl_translation_id` exists on some exports too
15
+ * but is a per-translation row id from `wp_icl_translations`, NOT the group
16
+ * id, so it must NOT be used as the group key. We accept it only when `trid`
17
+ * is absent and trust the export to be internally consistent (the only case
18
+ * where that's reasonable is single-post exports with no real grouping).
19
+ *
20
+ * See `wpml_element_trid` in the WPML hook docs: "the ID of the translation
21
+ * group".
22
+ */
23
+ const WPML_LOCALE_META_KEYS = ["_icl_lang_code"];
24
+ const WPML_TRID_META_KEYS = ["trid", "_icl_translation_id"];
25
+ /**
26
+ * Polylang stores per-post language in postmeta as `_locale` on newer
27
+ * exports. The actual language taxonomy assignment lives on
28
+ * `customTaxonomies.language`, which we use as a fallback. Translation
29
+ * grouping is encoded in `_translations` as a serialized PHP map of
30
+ * `{ lang_code => post_id }`; we synthesize a stable group key from the
31
+ * sorted IDs so every member of the group resolves to the same string.
32
+ */
33
+ const POLYLANG_LOCALE_META_KEY = "_locale";
34
+ const POLYLANG_TRANSLATIONS_META_KEY = "_translations";
35
+ const POLYLANG_LANG_TAXONOMY = "language";
36
+ /**
37
+ * Extract a list of post-IDs from Polylang's `_translations` PHP-serialized
38
+ * value. The format we care about is roughly:
39
+ *
40
+ * a:2:{s:2:"en";i:1;s:2:"ar";i:7;}
41
+ *
42
+ * We don't need to round-trip the PHP value -- we just need a stable group
43
+ * key shared by every translation of the same content. Concatenating the
44
+ * sorted IDs gives us exactly that: every post in the group derives the
45
+ * same key from its own copy of `_translations`.
46
+ *
47
+ * Naïve `/i:(\d+);/g` would also match `i:N;` literals embedded INSIDE
48
+ * string values (e.g. `s:11:"i:42;hello";`), which would silently corrupt
49
+ * the group key. We walk the serialized blob token-by-token instead.
50
+ *
51
+ * PHP serializes `s:LEN:"..."` with LEN counted in BYTES, not characters
52
+ * (UTF-8 byte length). JS string positions are UTF-16 code units, so we
53
+ * encode to bytes via `TextEncoder` and walk byte offsets. Single-byte-only
54
+ * inputs (the common case for Polylang's `_translations` which only stores
55
+ * ASCII locale codes) take the same path; the encoder is cheap.
56
+ */
57
+ function polylangTranslationGroupFromMeta(serialized) {
58
+ const bytes = new TextEncoder().encode(serialized);
59
+ const decoder = new TextDecoder("utf-8");
60
+ const ids = [];
61
+ let i = 0;
62
+ const n = bytes.length;
63
+ const CHAR_S = 115;
64
+ const CHAR_I = 105;
65
+ const CHAR_COLON = 58;
66
+ const CHAR_SEMI = 59;
67
+ const CHAR_QUOTE = 34;
68
+ const indexOf = (byte, from) => {
69
+ for (let k = from; k < n; k++) if (bytes[k] === byte) return k;
70
+ return -1;
71
+ };
72
+ while (i < n) {
73
+ const ch = bytes[i];
74
+ if (ch === CHAR_S && bytes[i + 1] === CHAR_COLON) {
75
+ const lenStart = i + 2;
76
+ const lenEnd = indexOf(CHAR_COLON, lenStart);
77
+ if (lenEnd === -1) break;
78
+ const lenText = decoder.decode(bytes.slice(lenStart, lenEnd));
79
+ const len = Number.parseInt(lenText, 10);
80
+ if (!Number.isFinite(len) || len < 0) {
81
+ i = lenEnd + 1;
82
+ continue;
83
+ }
84
+ if (bytes[lenEnd + 1] !== CHAR_QUOTE) {
85
+ i = lenEnd + 1;
86
+ continue;
87
+ }
88
+ i = lenEnd + 2 + len + 2;
89
+ continue;
90
+ }
91
+ if (ch === CHAR_I && bytes[i + 1] === CHAR_COLON) {
92
+ const valStart = i + 2;
93
+ const valEnd = indexOf(CHAR_SEMI, valStart);
94
+ if (valEnd === -1) break;
95
+ const idText = decoder.decode(bytes.slice(valStart, valEnd));
96
+ const id = Number.parseInt(idText, 10);
97
+ if (Number.isFinite(id)) ids.push(id);
98
+ i = valEnd + 1;
99
+ continue;
100
+ }
101
+ i++;
102
+ }
103
+ if (ids.length === 0) return void 0;
104
+ return `pll:${[...new Set(ids)].toSorted((a, b) => a - b).join(",")}`;
105
+ }
106
+ /**
107
+ * Promote multilingual-plugin metadata from `post.meta` and
108
+ * `post.customTaxonomies` into `post.locale` / `post.translationGroup`.
109
+ *
110
+ * Called once per `<item>` after all of its `<wp:postmeta>` and per-item
111
+ * `<category>` entries have been parsed. Safe to call on posts that have no
112
+ * multilingual metadata -- it's a no-op in that case.
113
+ *
114
+ * WPML wins over Polylang when both are present (they shouldn't co-exist on
115
+ * the same site, but defensive precedence avoids ambiguity).
116
+ */
117
+ function promoteI18nMetadata(post) {
118
+ for (const key of WPML_LOCALE_META_KEYS) {
119
+ const value = post.meta.get(key);
120
+ if (value) {
121
+ post.locale = value;
122
+ break;
123
+ }
124
+ }
125
+ for (const key of WPML_TRID_META_KEYS) {
126
+ const value = post.meta.get(key);
127
+ if (value) {
128
+ post.translationGroup = `wpml:${value}`;
129
+ break;
130
+ }
131
+ }
132
+ if (!post.locale) {
133
+ const pllLocale = post.meta.get(POLYLANG_LOCALE_META_KEY);
134
+ if (pllLocale) post.locale = pllLocale;
135
+ else {
136
+ const firstLang = (post.customTaxonomies?.get(POLYLANG_LANG_TAXONOMY))?.[0];
137
+ if (firstLang) post.locale = firstLang;
138
+ }
139
+ }
140
+ if (!post.translationGroup) {
141
+ const pllTranslations = post.meta.get(POLYLANG_TRANSLATIONS_META_KEY);
142
+ if (pllTranslations) {
143
+ const group = polylangTranslationGroupFromMeta(pllTranslations);
144
+ if (group) post.translationGroup = group;
145
+ }
146
+ }
147
+ }
148
+ /** Extract string value from a SAX attribute (handles both Tag and QualifiedTag) */
149
+ function attrStr(attr) {
150
+ if (typeof attr === "string") return attr;
151
+ if (attr && typeof attr === "object" && "value" in attr) return attr.value;
152
+ return "";
153
+ }
154
+ /**
155
+ * Normalise a `<category domain="...">` value to the matching EmDash
156
+ * taxonomy name so per-item label captures can be retrieved later using
157
+ * the same key.
158
+ */
159
+ function normaliseDomain(domain) {
160
+ if (domain === "post_tag") return "tag";
161
+ return domain;
162
+ }
163
+ /**
164
+ * Persist the human label of a `<category>` text body keyed by the
165
+ * normalised `(taxonomy, slug)` pair. Skips trivial labels that equal the
166
+ * slug (no information vs. just storing the slug).
167
+ */
168
+ function captureItemCategoryLabel(item, pair, label) {
169
+ if (!label || label === pair.nicename) return;
170
+ if (!item.taxonomyLabels) item.taxonomyLabels = /* @__PURE__ */ new Map();
171
+ const key = `${normaliseDomain(pair.domain)}\u0000${pair.nicename}`;
172
+ if (!item.taxonomyLabels.has(key)) item.taxonomyLabels.set(key, label);
173
+ }
174
+ /** Type guard for complete WxrTerm (all required fields present) */
175
+ function isCompleteWxrTerm(term) {
176
+ return term.id !== void 0 && term.taxonomy !== void 0 && term.slug !== void 0 && term.name !== void 0;
177
+ }
178
+ /**
179
+ * Parse a WordPress WXR export file
180
+ */
181
+ function parseWxr(stream) {
182
+ return new Promise((resolve, reject) => {
183
+ const parser = sax.createStream(true, { trim: true });
184
+ const data = {
185
+ site: {},
186
+ posts: [],
187
+ attachments: [],
188
+ categories: [],
189
+ tags: [],
190
+ authors: [],
191
+ terms: [],
192
+ navMenus: []
193
+ };
194
+ let currentPath = [];
195
+ let currentText = "";
196
+ let currentItem = null;
197
+ let currentAttachment = null;
198
+ let currentCategory = null;
199
+ let currentTag = null;
200
+ let currentAuthor = null;
201
+ let currentTerm = null;
202
+ let currentMetaKey = "";
203
+ let pendingItemCategory = null;
204
+ const navMenuItemPosts = [];
205
+ const menuTermsBySlug = /* @__PURE__ */ new Map();
206
+ parser.on("opentag", (node) => {
207
+ const tagName = node.name.toLowerCase();
208
+ currentPath.push(tagName);
209
+ currentText = "";
210
+ if (tagName === "item") currentItem = {
211
+ categories: [],
212
+ tags: [],
213
+ customTaxonomies: /* @__PURE__ */ new Map(),
214
+ meta: /* @__PURE__ */ new Map()
215
+ };
216
+ else if (tagName === "wp:category") currentCategory = {};
217
+ else if (tagName === "wp:tag") currentTag = {};
218
+ else if (tagName === "wp:author") currentAuthor = {};
219
+ else if (tagName === "wp:term") currentTerm = {};
220
+ if (tagName === "category" && currentItem && node.attributes) {
221
+ const domain = attrStr(node.attributes.domain);
222
+ const nicename = attrStr(node.attributes.nicename);
223
+ if (domain === "category" && nicename) {
224
+ currentItem.categories.push(nicename);
225
+ pendingItemCategory = {
226
+ domain,
227
+ nicename
228
+ };
229
+ } else if (domain === "post_tag" && nicename) {
230
+ currentItem.tags.push(nicename);
231
+ pendingItemCategory = {
232
+ domain,
233
+ nicename
234
+ };
235
+ } else if (domain && nicename && domain !== "category" && domain !== "post_tag") {
236
+ if (!currentItem.customTaxonomies) currentItem.customTaxonomies = /* @__PURE__ */ new Map();
237
+ const existing = currentItem.customTaxonomies.get(domain) || [];
238
+ existing.push(nicename);
239
+ currentItem.customTaxonomies.set(domain, existing);
240
+ pendingItemCategory = {
241
+ domain,
242
+ nicename
243
+ };
244
+ }
245
+ }
246
+ });
247
+ parser.on("text", (text) => {
248
+ currentText += text;
249
+ });
250
+ parser.on("cdata", (cdata) => {
251
+ currentText += cdata;
252
+ });
253
+ parser.on("closetag", (tagName) => {
254
+ const tag = tagName.toLowerCase();
255
+ const text = currentText.trim();
256
+ if (currentPath.includes("channel") && !currentItem) switch (tag) {
257
+ case "title":
258
+ if (!data.site.title) data.site.title = text;
259
+ break;
260
+ case "link":
261
+ if (!data.site.link) data.site.link = text;
262
+ break;
263
+ case "description":
264
+ if (!data.site.description) data.site.description = text;
265
+ break;
266
+ case "language":
267
+ data.site.language = text;
268
+ break;
269
+ case "wp:base_site_url":
270
+ data.site.baseSiteUrl = text;
271
+ break;
272
+ case "wp:base_blog_url":
273
+ data.site.baseBlogUrl = text;
274
+ break;
275
+ }
276
+ if (currentItem) switch (tag) {
277
+ case "title":
278
+ currentItem.title = text;
279
+ break;
280
+ case "link":
281
+ currentItem.link = text;
282
+ break;
283
+ case "pubdate":
284
+ currentItem.pubDate = text;
285
+ break;
286
+ case "dc:creator":
287
+ currentItem.creator = text;
288
+ break;
289
+ case "guid":
290
+ currentItem.guid = text;
291
+ break;
292
+ case "description":
293
+ currentItem.description = text;
294
+ break;
295
+ case "content:encoded":
296
+ currentItem.content = text;
297
+ break;
298
+ case "excerpt:encoded":
299
+ currentItem.excerpt = text;
300
+ break;
301
+ case "wp:post_id":
302
+ currentItem.id = parseInt(text, 10);
303
+ break;
304
+ case "wp:post_date":
305
+ currentItem.postDate = text;
306
+ break;
307
+ case "wp:post_date_gmt":
308
+ currentItem.postDateGmt = text;
309
+ break;
310
+ case "wp:post_modified":
311
+ currentItem.postModified = text;
312
+ break;
313
+ case "wp:post_modified_gmt":
314
+ currentItem.postModifiedGmt = text;
315
+ break;
316
+ case "wp:comment_status":
317
+ currentItem.commentStatus = text;
318
+ break;
319
+ case "wp:ping_status":
320
+ currentItem.pingStatus = text;
321
+ break;
322
+ case "wp:status":
323
+ currentItem.status = text;
324
+ break;
325
+ case "wp:post_type":
326
+ currentItem.postType = text;
327
+ break;
328
+ case "wp:post_name":
329
+ currentItem.postName = text;
330
+ break;
331
+ case "wp:post_parent":
332
+ currentItem.postParent = parseInt(text, 10);
333
+ break;
334
+ case "wp:menu_order":
335
+ currentItem.menuOrder = parseInt(text, 10);
336
+ break;
337
+ case "wp:post_password":
338
+ currentItem.postPassword = text || void 0;
339
+ break;
340
+ case "wp:is_sticky":
341
+ currentItem.isSticky = text === "1";
342
+ break;
343
+ case "wp:meta_key":
344
+ currentMetaKey = text;
345
+ break;
346
+ case "wp:meta_value":
347
+ if (currentMetaKey) {
348
+ currentItem.meta.set(currentMetaKey, text);
349
+ currentMetaKey = "";
350
+ }
351
+ break;
352
+ case "wp:attachment_url":
353
+ if (currentItem.postType === "attachment") currentAttachment = {
354
+ id: currentItem.id,
355
+ title: currentItem.title,
356
+ url: text,
357
+ postDate: currentItem.postDate,
358
+ meta: currentItem.meta
359
+ };
360
+ break;
361
+ case "category":
362
+ if (pendingItemCategory && text) captureItemCategoryLabel(currentItem, pendingItemCategory, text);
363
+ pendingItemCategory = null;
364
+ break;
365
+ case "item":
366
+ if (currentAttachment) {
367
+ data.attachments.push(currentAttachment);
368
+ currentAttachment = null;
369
+ } else if (currentItem.postType === "nav_menu_item") {
370
+ navMenuItemPosts.push(currentItem);
371
+ data.posts.push(currentItem);
372
+ } else if (currentItem.postType !== "attachment") {
373
+ promoteI18nMetadata(currentItem);
374
+ data.posts.push(currentItem);
375
+ }
376
+ currentItem = null;
377
+ break;
378
+ }
379
+ if (currentCategory) switch (tag) {
380
+ case "wp:term_id":
381
+ currentCategory.id = parseInt(text, 10);
382
+ break;
383
+ case "wp:category_nicename":
384
+ currentCategory.nicename = text;
385
+ break;
386
+ case "wp:cat_name":
387
+ currentCategory.name = text;
388
+ break;
389
+ case "wp:category_parent":
390
+ currentCategory.parent = text || void 0;
391
+ break;
392
+ case "wp:category_description":
393
+ currentCategory.description = text || void 0;
394
+ break;
395
+ case "wp:category":
396
+ if (currentCategory.name) data.categories.push(currentCategory);
397
+ currentCategory = null;
398
+ break;
399
+ }
400
+ if (currentTag) switch (tag) {
401
+ case "wp:term_id":
402
+ currentTag.id = parseInt(text, 10);
403
+ break;
404
+ case "wp:tag_slug":
405
+ currentTag.slug = text;
406
+ break;
407
+ case "wp:tag_name":
408
+ currentTag.name = text;
409
+ break;
410
+ case "wp:tag_description":
411
+ currentTag.description = text || void 0;
412
+ break;
413
+ case "wp:tag":
414
+ if (currentTag.name) data.tags.push(currentTag);
415
+ currentTag = null;
416
+ break;
417
+ }
418
+ if (currentAuthor) switch (tag) {
419
+ case "wp:author_id":
420
+ currentAuthor.id = parseInt(text, 10);
421
+ break;
422
+ case "wp:author_login":
423
+ currentAuthor.login = text;
424
+ break;
425
+ case "wp:author_email":
426
+ currentAuthor.email = text;
427
+ break;
428
+ case "wp:author_display_name":
429
+ currentAuthor.displayName = text;
430
+ break;
431
+ case "wp:author_first_name":
432
+ currentAuthor.firstName = text;
433
+ break;
434
+ case "wp:author_last_name":
435
+ currentAuthor.lastName = text;
436
+ break;
437
+ case "wp:author":
438
+ if (currentAuthor.login) data.authors.push(currentAuthor);
439
+ currentAuthor = null;
440
+ break;
441
+ }
442
+ if (currentTerm) switch (tag) {
443
+ case "wp:term_id":
444
+ currentTerm.id = parseInt(text, 10);
445
+ break;
446
+ case "wp:term_taxonomy":
447
+ currentTerm.taxonomy = text;
448
+ break;
449
+ case "wp:term_slug":
450
+ currentTerm.slug = text;
451
+ break;
452
+ case "wp:term_name":
453
+ currentTerm.name = text;
454
+ break;
455
+ case "wp:term_parent":
456
+ currentTerm.parent = text || void 0;
457
+ break;
458
+ case "wp:term_description":
459
+ currentTerm.description = text || void 0;
460
+ break;
461
+ case "wp:term":
462
+ if (isCompleteWxrTerm(currentTerm)) {
463
+ data.terms.push(currentTerm);
464
+ if (currentTerm.taxonomy === "nav_menu") menuTermsBySlug.set(currentTerm.slug, currentTerm.id);
465
+ }
466
+ currentTerm = null;
467
+ break;
468
+ }
469
+ currentPath.pop();
470
+ currentText = "";
471
+ });
472
+ parser.on("error", (err) => {
473
+ reject(/* @__PURE__ */ new Error(`XML parsing error: ${err.message}`));
474
+ });
475
+ parser.on("end", () => {
476
+ data.navMenus = buildNavMenus(navMenuItemPosts, menuTermsBySlug);
477
+ resolve(data);
478
+ });
479
+ stream.pipe(parser);
480
+ });
481
+ }
482
+ /**
483
+ * Parse a WordPress WXR export from a string
484
+ *
485
+ * Uses the non-streaming SAX parser API for compatibility with
486
+ * environments that don't have Node.js streams (e.g., Cloudflare Workers).
487
+ */
488
+ function parseWxrString(xml) {
489
+ return new Promise((resolve, reject) => {
490
+ const parser = sax.parser(true, {
491
+ trim: false,
492
+ normalize: false
493
+ });
494
+ const data = {
495
+ site: {},
496
+ posts: [],
497
+ attachments: [],
498
+ categories: [],
499
+ tags: [],
500
+ authors: [],
501
+ terms: [],
502
+ navMenus: []
503
+ };
504
+ let currentPath = [];
505
+ let currentText = "";
506
+ let currentItem = null;
507
+ let currentAttachment = null;
508
+ let currentCategory = null;
509
+ let currentTag = null;
510
+ let currentAuthor = null;
511
+ let currentTerm = null;
512
+ let currentMetaKey = "";
513
+ let pendingItemCategory = null;
514
+ const navMenuItemPosts = [];
515
+ const menuTermsBySlug = /* @__PURE__ */ new Map();
516
+ parser.onopentag = (node) => {
517
+ const tag = node.name.toLowerCase();
518
+ currentPath.push(tag);
519
+ currentText = "";
520
+ if (tag === "item") currentItem = {
521
+ categories: [],
522
+ tags: [],
523
+ customTaxonomies: /* @__PURE__ */ new Map(),
524
+ meta: /* @__PURE__ */ new Map()
525
+ };
526
+ else if (tag === "wp:category") currentCategory = {};
527
+ else if (tag === "wp:tag") currentTag = {};
528
+ else if (tag === "wp:author") currentAuthor = {};
529
+ else if (tag === "wp:term") currentTerm = {};
530
+ if (tag === "category" && currentItem && node.attributes) {
531
+ const domain = attrStr(node.attributes.domain);
532
+ const nicename = attrStr(node.attributes.nicename);
533
+ if (domain === "category" && nicename) {
534
+ currentItem.categories.push(nicename);
535
+ pendingItemCategory = {
536
+ domain,
537
+ nicename
538
+ };
539
+ } else if (domain === "post_tag" && nicename) {
540
+ currentItem.tags.push(nicename);
541
+ pendingItemCategory = {
542
+ domain,
543
+ nicename
544
+ };
545
+ } else if (domain && nicename && domain !== "category" && domain !== "post_tag") {
546
+ if (!currentItem.customTaxonomies) currentItem.customTaxonomies = /* @__PURE__ */ new Map();
547
+ const existing = currentItem.customTaxonomies.get(domain) || [];
548
+ existing.push(nicename);
549
+ currentItem.customTaxonomies.set(domain, existing);
550
+ pendingItemCategory = {
551
+ domain,
552
+ nicename
553
+ };
554
+ }
555
+ }
556
+ };
557
+ parser.ontext = (text) => {
558
+ currentText += text;
559
+ };
560
+ parser.oncdata = (cdata) => {
561
+ currentText += cdata;
562
+ };
563
+ parser.onclosetag = (tagName) => {
564
+ const tag = tagName.toLowerCase();
565
+ const text = currentText.trim();
566
+ if (currentPath.length === 2 && currentPath[0] === "rss") switch (tag) {
567
+ case "title":
568
+ data.site.title = text;
569
+ break;
570
+ case "link":
571
+ data.site.link = text;
572
+ break;
573
+ case "description":
574
+ data.site.description = text;
575
+ break;
576
+ case "language":
577
+ data.site.language = text;
578
+ break;
579
+ case "wp:base_site_url":
580
+ data.site.baseSiteUrl = text;
581
+ break;
582
+ case "wp:base_blog_url":
583
+ data.site.baseBlogUrl = text;
584
+ break;
585
+ }
586
+ if (currentItem) switch (tag) {
587
+ case "title":
588
+ currentItem.title = text;
589
+ break;
590
+ case "link":
591
+ currentItem.link = text;
592
+ break;
593
+ case "pubdate":
594
+ currentItem.pubDate = text;
595
+ break;
596
+ case "dc:creator":
597
+ currentItem.creator = text;
598
+ break;
599
+ case "guid":
600
+ currentItem.guid = text;
601
+ break;
602
+ case "description":
603
+ currentItem.description = text;
604
+ break;
605
+ case "content:encoded":
606
+ currentItem.content = text;
607
+ break;
608
+ case "excerpt:encoded":
609
+ currentItem.excerpt = text;
610
+ break;
611
+ case "wp:post_id":
612
+ currentItem.id = parseInt(text, 10);
613
+ break;
614
+ case "wp:post_date":
615
+ currentItem.postDate = text;
616
+ break;
617
+ case "wp:post_date_gmt":
618
+ currentItem.postDateGmt = text;
619
+ break;
620
+ case "wp:post_modified":
621
+ currentItem.postModified = text;
622
+ break;
623
+ case "wp:post_modified_gmt":
624
+ currentItem.postModifiedGmt = text;
625
+ break;
626
+ case "wp:comment_status":
627
+ currentItem.commentStatus = text;
628
+ break;
629
+ case "wp:ping_status":
630
+ currentItem.pingStatus = text;
631
+ break;
632
+ case "wp:post_name":
633
+ currentItem.postName = text;
634
+ break;
635
+ case "wp:status":
636
+ currentItem.status = text;
637
+ break;
638
+ case "wp:post_parent":
639
+ currentItem.postParent = parseInt(text, 10);
640
+ break;
641
+ case "wp:menu_order":
642
+ currentItem.menuOrder = parseInt(text, 10);
643
+ break;
644
+ case "wp:post_type":
645
+ currentItem.postType = text;
646
+ if (text === "attachment") currentAttachment = {
647
+ id: currentItem.id,
648
+ title: currentItem.title,
649
+ url: currentItem.link,
650
+ postDate: currentItem.postDate,
651
+ meta: /* @__PURE__ */ new Map()
652
+ };
653
+ break;
654
+ case "wp:post_password":
655
+ currentItem.postPassword = text || void 0;
656
+ break;
657
+ case "wp:is_sticky":
658
+ currentItem.isSticky = text === "1";
659
+ break;
660
+ case "wp:attachment_url":
661
+ if (currentAttachment) currentAttachment.url = text;
662
+ break;
663
+ case "wp:meta_key":
664
+ currentMetaKey = text;
665
+ break;
666
+ case "wp:meta_value":
667
+ if (currentMetaKey && currentItem.meta) currentItem.meta.set(currentMetaKey, text);
668
+ break;
669
+ case "category":
670
+ if (pendingItemCategory && text) captureItemCategoryLabel(currentItem, pendingItemCategory, text);
671
+ pendingItemCategory = null;
672
+ break;
673
+ case "item":
674
+ if (currentAttachment) {
675
+ data.attachments.push(currentAttachment);
676
+ currentAttachment = null;
677
+ } else if (currentItem.postType === "nav_menu_item") {
678
+ navMenuItemPosts.push(currentItem);
679
+ data.posts.push(currentItem);
680
+ } else if (currentItem.postType !== "attachment") {
681
+ promoteI18nMetadata(currentItem);
682
+ data.posts.push(currentItem);
683
+ }
684
+ currentItem = null;
685
+ break;
686
+ }
687
+ if (currentCategory) switch (tag) {
688
+ case "wp:term_id":
689
+ currentCategory.id = parseInt(text, 10);
690
+ break;
691
+ case "wp:category_nicename":
692
+ currentCategory.nicename = text;
693
+ break;
694
+ case "wp:cat_name":
695
+ currentCategory.name = text;
696
+ break;
697
+ case "wp:category_parent":
698
+ currentCategory.parent = text || void 0;
699
+ break;
700
+ case "wp:category_description":
701
+ currentCategory.description = text || void 0;
702
+ break;
703
+ case "wp:category":
704
+ if (currentCategory.name) data.categories.push(currentCategory);
705
+ currentCategory = null;
706
+ break;
707
+ }
708
+ if (currentTag) switch (tag) {
709
+ case "wp:term_id":
710
+ currentTag.id = parseInt(text, 10);
711
+ break;
712
+ case "wp:tag_slug":
713
+ currentTag.slug = text;
714
+ break;
715
+ case "wp:tag_name":
716
+ currentTag.name = text;
717
+ break;
718
+ case "wp:tag_description":
719
+ currentTag.description = text || void 0;
720
+ break;
721
+ case "wp:tag":
722
+ if (currentTag.name) data.tags.push(currentTag);
723
+ currentTag = null;
724
+ break;
725
+ }
726
+ if (currentAuthor) switch (tag) {
727
+ case "wp:author_id":
728
+ currentAuthor.id = parseInt(text, 10);
729
+ break;
730
+ case "wp:author_login":
731
+ currentAuthor.login = text;
732
+ break;
733
+ case "wp:author_email":
734
+ currentAuthor.email = text;
735
+ break;
736
+ case "wp:author_display_name":
737
+ currentAuthor.displayName = text;
738
+ break;
739
+ case "wp:author_first_name":
740
+ currentAuthor.firstName = text;
741
+ break;
742
+ case "wp:author_last_name":
743
+ currentAuthor.lastName = text;
744
+ break;
745
+ case "wp:author":
746
+ if (currentAuthor.login) data.authors.push(currentAuthor);
747
+ currentAuthor = null;
748
+ break;
749
+ }
750
+ if (currentTerm) switch (tag) {
751
+ case "wp:term_id":
752
+ currentTerm.id = parseInt(text, 10);
753
+ break;
754
+ case "wp:term_taxonomy":
755
+ currentTerm.taxonomy = text;
756
+ break;
757
+ case "wp:term_slug":
758
+ currentTerm.slug = text;
759
+ break;
760
+ case "wp:term_name":
761
+ currentTerm.name = text;
762
+ break;
763
+ case "wp:term_parent":
764
+ currentTerm.parent = text || void 0;
765
+ break;
766
+ case "wp:term_description":
767
+ currentTerm.description = text || void 0;
768
+ break;
769
+ case "wp:term":
770
+ if (isCompleteWxrTerm(currentTerm)) {
771
+ data.terms.push(currentTerm);
772
+ if (currentTerm.taxonomy === "nav_menu") menuTermsBySlug.set(currentTerm.slug, currentTerm.id);
773
+ }
774
+ currentTerm = null;
775
+ break;
776
+ }
777
+ currentPath.pop();
778
+ currentText = "";
779
+ };
780
+ parser.onerror = (err) => {
781
+ reject(/* @__PURE__ */ new Error(`XML parsing error: ${err.message}`));
782
+ };
783
+ parser.onend = () => {
784
+ data.navMenus = buildNavMenus(navMenuItemPosts, menuTermsBySlug);
785
+ resolve(data);
786
+ };
787
+ parser.write(xml).close();
788
+ });
789
+ }
790
+ /**
791
+ * Build structured navigation menus from nav_menu_item posts
792
+ */
793
+ function buildNavMenus(navMenuItemPosts, menuTermsBySlug) {
794
+ const menuItemsByMenu = /* @__PURE__ */ new Map();
795
+ for (const post of navMenuItemPosts) {
796
+ const navMenuSlugs = post.customTaxonomies?.get("nav_menu");
797
+ if (!navMenuSlugs || navMenuSlugs.length === 0) continue;
798
+ const menuSlug = navMenuSlugs[0];
799
+ if (!menuSlug) continue;
800
+ const items = menuItemsByMenu.get(menuSlug) || [];
801
+ items.push(post);
802
+ menuItemsByMenu.set(menuSlug, items);
803
+ }
804
+ const menus = [];
805
+ for (const [menuSlug, posts] of menuItemsByMenu) {
806
+ const menuId = menuTermsBySlug.get(menuSlug) || 0;
807
+ const items = posts.map((post) => {
808
+ const meta = post.meta;
809
+ const menuItemTypeRaw = meta.get("_menu_item_type") || "custom";
810
+ const menuItemType = menuItemTypeRaw === "post_type" || menuItemTypeRaw === "taxonomy" ? menuItemTypeRaw : "custom";
811
+ const objectType = meta.get("_menu_item_object");
812
+ const objectIdStr = meta.get("_menu_item_object_id");
813
+ const url = meta.get("_menu_item_url");
814
+ const parentIdStr = meta.get("_menu_item_menu_item_parent");
815
+ const target = meta.get("_menu_item_target");
816
+ const classesStr = meta.get("_menu_item_classes");
817
+ let classes;
818
+ if (classesStr) {
819
+ const matches = classesStr.match(PHP_SERIALIZED_STRING_PATTERN);
820
+ if (matches) classes = matches.map((m) => m.match(PHP_SERIALIZED_STRING_MATCH_PATTERN)?.[1]).filter(Boolean).join(" ");
821
+ }
822
+ return {
823
+ id: post.id || 0,
824
+ menuId,
825
+ parentId: parentIdStr ? parseInt(parentIdStr, 10) || void 0 : void 0,
826
+ sortOrder: post.menuOrder || 0,
827
+ type: menuItemType,
828
+ objectType: objectType || void 0,
829
+ objectId: objectIdStr ? parseInt(objectIdStr, 10) : void 0,
830
+ url: url || void 0,
831
+ title: post.title || "",
832
+ target: target || void 0,
833
+ classes: classes || void 0
834
+ };
835
+ });
836
+ items.sort((a, b) => a.sortOrder - b.sortOrder);
837
+ menus.push({
838
+ id: menuId,
839
+ name: menuSlug,
840
+ label: menuSlug,
841
+ items
842
+ });
843
+ }
844
+ return menus;
845
+ }
846
+
847
+ //#endregion
848
+ //#region src/import/sections.ts
849
+ /**
850
+ * Import reusable blocks (wp_block post type) from WXR as sections
851
+ *
852
+ * @param posts - All posts from WXR (will filter to wp_block)
853
+ * @param db - Database connection
854
+ * @returns Import result with counts
855
+ */
856
+ async function importReusableBlocksAsSections(posts, db) {
857
+ const result = {
858
+ sectionsCreated: 0,
859
+ sectionsSkipped: 0,
860
+ errors: []
861
+ };
862
+ const reusableBlocks = posts.filter((post) => post.postType === "wp_block");
863
+ if (reusableBlocks.length === 0) return result;
864
+ for (const block of reusableBlocks) try {
865
+ const slug = block.postName || slugify(block.title || `block-${block.id || Date.now()}`);
866
+ if (await db.selectFrom("_emdash_sections").select("id").where("slug", "=", slug).executeTakeFirst()) {
867
+ result.sectionsSkipped++;
868
+ continue;
869
+ }
870
+ const content = block.content ? gutenbergToPortableText(block.content) : [];
871
+ const id = ulid();
872
+ const now = (/* @__PURE__ */ new Date()).toISOString();
873
+ await db.insertInto("_emdash_sections").values({
874
+ id,
875
+ slug,
876
+ title: block.title || "Untitled Block",
877
+ description: null,
878
+ keywords: null,
879
+ content: JSON.stringify(content),
880
+ preview_media_id: null,
881
+ source: "import",
882
+ theme_id: null,
883
+ created_at: now,
884
+ updated_at: now
885
+ }).execute();
886
+ result.sectionsCreated++;
887
+ } catch (error) {
888
+ result.errors.push({
889
+ title: block.title || "Untitled Block",
890
+ error: error instanceof Error ? error.message : String(error)
891
+ });
892
+ }
893
+ return result;
894
+ }
895
+
896
+ //#endregion
897
+ //#region src/import/registry.ts
898
+ /**
899
+ * Import source registry
900
+ *
901
+ * Manages available import sources and provides URL probing.
902
+ */
903
+ const TRAILING_SLASHES_PATTERN = /\/+$/;
904
+ /** Registered import sources */
905
+ const sources = /* @__PURE__ */ new Map();
906
+ /**
907
+ * Register an import source
908
+ */
909
+ function registerSource(source) {
910
+ sources.set(source.id, source);
911
+ }
912
+ /**
913
+ * Get a source by ID
914
+ */
915
+ function getSource(id) {
916
+ return sources.get(id);
917
+ }
918
+ /**
919
+ * Get all registered sources
920
+ */
921
+ function getAllSources() {
922
+ return [...sources.values()];
923
+ }
924
+ /**
925
+ * Get sources that can handle file uploads
926
+ */
927
+ function getFileSources() {
928
+ return getAllSources().filter((s) => s.requiresFile);
929
+ }
930
+ /**
931
+ * Get sources that can probe URLs
932
+ */
933
+ function getUrlSources() {
934
+ return getAllSources().filter((s) => s.canProbe);
935
+ }
936
+ /**
937
+ * Probe a URL against all registered sources
938
+ *
939
+ * Returns probe results sorted by confidence (definite > likely > possible)
940
+ */
941
+ async function probeUrl(url) {
942
+ let normalizedUrl = url.trim();
943
+ if (!normalizedUrl.startsWith("http")) normalizedUrl = `https://${normalizedUrl}`;
944
+ normalizedUrl = normalizedUrl.replace(TRAILING_SLASHES_PATTERN, "");
945
+ await resolveAndValidateExternalUrl(normalizedUrl);
946
+ const results = [];
947
+ const probePromises = getUrlSources().map(async (source) => {
948
+ try {
949
+ const result = await source.probe?.(normalizedUrl);
950
+ if (result) return result;
951
+ } catch (error) {
952
+ console.debug(`Probe failed for ${source.id}:`, error);
953
+ }
954
+ return null;
955
+ });
956
+ const probeResults = await Promise.allSettled(probePromises);
957
+ for (const result of probeResults) if (result.status === "fulfilled" && result.value) results.push(result.value);
958
+ const confidenceOrder = {
959
+ definite: 0,
960
+ likely: 1,
961
+ possible: 2
962
+ };
963
+ results.sort((a, b) => confidenceOrder[a.confidence] - confidenceOrder[b.confidence]);
964
+ return {
965
+ url: normalizedUrl,
966
+ isWordPress: results.length > 0,
967
+ bestMatch: results[0] ?? null,
968
+ allMatches: results
969
+ };
970
+ }
971
+ /**
972
+ * Clear all registered sources (useful for testing)
973
+ */
974
+ function clearSources() {
975
+ sources.clear();
976
+ }
977
+
978
+ //#endregion
979
+ //#region src/import/sources/wxr.ts
980
+ /**
981
+ * WXR (WordPress eXtended RSS) import source
982
+ *
983
+ * Handles WordPress export file uploads (.xml).
984
+ * This wraps the existing WXR parsing and analysis logic.
985
+ */
986
+ const wxrSource = {
987
+ id: "wxr",
988
+ name: "WordPress Export File",
989
+ description: "Upload a WordPress export file (.xml)",
990
+ icon: "upload",
991
+ requiresFile: true,
992
+ canProbe: false,
993
+ async analyze(input, context) {
994
+ if (input.type !== "file") throw new Error("WXR source requires a file input");
995
+ return analyzeWxrData(await parseWxrString(await input.file.text()), context.getExistingCollections ? await context.getExistingCollections() : /* @__PURE__ */ new Map());
996
+ },
997
+ async *fetchContent(input, options) {
998
+ if (input.type !== "file") throw new Error("WXR source requires a file input");
999
+ const wxr = await parseWxrString(await input.file.text());
1000
+ const attachmentMap = buildAttachmentMap(wxr.attachments);
1001
+ let count = 0;
1002
+ for (const post of wxr.posts) {
1003
+ const postType = post.postType || "post";
1004
+ if (!options.postTypes.includes(postType)) continue;
1005
+ if (isInternalPostType(postType)) continue;
1006
+ if (!options.includeDrafts && post.status !== "publish") continue;
1007
+ yield wxrPostToNormalizedItem(post, attachmentMap);
1008
+ count++;
1009
+ if (options.limit && count >= options.limit) break;
1010
+ }
1011
+ }
1012
+ };
1013
+ /**
1014
+ * Analyze WXR data and return normalized ImportAnalysis
1015
+ */
1016
+ function analyzeWxrData(wxr, existingCollections) {
1017
+ const postTypeCounts = /* @__PURE__ */ new Map();
1018
+ const postTypesWithThumbnails = /* @__PURE__ */ new Set();
1019
+ const metaKeys = /* @__PURE__ */ new Map();
1020
+ const authorPostCounts = /* @__PURE__ */ new Map();
1021
+ for (const post of wxr.posts) {
1022
+ const type = post.postType || "post";
1023
+ postTypeCounts.set(type, (postTypeCounts.get(type) || 0) + 1);
1024
+ if (post.creator) authorPostCounts.set(post.creator, (authorPostCounts.get(post.creator) || 0) + 1);
1025
+ if (post.meta.has("_thumbnail_id")) postTypesWithThumbnails.add(type);
1026
+ for (const [key, value] of post.meta) {
1027
+ const existing = metaKeys.get(key);
1028
+ if (existing) {
1029
+ existing.count++;
1030
+ if (existing.samples.length < 3 && value) existing.samples.push(value.slice(0, 100));
1031
+ } else metaKeys.set(key, {
1032
+ count: 1,
1033
+ samples: value ? [value.slice(0, 100)] : [],
1034
+ isInternal: isInternalMetaKey(key)
1035
+ });
1036
+ }
1037
+ }
1038
+ const customFields = [...metaKeys.entries()].filter(([_, info]) => !info.isInternal).map(([key, info]) => ({
1039
+ key,
1040
+ count: info.count,
1041
+ samples: info.samples,
1042
+ suggestedField: mapMetaKeyToField(key),
1043
+ suggestedType: inferMetaType(key, info.samples[0]),
1044
+ isInternal: info.isInternal
1045
+ })).toSorted((a, b) => b.count - a.count);
1046
+ const postTypes = [...postTypeCounts.entries()].filter(([type]) => !isInternalPostType(type)).map(([name, count]) => {
1047
+ const suggestedCollection = mapPostTypeToCollection(name);
1048
+ const existingCollection = existingCollections.get(suggestedCollection);
1049
+ const requiredFields = [...BASE_REQUIRED_FIELDS];
1050
+ if (postTypesWithThumbnails.has(name)) requiredFields.push(FEATURED_IMAGE_FIELD);
1051
+ return {
1052
+ name,
1053
+ count,
1054
+ suggestedCollection,
1055
+ requiredFields,
1056
+ schemaStatus: checkSchemaCompatibility(requiredFields, existingCollection)
1057
+ };
1058
+ }).toSorted((a, b) => b.count - a.count);
1059
+ const attachmentItems = wxr.attachments.map((att) => {
1060
+ const filename = att.url ? getFilenameFromUrl(att.url) : void 0;
1061
+ const mimeType = filename ? guessMimeType(filename) : void 0;
1062
+ return {
1063
+ id: att.id,
1064
+ title: att.title,
1065
+ url: att.url,
1066
+ filename,
1067
+ mimeType
1068
+ };
1069
+ });
1070
+ const navMenus = wxr.navMenus.map((menu) => ({
1071
+ name: menu.name,
1072
+ label: menu.label,
1073
+ itemCount: menu.items.length
1074
+ }));
1075
+ const taxonomyMap = /* @__PURE__ */ new Map();
1076
+ for (const term of wxr.terms) {
1077
+ if (term.taxonomy === "category" || term.taxonomy === "post_tag" || term.taxonomy === "nav_menu") continue;
1078
+ const existing = taxonomyMap.get(term.taxonomy);
1079
+ if (existing) {
1080
+ existing.count++;
1081
+ if (existing.samples.length < 3) existing.samples.push(term.name);
1082
+ } else taxonomyMap.set(term.taxonomy, {
1083
+ count: 1,
1084
+ samples: [term.name]
1085
+ });
1086
+ }
1087
+ const customTaxonomies = Array.from(taxonomyMap.entries(), ([slug, info]) => ({
1088
+ slug,
1089
+ termCount: info.count,
1090
+ sampleTerms: info.samples
1091
+ })).toSorted((a, b) => b.termCount - a.termCount);
1092
+ const reusableBlocks = wxr.posts.filter((post) => post.postType === "wp_block").map((post) => ({
1093
+ id: post.id || 0,
1094
+ title: post.title || "Untitled Block",
1095
+ slug: post.postName || slugify(post.title || `block-${post.id || Date.now()}`)
1096
+ }));
1097
+ return {
1098
+ sourceId: "wxr",
1099
+ site: {
1100
+ title: wxr.site.title || "WordPress Site",
1101
+ url: wxr.site.link || ""
1102
+ },
1103
+ postTypes,
1104
+ attachments: {
1105
+ count: wxr.attachments.length,
1106
+ items: attachmentItems
1107
+ },
1108
+ categories: wxr.categories.length,
1109
+ tags: wxr.tags.length,
1110
+ authors: wxr.authors.map((a) => ({
1111
+ id: a.id,
1112
+ login: a.login,
1113
+ email: a.email,
1114
+ displayName: a.displayName || a.login || "Unknown",
1115
+ postCount: a.login ? authorPostCounts.get(a.login) || 0 : 0
1116
+ })),
1117
+ navMenus: navMenus.length > 0 ? navMenus : void 0,
1118
+ customTaxonomies: customTaxonomies.length > 0 ? customTaxonomies : void 0,
1119
+ reusableBlocks: reusableBlocks.length > 0 ? reusableBlocks : void 0,
1120
+ customFields
1121
+ };
1122
+ }
1123
+ /**
1124
+ * Convert a WXR post to a normalized item
1125
+ */
1126
+ function wxrPostToNormalizedItem(post, attachmentMap) {
1127
+ const content = post.content ? gutenbergToPortableText(post.content) : [];
1128
+ const thumbnailId = post.meta.get("_thumbnail_id");
1129
+ const featuredImage = thumbnailId ? attachmentMap.get(String(thumbnailId)) : void 0;
1130
+ let customTaxonomies;
1131
+ if (post.customTaxonomies && post.customTaxonomies.size > 0) {
1132
+ const filtered = Object.fromEntries([...post.customTaxonomies].filter(([taxonomy]) => taxonomy !== "language"));
1133
+ if (Object.keys(filtered).length > 0) customTaxonomies = filtered;
1134
+ }
1135
+ return {
1136
+ sourceId: post.id || 0,
1137
+ postType: post.postType || "post",
1138
+ status: mapWpStatus(post.status),
1139
+ slug: post.postName || slugify(post.title || `post-${post.id || Date.now()}`),
1140
+ title: post.title || "Untitled",
1141
+ content,
1142
+ excerpt: post.excerpt,
1143
+ date: parseWxrDate(post.postDateGmt, post.pubDate, post.postDate) ?? /* @__PURE__ */ new Date(),
1144
+ modified: parseWxrDate(post.postModifiedGmt, void 0, post.postModified),
1145
+ author: post.creator,
1146
+ categories: post.categories,
1147
+ tags: post.tags,
1148
+ meta: Object.fromEntries(post.meta),
1149
+ featuredImage,
1150
+ parentId: post.postParent && post.postParent !== 0 ? post.postParent : void 0,
1151
+ menuOrder: post.menuOrder,
1152
+ customTaxonomies,
1153
+ locale: post.locale,
1154
+ translationGroup: post.translationGroup
1155
+ };
1156
+ }
1157
+ /**
1158
+ * WordPress uses "0000-00-00 00:00:00" as a sentinel for missing GMT dates
1159
+ * (e.g. unpublished drafts). This must be treated as absent.
1160
+ */
1161
+ const WXR_ZERO_DATE = "0000-00-00 00:00:00";
1162
+ /**
1163
+ * Parse a WXR date with the correct fallback chain:
1164
+ * 1. GMT date (always UTC, most reliable)
1165
+ * 2. pubDate (RFC 2822, includes timezone offset)
1166
+ * 3. Site-local date (MySQL datetime without timezone, imprecise but best available)
1167
+ *
1168
+ * Returns undefined when none of the inputs yield a valid date.
1169
+ * Callers that need a guaranteed Date should use `?? new Date()`.
1170
+ */
1171
+ function parseWxrDate(gmtDate, pubDate, localDate) {
1172
+ if (gmtDate && gmtDate !== WXR_ZERO_DATE) return /* @__PURE__ */ new Date(gmtDate.replace(" ", "T") + "Z");
1173
+ if (pubDate) {
1174
+ const d = new Date(pubDate);
1175
+ if (!isNaN(d.getTime())) return d;
1176
+ }
1177
+ if (localDate) {
1178
+ const d = new Date(localDate.replace(" ", "T"));
1179
+ if (!isNaN(d.getTime())) return d;
1180
+ }
1181
+ }
1182
+
1183
+ //#endregion
1184
+ //#region src/import/sources/wordpress-rest.ts
1185
+ /**
1186
+ * WordPress REST API probe
1187
+ *
1188
+ * Probes self-hosted WordPress sites to detect capabilities.
1189
+ * This source is probe-only - it tells users what's available
1190
+ * and suggests next steps (usually: upload WXR file).
1191
+ */
1192
+ const TRAILING_SLASHES = /\/+$/;
1193
+ const WP_JSON_SUFFIX = /\/wp-json\/?$/;
1194
+ const wordpressRestSource = {
1195
+ id: "wordpress-rest",
1196
+ name: "WordPress Site",
1197
+ description: "Connect to a self-hosted WordPress site",
1198
+ icon: "globe",
1199
+ requiresFile: false,
1200
+ canProbe: true,
1201
+ async probe(url) {
1202
+ try {
1203
+ const siteUrl = normalizeUrl(url);
1204
+ validateExternalUrl(siteUrl);
1205
+ const response = await ssrfSafeFetch(`${siteUrl}/wp-json/`, {
1206
+ headers: { Accept: "application/json" },
1207
+ signal: AbortSignal.timeout(1e4)
1208
+ });
1209
+ if (!response.ok) {
1210
+ if (!(await ssrfSafeFetch(`${siteUrl}/?rest_route=/`, {
1211
+ headers: { Accept: "application/json" },
1212
+ signal: AbortSignal.timeout(1e4)
1213
+ })).ok) return null;
1214
+ }
1215
+ const data = await response.json();
1216
+ if (!data.namespaces?.includes("wp/v2")) return null;
1217
+ const preview = await getPublicContentCounts(siteUrl);
1218
+ const hasAppPasswords = !!data.authentication?.["application-passwords"];
1219
+ return {
1220
+ sourceId: "wordpress-rest",
1221
+ confidence: "definite",
1222
+ detected: {
1223
+ platform: "wordpress",
1224
+ siteTitle: data.name,
1225
+ siteUrl: data.url || data.home || siteUrl
1226
+ },
1227
+ capabilities: {
1228
+ publicContent: true,
1229
+ privateContent: false,
1230
+ customPostTypes: false,
1231
+ allMeta: false,
1232
+ mediaStream: true
1233
+ },
1234
+ auth: hasAppPasswords ? {
1235
+ type: "password",
1236
+ instructions: "To import drafts and private content, create an Application Password in WordPress → Users → Your Profile → Application Passwords"
1237
+ } : void 0,
1238
+ preview,
1239
+ suggestedAction: {
1240
+ type: "upload",
1241
+ 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."
1242
+ }
1243
+ };
1244
+ } catch {
1245
+ return null;
1246
+ }
1247
+ },
1248
+ async analyze(_input, _context) {
1249
+ throw new Error("Direct REST API import not implemented. Please upload a WXR export file.");
1250
+ },
1251
+ async *fetchContent(_input, _options) {
1252
+ throw new Error("Direct REST API import not implemented. Please upload a WXR export file.");
1253
+ }
1254
+ };
1255
+ /**
1256
+ * Normalize a URL for API requests
1257
+ */
1258
+ function normalizeUrl(url) {
1259
+ let normalized = url.trim();
1260
+ if (!normalized.startsWith("http")) normalized = `https://${normalized}`;
1261
+ normalized = normalized.replace(TRAILING_SLASHES, "");
1262
+ normalized = normalized.replace(WP_JSON_SUFFIX, "");
1263
+ return normalized;
1264
+ }
1265
+ /**
1266
+ * Get public content counts from REST API
1267
+ */
1268
+ async function getPublicContentCounts(siteUrl) {
1269
+ const result = {};
1270
+ try {
1271
+ const [postsRes, pagesRes, mediaRes] = await Promise.allSettled([
1272
+ ssrfSafeFetch(`${siteUrl}/wp-json/wp/v2/posts?per_page=1`, { signal: AbortSignal.timeout(5e3) }),
1273
+ ssrfSafeFetch(`${siteUrl}/wp-json/wp/v2/pages?per_page=1`, { signal: AbortSignal.timeout(5e3) }),
1274
+ ssrfSafeFetch(`${siteUrl}/wp-json/wp/v2/media?per_page=1`, { signal: AbortSignal.timeout(5e3) })
1275
+ ]);
1276
+ if (postsRes.status === "fulfilled" && postsRes.value.ok) {
1277
+ const total = postsRes.value.headers.get("X-WP-Total");
1278
+ if (total) result.posts = parseInt(total, 10);
1279
+ }
1280
+ if (pagesRes.status === "fulfilled" && pagesRes.value.ok) {
1281
+ const total = pagesRes.value.headers.get("X-WP-Total");
1282
+ if (total) result.pages = parseInt(total, 10);
1283
+ }
1284
+ if (mediaRes.status === "fulfilled" && mediaRes.value.ok) {
1285
+ const total = mediaRes.value.headers.get("X-WP-Total");
1286
+ if (total) result.media = parseInt(total, 10);
1287
+ }
1288
+ } catch {}
1289
+ return result;
1290
+ }
1291
+
1292
+ //#endregion
1293
+ //#region src/import/sources/wordpress-plugin.ts
1294
+ /**
1295
+ * WordPress Plugin (EmDash Exporter) import source
1296
+ *
1297
+ * Connects to self-hosted WordPress sites running the EmDash Exporter plugin.
1298
+ * Provides full access to all content including drafts, custom post types, and ACF fields.
1299
+ */
1300
+ const wordpressPluginSource = {
1301
+ id: "wordpress-plugin",
1302
+ name: "WordPress (EmDash Exporter)",
1303
+ description: "Import from WordPress sites with the EmDash Exporter plugin installed",
1304
+ icon: "plug",
1305
+ requiresFile: false,
1306
+ canProbe: true,
1307
+ async probe(url) {
1308
+ try {
1309
+ const siteUrl = normalizeUrl$1(url);
1310
+ validateExternalUrl(siteUrl);
1311
+ const response = await ssrfSafeFetch(`${siteUrl}/wp-json/emdash/v1/probe`, {
1312
+ headers: { Accept: "application/json" },
1313
+ signal: AbortSignal.timeout(1e4)
1314
+ });
1315
+ if (!response.ok) return null;
1316
+ const data = await response.json();
1317
+ if (!data.emdash_exporter) return null;
1318
+ return {
1319
+ sourceId: "wordpress-plugin",
1320
+ confidence: "definite",
1321
+ detected: {
1322
+ platform: "wordpress",
1323
+ version: data.wordpress_version,
1324
+ siteTitle: data.site.title,
1325
+ siteUrl: data.site.url
1326
+ },
1327
+ capabilities: {
1328
+ publicContent: true,
1329
+ privateContent: true,
1330
+ customPostTypes: true,
1331
+ allMeta: true,
1332
+ mediaStream: true
1333
+ },
1334
+ auth: data.capabilities.application_passwords ? {
1335
+ type: "password",
1336
+ instructions: data.auth_instructions.instructions
1337
+ } : void 0,
1338
+ preview: {
1339
+ posts: data.post_types.find((p) => p.name === "post")?.count,
1340
+ pages: data.post_types.find((p) => p.name === "page")?.count,
1341
+ media: data.media_count
1342
+ },
1343
+ suggestedAction: { type: "proceed" },
1344
+ i18n: pluginI18nToDetection(data.i18n)
1345
+ };
1346
+ } catch {
1347
+ return null;
1348
+ }
1349
+ },
1350
+ async analyze(input, context) {
1351
+ const { siteUrl, headers } = getRequestConfig(input);
1352
+ const response = await ssrfSafeFetch(`${siteUrl}/wp-json/emdash/v1/analyze`, {
1353
+ headers,
1354
+ signal: AbortSignal.timeout(3e4)
1355
+ });
1356
+ if (!response.ok) {
1357
+ const body = await response.json().catch(() => void 0);
1358
+ const message = typeof body === "object" && body !== null && "message" in body && typeof body.message === "string" ? body.message : "";
1359
+ throw new Error(message || `Failed to analyze site: ${response.statusText}`);
1360
+ }
1361
+ const data = await response.json();
1362
+ const existingCollections = context.getExistingCollections ? await context.getExistingCollections() : /* @__PURE__ */ new Map();
1363
+ const postTypes = data.post_types.filter((pt) => pt.total > 0).map((pt) => {
1364
+ const suggestedCollection = mapPostTypeToCollection(pt.name);
1365
+ const existingCollection = existingCollections.get(suggestedCollection);
1366
+ const requiredFields = pt.supports && "thumbnail" in pt.supports ? [...BASE_REQUIRED_FIELDS, FEATURED_IMAGE_FIELD] : [...BASE_REQUIRED_FIELDS];
1367
+ return {
1368
+ name: pt.name,
1369
+ count: pt.total,
1370
+ suggestedCollection,
1371
+ requiredFields,
1372
+ schemaStatus: checkSchemaCompatibility(requiredFields, existingCollection)
1373
+ };
1374
+ });
1375
+ const attachments = [];
1376
+ if (data.attachments.count > 0) try {
1377
+ const mediaResponse = await ssrfSafeFetch(`${siteUrl}/wp-json/emdash/v1/media?per_page=500`, {
1378
+ headers,
1379
+ signal: AbortSignal.timeout(3e4)
1380
+ });
1381
+ if (mediaResponse.ok) {
1382
+ const mediaData = await mediaResponse.json();
1383
+ for (const item of mediaData.items) attachments.push({
1384
+ id: item.id,
1385
+ url: item.url,
1386
+ filename: item.filename,
1387
+ mimeType: item.mime_type,
1388
+ title: item.title,
1389
+ alt: item.alt,
1390
+ caption: item.caption,
1391
+ width: item.width,
1392
+ height: item.height
1393
+ });
1394
+ }
1395
+ } catch (e) {
1396
+ console.warn("Failed to fetch media list:", e);
1397
+ }
1398
+ const categoryTaxonomy = data.taxonomies.find((t) => t.name === "category");
1399
+ const tagTaxonomy = data.taxonomies.find((t) => t.name === "post_tag");
1400
+ return {
1401
+ sourceId: "wordpress-plugin",
1402
+ site: {
1403
+ title: data.site.title,
1404
+ url: data.site.url
1405
+ },
1406
+ postTypes,
1407
+ attachments: {
1408
+ count: data.attachments.count,
1409
+ items: attachments
1410
+ },
1411
+ categories: categoryTaxonomy?.term_count ?? 0,
1412
+ tags: tagTaxonomy?.term_count ?? 0,
1413
+ authors: data.authors.map((a) => ({
1414
+ id: a.id,
1415
+ login: a.login,
1416
+ email: a.email,
1417
+ displayName: a.display_name,
1418
+ postCount: a.post_count
1419
+ })),
1420
+ i18n: pluginI18nToDetection(data.i18n)
1421
+ };
1422
+ },
1423
+ async *fetchContent(input, options) {
1424
+ const { siteUrl, headers } = getRequestConfig(input);
1425
+ for (const postType of options.postTypes) {
1426
+ let page = 1;
1427
+ let totalPages = 1;
1428
+ let yielded = 0;
1429
+ while (page <= totalPages) {
1430
+ const response = await ssrfSafeFetch(`${siteUrl}/wp-json/emdash/v1/content?post_type=${postType}&status=${options.includeDrafts ? "any" : "publish"}&per_page=100&page=${page}`, {
1431
+ headers,
1432
+ signal: AbortSignal.timeout(6e4)
1433
+ });
1434
+ if (!response.ok) throw new Error(`Failed to fetch ${postType}: ${response.statusText}`);
1435
+ const data = await response.json();
1436
+ totalPages = data.pages;
1437
+ for (const post of data.items) {
1438
+ yield pluginPostToNormalizedItem(post);
1439
+ yielded++;
1440
+ if (options.limit && yielded >= options.limit) return;
1441
+ }
1442
+ page++;
1443
+ }
1444
+ }
1445
+ },
1446
+ async fetchMedia(url, _input) {
1447
+ validateExternalUrl(url);
1448
+ const response = await ssrfSafeFetch(url);
1449
+ if (!response.ok) throw new Error(`Failed to fetch media: ${response.statusText}`);
1450
+ return response.blob();
1451
+ }
1452
+ };
1453
+ /**
1454
+ * Convert plugin i18n info to the shared I18nDetection type.
1455
+ * Returns undefined when no multilingual plugin is detected.
1456
+ */
1457
+ function pluginI18nToDetection(i18n) {
1458
+ if (!i18n) return void 0;
1459
+ return {
1460
+ plugin: i18n.plugin,
1461
+ defaultLocale: i18n.default_locale,
1462
+ locales: i18n.locales
1463
+ };
1464
+ }
1465
+ /**
1466
+ * Get request configuration from input
1467
+ */
1468
+ function getRequestConfig(input) {
1469
+ if (input.type === "url") {
1470
+ const siteUrl = normalizeUrl$1(input.url);
1471
+ validateExternalUrl(siteUrl);
1472
+ const headers = { Accept: "application/json" };
1473
+ if (input.token) headers["Authorization"] = `Basic ${input.token}`;
1474
+ return {
1475
+ siteUrl,
1476
+ headers
1477
+ };
1478
+ }
1479
+ if (input.type === "oauth") {
1480
+ const oauthSiteUrl = normalizeUrl$1(input.url);
1481
+ validateExternalUrl(oauthSiteUrl);
1482
+ return {
1483
+ siteUrl: oauthSiteUrl,
1484
+ headers: {
1485
+ Accept: "application/json",
1486
+ Authorization: `Bearer ${input.accessToken}`
1487
+ }
1488
+ };
1489
+ }
1490
+ throw new Error("WordPress plugin source requires URL or OAuth input");
1491
+ }
1492
+ /**
1493
+ * Convert plugin post to normalized item
1494
+ */
1495
+ function pluginPostToNormalizedItem(post) {
1496
+ const content = post.content ? gutenbergToPortableText(post.content) : [];
1497
+ const categories = post.taxonomies?.category?.map((c) => c.slug) ?? post.taxonomies?.categories?.map((c) => c.slug) ?? [];
1498
+ const tags = post.taxonomies?.post_tag?.map((t) => t.slug) ?? post.taxonomies?.tags?.map((t) => t.slug) ?? [];
1499
+ const meta = { ...post.meta };
1500
+ if (post.acf) meta._acf = post.acf;
1501
+ if (post.yoast) meta._yoast = post.yoast;
1502
+ if (post.rankmath) meta._rankmath = post.rankmath;
1503
+ return {
1504
+ sourceId: post.id,
1505
+ postType: post.post_type,
1506
+ status: mapWpStatus(post.status),
1507
+ slug: post.slug,
1508
+ title: post.title,
1509
+ content,
1510
+ excerpt: post.excerpt || void 0,
1511
+ date: new Date(post.date_gmt || post.date),
1512
+ modified: post.modified_gmt ? new Date(post.modified_gmt) : new Date(post.modified),
1513
+ author: post.author?.login,
1514
+ categories,
1515
+ tags,
1516
+ meta,
1517
+ featuredImage: post.featured_image?.url,
1518
+ locale: post.locale,
1519
+ translationGroup: post.translation_group
1520
+ };
1521
+ }
1522
+
1523
+ //#endregion
1524
+ //#region src/import/index.ts
1525
+ registerSource(wordpressPluginSource);
1526
+ registerSource(wordpressRestSource);
1527
+ registerSource(wxrSource);
1528
+
1529
+ //#endregion
1530
+ export { getAllSources as a, getUrlSources as c, importReusableBlocksAsSections as d, parseWxr as f, clearSources as i, probeUrl as l, parseWxrDate as n, getFileSources as o, parseWxrString as p, wxrSource as r, getSource as s, wordpressRestSource as t, registerSource as u };
1531
+ //# sourceMappingURL=import-CNfLOgDE.mjs.map