emdash 0.32.0 → 0.33.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 (681) hide show
  1. package/dist/{adapters-C0ONzkUP.d.mts → adapters-BMyNSSZi.d.mts} +9 -1
  2. package/dist/adapters-BMyNSSZi.d.mts.map +1 -0
  3. package/dist/after-CBU2vkoO.mjs +96 -0
  4. package/dist/after-CBU2vkoO.mjs.map +1 -0
  5. package/dist/{allowed-origins-CCEi9bPI.mjs → allowed-origins-CG1pACtS.mjs} +2 -2
  6. package/dist/{allowed-origins-CCEi9bPI.mjs.map → allowed-origins-CG1pACtS.mjs.map} +1 -1
  7. package/dist/api/route-utils.d.mts +3 -4
  8. package/dist/api/route-utils.d.mts.map +1 -1
  9. package/dist/api/route-utils.mjs +22 -22
  10. package/dist/api/schemas/index.d.mts +2 -2
  11. package/dist/api/schemas/index.mjs +5 -5
  12. package/dist/{api-DgPbMlng.mjs → api-D2hunekQ.mjs} +247 -45
  13. package/dist/api-D2hunekQ.mjs.map +1 -0
  14. package/dist/{api-tokens-p-iMzvXR.mjs → api-tokens-CSND0i1z.mjs} +2 -2
  15. package/dist/{api-tokens-p-iMzvXR.mjs.map → api-tokens-CSND0i1z.mjs.map} +1 -1
  16. package/dist/{apply-1_6ra7NP.mjs → apply-kwNEJW2l.mjs} +35 -22
  17. package/dist/apply-kwNEJW2l.mjs.map +1 -0
  18. package/dist/astro/index.d.mts +12 -12
  19. package/dist/astro/index.mjs +13 -3
  20. package/dist/astro/index.mjs.map +1 -1
  21. package/dist/astro/middleware/auth.d.mts +10 -10
  22. package/dist/astro/middleware/auth.mjs +8 -8
  23. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  24. package/dist/astro/middleware/redirect.mjs +8 -8
  25. package/dist/astro/middleware/redirect.mjs.map +1 -1
  26. package/dist/astro/middleware/request-context.mjs +4 -4
  27. package/dist/astro/middleware/setup.mjs +1 -1
  28. package/dist/astro/middleware.d.mts +10 -10
  29. package/dist/astro/middleware.d.mts.map +1 -1
  30. package/dist/astro/middleware.mjs +344 -173
  31. package/dist/astro/middleware.mjs.map +1 -1
  32. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -7
  33. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -7
  34. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  35. package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
  36. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +5 -5
  37. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +10 -10
  38. package/dist/astro/routes/api/admin/byline-fields/index.mjs +10 -10
  39. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +10 -10
  40. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +18 -18
  41. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +18 -18
  42. package/dist/astro/routes/api/admin/bylines/index.mjs +18 -18
  43. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +16 -16
  44. package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
  46. package/dist/astro/routes/api/admin/comments/bulk.mjs +12 -12
  47. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
  48. package/dist/astro/routes/api/admin/comments/index.mjs +12 -12
  49. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +5 -5
  50. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +4 -4
  51. package/dist/astro/routes/api/admin/media-usage/repair.mjs +12 -12
  52. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
  53. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
  54. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +46 -45
  55. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  56. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +46 -45
  57. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  58. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +45 -44
  59. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  60. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +5 -5
  61. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +45 -44
  62. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  63. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +45 -44
  64. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  65. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +45 -44
  66. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  67. package/dist/astro/routes/api/admin/plugins/index.mjs +45 -44
  68. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  69. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +3 -3
  70. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +45 -44
  71. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  72. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +45 -44
  73. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  74. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +45 -44
  75. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  76. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +45 -44
  77. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  78. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +46 -45
  79. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +45 -44
  81. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +46 -45
  83. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/updates.mjs +45 -44
  85. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +45 -44
  87. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +3 -3
  89. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +45 -44
  90. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
  92. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
  93. package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -8
  94. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +5 -5
  95. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/users/index.mjs +7 -7
  97. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  98. package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
  99. package/dist/astro/routes/api/auth/invite/complete.mjs +12 -12
  100. package/dist/astro/routes/api/auth/invite/index.mjs +10 -10
  101. package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
  102. package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -11
  103. package/dist/astro/routes/api/auth/logout.mjs +3 -3
  104. package/dist/astro/routes/api/auth/magic-link/send.mjs +12 -12
  105. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  106. package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
  107. package/dist/astro/routes/api/auth/me.mjs +8 -8
  108. package/dist/astro/routes/api/auth/mode.mjs +3 -3
  109. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
  110. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  111. package/dist/astro/routes/api/auth/passkey/_id_.mjs +7 -7
  112. package/dist/astro/routes/api/auth/passkey/index.mjs +2 -2
  113. package/dist/astro/routes/api/auth/passkey/options.mjs +13 -13
  114. package/dist/astro/routes/api/auth/passkey/register/options.mjs +11 -11
  115. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +12 -12
  116. package/dist/astro/routes/api/auth/passkey/verify.mjs +12 -12
  117. package/dist/astro/routes/api/auth/signup/complete.mjs +12 -12
  118. package/dist/astro/routes/api/auth/signup/request.mjs +12 -12
  119. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  120. package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
  121. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +18 -18
  122. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
  123. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +15 -15
  124. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +3 -3
  125. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +4 -4
  126. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +4 -4
  127. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +3 -3
  128. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +13 -13
  129. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +9 -9
  130. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +18 -18
  131. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +18 -18
  132. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +4 -4
  133. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +3 -3
  134. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +9 -9
  135. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +16 -16
  136. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +3 -3
  137. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +4 -4
  138. package/dist/astro/routes/api/content/_collection_/_id_.mjs +9 -9
  139. package/dist/astro/routes/api/content/_collection_/authors.mjs +3 -3
  140. package/dist/astro/routes/api/content/_collection_/index.mjs +9 -9
  141. package/dist/astro/routes/api/content/_collection_/trash.mjs +8 -8
  142. package/dist/astro/routes/api/dashboard.mjs +9 -9
  143. package/dist/astro/routes/api/dev/emails.mjs +3 -3
  144. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  145. package/dist/astro/routes/api/import/probe.mjs +19 -19
  146. package/dist/astro/routes/api/import/wordpress/analyze.mjs +4 -4
  147. package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
  148. package/dist/astro/routes/api/import/wordpress/execute.mjs +15 -15
  149. package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
  150. package/dist/astro/routes/api/import/wordpress/media.mjs +10 -10
  151. package/dist/astro/routes/api/import/wordpress/prepare.mjs +11 -11
  152. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
  153. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +12 -12
  154. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  155. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +19 -19
  156. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
  157. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +27 -27
  158. package/dist/astro/routes/api/manifest.mjs +5 -5
  159. package/dist/astro/routes/api/mcp.mjs +42 -42
  160. package/dist/astro/routes/api/media/_id_/confirm.mjs +10 -10
  161. package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
  162. package/dist/astro/routes/api/media/_id_/usage.mjs +14 -14
  163. package/dist/astro/routes/api/media/_id_.mjs +13 -13
  164. package/dist/astro/routes/api/media/file/_...key_.mjs +2 -2
  165. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +3 -3
  166. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +3 -3
  167. package/dist/astro/routes/api/media/providers/index.mjs +3 -3
  168. package/dist/astro/routes/api/media/upload-url.mjs +9 -9
  169. package/dist/astro/routes/api/media.mjs +13 -13
  170. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +11 -11
  171. package/dist/astro/routes/api/menus/_name_/items.mjs +11 -11
  172. package/dist/astro/routes/api/menus/_name_/reorder.mjs +11 -11
  173. package/dist/astro/routes/api/menus/_name_/translations.mjs +11 -11
  174. package/dist/astro/routes/api/menus/_name_.mjs +11 -11
  175. package/dist/astro/routes/api/menus/index.mjs +11 -11
  176. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  177. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  178. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  179. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  180. package/dist/astro/routes/api/oauth/register.mjs +3 -3
  181. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  182. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  183. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  184. package/dist/astro/routes/api/openapi.json.mjs +36 -5
  185. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  186. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +5 -5
  187. package/dist/astro/routes/api/redirects/404s/index.mjs +12 -12
  188. package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -12
  189. package/dist/astro/routes/api/redirects/_id_.mjs +14 -13
  190. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  191. package/dist/astro/routes/api/redirects/index.mjs +14 -13
  192. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  193. package/dist/astro/routes/api/relations/_id_/index.mjs +18 -18
  194. package/dist/astro/routes/api/relations/_id_/translations.mjs +13 -13
  195. package/dist/astro/routes/api/relations/index.mjs +18 -18
  196. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +3 -3
  197. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +4 -4
  198. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +45 -44
  199. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  200. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +45 -44
  201. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  202. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +45 -44
  203. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  204. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +45 -44
  205. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  206. package/dist/astro/routes/api/schema/collections/index.mjs +45 -44
  207. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  208. package/dist/astro/routes/api/schema/collections/reorder.d.mts +8 -0
  209. package/dist/astro/routes/api/schema/collections/reorder.d.mts.map +1 -0
  210. package/dist/astro/routes/api/schema/collections/reorder.mjs +66 -0
  211. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -0
  212. package/dist/astro/routes/api/schema/index.mjs +11 -9
  213. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  214. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +45 -44
  215. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  216. package/dist/astro/routes/api/schema/orphans/index.mjs +45 -44
  217. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  218. package/dist/astro/routes/api/search/enable.d.mts +1 -0
  219. package/dist/astro/routes/api/search/enable.d.mts.map +1 -1
  220. package/dist/astro/routes/api/search/enable.mjs +17 -13
  221. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  222. package/dist/astro/routes/api/search/index.mjs +11 -11
  223. package/dist/astro/routes/api/search/rebuild.mjs +13 -13
  224. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  225. package/dist/astro/routes/api/search/stats.mjs +7 -7
  226. package/dist/astro/routes/api/search/suggest.mjs +11 -11
  227. package/dist/astro/routes/api/sections/_slug_.mjs +11 -11
  228. package/dist/astro/routes/api/sections/index.mjs +11 -11
  229. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  230. package/dist/astro/routes/api/settings/backups/archives/index.mjs +6 -6
  231. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  232. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  233. package/dist/astro/routes/api/settings/email.mjs +5 -5
  234. package/dist/astro/routes/api/settings.mjs +16 -16
  235. package/dist/astro/routes/api/setup/admin-verify.mjs +13 -13
  236. package/dist/astro/routes/api/setup/admin.mjs +12 -12
  237. package/dist/astro/routes/api/setup/dev-bypass.mjs +30 -30
  238. package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
  239. package/dist/astro/routes/api/setup/index.mjs +32 -32
  240. package/dist/astro/routes/api/setup/status.mjs +4 -4
  241. package/dist/astro/routes/api/snapshot.mjs +9 -9
  242. package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts +8 -0
  243. package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -0
  244. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +43 -0
  245. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -0
  246. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +16 -16
  247. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +16 -16
  248. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +16 -16
  249. package/dist/astro/routes/api/taxonomies/index.mjs +16 -16
  250. package/dist/astro/routes/api/themes/preview.mjs +7 -7
  251. package/dist/astro/routes/api/typegen.mjs +5 -5
  252. package/dist/astro/routes/api/well-known/auth.mjs +2 -2
  253. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  254. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  255. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +8 -8
  256. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +11 -11
  257. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +11 -11
  258. package/dist/astro/routes/api/widget-areas/_name_.mjs +6 -6
  259. package/dist/astro/routes/api/widget-areas/index.mjs +11 -11
  260. package/dist/astro/routes/api/widget-components.mjs +3 -3
  261. package/dist/astro/routes/robots.txt.mjs +9 -9
  262. package/dist/astro/routes/sitemap-_collection_.xml.mjs +12 -12
  263. package/dist/astro/routes/sitemap.xml.mjs +10 -10
  264. package/dist/astro/types.d.mts +19 -13
  265. package/dist/astro/types.d.mts.map +1 -1
  266. package/dist/auth/providers/github.d.mts +1 -1
  267. package/dist/auth/providers/google.d.mts +1 -1
  268. package/dist/{authorize-R5iYYrpa.mjs → authorize-qRhWQnel.mjs} +2 -2
  269. package/dist/{authorize-R5iYYrpa.mjs.map → authorize-qRhWQnel.mjs.map} +1 -1
  270. package/dist/{backup-LpQ1V_sR.mjs → backup-CtA6LDNw.mjs} +5 -5
  271. package/dist/{backup-LpQ1V_sR.mjs.map → backup-CtA6LDNw.mjs.map} +1 -1
  272. package/dist/{byline-C5TAqs8N.mjs → byline-Cp6csL84.mjs} +9 -9
  273. package/dist/{byline-C5TAqs8N.mjs.map → byline-Cp6csL84.mjs.map} +1 -1
  274. package/dist/{byline-fields-T9ZLZMxJ.mjs → byline-fields-CNc0Yq5i.mjs} +2 -2
  275. package/dist/{byline-fields-T9ZLZMxJ.mjs.map → byline-fields-CNc0Yq5i.mjs.map} +1 -1
  276. package/dist/{byline-registry-BCuOp4UF.mjs → byline-registry-ZkPKqEwC.mjs} +4 -4
  277. package/dist/{byline-registry-BCuOp4UF.mjs.map → byline-registry-ZkPKqEwC.mjs.map} +1 -1
  278. package/dist/{bylines-B8-WGdja.mjs → bylines-CEj5CdT4.mjs} +7 -7
  279. package/dist/{bylines-B8-WGdja.mjs.map → bylines-CEj5CdT4.mjs.map} +1 -1
  280. package/dist/{bylines-DGuqBLjV.mjs → bylines-cf-C9lmF.mjs} +4 -4
  281. package/dist/{bylines-DGuqBLjV.mjs.map → bylines-cf-C9lmF.mjs.map} +1 -1
  282. package/dist/cache-C9FptTFR.mjs +108 -0
  283. package/dist/cache-C9FptTFR.mjs.map +1 -0
  284. package/dist/{challenge-store-BFzgFRog.mjs → challenge-store-D9VNKELo.mjs} +1 -1
  285. package/dist/{challenge-store-BFzgFRog.mjs.map → challenge-store-D9VNKELo.mjs.map} +1 -1
  286. package/dist/{chunks-D5dlPeRb.mjs → chunks-DbYzib_k.mjs} +2 -2
  287. package/dist/{chunks-D5dlPeRb.mjs.map → chunks-DbYzib_k.mjs.map} +1 -1
  288. package/dist/cli/index.mjs +40 -32
  289. package/dist/cli/index.mjs.map +1 -1
  290. package/dist/client/cf-access.d.mts +1 -1
  291. package/dist/client/index.d.mts +1 -1
  292. package/dist/client/index.mjs +2 -2
  293. package/dist/{comment-DnTxxVHv.mjs → comment-BIkJ6Fil.mjs} +3 -3
  294. package/dist/{comment-DnTxxVHv.mjs.map → comment-BIkJ6Fil.mjs.map} +1 -1
  295. package/dist/{comment-reaction-BUlUz2bh.mjs → comment-reaction-D-laEceb.mjs} +2 -2
  296. package/dist/{comment-reaction-BUlUz2bh.mjs.map → comment-reaction-D-laEceb.mjs.map} +1 -1
  297. package/dist/{comments-QPKgK3nk.mjs → comments-0_w6KChA.mjs} +3 -3
  298. package/dist/{comments-QPKgK3nk.mjs.map → comments-0_w6KChA.mjs.map} +1 -1
  299. package/dist/{components-DZkL4Fx0.mjs → components-BPxrRjpE.mjs} +1 -1
  300. package/dist/{components-DZkL4Fx0.mjs.map → components-BPxrRjpE.mjs.map} +1 -1
  301. package/dist/{content-CpfKV9QE.mjs → content-CJ94NEx5.mjs} +165 -112
  302. package/dist/content-CJ94NEx5.mjs.map +1 -0
  303. package/dist/{content-refresh-DgqUBeTv.mjs → content-refresh-Xw7aKmou.mjs} +6 -6
  304. package/dist/{content-refresh-DgqUBeTv.mjs.map → content-refresh-Xw7aKmou.mjs.map} +1 -1
  305. package/dist/{context-kO4YZB03.mjs → context-C_1nrqnW.mjs} +14 -14
  306. package/dist/{context-kO4YZB03.mjs.map → context-C_1nrqnW.mjs.map} +1 -1
  307. package/dist/{cron-BlKIMD_e.mjs → cron-DRV-UC4K.mjs} +1 -1
  308. package/dist/{cron-BlKIMD_e.mjs.map → cron-DRV-UC4K.mjs.map} +1 -1
  309. package/dist/{dashboard-DoBwPnON.mjs → dashboard-DINnNVVU.mjs} +5 -5
  310. package/dist/{dashboard-DoBwPnON.mjs.map → dashboard-DINnNVVU.mjs.map} +1 -1
  311. package/dist/db/index.d.mts +3 -3
  312. package/dist/db/index.mjs +2 -2
  313. package/dist/db/index.mjs.map +1 -1
  314. package/dist/db/libsql.d.mts +1 -1
  315. package/dist/db/postgres.d.mts +1 -1
  316. package/dist/db/sqlite.d.mts +1 -1
  317. package/dist/{default-C4v9KP56.mjs → default-BD2FG0xV.mjs} +1 -1
  318. package/dist/{default-C4v9KP56.mjs.map → default-BD2FG0xV.mjs.map} +1 -1
  319. package/dist/deferred-tasks-C-WRCcKo.d.mts +9 -0
  320. package/dist/deferred-tasks-C-WRCcKo.d.mts.map +1 -0
  321. package/dist/{device-flow-DhUsyJU6.mjs → device-flow-CTqd8mud.mjs} +5 -5
  322. package/dist/{device-flow-DhUsyJU6.mjs.map → device-flow-CTqd8mud.mjs.map} +1 -1
  323. package/dist/{dialect-helpers-DFwyWjTM.mjs → dialect-helpers-BSbfaO3F.mjs} +24 -16
  324. package/dist/dialect-helpers-BSbfaO3F.mjs.map +1 -0
  325. package/dist/{email-console-C-9Ng8DM.mjs → email-console-C6WdcWbL.mjs} +1 -1
  326. package/dist/{email-console-C-9Ng8DM.mjs.map → email-console-C6WdcWbL.mjs.map} +1 -1
  327. package/dist/{error-DmmN74gW.mjs → error-oh_9i6bR.mjs} +3 -3
  328. package/dist/{error-DmmN74gW.mjs.map → error-oh_9i6bR.mjs.map} +1 -1
  329. package/dist/{errors-DtEXIQQV.mjs → errors-BucQ8VYz.mjs} +2 -1
  330. package/dist/errors-BucQ8VYz.mjs.map +1 -0
  331. package/dist/{escape-CdW31WsG.mjs → escape-CXps5F_v.mjs} +1 -1
  332. package/dist/{escape-CdW31WsG.mjs.map → escape-CXps5F_v.mjs.map} +1 -1
  333. package/dist/{field-defs-cache-QMVnzTH6.mjs → field-defs-cache-WD82dMQq.mjs} +4 -4
  334. package/dist/{field-defs-cache-QMVnzTH6.mjs.map → field-defs-cache-WD82dMQq.mjs.map} +1 -1
  335. package/dist/{fts-manager-vncsZIJm.mjs → fts-manager-BITakW_R.mjs} +37 -13
  336. package/dist/fts-manager-BITakW_R.mjs.map +1 -0
  337. package/dist/{hash-Cb7U1b5M.mjs → hash-Cg0TXJPV.mjs} +1 -1
  338. package/dist/{hash-Cb7U1b5M.mjs.map → hash-Cg0TXJPV.mjs.map} +1 -1
  339. package/dist/{hreflang-CZbSx6Bg.d.mts → hreflang-BaLCNcDx.d.mts} +2 -2
  340. package/dist/{hreflang-CZbSx6Bg.d.mts.map → hreflang-BaLCNcDx.d.mts.map} +1 -1
  341. package/dist/{hreflang-Bg-zMpkr.mjs → hreflang-BdZuVBhL.mjs} +6 -6
  342. package/dist/{hreflang-Bg-zMpkr.mjs.map → hreflang-BdZuVBhL.mjs.map} +1 -1
  343. package/dist/{import-PKhLeXvn.mjs → import-C-9uqyT3.mjs} +6 -6
  344. package/dist/{import-PKhLeXvn.mjs.map → import-C-9uqyT3.mjs.map} +1 -1
  345. package/dist/{index-j9rTh3cp.d.mts → index-M37iz29I.d.mts} +75 -35
  346. package/dist/index-M37iz29I.d.mts.map +1 -0
  347. package/dist/{index-BeNto_Vs.d.mts → index-MGw47uWq.d.mts} +3 -3
  348. package/dist/{index-BeNto_Vs.d.mts.map → index-MGw47uWq.d.mts.map} +1 -1
  349. package/dist/index.d.mts +19 -19
  350. package/dist/index.mjs +68 -66
  351. package/dist/{load-BwTdWE8B.mjs → load-DV1DZuUJ.mjs} +2 -2
  352. package/dist/{load-BwTdWE8B.mjs.map → load-DV1DZuUJ.mjs.map} +1 -1
  353. package/dist/{loader-C1XOLV5b.mjs → loader-CGugY7Zl.mjs} +29 -15
  354. package/dist/loader-CGugY7Zl.mjs.map +1 -0
  355. package/dist/{manifest-schema-bCq54i7F.mjs → manifest-schema-Da7kj23y.mjs} +1 -1
  356. package/dist/{manifest-schema-bCq54i7F.mjs.map → manifest-schema-Da7kj23y.mjs.map} +1 -1
  357. package/dist/media/index.d.mts +1 -1
  358. package/dist/media/local-runtime.d.mts +12 -12
  359. package/dist/media/local-runtime.mjs +8 -8
  360. package/dist/{media-tQDZEdu7.mjs → media-BP7S-nHT.mjs} +2 -2
  361. package/dist/{media-tQDZEdu7.mjs.map → media-BP7S-nHT.mjs.map} +1 -1
  362. package/dist/{media-DWIzoVFL.mjs → media-OhYL-7Io.mjs} +1 -1
  363. package/dist/{media-DWIzoVFL.mjs.map → media-OhYL-7Io.mjs.map} +1 -1
  364. package/dist/{media-allowlist-B7TPD6aq.mjs → media-allowlist-D-peH1H5.mjs} +1 -1
  365. package/dist/{media-allowlist-B7TPD6aq.mjs.map → media-allowlist-D-peH1H5.mjs.map} +1 -1
  366. package/dist/{media-upload-Bc9Nc5Zf.mjs → media-upload-DtrwU2B0.mjs} +7 -7
  367. package/dist/{media-upload-Bc9Nc5Zf.mjs.map → media-upload-DtrwU2B0.mjs.map} +1 -1
  368. package/dist/{media-url-BCm5vBn6.mjs → media-url-DYs_YLOx.mjs} +1 -1
  369. package/dist/{media-url-BCm5vBn6.mjs.map → media-url-DYs_YLOx.mjs.map} +1 -1
  370. package/dist/{media-usage-DPJcNaAq.mjs → media-usage-BlxfTkN0.mjs} +8 -8
  371. package/dist/{media-usage-DPJcNaAq.mjs.map → media-usage-BlxfTkN0.mjs.map} +1 -1
  372. package/dist/{menus-BxPLFfIc.mjs → menus-BcQWxeXu.mjs} +4 -4
  373. package/dist/{menus-BxPLFfIc.mjs.map → menus-BcQWxeXu.mjs.map} +1 -1
  374. package/dist/{menus-C6qhqP4X.mjs → menus-Y54RDPIN.mjs} +215 -38
  375. package/dist/menus-Y54RDPIN.mjs.map +1 -0
  376. package/dist/{mode-fiXRMfeA.mjs → mode-BWyTBe3I.mjs} +1 -1
  377. package/dist/{mode-fiXRMfeA.mjs.map → mode-BWyTBe3I.mjs.map} +1 -1
  378. package/dist/{oauth-authorization-C9tFinly.mjs → oauth-authorization-ClvktmrL.mjs} +5 -5
  379. package/dist/{oauth-authorization-C9tFinly.mjs.map → oauth-authorization-ClvktmrL.mjs.map} +1 -1
  380. package/dist/{oauth-clients-BwTxE1aE.mjs → oauth-clients-8ao-U66l.mjs} +1 -1
  381. package/dist/{oauth-clients-BwTxE1aE.mjs.map → oauth-clients-8ao-U66l.mjs.map} +1 -1
  382. package/dist/{oauth-state-store-DaRUwPWO.mjs → oauth-state-store-B1ofdTiQ.mjs} +1 -1
  383. package/dist/{oauth-state-store-DaRUwPWO.mjs.map → oauth-state-store-B1ofdTiQ.mjs.map} +1 -1
  384. package/dist/{oauth-user-lookup-CzuzOSlF.mjs → oauth-user-lookup-CscEuIiR.mjs} +1 -1
  385. package/dist/{oauth-user-lookup-CzuzOSlF.mjs.map → oauth-user-lookup-CscEuIiR.mjs.map} +1 -1
  386. package/dist/object-cache/memory.d.mts +1 -1
  387. package/dist/{object-cache-Bok5j2ae.mjs → object-cache-71tPfV4A.mjs} +106 -5
  388. package/dist/object-cache-71tPfV4A.mjs.map +1 -0
  389. package/dist/{options-aeIs8WFu.d.mts → options-CA4eVX6P.d.mts} +3 -3
  390. package/dist/{options-aeIs8WFu.d.mts.map → options-CA4eVX6P.d.mts.map} +1 -1
  391. package/dist/{options-BlmBHTvX.mjs → options-CBXIHUoT.mjs} +1 -1
  392. package/dist/{options-BlmBHTvX.mjs.map → options-CBXIHUoT.mjs.map} +1 -1
  393. package/dist/page/index.d.mts +2 -2
  394. package/dist/{parse-BL49yb9D.mjs → parse-CJKNuewM.mjs} +2 -2
  395. package/dist/{parse-BL49yb9D.mjs.map → parse-CJKNuewM.mjs.map} +1 -1
  396. package/dist/{passkey-config-KMhgFjdQ.mjs → passkey-config-D-zrzMJI.mjs} +1 -1
  397. package/dist/{passkey-config-KMhgFjdQ.mjs.map → passkey-config-D-zrzMJI.mjs.map} +1 -1
  398. package/dist/{placeholder-Dxo5Zt58.d.mts → placeholder-DaeNS-VG.d.mts} +1 -1
  399. package/dist/{placeholder-Dxo5Zt58.d.mts.map → placeholder-DaeNS-VG.d.mts.map} +1 -1
  400. package/dist/plugin-types.d.mts +1 -1
  401. package/dist/plugin-utils.d.mts +10 -10
  402. package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
  403. package/dist/plugins/adapt-sandbox-entry.mjs +2 -2
  404. package/dist/{portable-text-CNahFfj6.mjs → portable-text-B_kqBmXB.mjs} +1 -1
  405. package/dist/{portable-text-CNahFfj6.mjs.map → portable-text-B_kqBmXB.mjs.map} +1 -1
  406. package/dist/{preview-D4Jnbfx7.mjs → preview-BU6PaLpM.mjs} +2 -2
  407. package/dist/{preview-D4Jnbfx7.mjs.map → preview-BU6PaLpM.mjs.map} +1 -1
  408. package/dist/{public-url-DSGTnJFw.mjs → public-url-Ox9oOlgp.mjs} +14 -3
  409. package/dist/public-url-Ox9oOlgp.mjs.map +1 -0
  410. package/dist/{query-DCiXI7OZ.mjs → query-C5w7PsRQ.mjs} +20 -41
  411. package/dist/query-C5w7PsRQ.mjs.map +1 -0
  412. package/dist/{query-1xOcEy18.mjs → query-rC9HKv1N.mjs} +4 -4
  413. package/dist/{query-1xOcEy18.mjs.map → query-rC9HKv1N.mjs.map} +1 -1
  414. package/dist/{rate-limit-Vkp9gQ1Y.mjs → rate-limit-kug6q99V.mjs} +2 -2
  415. package/dist/{rate-limit-Vkp9gQ1Y.mjs.map → rate-limit-kug6q99V.mjs.map} +1 -1
  416. package/dist/{redirect-BJ6d1yHh.mjs → redirect-DIJxXKOG.mjs} +3 -3
  417. package/dist/{redirect-BJ6d1yHh.mjs.map → redirect-DIJxXKOG.mjs.map} +1 -1
  418. package/dist/{redirect-CDgfv9vh.mjs → redirect-Egf2R9yP.mjs} +1 -1
  419. package/dist/{redirect-CDgfv9vh.mjs.map → redirect-Egf2R9yP.mjs.map} +1 -1
  420. package/dist/{redirects-Cwkq2H-G.mjs → redirects-Bzm812bY.mjs} +5 -5
  421. package/dist/{redirects-Cwkq2H-G.mjs.map → redirects-Bzm812bY.mjs.map} +1 -1
  422. package/dist/{redirects-BOn2DIUs.mjs → redirects-G8wAhWAf.mjs} +20 -6
  423. package/dist/redirects-G8wAhWAf.mjs.map +1 -0
  424. package/dist/{registry-BP1JK2xh.mjs → registry-Dbodb4Uo.mjs} +59 -14
  425. package/dist/registry-Dbodb4Uo.mjs.map +1 -0
  426. package/dist/{relation-DJ5DZh7B.mjs → relation-Cbe3Sd3m.mjs} +3 -3
  427. package/dist/{relation-DJ5DZh7B.mjs.map → relation-Cbe3Sd3m.mjs.map} +1 -1
  428. package/dist/{relations-C4duJnwI.mjs → relations-Bw_E1TXo.mjs} +3 -3
  429. package/dist/{relations-C4duJnwI.mjs.map → relations-Bw_E1TXo.mjs.map} +1 -1
  430. package/dist/{relations-DHFQGX0h.d.mts → relations-G2ta7GIl.d.mts} +36 -9
  431. package/dist/relations-G2ta7GIl.d.mts.map +1 -0
  432. package/dist/{relations-DpTjftCl.mjs → relations-qHwpUe66.mjs} +5 -5
  433. package/dist/{relations-DpTjftCl.mjs.map → relations-qHwpUe66.mjs.map} +1 -1
  434. package/dist/request-context.d.mts +3 -0
  435. package/dist/request-context.d.mts.map +1 -1
  436. package/dist/request-context.mjs.map +1 -1
  437. package/dist/{request-meta-DzXYYI-n.mjs → request-meta-Df-jFbAd.mjs} +2 -2
  438. package/dist/{request-meta-DzXYYI-n.mjs.map → request-meta-Df-jFbAd.mjs.map} +1 -1
  439. package/dist/{resolve-BUvFE0Lr.mjs → resolve-DZzG4HqM.mjs} +1 -1
  440. package/dist/{resolve-BUvFE0Lr.mjs.map → resolve-DZzG4HqM.mjs.map} +1 -1
  441. package/dist/{runner-BsI18UgP.mjs → runner-BFTrkYhu.mjs} +482 -216
  442. package/dist/runner-BFTrkYhu.mjs.map +1 -0
  443. package/dist/{runner-CHdkERbt.d.mts → runner-BaADli8l.d.mts} +2 -2
  444. package/dist/{runner-CHdkERbt.d.mts.map → runner-BaADli8l.d.mts.map} +1 -1
  445. package/dist/runtime.d.mts +11 -11
  446. package/dist/runtime.mjs +3 -3
  447. package/dist/{schema-eqZhkR0S.mjs → schema-CiQXr6_F.mjs} +3 -3
  448. package/dist/{schema-eqZhkR0S.mjs.map → schema-CiQXr6_F.mjs.map} +1 -1
  449. package/dist/{scopes-Be2d8bSb.mjs → scopes-CNJVT5i5.mjs} +3 -3
  450. package/dist/{scopes-Be2d8bSb.mjs.map → scopes-CNJVT5i5.mjs.map} +1 -1
  451. package/dist/{search-CeO678cp.mjs → search-FZhx5dDU.mjs} +6 -6
  452. package/dist/{search-CeO678cp.mjs.map → search-FZhx5dDU.mjs.map} +1 -1
  453. package/dist/{secrets-870d-7yA.mjs → secrets-DLd8RXee.mjs} +4 -4
  454. package/dist/{secrets-870d-7yA.mjs.map → secrets-DLd8RXee.mjs.map} +1 -1
  455. package/dist/{sections-DSuEfirn.mjs → sections-BrIrMUCn.mjs} +3 -3
  456. package/dist/{sections-DSuEfirn.mjs.map → sections-BrIrMUCn.mjs.map} +1 -1
  457. package/dist/seed/index.d.mts +2 -2
  458. package/dist/seed/index.mjs +24 -24
  459. package/dist/seo/index.d.mts +3 -3
  460. package/dist/seo/index.mjs +17 -17
  461. package/dist/{seo-C3GDfT0V.mjs → seo-CobNfOvb.mjs} +2 -2
  462. package/dist/{seo-C3GDfT0V.mjs.map → seo-CobNfOvb.mjs.map} +1 -1
  463. package/dist/{seo-BAPKiED8.mjs → seo-DTHRntNC.mjs} +3 -3
  464. package/dist/{seo-BAPKiED8.mjs.map → seo-DTHRntNC.mjs.map} +1 -1
  465. package/dist/{service-DyFT-k-R.mjs → service-B-pYGPgR.mjs} +4 -4
  466. package/dist/{service-DyFT-k-R.mjs.map → service-B-pYGPgR.mjs.map} +1 -1
  467. package/dist/{session-user-BrK2zz7S.mjs → session-user-BvM9-zNl.mjs} +2 -2
  468. package/dist/{session-user-BrK2zz7S.mjs.map → session-user-BvM9-zNl.mjs.map} +1 -1
  469. package/dist/{settings-CREKyj8I.mjs → settings-DPHau-WH.mjs} +3 -3
  470. package/dist/{settings-CREKyj8I.mjs.map → settings-DPHau-WH.mjs.map} +1 -1
  471. package/dist/{settings-DgKouY2S.mjs → settings-kJhGiQ4z.mjs} +7 -7
  472. package/dist/{settings-DgKouY2S.mjs.map → settings-kJhGiQ4z.mjs.map} +1 -1
  473. package/dist/{setup-complete-L7bMK2VI.mjs → setup-complete-u50Qm8rY.mjs} +2 -2
  474. package/dist/{setup-complete-L7bMK2VI.mjs.map → setup-complete-u50Qm8rY.mjs.map} +1 -1
  475. package/dist/{setup-nonce-Ct5tjWcq.mjs → setup-nonce-DCjiiOD2.mjs} +1 -1
  476. package/dist/{setup-nonce-Ct5tjWcq.mjs.map → setup-nonce-DCjiiOD2.mjs.map} +1 -1
  477. package/dist/{single-flight-cache-C2exrGAi.mjs → single-flight-cache-DW3w11Pu.mjs} +1 -1
  478. package/dist/{single-flight-cache-C2exrGAi.mjs.map → single-flight-cache-DW3w11Pu.mjs.map} +1 -1
  479. package/dist/site-url-I-lJ5kma.mjs +16 -0
  480. package/dist/site-url-I-lJ5kma.mjs.map +1 -0
  481. package/dist/{snapshot-BdpUJKD-.mjs → snapshot-I_fjLDaD.mjs} +2 -2
  482. package/dist/{snapshot-BdpUJKD-.mjs.map → snapshot-I_fjLDaD.mjs.map} +1 -1
  483. package/dist/{ssrf-CviKqWmq.mjs → ssrf-CTa6v21i.mjs} +1 -1
  484. package/dist/{ssrf-CviKqWmq.mjs.map → ssrf-CTa6v21i.mjs.map} +1 -1
  485. package/dist/{state-xxv6ZTMv.mjs → state-CQvoefYP.mjs} +1 -1
  486. package/dist/{state-xxv6ZTMv.mjs.map → state-CQvoefYP.mjs.map} +1 -1
  487. package/dist/{status-COfycGIU.mjs → status-CIsmlC1E.mjs} +1 -1
  488. package/dist/{status-COfycGIU.mjs.map → status-CIsmlC1E.mjs.map} +1 -1
  489. package/dist/storage/local.d.mts +1 -1
  490. package/dist/storage/local.mjs +1 -1
  491. package/dist/storage/s3.d.mts +1 -1
  492. package/dist/storage/s3.mjs +1 -1
  493. package/dist/{taxonomies-Dbdki3Un.mjs → taxonomies-CKuaZER5.mjs} +85 -5
  494. package/dist/taxonomies-CKuaZER5.mjs.map +1 -0
  495. package/dist/{taxonomies-B61CRSha.mjs → taxonomies-CLN1N92E.mjs} +16 -17
  496. package/dist/taxonomies-CLN1N92E.mjs.map +1 -0
  497. package/dist/{taxonomy-DvwWAPvA.mjs → taxonomy-pOrB2kZe.mjs} +142 -15
  498. package/dist/taxonomy-pOrB2kZe.mjs.map +1 -0
  499. package/dist/{tokens-DVltpO2D.mjs → tokens-DagaJGK8.mjs} +1 -1
  500. package/dist/{tokens-DVltpO2D.mjs.map → tokens-DagaJGK8.mjs.map} +1 -1
  501. package/dist/{transaction-D0FOsb3X.mjs → transaction-NQj4VJ7Z.mjs} +1 -1
  502. package/dist/{transaction-D0FOsb3X.mjs.map → transaction-NQj4VJ7Z.mjs.map} +1 -1
  503. package/dist/{transport-DokJOScS.d.mts → transport-CAwTaTp_.d.mts} +1 -1
  504. package/dist/{transport-DokJOScS.d.mts.map → transport-CAwTaTp_.d.mts.map} +1 -1
  505. package/dist/{transport-BWQo0Foy.mjs → transport-DVsa5YYo.mjs} +1 -1
  506. package/dist/{transport-BWQo0Foy.mjs.map → transport-DVsa5YYo.mjs.map} +1 -1
  507. package/dist/{trusted-proxy-CwjQj0YG.mjs → trusted-proxy-D20_7fyX.mjs} +1 -1
  508. package/dist/{trusted-proxy-CwjQj0YG.mjs.map → trusted-proxy-D20_7fyX.mjs.map} +1 -1
  509. package/dist/{types-DqZVPILm.d.mts → types-BGWPMiBO.d.mts} +2 -2
  510. package/dist/{types-DqZVPILm.d.mts.map → types-BGWPMiBO.d.mts.map} +1 -1
  511. package/dist/{types-DsAMyD_o.d.mts → types-BK6U01Ro.d.mts} +1 -1
  512. package/dist/{types-DsAMyD_o.d.mts.map → types-BK6U01Ro.d.mts.map} +1 -1
  513. package/dist/{types-BD40g7zz.mjs → types-BjxTKxrZ.mjs} +1 -1
  514. package/dist/{types-BD40g7zz.mjs.map → types-BjxTKxrZ.mjs.map} +1 -1
  515. package/dist/{types-jISEalTX.d.mts → types-BnFP1M3J.d.mts} +22 -1
  516. package/dist/types-BnFP1M3J.d.mts.map +1 -0
  517. package/dist/{types-Dr2GLlwu.d.mts → types-C8oz_ayJ.d.mts} +1 -1
  518. package/dist/{types-Dr2GLlwu.d.mts.map → types-C8oz_ayJ.d.mts.map} +1 -1
  519. package/dist/{types-C9P3ysxq.d.mts → types-CbUcuxxc.d.mts} +1 -1
  520. package/dist/{types-C9P3ysxq.d.mts.map → types-CbUcuxxc.d.mts.map} +1 -1
  521. package/dist/{types-XrQQ-Aex.mjs → types-Cd8iuS1J.mjs} +10 -3
  522. package/dist/{types-XrQQ-Aex.mjs.map → types-Cd8iuS1J.mjs.map} +1 -1
  523. package/dist/types-CtzytVXn.mjs +18 -0
  524. package/dist/types-CtzytVXn.mjs.map +1 -0
  525. package/dist/{types-BQY7VYw6.d.mts → types-Cz8hNch2.d.mts} +5 -5
  526. package/dist/{types-BQY7VYw6.d.mts.map → types-Cz8hNch2.d.mts.map} +1 -1
  527. package/dist/{types-CcSZCcF1.d.mts → types-DLG4IFEQ.d.mts} +1 -1
  528. package/dist/{types-CcSZCcF1.d.mts.map → types-DLG4IFEQ.d.mts.map} +1 -1
  529. package/dist/{types-84Bque3-.d.mts → types-Dc4ntQjQ.d.mts} +10 -1
  530. package/dist/types-Dc4ntQjQ.d.mts.map +1 -0
  531. package/dist/{types-DQLZ58GV.d.mts → types-LoagAGzH.d.mts} +1 -1
  532. package/dist/{types-DQLZ58GV.d.mts.map → types-LoagAGzH.d.mts.map} +1 -1
  533. package/dist/{types-o7xo7VgH.mjs → types-NBI3rF-_.mjs} +3 -2
  534. package/dist/types-NBI3rF-_.mjs.map +1 -0
  535. package/dist/{upload-attempts-C5yd6Gae.mjs → upload-attempts-D8QAFLUJ.mjs} +1 -1
  536. package/dist/{upload-attempts-C5yd6Gae.mjs.map → upload-attempts-D8QAFLUJ.mjs.map} +1 -1
  537. package/dist/{user-BAumEmpA.mjs → user-DBrq4UVq.mjs} +3 -3
  538. package/dist/{user-BAumEmpA.mjs.map → user-DBrq4UVq.mjs.map} +1 -1
  539. package/dist/{utils-BbUgmeZG.mjs → utils-hLzi_2Fn.mjs} +2 -2
  540. package/dist/{utils-BbUgmeZG.mjs.map → utils-hLzi_2Fn.mjs.map} +1 -1
  541. package/dist/{validate-VPnKoIzW.mjs → validate-BpwoDOgt.mjs} +25 -2
  542. package/dist/validate-BpwoDOgt.mjs.map +1 -0
  543. package/dist/{validate-CdYcY-Ln.d.mts → validate-C3oSmA7F.d.mts} +15 -5
  544. package/dist/validate-C3oSmA7F.d.mts.map +1 -0
  545. package/dist/{validate-Bs_wT2ul.mjs → validate-mKo3RxBM.mjs} +3 -3
  546. package/dist/{validate-Bs_wT2ul.mjs.map → validate-mKo3RxBM.mjs.map} +1 -1
  547. package/dist/{validation-BngR0nit.mjs → validation-BgpucsvF.mjs} +10 -10
  548. package/dist/{validation-BngR0nit.mjs.map → validation-BgpucsvF.mjs.map} +1 -1
  549. package/dist/version-C4PnpmoV.mjs +7 -0
  550. package/dist/{version-Bdfb34kk.mjs.map → version-C4PnpmoV.mjs.map} +1 -1
  551. package/dist/{widgets-L-VndTKD.mjs → widgets-CJJtkiKh.mjs} +3 -3
  552. package/dist/{widgets-L-VndTKD.mjs.map → widgets-CJJtkiKh.mjs.map} +1 -1
  553. package/dist/{wxr-taxonomies-BexjtNid.mjs → wxr-taxonomies-9PPSy8X6.mjs} +4 -4
  554. package/dist/{wxr-taxonomies-BexjtNid.mjs.map → wxr-taxonomies-9PPSy8X6.mjs.map} +1 -1
  555. package/dist/{wxr-taxonomies-DueaLFd9.d.mts → wxr-taxonomies-Bkpp_2tK.d.mts} +1 -1
  556. package/dist/{wxr-taxonomies-DueaLFd9.d.mts.map → wxr-taxonomies-Bkpp_2tK.d.mts.map} +1 -1
  557. package/dist/{zod-generator-DMzfga3g.mjs → zod-generator-CG64Hnbh.mjs} +3 -3
  558. package/dist/{zod-generator-DMzfga3g.mjs.map → zod-generator-CG64Hnbh.mjs.map} +1 -1
  559. package/package.json +11 -8
  560. package/src/after.ts +6 -1
  561. package/src/api/errors.ts +1 -0
  562. package/src/api/handlers/content.ts +45 -4
  563. package/src/api/handlers/marketplace.ts +14 -0
  564. package/src/api/handlers/registry.ts +14 -0
  565. package/src/api/handlers/revision.ts +19 -5
  566. package/src/api/handlers/schema.ts +37 -0
  567. package/src/api/handlers/snapshot.ts +1 -1
  568. package/src/api/handlers/taxonomies.ts +101 -1
  569. package/src/api/openapi/document.ts +48 -0
  570. package/src/api/public-url.ts +14 -2
  571. package/src/api/schemas/schema.ts +13 -0
  572. package/src/api/schemas/search.ts +2 -0
  573. package/src/api/schemas/taxonomies.ts +18 -0
  574. package/src/api/site-url.ts +16 -6
  575. package/src/astro/integration/routes.ts +14 -0
  576. package/src/astro/integration/runtime.ts +13 -0
  577. package/src/astro/integration/virtual-modules.ts +2 -0
  578. package/src/astro/middleware/redirect.ts +2 -10
  579. package/src/astro/middleware/scoped-db.ts +35 -4
  580. package/src/astro/middleware.ts +56 -22
  581. package/src/astro/routes/api/admin/comments/[id]/status.ts +1 -1
  582. package/src/astro/routes/api/admin/users/[id]/send-recovery.ts +2 -2
  583. package/src/astro/routes/api/auth/invite/index.ts +2 -2
  584. package/src/astro/routes/api/auth/magic-link/send.ts +2 -2
  585. package/src/astro/routes/api/auth/signup/request.ts +2 -2
  586. package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +1 -1
  587. package/src/astro/routes/api/schema/collections/reorder.ts +31 -0
  588. package/src/astro/routes/api/schema/index.ts +2 -0
  589. package/src/astro/routes/api/search/enable.ts +5 -1
  590. package/src/astro/routes/api/search/rebuild.ts +6 -1
  591. package/src/astro/routes/api/taxonomies/[name]/reorder.ts +41 -0
  592. package/src/astro/types.ts +6 -0
  593. package/src/cleanup.ts +31 -26
  594. package/src/cli/commands/dev.ts +13 -3
  595. package/src/cli/commands/export-seed.ts +2 -0
  596. package/src/cli/index.ts +1 -1
  597. package/src/components/CommentForm.astro +1 -1
  598. package/src/components/Comments.astro +1 -1
  599. package/src/components/InlinePortableTextEditor.tsx +171 -31
  600. package/src/components/OrderedList.astro +14 -0
  601. package/src/components/PortableText.astro +26 -4
  602. package/src/components/index.ts +12 -1
  603. package/src/components/ordered-list.ts +549 -0
  604. package/src/content/converters/numbered-list.ts +148 -0
  605. package/src/content/converters/portable-text-to-prosemirror.ts +59 -9
  606. package/src/content/converters/prosemirror-to-portable-text.ts +23 -12
  607. package/src/content/converters/types.ts +2 -0
  608. package/src/content/portable-text-lists.ts +205 -0
  609. package/src/database/dialect-helpers.ts +3 -22
  610. package/src/database/migrations/055_content_translation_group_locale_index.ts +67 -0
  611. package/src/database/migrations/056_taxonomy_term_sort_order.ts +189 -0
  612. package/src/database/migrations/057_collection_hidden.ts +24 -0
  613. package/src/database/migrations/058_collection_sort_order.ts +20 -0
  614. package/src/database/migrations/059_revision_prune_queue.ts +36 -0
  615. package/src/database/migrations/runner.ts +10 -0
  616. package/src/database/repositories/content.ts +191 -178
  617. package/src/database/repositories/revision.ts +82 -17
  618. package/src/database/repositories/taxonomy.ts +202 -7
  619. package/src/database/repositories/types.ts +7 -0
  620. package/src/database/types.ts +13 -1
  621. package/src/database/validate.ts +39 -0
  622. package/src/db/adapters.ts +8 -0
  623. package/src/deferred-tasks.ts +71 -0
  624. package/src/emdash-runtime.ts +268 -92
  625. package/src/index.ts +2 -0
  626. package/src/loader.ts +46 -24
  627. package/src/media/usage/gc.ts +50 -0
  628. package/src/object-cache/index.ts +160 -3
  629. package/src/plugins/routes.ts +34 -0
  630. package/src/plugins/storage-indexes.ts +50 -11
  631. package/src/query.ts +21 -42
  632. package/src/redirects/cache.ts +79 -19
  633. package/src/request-context.ts +3 -0
  634. package/src/scheduled-publish.ts +6 -1
  635. package/src/schema/registry.ts +95 -3
  636. package/src/schema/types.ts +24 -0
  637. package/src/search/fts-manager.ts +50 -10
  638. package/src/search/index.ts +2 -0
  639. package/src/search/types.ts +6 -0
  640. package/src/seed/apply.ts +22 -2
  641. package/src/seed/types.ts +10 -0
  642. package/src/taxonomies/index.ts +11 -7
  643. package/src/taxonomies/term-counts.ts +2 -4
  644. package/src/ui-comments.ts +19 -0
  645. package/src/ui.ts +11 -3
  646. package/src/virtual-modules.d.ts +8 -0
  647. package/dist/adapters-C0ONzkUP.d.mts.map +0 -1
  648. package/dist/after-B1IIdH3Y.mjs +0 -29
  649. package/dist/after-B1IIdH3Y.mjs.map +0 -1
  650. package/dist/api-DgPbMlng.mjs.map +0 -1
  651. package/dist/apply-1_6ra7NP.mjs.map +0 -1
  652. package/dist/cache-B26cufFd.mjs +0 -65
  653. package/dist/cache-B26cufFd.mjs.map +0 -1
  654. package/dist/content-CpfKV9QE.mjs.map +0 -1
  655. package/dist/dialect-helpers-DFwyWjTM.mjs.map +0 -1
  656. package/dist/errors-DtEXIQQV.mjs.map +0 -1
  657. package/dist/fts-manager-vncsZIJm.mjs.map +0 -1
  658. package/dist/index-j9rTh3cp.d.mts.map +0 -1
  659. package/dist/loader-C1XOLV5b.mjs.map +0 -1
  660. package/dist/menus-C6qhqP4X.mjs.map +0 -1
  661. package/dist/object-cache-Bok5j2ae.mjs.map +0 -1
  662. package/dist/public-url-DSGTnJFw.mjs.map +0 -1
  663. package/dist/query-DCiXI7OZ.mjs.map +0 -1
  664. package/dist/redirects-BOn2DIUs.mjs.map +0 -1
  665. package/dist/registry-BP1JK2xh.mjs.map +0 -1
  666. package/dist/relations-DHFQGX0h.d.mts.map +0 -1
  667. package/dist/runner-BsI18UgP.mjs.map +0 -1
  668. package/dist/site-url-8N3kSyVZ.mjs +0 -13
  669. package/dist/site-url-8N3kSyVZ.mjs.map +0 -1
  670. package/dist/taxonomies-B61CRSha.mjs.map +0 -1
  671. package/dist/taxonomies-Dbdki3Un.mjs.map +0 -1
  672. package/dist/taxonomy-DvwWAPvA.mjs.map +0 -1
  673. package/dist/types-84Bque3-.d.mts.map +0 -1
  674. package/dist/types-jISEalTX.d.mts.map +0 -1
  675. package/dist/types-o7xo7VgH.mjs.map +0 -1
  676. package/dist/validate-CdYcY-Ln.d.mts.map +0 -1
  677. package/dist/validate-VPnKoIzW.mjs.map +0 -1
  678. package/dist/version-Bdfb34kk.mjs +0 -7
  679. /package/dist/{api-tokens-CEsW_jCg.mjs → api-tokens-Dai9dND0.mjs} +0 -0
  680. /package/dist/{ssrf-BB__xfNM.mjs → ssrf-Cj568Dgs.mjs} +0 -0
  681. /package/dist/{types-CK0LxPUQ.mjs → types-DKuWPYV5.mjs} +0 -0
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Collection reorder endpoint
3
+ *
4
+ * POST /_emdash/api/schema/collections/reorder - Set the admin sidebar order
5
+ */
6
+
7
+ import type { APIRoute } from "astro";
8
+
9
+ import { requirePerm } from "#api/authorize.js";
10
+ import { requireDb, unwrapResult } from "#api/error.js";
11
+ import { handleSchemaCollectionReorder } from "#api/index.js";
12
+ import { parseBody, isParseError } from "#api/parse.js";
13
+ import { collectionReorderBody } from "#api/schemas.js";
14
+
15
+ export const prerender = false;
16
+
17
+ export const POST: APIRoute = async ({ request, locals }) => {
18
+ const { emdash, user } = locals;
19
+
20
+ const dbErr = requireDb(emdash?.db);
21
+ if (dbErr) return dbErr;
22
+
23
+ const denied = requirePerm(user, "schema:manage");
24
+ if (denied) return denied;
25
+
26
+ const body = await parseBody(request, collectionReorderBody);
27
+ if (isParseError(body)) return body;
28
+
29
+ const result = await handleSchemaCollectionReorder(emdash.db, body.slugs);
30
+ return unwrapResult(result);
31
+ };
@@ -79,6 +79,8 @@ import type { PortableTextBlock } from "emdash";
79
79
  description: c.description,
80
80
  icon: c.icon,
81
81
  supports: c.supports,
82
+ hidden: c.hidden,
83
+ sortOrder: c.sortOrder,
82
84
  fields: c.fields.map((f) => ({
83
85
  slug: f.slug,
84
86
  label: f.label,
@@ -21,6 +21,7 @@ export const prerender = false;
21
21
  * - collection: Collection slug (required)
22
22
  * - enabled: boolean (required)
23
23
  * - weights: Optional field weights for ranking
24
+ * - tokenize: Optional FTS5 tokenizer configuration
24
25
  */
25
26
  export const POST: APIRoute = async ({ request, locals }) => {
26
27
  const { emdash, user } = locals;
@@ -40,7 +41,10 @@ export const POST: APIRoute = async ({ request, locals }) => {
40
41
  try {
41
42
  if (body.enabled) {
42
43
  // Enable search - creates FTS table, triggers, and populates index
43
- await ftsManager.enableSearch(body.collection, { weights: body.weights });
44
+ await ftsManager.enableSearch(body.collection, {
45
+ weights: body.weights,
46
+ tokenize: body.tokenize,
47
+ });
44
48
 
45
49
  const stats = await ftsManager.getIndexStats(body.collection);
46
50
 
@@ -57,7 +57,12 @@ export const POST: APIRoute = async ({ request, locals }) => {
57
57
  }
58
58
 
59
59
  // Rebuild the index
60
- await ftsManager.rebuildIndex(body.collection, searchableFields, config.weights);
60
+ await ftsManager.rebuildIndex(
61
+ body.collection,
62
+ searchableFields,
63
+ config.weights,
64
+ config.tokenize,
65
+ );
61
66
 
62
67
  // Get stats after rebuild
63
68
  const stats = await ftsManager.getIndexStats(body.collection);
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Taxonomy term reorder endpoint
3
+ *
4
+ * POST /_emdash/api/taxonomies/:name/reorder
5
+ * body: { parentId?, ids }
6
+ *
7
+ * Sets the manual order of one sibling group. There is no `locale`: a term
8
+ * holds one position across every locale it is translated into.
9
+ */
10
+
11
+ import type { APIRoute } from "astro";
12
+
13
+ import { requirePerm } from "#api/authorize.js";
14
+ import { apiError, handleError, requireDb, unwrapResult } from "#api/error.js";
15
+ import { handleTermReorder } from "#api/handlers/taxonomies.js";
16
+ import { isParseError, parseBody } from "#api/parse.js";
17
+ import { reorderTermsBody } from "#api/schemas.js";
18
+
19
+ export const prerender = false;
20
+
21
+ export const POST: APIRoute = async ({ params, request, locals }) => {
22
+ const { emdash, user } = locals;
23
+ const { name } = params;
24
+ if (!name) return apiError("VALIDATION_ERROR", "Taxonomy name required", 400);
25
+
26
+ const dbErr = requireDb(emdash?.db);
27
+ if (dbErr) return dbErr;
28
+
29
+ const denied = requirePerm(user, "taxonomies:manage");
30
+ if (denied) return denied;
31
+
32
+ try {
33
+ const body = await parseBody(request, reorderTermsBody);
34
+ if (isParseError(body)) return body;
35
+
36
+ const result = await handleTermReorder(emdash.db, name, body);
37
+ return unwrapResult(result);
38
+ } catch (error) {
39
+ return handleError(error, "Failed to reorder terms", "TERM_REORDER_ERROR");
40
+ }
41
+ };
@@ -31,6 +31,12 @@ export interface ManifestCollection {
31
31
  supports: string[];
32
32
  hasSeo: boolean;
33
33
  urlPattern?: string;
34
+ /**
35
+ * Omit the auto-generated sidebar entry in the admin. The collection is
36
+ * still listed in the manifest so its routes, editor, and API keep working
37
+ * — only the navigation link is dropped.
38
+ */
39
+ hidden?: boolean;
34
40
  fields: Record<
35
41
  string,
36
42
  {
package/src/cleanup.ts CHANGED
@@ -10,13 +10,14 @@
10
10
  */
11
11
 
12
12
  import { createKyselyAdapter, type AuthTables } from "@emdash-cms/auth/adapters/kysely";
13
- import { sql, type Kysely } from "kysely";
13
+ import type { Kysely } from "kysely";
14
14
 
15
15
  import { cleanupExpiredChallenges } from "./auth/challenge-store.js";
16
16
  import { MediaRepository } from "./database/repositories/media.js";
17
17
  import { RevisionRepository } from "./database/repositories/revision.js";
18
18
  import type { Database } from "./database/types.js";
19
19
  import { removeUploadAttempt } from "./media/upload-attempts.js";
20
+ import { cleanupMediaUsageGenerations } from "./media/usage/gc.js";
20
21
  import type { Storage } from "./storage/types.js";
21
22
 
22
23
  /**
@@ -30,19 +31,19 @@ export interface CleanupResult {
30
31
  pendingUploadFiles: number;
31
32
  uploadAttempts: number;
32
33
  revisionsPruned: number;
34
+ mediaUsageStaleGenerations: number;
35
+ mediaUsageAbandonedGenerations: number;
36
+ mediaUsageOrphanOccurrences: number;
33
37
  }
34
38
 
35
- /** Max revisions to keep per entry during periodic pruning */
36
39
  const REVISION_KEEP_COUNT = 50;
37
-
38
- /** Only prune entries that exceed this threshold */
39
- const REVISION_PRUNE_THRESHOLD = REVISION_KEEP_COUNT;
40
+ const REVISION_PRUNE_BATCH_SIZE = 10;
40
41
 
41
42
  /**
42
43
  * Run all system cleanup tasks.
43
44
  *
44
- * Safe to call frequently -- each task is a single DELETE with a WHERE clause,
45
- * so repeated calls with nothing to clean are cheap (no-op queries).
45
+ * Safe to call frequently -- each subsystem tolerates repeated calls, and
46
+ * repeated calls with nothing to clean are cheap.
46
47
  *
47
48
  * @param db - The database instance
48
49
  * @param storage - Optional storage backend for deleting orphaned files.
@@ -60,6 +61,9 @@ export async function runSystemCleanup(
60
61
  pendingUploadFiles: -1,
61
62
  uploadAttempts: -1,
62
63
  revisionsPruned: -1,
64
+ mediaUsageStaleGenerations: -1,
65
+ mediaUsageAbandonedGenerations: -1,
66
+ mediaUsageOrphanOccurrences: -1,
63
67
  };
64
68
 
65
69
  // 1. Passkey challenges (expire after 60s, clean anything past 5 min)
@@ -129,41 +133,42 @@ export async function runSystemCleanup(
129
133
  console.error("[cleanup] Failed to clean media upload attempts:", error);
130
134
  }
131
135
 
132
- // 5. Revision pruning -- trim entries with excessive revision counts
133
136
  try {
134
- result.revisionsPruned = await pruneExcessiveRevisions(db);
137
+ result.revisionsPruned = await pruneQueuedRevisions(db);
135
138
  } catch (error) {
136
139
  console.error("[cleanup] Failed to prune revisions:", error);
137
140
  }
138
141
 
142
+ try {
143
+ const usage = await cleanupMediaUsageGenerations(db);
144
+ result.mediaUsageStaleGenerations = usage.staleGenerations;
145
+ result.mediaUsageAbandonedGenerations = usage.abandonedGenerations;
146
+ result.mediaUsageOrphanOccurrences = usage.orphanOccurrences;
147
+ } catch (error) {
148
+ console.error("[cleanup] Failed to clean media-usage generations:", error);
149
+ }
150
+
139
151
  return result;
140
152
  }
141
153
 
142
- /**
143
- * Find entries with more than REVISION_PRUNE_THRESHOLD revisions and prune
144
- * them down to REVISION_KEEP_COUNT.
145
- */
146
- async function pruneExcessiveRevisions(db: Kysely<Database>): Promise<number> {
147
- const entries = await sql<{ collection: string; entry_id: string }>`
148
- SELECT collection, entry_id
149
- FROM revisions
150
- GROUP BY collection, entry_id
151
- HAVING COUNT(*) > ${REVISION_PRUNE_THRESHOLD}
152
- `.execute(db);
153
-
154
- if (entries.rows.length === 0) return 0;
155
-
154
+ async function pruneQueuedRevisions(db: Kysely<Database>): Promise<number> {
155
+ const queued = await db
156
+ .selectFrom("_emdash_revision_prune_queue")
157
+ .selectAll()
158
+ .orderBy("revision_id")
159
+ .limit(REVISION_PRUNE_BATCH_SIZE)
160
+ .execute();
156
161
  const revisionRepo = new RevisionRepository(db);
157
162
  let totalPruned = 0;
158
163
 
159
- for (const row of entries.rows) {
164
+ for (const row of queued) {
160
165
  try {
161
- const pruned = await revisionRepo.pruneOldRevisions(
166
+ totalPruned += await revisionRepo.pruneQueuedEntry(
162
167
  row.collection,
163
168
  row.entry_id,
169
+ row.revision_id,
164
170
  REVISION_KEEP_COUNT,
165
171
  );
166
- totalPruned += pruned;
167
172
  } catch (error) {
168
173
  console.error(
169
174
  `[cleanup] Failed to prune revisions for ${row.collection}/${row.entry_id}:`,
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import { spawn } from "node:child_process";
8
- import { readFile, access } from "node:fs/promises";
8
+ import { access, readFile } from "node:fs/promises";
9
9
  import { resolve } from "node:path";
10
10
 
11
11
  import { defineCommand } from "citty";
@@ -42,10 +42,15 @@ async function fileExists(path: string): Promise<boolean> {
42
42
  }
43
43
  }
44
44
 
45
+ export const DEV_DEPRECATION_MESSAGE =
46
+ "`emdash dev` is deprecated and will be removed in a future release.\n\n" +
47
+ "Use your project's dev script instead (for example, `pnpm dev`), or run `astro dev` directly.";
48
+
45
49
  export const devCommand = defineCommand({
46
50
  meta: {
47
51
  name: "dev",
48
52
  description: "Start dev server with local database",
53
+ hidden: true,
49
54
  },
50
55
  args: {
51
56
  database: {
@@ -73,6 +78,11 @@ export const devCommand = defineCommand({
73
78
  },
74
79
  },
75
80
  async run({ args }) {
81
+ consola.box({
82
+ title: "DEPRECATED COMMAND",
83
+ message: DEV_DEPRECATION_MESSAGE,
84
+ });
85
+
76
86
  const cwd = resolve(args.cwd);
77
87
  const pkg = await readPackageJson(cwd);
78
88
 
@@ -119,8 +129,8 @@ export const devCommand = defineCommand({
119
129
  const schema = await client.schemaExport();
120
130
  const types = await client.schemaTypes();
121
131
 
122
- const { writeFile, mkdir } = await import("node:fs/promises");
123
- const { resolve: resolvePath, dirname } = await import("node:path");
132
+ const { mkdir, writeFile } = await import("node:fs/promises");
133
+ const { dirname, resolve: resolvePath } = await import("node:path");
124
134
  const outputPath = resolvePath(cwd, ".emdash/types.ts");
125
135
  await mkdir(dirname(outputPath), { recursive: true });
126
136
  await writeFile(outputPath, types, "utf-8");
@@ -316,6 +316,8 @@ async function exportCollections(db: Kysely<Database>): Promise<SeedCollection[]
316
316
  icon: collection.icon || undefined,
317
317
  supports: collection.supports.length > 0 ? collection.supports : undefined,
318
318
  urlPattern: collection.urlPattern || undefined,
319
+ hidden: collection.hidden || undefined,
320
+ sortOrder: collection.sortOrder,
319
321
  fields: fields.map(
320
322
  (field): SeedField => ({
321
323
  slug: field.slug,
package/src/cli/index.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * Commands:
9
9
  * - init: Bootstrap database from template config, or interactive setup
10
10
  * - types: Generate TypeScript types from schema
11
- * - dev: Run dev server with local D1
11
+ * - dev: [DEPRECATED, hidden] Run dev server with a local SQLite database
12
12
  * - seed: Apply a seed file to the database
13
13
  * - export-seed: Export database schema and content as a seed file
14
14
  * - secrets: Generate and inspect EmDash secrets (encryption keys, etc.)
@@ -11,7 +11,7 @@
11
11
  * @example
12
12
  * ```astro
13
13
  * ---
14
- * import { CommentForm } from "emdash/ui";
14
+ * import { CommentForm } from "emdash/ui/comments";
15
15
  * ---
16
16
  * <CommentForm collection="posts" contentId={post.id} />
17
17
  * ```
@@ -8,7 +8,7 @@
8
8
  * @example
9
9
  * ```astro
10
10
  * ---
11
- * import { Comments } from "emdash/ui";
11
+ * import { Comments } from "emdash/ui/comments";
12
12
  * ---
13
13
  * <Comments collection="posts" contentId={post.id} threaded />
14
14
  * ```
@@ -25,9 +25,17 @@ import Suggestion from "@tiptap/suggestion";
25
25
  import * as React from "react";
26
26
  import { createPortal } from "react-dom";
27
27
 
28
+ import {
29
+ deriveLegacyListId,
30
+ normalizeProseMirrorOrderedListJson,
31
+ normalizeListId,
32
+ normalizeListStart,
33
+ readOrderedListMetadata,
34
+ } from "../content/converters/numbered-list.js";
28
35
  import { computeThumbnailSize } from "../media/thumbnail.js";
29
36
  import { CodeMarkExtension } from "./code-mark.js";
30
37
  import { InlineCodeBlockExtension } from "./inline-code-block.js";
38
+ import { EmDashOrderedList } from "./ordered-list.js";
31
39
 
32
40
  // ── Portable Text types ────────────────────────────────────────────
33
41
 
@@ -50,6 +58,8 @@ interface PTTextBlock {
50
58
  style?: "normal" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "blockquote";
51
59
  listItem?: "bullet" | "number";
52
60
  level?: number;
61
+ listId?: string;
62
+ listStart?: number;
53
63
  children: PTSpan[];
54
64
  markDefs?: PTMarkDef[];
55
65
  textAlign?: "left" | "center" | "right" | "justify";
@@ -106,8 +116,8 @@ function attrNum(attrs: Record<string, unknown> | undefined, key: string): numbe
106
116
  function pmToPortableText(doc: PMNode): PTBlock[] {
107
117
  if (!doc || doc.type !== "doc" || !doc.content) return [];
108
118
  const blocks: PTBlock[] = [];
109
- for (const node of doc.content) {
110
- const r = convertPMNode(node);
119
+ for (let i = 0; i < doc.content.length; i++) {
120
+ const r = convertPMNode(doc.content[i]!, `root:${i}`);
111
121
  if (r) {
112
122
  if (Array.isArray(r)) blocks.push(...r);
113
123
  else blocks.push(r);
@@ -116,7 +126,7 @@ function pmToPortableText(doc: PMNode): PTBlock[] {
116
126
  return blocks;
117
127
  }
118
128
 
119
- function convertPMNode(node: PMNode): PTBlock | PTBlock[] | null {
129
+ function convertPMNode(node: PMNode, path: string): PTBlock | PTBlock[] | null {
120
130
  switch (node.type) {
121
131
  case "paragraph": {
122
132
  const { children, markDefs } = convertInline(node.content || []);
@@ -157,9 +167,9 @@ function convertPMNode(node: PMNode): PTBlock | PTBlock[] | null {
157
167
  };
158
168
  }
159
169
  case "bulletList":
160
- return convertPMList(node.content || [], "bullet");
170
+ return convertPMList(node.content || [], "bullet", 1, node.attrs, path);
161
171
  case "orderedList":
162
- return convertPMList(node.content || [], "number");
172
+ return convertPMList(node.content || [], "number", 1, node.attrs, path);
163
173
  case "blockquote": {
164
174
  const blocks: PTTextBlock[] = [];
165
175
  for (const child of node.content || []) {
@@ -245,11 +255,20 @@ function convertPMNode(node: PMNode): PTBlock | PTBlock[] | null {
245
255
  }
246
256
  }
247
257
 
248
- function convertPMList(items: PMNode[], listItem: "bullet" | "number"): PTTextBlock[] {
258
+ function convertPMList(
259
+ items: PMNode[],
260
+ listItem: "bullet" | "number",
261
+ level: number,
262
+ attrs: Record<string, unknown> | undefined,
263
+ path: string,
264
+ ): PTTextBlock[] {
249
265
  const blocks: PTTextBlock[] = [];
250
- for (const item of items) {
266
+ const metadata = listItem === "number" ? readOrderedListMetadata(attrs, path) : undefined;
267
+ for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
268
+ const item = items[itemIndex]!;
251
269
  if (item.type === "listItem") {
252
- for (const child of item.content || []) {
270
+ for (let childIndex = 0; childIndex < (item.content?.length ?? 0); childIndex++) {
271
+ const child = item.content![childIndex]!;
253
272
  if (child.type === "paragraph") {
254
273
  const { children, markDefs } = convertInline(child.content || []);
255
274
  if (children.length > 0) {
@@ -258,11 +277,23 @@ function convertPMList(items: PMNode[], listItem: "bullet" | "number"): PTTextBl
258
277
  _key: k(),
259
278
  style: "normal",
260
279
  listItem,
261
- level: 1,
280
+ level,
281
+ ...metadata,
262
282
  children,
263
283
  markDefs: markDefs.length > 0 ? markDefs : undefined,
264
284
  });
265
285
  }
286
+ } else if (child.type === "bulletList" || child.type === "orderedList") {
287
+ const childListItem = child.type === "bulletList" ? "bullet" : "number";
288
+ blocks.push(
289
+ ...convertPMList(
290
+ child.content || [],
291
+ childListItem,
292
+ level + 1,
293
+ child.attrs,
294
+ `${path}:${itemIndex}:${childIndex}`,
295
+ ),
296
+ );
266
297
  }
267
298
  }
268
299
  }
@@ -346,7 +377,7 @@ function convertPMMark(
346
377
  function portableTextToPM(blocks: PTBlock[]): JSONContent {
347
378
  if (!blocks || blocks.length === 0) return { type: "doc", content: [{ type: "paragraph" }] };
348
379
 
349
- const content: JSONContent[] = [];
380
+ const content: PMNode[] = [];
350
381
  let i = 0;
351
382
 
352
383
  while (i < blocks.length) {
@@ -358,14 +389,23 @@ function portableTextToPM(blocks: PTBlock[]): JSONContent {
358
389
  if (isPTTextBlock(block) && block.listItem) {
359
390
  const listBlocks: PTTextBlock[] = [];
360
391
  const listType = block.listItem;
392
+ const runStart = i;
393
+ const rootId = listType === "number" ? normalizeListId(block.listId) : undefined;
361
394
  while (i < blocks.length) {
362
395
  const cur = blocks[i];
363
- if (cur && isPTTextBlock(cur) && cur.listItem === listType) {
396
+ if (!cur || !isPTTextBlock(cur) || !cur.listItem) break;
397
+ const level = cur.level || 1;
398
+ const currentId = cur.listItem === "number" ? normalizeListId(cur.listId) : undefined;
399
+ const sameIdentity =
400
+ listType !== "number" ||
401
+ level > 1 ||
402
+ (rootId ? currentId === rootId : currentId === undefined);
403
+ if (level > 1 || (cur.listItem === listType && sameIdentity)) {
364
404
  listBlocks.push(cur);
365
405
  i++;
366
406
  } else break;
367
407
  }
368
- content.push(convertPTList(listBlocks, listType));
408
+ content.push(convertPTList(listBlocks, listType, `root:${runStart}`));
369
409
  } else if (
370
410
  isPTTextBlock(block) &&
371
411
  block.style === "blockquote" &&
@@ -375,7 +415,7 @@ function portableTextToPM(blocks: PTBlock[]): JSONContent {
375
415
  // PT is flat, so a multi-paragraph quote is stored as a run of
376
416
  // blockquote-styled blocks. Mirrors the grouping in
377
417
  // content/converters/portable-text-to-prosemirror.ts; without it
378
- // merges revert on reload in the inline editor too (#1884).
418
+ // merges revert on reload in the inline editor too.
379
419
  const quoteBlocks: PTTextBlock[] = [];
380
420
  while (i < blocks.length) {
381
421
  const cur = blocks[i];
@@ -407,10 +447,13 @@ function portableTextToPM(blocks: PTBlock[]): JSONContent {
407
447
  }
408
448
  }
409
449
 
410
- return { type: "doc", content: content.length > 0 ? content : [{ type: "paragraph" }] };
450
+ return normalizeProseMirrorOrderedListJson({
451
+ type: "doc",
452
+ content: content.length > 0 ? content : [{ type: "paragraph" }],
453
+ });
411
454
  }
412
455
 
413
- function convertPTBlock(block: PTBlock): JSONContent | null {
456
+ function convertPTBlock(block: PTBlock): PMNode | null {
414
457
  if (isPTTextBlock(block)) {
415
458
  const { style = "normal", children, markDefs = [], textAlign } = block;
416
459
  const pmContent = convertPTSpans(children, markDefs);
@@ -530,23 +573,118 @@ function convertPTBlock(block: PTBlock): JSONContent | null {
530
573
  };
531
574
  }
532
575
 
533
- function convertPTList(items: PTTextBlock[], listType: "bullet" | "number"): JSONContent {
576
+ function convertPTList(
577
+ items: PTTextBlock[],
578
+ listType: "bullet" | "number",
579
+ context: string,
580
+ ): PMNode {
581
+ const rootItems: PMNode[] = [];
582
+ let index = 0;
583
+
584
+ while (index < items.length) {
585
+ const item = items[index]!;
586
+ const level = item.level || 1;
587
+ if (level === 1) {
588
+ const nestedItems: PTTextBlock[] = [];
589
+ index++;
590
+ while (index < items.length && (items[index]!.level || 1) > 1) {
591
+ nestedItems.push(items[index]!);
592
+ index++;
593
+ }
594
+ rootItems.push(
595
+ convertPTListItem(item, nestedItems, listType, `${context}:${rootItems.length}`),
596
+ );
597
+ } else {
598
+ rootItems.push(convertPTListItem(item, [], listType, `${context}:${rootItems.length}`));
599
+ index++;
600
+ }
601
+ }
602
+
603
+ const firstItem = items[0]!;
604
+ const listId =
605
+ normalizeListId(firstItem.listId) ?? deriveLegacyListId(`${context}:${firstItem._key}`);
606
+ const listStart = normalizeListStart(firstItem.listStart);
607
+ const metadata =
608
+ listType === "number"
609
+ ? {
610
+ listId,
611
+ ...(listStart === undefined ? {} : { listStart }),
612
+ }
613
+ : undefined;
534
614
  return {
535
615
  type: listType === "bullet" ? "bulletList" : "orderedList",
536
- content: items.map((item) => ({
537
- type: "listItem",
538
- content: [
539
- {
540
- type: "paragraph",
541
- content: convertPTSpans(item.children, item.markDefs || []),
542
- },
543
- ],
544
- })),
616
+ attrs: metadata ? { ...metadata, start: metadata.listStart ?? 1 } : undefined,
617
+ content: rootItems,
545
618
  };
546
619
  }
547
620
 
548
- function convertPTSpans(spans: PTSpan[], markDefs: PTMarkDef[]): JSONContent[] {
549
- const nodes: JSONContent[] = [];
621
+ function belongsToNestedPTGroup(
622
+ item: PTTextBlock,
623
+ minLevel: number,
624
+ parentListType: "bullet" | "number",
625
+ anchorType: "bullet" | "number",
626
+ anchorId: string | undefined,
627
+ ): boolean {
628
+ if ((item.level || 2) > minLevel) return true;
629
+ if ((item.listItem || parentListType) !== anchorType) return false;
630
+ if (anchorType !== "number") return true;
631
+ const itemId = normalizeListId(item.listId);
632
+ return anchorId ? itemId === anchorId : itemId === undefined;
633
+ }
634
+
635
+ function convertPTListItem(
636
+ item: PTTextBlock,
637
+ nestedItems: PTTextBlock[],
638
+ parentListType: "bullet" | "number",
639
+ context: string,
640
+ ): PMNode {
641
+ const content: PMNode[] = [
642
+ {
643
+ type: "paragraph",
644
+ content: convertPTSpans(item.children, item.markDefs || []),
645
+ },
646
+ ];
647
+
648
+ if (nestedItems.length > 0) {
649
+ let minLevel = Infinity;
650
+ for (const nestedItem of nestedItems) {
651
+ const level = nestedItem.level || 2;
652
+ if (level < minLevel) minLevel = level;
653
+ }
654
+
655
+ let index = 0;
656
+ while (index < nestedItems.length) {
657
+ const groupStart = index;
658
+ const anchorType = nestedItems[index]!.listItem || parentListType;
659
+ const anchorId =
660
+ anchorType === "number" ? normalizeListId(nestedItems[index]!.listId) : undefined;
661
+ const nestedGroup: PTTextBlock[] = [];
662
+ do {
663
+ nestedGroup.push(nestedItems[index]!);
664
+ index++;
665
+ } while (
666
+ index < nestedItems.length &&
667
+ belongsToNestedPTGroup(nestedItems[index]!, minLevel, parentListType, anchorType, anchorId)
668
+ );
669
+
670
+ content.push(
671
+ convertPTList(
672
+ nestedGroup.map((nestedItem) => ({
673
+ ...nestedItem,
674
+ level: (nestedItem.level || 2) - 1,
675
+ })),
676
+ anchorType,
677
+ `${context}:nested:${groupStart}`,
678
+ ),
679
+ );
680
+ }
681
+ }
682
+
683
+ return { type: "listItem", content };
684
+ }
685
+
686
+ function convertPTSpans(spans: PTSpan[], markDefs: PTMarkDef[]): PMNode[] {
687
+ const nodes: PMNode[] = [];
550
688
  const mdMap = new Map(markDefs.map((md) => [md._key, md]));
551
689
 
552
690
  for (const span of spans) {
@@ -556,7 +694,7 @@ function convertPTSpans(spans: PTSpan[], markDefs: PTMarkDef[]): JSONContent[] {
556
694
  const text = parts[i];
557
695
  if (text && text.length > 0) {
558
696
  const marks = convertPTMarks(span.marks || [], mdMap);
559
- const node: JSONContent = {
697
+ const node: PMNode = {
560
698
  type: "text",
561
699
  text,
562
700
  };
@@ -1869,7 +2007,7 @@ export function InlinePortableTextEditor({
1869
2007
  async (options?: { keepalive?: boolean }) => {
1870
2008
  // A pagehide flush must not be skipped: an in-flight blur save is
1871
2009
  // cancelled by the navigation, so the keepalive request is the only
1872
- // one that can still land (#1582).
2010
+ // one that can still land.
1873
2011
  if (savingRef.current && !options?.keepalive) return;
1874
2012
 
1875
2013
  const current = JSON.stringify(getBlocks());
@@ -1914,8 +2052,8 @@ export function InlinePortableTextEditor({
1914
2052
  // Flush unsaved edits when the page goes away (browser back/forward,
1915
2053
  // link click, tab close). The blur handler doesn't cover this: unload
1916
2054
  // doesn't reliably fire React blur, and a plain fetch started during
1917
- // unload is cancelled by the navigation — edits were silently lost
1918
- // (#1582). `keepalive` lets the PUT outlive the page.
2055
+ // unload is cancelled by the navigation — edits were silently lost.
2056
+ // `keepalive` lets the PUT outlive the page.
1919
2057
  // Caveat: keepalive caps the body at 64KB — a very long document
1920
2058
  // can still be lost on unload. Upgrade path: debounced autosave
1921
2059
  // while typing (like the admin editor) so unload flushes are rare.
@@ -1945,7 +2083,9 @@ export function InlinePortableTextEditor({
1945
2083
  codeBlock: false,
1946
2084
  // Replaced with CodeMarkExtension so inline code can combine with link/etc.
1947
2085
  code: false,
2086
+ orderedList: false,
1948
2087
  }),
2088
+ EmDashOrderedList,
1949
2089
  CodeMarkExtension,
1950
2090
  InlineCodeBlockExtension,
1951
2091
  Image.extend({
@@ -0,0 +1,14 @@
1
+ ---
2
+ import type { List, Props as ComponentProps } from "astro-portabletext/types";
3
+ import { normalizeListStart } from "../content/converters/numbered-list.js";
4
+
5
+ type OrderedListNode = List & { start?: unknown };
6
+ type Props = ComponentProps<OrderedListNode>;
7
+
8
+ const { node, index: _index, isInline: _isInline, ...attrs } = Astro.props;
9
+ const start = normalizeListStart(node.start) ?? 1;
10
+ ---
11
+
12
+ <ol {...attrs} start={start === 1 ? undefined : start}>
13
+ <slot />
14
+ </ol>