emdash 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1436) hide show
  1. package/dist/action-token-SK8zyN7w.mjs +26 -0
  2. package/dist/action-token-SK8zyN7w.mjs.map +1 -0
  3. package/dist/activation-Dim4YMM7.mjs +387 -0
  4. package/dist/activation-Dim4YMM7.mjs.map +1 -0
  5. package/dist/adapters-F_xorvWv.d.mts +173 -0
  6. package/dist/adapters-F_xorvWv.d.mts.map +1 -0
  7. package/dist/allowed-origins-CEug-p0t.mjs +116 -0
  8. package/dist/allowed-origins-CEug-p0t.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +47 -45
  11. package/dist/api/route-utils.mjs.map +1 -1
  12. package/dist/api/schemas/index.d.mts +1 -1
  13. package/dist/api/schemas/index.mjs +9 -9
  14. package/dist/api-D-7BNHoz.mjs +5025 -0
  15. package/dist/api-D-7BNHoz.mjs.map +1 -0
  16. package/dist/api-tokens-Bx38ZCQp.mjs +173 -0
  17. package/dist/api-tokens-Bx38ZCQp.mjs.map +1 -0
  18. package/dist/apply-T7ATgzCh.mjs +1702 -0
  19. package/dist/apply-T7ATgzCh.mjs.map +1 -0
  20. package/dist/approvals-D-m6wvGl.mjs +460 -0
  21. package/dist/approvals-D-m6wvGl.mjs.map +1 -0
  22. package/dist/artifact-fetch-DIh7iyOV.mjs +659 -0
  23. package/dist/artifact-fetch-DIh7iyOV.mjs.map +1 -0
  24. package/dist/artifacts-htGyfCSt.mjs +307 -0
  25. package/dist/artifacts-htGyfCSt.mjs.map +1 -0
  26. package/dist/astro/index.d.mts +14 -14
  27. package/dist/astro/index.d.mts.map +1 -1
  28. package/dist/astro/index.mjs +109 -18
  29. package/dist/astro/index.mjs.map +1 -1
  30. package/dist/astro/middleware/auth.d.mts +12 -12
  31. package/dist/astro/middleware/auth.d.mts.map +1 -1
  32. package/dist/astro/middleware/auth.mjs +12 -11
  33. package/dist/astro/middleware/auth.mjs.map +1 -1
  34. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  35. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  36. package/dist/astro/middleware/redirect.mjs +60 -40
  37. package/dist/astro/middleware/redirect.mjs.map +1 -1
  38. package/dist/astro/middleware/request-context.mjs +49 -15
  39. package/dist/astro/middleware/request-context.mjs.map +1 -1
  40. package/dist/astro/middleware/setup.mjs +1 -1
  41. package/dist/astro/middleware.d.mts +12 -12
  42. package/dist/astro/middleware.d.mts.map +1 -1
  43. package/dist/astro/middleware.mjs +116 -408
  44. package/dist/astro/middleware.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
  46. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
  47. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  48. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  49. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
  50. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +16 -16
  51. package/dist/astro/routes/api/admin/byline-fields/index.mjs +16 -16
  52. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +16 -16
  53. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +22 -21
  54. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  55. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +22 -21
  56. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  57. package/dist/astro/routes/api/admin/bylines/index.mjs +22 -21
  58. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
  60. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
  61. package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
  62. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
  63. package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
  64. package/dist/astro/routes/api/admin/core-update.mjs +7 -7
  65. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  66. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  67. package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
  68. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +21 -21
  69. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +21 -21
  70. package/dist/astro/routes/api/admin/media-usage/progress.mjs +23 -22
  71. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  72. package/dist/astro/routes/api/admin/media-usage/repair.mjs +29 -28
  73. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  74. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +21 -21
  75. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +21 -21
  76. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  77. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  78. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  79. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  80. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +71 -69
  81. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  83. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +70 -68
  84. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  85. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +70 -69
  86. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  87. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +79 -78
  88. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  89. package/dist/astro/routes/api/admin/plugins/index.mjs +71 -69
  90. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +7 -7
  92. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +70 -68
  93. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +78 -77
  95. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +70 -68
  97. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  98. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +70 -69
  99. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  100. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +80 -79
  101. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +10 -10
  103. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  104. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +72 -71
  105. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  106. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  107. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +71 -69
  108. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  109. package/dist/astro/routes/api/admin/plugins/updates.mjs +70 -68
  110. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  111. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +5 -5
  112. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +70 -68
  113. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  114. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +7 -7
  115. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +70 -68
  116. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  117. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  118. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +38 -37
  119. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
  120. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +38 -37
  121. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
  122. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +40 -39
  123. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +40 -39
  125. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
  126. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +40 -39
  127. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
  128. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +41 -40
  129. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
  130. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +41 -40
  131. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +40 -39
  133. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
  134. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +41 -40
  135. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
  136. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +42 -41
  137. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
  138. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +40 -39
  139. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
  140. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +40 -39
  141. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
  142. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +42 -41
  143. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
  144. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +40 -39
  145. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
  146. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +42 -41
  147. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
  148. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +40 -39
  149. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
  150. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +40 -39
  151. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
  152. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +42 -41
  153. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
  154. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +40 -39
  155. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
  156. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +40 -39
  157. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
  158. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +42 -41
  159. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
  160. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
  161. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  162. package/dist/astro/routes/api/admin/users/_id_/index.mjs +14 -14
  163. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  164. package/dist/astro/routes/api/admin/users/index.mjs +14 -14
  165. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  166. package/dist/astro/routes/api/auth/handover.mjs +6 -6
  167. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  168. package/dist/astro/routes/api/auth/invite/complete.mjs +19 -19
  169. package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
  170. package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
  171. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  172. package/dist/astro/routes/api/auth/magic-link/send.mjs +18 -18
  173. package/dist/astro/routes/api/auth/magic-link/verify.mjs +15 -15
  174. package/dist/astro/routes/api/auth/me.mjs +15 -15
  175. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  176. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +8 -8
  177. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  178. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -14
  179. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  180. package/dist/astro/routes/api/auth/passkey/options.mjs +19 -19
  181. package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
  182. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
  183. package/dist/astro/routes/api/auth/passkey/verify.mjs +19 -19
  184. package/dist/astro/routes/api/auth/signup/complete.mjs +19 -19
  185. package/dist/astro/routes/api/auth/signup/request.mjs +17 -17
  186. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  187. package/dist/astro/routes/api/calendar.mjs +15 -15
  188. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
  189. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
  190. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  191. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
  192. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +18 -17
  193. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  194. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +7 -10
  195. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
  196. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +20 -17
  197. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  198. package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts.map +1 -1
  199. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +7 -6
  200. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -1
  201. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
  202. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +30 -29
  203. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  204. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
  205. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -17
  206. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  207. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +34 -33
  208. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  209. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -33
  210. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  211. package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts.map +1 -1
  212. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +7 -6
  213. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
  214. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  215. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
  216. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +19 -18
  217. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  218. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
  219. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +30 -25
  220. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  221. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  222. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
  223. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +18 -17
  224. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  225. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  226. package/dist/astro/routes/api/content/_collection_/_id_.mjs +27 -20
  227. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  228. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  229. package/dist/astro/routes/api/content/_collection_/index.mjs +18 -21
  230. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  231. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
  232. package/dist/astro/routes/api/dashboard.d.mts.map +1 -1
  233. package/dist/astro/routes/api/dashboard.mjs +17 -11
  234. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  235. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  236. package/dist/astro/routes/api/dev/scheduled-tasks.d.mts +12 -0
  237. package/dist/astro/routes/api/dev/scheduled-tasks.d.mts.map +1 -0
  238. package/dist/astro/routes/api/dev/scheduled-tasks.mjs +140 -0
  239. package/dist/astro/routes/api/dev/scheduled-tasks.mjs.map +1 -0
  240. package/dist/astro/routes/api/health.mjs +6 -6
  241. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  242. package/dist/astro/routes/api/import/probe.mjs +24 -22
  243. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  244. package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -1
  245. package/dist/astro/routes/api/import/wordpress/analyze.mjs +7 -20
  246. package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
  247. package/dist/astro/routes/api/import/wordpress/execute.d.mts +15 -14
  248. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  249. package/dist/astro/routes/api/import/wordpress/execute.mjs +28 -29
  250. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  251. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  252. package/dist/astro/routes/api/import/wordpress/media.mjs +17 -17
  253. package/dist/astro/routes/api/import/wordpress/prepare.mjs +19 -17
  254. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  255. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  256. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +27 -26
  257. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  258. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  259. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -22
  260. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  261. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  262. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  263. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +55 -34
  264. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  265. package/dist/astro/routes/api/manifest.mjs +6 -6
  266. package/dist/astro/routes/api/mcp.mjs +135 -101
  267. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  268. package/dist/astro/routes/api/media/_id_/confirm.mjs +17 -17
  269. package/dist/astro/routes/api/media/_id_/replace.mjs +15 -15
  270. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -8
  271. package/dist/astro/routes/api/media/_id_/usage.mjs +31 -30
  272. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  273. package/dist/astro/routes/api/media/_id_.mjs +29 -28
  274. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  275. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  276. package/dist/astro/routes/api/media/file/_...key_.mjs +10 -10
  277. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
  278. package/dist/astro/routes/api/media/folders/index.mjs +16 -16
  279. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  280. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  281. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  282. package/dist/astro/routes/api/media/upload-url.mjs +17 -17
  283. package/dist/astro/routes/api/media.mjs +30 -29
  284. package/dist/astro/routes/api/media.mjs.map +1 -1
  285. package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
  286. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +19 -18
  287. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  288. package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
  289. package/dist/astro/routes/api/menus/_name_/items.mjs +18 -17
  290. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  291. package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
  292. package/dist/astro/routes/api/menus/_name_/reorder.mjs +18 -17
  293. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  294. package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
  295. package/dist/astro/routes/api/menus/_name_/translations.mjs +18 -17
  296. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  297. package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
  298. package/dist/astro/routes/api/menus/_name_.mjs +19 -18
  299. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  300. package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
  301. package/dist/astro/routes/api/menus/index.mjs +18 -17
  302. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  303. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  304. package/dist/astro/routes/api/oauth/device/authorize.mjs +8 -8
  305. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  306. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  307. package/dist/astro/routes/api/oauth/register.mjs +7 -7
  308. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  309. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  310. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  311. package/dist/astro/routes/api/openapi.json.mjs +20 -20
  312. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
  313. package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
  314. package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
  315. package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -1
  316. package/dist/astro/routes/api/redirects/_id_.mjs +32 -23
  317. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  318. package/dist/astro/routes/api/redirects/index.d.mts.map +1 -1
  319. package/dist/astro/routes/api/redirects/index.mjs +24 -21
  320. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  321. package/dist/astro/routes/api/relations/_id_/index.mjs +34 -33
  322. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  323. package/dist/astro/routes/api/relations/index.mjs +34 -33
  324. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  325. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  326. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +16 -16
  327. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +70 -68
  328. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  329. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +70 -68
  330. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  331. package/dist/astro/routes/api/schema/block-types/index.mjs +70 -68
  332. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  333. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +70 -68
  334. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  335. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +70 -68
  336. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  337. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +70 -68
  338. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  339. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +70 -68
  340. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  341. package/dist/astro/routes/api/schema/collections/index.mjs +70 -68
  342. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  343. package/dist/astro/routes/api/schema/collections/reorder.mjs +70 -68
  344. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  345. package/dist/astro/routes/api/schema/index.mjs +16 -15
  346. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  347. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +70 -68
  348. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  349. package/dist/astro/routes/api/schema/orphans/index.mjs +70 -68
  350. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  351. package/dist/astro/routes/api/search/enable.mjs +19 -18
  352. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  353. package/dist/astro/routes/api/search/index.mjs +18 -17
  354. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  355. package/dist/astro/routes/api/search/rebuild.mjs +19 -18
  356. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  357. package/dist/astro/routes/api/search/stats.mjs +9 -8
  358. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  359. package/dist/astro/routes/api/search/suggest.mjs +18 -17
  360. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  361. package/dist/astro/routes/api/sections/_slug_.mjs +18 -17
  362. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  363. package/dist/astro/routes/api/sections/index.mjs +18 -17
  364. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  365. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  366. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  367. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  368. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  369. package/dist/astro/routes/api/settings/domain-notify.mjs +9 -9
  370. package/dist/astro/routes/api/settings/domain.d.mts.map +1 -1
  371. package/dist/astro/routes/api/settings/domain.mjs +17 -14
  372. package/dist/astro/routes/api/settings/domain.mjs.map +1 -1
  373. package/dist/astro/routes/api/settings/email.mjs +6 -6
  374. package/dist/astro/routes/api/settings.d.mts.map +1 -1
  375. package/dist/astro/routes/api/settings.mjs +23 -20
  376. package/dist/astro/routes/api/settings.mjs.map +1 -1
  377. package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -1
  378. package/dist/astro/routes/api/setup/admin-verify.mjs +25 -21
  379. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  380. package/dist/astro/routes/api/setup/admin.mjs +18 -18
  381. package/dist/astro/routes/api/setup/dev-bypass.mjs +42 -40
  382. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  383. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  384. package/dist/astro/routes/api/setup/index.mjs +48 -46
  385. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  386. package/dist/astro/routes/api/setup/status.mjs +6 -6
  387. package/dist/astro/routes/api/site/domain-proof.mjs +11 -9
  388. package/dist/astro/routes/api/site/domain-proof.mjs.map +1 -1
  389. package/dist/astro/routes/api/snapshot.mjs +8 -8
  390. package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
  391. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -21
  392. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  393. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
  394. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -21
  395. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  396. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
  397. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +24 -22
  398. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  399. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
  400. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -21
  401. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  402. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +21 -20
  403. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  404. package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
  405. package/dist/astro/routes/api/taxonomies/_name_.mjs +24 -22
  406. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  407. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +34 -33
  408. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  409. package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
  410. package/dist/astro/routes/api/taxonomies/index.mjs +23 -21
  411. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  412. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  413. package/dist/astro/routes/api/typegen.mjs +6 -6
  414. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  415. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +18 -18
  416. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  417. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  418. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  419. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  420. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
  421. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +17 -16
  422. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  423. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
  424. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +21 -19
  425. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  426. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
  427. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +20 -18
  428. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  429. package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
  430. package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -8
  431. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  432. package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
  433. package/dist/astro/routes/api/widget-areas/index.mjs +20 -18
  434. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  435. package/dist/astro/routes/api/widget-components.mjs +5 -5
  436. package/dist/astro/routes/robots.txt.d.mts.map +1 -1
  437. package/dist/astro/routes/robots.txt.mjs +38 -5
  438. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  439. package/dist/astro/routes/sitemap-_collection_.xml.mjs +13 -8
  440. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  441. package/dist/astro/routes/sitemap.xml.mjs +11 -6
  442. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  443. package/dist/astro/types.d.mts +19 -17
  444. package/dist/astro/types.d.mts.map +1 -1
  445. package/dist/audit-_gieLVGU.mjs +127 -0
  446. package/dist/audit-_gieLVGU.mjs.map +1 -0
  447. package/dist/auth/providers/github.d.mts +1 -1
  448. package/dist/auth/providers/google.d.mts +1 -1
  449. package/dist/auth/providers/microsoft.d.mts +1 -1
  450. package/dist/authoritative-records-CQlB3JzE.mjs +5183 -0
  451. package/dist/authoritative-records-CQlB3JzE.mjs.map +1 -0
  452. package/dist/authorize-DPFBGbE6.mjs +74 -0
  453. package/dist/authorize-DPFBGbE6.mjs.map +1 -0
  454. package/dist/backup-3FgVxiDJ.mjs +246 -0
  455. package/dist/backup-3FgVxiDJ.mjs.map +1 -0
  456. package/dist/block-types-CYcG56JB.mjs +132 -0
  457. package/dist/block-types-CYcG56JB.mjs.map +1 -0
  458. package/dist/block-values-gCX4HBSl.mjs +215 -0
  459. package/dist/block-values-gCX4HBSl.mjs.map +1 -0
  460. package/dist/byline-BR1qhyiw.mjs +909 -0
  461. package/dist/byline-BR1qhyiw.mjs.map +1 -0
  462. package/dist/byline-fields-4ClDC88c.mjs +123 -0
  463. package/dist/byline-fields-4ClDC88c.mjs.map +1 -0
  464. package/dist/byline-fields-BLXZnX7N.mjs +280 -0
  465. package/dist/byline-fields-BLXZnX7N.mjs.map +1 -0
  466. package/dist/bylines-CVOvRUL7.mjs +234 -0
  467. package/dist/bylines-CVOvRUL7.mjs.map +1 -0
  468. package/dist/bylines-DxOs9B7z.mjs +150 -0
  469. package/dist/bylines-DxOs9B7z.mjs.map +1 -0
  470. package/dist/cache-CEU9wo_h.mjs +151 -0
  471. package/dist/cache-CEU9wo_h.mjs.map +1 -0
  472. package/dist/canonical-BudtH-Fx.mjs +174 -0
  473. package/dist/canonical-BudtH-Fx.mjs.map +1 -0
  474. package/dist/capture-triggers-CT6dK9zd.mjs +362 -0
  475. package/dist/capture-triggers-CT6dK9zd.mjs.map +1 -0
  476. package/dist/challenge-store-C17BYx2-.mjs +51 -0
  477. package/dist/challenge-store-C17BYx2-.mjs.map +1 -0
  478. package/dist/checksum-CEqvfxGX.mjs +162 -0
  479. package/dist/checksum-CEqvfxGX.mjs.map +1 -0
  480. package/dist/chunks-xC4UD5-S.mjs +25 -0
  481. package/dist/chunks-xC4UD5-S.mjs.map +1 -0
  482. package/dist/cli/index.mjs +127 -113
  483. package/dist/cli/index.mjs.map +1 -1
  484. package/dist/client/cf-access.d.mts +1 -1
  485. package/dist/client/index.d.mts +47 -47
  486. package/dist/client/index.d.mts.map +1 -1
  487. package/dist/client/index.mjs +12 -10
  488. package/dist/client/index.mjs.map +1 -1
  489. package/dist/collection-slugs-cache-e09QeJQt.mjs +85 -0
  490. package/dist/collection-slugs-cache-e09QeJQt.mjs.map +1 -0
  491. package/dist/comment-UvIWDKcW.mjs +325 -0
  492. package/dist/comment-UvIWDKcW.mjs.map +1 -0
  493. package/dist/comment-reaction-dGp6_FRo.mjs +85 -0
  494. package/dist/comment-reaction-dGp6_FRo.mjs.map +1 -0
  495. package/dist/comments-pej-_BUO.mjs +195 -0
  496. package/dist/comments-pej-_BUO.mjs.map +1 -0
  497. package/dist/comments-yiRFx3w5.mjs +99 -0
  498. package/dist/comments-yiRFx3w5.mjs.map +1 -0
  499. package/dist/components-Brp__9xo.mjs +112 -0
  500. package/dist/components-Brp__9xo.mjs.map +1 -0
  501. package/dist/config-Bsm_u_oE.d.mts +6799 -0
  502. package/dist/config-Bsm_u_oE.d.mts.map +1 -0
  503. package/dist/config-CFMojMFK.d.mts +39 -0
  504. package/dist/config-CFMojMFK.d.mts.map +1 -0
  505. package/dist/config-DBU6iUQB.mjs +228 -0
  506. package/dist/config-DBU6iUQB.mjs.map +1 -0
  507. package/dist/connection-BtEN_lP9.mjs +36 -0
  508. package/dist/connection-BtEN_lP9.mjs.map +1 -0
  509. package/dist/content-DQSRZTVw.mjs +2075 -0
  510. package/dist/content-DQSRZTVw.mjs.map +1 -0
  511. package/dist/content-list-query-CYKcY6Vi.d.mts +26 -0
  512. package/dist/content-list-query-CYKcY6Vi.d.mts.map +1 -0
  513. package/dist/content-repair-DNh5--x5.mjs +442 -0
  514. package/dist/content-repair-DNh5--x5.mjs.map +1 -0
  515. package/dist/context-BYptmCN0.mjs +2090 -0
  516. package/dist/context-BYptmCN0.mjs.map +1 -0
  517. package/dist/credits-B9iORdWB.mjs +110 -0
  518. package/dist/credits-B9iORdWB.mjs.map +1 -0
  519. package/dist/cron-D7obTIfk.mjs +306 -0
  520. package/dist/cron-D7obTIfk.mjs.map +1 -0
  521. package/dist/dashboard-D0jcgBD7.mjs +167 -0
  522. package/dist/dashboard-D0jcgBD7.mjs.map +1 -0
  523. package/dist/database/migration-lock.d.mts +17 -4
  524. package/dist/database/migration-lock.d.mts.map +1 -1
  525. package/dist/database/migration-lock.mjs +32 -5
  526. package/dist/database/migration-lock.mjs.map +1 -1
  527. package/dist/db/index.d.mts +3 -3
  528. package/dist/db/index.mjs +1 -1
  529. package/dist/db/libsql-migrations.d.mts +1 -1
  530. package/dist/db/libsql-migrations.mjs +4 -4
  531. package/dist/db/libsql.d.mts +1 -1
  532. package/dist/db/postgres-migrations.d.mts +1 -1
  533. package/dist/db/postgres-migrations.mjs +4 -4
  534. package/dist/db/postgres.d.mts +1 -1
  535. package/dist/db/sqlite-migrations.d.mts +1 -1
  536. package/dist/db/sqlite-migrations.mjs +4 -4
  537. package/dist/db/sqlite.d.mts +1 -1
  538. package/dist/db/sqlite.mjs +1 -1
  539. package/dist/default-C0W-PhAp.mjs +81 -0
  540. package/dist/default-C0W-PhAp.mjs.map +1 -0
  541. package/dist/deferred-tasks-ZvUECSzI.d.mts +9 -0
  542. package/dist/deferred-tasks-ZvUECSzI.d.mts.map +1 -0
  543. package/dist/dev-typegen-EBni_pOQ.mjs +29 -0
  544. package/dist/dev-typegen-EBni_pOQ.mjs.map +1 -0
  545. package/dist/device-flow-BkFKBoAn.mjs +521 -0
  546. package/dist/device-flow-BkFKBoAn.mjs.map +1 -0
  547. package/dist/digest-DJ1tHCgy.mjs +194 -0
  548. package/dist/digest-DJ1tHCgy.mjs.map +1 -0
  549. package/dist/direct-executor-Cbxzg4qe.mjs +117 -0
  550. package/dist/direct-executor-Cbxzg4qe.mjs.map +1 -0
  551. package/dist/email-console-FFVJWb9N.mjs +50 -0
  552. package/dist/email-console-FFVJWb9N.mjs.map +1 -0
  553. package/dist/email-locale-BJ8DjTzZ.mjs +25 -0
  554. package/dist/email-locale-BJ8DjTzZ.mjs.map +1 -0
  555. package/dist/emdash-runtime-DVi7vtXC.mjs +4379 -0
  556. package/dist/emdash-runtime-DVi7vtXC.mjs.map +1 -0
  557. package/dist/entry-lock-C7VX0NGK.d.mts +4568 -0
  558. package/dist/entry-lock-C7VX0NGK.d.mts.map +1 -0
  559. package/dist/entry-lock-DLxCffFW.mjs +163 -0
  560. package/dist/entry-lock-DLxCffFW.mjs.map +1 -0
  561. package/dist/entry-lock-Df6-XhIu.mjs +1211 -0
  562. package/dist/entry-lock-Df6-XhIu.mjs.map +1 -0
  563. package/dist/env-types-C3FCVBWe.mjs +38 -0
  564. package/dist/env-types-C3FCVBWe.mjs.map +1 -0
  565. package/dist/error-CVWeIOku.mjs +90 -0
  566. package/dist/error-CVWeIOku.mjs.map +1 -0
  567. package/dist/errors-B4f4It-2.mjs +120 -0
  568. package/dist/errors-B4f4It-2.mjs.map +1 -0
  569. package/dist/errors-BOYNdIo3.mjs +479 -0
  570. package/dist/errors-BOYNdIo3.mjs.map +1 -0
  571. package/dist/escape-lsNq38PP.mjs +9 -0
  572. package/dist/escape-lsNq38PP.mjs.map +1 -0
  573. package/dist/fence-C3MUitUN.mjs +162 -0
  574. package/dist/fence-C3MUitUN.mjs.map +1 -0
  575. package/dist/field-defs-cache-Dez5iWJJ.mjs +77 -0
  576. package/dist/field-defs-cache-Dez5iWJJ.mjs.map +1 -0
  577. package/dist/field-map-Bft9LKak.mjs +83 -0
  578. package/dist/field-map-Bft9LKak.mjs.map +1 -0
  579. package/dist/fts-manager-Beg3e4bI.mjs +443 -0
  580. package/dist/fts-manager-Beg3e4bI.mjs.map +1 -0
  581. package/dist/gc-ByyAYiYE.mjs +75 -0
  582. package/dist/gc-ByyAYiYE.mjs.map +1 -0
  583. package/dist/hash-BJaeek87.mjs +37 -0
  584. package/dist/hash-BJaeek87.mjs.map +1 -0
  585. package/dist/hook-result-BrdLyOdI.d.mts +31 -0
  586. package/dist/hook-result-BrdLyOdI.d.mts.map +1 -0
  587. package/dist/hreflang-C8Jb-hrf.mjs +105 -0
  588. package/dist/hreflang-C8Jb-hrf.mjs.map +1 -0
  589. package/dist/hreflang-CY_F5OjF.d.mts +50 -0
  590. package/dist/hreflang-CY_F5OjF.d.mts.map +1 -0
  591. package/dist/http-route-dispatch-CyeW6iPv.mjs +342 -0
  592. package/dist/http-route-dispatch-CyeW6iPv.mjs.map +1 -0
  593. package/dist/identity-Cael5uTT.mjs +35 -0
  594. package/dist/identity-Cael5uTT.mjs.map +1 -0
  595. package/dist/import-BUXjdZUn.mjs +2126 -0
  596. package/dist/import-BUXjdZUn.mjs.map +1 -0
  597. package/dist/index-BB9sVisO.d.mts +623 -0
  598. package/dist/index-BB9sVisO.d.mts.map +1 -0
  599. package/dist/index.d.mts +23 -23
  600. package/dist/index.mjs +96 -94
  601. package/dist/install-finalization-3JX5qQEA.mjs +58 -0
  602. package/dist/install-finalization-3JX5qQEA.mjs.map +1 -0
  603. package/dist/json-recordset-BUjxhr77.mjs +12 -0
  604. package/dist/json-recordset-BUjxhr77.mjs.map +1 -0
  605. package/dist/json-schema-v_D_pPNG.mjs +15 -0
  606. package/dist/json-schema-v_D_pPNG.mjs.map +1 -0
  607. package/dist/keys-CifIkT0N.mjs +61 -0
  608. package/dist/keys-CifIkT0N.mjs.map +1 -0
  609. package/dist/kinds-B_Qcl5pz.mjs +974 -0
  610. package/dist/kinds-B_Qcl5pz.mjs.map +1 -0
  611. package/dist/lifecycle-7vUJeFRe.mjs +25 -0
  612. package/dist/lifecycle-7vUJeFRe.mjs.map +1 -0
  613. package/dist/load-CdAG9wz-.mjs +28 -0
  614. package/dist/load-CdAG9wz-.mjs.map +1 -0
  615. package/dist/loader-CswroUbe.mjs +1380 -0
  616. package/dist/loader-CswroUbe.mjs.map +1 -0
  617. package/dist/loops-uA4iTOzd.mjs +205 -0
  618. package/dist/loops-uA4iTOzd.mjs.map +1 -0
  619. package/dist/manifest-builder-B8zjuH3f.mjs +189 -0
  620. package/dist/manifest-builder-B8zjuH3f.mjs.map +1 -0
  621. package/dist/manifest-schema-DNb4XmTS.mjs +497 -0
  622. package/dist/manifest-schema-DNb4XmTS.mjs.map +1 -0
  623. package/dist/marketplace-CqbgeIa7.mjs +257 -0
  624. package/dist/marketplace-CqbgeIa7.mjs.map +1 -0
  625. package/dist/media/index.d.mts +1 -1
  626. package/dist/media/local-runtime.d.mts +14 -14
  627. package/dist/media/local-runtime.mjs +10 -5
  628. package/dist/media/local-runtime.mjs.map +1 -1
  629. package/dist/media--dJRU6i2.mjs +294 -0
  630. package/dist/media--dJRU6i2.mjs.map +1 -0
  631. package/dist/media-1WC65OCB.mjs +416 -0
  632. package/dist/media-1WC65OCB.mjs.map +1 -0
  633. package/dist/media-Bws9f18T.mjs +373 -0
  634. package/dist/media-Bws9f18T.mjs.map +1 -0
  635. package/dist/media-allowlist-BJB7MFx6.mjs +45 -0
  636. package/dist/media-allowlist-BJB7MFx6.mjs.map +1 -0
  637. package/dist/media-folders-Dn3C16B8.mjs +210 -0
  638. package/dist/media-folders-Dn3C16B8.mjs.map +1 -0
  639. package/dist/media-url-BQgKvpQ5.mjs +43 -0
  640. package/dist/media-url-BQgKvpQ5.mjs.map +1 -0
  641. package/dist/media-usage-CF0WVcLO.mjs +282 -0
  642. package/dist/media-usage-CF0WVcLO.mjs.map +1 -0
  643. package/dist/media-usage-activation-C9HwVw5w.mjs +78 -0
  644. package/dist/media-usage-activation-C9HwVw5w.mjs.map +1 -0
  645. package/dist/media-usage-work-CkLa5-nc.mjs +1036 -0
  646. package/dist/media-usage-work-CkLa5-nc.mjs.map +1 -0
  647. package/dist/media-usage-work-m3AWTmmC.mjs +151 -0
  648. package/dist/media-usage-work-m3AWTmmC.mjs.map +1 -0
  649. package/dist/menus-BCVSSp1z.mjs +753 -0
  650. package/dist/menus-BCVSSp1z.mjs.map +1 -0
  651. package/dist/menus-BSzwObhV.mjs +92 -0
  652. package/dist/menus-BSzwObhV.mjs.map +1 -0
  653. package/dist/menus-Cl4kwdt7.mjs +3721 -0
  654. package/dist/menus-Cl4kwdt7.mjs.map +1 -0
  655. package/dist/migrations/index.d.mts +1 -1
  656. package/dist/migrations/index.d.mts.map +1 -1
  657. package/dist/migrations/index.mjs +3 -3
  658. package/dist/mode-C-D3qICy.mjs +23 -0
  659. package/dist/mode-C-D3qICy.mjs.map +1 -0
  660. package/dist/node-sqlite-compat-CrKzRr0J.mjs +63 -0
  661. package/dist/node-sqlite-compat-CrKzRr0J.mjs.map +1 -0
  662. package/dist/oauth-authorization-TpEJrYB7.mjs +274 -0
  663. package/dist/oauth-authorization-TpEJrYB7.mjs.map +1 -0
  664. package/dist/oauth-clients-BT0Pg-MO.mjs +266 -0
  665. package/dist/oauth-clients-BT0Pg-MO.mjs.map +1 -0
  666. package/dist/oauth-state-store-CHMn_mwc.mjs +50 -0
  667. package/dist/oauth-state-store-CHMn_mwc.mjs.map +1 -0
  668. package/dist/oauth-user-lookup-BDgF6IVG.mjs +26 -0
  669. package/dist/oauth-user-lookup-BDgF6IVG.mjs.map +1 -0
  670. package/dist/object-cache/memory.d.mts +1 -1
  671. package/dist/options-DJWaq3Ie.d.mts +81 -0
  672. package/dist/options-DJWaq3Ie.d.mts.map +1 -0
  673. package/dist/ownership-MiyA7qKO.mjs +12 -0
  674. package/dist/ownership-MiyA7qKO.mjs.map +1 -0
  675. package/dist/page/index.d.mts +2 -2
  676. package/dist/page/index.mjs +9 -4
  677. package/dist/page/index.mjs.map +1 -1
  678. package/dist/parse-CWHOFc6z.d.mts +176 -0
  679. package/dist/parse-CWHOFc6z.d.mts.map +1 -0
  680. package/dist/parse-DgQ2NABT.mjs +81 -0
  681. package/dist/parse-DgQ2NABT.mjs.map +1 -0
  682. package/dist/passkey-config-D0kdzEao.mjs +46 -0
  683. package/dist/passkey-config-D0kdzEao.mjs.map +1 -0
  684. package/dist/paths-biDzFTY2.mjs +77 -0
  685. package/dist/paths-biDzFTY2.mjs.map +1 -0
  686. package/dist/placeholder-D41vk11_.d.mts +306 -0
  687. package/dist/placeholder-D41vk11_.d.mts.map +1 -0
  688. package/dist/plan-CCoqxNoU.mjs +135 -0
  689. package/dist/plan-CCoqxNoU.mjs.map +1 -0
  690. package/dist/plugin-test-runtime.d.mts +14 -14
  691. package/dist/plugin-test-runtime.mjs +109 -107
  692. package/dist/plugin-tool-name-DDUgN_0p.mjs +27 -0
  693. package/dist/plugin-tool-name-DDUgN_0p.mjs.map +1 -0
  694. package/dist/plugin-types.d.mts +2 -2
  695. package/dist/plugin-utils.d.mts +12 -12
  696. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  697. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  698. package/dist/plugins/adapt-sandbox-entry.mjs +9 -8
  699. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  700. package/dist/plugins/host.d.mts +5 -5
  701. package/dist/plugins/host.mjs +45 -41
  702. package/dist/plugins-COJ2L49n.mjs +261 -0
  703. package/dist/plugins-COJ2L49n.mjs.map +1 -0
  704. package/dist/policy-DLQ--Hnm.mjs +45 -0
  705. package/dist/policy-DLQ--Hnm.mjs.map +1 -0
  706. package/dist/portable-text-BH4zgkSm.mjs +311 -0
  707. package/dist/portable-text-BH4zgkSm.mjs.map +1 -0
  708. package/dist/preview-DLexxwp3.mjs +107 -0
  709. package/dist/preview-DLexxwp3.mjs.map +1 -0
  710. package/dist/protocol-79kUO7jP.d.mts +65 -0
  711. package/dist/protocol-79kUO7jP.d.mts.map +1 -0
  712. package/dist/public-plugin-api-routes-BuAMJ8nN.mjs +316 -0
  713. package/dist/public-plugin-api-routes-BuAMJ8nN.mjs.map +1 -0
  714. package/dist/public-submission-Di3TsgzX.mjs +251 -0
  715. package/dist/public-submission-Di3TsgzX.mjs.map +1 -0
  716. package/dist/public-url-Bt98vysr.mjs +101 -0
  717. package/dist/public-url-Bt98vysr.mjs.map +1 -0
  718. package/dist/query-CpnRlBh8.mjs +1156 -0
  719. package/dist/query-CpnRlBh8.mjs.map +1 -0
  720. package/dist/query-haKvLAWl.mjs +41 -0
  721. package/dist/query-haKvLAWl.mjs.map +1 -0
  722. package/dist/range-CYfeXgGK.mjs +51 -0
  723. package/dist/range-CYfeXgGK.mjs.map +1 -0
  724. package/dist/rate-limit-Xp4d0NBY.mjs +127 -0
  725. package/dist/rate-limit-Xp4d0NBY.mjs.map +1 -0
  726. package/dist/receipt-BUsQCOeM.mjs +43 -0
  727. package/dist/receipt-BUsQCOeM.mjs.map +1 -0
  728. package/dist/redirect-CQAV7mCo.mjs +19 -0
  729. package/dist/redirect-CQAV7mCo.mjs.map +1 -0
  730. package/dist/redirect-DiS_3mA4.mjs +423 -0
  731. package/dist/redirect-DiS_3mA4.mjs.map +1 -0
  732. package/dist/redirect-paths-CNYq7w80.mjs +36 -0
  733. package/dist/redirect-paths-CNYq7w80.mjs.map +1 -0
  734. package/dist/redirects-BEVSRMa2.mjs +148 -0
  735. package/dist/redirects-BEVSRMa2.mjs.map +1 -0
  736. package/dist/redirects-BHpy-VsZ.mjs +446 -0
  737. package/dist/redirects-BHpy-VsZ.mjs.map +1 -0
  738. package/dist/registry/testing.mjs +3 -3
  739. package/dist/registry-TUVaid9Z.mjs +8369 -0
  740. package/dist/registry-TUVaid9Z.mjs.map +1 -0
  741. package/dist/relations-CA_QuMTU.mjs +776 -0
  742. package/dist/relations-CA_QuMTU.mjs.map +1 -0
  743. package/dist/request-context.d.mts +1 -1
  744. package/dist/request-meta-bwZ_NsvU.mjs +141 -0
  745. package/dist/request-meta-bwZ_NsvU.mjs.map +1 -0
  746. package/dist/resolve-DwNM-CXl.mjs +101 -0
  747. package/dist/resolve-DwNM-CXl.mjs.map +1 -0
  748. package/dist/revision-BVp8S0e_.mjs +374 -0
  749. package/dist/revision-BVp8S0e_.mjs.map +1 -0
  750. package/dist/route-cache-QSOyDEw0.mjs +20 -0
  751. package/dist/route-cache-QSOyDEw0.mjs.map +1 -0
  752. package/dist/route-wire-Ca_HWCZ5.mjs +197 -0
  753. package/dist/route-wire-Ca_HWCZ5.mjs.map +1 -0
  754. package/dist/routes-BerZFrvV.mjs +272 -0
  755. package/dist/routes-BerZFrvV.mjs.map +1 -0
  756. package/dist/runner-BObHz5FC.d.mts +68 -0
  757. package/dist/runner-BObHz5FC.d.mts.map +1 -0
  758. package/dist/runner-C5NeAkBQ.mjs +6595 -0
  759. package/dist/runner-C5NeAkBQ.mjs.map +1 -0
  760. package/dist/runtime.d.mts +13 -13
  761. package/dist/runtime.mjs +3 -2
  762. package/dist/runtime.mjs.map +1 -1
  763. package/dist/schema/project-env-types.mjs +39 -35
  764. package/dist/schema/project-env-types.mjs.map +1 -1
  765. package/dist/schema-C4OBuv6Z.mjs +13 -0
  766. package/dist/schema-C4OBuv6Z.mjs.map +1 -0
  767. package/dist/schema-DJRfvM_o.mjs +815 -0
  768. package/dist/schema-DJRfvM_o.mjs.map +1 -0
  769. package/dist/scopes-BU03K7Uo.mjs +34 -0
  770. package/dist/scopes-BU03K7Uo.mjs.map +1 -0
  771. package/dist/search-DfVzks89.mjs +450 -0
  772. package/dist/search-DfVzks89.mjs.map +1 -0
  773. package/dist/sections-BMy4JVUz.mjs +346 -0
  774. package/dist/sections-BMy4JVUz.mjs.map +1 -0
  775. package/dist/seed/index.d.mts +2 -2
  776. package/dist/seed/index.mjs +37 -33
  777. package/dist/seo/index.d.mts +3 -3
  778. package/dist/seo/index.mjs +24 -20
  779. package/dist/seo/index.mjs.map +1 -1
  780. package/dist/seo-ClB-dw9w.mjs +188 -0
  781. package/dist/seo-ClB-dw9w.mjs.map +1 -0
  782. package/dist/seo-VZYOEy8f.mjs +133 -0
  783. package/dist/seo-VZYOEy8f.mjs.map +1 -0
  784. package/dist/service-Bo_usgSk.mjs +150 -0
  785. package/dist/service-Bo_usgSk.mjs.map +1 -0
  786. package/dist/session-user-DlpPdf8L.mjs +61 -0
  787. package/dist/session-user-DlpPdf8L.mjs.map +1 -0
  788. package/dist/settings-CWb84sDm.mjs +452 -0
  789. package/dist/settings-CWb84sDm.mjs.map +1 -0
  790. package/dist/settings-DS914jjE.mjs +66 -0
  791. package/dist/settings-DS914jjE.mjs.map +1 -0
  792. package/dist/settings-Dd1uivmQ.mjs +73 -0
  793. package/dist/settings-Dd1uivmQ.mjs.map +1 -0
  794. package/dist/setup-complete-BuNxAUiN.mjs +65 -0
  795. package/dist/setup-complete-BuNxAUiN.mjs.map +1 -0
  796. package/dist/setup-nonce-BnEAX0iy.mjs +25 -0
  797. package/dist/setup-nonce-BnEAX0iy.mjs.map +1 -0
  798. package/dist/site-domain-Bq5j5bVg.mjs +131 -0
  799. package/dist/site-domain-Bq5j5bVg.mjs.map +1 -0
  800. package/dist/site-settings-DRHfX7bq.mjs +50 -0
  801. package/dist/site-settings-DRHfX7bq.mjs.map +1 -0
  802. package/dist/site-url-MB685I5X.mjs +45 -0
  803. package/dist/site-url-MB685I5X.mjs.map +1 -0
  804. package/dist/sitemap-name-BTg2NJJv.mjs +26 -0
  805. package/dist/sitemap-name-BTg2NJJv.mjs.map +1 -0
  806. package/dist/slug-aVnUV4SL.mjs +16 -0
  807. package/dist/slug-aVnUV4SL.mjs.map +1 -0
  808. package/dist/snapshot-DYsG4uOq.mjs +414 -0
  809. package/dist/snapshot-DYsG4uOq.mjs.map +1 -0
  810. package/dist/ssrf-BcYjyM4M.mjs +406 -0
  811. package/dist/ssrf-BcYjyM4M.mjs.map +1 -0
  812. package/dist/stage-D8DWgPcO.mjs +662 -0
  813. package/dist/stage-D8DWgPcO.mjs.map +1 -0
  814. package/dist/staged-CD_imitH.mjs +686 -0
  815. package/dist/staged-CD_imitH.mjs.map +1 -0
  816. package/dist/state-CFbGZziM.mjs +178 -0
  817. package/dist/state-CFbGZziM.mjs.map +1 -0
  818. package/dist/status-BFNdxzKc.mjs +30 -0
  819. package/dist/status-BFNdxzKc.mjs.map +1 -0
  820. package/dist/storage/local.d.mts +1 -1
  821. package/dist/storage/local.mjs +3 -3
  822. package/dist/storage/s3.d.mts +1 -1
  823. package/dist/storage/s3.mjs +1 -1
  824. package/dist/storage-query-DRyu3bSU.d.mts +1615 -0
  825. package/dist/storage-query-DRyu3bSU.d.mts.map +1 -0
  826. package/dist/tar-DFjExb9X.mjs +449 -0
  827. package/dist/tar-DFjExb9X.mjs.map +1 -0
  828. package/dist/target-CWZs2-o6.mjs +27 -0
  829. package/dist/target-CWZs2-o6.mjs.map +1 -0
  830. package/dist/taxonomies-ChnU7Mc8.mjs +697 -0
  831. package/dist/taxonomies-ChnU7Mc8.mjs.map +1 -0
  832. package/dist/taxonomies-Dd9JJv_a.mjs +939 -0
  833. package/dist/taxonomies-Dd9JJv_a.mjs.map +1 -0
  834. package/dist/taxonomy-C_C_LBAU.mjs +550 -0
  835. package/dist/taxonomy-C_C_LBAU.mjs.map +1 -0
  836. package/dist/tokens-BnhSnGwJ.mjs +171 -0
  837. package/dist/tokens-BnhSnGwJ.mjs.map +1 -0
  838. package/dist/transfer-ClH6w6BV.mjs +8873 -0
  839. package/dist/transfer-ClH6w6BV.mjs.map +1 -0
  840. package/dist/transfer-WmWiR3xf.mjs +166 -0
  841. package/dist/transfer-WmWiR3xf.mjs.map +1 -0
  842. package/dist/transfer-download--ofRj9Cw.mjs +33 -0
  843. package/dist/transfer-download--ofRj9Cw.mjs.map +1 -0
  844. package/dist/transformations-Bx4lYY0Y.mjs +196 -0
  845. package/dist/transformations-Bx4lYY0Y.mjs.map +1 -0
  846. package/dist/transport-BjbqNiPI.mjs +136 -0
  847. package/dist/transport-BjbqNiPI.mjs.map +1 -0
  848. package/dist/transport-DxiXnbXk.d.mts +42 -0
  849. package/dist/transport-DxiXnbXk.d.mts.map +1 -0
  850. package/dist/trusted-proxy-BU3Nx9g1.mjs +51 -0
  851. package/dist/trusted-proxy-BU3Nx9g1.mjs.map +1 -0
  852. package/dist/turnstile-CJwvsOqw.mjs +58 -0
  853. package/dist/turnstile-CJwvsOqw.mjs.map +1 -0
  854. package/dist/types-BA3ey2QH.d.mts +87 -0
  855. package/dist/types-BA3ey2QH.d.mts.map +1 -0
  856. package/dist/types-Bwpzb5o6.d.mts +227 -0
  857. package/dist/types-Bwpzb5o6.d.mts.map +1 -0
  858. package/dist/types-CNB-dj6F.d.mts +289 -0
  859. package/dist/types-CNB-dj6F.d.mts.map +1 -0
  860. package/dist/types-CgfFGfO5.mjs +16 -0
  861. package/dist/types-CgfFGfO5.mjs.map +1 -0
  862. package/dist/types-D2NEXtgB.mjs +127 -0
  863. package/dist/types-D2NEXtgB.mjs.map +1 -0
  864. package/dist/types-DCFavOii.d.mts +916 -0
  865. package/dist/types-DCFavOii.d.mts.map +1 -0
  866. package/dist/types-DHO7Pd25.d.mts +366 -0
  867. package/dist/types-DHO7Pd25.d.mts.map +1 -0
  868. package/dist/types-DvqVxZXa.d.mts +125 -0
  869. package/dist/types-DvqVxZXa.d.mts.map +1 -0
  870. package/dist/types-QoPHm-2w.d.mts +1741 -0
  871. package/dist/types-QoPHm-2w.d.mts.map +1 -0
  872. package/dist/types-RLgeIpnF.d.mts +374 -0
  873. package/dist/types-RLgeIpnF.d.mts.map +1 -0
  874. package/dist/types-qHVygneX.mjs +77 -0
  875. package/dist/types-qHVygneX.mjs.map +1 -0
  876. package/dist/types-sUHaH7lC.mjs +37 -0
  877. package/dist/types-sUHaH7lC.mjs.map +1 -0
  878. package/dist/types-slSqujQL.d.mts +204 -0
  879. package/dist/types-slSqujQL.d.mts.map +1 -0
  880. package/dist/update-check-BxNg9T6N.mjs +161 -0
  881. package/dist/update-check-BxNg9T6N.mjs.map +1 -0
  882. package/dist/upload-attempts-DPFC4COv.mjs +32 -0
  883. package/dist/upload-attempts-DPFC4COv.mjs.map +1 -0
  884. package/dist/url-pattern-QATUE_rv.mjs +41 -0
  885. package/dist/url-pattern-QATUE_rv.mjs.map +1 -0
  886. package/dist/user-BlCTKVAm.mjs +171 -0
  887. package/dist/user-BlCTKVAm.mjs.map +1 -0
  888. package/dist/utils-TPt7w2cS.mjs +442 -0
  889. package/dist/utils-TPt7w2cS.mjs.map +1 -0
  890. package/dist/validate-DxYhJQA-.mjs +524 -0
  891. package/dist/validate-DxYhJQA-.mjs.map +1 -0
  892. package/dist/validate-emKxGC5F.d.mts +468 -0
  893. package/dist/validate-emKxGC5F.d.mts.map +1 -0
  894. package/dist/validation-Ckq4vsVg.mjs +220 -0
  895. package/dist/validation-Ckq4vsVg.mjs.map +1 -0
  896. package/dist/version-BZj18Q7G.mjs +9 -0
  897. package/dist/version-BZj18Q7G.mjs.map +1 -0
  898. package/dist/version-DHmGpcch.mjs +7 -0
  899. package/dist/version-DHmGpcch.mjs.map +1 -0
  900. package/dist/video-DytCnw3L.mjs +54 -0
  901. package/dist/video-DytCnw3L.mjs.map +1 -0
  902. package/dist/virtual-modules-DO954n7P.mjs +515 -0
  903. package/dist/virtual-modules-DO954n7P.mjs.map +1 -0
  904. package/dist/widgets-DA5XmvVC.mjs +121 -0
  905. package/dist/widgets-DA5XmvVC.mjs.map +1 -0
  906. package/dist/wxr-taxonomies-CrMonejI.d.mts +34 -0
  907. package/dist/wxr-taxonomies-CrMonejI.d.mts.map +1 -0
  908. package/dist/wxr-taxonomies-RgRG0d5e.mjs +453 -0
  909. package/dist/wxr-taxonomies-RgRG0d5e.mjs.map +1 -0
  910. package/dist/zod-generator-D0JKy94C.mjs +424 -0
  911. package/dist/zod-generator-D0JKy94C.mjs.map +1 -0
  912. package/package.json +7 -6
  913. package/src/api/authorize.ts +42 -0
  914. package/src/api/handlers/dashboard.ts +33 -10
  915. package/src/api/handlers/manifest.ts +1 -0
  916. package/src/api/handlers/plugins.ts +1 -0
  917. package/src/api/handlers/revision.ts +6 -2
  918. package/src/api/handlers/site-domain.ts +26 -10
  919. package/src/api/schemas/settings.ts +2 -0
  920. package/src/api/types.ts +2 -0
  921. package/src/astro/integration/dev-scheduler-bridge.ts +91 -0
  922. package/src/astro/integration/index.ts +48 -1
  923. package/src/astro/integration/routes.ts +8 -0
  924. package/src/astro/integration/runtime.ts +2 -1
  925. package/src/astro/integration/virtual-modules.ts +9 -16
  926. package/src/astro/integration/vite-config.ts +4 -15
  927. package/src/astro/middleware/auth.ts +3 -1
  928. package/src/astro/middleware/redirect.ts +71 -42
  929. package/src/astro/middleware.ts +18 -3
  930. package/src/astro/prefetch.ts +7 -5
  931. package/src/astro/public-plugin-api-routes.ts +10 -2
  932. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +1 -1
  933. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +2 -1
  934. package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +1 -5
  935. package/src/astro/routes/api/content/[collection]/[id]/lock.ts +2 -2
  936. package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +2 -1
  937. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -1
  938. package/src/astro/routes/api/content/[collection]/[id]/restore.ts +2 -1
  939. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +3 -2
  940. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +5 -4
  941. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +2 -1
  942. package/src/astro/routes/api/content/[collection]/[id].ts +18 -6
  943. package/src/astro/routes/api/content/[collection]/index.ts +1 -5
  944. package/src/astro/routes/api/dashboard.ts +4 -1
  945. package/src/astro/routes/api/dev/scheduled-tasks.ts +20 -0
  946. package/src/astro/routes/api/import/wordpress/analyze.ts +1 -16
  947. package/src/astro/routes/api/import/wordpress/execute.ts +8 -3
  948. package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +4 -1
  949. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +34 -5
  950. package/src/astro/routes/api/menus/[name]/items/[id].ts +3 -2
  951. package/src/astro/routes/api/menus/[name]/items.ts +2 -1
  952. package/src/astro/routes/api/menus/[name]/reorder.ts +2 -1
  953. package/src/astro/routes/api/menus/[name]/translations.ts +2 -1
  954. package/src/astro/routes/api/menus/[name].ts +3 -2
  955. package/src/astro/routes/api/menus/index.ts +2 -1
  956. package/src/astro/routes/api/redirects/[id].ts +15 -2
  957. package/src/astro/routes/api/redirects/index.ts +5 -1
  958. package/src/astro/routes/api/settings/domain.ts +2 -1
  959. package/src/astro/routes/api/settings.ts +2 -1
  960. package/src/astro/routes/api/setup/admin-verify.ts +7 -1
  961. package/src/astro/routes/api/taxonomies/[name]/reorder.ts +2 -1
  962. package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +2 -1
  963. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +3 -2
  964. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +2 -1
  965. package/src/astro/routes/api/taxonomies/[name].ts +3 -2
  966. package/src/astro/routes/api/taxonomies/index.ts +2 -1
  967. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +2 -1
  968. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +3 -2
  969. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +2 -1
  970. package/src/astro/routes/api/widget-areas/[name].ts +2 -1
  971. package/src/astro/routes/api/widget-areas/index.ts +2 -1
  972. package/src/astro/routes/robots.txt.ts +33 -2
  973. package/src/astro/types.ts +10 -1
  974. package/src/auth/types.ts +4 -4
  975. package/src/cache/redirect-paths.ts +56 -0
  976. package/src/cache/route-cache.ts +22 -0
  977. package/src/cli/commands/import/wordpress.ts +3 -27
  978. package/src/cli/commands/login.ts +35 -43
  979. package/src/cli/commands/migrate.ts +36 -4
  980. package/src/cli/commands/seed.ts +18 -8
  981. package/src/cli/wxr/parser.ts +2 -2
  982. package/src/client/index.ts +12 -2
  983. package/src/client/portable-text.ts +21 -7
  984. package/src/comments/query.ts +8 -2
  985. package/src/components/CommentForm.astro +2 -2
  986. package/src/components/Comments.astro +1 -1
  987. package/src/components/InlinePortableTextEditor.tsx +152 -1325
  988. package/src/components/inline-block-types.ts +278 -0
  989. package/src/components/inline-bubble-menu.tsx +696 -0
  990. package/src/components/inline-editor-ui.tsx +1192 -0
  991. package/src/components/inline-image.tsx +722 -0
  992. package/src/components/inline-media-picker.tsx +1221 -0
  993. package/src/components/inline-slash-menu.tsx +556 -0
  994. package/src/database/collection-cleanup.ts +30 -0
  995. package/src/database/datetime-storage.ts +337 -60
  996. package/src/database/migration-lock.ts +43 -7
  997. package/src/database/repositories/content.ts +3 -1
  998. package/src/database/repositories/plugin-storage.ts +109 -8
  999. package/src/database/repositories/revision.ts +24 -6
  1000. package/src/database/repositories/types.ts +65 -7
  1001. package/src/emdash-runtime.ts +176 -160
  1002. package/src/import/index.ts +1 -0
  1003. package/src/import/registry.ts +17 -0
  1004. package/src/import/sources/wordpress-plugin.ts +151 -9
  1005. package/src/import/types.ts +3 -0
  1006. package/src/import/utils.ts +5 -0
  1007. package/src/loader.ts +36 -2
  1008. package/src/mcp/json-schema.ts +14 -0
  1009. package/src/mcp/plugin-tool-name.ts +36 -0
  1010. package/src/mcp/server.ts +74 -15
  1011. package/src/media/usage/collection-deletion.ts +4 -0
  1012. package/src/migrations/direct-executor.ts +42 -12
  1013. package/src/migrations/protocol.ts +6 -2
  1014. package/src/plugins/adapt-sandbox-entry.ts +16 -6
  1015. package/src/plugins/state.ts +5 -8
  1016. package/src/query.ts +51 -10
  1017. package/src/redirects/cache.ts +34 -2
  1018. package/src/schema/block-values.ts +80 -17
  1019. package/src/schema/registry.ts +9 -1
  1020. package/src/search/query.ts +3 -1
  1021. package/src/seed/apply.ts +32 -8
  1022. package/src/settings/index.ts +20 -0
  1023. package/src/settings/types.ts +2 -0
  1024. package/src/visual-editing/toolbar.ts +46 -12
  1025. package/dist/action-token-BdWad2YG.mjs +0 -26
  1026. package/dist/action-token-BdWad2YG.mjs.map +0 -1
  1027. package/dist/activation-xomsCMJg.mjs +0 -387
  1028. package/dist/activation-xomsCMJg.mjs.map +0 -1
  1029. package/dist/adapters-B4-nbElt.d.mts +0 -173
  1030. package/dist/adapters-B4-nbElt.d.mts.map +0 -1
  1031. package/dist/allowed-origins-CLpHGGlc.mjs +0 -116
  1032. package/dist/allowed-origins-CLpHGGlc.mjs.map +0 -1
  1033. package/dist/api-DBw_IWoi.mjs +0 -5024
  1034. package/dist/api-DBw_IWoi.mjs.map +0 -1
  1035. package/dist/api-tokens-B0ZipcZ-.mjs +0 -173
  1036. package/dist/api-tokens-B0ZipcZ-.mjs.map +0 -1
  1037. package/dist/apply-Cx48saFC.mjs +0 -1680
  1038. package/dist/apply-Cx48saFC.mjs.map +0 -1
  1039. package/dist/approvals-BXgtXA2s.mjs +0 -460
  1040. package/dist/approvals-BXgtXA2s.mjs.map +0 -1
  1041. package/dist/artifact-fetch-DsRczRGG.mjs +0 -659
  1042. package/dist/artifact-fetch-DsRczRGG.mjs.map +0 -1
  1043. package/dist/artifacts-D-O-qj9C.mjs +0 -307
  1044. package/dist/artifacts-D-O-qj9C.mjs.map +0 -1
  1045. package/dist/audit-CCH3MA4Y.mjs +0 -127
  1046. package/dist/audit-CCH3MA4Y.mjs.map +0 -1
  1047. package/dist/authoritative-records-Dcs7l2H5.mjs +0 -5183
  1048. package/dist/authoritative-records-Dcs7l2H5.mjs.map +0 -1
  1049. package/dist/authorize-TdIGpRSE.mjs +0 -49
  1050. package/dist/authorize-TdIGpRSE.mjs.map +0 -1
  1051. package/dist/backup-CZt5Mzwx.mjs +0 -246
  1052. package/dist/backup-CZt5Mzwx.mjs.map +0 -1
  1053. package/dist/block-types-DHnkzE6u.mjs +0 -132
  1054. package/dist/block-types-DHnkzE6u.mjs.map +0 -1
  1055. package/dist/block-values-C4N_F2-G.mjs +0 -175
  1056. package/dist/block-values-C4N_F2-G.mjs.map +0 -1
  1057. package/dist/byline-BmVKOQ8l.mjs +0 -909
  1058. package/dist/byline-BmVKOQ8l.mjs.map +0 -1
  1059. package/dist/byline-fields-B8SDs3M_.mjs +0 -123
  1060. package/dist/byline-fields-B8SDs3M_.mjs.map +0 -1
  1061. package/dist/byline-fields-Bze3ZdAw.mjs +0 -280
  1062. package/dist/byline-fields-Bze3ZdAw.mjs.map +0 -1
  1063. package/dist/bylines-CHhR28r9.mjs +0 -150
  1064. package/dist/bylines-CHhR28r9.mjs.map +0 -1
  1065. package/dist/bylines-DZS4OflA.mjs +0 -234
  1066. package/dist/bylines-DZS4OflA.mjs.map +0 -1
  1067. package/dist/cache-x0z8t_m9.mjs +0 -133
  1068. package/dist/cache-x0z8t_m9.mjs.map +0 -1
  1069. package/dist/canonical-BUcKRYpG.mjs +0 -174
  1070. package/dist/canonical-BUcKRYpG.mjs.map +0 -1
  1071. package/dist/capture-triggers-C9JKoIdT.mjs +0 -362
  1072. package/dist/capture-triggers-C9JKoIdT.mjs.map +0 -1
  1073. package/dist/challenge-store-BHgdPVze.mjs +0 -51
  1074. package/dist/challenge-store-BHgdPVze.mjs.map +0 -1
  1075. package/dist/checksum-BYR5i7qe.mjs +0 -162
  1076. package/dist/checksum-BYR5i7qe.mjs.map +0 -1
  1077. package/dist/chunks-Dr5Vr0zA.mjs +0 -25
  1078. package/dist/chunks-Dr5Vr0zA.mjs.map +0 -1
  1079. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs +0 -85
  1080. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs.map +0 -1
  1081. package/dist/comment-CWla6OHV.mjs +0 -325
  1082. package/dist/comment-CWla6OHV.mjs.map +0 -1
  1083. package/dist/comment-reaction-RZrcs5cW.mjs +0 -85
  1084. package/dist/comment-reaction-RZrcs5cW.mjs.map +0 -1
  1085. package/dist/comments-BzmIKVb2.mjs +0 -99
  1086. package/dist/comments-BzmIKVb2.mjs.map +0 -1
  1087. package/dist/comments-Da_dI2O1.mjs +0 -195
  1088. package/dist/comments-Da_dI2O1.mjs.map +0 -1
  1089. package/dist/components-oFXumpf5.mjs +0 -112
  1090. package/dist/components-oFXumpf5.mjs.map +0 -1
  1091. package/dist/config--wamYxBW.d.mts +0 -39
  1092. package/dist/config--wamYxBW.d.mts.map +0 -1
  1093. package/dist/config-Bo4eOOdV.mjs +0 -228
  1094. package/dist/config-Bo4eOOdV.mjs.map +0 -1
  1095. package/dist/config-C4-UxIk7.d.mts +0 -6790
  1096. package/dist/config-C4-UxIk7.d.mts.map +0 -1
  1097. package/dist/connection-UpzYxtE2.mjs +0 -36
  1098. package/dist/connection-UpzYxtE2.mjs.map +0 -1
  1099. package/dist/content-CcHrqkgp.mjs +0 -2072
  1100. package/dist/content-CcHrqkgp.mjs.map +0 -1
  1101. package/dist/content-list-query-Bxxdd9fv.d.mts +0 -26
  1102. package/dist/content-list-query-Bxxdd9fv.d.mts.map +0 -1
  1103. package/dist/content-repair-havk1F0-.mjs +0 -442
  1104. package/dist/content-repair-havk1F0-.mjs.map +0 -1
  1105. package/dist/context-CvhgHgSH.mjs +0 -2043
  1106. package/dist/context-CvhgHgSH.mjs.map +0 -1
  1107. package/dist/credits-CygUrPOi.mjs +0 -110
  1108. package/dist/credits-CygUrPOi.mjs.map +0 -1
  1109. package/dist/cron-C6ytTOLw.mjs +0 -306
  1110. package/dist/cron-C6ytTOLw.mjs.map +0 -1
  1111. package/dist/dashboard-7_FYfafc.mjs +0 -151
  1112. package/dist/dashboard-7_FYfafc.mjs.map +0 -1
  1113. package/dist/default-CHCUkV4Z.mjs +0 -81
  1114. package/dist/default-CHCUkV4Z.mjs.map +0 -1
  1115. package/dist/deferred-tasks-G0xhcJTl.d.mts +0 -9
  1116. package/dist/deferred-tasks-G0xhcJTl.d.mts.map +0 -1
  1117. package/dist/dev-typegen-Dtl8AfS6.mjs +0 -29
  1118. package/dist/dev-typegen-Dtl8AfS6.mjs.map +0 -1
  1119. package/dist/device-flow-CzDJmQ1q.mjs +0 -521
  1120. package/dist/device-flow-CzDJmQ1q.mjs.map +0 -1
  1121. package/dist/digest-xJmyPv2r.mjs +0 -194
  1122. package/dist/digest-xJmyPv2r.mjs.map +0 -1
  1123. package/dist/direct-executor-BXiYIVJ9.mjs +0 -104
  1124. package/dist/direct-executor-BXiYIVJ9.mjs.map +0 -1
  1125. package/dist/email-console-7ZPApLlm.mjs +0 -50
  1126. package/dist/email-console-7ZPApLlm.mjs.map +0 -1
  1127. package/dist/email-locale-DFdUA6UF.mjs +0 -25
  1128. package/dist/email-locale-DFdUA6UF.mjs.map +0 -1
  1129. package/dist/emdash-runtime-C4oFeVpN.mjs +0 -4363
  1130. package/dist/emdash-runtime-C4oFeVpN.mjs.map +0 -1
  1131. package/dist/entry-lock-B4n0HdQ_.mjs +0 -163
  1132. package/dist/entry-lock-B4n0HdQ_.mjs.map +0 -1
  1133. package/dist/entry-lock-BAAlKYrz.d.mts +0 -4566
  1134. package/dist/entry-lock-BAAlKYrz.d.mts.map +0 -1
  1135. package/dist/entry-lock-Cjz0h45X.mjs +0 -1209
  1136. package/dist/entry-lock-Cjz0h45X.mjs.map +0 -1
  1137. package/dist/env-types-4bkF6Bqg.mjs +0 -38
  1138. package/dist/env-types-4bkF6Bqg.mjs.map +0 -1
  1139. package/dist/error-DxgQdaZ_.mjs +0 -90
  1140. package/dist/error-DxgQdaZ_.mjs.map +0 -1
  1141. package/dist/errors-CjtE5aWF.mjs +0 -120
  1142. package/dist/errors-CjtE5aWF.mjs.map +0 -1
  1143. package/dist/errors-hskQ0C8G.mjs +0 -479
  1144. package/dist/errors-hskQ0C8G.mjs.map +0 -1
  1145. package/dist/escape-ESFhYzwG.mjs +0 -9
  1146. package/dist/escape-ESFhYzwG.mjs.map +0 -1
  1147. package/dist/fence-vc3aHgRA.mjs +0 -162
  1148. package/dist/fence-vc3aHgRA.mjs.map +0 -1
  1149. package/dist/field-defs-cache-zoow36nz.mjs +0 -77
  1150. package/dist/field-defs-cache-zoow36nz.mjs.map +0 -1
  1151. package/dist/field-map-JD1wG0Tq.mjs +0 -83
  1152. package/dist/field-map-JD1wG0Tq.mjs.map +0 -1
  1153. package/dist/fts-manager-WJCN8uU6.mjs +0 -443
  1154. package/dist/fts-manager-WJCN8uU6.mjs.map +0 -1
  1155. package/dist/gc-CsGZiKdH.mjs +0 -75
  1156. package/dist/gc-CsGZiKdH.mjs.map +0 -1
  1157. package/dist/hash-C4DFoJ7Z.mjs +0 -37
  1158. package/dist/hash-C4DFoJ7Z.mjs.map +0 -1
  1159. package/dist/hook-result-CXjtMk7Q.d.mts +0 -31
  1160. package/dist/hook-result-CXjtMk7Q.d.mts.map +0 -1
  1161. package/dist/hreflang-BAma7iRr.mjs +0 -105
  1162. package/dist/hreflang-BAma7iRr.mjs.map +0 -1
  1163. package/dist/hreflang-BsYo4x_M.d.mts +0 -50
  1164. package/dist/hreflang-BsYo4x_M.d.mts.map +0 -1
  1165. package/dist/http-route-dispatch-C8G7hAK6.mjs +0 -342
  1166. package/dist/http-route-dispatch-C8G7hAK6.mjs.map +0 -1
  1167. package/dist/identity-BwBKM1fH.mjs +0 -35
  1168. package/dist/identity-BwBKM1fH.mjs.map +0 -1
  1169. package/dist/import-DJ3Z2wxE.mjs +0 -2021
  1170. package/dist/import-DJ3Z2wxE.mjs.map +0 -1
  1171. package/dist/index-DYsn97dY.d.mts +0 -623
  1172. package/dist/index-DYsn97dY.d.mts.map +0 -1
  1173. package/dist/install-finalization-DCFnFSHv.mjs +0 -58
  1174. package/dist/install-finalization-DCFnFSHv.mjs.map +0 -1
  1175. package/dist/keys-CGvAndSp.mjs +0 -61
  1176. package/dist/keys-CGvAndSp.mjs.map +0 -1
  1177. package/dist/kinds-DT1W4T4Y.mjs +0 -974
  1178. package/dist/kinds-DT1W4T4Y.mjs.map +0 -1
  1179. package/dist/lifecycle-BzglCSY0.mjs +0 -25
  1180. package/dist/lifecycle-BzglCSY0.mjs.map +0 -1
  1181. package/dist/load-DjUqmf3s.mjs +0 -28
  1182. package/dist/load-DjUqmf3s.mjs.map +0 -1
  1183. package/dist/loader-CetY659y.mjs +0 -1355
  1184. package/dist/loader-CetY659y.mjs.map +0 -1
  1185. package/dist/loops-DkT1zkPH.mjs +0 -205
  1186. package/dist/loops-DkT1zkPH.mjs.map +0 -1
  1187. package/dist/manifest-builder-BOFCd9rX.mjs +0 -189
  1188. package/dist/manifest-builder-BOFCd9rX.mjs.map +0 -1
  1189. package/dist/manifest-schema-BiFBPEsp.mjs +0 -497
  1190. package/dist/manifest-schema-BiFBPEsp.mjs.map +0 -1
  1191. package/dist/marketplace-CUlenvZm.mjs +0 -257
  1192. package/dist/marketplace-CUlenvZm.mjs.map +0 -1
  1193. package/dist/media-CRKsKlfK.mjs +0 -416
  1194. package/dist/media-CRKsKlfK.mjs.map +0 -1
  1195. package/dist/media-C_z7sRuC.mjs +0 -294
  1196. package/dist/media-C_z7sRuC.mjs.map +0 -1
  1197. package/dist/media-IT8hQleU.mjs +0 -373
  1198. package/dist/media-IT8hQleU.mjs.map +0 -1
  1199. package/dist/media-allowlist-Ct6wvnT2.mjs +0 -45
  1200. package/dist/media-allowlist-Ct6wvnT2.mjs.map +0 -1
  1201. package/dist/media-folders-DtMt-vAA.mjs +0 -210
  1202. package/dist/media-folders-DtMt-vAA.mjs.map +0 -1
  1203. package/dist/media-url-BpXLqCmf.mjs +0 -43
  1204. package/dist/media-url-BpXLqCmf.mjs.map +0 -1
  1205. package/dist/media-usage-DEPHZZ9X.mjs +0 -282
  1206. package/dist/media-usage-DEPHZZ9X.mjs.map +0 -1
  1207. package/dist/media-usage-activation-V2Siabtw.mjs +0 -78
  1208. package/dist/media-usage-activation-V2Siabtw.mjs.map +0 -1
  1209. package/dist/media-usage-work-Cv1OE59F.mjs +0 -151
  1210. package/dist/media-usage-work-Cv1OE59F.mjs.map +0 -1
  1211. package/dist/media-usage-work-cgDYGvrt.mjs +0 -1015
  1212. package/dist/media-usage-work-cgDYGvrt.mjs.map +0 -1
  1213. package/dist/menus-CvVYfsuk.mjs +0 -753
  1214. package/dist/menus-CvVYfsuk.mjs.map +0 -1
  1215. package/dist/menus-D1HC8npj.mjs +0 -92
  1216. package/dist/menus-D1HC8npj.mjs.map +0 -1
  1217. package/dist/menus-DL8IPIcm.mjs +0 -3721
  1218. package/dist/menus-DL8IPIcm.mjs.map +0 -1
  1219. package/dist/mode-eieqAWLe.mjs +0 -23
  1220. package/dist/mode-eieqAWLe.mjs.map +0 -1
  1221. package/dist/node-sqlite-compat-VuyzJw1b.mjs +0 -63
  1222. package/dist/node-sqlite-compat-VuyzJw1b.mjs.map +0 -1
  1223. package/dist/oauth-authorization-B6ZJbMd2.mjs +0 -274
  1224. package/dist/oauth-authorization-B6ZJbMd2.mjs.map +0 -1
  1225. package/dist/oauth-clients-DVjRc9v3.mjs +0 -266
  1226. package/dist/oauth-clients-DVjRc9v3.mjs.map +0 -1
  1227. package/dist/oauth-state-store-CnmYYsVQ.mjs +0 -50
  1228. package/dist/oauth-state-store-CnmYYsVQ.mjs.map +0 -1
  1229. package/dist/oauth-user-lookup-Dz1_R5vT.mjs +0 -26
  1230. package/dist/oauth-user-lookup-Dz1_R5vT.mjs.map +0 -1
  1231. package/dist/options-BR9XZl7h.d.mts +0 -81
  1232. package/dist/options-BR9XZl7h.d.mts.map +0 -1
  1233. package/dist/ownership-COPyVysP.mjs +0 -12
  1234. package/dist/ownership-COPyVysP.mjs.map +0 -1
  1235. package/dist/parse-BOGhrwSq.d.mts +0 -174
  1236. package/dist/parse-BOGhrwSq.d.mts.map +0 -1
  1237. package/dist/parse-Cn5aSk1N.mjs +0 -81
  1238. package/dist/parse-Cn5aSk1N.mjs.map +0 -1
  1239. package/dist/passkey-config-mMFRQUCj.mjs +0 -46
  1240. package/dist/passkey-config-mMFRQUCj.mjs.map +0 -1
  1241. package/dist/paths-BmcAdBo9.mjs +0 -77
  1242. package/dist/paths-BmcAdBo9.mjs.map +0 -1
  1243. package/dist/placeholder-nOep3_Gn.d.mts +0 -306
  1244. package/dist/placeholder-nOep3_Gn.d.mts.map +0 -1
  1245. package/dist/plan-CDY4K8CH.mjs +0 -135
  1246. package/dist/plan-CDY4K8CH.mjs.map +0 -1
  1247. package/dist/plugins-DFBpfbO3.mjs +0 -261
  1248. package/dist/plugins-DFBpfbO3.mjs.map +0 -1
  1249. package/dist/policy-B_2qnHSy.mjs +0 -45
  1250. package/dist/policy-B_2qnHSy.mjs.map +0 -1
  1251. package/dist/portable-text-Dc2YAusw.mjs +0 -307
  1252. package/dist/portable-text-Dc2YAusw.mjs.map +0 -1
  1253. package/dist/preview-BtzikJ9O.mjs +0 -107
  1254. package/dist/preview-BtzikJ9O.mjs.map +0 -1
  1255. package/dist/protocol-M268ox8L.d.mts +0 -61
  1256. package/dist/protocol-M268ox8L.d.mts.map +0 -1
  1257. package/dist/public-submission-BQZavgZU.mjs +0 -251
  1258. package/dist/public-submission-BQZavgZU.mjs.map +0 -1
  1259. package/dist/public-url-uT1Ok2Tu.mjs +0 -101
  1260. package/dist/public-url-uT1Ok2Tu.mjs.map +0 -1
  1261. package/dist/query-BGG3sDEd.mjs +0 -1127
  1262. package/dist/query-BGG3sDEd.mjs.map +0 -1
  1263. package/dist/query-C_CWlifp.mjs +0 -41
  1264. package/dist/query-C_CWlifp.mjs.map +0 -1
  1265. package/dist/range-CXK_kDbI.mjs +0 -51
  1266. package/dist/range-CXK_kDbI.mjs.map +0 -1
  1267. package/dist/rate-limit-Dvamvay-.mjs +0 -127
  1268. package/dist/rate-limit-Dvamvay-.mjs.map +0 -1
  1269. package/dist/receipt-BmQGzquP.mjs +0 -43
  1270. package/dist/receipt-BmQGzquP.mjs.map +0 -1
  1271. package/dist/redirect-B39kTQ_0.mjs +0 -423
  1272. package/dist/redirect-B39kTQ_0.mjs.map +0 -1
  1273. package/dist/redirect-BguJ00Pv.mjs +0 -19
  1274. package/dist/redirect-BguJ00Pv.mjs.map +0 -1
  1275. package/dist/redirects-C8G4BsfP.mjs +0 -446
  1276. package/dist/redirects-C8G4BsfP.mjs.map +0 -1
  1277. package/dist/redirects-DFT7Wr-e.mjs +0 -148
  1278. package/dist/redirects-DFT7Wr-e.mjs.map +0 -1
  1279. package/dist/registry-DeZ27gVi.mjs +0 -8374
  1280. package/dist/registry-DeZ27gVi.mjs.map +0 -1
  1281. package/dist/relations-DBB1bRJW.mjs +0 -776
  1282. package/dist/relations-DBB1bRJW.mjs.map +0 -1
  1283. package/dist/request-meta-BSvkhIBX.mjs +0 -141
  1284. package/dist/request-meta-BSvkhIBX.mjs.map +0 -1
  1285. package/dist/resolve-BxH64HN9.mjs +0 -100
  1286. package/dist/resolve-BxH64HN9.mjs.map +0 -1
  1287. package/dist/revision-BWEH2qQB.mjs +0 -368
  1288. package/dist/revision-BWEH2qQB.mjs.map +0 -1
  1289. package/dist/route-wire-CwbWB_6O.mjs +0 -197
  1290. package/dist/route-wire-CwbWB_6O.mjs.map +0 -1
  1291. package/dist/routes-BfIxc7ft.mjs +0 -272
  1292. package/dist/routes-BfIxc7ft.mjs.map +0 -1
  1293. package/dist/runner-DkeafPBA.d.mts +0 -68
  1294. package/dist/runner-DkeafPBA.d.mts.map +0 -1
  1295. package/dist/runner-wqt4BrIW.mjs +0 -6383
  1296. package/dist/runner-wqt4BrIW.mjs.map +0 -1
  1297. package/dist/schema-BXIW-JHi.mjs +0 -815
  1298. package/dist/schema-BXIW-JHi.mjs.map +0 -1
  1299. package/dist/schema-I74JwYte.mjs +0 -13
  1300. package/dist/schema-I74JwYte.mjs.map +0 -1
  1301. package/dist/scopes-RWZ5ft_Z.mjs +0 -34
  1302. package/dist/scopes-RWZ5ft_Z.mjs.map +0 -1
  1303. package/dist/search-DxwagyWS.mjs +0 -450
  1304. package/dist/search-DxwagyWS.mjs.map +0 -1
  1305. package/dist/sections-Ccq9ZgyD.mjs +0 -346
  1306. package/dist/sections-Ccq9ZgyD.mjs.map +0 -1
  1307. package/dist/seo-CCnfPWAQ.mjs +0 -133
  1308. package/dist/seo-CCnfPWAQ.mjs.map +0 -1
  1309. package/dist/seo-QCtJ1jjV.mjs +0 -188
  1310. package/dist/seo-QCtJ1jjV.mjs.map +0 -1
  1311. package/dist/service-DX84s2rw.mjs +0 -150
  1312. package/dist/service-DX84s2rw.mjs.map +0 -1
  1313. package/dist/session-user-1dtJc2zv.mjs +0 -61
  1314. package/dist/session-user-1dtJc2zv.mjs.map +0 -1
  1315. package/dist/settings-B1jOxAIl.mjs +0 -443
  1316. package/dist/settings-B1jOxAIl.mjs.map +0 -1
  1317. package/dist/settings-Bc1IBl1t.mjs +0 -66
  1318. package/dist/settings-Bc1IBl1t.mjs.map +0 -1
  1319. package/dist/settings-GaZ5sVgg.mjs +0 -73
  1320. package/dist/settings-GaZ5sVgg.mjs.map +0 -1
  1321. package/dist/setup-complete-DidMAWJS.mjs +0 -65
  1322. package/dist/setup-complete-DidMAWJS.mjs.map +0 -1
  1323. package/dist/setup-nonce-DKl4S4c6.mjs +0 -25
  1324. package/dist/setup-nonce-DKl4S4c6.mjs.map +0 -1
  1325. package/dist/site-domain-CbI51Pc2.mjs +0 -113
  1326. package/dist/site-domain-CbI51Pc2.mjs.map +0 -1
  1327. package/dist/site-settings-CDdT4mVm.mjs +0 -50
  1328. package/dist/site-settings-CDdT4mVm.mjs.map +0 -1
  1329. package/dist/site-url-CrDZaAvo.mjs +0 -45
  1330. package/dist/site-url-CrDZaAvo.mjs.map +0 -1
  1331. package/dist/sitemap-name-W3BTor6X.mjs +0 -26
  1332. package/dist/sitemap-name-W3BTor6X.mjs.map +0 -1
  1333. package/dist/slug-BJhHKoOH.mjs +0 -16
  1334. package/dist/slug-BJhHKoOH.mjs.map +0 -1
  1335. package/dist/snapshot-BuI_2uDe.mjs +0 -414
  1336. package/dist/snapshot-BuI_2uDe.mjs.map +0 -1
  1337. package/dist/ssrf-LM_0wpGA.mjs +0 -406
  1338. package/dist/ssrf-LM_0wpGA.mjs.map +0 -1
  1339. package/dist/stage-DhzZuYaT.mjs +0 -662
  1340. package/dist/stage-DhzZuYaT.mjs.map +0 -1
  1341. package/dist/staged-DboEaWsV.mjs +0 -686
  1342. package/dist/staged-DboEaWsV.mjs.map +0 -1
  1343. package/dist/state-DCXDzjHq.mjs +0 -178
  1344. package/dist/state-DCXDzjHq.mjs.map +0 -1
  1345. package/dist/status-Dl85BK39.mjs +0 -30
  1346. package/dist/status-Dl85BK39.mjs.map +0 -1
  1347. package/dist/storage-query-BOBmeDMD.d.mts +0 -1615
  1348. package/dist/storage-query-BOBmeDMD.d.mts.map +0 -1
  1349. package/dist/tar-K40edFMt.mjs +0 -449
  1350. package/dist/tar-K40edFMt.mjs.map +0 -1
  1351. package/dist/target-BOighEY1.mjs +0 -27
  1352. package/dist/target-BOighEY1.mjs.map +0 -1
  1353. package/dist/taxonomies-DQSywBvX.mjs +0 -697
  1354. package/dist/taxonomies-DQSywBvX.mjs.map +0 -1
  1355. package/dist/taxonomies-Dj5eaobC.mjs +0 -939
  1356. package/dist/taxonomies-Dj5eaobC.mjs.map +0 -1
  1357. package/dist/taxonomy-QrNmTfIZ.mjs +0 -550
  1358. package/dist/taxonomy-QrNmTfIZ.mjs.map +0 -1
  1359. package/dist/tokens-j5L0as2H.mjs +0 -171
  1360. package/dist/tokens-j5L0as2H.mjs.map +0 -1
  1361. package/dist/transfer-CYEw8Tu4.mjs +0 -8873
  1362. package/dist/transfer-CYEw8Tu4.mjs.map +0 -1
  1363. package/dist/transfer-DDX10hkD.mjs +0 -166
  1364. package/dist/transfer-DDX10hkD.mjs.map +0 -1
  1365. package/dist/transfer-download-BAqq6GJv.mjs +0 -33
  1366. package/dist/transfer-download-BAqq6GJv.mjs.map +0 -1
  1367. package/dist/transformations-De44wqV_.mjs +0 -196
  1368. package/dist/transformations-De44wqV_.mjs.map +0 -1
  1369. package/dist/transport-1QjUhCRO.d.mts +0 -42
  1370. package/dist/transport-1QjUhCRO.d.mts.map +0 -1
  1371. package/dist/transport-Ds5pVX7p.mjs +0 -136
  1372. package/dist/transport-Ds5pVX7p.mjs.map +0 -1
  1373. package/dist/trusted-proxy-d4Tk6biT.mjs +0 -51
  1374. package/dist/trusted-proxy-d4Tk6biT.mjs.map +0 -1
  1375. package/dist/turnstile-DaFLtyrs.mjs +0 -58
  1376. package/dist/turnstile-DaFLtyrs.mjs.map +0 -1
  1377. package/dist/types-B4-1P2DK.d.mts +0 -227
  1378. package/dist/types-B4-1P2DK.d.mts.map +0 -1
  1379. package/dist/types-BKXA0f-c.mjs +0 -16
  1380. package/dist/types-BKXA0f-c.mjs.map +0 -1
  1381. package/dist/types-BiHcpUoO.d.mts +0 -374
  1382. package/dist/types-BiHcpUoO.d.mts.map +0 -1
  1383. package/dist/types-BihhvkyN.d.mts +0 -85
  1384. package/dist/types-BihhvkyN.d.mts.map +0 -1
  1385. package/dist/types-Bq9Wohd7.d.mts +0 -363
  1386. package/dist/types-Bq9Wohd7.d.mts.map +0 -1
  1387. package/dist/types-C-Xp0CcN.mjs +0 -103
  1388. package/dist/types-C-Xp0CcN.mjs.map +0 -1
  1389. package/dist/types-C4P7F1Vq.d.mts +0 -1741
  1390. package/dist/types-C4P7F1Vq.d.mts.map +0 -1
  1391. package/dist/types-CGaqwHw4.mjs +0 -37
  1392. package/dist/types-CGaqwHw4.mjs.map +0 -1
  1393. package/dist/types-D4ECCE4X.mjs +0 -77
  1394. package/dist/types-D4ECCE4X.mjs.map +0 -1
  1395. package/dist/types-DcRJp0vS.d.mts +0 -125
  1396. package/dist/types-DcRJp0vS.d.mts.map +0 -1
  1397. package/dist/types-Ff85fTzU.d.mts +0 -289
  1398. package/dist/types-Ff85fTzU.d.mts.map +0 -1
  1399. package/dist/types-UKr5Sf4y.d.mts +0 -916
  1400. package/dist/types-UKr5Sf4y.d.mts.map +0 -1
  1401. package/dist/types-YpN8hZW7.d.mts +0 -204
  1402. package/dist/types-YpN8hZW7.d.mts.map +0 -1
  1403. package/dist/update-check-DrlsK-tt.mjs +0 -161
  1404. package/dist/update-check-DrlsK-tt.mjs.map +0 -1
  1405. package/dist/upload-attempts-D8CPPvRU.mjs +0 -32
  1406. package/dist/upload-attempts-D8CPPvRU.mjs.map +0 -1
  1407. package/dist/url-pattern-Di4Nn3vP.mjs +0 -41
  1408. package/dist/url-pattern-Di4Nn3vP.mjs.map +0 -1
  1409. package/dist/user-B-ZdGjhI.mjs +0 -171
  1410. package/dist/user-B-ZdGjhI.mjs.map +0 -1
  1411. package/dist/utils-D7wL3r6-.mjs +0 -437
  1412. package/dist/utils-D7wL3r6-.mjs.map +0 -1
  1413. package/dist/validate-BSZbSUDk.mjs +0 -524
  1414. package/dist/validate-BSZbSUDk.mjs.map +0 -1
  1415. package/dist/validate-Dfv0DpZi.d.mts +0 -468
  1416. package/dist/validate-Dfv0DpZi.d.mts.map +0 -1
  1417. package/dist/validation-DRyC_Vm5.mjs +0 -219
  1418. package/dist/validation-DRyC_Vm5.mjs.map +0 -1
  1419. package/dist/version-C4kz0PcO.mjs +0 -7
  1420. package/dist/version-C4kz0PcO.mjs.map +0 -1
  1421. package/dist/version-jhs2BRtl.mjs +0 -9
  1422. package/dist/version-jhs2BRtl.mjs.map +0 -1
  1423. package/dist/video-DReZ48Un.mjs +0 -54
  1424. package/dist/video-DReZ48Un.mjs.map +0 -1
  1425. package/dist/virtual-modules-D0e6VbEv.mjs +0 -516
  1426. package/dist/virtual-modules-D0e6VbEv.mjs.map +0 -1
  1427. package/dist/widgets-BkcMzKct.mjs +0 -121
  1428. package/dist/widgets-BkcMzKct.mjs.map +0 -1
  1429. package/dist/wxr-taxonomies-BxI0CbTg.mjs +0 -453
  1430. package/dist/wxr-taxonomies-BxI0CbTg.mjs.map +0 -1
  1431. package/dist/wxr-taxonomies-Dad33GJi.d.mts +0 -34
  1432. package/dist/wxr-taxonomies-Dad33GJi.d.mts.map +0 -1
  1433. package/dist/zod-generator-BQilAboC.mjs +0 -424
  1434. package/dist/zod-generator-BQilAboC.mjs.map +0 -1
  1435. /package/dist/{api-tokens-D2zgAIEt.mjs → api-tokens-CdP49zVF.mjs} +0 -0
  1436. /package/dist/{ssrf-BvNItdxk.mjs → ssrf-DM0E-D_8.mjs} +0 -0
@@ -1,306 +0,0 @@
1
- import { sql } from "kysely";
2
- import { ulid } from "ulidx";
3
- import { Cron } from "croner";
4
-
5
- //#region src/plugins/cron.ts
6
- /**
7
- * Plugin Cron System
8
- *
9
- * Provides scheduled task execution for plugins:
10
- * - CronExecutor: claims overdue tasks, invokes per-plugin cron hook, updates next run.
11
- * - CronAccessImpl: per-plugin API for schedule/cancel/list.
12
- *
13
- */
14
- /** Matches the Workers runtime, which always runs in UTC, so Node hosts fire at the same instant. */
15
- const CRON_TIMEZONE = "UTC";
16
- /** Stale lock threshold in minutes */
17
- const STALE_LOCK_MINUTES = 10;
18
- const ISO_DATETIME_PATTERN = /^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:?\d{2})?$/;
19
- const ISO_TIMEZONE_PATTERN = /(?:Z|[+-]\d{2}:?\d{2})$/;
20
- /**
21
- * Executes overdue cron tasks.
22
- *
23
- * Called by the platform driver: the NodeCronScheduler timer on Node, or the
24
- * Worker's `scheduled()` handler (via runScheduledTasks) on Cloudflare.
25
- * Stateless — all state lives in the database.
26
- */
27
- var CronExecutor = class {
28
- /**
29
- * Resolves the database connection to use for this tick. A resolver (not a
30
- * captured instance) so connection-backed adapters work across events: on
31
- * Cloudflare the `scheduled()` handler installs an event-scoped connection
32
- * in ALS, and this resolves to it instead of the per-isolate singleton
33
- * whose socket belongs to an earlier request. Accepts a plain `Kysely` too
34
- * (wrapped in a constant resolver) for callers/tests that don't need ALS.
35
- */
36
- resolveDb;
37
- constructor(db, invokeCronHook, now = () => /* @__PURE__ */ new Date()) {
38
- this.invokeCronHook = invokeCronHook;
39
- this.now = now;
40
- this.resolveDb = typeof db === "function" ? db : () => db;
41
- }
42
- get db() {
43
- return this.resolveDb();
44
- }
45
- /**
46
- * Process all overdue tasks.
47
- *
48
- * 1. Atomically claim tasks whose next_run_at <= now, status = idle, enabled = 1.
49
- * 2. For each claimed task, invoke the plugin's cron hook.
50
- * 3. On success: compute next_run_at and reset to idle, or delete one-shots.
51
- * 4. On failure: reset to idle (retry on next tick).
52
- */
53
- async tick() {
54
- const currentTime = this.now();
55
- const now = currentTime.toISOString();
56
- let processed = 0;
57
- const claimed = await sql`
58
- UPDATE _emdash_cron_tasks
59
- SET status = 'running', locked_at = ${now}
60
- WHERE id IN (
61
- SELECT id FROM _emdash_cron_tasks
62
- WHERE next_run_at <= ${now}
63
- AND status = 'idle'
64
- AND enabled = 1
65
- ORDER BY next_run_at ASC
66
- LIMIT 10
67
- )
68
- RETURNING id, plugin_id, task_name, schedule, is_oneshot, data, next_run_at
69
- `.execute(this.db);
70
- for (const task of claimed.rows) {
71
- let parsedData;
72
- if (task.data) try {
73
- parsedData = JSON.parse(task.data);
74
- } catch {
75
- console.error(`[cron] Invalid JSON data for ${task.plugin_id}:${task.task_name}, skipping`);
76
- await sql`
77
- UPDATE _emdash_cron_tasks
78
- SET status = 'idle', locked_at = NULL, enabled = 0
79
- WHERE id = ${task.id}
80
- `.execute(this.db);
81
- continue;
82
- }
83
- const event = {
84
- name: task.task_name,
85
- data: parsedData,
86
- scheduledAt: task.next_run_at
87
- };
88
- let hookFailed = false;
89
- try {
90
- await this.invokeCronHook(task.plugin_id, event);
91
- } catch (error) {
92
- hookFailed = true;
93
- console.error(`[cron] Hook failed for ${task.plugin_id}:${task.task_name}:`, error);
94
- }
95
- if (task.is_oneshot) if (hookFailed) {
96
- const meta = parsedData?.__emdash != null && typeof parsedData.__emdash === "object" ? parsedData.__emdash : void 0;
97
- const raw = meta?.retryCount;
98
- const retryCount = typeof raw === "number" && Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;
99
- const MAX_ONESHOT_RETRIES = 5;
100
- if (retryCount >= MAX_ONESHOT_RETRIES) {
101
- console.error(`[cron] One-shot task ${task.plugin_id}:${task.task_name} exceeded ${MAX_ONESHOT_RETRIES} retries, removing`);
102
- await sql`
103
- DELETE FROM _emdash_cron_tasks WHERE id = ${task.id}
104
- `.execute(this.db);
105
- } else {
106
- const backoffMs = 6e4 * Math.pow(2, retryCount);
107
- await sql`
108
- UPDATE _emdash_cron_tasks
109
- SET status = 'idle', locked_at = NULL, next_run_at = ${new Date(currentTime.getTime() + backoffMs).toISOString()}, data = ${JSON.stringify({
110
- ...parsedData,
111
- __emdash: {
112
- ...meta,
113
- retryCount: retryCount + 1
114
- }
115
- })}
116
- WHERE id = ${task.id}
117
- `.execute(this.db);
118
- }
119
- } else await sql`
120
- DELETE FROM _emdash_cron_tasks WHERE id = ${task.id}
121
- `.execute(this.db);
122
- else {
123
- let nextRun;
124
- try {
125
- nextRun = nextCronTime(task.schedule, currentTime);
126
- } catch (error) {
127
- console.error(`[cron] Disabling unsatisfiable schedule for ${task.plugin_id}:${task.task_name}:`, error);
128
- await sql`
129
- UPDATE _emdash_cron_tasks
130
- SET status = 'idle', locked_at = NULL, last_run_at = ${now}, enabled = 0
131
- WHERE id = ${task.id}
132
- `.execute(this.db);
133
- processed++;
134
- continue;
135
- }
136
- await sql`
137
- UPDATE _emdash_cron_tasks
138
- SET status = 'idle',
139
- locked_at = NULL,
140
- last_run_at = ${now},
141
- next_run_at = ${nextRun}
142
- WHERE id = ${task.id}
143
- `.execute(this.db);
144
- }
145
- processed++;
146
- }
147
- return processed;
148
- }
149
- /**
150
- * Recover tasks stuck in 'running' for more than STALE_LOCK_MINUTES.
151
- * These likely crashed mid-execution.
152
- */
153
- async recoverStaleLocks() {
154
- const result = await sql`
155
- UPDATE _emdash_cron_tasks
156
- SET status = 'idle', locked_at = NULL
157
- WHERE status = 'running'
158
- AND locked_at < ${(/* @__PURE__ */ new Date(this.now().getTime() - STALE_LOCK_MINUTES * 60 * 1e3)).toISOString()}
159
- `.execute(this.db);
160
- return Number(result.numAffectedRows ?? 0);
161
- }
162
- /**
163
- * Get the next due time across all enabled tasks.
164
- * Returns null if no tasks are scheduled.
165
- */
166
- async getNextDueTime() {
167
- return (await sql`
168
- SELECT MIN(next_run_at) as next
169
- FROM _emdash_cron_tasks
170
- WHERE status = 'idle' AND enabled = 1
171
- `.execute(this.db)).rows[0]?.next ?? null;
172
- }
173
- };
174
- /**
175
- * Per-plugin cron API implementation.
176
- * Scoped to a single plugin ID — plugins cannot see or modify other plugins' tasks.
177
- */
178
- var CronAccessImpl = class {
179
- constructor(db, pluginId, reschedule, now = () => /* @__PURE__ */ new Date()) {
180
- this.db = db;
181
- this.pluginId = pluginId;
182
- this.reschedule = reschedule;
183
- this.now = now;
184
- }
185
- async schedule(name, opts) {
186
- validateTaskName(name);
187
- validateSchedule(opts.schedule);
188
- const oneshot = isOneShot(opts.schedule);
189
- const nextRun = oneshot ? oneShotTime(opts.schedule) : nextCronTime(opts.schedule, this.now());
190
- const dataJson = opts.data ? JSON.stringify(opts.data) : null;
191
- await sql`
192
- INSERT INTO _emdash_cron_tasks (id, plugin_id, task_name, schedule, is_oneshot, data, next_run_at, status, enabled)
193
- VALUES (${ulid()}, ${this.pluginId}, ${name}, ${opts.schedule}, ${oneshot ? 1 : 0}, ${dataJson}, ${nextRun}, 'idle', 1)
194
- ON CONFLICT (plugin_id, task_name) DO UPDATE SET
195
- schedule = ${opts.schedule},
196
- is_oneshot = ${oneshot ? 1 : 0},
197
- data = ${dataJson},
198
- next_run_at = ${nextRun},
199
- status = CASE WHEN _emdash_cron_tasks.status = 'running' THEN 'running' ELSE 'idle' END,
200
- locked_at = CASE WHEN _emdash_cron_tasks.status = 'running' THEN _emdash_cron_tasks.locked_at ELSE NULL END,
201
- enabled = 1
202
- `.execute(this.db);
203
- this.reschedule();
204
- }
205
- async cancel(name) {
206
- await sql`
207
- DELETE FROM _emdash_cron_tasks
208
- WHERE plugin_id = ${this.pluginId} AND task_name = ${name}
209
- `.execute(this.db);
210
- this.reschedule();
211
- }
212
- async list() {
213
- return (await sql`
214
- SELECT task_name, schedule, next_run_at, last_run_at
215
- FROM _emdash_cron_tasks
216
- WHERE plugin_id = ${this.pluginId} AND enabled = 1
217
- ORDER BY next_run_at ASC
218
- `.execute(this.db)).rows.map((row) => ({
219
- name: row.task_name,
220
- schedule: row.schedule,
221
- nextRunAt: row.next_run_at,
222
- lastRunAt: row.last_run_at
223
- }));
224
- }
225
- };
226
- /**
227
- * Enable or disable all cron tasks for a plugin.
228
- * Called by admin disable/enable endpoints and PluginManager lifecycle.
229
- * Gracefully handles the cron table not existing yet (pre-migration).
230
- */
231
- async function setCronTasksEnabled(db, pluginId, enabled) {
232
- try {
233
- await sql`
234
- UPDATE _emdash_cron_tasks
235
- SET enabled = ${enabled ? 1 : 0}
236
- WHERE plugin_id = ${pluginId}
237
- `.execute(db);
238
- } catch {}
239
- }
240
- /**
241
- * Compute the next fire time for a cron expression, resolved in UTC.
242
- * Supports standard cron (5-field), extended (6-field with seconds), and
243
- * aliases like @daily, @weekly, @hourly, @monthly, @yearly.
244
- */
245
- function nextCronTime(expression, currentTime = /* @__PURE__ */ new Date()) {
246
- const next = new Cron(expression, { timezone: CRON_TIMEZONE }).nextRun(currentTime);
247
- if (!next) throw new Error(`Invalid cron expression or no future run: "${expression}"`);
248
- return next.toISOString();
249
- }
250
- /**
251
- * Check whether a string is a valid cron expression.
252
- */
253
- function isCronExpression(schedule) {
254
- try {
255
- new Cron(schedule, { timezone: CRON_TIMEZONE });
256
- return true;
257
- } catch {
258
- return false;
259
- }
260
- }
261
- /**
262
- * Check if a schedule string is a one-shot (ISO 8601 datetime) rather than
263
- * a recurring cron expression.
264
- *
265
- * Recognizes the supported ISO date-time shape before consulting the cron
266
- * parser, which also accepts ISO timestamps. Other values are parsed as cron
267
- * first so expressions like "1-5 * * * *" are not misclassified as dates.
268
- */
269
- function isOneShot(schedule) {
270
- if (schedule.startsWith("@")) return false;
271
- if (ISO_DATETIME_PATTERN.test(schedule)) return !isNaN(Date.parse(schedule));
272
- if (isCronExpression(schedule)) return false;
273
- return !isNaN(Date.parse(schedule));
274
- }
275
- function oneShotTime(schedule) {
276
- const withoutZone = ISO_DATETIME_PATTERN.test(schedule) && !ISO_TIMEZONE_PATTERN.test(schedule);
277
- const normalized = ISO_DATETIME_PATTERN.test(schedule) ? schedule.replace(" ", "T") : schedule;
278
- const input = withoutZone ? `${normalized}Z` : normalized;
279
- return new Date(input).toISOString();
280
- }
281
- /** Max length for a task name */
282
- const MAX_TASK_NAME_LENGTH = 128;
283
- /** Task name pattern: alphanumeric, dashes, underscores */
284
- const TASK_NAME_RE = /^[a-zA-Z][a-zA-Z0-9_-]*$/;
285
- /**
286
- * Validate a cron task name.
287
- * Must be non-empty, ≤128 chars, alphanumeric with dashes/underscores.
288
- */
289
- function validateTaskName(name) {
290
- if (!name || name.length > MAX_TASK_NAME_LENGTH) throw new Error(`Invalid task name: must be 1-${MAX_TASK_NAME_LENGTH} characters, got ${name.length}`);
291
- if (!TASK_NAME_RE.test(name)) throw new Error(`Invalid task name "${name}": must start with a letter and contain only letters, numbers, dashes, or underscores`);
292
- }
293
- /**
294
- * Validate a schedule string at registration time.
295
- * Must be a valid cron expression or a parseable ISO 8601 datetime.
296
- */
297
- function validateSchedule(schedule) {
298
- if (!schedule || schedule.length > 256) throw new Error(`Invalid schedule: must be 1-256 characters, got ${schedule.length}`);
299
- if (isCronExpression(schedule)) return;
300
- const parsed = Date.parse(schedule);
301
- if (isNaN(parsed)) throw new Error(`Invalid schedule "${schedule}": must be a valid cron expression or ISO 8601 datetime`);
302
- }
303
-
304
- //#endregion
305
- export { CronExecutor as n, setCronTasksEnabled as r, CronAccessImpl as t };
306
- //# sourceMappingURL=cron-C6ytTOLw.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cron-C6ytTOLw.mjs","names":[],"sources":["../src/plugins/cron.ts"],"sourcesContent":["/**\n * Plugin Cron System\n *\n * Provides scheduled task execution for plugins:\n * - CronExecutor: claims overdue tasks, invokes per-plugin cron hook, updates next run.\n * - CronAccessImpl: per-plugin API for schedule/cancel/list.\n *\n */\n\nimport { Cron } from \"croner\";\nimport type { Kysely } from \"kysely\";\nimport { sql } from \"kysely\";\nimport { ulid } from \"ulidx\";\n\nimport type { Database } from \"../database/types.js\";\nimport type { CronAccess, CronEvent, CronTaskInfo } from \"./types.js\";\n\n/** Matches the Workers runtime, which always runs in UTC, so Node hosts fire at the same instant. */\nconst CRON_TIMEZONE = \"UTC\";\n\n/** Stale lock threshold in minutes */\nconst STALE_LOCK_MINUTES = 10;\nconst ISO_DATETIME_PATTERN =\n\t/^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-]\\d{2}:?\\d{2})?$/;\nconst ISO_TIMEZONE_PATTERN = /(?:Z|[+-]\\d{2}:?\\d{2})$/;\n\n/**\n * Callback to invoke a plugin's cron hook.\n * Provided by PluginManager so CronExecutor stays decoupled from the hook pipeline.\n */\nexport type InvokeCronHookFn = (pluginId: string, event: CronEvent) => Promise<void>;\n\n/**\n * Callback to notify the scheduler that the next due time may have changed.\n */\nexport type RescheduleFn = () => void;\n\n// ─── CronExecutor ──────────────────────────────────────────────────────────\n\n/**\n * Executes overdue cron tasks.\n *\n * Called by the platform driver: the NodeCronScheduler timer on Node, or the\n * Worker's `scheduled()` handler (via runScheduledTasks) on Cloudflare.\n * Stateless — all state lives in the database.\n */\nexport class CronExecutor {\n\t/**\n\t * Resolves the database connection to use for this tick. A resolver (not a\n\t * captured instance) so connection-backed adapters work across events: on\n\t * Cloudflare the `scheduled()` handler installs an event-scoped connection\n\t * in ALS, and this resolves to it instead of the per-isolate singleton\n\t * whose socket belongs to an earlier request. Accepts a plain `Kysely` too\n\t * (wrapped in a constant resolver) for callers/tests that don't need ALS.\n\t */\n\tprivate readonly resolveDb: () => Kysely<Database>;\n\n\tconstructor(\n\t\tdb: Kysely<Database> | (() => Kysely<Database>),\n\t\tprivate invokeCronHook: InvokeCronHookFn,\n\t\tprivate readonly now: () => Date = () => new Date(),\n\t) {\n\t\tthis.resolveDb = typeof db === \"function\" ? db : () => db;\n\t}\n\n\tprivate get db(): Kysely<Database> {\n\t\treturn this.resolveDb();\n\t}\n\n\t/**\n\t * Process all overdue tasks.\n\t *\n\t * 1. Atomically claim tasks whose next_run_at <= now, status = idle, enabled = 1.\n\t * 2. For each claimed task, invoke the plugin's cron hook.\n\t * 3. On success: compute next_run_at and reset to idle, or delete one-shots.\n\t * 4. On failure: reset to idle (retry on next tick).\n\t */\n\tasync tick(): Promise<number> {\n\t\tconst currentTime = this.now();\n\t\tconst now = currentTime.toISOString();\n\t\tlet processed = 0;\n\n\t\t// Claim overdue tasks atomically\n\t\tconst claimed = await sql<{\n\t\t\tid: string;\n\t\t\tplugin_id: string;\n\t\t\ttask_name: string;\n\t\t\tschedule: string;\n\t\t\tis_oneshot: number;\n\t\t\tdata: string | null;\n\t\t\tnext_run_at: string;\n\t\t}>`\n\t\t\tUPDATE _emdash_cron_tasks\n\t\t\tSET status = 'running', locked_at = ${now}\n\t\t\tWHERE id IN (\n\t\t\t\tSELECT id FROM _emdash_cron_tasks\n\t\t\t\tWHERE next_run_at <= ${now}\n\t\t\t\t AND status = 'idle'\n\t\t\t\t AND enabled = 1\n\t\t\t\tORDER BY next_run_at ASC\n\t\t\t\tLIMIT 10\n\t\t\t)\n\t\t\tRETURNING id, plugin_id, task_name, schedule, is_oneshot, data, next_run_at\n\t\t`.execute(this.db);\n\n\t\tfor (const task of claimed.rows) {\n\t\t\t// Parse task data safely ��� malformed JSON must not crash the entire batch\n\t\t\tlet parsedData: Record<string, unknown> | undefined;\n\t\t\tif (task.data) {\n\t\t\t\ttry {\n\t\t\t\t\tparsedData = JSON.parse(task.data) as Record<string, unknown>;\n\t\t\t\t} catch {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`[cron] Invalid JSON data for ${task.plugin_id}:${task.task_name}, skipping`,\n\t\t\t\t\t);\n\t\t\t\t\tawait sql`\n\t\t\t\t\t\tUPDATE _emdash_cron_tasks\n\t\t\t\t\t\tSET status = 'idle', locked_at = NULL, enabled = 0\n\t\t\t\t\t\tWHERE id = ${task.id}\n\t\t\t\t\t`.execute(this.db);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst event: CronEvent = {\n\t\t\t\tname: task.task_name,\n\t\t\t\tdata: parsedData,\n\t\t\t\tscheduledAt: task.next_run_at,\n\t\t\t};\n\n\t\t\tlet hookFailed = false;\n\t\t\ttry {\n\t\t\t\tawait this.invokeCronHook(task.plugin_id, event);\n\t\t\t} catch (error) {\n\t\t\t\thookFailed = true;\n\t\t\t\tconsole.error(`[cron] Hook failed for ${task.plugin_id}:${task.task_name}:`, error);\n\t\t\t}\n\n\t\t\tif (task.is_oneshot) {\n\t\t\t\tif (hookFailed) {\n\t\t\t\t\t// Retry metadata is namespaced under __emdash to avoid collisions\n\t\t\t\t\t// with plugin-controlled data fields.\n\t\t\t\t\tconst meta =\n\t\t\t\t\t\tparsedData?.__emdash != null && typeof parsedData.__emdash === \"object\"\n\t\t\t\t\t\t\t? (parsedData.__emdash as Record<string, unknown>)\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\tconst raw = meta?.retryCount;\n\t\t\t\t\tconst retryCount =\n\t\t\t\t\t\ttypeof raw === \"number\" && Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;\n\t\t\t\t\tconst MAX_ONESHOT_RETRIES = 5;\n\n\t\t\t\t\tif (retryCount >= MAX_ONESHOT_RETRIES) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`[cron] One-shot task ${task.plugin_id}:${task.task_name} exceeded ${MAX_ONESHOT_RETRIES} retries, removing`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tawait sql`\n\t\t\t\t\t\tDELETE FROM _emdash_cron_tasks WHERE id = ${task.id}\n\t\t\t\t\t`.execute(this.db);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Retry with exponential backoff: 1m, 2m, 4m, 8m, 16m\n\t\t\t\t\t\tconst backoffMs = 60_000 * Math.pow(2, retryCount);\n\t\t\t\t\t\tconst retryAt = new Date(currentTime.getTime() + backoffMs).toISOString();\n\t\t\t\t\t\tconst updatedData = JSON.stringify({\n\t\t\t\t\t\t\t...parsedData,\n\t\t\t\t\t\t\t__emdash: { ...meta, retryCount: retryCount + 1 },\n\t\t\t\t\t\t});\n\t\t\t\t\t\tawait sql`\n\t\t\t\t\t\tUPDATE _emdash_cron_tasks\n\t\t\t\t\t\tSET status = 'idle', locked_at = NULL, next_run_at = ${retryAt}, data = ${updatedData}\n\t\t\t\t\t\tWHERE id = ${task.id}\n\t\t\t\t\t`.execute(this.db);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Success: delete the one-shot task\n\t\t\t\t\tawait sql`\n\t\t\t\t\t\tDELETE FROM _emdash_cron_tasks WHERE id = ${task.id}\n\t\t\t\t\t`.execute(this.db);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Recurring: compute next run and reset\n\t\t\t\tlet nextRun: string;\n\t\t\t\ttry {\n\t\t\t\t\tnextRun = nextCronTime(task.schedule, currentTime);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`[cron] Disabling unsatisfiable schedule for ${task.plugin_id}:${task.task_name}:`,\n\t\t\t\t\t\terror,\n\t\t\t\t\t);\n\t\t\t\t\tawait sql`\n\t\t\t\t\t\tUPDATE _emdash_cron_tasks\n\t\t\t\t\t\tSET status = 'idle', locked_at = NULL, last_run_at = ${now}, enabled = 0\n\t\t\t\t\t\tWHERE id = ${task.id}\n\t\t\t\t\t`.execute(this.db);\n\t\t\t\t\tprocessed++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tawait sql`\n\t\t\t\t\tUPDATE _emdash_cron_tasks\n\t\t\t\t\tSET status = 'idle',\n\t\t\t\t\t\tlocked_at = NULL,\n\t\t\t\t\t\tlast_run_at = ${now},\n\t\t\t\t\t\tnext_run_at = ${nextRun}\n\t\t\t\t\tWHERE id = ${task.id}\n\t\t\t\t`.execute(this.db);\n\t\t\t}\n\n\t\t\tprocessed++;\n\t\t}\n\n\t\treturn processed;\n\t}\n\n\t/**\n\t * Recover tasks stuck in 'running' for more than STALE_LOCK_MINUTES.\n\t * These likely crashed mid-execution.\n\t */\n\tasync recoverStaleLocks(): Promise<number> {\n\t\tconst cutoff = new Date(this.now().getTime() - STALE_LOCK_MINUTES * 60 * 1000).toISOString();\n\n\t\tconst result = await sql`\n\t\t\tUPDATE _emdash_cron_tasks\n\t\t\tSET status = 'idle', locked_at = NULL\n\t\t\tWHERE status = 'running'\n\t\t\t AND locked_at < ${cutoff}\n\t\t`.execute(this.db);\n\n\t\treturn Number(result.numAffectedRows ?? 0);\n\t}\n\n\t/**\n\t * Get the next due time across all enabled tasks.\n\t * Returns null if no tasks are scheduled.\n\t */\n\tasync getNextDueTime(): Promise<string | null> {\n\t\tconst result = await sql<{ next: string | null }>`\n\t\t\tSELECT MIN(next_run_at) as next\n\t\t\tFROM _emdash_cron_tasks\n\t\t\tWHERE status = 'idle' AND enabled = 1\n\t\t`.execute(this.db);\n\n\t\treturn result.rows[0]?.next ?? null;\n\t}\n}\n\n// ─── CronAccessImpl ────────────────────────────────────────────────────────\n\n/**\n * Per-plugin cron API implementation.\n * Scoped to a single plugin ID — plugins cannot see or modify other plugins' tasks.\n */\nexport class CronAccessImpl implements CronAccess {\n\tconstructor(\n\t\tprivate db: Kysely<Database>,\n\t\tprivate pluginId: string,\n\t\tprivate reschedule: RescheduleFn,\n\t\tprivate readonly now: () => Date = () => new Date(),\n\t) {}\n\n\tasync schedule(\n\t\tname: string,\n\t\topts: { schedule: string; data?: Record<string, unknown> },\n\t): Promise<void> {\n\t\tvalidateTaskName(name);\n\t\tvalidateSchedule(opts.schedule);\n\n\t\tconst oneshot = isOneShot(opts.schedule);\n\t\tconst nextRun = oneshot ? oneShotTime(opts.schedule) : nextCronTime(opts.schedule, this.now());\n\t\tconst dataJson = opts.data ? JSON.stringify(opts.data) : null;\n\t\tconst id = ulid();\n\n\t\t// Upsert: if task already exists for this plugin+name, update it.\n\t\t// Guard: don't clobber a task that is currently executing.\n\t\tawait sql`\n\t\t\tINSERT INTO _emdash_cron_tasks (id, plugin_id, task_name, schedule, is_oneshot, data, next_run_at, status, enabled)\n\t\t\tVALUES (${id}, ${this.pluginId}, ${name}, ${opts.schedule}, ${oneshot ? 1 : 0}, ${dataJson}, ${nextRun}, 'idle', 1)\n\t\t\tON CONFLICT (plugin_id, task_name) DO UPDATE SET\n\t\t\t\tschedule = ${opts.schedule},\n\t\t\t\tis_oneshot = ${oneshot ? 1 : 0},\n\t\t\t\tdata = ${dataJson},\n\t\t\t\tnext_run_at = ${nextRun},\n\t\t\t\tstatus = CASE WHEN _emdash_cron_tasks.status = 'running' THEN 'running' ELSE 'idle' END,\n\t\t\t\tlocked_at = CASE WHEN _emdash_cron_tasks.status = 'running' THEN _emdash_cron_tasks.locked_at ELSE NULL END,\n\t\t\t\tenabled = 1\n\t\t`.execute(this.db);\n\n\t\tthis.reschedule();\n\t}\n\n\tasync cancel(name: string): Promise<void> {\n\t\tawait sql`\n\t\t\tDELETE FROM _emdash_cron_tasks\n\t\t\tWHERE plugin_id = ${this.pluginId} AND task_name = ${name}\n\t\t`.execute(this.db);\n\n\t\tthis.reschedule();\n\t}\n\n\tasync list(): Promise<CronTaskInfo[]> {\n\t\tconst rows = await sql<{\n\t\t\ttask_name: string;\n\t\t\tschedule: string;\n\t\t\tnext_run_at: string;\n\t\t\tlast_run_at: string | null;\n\t\t}>`\n\t\t\tSELECT task_name, schedule, next_run_at, last_run_at\n\t\t\tFROM _emdash_cron_tasks\n\t\t\tWHERE plugin_id = ${this.pluginId} AND enabled = 1\n\t\t\tORDER BY next_run_at ASC\n\t\t`.execute(this.db);\n\n\t\treturn rows.rows.map((row) => ({\n\t\t\tname: row.task_name,\n\t\t\tschedule: row.schedule,\n\t\t\tnextRunAt: row.next_run_at,\n\t\t\tlastRunAt: row.last_run_at,\n\t\t}));\n\t}\n}\n\n// ─── Cron task lifecycle helpers ────────────────────────────────────────────\n\n/**\n * Enable or disable all cron tasks for a plugin.\n * Called by admin disable/enable endpoints and PluginManager lifecycle.\n * Gracefully handles the cron table not existing yet (pre-migration).\n */\nexport async function setCronTasksEnabled(\n\tdb: Kysely<Database>,\n\tpluginId: string,\n\tenabled: boolean,\n): Promise<void> {\n\ttry {\n\t\tawait sql`\n\t\t\tUPDATE _emdash_cron_tasks\n\t\t\tSET enabled = ${enabled ? 1 : 0}\n\t\t\tWHERE plugin_id = ${pluginId}\n\t\t`.execute(db);\n\t} catch {\n\t\t// Cron table may not exist yet (pre-migration). Non-fatal.\n\t}\n}\n\n// ─── Cron utilities ────────────────────────────────────────────────────────\n\n/**\n * Compute the next fire time for a cron expression, resolved in UTC.\n * Supports standard cron (5-field), extended (6-field with seconds), and\n * aliases like @daily, @weekly, @hourly, @monthly, @yearly.\n */\nexport function nextCronTime(expression: string, currentTime: Date = new Date()): string {\n\tconst job = new Cron(expression, { timezone: CRON_TIMEZONE });\n\tconst next = job.nextRun(currentTime);\n\tif (!next) {\n\t\tthrow new Error(`Invalid cron expression or no future run: \"${expression}\"`);\n\t}\n\treturn next.toISOString();\n}\n\n/**\n * Check whether a string is a valid cron expression.\n */\nfunction isCronExpression(schedule: string): boolean {\n\ttry {\n\t\tconst _cron = new Cron(schedule, { timezone: CRON_TIMEZONE });\n\t\tvoid _cron;\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Check if a schedule string is a one-shot (ISO 8601 datetime) rather than\n * a recurring cron expression.\n *\n * Recognizes the supported ISO date-time shape before consulting the cron\n * parser, which also accepts ISO timestamps. Other values are parsed as cron\n * first so expressions like \"1-5 * * * *\" are not misclassified as dates.\n */\nexport function isOneShot(schedule: string): boolean {\n\tif (schedule.startsWith(\"@\")) return false;\n\tif (ISO_DATETIME_PATTERN.test(schedule)) {\n\t\treturn !isNaN(Date.parse(schedule));\n\t}\n\tif (isCronExpression(schedule)) return false;\n\treturn !isNaN(Date.parse(schedule));\n}\n\nfunction oneShotTime(schedule: string): string {\n\tconst withoutZone = ISO_DATETIME_PATTERN.test(schedule) && !ISO_TIMEZONE_PATTERN.test(schedule);\n\tconst normalized = ISO_DATETIME_PATTERN.test(schedule) ? schedule.replace(\" \", \"T\") : schedule;\n\tconst input = withoutZone ? `${normalized}Z` : normalized;\n\treturn new Date(input).toISOString();\n}\n\n/** Max length for a task name */\nconst MAX_TASK_NAME_LENGTH = 128;\n/** Task name pattern: alphanumeric, dashes, underscores */\nconst TASK_NAME_RE = /^[a-zA-Z][a-zA-Z0-9_-]*$/;\n\n/**\n * Validate a cron task name.\n * Must be non-empty, ≤128 chars, alphanumeric with dashes/underscores.\n */\nexport function validateTaskName(name: string): void {\n\tif (!name || name.length > MAX_TASK_NAME_LENGTH) {\n\t\tthrow new Error(\n\t\t\t`Invalid task name: must be 1-${MAX_TASK_NAME_LENGTH} characters, got ${name.length}`,\n\t\t);\n\t}\n\tif (!TASK_NAME_RE.test(name)) {\n\t\tthrow new Error(\n\t\t\t`Invalid task name \"${name}\": must start with a letter and contain only letters, numbers, dashes, or underscores`,\n\t\t);\n\t}\n}\n\n/**\n * Validate a schedule string at registration time.\n * Must be a valid cron expression or a parseable ISO 8601 datetime.\n */\nexport function validateSchedule(schedule: string): void {\n\tif (!schedule || schedule.length > 256) {\n\t\tthrow new Error(`Invalid schedule: must be 1-256 characters, got ${schedule.length}`);\n\t}\n\n\t// Try cron first\n\tif (isCronExpression(schedule)) return;\n\n\tconst parsed = Date.parse(schedule);\n\tif (isNaN(parsed)) {\n\t\tthrow new Error(\n\t\t\t`Invalid schedule \"${schedule}\": must be a valid cron expression or ISO 8601 datetime`,\n\t\t);\n\t}\n}\n"],"mappings":"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"}
@@ -1,151 +0,0 @@
1
- import { t as validateIdentifier } from "./validate-DANX1-Qi.mjs";
2
- import { t as OptionsRepository } from "./options-DhrI7eMv.mjs";
3
- import { t as ContentRepository } from "./content-CcHrqkgp.mjs";
4
- import { t as MediaRepository } from "./media-IT8hQleU.mjs";
5
- import { t as UserRepository } from "./user-B-ZdGjhI.mjs";
6
- import { r as isScheduledPolicyRejection, t as SCHEDULED_POLICY_REJECTION_PREFIX } from "./content-policy-Dm32n9C6.mjs";
7
- import { sql } from "kysely";
8
-
9
- //#region src/scheduler-health.ts
10
- const SCHEDULER_HEARTBEAT_OPTION = "system:scheduler:last_completed_at";
11
- const SCHEDULER_STALE_AFTER_MS = 300 * 1e3;
12
- async function recordSchedulerHeartbeat(db, completedAt = /* @__PURE__ */ new Date()) {
13
- await new OptionsRepository(db).set(SCHEDULER_HEARTBEAT_OPTION, completedAt.toISOString());
14
- }
15
- async function recordSchedulerHeartbeatSafely(db, completedAt = /* @__PURE__ */ new Date()) {
16
- try {
17
- await recordSchedulerHeartbeat(db, completedAt);
18
- } catch (error) {
19
- console.error("[scheduler] Failed to record heartbeat:", error);
20
- }
21
- }
22
- async function getSchedulerHealth(db, now = /* @__PURE__ */ new Date()) {
23
- const lastCompletedAt = await new OptionsRepository(db).get(SCHEDULER_HEARTBEAT_OPTION);
24
- const lastCompletedAtMs = lastCompletedAt ? Date.parse(lastCompletedAt) : NaN;
25
- if (!lastCompletedAt || Number.isNaN(lastCompletedAtMs)) return {
26
- status: "unknown",
27
- lastCompletedAt: null
28
- };
29
- return {
30
- status: now.getTime() - lastCompletedAtMs > SCHEDULER_STALE_AFTER_MS ? "stale" : "healthy",
31
- lastCompletedAt
32
- };
33
- }
34
-
35
- //#endregion
36
- //#region src/api/handlers/dashboard.ts
37
- /**
38
- * Dashboard stats handler
39
- *
40
- * Returns summary data for the admin dashboard in a single request:
41
- * collection content counts, media count, user count, and recent
42
- * content across all collections.
43
- */
44
- const POLICY_REJECTION_PREVIEW_LIMIT = 20;
45
- /**
46
- * Fetch dashboard statistics.
47
- *
48
- * Queries are intentionally lightweight — counts use indexed columns,
49
- * and recent items are capped at 10.
50
- */
51
- async function handleDashboardStats(db, now = /* @__PURE__ */ new Date()) {
52
- try {
53
- const collections = await db.selectFrom("_emdash_collections").select(["slug", "label"]).orderBy("slug", "asc").execute();
54
- const contentRepo = new ContentRepository(db);
55
- const collectionStats = await Promise.all(collections.map(async (col) => {
56
- const stats = await contentRepo.getStats(col.slug, now);
57
- return {
58
- slug: col.slug,
59
- label: col.label,
60
- total: stats.total,
61
- published: stats.published,
62
- draft: stats.draft,
63
- scheduled: stats.scheduled,
64
- overdueScheduled: stats.overdueScheduled
65
- };
66
- }));
67
- const mediaRepo = new MediaRepository(db);
68
- const userRepo = new UserRepository(db);
69
- const optionsRepo = new OptionsRepository(db);
70
- const [mediaCount, userCount, schedulerHealth, policyRejectedScheduled, versionedPolicyRejectionOptions] = await Promise.all([
71
- mediaRepo.count(),
72
- userRepo.count(),
73
- getSchedulerHealth(db, now),
74
- optionsRepo.countByPrefix(SCHEDULED_POLICY_REJECTION_PREFIX),
75
- optionsRepo.getVersionedByPrefix(SCHEDULED_POLICY_REJECTION_PREFIX, { limit: POLICY_REJECTION_PREVIEW_LIMIT })
76
- ]);
77
- const policyRejections = [...versionedPolicyRejectionOptions.values()].filter(({ value }) => isScheduledPolicyRejection(value)).map(({ value, revision }) => ({
78
- ...value,
79
- _rev: revision
80
- }));
81
- return {
82
- success: true,
83
- data: {
84
- collections: collectionStats,
85
- mediaCount,
86
- userCount,
87
- recentItems: await fetchRecentItems(db, collections),
88
- schedulerHealth,
89
- policyRejectedScheduled,
90
- policyRejections
91
- }
92
- };
93
- } catch (error) {
94
- console.error("Dashboard stats error:", error);
95
- return {
96
- success: false,
97
- error: {
98
- code: "DASHBOARD_STATS_ERROR",
99
- message: "Failed to load dashboard statistics"
100
- }
101
- };
102
- }
103
- }
104
- /**
105
- * Fetch the 10 most recently updated items across all collections.
106
- *
107
- * Uses UNION ALL over each ec_* table. The query is safe because
108
- * collection slugs come from the system table and are validated.
109
- *
110
- * `title` is not a standard column — it's a user-defined field. We query
111
- * `_emdash_fields` to discover which collections have one and fall back
112
- * to `slug` (which is always present) otherwise.
113
- */
114
- async function fetchRecentItems(db, collections) {
115
- if (collections.length === 0) return [];
116
- const titleFields = await db.selectFrom("_emdash_fields as f").innerJoin("_emdash_collections as c", "c.id", "f.collection_id").select(["c.slug as collection_slug"]).where("f.slug", "=", "title").execute();
117
- const collectionsWithTitle = new Set(titleFields.map((r) => r.collection_slug));
118
- return (await Promise.all(collections.map(async (col) => {
119
- validateIdentifier(col.slug);
120
- const table = `ec_${col.slug}`;
121
- const titleExpr = collectionsWithTitle.has(col.slug) ? sql`COALESCE(title, slug, id)` : sql`COALESCE(slug, id)`;
122
- return (await sql`
123
- SELECT
124
- id,
125
- ${sql.lit(col.slug)} AS collection,
126
- ${sql.lit(col.label)} AS collection_label,
127
- ${titleExpr} AS title,
128
- slug,
129
- status,
130
- updated_at,
131
- author_id
132
- FROM ${sql.ref(table)}
133
- WHERE deleted_at IS NULL
134
- ORDER BY updated_at DESC
135
- LIMIT 10
136
- `.execute(db)).rows;
137
- }))).flat().toSorted((a, b) => a.updated_at < b.updated_at ? 1 : a.updated_at > b.updated_at ? -1 : 0).slice(0, 10).map((row) => ({
138
- id: row.id,
139
- collection: row.collection,
140
- collectionLabel: row.collection_label,
141
- title: row.title,
142
- slug: row.slug,
143
- status: row.status,
144
- updatedAt: row.updated_at,
145
- authorId: row.author_id
146
- }));
147
- }
148
-
149
- //#endregion
150
- export { recordSchedulerHeartbeatSafely as n, handleDashboardStats as t };
151
- //# sourceMappingURL=dashboard-7_FYfafc.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dashboard-7_FYfafc.mjs","names":[],"sources":["../src/scheduler-health.ts","../src/api/handlers/dashboard.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\n\nimport { OptionsRepository } from \"./database/repositories/options.js\";\nimport type { Database } from \"./database/types.js\";\n\nexport const SCHEDULER_HEARTBEAT_OPTION = \"system:scheduler:last_completed_at\";\nexport const SCHEDULER_STALE_AFTER_MS = 5 * 60 * 1000;\n\nexport interface SchedulerHealth {\n\tstatus: \"healthy\" | \"stale\" | \"unknown\";\n\tlastCompletedAt: string | null;\n}\n\nexport async function recordSchedulerHeartbeat(\n\tdb: Kysely<Database>,\n\tcompletedAt = new Date(),\n): Promise<void> {\n\tawait new OptionsRepository(db).set(SCHEDULER_HEARTBEAT_OPTION, completedAt.toISOString());\n}\n\nexport async function recordSchedulerHeartbeatSafely(\n\tdb: Kysely<Database>,\n\tcompletedAt = new Date(),\n): Promise<void> {\n\ttry {\n\t\tawait recordSchedulerHeartbeat(db, completedAt);\n\t} catch (error) {\n\t\tconsole.error(\"[scheduler] Failed to record heartbeat:\", error);\n\t}\n}\n\nexport async function getSchedulerHealth(\n\tdb: Kysely<Database>,\n\tnow = new Date(),\n): Promise<SchedulerHealth> {\n\tconst lastCompletedAt = await new OptionsRepository(db).get<string>(SCHEDULER_HEARTBEAT_OPTION);\n\tconst lastCompletedAtMs = lastCompletedAt ? Date.parse(lastCompletedAt) : Number.NaN;\n\tif (!lastCompletedAt || Number.isNaN(lastCompletedAtMs)) {\n\t\treturn { status: \"unknown\", lastCompletedAt: null };\n\t}\n\n\treturn {\n\t\tstatus: now.getTime() - lastCompletedAtMs > SCHEDULER_STALE_AFTER_MS ? \"stale\" : \"healthy\",\n\t\tlastCompletedAt,\n\t};\n}\n","/**\n * Dashboard stats handler\n *\n * Returns summary data for the admin dashboard in a single request:\n * collection content counts, media count, user count, and recent\n * content across all collections.\n */\n\nimport { sql, type Kysely } from \"kysely\";\n\nimport { ContentRepository } from \"../../database/repositories/content.js\";\nimport { MediaRepository } from \"../../database/repositories/media.js\";\nimport { OptionsRepository } from \"../../database/repositories/options.js\";\nimport { UserRepository } from \"../../database/repositories/user.js\";\nimport type { Database } from \"../../database/types.js\";\nimport { validateIdentifier } from \"../../database/validate.js\";\nimport {\n\tSCHEDULED_POLICY_REJECTION_PREFIX,\n\tisScheduledPolicyRejection,\n\ttype ScheduledPolicyRejection,\n\ttype VersionedScheduledPolicyRejection,\n} from \"../../plugins/content-policy.js\";\nimport { getSchedulerHealth, type SchedulerHealth } from \"../../scheduler-health.js\";\nimport type { ApiResult } from \"../types.js\";\n\nexport interface CollectionStats {\n\tslug: string;\n\tlabel: string;\n\ttotal: number;\n\tpublished: number;\n\tdraft: number;\n\tscheduled: number;\n\toverdueScheduled: number;\n}\n\nexport interface RecentItem {\n\tid: string;\n\tcollection: string;\n\tcollectionLabel: string;\n\ttitle: string;\n\tslug: string | null;\n\tstatus: string;\n\tupdatedAt: string;\n\tauthorId: string | null;\n}\n\nexport interface DashboardStats {\n\tcollections: CollectionStats[];\n\tmediaCount: number;\n\tuserCount: number;\n\trecentItems: RecentItem[];\n\tschedulerHealth: SchedulerHealth;\n\tpolicyRejectedScheduled: number;\n\tpolicyRejections: VersionedScheduledPolicyRejection[];\n}\n\nconst POLICY_REJECTION_PREVIEW_LIMIT = 20;\n\n/**\n * Fetch dashboard statistics.\n *\n * Queries are intentionally lightweight — counts use indexed columns,\n * and recent items are capped at 10.\n */\nexport async function handleDashboardStats(\n\tdb: Kysely<Database>,\n\tnow = new Date(),\n): Promise<ApiResult<DashboardStats>> {\n\ttry {\n\t\t// Discover collections from the system table\n\t\tconst collections = await db\n\t\t\t.selectFrom(\"_emdash_collections\")\n\t\t\t.select([\"slug\", \"label\"])\n\t\t\t.orderBy(\"slug\", \"asc\")\n\t\t\t.execute();\n\n\t\t// Gather per-collection counts in parallel\n\t\tconst contentRepo = new ContentRepository(db);\n\t\tconst collectionStats: CollectionStats[] = await Promise.all(\n\t\t\tcollections.map(async (col) => {\n\t\t\t\tconst stats = await contentRepo.getStats(col.slug, now);\n\t\t\t\treturn {\n\t\t\t\t\tslug: col.slug,\n\t\t\t\t\tlabel: col.label,\n\t\t\t\t\ttotal: stats.total,\n\t\t\t\t\tpublished: stats.published,\n\t\t\t\t\tdraft: stats.draft,\n\t\t\t\t\tscheduled: stats.scheduled,\n\t\t\t\t\toverdueScheduled: stats.overdueScheduled,\n\t\t\t\t};\n\t\t\t}),\n\t\t);\n\n\t\t// Media and user counts\n\t\tconst mediaRepo = new MediaRepository(db);\n\t\tconst userRepo = new UserRepository(db);\n\t\tconst optionsRepo = new OptionsRepository(db);\n\t\tconst [\n\t\t\tmediaCount,\n\t\t\tuserCount,\n\t\t\tschedulerHealth,\n\t\t\tpolicyRejectedScheduled,\n\t\t\tversionedPolicyRejectionOptions,\n\t\t] = await Promise.all([\n\t\t\tmediaRepo.count(),\n\t\t\tuserRepo.count(),\n\t\t\tgetSchedulerHealth(db, now),\n\t\t\toptionsRepo.countByPrefix(SCHEDULED_POLICY_REJECTION_PREFIX),\n\t\t\toptionsRepo.getVersionedByPrefix<ScheduledPolicyRejection>(\n\t\t\t\tSCHEDULED_POLICY_REJECTION_PREFIX,\n\t\t\t\t{\n\t\t\t\t\tlimit: POLICY_REJECTION_PREVIEW_LIMIT,\n\t\t\t\t},\n\t\t\t),\n\t\t]);\n\t\tconst policyRejections = [...versionedPolicyRejectionOptions.values()]\n\t\t\t.filter(({ value }) => isScheduledPolicyRejection(value))\n\t\t\t.map(({ value, revision }) => ({ ...value, _rev: revision }));\n\n\t\t// Recent items across all collections (last 10 updated, any status)\n\t\tconst recentItems = await fetchRecentItems(db, collections);\n\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tdata: {\n\t\t\t\tcollections: collectionStats,\n\t\t\t\tmediaCount,\n\t\t\t\tuserCount,\n\t\t\t\trecentItems,\n\t\t\t\tschedulerHealth,\n\t\t\t\tpolicyRejectedScheduled,\n\t\t\t\tpolicyRejections,\n\t\t\t},\n\t\t};\n\t} catch (error) {\n\t\tconsole.error(\"Dashboard stats error:\", error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"DASHBOARD_STATS_ERROR\",\n\t\t\t\tmessage: \"Failed to load dashboard statistics\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n/** Raw row shape from the UNION ALL query — all snake_case. */\ninterface RecentItemRow {\n\tid: string;\n\tcollection: string;\n\tcollection_label: string;\n\ttitle: string;\n\tslug: string | null;\n\tstatus: string;\n\tupdated_at: string;\n\tauthor_id: string | null;\n}\n\n/**\n * Fetch the 10 most recently updated items across all collections.\n *\n * Uses UNION ALL over each ec_* table. The query is safe because\n * collection slugs come from the system table and are validated.\n *\n * `title` is not a standard column — it's a user-defined field. We query\n * `_emdash_fields` to discover which collections have one and fall back\n * to `slug` (which is always present) otherwise.\n */\nasync function fetchRecentItems(\n\tdb: Kysely<Database>,\n\tcollections: Array<{ slug: string; label: string }>,\n): Promise<RecentItem[]> {\n\tif (collections.length === 0) return [];\n\n\t// Discover which collections have a \"title\" column\n\tconst titleFields = await db\n\t\t.selectFrom(\"_emdash_fields as f\")\n\t\t.innerJoin(\"_emdash_collections as c\", \"c.id\", \"f.collection_id\")\n\t\t.select([\"c.slug as collection_slug\"])\n\t\t.where(\"f.slug\", \"=\", \"title\")\n\t\t.execute();\n\n\tconst collectionsWithTitle = new Set(titleFields.map((r) => r.collection_slug));\n\n\t// Issue one query per collection in parallel, then merge in JS.\n\t// A single UNION ALL across N collections trips D1's\n\t// SQLITE_LIMIT_COMPOUND_SELECT cap when N is large enough (#895);\n\t// per-collection queries side-step that. Each query fetches at most\n\t// 10 rows, so the merge handles at most N * 10 rows before slicing.\n\tconst perCollection = await Promise.all(\n\t\tcollections.map(async (col) => {\n\t\t\tvalidateIdentifier(col.slug);\n\t\t\tconst table = `ec_${col.slug}`;\n\t\t\tconst hasTitle = collectionsWithTitle.has(col.slug);\n\n\t\t\t// Use title column if it exists, otherwise fall back to slug, id.\n\t\t\t// All output uses snake_case to avoid SQLite quoting issues on D1.\n\t\t\tconst titleExpr = hasTitle ? sql`COALESCE(title, slug, id)` : sql`COALESCE(slug, id)`;\n\n\t\t\tconst result = await sql<RecentItemRow>`\n\t\t\t\tSELECT\n\t\t\t\t\tid,\n\t\t\t\t\t${sql.lit(col.slug)} AS collection,\n\t\t\t\t\t${sql.lit(col.label)} AS collection_label,\n\t\t\t\t\t${titleExpr} AS title,\n\t\t\t\t\tslug,\n\t\t\t\t\tstatus,\n\t\t\t\t\tupdated_at,\n\t\t\t\t\tauthor_id\n\t\t\t\tFROM ${sql.ref(table)}\n\t\t\t\tWHERE deleted_at IS NULL\n\t\t\t\tORDER BY updated_at DESC\n\t\t\t\tLIMIT 10\n\t\t\t`.execute(db);\n\t\t\treturn result.rows;\n\t\t}),\n\t);\n\n\t// Merge across collections, sort by updated_at desc, take top 10.\n\tconst merged = perCollection\n\t\t.flat()\n\t\t.toSorted((a, b) => (a.updated_at < b.updated_at ? 1 : a.updated_at > b.updated_at ? -1 : 0))\n\t\t.slice(0, 10);\n\n\t// Map snake_case DB rows to camelCase API shape\n\treturn merged.map((row) => ({\n\t\tid: row.id,\n\t\tcollection: row.collection,\n\t\tcollectionLabel: row.collection_label,\n\t\ttitle: row.title,\n\t\tslug: row.slug,\n\t\tstatus: row.status,\n\t\tupdatedAt: row.updated_at,\n\t\tauthorId: row.author_id,\n\t}));\n}\n"],"mappings":"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"}
@@ -1,81 +0,0 @@
1
- //#region src/seed/default.ts
2
- const defaultSeed = {
3
- version: "1",
4
- meta: {
5
- name: "Default",
6
- description: "Posts and pages with categories and tags"
7
- },
8
- collections: [{
9
- slug: "posts",
10
- label: "Posts",
11
- labelSingular: "Post",
12
- supports: [
13
- "drafts",
14
- "revisions",
15
- "search"
16
- ],
17
- fields: [
18
- {
19
- slug: "title",
20
- label: "Title",
21
- type: "string",
22
- required: true,
23
- searchable: true
24
- },
25
- {
26
- slug: "featured_image",
27
- label: "Featured Image",
28
- type: "image"
29
- },
30
- {
31
- slug: "content",
32
- label: "Content",
33
- type: "portableText",
34
- searchable: true
35
- },
36
- {
37
- slug: "excerpt",
38
- label: "Excerpt",
39
- type: "text"
40
- }
41
- ]
42
- }, {
43
- slug: "pages",
44
- label: "Pages",
45
- labelSingular: "Page",
46
- supports: [
47
- "drafts",
48
- "revisions",
49
- "search"
50
- ],
51
- fields: [{
52
- slug: "title",
53
- label: "Title",
54
- type: "string",
55
- required: true,
56
- searchable: true
57
- }, {
58
- slug: "content",
59
- label: "Content",
60
- type: "portableText",
61
- searchable: true
62
- }]
63
- }],
64
- taxonomies: [{
65
- name: "category",
66
- label: "Categories",
67
- labelSingular: "Category",
68
- hierarchical: true,
69
- collections: ["posts"]
70
- }, {
71
- name: "tag",
72
- label: "Tags",
73
- labelSingular: "Tag",
74
- hierarchical: false,
75
- collections: ["posts"]
76
- }]
77
- };
78
-
79
- //#endregion
80
- export { defaultSeed as t };
81
- //# sourceMappingURL=default-CHCUkV4Z.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-CHCUkV4Z.mjs","names":[],"sources":["../src/seed/default.ts"],"sourcesContent":["/**\n * Default seed applied when no user seed file exists.\n *\n * Provides the baseline schema every EmDash site needs:\n * posts, pages, categories, and tags.\n */\n\nimport type { SeedFile } from \"./types.js\";\n\nexport const defaultSeed: SeedFile = {\n\tversion: \"1\",\n\tmeta: {\n\t\tname: \"Default\",\n\t\tdescription: \"Posts and pages with categories and tags\",\n\t},\n\tcollections: [\n\t\t{\n\t\t\tslug: \"posts\",\n\t\t\tlabel: \"Posts\",\n\t\t\tlabelSingular: \"Post\",\n\t\t\tsupports: [\"drafts\", \"revisions\", \"search\"],\n\t\t\tfields: [\n\t\t\t\t{\n\t\t\t\t\tslug: \"title\",\n\t\t\t\t\tlabel: \"Title\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: true,\n\t\t\t\t\tsearchable: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tslug: \"featured_image\",\n\t\t\t\t\tlabel: \"Featured Image\",\n\t\t\t\t\ttype: \"image\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tslug: \"content\",\n\t\t\t\t\tlabel: \"Content\",\n\t\t\t\t\ttype: \"portableText\",\n\t\t\t\t\tsearchable: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tslug: \"excerpt\",\n\t\t\t\t\tlabel: \"Excerpt\",\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tslug: \"pages\",\n\t\t\tlabel: \"Pages\",\n\t\t\tlabelSingular: \"Page\",\n\t\t\tsupports: [\"drafts\", \"revisions\", \"search\"],\n\t\t\tfields: [\n\t\t\t\t{\n\t\t\t\t\tslug: \"title\",\n\t\t\t\t\tlabel: \"Title\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: true,\n\t\t\t\t\tsearchable: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tslug: \"content\",\n\t\t\t\t\tlabel: \"Content\",\n\t\t\t\t\ttype: \"portableText\",\n\t\t\t\t\tsearchable: true,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n\ttaxonomies: [\n\t\t{\n\t\t\tname: \"category\",\n\t\t\tlabel: \"Categories\",\n\t\t\tlabelSingular: \"Category\",\n\t\t\thierarchical: true,\n\t\t\tcollections: [\"posts\"],\n\t\t},\n\t\t{\n\t\t\tname: \"tag\",\n\t\t\tlabel: \"Tags\",\n\t\t\tlabelSingular: \"Tag\",\n\t\t\thierarchical: false,\n\t\t\tcollections: [\"posts\"],\n\t\t},\n\t],\n};\n"],"mappings":";AASA,MAAa,cAAwB;CACpC,SAAS;CACT,MAAM;EACL,MAAM;EACN,aAAa;EACb;CACD,aAAa,CACZ;EACC,MAAM;EACN,OAAO;EACP,eAAe;EACf,UAAU;GAAC;GAAU;GAAa;GAAS;EAC3C,QAAQ;GACP;IACC,MAAM;IACN,OAAO;IACP,MAAM;IACN,UAAU;IACV,YAAY;IACZ;GACD;IACC,MAAM;IACN,OAAO;IACP,MAAM;IACN;GACD;IACC,MAAM;IACN,OAAO;IACP,MAAM;IACN,YAAY;IACZ;GACD;IACC,MAAM;IACN,OAAO;IACP,MAAM;IACN;GACD;EACD,EACD;EACC,MAAM;EACN,OAAO;EACP,eAAe;EACf,UAAU;GAAC;GAAU;GAAa;GAAS;EAC3C,QAAQ,CACP;GACC,MAAM;GACN,OAAO;GACP,MAAM;GACN,UAAU;GACV,YAAY;GACZ,EACD;GACC,MAAM;GACN,OAAO;GACP,MAAM;GACN,YAAY;GACZ,CACD;EACD,CACD;CACD,YAAY,CACX;EACC,MAAM;EACN,OAAO;EACP,eAAe;EACf,cAAc;EACd,aAAa,CAAC,QAAQ;EACtB,EACD;EACC,MAAM;EACN,OAAO;EACP,eAAe;EACf,cAAc;EACd,aAAa,CAAC,QAAQ;EACtB,CACD;CACD"}
@@ -1,9 +0,0 @@
1
- //#region src/deferred-tasks.d.ts
2
- interface DeferredTaskTracker {
3
- settled: Promise<void>;
4
- track<T>(promise: Promise<T>): Promise<T>;
5
- settle(): void;
6
- }
7
- //#endregion
8
- export { DeferredTaskTracker as t };
9
- //# sourceMappingURL=deferred-tasks-G0xhcJTl.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deferred-tasks-G0xhcJTl.d.mts","names":[],"sources":["../src/deferred-tasks.ts"],"mappings":";UAAiB,mBAAA;EAChB,OAAA,EAAS,OAAA;EACT,KAAA,IAAS,OAAA,EAAS,OAAA,CAAQ,CAAA,IAAK,OAAA,CAAQ,CAAA;EACvC,MAAA;AAAA"}
@@ -1,29 +0,0 @@
1
- //#region src/astro/dev-typegen.ts
2
- /**
3
- * Dev-only signal for regenerating `emdash-env.d.ts` when the schema changes.
4
- *
5
- * Schema mutations send an event over the Vite module runner's hot channel;
6
- * the Astro integration listens for it in Node and does the filesystem work.
7
- * The hot channel crosses realms (workerd under the Cloudflare adapter), and
8
- * runtime modules stay free of Node-only I/O. When HMR is disabled there is
9
- * no hot channel, so the integration also registers a same-realm global.
10
- */
11
- const DEV_TYPEGEN_REFRESH_EVENT = "emdash:typegen-refresh";
12
- const DEV_TYPEGEN_REFRESH_GLOBAL = "__emdashDevTypegenRefresh";
13
- function refreshDevTypes() {
14
- if (typeof import.meta.env === "undefined" || !import.meta.env.DEV) return;
15
- try {
16
- if (import.meta.hot) {
17
- import.meta.hot.send(DEV_TYPEGEN_REFRESH_EVENT);
18
- return;
19
- }
20
- const fn = Reflect.get(globalThis, DEV_TYPEGEN_REFRESH_GLOBAL);
21
- if (typeof fn === "function") fn();
22
- } catch (error) {
23
- console.error("[emdash] dev typegen refresh failed:", error);
24
- }
25
- }
26
-
27
- //#endregion
28
- export { DEV_TYPEGEN_REFRESH_GLOBAL as n, refreshDevTypes as r, DEV_TYPEGEN_REFRESH_EVENT as t };
29
- //# sourceMappingURL=dev-typegen-Dtl8AfS6.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-typegen-Dtl8AfS6.mjs","names":[],"sources":["../src/astro/dev-typegen.ts"],"sourcesContent":["/**\n * Dev-only signal for regenerating `emdash-env.d.ts` when the schema changes.\n *\n * Schema mutations send an event over the Vite module runner's hot channel;\n * the Astro integration listens for it in Node and does the filesystem work.\n * The hot channel crosses realms (workerd under the Cloudflare adapter), and\n * runtime modules stay free of Node-only I/O. When HMR is disabled there is\n * no hot channel, so the integration also registers a same-realm global.\n */\n\nexport const DEV_TYPEGEN_REFRESH_EVENT = \"emdash:typegen-refresh\";\n\nexport const DEV_TYPEGEN_REFRESH_GLOBAL = \"__emdashDevTypegenRefresh\";\n\nexport function refreshDevTypes(): void {\n\tif (typeof import.meta.env === \"undefined\" || !import.meta.env.DEV) return;\n\n\ttry {\n\t\tif (import.meta.hot) {\n\t\t\timport.meta.hot.send(DEV_TYPEGEN_REFRESH_EVENT);\n\t\t\treturn;\n\t\t}\n\t\tconst fn = Reflect.get(globalThis, DEV_TYPEGEN_REFRESH_GLOBAL);\n\t\tif (typeof fn === \"function\") fn();\n\t} catch (error) {\n\t\tconsole.error(\"[emdash] dev typegen refresh failed:\", error);\n\t}\n}\n"],"mappings":";;;;;;;;;;AAUA,MAAa,4BAA4B;AAEzC,MAAa,6BAA6B;AAE1C,SAAgB,kBAAwB;AACvC,KAAI,OAAO,OAAO,KAAK,QAAQ,eAAe,CAAC,OAAO,KAAK,IAAI,IAAK;AAEpE,KAAI;AACH,MAAI,OAAO,KAAK,KAAK;AACpB,UAAO,KAAK,IAAI,KAAK,0BAA0B;AAC/C;;EAED,MAAM,KAAK,QAAQ,IAAI,YAAY,2BAA2B;AAC9D,MAAI,OAAO,OAAO,WAAY,KAAI;UAC1B,OAAO;AACf,UAAQ,MAAM,wCAAwC,MAAM"}