emdash 1.2.0 → 1.3.1

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 (1592) hide show
  1. package/dist/action-token-B1ds4laA.mjs +26 -0
  2. package/dist/action-token-B1ds4laA.mjs.map +1 -0
  3. package/dist/activation-sGF9br3X.mjs +387 -0
  4. package/dist/activation-sGF9br3X.mjs.map +1 -0
  5. package/dist/adapters-BOMSX9PU.d.mts +173 -0
  6. package/dist/adapters-BOMSX9PU.d.mts.map +1 -0
  7. package/dist/allowed-origins-CovsTkm3.mjs +116 -0
  8. package/dist/allowed-origins-CovsTkm3.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +59 -55
  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 +11 -11
  14. package/dist/api-C_LxFnOm.mjs +5077 -0
  15. package/dist/api-C_LxFnOm.mjs.map +1 -0
  16. package/dist/api-tokens-DQ9Ee-vP.mjs +173 -0
  17. package/dist/api-tokens-DQ9Ee-vP.mjs.map +1 -0
  18. package/dist/apply-CLjfxvyH.mjs +1758 -0
  19. package/dist/apply-CLjfxvyH.mjs.map +1 -0
  20. package/dist/approvals-ocK89i4H.mjs +460 -0
  21. package/dist/approvals-ocK89i4H.mjs.map +1 -0
  22. package/dist/artifact-fetch-CgvvpoWQ.mjs +659 -0
  23. package/dist/artifact-fetch-CgvvpoWQ.mjs.map +1 -0
  24. package/dist/artifacts-DwOYYBQm.mjs +323 -0
  25. package/dist/artifacts-DwOYYBQm.mjs.map +1 -0
  26. package/dist/astro/image-endpoint.mjs +12 -2
  27. package/dist/astro/image-endpoint.mjs.map +1 -1
  28. package/dist/astro/index.d.mts +14 -14
  29. package/dist/astro/index.d.mts.map +1 -1
  30. package/dist/astro/index.mjs +122 -20
  31. package/dist/astro/index.mjs.map +1 -1
  32. package/dist/astro/middleware/auth.d.mts +12 -12
  33. package/dist/astro/middleware/auth.d.mts.map +1 -1
  34. package/dist/astro/middleware/auth.mjs +12 -11
  35. package/dist/astro/middleware/auth.mjs.map +1 -1
  36. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  37. package/dist/astro/middleware/redirect.d.mts.map +1 -1
  38. package/dist/astro/middleware/redirect.mjs +161 -61
  39. package/dist/astro/middleware/redirect.mjs.map +1 -1
  40. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  41. package/dist/astro/middleware/request-context.mjs +58 -20
  42. package/dist/astro/middleware/request-context.mjs.map +1 -1
  43. package/dist/astro/middleware/setup.mjs +1 -1
  44. package/dist/astro/middleware.d.mts +12 -12
  45. package/dist/astro/middleware.d.mts.map +1 -1
  46. package/dist/astro/middleware.mjs +137 -419
  47. package/dist/astro/middleware.mjs.map +1 -1
  48. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +16 -16
  49. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +16 -16
  50. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  51. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  52. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +7 -7
  53. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +19 -19
  54. package/dist/astro/routes/api/admin/byline-fields/index.mjs +19 -19
  55. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +19 -19
  56. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +29 -27
  57. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  58. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +29 -27
  59. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  60. package/dist/astro/routes/api/admin/bylines/index.mjs +29 -27
  61. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  62. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +21 -21
  63. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  64. package/dist/astro/routes/api/admin/comments/bulk.mjs +20 -20
  65. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  66. package/dist/astro/routes/api/admin/comments/index.mjs +20 -20
  67. package/dist/astro/routes/api/admin/core-update.mjs +7 -7
  68. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  69. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  70. package/dist/astro/routes/api/admin/media-usage/activation.mjs +22 -22
  71. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +23 -23
  72. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +23 -23
  73. package/dist/astro/routes/api/admin/media-usage/progress.mjs +27 -25
  74. package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -1
  75. package/dist/astro/routes/api/admin/media-usage/repair.mjs +33 -31
  76. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  77. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +23 -23
  78. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +23 -23
  79. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  80. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  81. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  82. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  83. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +81 -77
  84. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  85. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  86. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +80 -76
  87. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +80 -77
  89. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  90. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +91 -88
  91. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  92. package/dist/astro/routes/api/admin/plugins/index.mjs +81 -77
  93. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +7 -7
  95. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +80 -76
  96. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  97. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +90 -87
  98. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +80 -76
  100. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  101. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +80 -77
  102. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  103. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +92 -89
  104. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  105. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +10 -10
  106. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  107. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +82 -79
  108. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  109. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  110. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +81 -77
  111. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  112. package/dist/astro/routes/api/admin/plugins/updates.mjs +80 -76
  113. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  114. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
  115. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +80 -76
  116. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  117. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +7 -7
  118. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +80 -76
  119. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  120. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  121. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +45 -42
  122. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs.map +1 -1
  123. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +45 -42
  124. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs.map +1 -1
  125. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +47 -44
  126. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs.map +1 -1
  127. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +47 -44
  128. package/dist/astro/routes/api/admin/transfer/capabilities.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +47 -44
  130. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs.map +1 -1
  131. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +48 -45
  132. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs.map +1 -1
  133. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +48 -45
  134. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs.map +1 -1
  135. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +47 -44
  136. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs.map +1 -1
  137. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +48 -45
  138. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs.map +1 -1
  139. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +49 -46
  140. package/dist/astro/routes/api/admin/transfer/exports/index.mjs.map +1 -1
  141. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +47 -44
  142. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs.map +1 -1
  143. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +47 -44
  144. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs.map +1 -1
  145. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +49 -46
  146. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs.map +1 -1
  147. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +47 -44
  148. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs.map +1 -1
  149. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +49 -46
  150. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs.map +1 -1
  151. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +47 -44
  152. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs.map +1 -1
  153. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +47 -44
  154. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs.map +1 -1
  155. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +49 -46
  156. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs.map +1 -1
  157. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +47 -44
  158. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs.map +1 -1
  159. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +47 -44
  160. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs.map +1 -1
  161. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +49 -46
  162. package/dist/astro/routes/api/admin/transfer/imports/index.mjs.map +1 -1
  163. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
  164. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  165. package/dist/astro/routes/api/admin/users/_id_/index.mjs +17 -17
  166. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  167. package/dist/astro/routes/api/admin/users/index.mjs +16 -16
  168. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  169. package/dist/astro/routes/api/auth/handover.mjs +6 -6
  170. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  171. package/dist/astro/routes/api/auth/invite/complete.mjs +21 -21
  172. package/dist/astro/routes/api/auth/invite/index.mjs +18 -18
  173. package/dist/astro/routes/api/auth/invite/register-options.mjs +19 -19
  174. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  175. package/dist/astro/routes/api/auth/magic-link/send.mjs +20 -20
  176. package/dist/astro/routes/api/auth/magic-link/verify.mjs +17 -17
  177. package/dist/astro/routes/api/auth/me.mjs +17 -17
  178. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  179. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +8 -8
  180. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  181. package/dist/astro/routes/api/auth/passkey/_id_.mjs +16 -16
  182. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  183. package/dist/astro/routes/api/auth/passkey/options.mjs +21 -21
  184. package/dist/astro/routes/api/auth/passkey/register/options.mjs +19 -19
  185. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +20 -20
  186. package/dist/astro/routes/api/auth/passkey/verify.mjs +21 -21
  187. package/dist/astro/routes/api/auth/signup/complete.mjs +21 -21
  188. package/dist/astro/routes/api/auth/signup/request.mjs +19 -19
  189. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  190. package/dist/astro/routes/api/calendar.mjs +17 -17
  191. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +13 -13
  192. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +21 -21
  193. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  194. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
  195. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +21 -20
  196. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  197. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +7 -10
  198. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
  199. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +23 -20
  200. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  201. package/dist/astro/routes/api/content/_collection_/_id_/permanent.d.mts.map +1 -1
  202. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +7 -6
  203. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -1
  204. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +12 -12
  205. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +36 -34
  206. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  207. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
  208. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +21 -20
  209. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  210. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +40 -38
  211. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  212. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +40 -38
  213. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  214. package/dist/astro/routes/api/content/_collection_/_id_/restore.d.mts.map +1 -1
  215. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +7 -6
  216. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
  217. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  218. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
  219. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +22 -21
  220. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  221. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
  222. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +46 -33
  223. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  224. package/dist/astro/routes/api/content/_collection_/_id_/translations.d.mts.map +1 -1
  225. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +9 -5
  226. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -1
  227. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
  228. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +21 -20
  229. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  230. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  231. package/dist/astro/routes/api/content/_collection_/_id_.mjs +30 -23
  232. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  233. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  234. package/dist/astro/routes/api/content/_collection_/index.mjs +20 -23
  235. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  236. package/dist/astro/routes/api/content/_collection_/trash.mjs +17 -17
  237. package/dist/astro/routes/api/dashboard.d.mts.map +1 -1
  238. package/dist/astro/routes/api/dashboard.mjs +27 -15
  239. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  240. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  241. package/dist/astro/routes/api/dev/scheduled-tasks.d.mts +12 -0
  242. package/dist/astro/routes/api/dev/scheduled-tasks.d.mts.map +1 -0
  243. package/dist/astro/routes/api/dev/scheduled-tasks.mjs +142 -0
  244. package/dist/astro/routes/api/dev/scheduled-tasks.mjs.map +1 -0
  245. package/dist/astro/routes/api/health.mjs +6 -6
  246. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  247. package/dist/astro/routes/api/import/probe.mjs +31 -27
  248. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  249. package/dist/astro/routes/api/import/wordpress/analyze.d.mts.map +1 -1
  250. package/dist/astro/routes/api/import/wordpress/analyze.mjs +8 -21
  251. package/dist/astro/routes/api/import/wordpress/analyze.mjs.map +1 -1
  252. package/dist/astro/routes/api/import/wordpress/execute.d.mts +15 -14
  253. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  254. package/dist/astro/routes/api/import/wordpress/execute.mjs +36 -36
  255. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  256. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  257. package/dist/astro/routes/api/import/wordpress/media.mjs +21 -21
  258. package/dist/astro/routes/api/import/wordpress/prepare.mjs +22 -20
  259. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  260. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  261. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +32 -30
  262. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  263. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  264. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +32 -27
  265. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  266. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  267. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  268. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +66 -43
  269. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  270. package/dist/astro/routes/api/manifest.mjs +6 -6
  271. package/dist/astro/routes/api/mcp.mjs +160 -109
  272. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  273. package/dist/astro/routes/api/media/_id_/confirm.mjs +21 -21
  274. package/dist/astro/routes/api/media/_id_/replace.mjs +18 -18
  275. package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
  276. package/dist/astro/routes/api/media/_id_/usage.mjs +35 -33
  277. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  278. package/dist/astro/routes/api/media/_id_.mjs +33 -31
  279. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  280. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  281. package/dist/astro/routes/api/media/file/_...key_.mjs +21 -13
  282. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
  283. package/dist/astro/routes/api/media/folders/_id_.mjs +18 -18
  284. package/dist/astro/routes/api/media/folders/index.mjs +18 -18
  285. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  286. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  287. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  288. package/dist/astro/routes/api/media/upload-url.mjs +20 -20
  289. package/dist/astro/routes/api/media.mjs +37 -35
  290. package/dist/astro/routes/api/media.mjs.map +1 -1
  291. package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
  292. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +24 -22
  293. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  294. package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
  295. package/dist/astro/routes/api/menus/_name_/items.mjs +23 -21
  296. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  297. package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
  298. package/dist/astro/routes/api/menus/_name_/reorder.mjs +23 -21
  299. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  300. package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
  301. package/dist/astro/routes/api/menus/_name_/translations.mjs +23 -21
  302. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  303. package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
  304. package/dist/astro/routes/api/menus/_name_.mjs +24 -22
  305. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  306. package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
  307. package/dist/astro/routes/api/menus/index.mjs +23 -21
  308. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  309. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  310. package/dist/astro/routes/api/oauth/device/authorize.mjs +8 -8
  311. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  312. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  313. package/dist/astro/routes/api/oauth/register.mjs +7 -7
  314. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  315. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  316. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  317. package/dist/astro/routes/api/openapi.json.mjs +22 -22
  318. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +12 -12
  319. package/dist/astro/routes/api/redirects/404s/index.mjs +23 -22
  320. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  321. package/dist/astro/routes/api/redirects/404s/summary.mjs +23 -22
  322. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  323. package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -1
  324. package/dist/astro/routes/api/redirects/_id_.mjs +36 -26
  325. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  326. package/dist/astro/routes/api/redirects/index.d.mts.map +1 -1
  327. package/dist/astro/routes/api/redirects/index.mjs +28 -24
  328. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  329. package/dist/astro/routes/api/relations/_id_/index.mjs +40 -38
  330. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  331. package/dist/astro/routes/api/relations/index.mjs +40 -38
  332. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  333. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  334. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +19 -19
  335. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +80 -76
  336. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  337. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +80 -76
  338. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  339. package/dist/astro/routes/api/schema/block-types/index.mjs +80 -76
  340. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  341. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +80 -76
  342. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  343. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +80 -76
  344. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  345. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +80 -76
  346. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  347. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +80 -76
  348. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  349. package/dist/astro/routes/api/schema/collections/index.mjs +80 -76
  350. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  351. package/dist/astro/routes/api/schema/collections/reorder.mjs +80 -76
  352. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  353. package/dist/astro/routes/api/schema/index.mjs +20 -18
  354. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  355. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +80 -76
  356. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  357. package/dist/astro/routes/api/schema/orphans/index.mjs +80 -76
  358. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  359. package/dist/astro/routes/api/search/enable.mjs +23 -21
  360. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  361. package/dist/astro/routes/api/search/index.mjs +22 -20
  362. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  363. package/dist/astro/routes/api/search/rebuild.mjs +23 -21
  364. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  365. package/dist/astro/routes/api/search/stats.mjs +12 -10
  366. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  367. package/dist/astro/routes/api/search/suggest.mjs +22 -20
  368. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  369. package/dist/astro/routes/api/sections/_slug_.mjs +22 -20
  370. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  371. package/dist/astro/routes/api/sections/index.mjs +22 -20
  372. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  373. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  374. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  375. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  376. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  377. package/dist/astro/routes/api/settings/domain-notify.mjs +9 -9
  378. package/dist/astro/routes/api/settings/domain.d.mts.map +1 -1
  379. package/dist/astro/routes/api/settings/domain.mjs +23 -18
  380. package/dist/astro/routes/api/settings/domain.mjs.map +1 -1
  381. package/dist/astro/routes/api/settings/email.mjs +6 -6
  382. package/dist/astro/routes/api/settings.d.mts.map +1 -1
  383. package/dist/astro/routes/api/settings.mjs +30 -25
  384. package/dist/astro/routes/api/settings.mjs.map +1 -1
  385. package/dist/astro/routes/api/setup/admin-verify.d.mts.map +1 -1
  386. package/dist/astro/routes/api/setup/admin-verify.mjs +27 -23
  387. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  388. package/dist/astro/routes/api/setup/admin.mjs +20 -20
  389. package/dist/astro/routes/api/setup/dev-bypass.mjs +52 -48
  390. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  391. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  392. package/dist/astro/routes/api/setup/index.mjs +58 -54
  393. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  394. package/dist/astro/routes/api/setup/status.mjs +6 -6
  395. package/dist/astro/routes/api/site/domain-proof.mjs +16 -12
  396. package/dist/astro/routes/api/site/domain-proof.mjs.map +1 -1
  397. package/dist/astro/routes/api/snapshot.mjs +8 -8
  398. package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
  399. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +31 -28
  400. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  401. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
  402. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +31 -28
  403. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  404. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
  405. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +32 -29
  406. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  407. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
  408. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +31 -28
  409. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  410. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +28 -26
  411. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  412. package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
  413. package/dist/astro/routes/api/taxonomies/_name_.mjs +32 -29
  414. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  415. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +44 -42
  416. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  417. package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
  418. package/dist/astro/routes/api/taxonomies/index.mjs +31 -28
  419. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  420. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  421. package/dist/astro/routes/api/typegen.mjs +6 -6
  422. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  423. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +21 -21
  424. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  425. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  426. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  427. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  428. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
  429. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +20 -19
  430. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  431. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
  432. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +26 -23
  433. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  434. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
  435. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +25 -22
  436. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  437. package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
  438. package/dist/astro/routes/api/widget-areas/_name_.mjs +14 -11
  439. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  440. package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
  441. package/dist/astro/routes/api/widget-areas/index.mjs +25 -22
  442. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  443. package/dist/astro/routes/api/widget-components.mjs +5 -5
  444. package/dist/astro/routes/robots.txt.d.mts.map +1 -1
  445. package/dist/astro/routes/robots.txt.mjs +43 -8
  446. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  447. package/dist/astro/routes/sitemap-_collection_.xml.mjs +19 -12
  448. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  449. package/dist/astro/routes/sitemap.xml.mjs +16 -9
  450. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  451. package/dist/astro/types.d.mts +19 -17
  452. package/dist/astro/types.d.mts.map +1 -1
  453. package/dist/audit-B8XE-0UV.mjs +127 -0
  454. package/dist/audit-B8XE-0UV.mjs.map +1 -0
  455. package/dist/auth/providers/github.d.mts +1 -1
  456. package/dist/auth/providers/google.d.mts +1 -1
  457. package/dist/auth/providers/microsoft.d.mts +1 -1
  458. package/dist/authoritative-records-LPtrIGOY.mjs +5183 -0
  459. package/dist/authoritative-records-LPtrIGOY.mjs.map +1 -0
  460. package/dist/authorize-CoDsRRp5.mjs +74 -0
  461. package/dist/authorize-CoDsRRp5.mjs.map +1 -0
  462. package/dist/backup-2Wj-hTCN.mjs +246 -0
  463. package/dist/backup-2Wj-hTCN.mjs.map +1 -0
  464. package/dist/block-types-C3gJEe7l.mjs +132 -0
  465. package/dist/block-types-C3gJEe7l.mjs.map +1 -0
  466. package/dist/block-values-CgbMtSGU.mjs +215 -0
  467. package/dist/block-values-CgbMtSGU.mjs.map +1 -0
  468. package/dist/byline-CzGZC2Zs.mjs +922 -0
  469. package/dist/byline-CzGZC2Zs.mjs.map +1 -0
  470. package/dist/byline-fields-B1qHvRps.mjs +280 -0
  471. package/dist/byline-fields-B1qHvRps.mjs.map +1 -0
  472. package/dist/byline-fields-vYd_4Q1e.mjs +123 -0
  473. package/dist/byline-fields-vYd_4Q1e.mjs.map +1 -0
  474. package/dist/byline-registry-BhzpO41z.mjs +406 -0
  475. package/dist/byline-registry-BhzpO41z.mjs.map +1 -0
  476. package/dist/bylines-BF555iIz.mjs +150 -0
  477. package/dist/bylines-BF555iIz.mjs.map +1 -0
  478. package/dist/bylines-DJx6IWWi.mjs +234 -0
  479. package/dist/bylines-DJx6IWWi.mjs.map +1 -0
  480. package/dist/cache-BWzswWB-.mjs +151 -0
  481. package/dist/cache-BWzswWB-.mjs.map +1 -0
  482. package/dist/canonical-DjF_z6GI.mjs +174 -0
  483. package/dist/canonical-DjF_z6GI.mjs.map +1 -0
  484. package/dist/capture-triggers-D7g3fOZj.mjs +362 -0
  485. package/dist/capture-triggers-D7g3fOZj.mjs.map +1 -0
  486. package/dist/challenge-store-Cfjdvw86.mjs +51 -0
  487. package/dist/challenge-store-Cfjdvw86.mjs.map +1 -0
  488. package/dist/checksum-BF4acJwn.mjs +162 -0
  489. package/dist/checksum-BF4acJwn.mjs.map +1 -0
  490. package/dist/chrome-tags-BDs29G3g.mjs +24 -0
  491. package/dist/chrome-tags-BDs29G3g.mjs.map +1 -0
  492. package/dist/chunks-CYBOL-zn.mjs +25 -0
  493. package/dist/chunks-CYBOL-zn.mjs.map +1 -0
  494. package/dist/cli/index.mjs +146 -130
  495. package/dist/cli/index.mjs.map +1 -1
  496. package/dist/client/cf-access.d.mts +1 -1
  497. package/dist/client/index.d.mts +47 -47
  498. package/dist/client/index.d.mts.map +1 -1
  499. package/dist/client/index.mjs +14 -11
  500. package/dist/client/index.mjs.map +1 -1
  501. package/dist/collection-slugs-cache-B2J5aESO.mjs +91 -0
  502. package/dist/collection-slugs-cache-B2J5aESO.mjs.map +1 -0
  503. package/dist/comment-DV7dybcs.mjs +335 -0
  504. package/dist/comment-DV7dybcs.mjs.map +1 -0
  505. package/dist/comment-reaction-CWwqiT6x.mjs +85 -0
  506. package/dist/comment-reaction-CWwqiT6x.mjs.map +1 -0
  507. package/dist/comments-DVjWJm8X.mjs +99 -0
  508. package/dist/comments-DVjWJm8X.mjs.map +1 -0
  509. package/dist/comments-Q-ILHCEI.mjs +195 -0
  510. package/dist/comments-Q-ILHCEI.mjs.map +1 -0
  511. package/dist/components-DnOmvvgg.mjs +112 -0
  512. package/dist/components-DnOmvvgg.mjs.map +1 -0
  513. package/dist/config-9IzA83_U.d.mts +6811 -0
  514. package/dist/config-9IzA83_U.d.mts.map +1 -0
  515. package/dist/config-BdQzFtmR.mjs +228 -0
  516. package/dist/config-BdQzFtmR.mjs.map +1 -0
  517. package/dist/config-Cs2RBkJ6.d.mts +41 -0
  518. package/dist/config-Cs2RBkJ6.d.mts.map +1 -0
  519. package/dist/config-Cs_AwWXI.mjs +106 -0
  520. package/dist/config-Cs_AwWXI.mjs.map +1 -0
  521. package/dist/connection-CiXgZyCY.mjs +36 -0
  522. package/dist/connection-CiXgZyCY.mjs.map +1 -0
  523. package/dist/content-Dt0Os_WQ.mjs +2109 -0
  524. package/dist/content-Dt0Os_WQ.mjs.map +1 -0
  525. package/dist/content-list-query-BK26u9Ly.d.mts +26 -0
  526. package/dist/content-list-query-BK26u9Ly.d.mts.map +1 -0
  527. package/dist/content-policy-BLDbNJOb.mjs +46 -0
  528. package/dist/content-policy-BLDbNJOb.mjs.map +1 -0
  529. package/dist/content-repair-CjwbLy4m.mjs +442 -0
  530. package/dist/content-repair-CjwbLy4m.mjs.map +1 -0
  531. package/dist/context-ErV7UdQY.mjs +2089 -0
  532. package/dist/context-ErV7UdQY.mjs.map +1 -0
  533. package/dist/credits-BRyjafiF.mjs +110 -0
  534. package/dist/credits-BRyjafiF.mjs.map +1 -0
  535. package/dist/cron-Bm5xa7tv.mjs +306 -0
  536. package/dist/cron-Bm5xa7tv.mjs.map +1 -0
  537. package/dist/dashboard-DVxQ5XiI.mjs +168 -0
  538. package/dist/dashboard-DVxQ5XiI.mjs.map +1 -0
  539. package/dist/database/migration-lock.d.mts +17 -4
  540. package/dist/database/migration-lock.d.mts.map +1 -1
  541. package/dist/database/migration-lock.mjs +33 -6
  542. package/dist/database/migration-lock.mjs.map +1 -1
  543. package/dist/db/index.d.mts +3 -3
  544. package/dist/db/index.mjs +2 -2
  545. package/dist/db/libsql-migrations.d.mts +1 -1
  546. package/dist/db/libsql-migrations.mjs +5 -5
  547. package/dist/db/libsql.d.mts +1 -1
  548. package/dist/db/postgres-migrations.d.mts +1 -1
  549. package/dist/db/postgres-migrations.mjs +5 -5
  550. package/dist/db/postgres.d.mts +1 -1
  551. package/dist/db/sqlite-migrations.d.mts +1 -1
  552. package/dist/db/sqlite-migrations.mjs +5 -5
  553. package/dist/db/sqlite.d.mts +1 -1
  554. package/dist/db/sqlite.mjs +1 -1
  555. package/dist/db-errors-unnO6yiZ.mjs +65 -0
  556. package/dist/db-errors-unnO6yiZ.mjs.map +1 -0
  557. package/dist/default-B9Tf2n94.mjs +81 -0
  558. package/dist/default-B9Tf2n94.mjs.map +1 -0
  559. package/dist/deferred-tasks-CpPEqsga.d.mts +9 -0
  560. package/dist/deferred-tasks-CpPEqsga.d.mts.map +1 -0
  561. package/dist/destination-DR3IHjmy.mjs +18 -0
  562. package/dist/destination-DR3IHjmy.mjs.map +1 -0
  563. package/dist/dev-typegen-ZeWYV8Jp.mjs +29 -0
  564. package/dist/dev-typegen-ZeWYV8Jp.mjs.map +1 -0
  565. package/dist/device-flow-BbYNZ9Xi.mjs +521 -0
  566. package/dist/device-flow-BbYNZ9Xi.mjs.map +1 -0
  567. package/dist/digest-DlBa7kJl.mjs +194 -0
  568. package/dist/digest-DlBa7kJl.mjs.map +1 -0
  569. package/dist/direct-executor-5T8gkhvA.mjs +117 -0
  570. package/dist/direct-executor-5T8gkhvA.mjs.map +1 -0
  571. package/dist/dist-DY0aOmAP.mjs +810 -0
  572. package/dist/dist-DY0aOmAP.mjs.map +1 -0
  573. package/dist/email-console-v3OM8It-.mjs +50 -0
  574. package/dist/email-console-v3OM8It-.mjs.map +1 -0
  575. package/dist/email-locale-CoZo-oZx.mjs +25 -0
  576. package/dist/email-locale-CoZo-oZx.mjs.map +1 -0
  577. package/dist/emdash-runtime-DwezbIqQ.mjs +4392 -0
  578. package/dist/emdash-runtime-DwezbIqQ.mjs.map +1 -0
  579. package/dist/enrich-C3XIJi0O.mjs +194 -0
  580. package/dist/enrich-C3XIJi0O.mjs.map +1 -0
  581. package/dist/entry-lock-CY7XpdSw.d.mts +4568 -0
  582. package/dist/entry-lock-CY7XpdSw.d.mts.map +1 -0
  583. package/dist/entry-lock-DDuWaAiP.mjs +1211 -0
  584. package/dist/entry-lock-DDuWaAiP.mjs.map +1 -0
  585. package/dist/entry-lock-D_Og9Gy3.mjs +163 -0
  586. package/dist/entry-lock-D_Og9Gy3.mjs.map +1 -0
  587. package/dist/entry-locks-Cp8_BcQQ.mjs +167 -0
  588. package/dist/entry-locks-Cp8_BcQQ.mjs.map +1 -0
  589. package/dist/env-types-Br8uywYA.mjs +38 -0
  590. package/dist/env-types-Br8uywYA.mjs.map +1 -0
  591. package/dist/error-CT2SsX5S.mjs +90 -0
  592. package/dist/error-CT2SsX5S.mjs.map +1 -0
  593. package/dist/errors-BMaCpLeS.mjs +479 -0
  594. package/dist/errors-BMaCpLeS.mjs.map +1 -0
  595. package/dist/errors-DlJwot7q.mjs +120 -0
  596. package/dist/errors-DlJwot7q.mjs.map +1 -0
  597. package/dist/escape-BfbDyuQ-.mjs +9 -0
  598. package/dist/escape-BfbDyuQ-.mjs.map +1 -0
  599. package/dist/fence-BOD3SxZG.mjs +162 -0
  600. package/dist/fence-BOD3SxZG.mjs.map +1 -0
  601. package/dist/field-defs-cache-C7sR7ZeU.mjs +77 -0
  602. package/dist/field-defs-cache-C7sR7ZeU.mjs.map +1 -0
  603. package/dist/field-map-C_rDXfdJ.mjs +84 -0
  604. package/dist/field-map-C_rDXfdJ.mjs.map +1 -0
  605. package/dist/focal-point-CgCcr1Ca.mjs +23 -0
  606. package/dist/focal-point-CgCcr1Ca.mjs.map +1 -0
  607. package/dist/fts-manager-BzFo0xx6.mjs +483 -0
  608. package/dist/fts-manager-BzFo0xx6.mjs.map +1 -0
  609. package/dist/gc-B_c3DPpi.mjs +75 -0
  610. package/dist/gc-B_c3DPpi.mjs.map +1 -0
  611. package/dist/hash-A-o2ZX8O.mjs +37 -0
  612. package/dist/hash-A-o2ZX8O.mjs.map +1 -0
  613. package/dist/hook-result-f8t7hIuu.d.mts +31 -0
  614. package/dist/hook-result-f8t7hIuu.d.mts.map +1 -0
  615. package/dist/hreflang-BpUK9Lcu.mjs +105 -0
  616. package/dist/hreflang-BpUK9Lcu.mjs.map +1 -0
  617. package/dist/hreflang-D07R-RbI.d.mts +50 -0
  618. package/dist/hreflang-D07R-RbI.d.mts.map +1 -0
  619. package/dist/http-route-dispatch-C2Ep2Uf6.mjs +342 -0
  620. package/dist/http-route-dispatch-C2Ep2Uf6.mjs.map +1 -0
  621. package/dist/identity-BivQ8wkV.mjs +35 -0
  622. package/dist/identity-BivQ8wkV.mjs.map +1 -0
  623. package/dist/import-B4UvHNJz.mjs +2126 -0
  624. package/dist/import-B4UvHNJz.mjs.map +1 -0
  625. package/dist/index-C37Ty40w.d.mts +623 -0
  626. package/dist/index-C37Ty40w.d.mts.map +1 -0
  627. package/dist/index.d.mts +23 -23
  628. package/dist/index.mjs +112 -108
  629. package/dist/install-finalization-BbYaB4wj.mjs +58 -0
  630. package/dist/install-finalization-BbYaB4wj.mjs.map +1 -0
  631. package/dist/json-recordset-BjYIWFkV.mjs +12 -0
  632. package/dist/json-recordset-BjYIWFkV.mjs.map +1 -0
  633. package/dist/json-schema-Cde7le0s.mjs +15 -0
  634. package/dist/json-schema-Cde7le0s.mjs.map +1 -0
  635. package/dist/keys-CusTXpw-.mjs +61 -0
  636. package/dist/keys-CusTXpw-.mjs.map +1 -0
  637. package/dist/kinds-DogmNB6n.mjs +974 -0
  638. package/dist/kinds-DogmNB6n.mjs.map +1 -0
  639. package/dist/lifecycle-BLCoCz4T.mjs +25 -0
  640. package/dist/lifecycle-BLCoCz4T.mjs.map +1 -0
  641. package/dist/load-Dds3KhXr.mjs +28 -0
  642. package/dist/load-Dds3KhXr.mjs.map +1 -0
  643. package/dist/loader-D4w4XE7q.mjs +1420 -0
  644. package/dist/loader-D4w4XE7q.mjs.map +1 -0
  645. package/dist/loops-IYgzQdQu.mjs +205 -0
  646. package/dist/loops-IYgzQdQu.mjs.map +1 -0
  647. package/dist/manifest-builder-CGF5kujD.mjs +196 -0
  648. package/dist/manifest-builder-CGF5kujD.mjs.map +1 -0
  649. package/dist/manifest-schema-B0BxPSjB.mjs +497 -0
  650. package/dist/manifest-schema-B0BxPSjB.mjs.map +1 -0
  651. package/dist/marketplace-DNvEGLqU.mjs +257 -0
  652. package/dist/marketplace-DNvEGLqU.mjs.map +1 -0
  653. package/dist/media/image-endpoint.d.mts +3 -2
  654. package/dist/media/image-endpoint.d.mts.map +1 -1
  655. package/dist/media/image-endpoint.mjs +17 -8
  656. package/dist/media/image-endpoint.mjs.map +1 -1
  657. package/dist/media/index.d.mts +1 -1
  658. package/dist/media/index.mjs +7 -6
  659. package/dist/media/index.mjs.map +1 -1
  660. package/dist/media/local-runtime.d.mts +14 -14
  661. package/dist/media/local-runtime.d.mts.map +1 -1
  662. package/dist/media/local-runtime.mjs +18 -8
  663. package/dist/media/local-runtime.mjs.map +1 -1
  664. package/dist/media-BL9MRrSG.mjs +294 -0
  665. package/dist/media-BL9MRrSG.mjs.map +1 -0
  666. package/dist/media-B_x5B9EA.mjs +373 -0
  667. package/dist/media-B_x5B9EA.mjs.map +1 -0
  668. package/dist/media-allowlist-CpmqBbIQ.mjs +45 -0
  669. package/dist/media-allowlist-CpmqBbIQ.mjs.map +1 -0
  670. package/dist/media-folders-CNs_A_B-.mjs +210 -0
  671. package/dist/media-folders-CNs_A_B-.mjs.map +1 -0
  672. package/dist/media-qTTHVkls.mjs +416 -0
  673. package/dist/media-qTTHVkls.mjs.map +1 -0
  674. package/dist/media-url-GJboA1fl.mjs +43 -0
  675. package/dist/media-url-GJboA1fl.mjs.map +1 -0
  676. package/dist/media-usage-ClWgrX0d.mjs +282 -0
  677. package/dist/media-usage-ClWgrX0d.mjs.map +1 -0
  678. package/dist/media-usage-activation-B8Fjtq0h.mjs +78 -0
  679. package/dist/media-usage-activation-B8Fjtq0h.mjs.map +1 -0
  680. package/dist/media-usage-work-L8-Au4j-.mjs +1036 -0
  681. package/dist/media-usage-work-L8-Au4j-.mjs.map +1 -0
  682. package/dist/media-usage-work-LXgze5j9.mjs +151 -0
  683. package/dist/media-usage-work-LXgze5j9.mjs.map +1 -0
  684. package/dist/menus-BAxcbsbv.mjs +818 -0
  685. package/dist/menus-BAxcbsbv.mjs.map +1 -0
  686. package/dist/menus-BI6oBXco.mjs +92 -0
  687. package/dist/menus-BI6oBXco.mjs.map +1 -0
  688. package/dist/menus-fvGFd4m6.mjs +3725 -0
  689. package/dist/menus-fvGFd4m6.mjs.map +1 -0
  690. package/dist/migrations/index.d.mts +1 -1
  691. package/dist/migrations/index.d.mts.map +1 -1
  692. package/dist/migrations/index.mjs +4 -4
  693. package/dist/mime-DwhtRyUt.mjs +81 -0
  694. package/dist/mime-DwhtRyUt.mjs.map +1 -0
  695. package/dist/mode-DIDSUwuN.mjs +23 -0
  696. package/dist/mode-DIDSUwuN.mjs.map +1 -0
  697. package/dist/node-sqlite-compat-Ddr_mlR9.mjs +63 -0
  698. package/dist/node-sqlite-compat-Ddr_mlR9.mjs.map +1 -0
  699. package/dist/normalize-Ip_hFAm8.mjs +216 -0
  700. package/dist/normalize-Ip_hFAm8.mjs.map +1 -0
  701. package/dist/oauth-authorization-CcMgeT8R.mjs +274 -0
  702. package/dist/oauth-authorization-CcMgeT8R.mjs.map +1 -0
  703. package/dist/oauth-clients-C_osi0PU.mjs +266 -0
  704. package/dist/oauth-clients-C_osi0PU.mjs.map +1 -0
  705. package/dist/oauth-state-store-DGLP-6CK.mjs +50 -0
  706. package/dist/oauth-state-store-DGLP-6CK.mjs.map +1 -0
  707. package/dist/oauth-user-lookup-z77Ee0Hm.mjs +26 -0
  708. package/dist/oauth-user-lookup-z77Ee0Hm.mjs.map +1 -0
  709. package/dist/object-cache/memory.d.mts +1 -1
  710. package/dist/object-cache-EjasjtoQ.mjs +586 -0
  711. package/dist/object-cache-EjasjtoQ.mjs.map +1 -0
  712. package/dist/options-CmUpkyKW.d.mts +81 -0
  713. package/dist/options-CmUpkyKW.d.mts.map +1 -0
  714. package/dist/ownership-DCk5NutQ.mjs +12 -0
  715. package/dist/ownership-DCk5NutQ.mjs.map +1 -0
  716. package/dist/page/index.d.mts +2 -2
  717. package/dist/page/index.mjs +14 -7
  718. package/dist/page/index.mjs.map +1 -1
  719. package/dist/parse-2W-E2f7w.mjs +81 -0
  720. package/dist/parse-2W-E2f7w.mjs.map +1 -0
  721. package/dist/parse-6pN8Xqg5.d.mts +176 -0
  722. package/dist/parse-6pN8Xqg5.d.mts.map +1 -0
  723. package/dist/passkey-config-DTTZB6EI.mjs +46 -0
  724. package/dist/passkey-config-DTTZB6EI.mjs.map +1 -0
  725. package/dist/paths-CQA62503.mjs +77 -0
  726. package/dist/paths-CQA62503.mjs.map +1 -0
  727. package/dist/patterns-CryGz_EV.mjs +159 -0
  728. package/dist/patterns-CryGz_EV.mjs.map +1 -0
  729. package/dist/placeholder-BlfXkucE.d.mts +313 -0
  730. package/dist/placeholder-BlfXkucE.d.mts.map +1 -0
  731. package/dist/plan-B95eiwnF.mjs +135 -0
  732. package/dist/plan-B95eiwnF.mjs.map +1 -0
  733. package/dist/plugin-test-runtime.d.mts +14 -14
  734. package/dist/plugin-test-runtime.d.mts.map +1 -1
  735. package/dist/plugin-test-runtime.mjs +121 -117
  736. package/dist/plugin-tool-name-BDA7m4Xa.mjs +27 -0
  737. package/dist/plugin-tool-name-BDA7m4Xa.mjs.map +1 -0
  738. package/dist/plugin-types.d.mts +2 -2
  739. package/dist/plugin-utils.d.mts +12 -12
  740. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  741. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  742. package/dist/plugins/adapt-sandbox-entry.mjs +9 -8
  743. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  744. package/dist/plugins/host.d.mts +5 -5
  745. package/dist/plugins/host.mjs +57 -51
  746. package/dist/plugins-BhxLJ008.mjs +261 -0
  747. package/dist/plugins-BhxLJ008.mjs.map +1 -0
  748. package/dist/policy-DOJ2sPqB.mjs +53 -0
  749. package/dist/policy-DOJ2sPqB.mjs.map +1 -0
  750. package/dist/portable-text-RCMpCj47.mjs +311 -0
  751. package/dist/portable-text-RCMpCj47.mjs.map +1 -0
  752. package/dist/preview-DFwL5APO.mjs +107 -0
  753. package/dist/preview-DFwL5APO.mjs.map +1 -0
  754. package/dist/protocol-B-ztxp_y.d.mts +65 -0
  755. package/dist/protocol-B-ztxp_y.d.mts.map +1 -0
  756. package/dist/public-plugin-api-routes-ik4fPZMv.mjs +316 -0
  757. package/dist/public-plugin-api-routes-ik4fPZMv.mjs.map +1 -0
  758. package/dist/public-submission-C5JZIykp.mjs +251 -0
  759. package/dist/public-submission-C5JZIykp.mjs.map +1 -0
  760. package/dist/public-url-CQwzRljH.mjs +101 -0
  761. package/dist/public-url-CQwzRljH.mjs.map +1 -0
  762. package/dist/query-BFHjCzSh.mjs +37 -0
  763. package/dist/query-BFHjCzSh.mjs.map +1 -0
  764. package/dist/query-DuwyFr5Z.mjs +41 -0
  765. package/dist/query-DuwyFr5Z.mjs.map +1 -0
  766. package/dist/query-eR_Nz70M.mjs +1157 -0
  767. package/dist/query-eR_Nz70M.mjs.map +1 -0
  768. package/dist/range-BQWPjWgQ.mjs +51 -0
  769. package/dist/range-BQWPjWgQ.mjs.map +1 -0
  770. package/dist/rate-limit-mPKeQ3sm.mjs +127 -0
  771. package/dist/rate-limit-mPKeQ3sm.mjs.map +1 -0
  772. package/dist/receipt-CmUpyuW5.mjs +43 -0
  773. package/dist/receipt-CmUpyuW5.mjs.map +1 -0
  774. package/dist/redirect-BtiMkehU.mjs +19 -0
  775. package/dist/redirect-BtiMkehU.mjs.map +1 -0
  776. package/dist/redirect-DcmNMvOs.mjs +423 -0
  777. package/dist/redirect-DcmNMvOs.mjs.map +1 -0
  778. package/dist/redirect-paths-K5i3xYfR.mjs +36 -0
  779. package/dist/redirect-paths-K5i3xYfR.mjs.map +1 -0
  780. package/dist/redirects-BA_TvtuH.mjs +148 -0
  781. package/dist/redirects-BA_TvtuH.mjs.map +1 -0
  782. package/dist/redirects-BIrRvgn4.mjs +446 -0
  783. package/dist/redirects-BIrRvgn4.mjs.map +1 -0
  784. package/dist/registry/testing.mjs +3 -3
  785. package/dist/registry-DymfZkAN.mjs +8374 -0
  786. package/dist/registry-DymfZkAN.mjs.map +1 -0
  787. package/dist/relations-DrEs3Sc1.mjs +789 -0
  788. package/dist/relations-DrEs3Sc1.mjs.map +1 -0
  789. package/dist/request-cache-5z2WzWmh.mjs +104 -0
  790. package/dist/request-cache-5z2WzWmh.mjs.map +1 -0
  791. package/dist/request-context.d.mts +12 -1
  792. package/dist/request-context.d.mts.map +1 -1
  793. package/dist/request-context.mjs.map +1 -1
  794. package/dist/request-meta-o8RIf9pa.mjs +141 -0
  795. package/dist/request-meta-o8RIf9pa.mjs.map +1 -0
  796. package/dist/resolve-CVy9xgy_.mjs +102 -0
  797. package/dist/resolve-CVy9xgy_.mjs.map +1 -0
  798. package/dist/resolve-DdNXBJSr.mjs +199 -0
  799. package/dist/resolve-DdNXBJSr.mjs.map +1 -0
  800. package/dist/revision-Dx7Uth1X.mjs +374 -0
  801. package/dist/revision-Dx7Uth1X.mjs.map +1 -0
  802. package/dist/route-cache-DAG5dPhh.mjs +20 -0
  803. package/dist/route-cache-DAG5dPhh.mjs.map +1 -0
  804. package/dist/route-wire-Xbsu8Vih.mjs +197 -0
  805. package/dist/route-wire-Xbsu8Vih.mjs.map +1 -0
  806. package/dist/routes-YQkSOsws.mjs +272 -0
  807. package/dist/routes-YQkSOsws.mjs.map +1 -0
  808. package/dist/runner-CLorw5vo.mjs +6669 -0
  809. package/dist/runner-CLorw5vo.mjs.map +1 -0
  810. package/dist/runner-g1A9P-wD.d.mts +73 -0
  811. package/dist/runner-g1A9P-wD.d.mts.map +1 -0
  812. package/dist/runtime.d.mts +13 -13
  813. package/dist/runtime.mjs +6 -4
  814. package/dist/runtime.mjs.map +1 -1
  815. package/dist/schema/project-env-types.mjs +49 -43
  816. package/dist/schema/project-env-types.mjs.map +1 -1
  817. package/dist/schema-Bss8qImF.mjs +13 -0
  818. package/dist/schema-Bss8qImF.mjs.map +1 -0
  819. package/dist/schema-C036pqEw.mjs +815 -0
  820. package/dist/schema-C036pqEw.mjs.map +1 -0
  821. package/dist/scopes-C_SoYl9x.mjs +34 -0
  822. package/dist/scopes-C_SoYl9x.mjs.map +1 -0
  823. package/dist/search-uNqCgePJ.mjs +450 -0
  824. package/dist/search-uNqCgePJ.mjs.map +1 -0
  825. package/dist/sections-BLusMa96.mjs +346 -0
  826. package/dist/sections-BLusMa96.mjs.map +1 -0
  827. package/dist/seed/index.d.mts +2 -2
  828. package/dist/seed/index.mjs +47 -41
  829. package/dist/seo/index.d.mts +3 -3
  830. package/dist/seo/index.mjs +32 -26
  831. package/dist/seo/index.mjs.map +1 -1
  832. package/dist/seo-BodxIpws.mjs +188 -0
  833. package/dist/seo-BodxIpws.mjs.map +1 -0
  834. package/dist/seo-DaMYIQY8.mjs +133 -0
  835. package/dist/seo-DaMYIQY8.mjs.map +1 -0
  836. package/dist/service-BuM1BRsA.mjs +150 -0
  837. package/dist/service-BuM1BRsA.mjs.map +1 -0
  838. package/dist/session-user-2DpQDMKw.mjs +61 -0
  839. package/dist/session-user-2DpQDMKw.mjs.map +1 -0
  840. package/dist/settings-B3ZmPF_8.mjs +73 -0
  841. package/dist/settings-B3ZmPF_8.mjs.map +1 -0
  842. package/dist/settings-P5hwPX6_.mjs +66 -0
  843. package/dist/settings-P5hwPX6_.mjs.map +1 -0
  844. package/dist/settings-yIqoN-Ok.mjs +519 -0
  845. package/dist/settings-yIqoN-Ok.mjs.map +1 -0
  846. package/dist/setup-complete-eu6MUQnt.mjs +65 -0
  847. package/dist/setup-complete-eu6MUQnt.mjs.map +1 -0
  848. package/dist/setup-nonce-CyPOapqY.mjs +25 -0
  849. package/dist/setup-nonce-CyPOapqY.mjs.map +1 -0
  850. package/dist/site-domain-8lEJl_0U.mjs +131 -0
  851. package/dist/site-domain-8lEJl_0U.mjs.map +1 -0
  852. package/dist/site-settings-uPkW0e6o.mjs +50 -0
  853. package/dist/site-settings-uPkW0e6o.mjs.map +1 -0
  854. package/dist/site-url-25SGVXwL.mjs +45 -0
  855. package/dist/site-url-25SGVXwL.mjs.map +1 -0
  856. package/dist/sitemap-name-DTK7CYnY.mjs +26 -0
  857. package/dist/sitemap-name-DTK7CYnY.mjs.map +1 -0
  858. package/dist/slug-BEDl2IJY.mjs +16 -0
  859. package/dist/slug-BEDl2IJY.mjs.map +1 -0
  860. package/dist/slugify-BDEG9pLk.mjs +22 -0
  861. package/dist/slugify-BDEG9pLk.mjs.map +1 -0
  862. package/dist/snapshot-CvkIBRLY.mjs +414 -0
  863. package/dist/snapshot-CvkIBRLY.mjs.map +1 -0
  864. package/dist/ssrf-mcCKMH6B.mjs +406 -0
  865. package/dist/ssrf-mcCKMH6B.mjs.map +1 -0
  866. package/dist/stage-BQfGzGOy.mjs +662 -0
  867. package/dist/stage-BQfGzGOy.mjs.map +1 -0
  868. package/dist/staged-B5vQGeSf.mjs +686 -0
  869. package/dist/staged-B5vQGeSf.mjs.map +1 -0
  870. package/dist/state-dO6t6OxV.mjs +178 -0
  871. package/dist/state-dO6t6OxV.mjs.map +1 -0
  872. package/dist/status-DSURZwKS.mjs +30 -0
  873. package/dist/status-DSURZwKS.mjs.map +1 -0
  874. package/dist/storage/local.d.mts +1 -1
  875. package/dist/storage/local.mjs +3 -3
  876. package/dist/storage/s3.d.mts +1 -1
  877. package/dist/storage/s3.mjs +1 -1
  878. package/dist/storage-query-Cy0SZ8iG.d.mts +1619 -0
  879. package/dist/storage-query-Cy0SZ8iG.d.mts.map +1 -0
  880. package/dist/tar-DWzcUZ_Q.mjs +449 -0
  881. package/dist/tar-DWzcUZ_Q.mjs.map +1 -0
  882. package/dist/target-C9htUbrT.mjs +27 -0
  883. package/dist/target-C9htUbrT.mjs.map +1 -0
  884. package/dist/taxonomies-By2aGvq2.mjs +729 -0
  885. package/dist/taxonomies-By2aGvq2.mjs.map +1 -0
  886. package/dist/taxonomies-CVRd_jz0.mjs +937 -0
  887. package/dist/taxonomies-CVRd_jz0.mjs.map +1 -0
  888. package/dist/taxonomy-BG_xu2Qf.mjs +563 -0
  889. package/dist/taxonomy-BG_xu2Qf.mjs.map +1 -0
  890. package/dist/tokens-U5vzgSrM.mjs +171 -0
  891. package/dist/tokens-U5vzgSrM.mjs.map +1 -0
  892. package/dist/transaction-CkoQ5wqQ.mjs +29 -0
  893. package/dist/transaction-CkoQ5wqQ.mjs.map +1 -0
  894. package/dist/transfer-DA0OSfaT.mjs +8873 -0
  895. package/dist/transfer-DA0OSfaT.mjs.map +1 -0
  896. package/dist/transfer-Pyf3d7ka.mjs +166 -0
  897. package/dist/transfer-Pyf3d7ka.mjs.map +1 -0
  898. package/dist/transfer-download-cX7SuWEy.mjs +33 -0
  899. package/dist/transfer-download-cX7SuWEy.mjs.map +1 -0
  900. package/dist/transformations-DczubD4j.mjs +196 -0
  901. package/dist/transformations-DczubD4j.mjs.map +1 -0
  902. package/dist/transport-Dm5QzpT_.d.mts +42 -0
  903. package/dist/transport-Dm5QzpT_.d.mts.map +1 -0
  904. package/dist/transport-DtIrjEFO.mjs +137 -0
  905. package/dist/transport-DtIrjEFO.mjs.map +1 -0
  906. package/dist/trusted-proxy-CDRd5Kmw.mjs +51 -0
  907. package/dist/trusted-proxy-CDRd5Kmw.mjs.map +1 -0
  908. package/dist/turnstile-Ct5YuFNY.mjs +58 -0
  909. package/dist/turnstile-Ct5YuFNY.mjs.map +1 -0
  910. package/dist/types-Bgujop4S.d.mts +374 -0
  911. package/dist/types-Bgujop4S.d.mts.map +1 -0
  912. package/dist/types-BirHUEXt.mjs +18 -0
  913. package/dist/types-BirHUEXt.mjs.map +1 -0
  914. package/dist/types-BqJgTL_y.d.mts +293 -0
  915. package/dist/types-BqJgTL_y.d.mts.map +1 -0
  916. package/dist/types-C-lrOt9T.d.mts +87 -0
  917. package/dist/types-C-lrOt9T.d.mts.map +1 -0
  918. package/dist/types-CCEHAhOv.d.mts +916 -0
  919. package/dist/types-CCEHAhOv.d.mts.map +1 -0
  920. package/dist/types-CLVwYRBr.d.mts +227 -0
  921. package/dist/types-CLVwYRBr.d.mts.map +1 -0
  922. package/dist/types-C_asjp1J.mjs +201 -0
  923. package/dist/types-C_asjp1J.mjs.map +1 -0
  924. package/dist/types-CadaL_k8.d.mts +366 -0
  925. package/dist/types-CadaL_k8.d.mts.map +1 -0
  926. package/dist/types-DVbTb4Hk.mjs +77 -0
  927. package/dist/types-DVbTb4Hk.mjs.map +1 -0
  928. package/dist/types-Ddku19Zw.d.mts +209 -0
  929. package/dist/types-Ddku19Zw.d.mts.map +1 -0
  930. package/dist/types-DwhEvIVb.mjs +133 -0
  931. package/dist/types-DwhEvIVb.mjs.map +1 -0
  932. package/dist/types-FIiGQ3PE.mjs +16 -0
  933. package/dist/types-FIiGQ3PE.mjs.map +1 -0
  934. package/dist/types-OauzCOY0.mjs +37 -0
  935. package/dist/types-OauzCOY0.mjs.map +1 -0
  936. package/dist/types-mQGTpP-4.d.mts +1741 -0
  937. package/dist/types-mQGTpP-4.d.mts.map +1 -0
  938. package/dist/types-nbjz3Mgm.d.mts +125 -0
  939. package/dist/types-nbjz3Mgm.d.mts.map +1 -0
  940. package/dist/update-check-hW32-0pf.mjs +161 -0
  941. package/dist/update-check-hW32-0pf.mjs.map +1 -0
  942. package/dist/upload-attempts-Bpik1TLF.mjs +32 -0
  943. package/dist/upload-attempts-Bpik1TLF.mjs.map +1 -0
  944. package/dist/url-DTfGDJhI.mjs +104 -0
  945. package/dist/url-DTfGDJhI.mjs.map +1 -0
  946. package/dist/url-pattern-CJeCyNij.mjs +41 -0
  947. package/dist/url-pattern-CJeCyNij.mjs.map +1 -0
  948. package/dist/user-nQInBZbE.mjs +171 -0
  949. package/dist/user-nQInBZbE.mjs.map +1 -0
  950. package/dist/utils-govudc_U.mjs +442 -0
  951. package/dist/utils-govudc_U.mjs.map +1 -0
  952. package/dist/validate-BxLvcDYh.mjs +524 -0
  953. package/dist/validate-BxLvcDYh.mjs.map +1 -0
  954. package/dist/validate-mnoVfASU.d.mts +468 -0
  955. package/dist/validate-mnoVfASU.d.mts.map +1 -0
  956. package/dist/validation-DQDEvh87.mjs +221 -0
  957. package/dist/validation-DQDEvh87.mjs.map +1 -0
  958. package/dist/version-BOFfLiVT.mjs +49 -0
  959. package/dist/version-BOFfLiVT.mjs.map +1 -0
  960. package/dist/version-Dcvx_C9g.mjs +7 -0
  961. package/dist/version-Dcvx_C9g.mjs.map +1 -0
  962. package/dist/version-DzTJ3gD7.mjs +9 -0
  963. package/dist/version-DzTJ3gD7.mjs.map +1 -0
  964. package/dist/video-BX7AI5nJ.mjs +54 -0
  965. package/dist/video-BX7AI5nJ.mjs.map +1 -0
  966. package/dist/virtual-modules-CU29aip9.mjs +515 -0
  967. package/dist/virtual-modules-CU29aip9.mjs.map +1 -0
  968. package/dist/widgets-HIeFmZxt.mjs +121 -0
  969. package/dist/widgets-HIeFmZxt.mjs.map +1 -0
  970. package/dist/wxr-taxonomies-Dy2i2ON3.d.mts +34 -0
  971. package/dist/wxr-taxonomies-Dy2i2ON3.d.mts.map +1 -0
  972. package/dist/wxr-taxonomies-DyOGhl8W.mjs +454 -0
  973. package/dist/wxr-taxonomies-DyOGhl8W.mjs.map +1 -0
  974. package/dist/zod-generator-VxCPVDpo.mjs +425 -0
  975. package/dist/zod-generator-VxCPVDpo.mjs.map +1 -0
  976. package/package.json +7 -6
  977. package/src/api/authorize.ts +42 -0
  978. package/src/api/handlers/bulk-tag.ts +11 -3
  979. package/src/api/handlers/bylines.ts +6 -2
  980. package/src/api/handlers/content.ts +107 -7
  981. package/src/api/handlers/dashboard.ts +44 -14
  982. package/src/api/handlers/manifest.ts +1 -0
  983. package/src/api/handlers/menus.ts +24 -10
  984. package/src/api/handlers/plugins.ts +1 -0
  985. package/src/api/handlers/relations.ts +15 -1
  986. package/src/api/handlers/revision.ts +6 -2
  987. package/src/api/handlers/site-domain.ts +26 -10
  988. package/src/api/handlers/taxonomies.ts +27 -17
  989. package/src/api/schemas/settings.ts +2 -0
  990. package/src/api/types.ts +2 -0
  991. package/src/astro/image-endpoint.ts +23 -2
  992. package/src/astro/integration/dev-scheduler-bridge.ts +91 -0
  993. package/src/astro/integration/index.ts +48 -1
  994. package/src/astro/integration/routes.ts +8 -0
  995. package/src/astro/integration/runtime.ts +2 -1
  996. package/src/astro/integration/virtual-modules.ts +9 -16
  997. package/src/astro/integration/vite-config.ts +20 -23
  998. package/src/astro/middleware/auth.ts +3 -1
  999. package/src/astro/middleware/redirect.ts +202 -78
  1000. package/src/astro/middleware/request-context.ts +1 -0
  1001. package/src/astro/middleware.ts +35 -7
  1002. package/src/astro/prefetch.ts +7 -5
  1003. package/src/astro/public-plugin-api-routes.ts +10 -2
  1004. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +1 -1
  1005. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +2 -1
  1006. package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +1 -5
  1007. package/src/astro/routes/api/content/[collection]/[id]/lock.ts +2 -2
  1008. package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +2 -1
  1009. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -1
  1010. package/src/astro/routes/api/content/[collection]/[id]/restore.ts +2 -1
  1011. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +3 -2
  1012. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +9 -5
  1013. package/src/astro/routes/api/content/[collection]/[id]/translations.ts +14 -1
  1014. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +2 -1
  1015. package/src/astro/routes/api/content/[collection]/[id].ts +18 -6
  1016. package/src/astro/routes/api/content/[collection]/index.ts +1 -5
  1017. package/src/astro/routes/api/dashboard.ts +6 -1
  1018. package/src/astro/routes/api/dev/scheduled-tasks.ts +20 -0
  1019. package/src/astro/routes/api/import/wordpress/analyze.ts +1 -16
  1020. package/src/astro/routes/api/import/wordpress/execute.ts +8 -3
  1021. package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +4 -1
  1022. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +34 -5
  1023. package/src/astro/routes/api/media/file/[...key].ts +13 -3
  1024. package/src/astro/routes/api/menus/[name]/items/[id].ts +3 -2
  1025. package/src/astro/routes/api/menus/[name]/items.ts +2 -1
  1026. package/src/astro/routes/api/menus/[name]/reorder.ts +2 -1
  1027. package/src/astro/routes/api/menus/[name]/translations.ts +2 -1
  1028. package/src/astro/routes/api/menus/[name].ts +3 -2
  1029. package/src/astro/routes/api/menus/index.ts +2 -1
  1030. package/src/astro/routes/api/redirects/[id].ts +15 -2
  1031. package/src/astro/routes/api/redirects/index.ts +5 -1
  1032. package/src/astro/routes/api/settings/domain.ts +2 -1
  1033. package/src/astro/routes/api/settings.ts +2 -1
  1034. package/src/astro/routes/api/setup/admin-verify.ts +7 -1
  1035. package/src/astro/routes/api/taxonomies/[name]/reorder.ts +2 -1
  1036. package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +2 -1
  1037. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +3 -2
  1038. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +2 -1
  1039. package/src/astro/routes/api/taxonomies/[name].ts +3 -2
  1040. package/src/astro/routes/api/taxonomies/index.ts +2 -1
  1041. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +2 -1
  1042. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +3 -2
  1043. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +2 -1
  1044. package/src/astro/routes/api/widget-areas/[name].ts +2 -1
  1045. package/src/astro/routes/api/widget-areas/index.ts +2 -1
  1046. package/src/astro/routes/robots.txt.ts +33 -2
  1047. package/src/astro/types.ts +10 -1
  1048. package/src/auth/types.ts +10 -4
  1049. package/src/cache/redirect-paths.ts +56 -0
  1050. package/src/cache/route-cache.ts +22 -0
  1051. package/src/cli/commands/export-seed.ts +6 -4
  1052. package/src/cli/commands/import/wordpress.ts +3 -27
  1053. package/src/cli/commands/login.ts +37 -47
  1054. package/src/cli/commands/migrate.ts +36 -4
  1055. package/src/cli/commands/seed.ts +18 -8
  1056. package/src/cli/wxr/parser.ts +2 -2
  1057. package/src/client/index.ts +13 -2
  1058. package/src/client/portable-text.ts +21 -7
  1059. package/src/client/transport.ts +11 -7
  1060. package/src/comments/query.ts +8 -2
  1061. package/src/components/CommentForm.astro +2 -2
  1062. package/src/components/Comments.astro +1 -1
  1063. package/src/components/EmDashImage.astro +14 -2
  1064. package/src/components/InlinePortableTextEditor.tsx +156 -1326
  1065. package/src/components/inline-block-types.ts +278 -0
  1066. package/src/components/inline-bubble-menu.tsx +696 -0
  1067. package/src/components/inline-editor-ui.tsx +1192 -0
  1068. package/src/components/inline-image.tsx +722 -0
  1069. package/src/components/inline-media-picker.tsx +1221 -0
  1070. package/src/components/inline-slash-menu.tsx +556 -0
  1071. package/src/database/collection-cleanup.ts +30 -0
  1072. package/src/database/datetime-storage.ts +337 -60
  1073. package/src/database/migration-lock.ts +43 -7
  1074. package/src/database/migrations/content-sized.ts +82 -0
  1075. package/src/database/migrations/policy.ts +28 -2
  1076. package/src/database/migrations/runner.ts +48 -0
  1077. package/src/database/repositories/byline.ts +73 -17
  1078. package/src/database/repositories/comment.ts +17 -7
  1079. package/src/database/repositories/content.ts +82 -20
  1080. package/src/database/repositories/menu.ts +77 -11
  1081. package/src/database/repositories/plugin-storage.ts +109 -8
  1082. package/src/database/repositories/revision.ts +24 -6
  1083. package/src/database/repositories/taxonomy-def.ts +9 -2
  1084. package/src/database/repositories/taxonomy.ts +47 -14
  1085. package/src/database/repositories/types.ts +76 -7
  1086. package/src/emdash-runtime.ts +213 -170
  1087. package/src/fields/image.ts +1 -0
  1088. package/src/i18n/config.ts +58 -10
  1089. package/src/i18n/normalize.ts +16 -2
  1090. package/src/i18n/query.ts +47 -0
  1091. package/src/i18n/resolve.ts +8 -3
  1092. package/src/import/index.ts +1 -0
  1093. package/src/import/registry.ts +17 -0
  1094. package/src/import/sources/wordpress-plugin.ts +151 -9
  1095. package/src/import/types.ts +3 -0
  1096. package/src/import/utils.ts +5 -0
  1097. package/src/import/wxr-taxonomies.ts +3 -2
  1098. package/src/loader.ts +116 -24
  1099. package/src/mcp/json-schema.ts +14 -0
  1100. package/src/mcp/plugin-tool-name.ts +36 -0
  1101. package/src/mcp/server.ts +102 -16
  1102. package/src/media/caption.ts +30 -0
  1103. package/src/media/image-endpoint.ts +13 -6
  1104. package/src/media/local-runtime.ts +3 -0
  1105. package/src/media/normalize.ts +15 -8
  1106. package/src/media/responsive.ts +12 -2
  1107. package/src/media/types.ts +16 -3
  1108. package/src/media/usage/collection-deletion.ts +4 -0
  1109. package/src/menus/index.ts +21 -11
  1110. package/src/migrations/direct-executor.ts +42 -12
  1111. package/src/migrations/manifest.ts +1 -0
  1112. package/src/migrations/protocol.ts +6 -2
  1113. package/src/plugins/adapt-sandbox-entry.ts +16 -6
  1114. package/src/plugins/byline-access.ts +3 -1
  1115. package/src/plugins/context.ts +1 -2
  1116. package/src/plugins/state.ts +5 -8
  1117. package/src/plugins/storage-indexes.ts +7 -3
  1118. package/src/query.ts +74 -23
  1119. package/src/redirects/artifacts.ts +39 -5
  1120. package/src/redirects/cache.ts +34 -2
  1121. package/src/references/field-map.ts +6 -4
  1122. package/src/request-context.ts +8 -0
  1123. package/src/schema/block-values.ts +80 -17
  1124. package/src/schema/collection-slugs-cache.ts +31 -17
  1125. package/src/schema/registry.ts +18 -1
  1126. package/src/schema/zod-generator.ts +2 -1
  1127. package/src/search/fts-manager.ts +98 -28
  1128. package/src/search/query.ts +34 -65
  1129. package/src/seed/apply.ts +222 -94
  1130. package/src/seed/types.ts +3 -1
  1131. package/src/settings/index.ts +155 -35
  1132. package/src/settings/types.ts +2 -0
  1133. package/src/settings/version.ts +54 -0
  1134. package/src/taxonomies/index.ts +95 -52
  1135. package/src/taxonomies/term-counts.ts +2 -1
  1136. package/src/utils/db-errors.ts +15 -0
  1137. package/src/virtual-modules.d.ts +1 -0
  1138. package/src/visual-editing/toolbar.ts +46 -12
  1139. package/dist/action-token-BdWad2YG.mjs +0 -26
  1140. package/dist/action-token-BdWad2YG.mjs.map +0 -1
  1141. package/dist/activation-xomsCMJg.mjs +0 -387
  1142. package/dist/activation-xomsCMJg.mjs.map +0 -1
  1143. package/dist/adapters-B4-nbElt.d.mts +0 -173
  1144. package/dist/adapters-B4-nbElt.d.mts.map +0 -1
  1145. package/dist/allowed-origins-CLpHGGlc.mjs +0 -116
  1146. package/dist/allowed-origins-CLpHGGlc.mjs.map +0 -1
  1147. package/dist/api-DBw_IWoi.mjs +0 -5024
  1148. package/dist/api-DBw_IWoi.mjs.map +0 -1
  1149. package/dist/api-tokens-B0ZipcZ-.mjs +0 -173
  1150. package/dist/api-tokens-B0ZipcZ-.mjs.map +0 -1
  1151. package/dist/apply-Cx48saFC.mjs +0 -1680
  1152. package/dist/apply-Cx48saFC.mjs.map +0 -1
  1153. package/dist/approvals-BXgtXA2s.mjs +0 -460
  1154. package/dist/approvals-BXgtXA2s.mjs.map +0 -1
  1155. package/dist/artifact-fetch-DsRczRGG.mjs +0 -659
  1156. package/dist/artifact-fetch-DsRczRGG.mjs.map +0 -1
  1157. package/dist/artifacts-D-O-qj9C.mjs +0 -307
  1158. package/dist/artifacts-D-O-qj9C.mjs.map +0 -1
  1159. package/dist/audit-CCH3MA4Y.mjs +0 -127
  1160. package/dist/audit-CCH3MA4Y.mjs.map +0 -1
  1161. package/dist/authoritative-records-Dcs7l2H5.mjs +0 -5183
  1162. package/dist/authoritative-records-Dcs7l2H5.mjs.map +0 -1
  1163. package/dist/authorize-TdIGpRSE.mjs +0 -49
  1164. package/dist/authorize-TdIGpRSE.mjs.map +0 -1
  1165. package/dist/backup-CZt5Mzwx.mjs +0 -246
  1166. package/dist/backup-CZt5Mzwx.mjs.map +0 -1
  1167. package/dist/block-types-DHnkzE6u.mjs +0 -132
  1168. package/dist/block-types-DHnkzE6u.mjs.map +0 -1
  1169. package/dist/block-values-C4N_F2-G.mjs +0 -175
  1170. package/dist/block-values-C4N_F2-G.mjs.map +0 -1
  1171. package/dist/byline-BmVKOQ8l.mjs +0 -909
  1172. package/dist/byline-BmVKOQ8l.mjs.map +0 -1
  1173. package/dist/byline-fields-B8SDs3M_.mjs +0 -123
  1174. package/dist/byline-fields-B8SDs3M_.mjs.map +0 -1
  1175. package/dist/byline-fields-Bze3ZdAw.mjs +0 -280
  1176. package/dist/byline-fields-Bze3ZdAw.mjs.map +0 -1
  1177. package/dist/byline-registry-dvt4N3xV.mjs +0 -406
  1178. package/dist/byline-registry-dvt4N3xV.mjs.map +0 -1
  1179. package/dist/bylines-CHhR28r9.mjs +0 -150
  1180. package/dist/bylines-CHhR28r9.mjs.map +0 -1
  1181. package/dist/bylines-DZS4OflA.mjs +0 -234
  1182. package/dist/bylines-DZS4OflA.mjs.map +0 -1
  1183. package/dist/cache-x0z8t_m9.mjs +0 -133
  1184. package/dist/cache-x0z8t_m9.mjs.map +0 -1
  1185. package/dist/canonical-BUcKRYpG.mjs +0 -174
  1186. package/dist/canonical-BUcKRYpG.mjs.map +0 -1
  1187. package/dist/capture-triggers-C9JKoIdT.mjs +0 -362
  1188. package/dist/capture-triggers-C9JKoIdT.mjs.map +0 -1
  1189. package/dist/challenge-store-BHgdPVze.mjs +0 -51
  1190. package/dist/challenge-store-BHgdPVze.mjs.map +0 -1
  1191. package/dist/checksum-BYR5i7qe.mjs +0 -162
  1192. package/dist/checksum-BYR5i7qe.mjs.map +0 -1
  1193. package/dist/chrome-tags-BIKBMZYO.mjs +0 -24
  1194. package/dist/chrome-tags-BIKBMZYO.mjs.map +0 -1
  1195. package/dist/chunks-Dr5Vr0zA.mjs +0 -25
  1196. package/dist/chunks-Dr5Vr0zA.mjs.map +0 -1
  1197. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs +0 -85
  1198. package/dist/collection-slugs-cache-B2Gs9Jwx.mjs.map +0 -1
  1199. package/dist/comment-CWla6OHV.mjs +0 -325
  1200. package/dist/comment-CWla6OHV.mjs.map +0 -1
  1201. package/dist/comment-reaction-RZrcs5cW.mjs +0 -85
  1202. package/dist/comment-reaction-RZrcs5cW.mjs.map +0 -1
  1203. package/dist/comments-BzmIKVb2.mjs +0 -99
  1204. package/dist/comments-BzmIKVb2.mjs.map +0 -1
  1205. package/dist/comments-Da_dI2O1.mjs +0 -195
  1206. package/dist/comments-Da_dI2O1.mjs.map +0 -1
  1207. package/dist/components-oFXumpf5.mjs +0 -112
  1208. package/dist/components-oFXumpf5.mjs.map +0 -1
  1209. package/dist/config--wamYxBW.d.mts +0 -39
  1210. package/dist/config--wamYxBW.d.mts.map +0 -1
  1211. package/dist/config-Bo4eOOdV.mjs +0 -228
  1212. package/dist/config-Bo4eOOdV.mjs.map +0 -1
  1213. package/dist/config-C4-UxIk7.d.mts +0 -6790
  1214. package/dist/config-C4-UxIk7.d.mts.map +0 -1
  1215. package/dist/config-CvmjJcVw.mjs +0 -73
  1216. package/dist/config-CvmjJcVw.mjs.map +0 -1
  1217. package/dist/connection-UpzYxtE2.mjs +0 -36
  1218. package/dist/connection-UpzYxtE2.mjs.map +0 -1
  1219. package/dist/content-CcHrqkgp.mjs +0 -2072
  1220. package/dist/content-CcHrqkgp.mjs.map +0 -1
  1221. package/dist/content-list-query-Bxxdd9fv.d.mts +0 -26
  1222. package/dist/content-list-query-Bxxdd9fv.d.mts.map +0 -1
  1223. package/dist/content-policy-Dm32n9C6.mjs +0 -46
  1224. package/dist/content-policy-Dm32n9C6.mjs.map +0 -1
  1225. package/dist/content-repair-havk1F0-.mjs +0 -442
  1226. package/dist/content-repair-havk1F0-.mjs.map +0 -1
  1227. package/dist/context-CvhgHgSH.mjs +0 -2043
  1228. package/dist/context-CvhgHgSH.mjs.map +0 -1
  1229. package/dist/credits-CygUrPOi.mjs +0 -110
  1230. package/dist/credits-CygUrPOi.mjs.map +0 -1
  1231. package/dist/cron-C6ytTOLw.mjs +0 -306
  1232. package/dist/cron-C6ytTOLw.mjs.map +0 -1
  1233. package/dist/dashboard-7_FYfafc.mjs +0 -151
  1234. package/dist/dashboard-7_FYfafc.mjs.map +0 -1
  1235. package/dist/db-errors-CBD5yMro.mjs +0 -55
  1236. package/dist/db-errors-CBD5yMro.mjs.map +0 -1
  1237. package/dist/default-CHCUkV4Z.mjs +0 -81
  1238. package/dist/default-CHCUkV4Z.mjs.map +0 -1
  1239. package/dist/deferred-tasks-G0xhcJTl.d.mts +0 -9
  1240. package/dist/deferred-tasks-G0xhcJTl.d.mts.map +0 -1
  1241. package/dist/destination-r2zIAZ2S.mjs +0 -18
  1242. package/dist/destination-r2zIAZ2S.mjs.map +0 -1
  1243. package/dist/dev-typegen-Dtl8AfS6.mjs +0 -29
  1244. package/dist/dev-typegen-Dtl8AfS6.mjs.map +0 -1
  1245. package/dist/device-flow-CzDJmQ1q.mjs +0 -521
  1246. package/dist/device-flow-CzDJmQ1q.mjs.map +0 -1
  1247. package/dist/digest-xJmyPv2r.mjs +0 -194
  1248. package/dist/digest-xJmyPv2r.mjs.map +0 -1
  1249. package/dist/direct-executor-BXiYIVJ9.mjs +0 -104
  1250. package/dist/direct-executor-BXiYIVJ9.mjs.map +0 -1
  1251. package/dist/dist-Cfu8mMBs.mjs +0 -810
  1252. package/dist/dist-Cfu8mMBs.mjs.map +0 -1
  1253. package/dist/email-console-7ZPApLlm.mjs +0 -50
  1254. package/dist/email-console-7ZPApLlm.mjs.map +0 -1
  1255. package/dist/email-locale-DFdUA6UF.mjs +0 -25
  1256. package/dist/email-locale-DFdUA6UF.mjs.map +0 -1
  1257. package/dist/emdash-runtime-C4oFeVpN.mjs +0 -4363
  1258. package/dist/emdash-runtime-C4oFeVpN.mjs.map +0 -1
  1259. package/dist/enrich-Duu4sV3a.mjs +0 -194
  1260. package/dist/enrich-Duu4sV3a.mjs.map +0 -1
  1261. package/dist/entry-lock-B4n0HdQ_.mjs +0 -163
  1262. package/dist/entry-lock-B4n0HdQ_.mjs.map +0 -1
  1263. package/dist/entry-lock-BAAlKYrz.d.mts +0 -4566
  1264. package/dist/entry-lock-BAAlKYrz.d.mts.map +0 -1
  1265. package/dist/entry-lock-Cjz0h45X.mjs +0 -1209
  1266. package/dist/entry-lock-Cjz0h45X.mjs.map +0 -1
  1267. package/dist/entry-locks-DJAqVweV.mjs +0 -167
  1268. package/dist/entry-locks-DJAqVweV.mjs.map +0 -1
  1269. package/dist/env-types-4bkF6Bqg.mjs +0 -38
  1270. package/dist/env-types-4bkF6Bqg.mjs.map +0 -1
  1271. package/dist/error-DxgQdaZ_.mjs +0 -90
  1272. package/dist/error-DxgQdaZ_.mjs.map +0 -1
  1273. package/dist/errors-CjtE5aWF.mjs +0 -120
  1274. package/dist/errors-CjtE5aWF.mjs.map +0 -1
  1275. package/dist/errors-hskQ0C8G.mjs +0 -479
  1276. package/dist/errors-hskQ0C8G.mjs.map +0 -1
  1277. package/dist/escape-ESFhYzwG.mjs +0 -9
  1278. package/dist/escape-ESFhYzwG.mjs.map +0 -1
  1279. package/dist/fence-vc3aHgRA.mjs +0 -162
  1280. package/dist/fence-vc3aHgRA.mjs.map +0 -1
  1281. package/dist/field-defs-cache-zoow36nz.mjs +0 -77
  1282. package/dist/field-defs-cache-zoow36nz.mjs.map +0 -1
  1283. package/dist/field-map-JD1wG0Tq.mjs +0 -83
  1284. package/dist/field-map-JD1wG0Tq.mjs.map +0 -1
  1285. package/dist/focal-point-JX8kcOTQ.mjs +0 -23
  1286. package/dist/focal-point-JX8kcOTQ.mjs.map +0 -1
  1287. package/dist/fts-manager-WJCN8uU6.mjs +0 -443
  1288. package/dist/fts-manager-WJCN8uU6.mjs.map +0 -1
  1289. package/dist/gc-CsGZiKdH.mjs +0 -75
  1290. package/dist/gc-CsGZiKdH.mjs.map +0 -1
  1291. package/dist/hash-C4DFoJ7Z.mjs +0 -37
  1292. package/dist/hash-C4DFoJ7Z.mjs.map +0 -1
  1293. package/dist/hook-result-CXjtMk7Q.d.mts +0 -31
  1294. package/dist/hook-result-CXjtMk7Q.d.mts.map +0 -1
  1295. package/dist/hreflang-BAma7iRr.mjs +0 -105
  1296. package/dist/hreflang-BAma7iRr.mjs.map +0 -1
  1297. package/dist/hreflang-BsYo4x_M.d.mts +0 -50
  1298. package/dist/hreflang-BsYo4x_M.d.mts.map +0 -1
  1299. package/dist/http-route-dispatch-C8G7hAK6.mjs +0 -342
  1300. package/dist/http-route-dispatch-C8G7hAK6.mjs.map +0 -1
  1301. package/dist/identity-BwBKM1fH.mjs +0 -35
  1302. package/dist/identity-BwBKM1fH.mjs.map +0 -1
  1303. package/dist/import-DJ3Z2wxE.mjs +0 -2021
  1304. package/dist/import-DJ3Z2wxE.mjs.map +0 -1
  1305. package/dist/index-DYsn97dY.d.mts +0 -623
  1306. package/dist/index-DYsn97dY.d.mts.map +0 -1
  1307. package/dist/install-finalization-DCFnFSHv.mjs +0 -58
  1308. package/dist/install-finalization-DCFnFSHv.mjs.map +0 -1
  1309. package/dist/keys-CGvAndSp.mjs +0 -61
  1310. package/dist/keys-CGvAndSp.mjs.map +0 -1
  1311. package/dist/kinds-DT1W4T4Y.mjs +0 -974
  1312. package/dist/kinds-DT1W4T4Y.mjs.map +0 -1
  1313. package/dist/lifecycle-BzglCSY0.mjs +0 -25
  1314. package/dist/lifecycle-BzglCSY0.mjs.map +0 -1
  1315. package/dist/load-DjUqmf3s.mjs +0 -28
  1316. package/dist/load-DjUqmf3s.mjs.map +0 -1
  1317. package/dist/loader-CetY659y.mjs +0 -1355
  1318. package/dist/loader-CetY659y.mjs.map +0 -1
  1319. package/dist/loops-DkT1zkPH.mjs +0 -205
  1320. package/dist/loops-DkT1zkPH.mjs.map +0 -1
  1321. package/dist/manifest-builder-BOFCd9rX.mjs +0 -189
  1322. package/dist/manifest-builder-BOFCd9rX.mjs.map +0 -1
  1323. package/dist/manifest-schema-BiFBPEsp.mjs +0 -497
  1324. package/dist/manifest-schema-BiFBPEsp.mjs.map +0 -1
  1325. package/dist/marketplace-CUlenvZm.mjs +0 -257
  1326. package/dist/marketplace-CUlenvZm.mjs.map +0 -1
  1327. package/dist/media-CRKsKlfK.mjs +0 -416
  1328. package/dist/media-CRKsKlfK.mjs.map +0 -1
  1329. package/dist/media-C_z7sRuC.mjs +0 -294
  1330. package/dist/media-C_z7sRuC.mjs.map +0 -1
  1331. package/dist/media-IT8hQleU.mjs +0 -373
  1332. package/dist/media-IT8hQleU.mjs.map +0 -1
  1333. package/dist/media-allowlist-Ct6wvnT2.mjs +0 -45
  1334. package/dist/media-allowlist-Ct6wvnT2.mjs.map +0 -1
  1335. package/dist/media-folders-DtMt-vAA.mjs +0 -210
  1336. package/dist/media-folders-DtMt-vAA.mjs.map +0 -1
  1337. package/dist/media-url-BpXLqCmf.mjs +0 -43
  1338. package/dist/media-url-BpXLqCmf.mjs.map +0 -1
  1339. package/dist/media-usage-DEPHZZ9X.mjs +0 -282
  1340. package/dist/media-usage-DEPHZZ9X.mjs.map +0 -1
  1341. package/dist/media-usage-activation-V2Siabtw.mjs +0 -78
  1342. package/dist/media-usage-activation-V2Siabtw.mjs.map +0 -1
  1343. package/dist/media-usage-work-Cv1OE59F.mjs +0 -151
  1344. package/dist/media-usage-work-Cv1OE59F.mjs.map +0 -1
  1345. package/dist/media-usage-work-cgDYGvrt.mjs +0 -1015
  1346. package/dist/media-usage-work-cgDYGvrt.mjs.map +0 -1
  1347. package/dist/menus-CvVYfsuk.mjs +0 -753
  1348. package/dist/menus-CvVYfsuk.mjs.map +0 -1
  1349. package/dist/menus-D1HC8npj.mjs +0 -92
  1350. package/dist/menus-D1HC8npj.mjs.map +0 -1
  1351. package/dist/menus-DL8IPIcm.mjs +0 -3721
  1352. package/dist/menus-DL8IPIcm.mjs.map +0 -1
  1353. package/dist/mime-B5M9R53H.mjs +0 -81
  1354. package/dist/mime-B5M9R53H.mjs.map +0 -1
  1355. package/dist/mode-eieqAWLe.mjs +0 -23
  1356. package/dist/mode-eieqAWLe.mjs.map +0 -1
  1357. package/dist/node-sqlite-compat-VuyzJw1b.mjs +0 -63
  1358. package/dist/node-sqlite-compat-VuyzJw1b.mjs.map +0 -1
  1359. package/dist/normalize-BuWa0lvd.mjs +0 -191
  1360. package/dist/normalize-BuWa0lvd.mjs.map +0 -1
  1361. package/dist/oauth-authorization-B6ZJbMd2.mjs +0 -274
  1362. package/dist/oauth-authorization-B6ZJbMd2.mjs.map +0 -1
  1363. package/dist/oauth-clients-DVjRc9v3.mjs +0 -266
  1364. package/dist/oauth-clients-DVjRc9v3.mjs.map +0 -1
  1365. package/dist/oauth-state-store-CnmYYsVQ.mjs +0 -50
  1366. package/dist/oauth-state-store-CnmYYsVQ.mjs.map +0 -1
  1367. package/dist/oauth-user-lookup-Dz1_R5vT.mjs +0 -26
  1368. package/dist/oauth-user-lookup-Dz1_R5vT.mjs.map +0 -1
  1369. package/dist/object-cache-Bo6DGaC9.mjs +0 -586
  1370. package/dist/object-cache-Bo6DGaC9.mjs.map +0 -1
  1371. package/dist/options-BR9XZl7h.d.mts +0 -81
  1372. package/dist/options-BR9XZl7h.d.mts.map +0 -1
  1373. package/dist/ownership-COPyVysP.mjs +0 -12
  1374. package/dist/ownership-COPyVysP.mjs.map +0 -1
  1375. package/dist/parse-BOGhrwSq.d.mts +0 -174
  1376. package/dist/parse-BOGhrwSq.d.mts.map +0 -1
  1377. package/dist/parse-Cn5aSk1N.mjs +0 -81
  1378. package/dist/parse-Cn5aSk1N.mjs.map +0 -1
  1379. package/dist/passkey-config-mMFRQUCj.mjs +0 -46
  1380. package/dist/passkey-config-mMFRQUCj.mjs.map +0 -1
  1381. package/dist/paths-BmcAdBo9.mjs +0 -77
  1382. package/dist/paths-BmcAdBo9.mjs.map +0 -1
  1383. package/dist/patterns-CMNnYCgf.mjs +0 -159
  1384. package/dist/patterns-CMNnYCgf.mjs.map +0 -1
  1385. package/dist/placeholder-nOep3_Gn.d.mts +0 -306
  1386. package/dist/placeholder-nOep3_Gn.d.mts.map +0 -1
  1387. package/dist/plan-CDY4K8CH.mjs +0 -135
  1388. package/dist/plan-CDY4K8CH.mjs.map +0 -1
  1389. package/dist/plugins-DFBpfbO3.mjs +0 -261
  1390. package/dist/plugins-DFBpfbO3.mjs.map +0 -1
  1391. package/dist/policy-B_2qnHSy.mjs +0 -45
  1392. package/dist/policy-B_2qnHSy.mjs.map +0 -1
  1393. package/dist/portable-text-Dc2YAusw.mjs +0 -307
  1394. package/dist/portable-text-Dc2YAusw.mjs.map +0 -1
  1395. package/dist/preview-BtzikJ9O.mjs +0 -107
  1396. package/dist/preview-BtzikJ9O.mjs.map +0 -1
  1397. package/dist/protocol-M268ox8L.d.mts +0 -61
  1398. package/dist/protocol-M268ox8L.d.mts.map +0 -1
  1399. package/dist/public-submission-BQZavgZU.mjs +0 -251
  1400. package/dist/public-submission-BQZavgZU.mjs.map +0 -1
  1401. package/dist/public-url-uT1Ok2Tu.mjs +0 -101
  1402. package/dist/public-url-uT1Ok2Tu.mjs.map +0 -1
  1403. package/dist/query-BGG3sDEd.mjs +0 -1127
  1404. package/dist/query-BGG3sDEd.mjs.map +0 -1
  1405. package/dist/query-C_CWlifp.mjs +0 -41
  1406. package/dist/query-C_CWlifp.mjs.map +0 -1
  1407. package/dist/range-CXK_kDbI.mjs +0 -51
  1408. package/dist/range-CXK_kDbI.mjs.map +0 -1
  1409. package/dist/rate-limit-Dvamvay-.mjs +0 -127
  1410. package/dist/rate-limit-Dvamvay-.mjs.map +0 -1
  1411. package/dist/receipt-BmQGzquP.mjs +0 -43
  1412. package/dist/receipt-BmQGzquP.mjs.map +0 -1
  1413. package/dist/redirect-B39kTQ_0.mjs +0 -423
  1414. package/dist/redirect-B39kTQ_0.mjs.map +0 -1
  1415. package/dist/redirect-BguJ00Pv.mjs +0 -19
  1416. package/dist/redirect-BguJ00Pv.mjs.map +0 -1
  1417. package/dist/redirects-C8G4BsfP.mjs +0 -446
  1418. package/dist/redirects-C8G4BsfP.mjs.map +0 -1
  1419. package/dist/redirects-DFT7Wr-e.mjs +0 -148
  1420. package/dist/redirects-DFT7Wr-e.mjs.map +0 -1
  1421. package/dist/registry-DeZ27gVi.mjs +0 -8374
  1422. package/dist/registry-DeZ27gVi.mjs.map +0 -1
  1423. package/dist/relations-DBB1bRJW.mjs +0 -776
  1424. package/dist/relations-DBB1bRJW.mjs.map +0 -1
  1425. package/dist/request-cache-C4CIo5ad.mjs +0 -104
  1426. package/dist/request-cache-C4CIo5ad.mjs.map +0 -1
  1427. package/dist/request-meta-BSvkhIBX.mjs +0 -141
  1428. package/dist/request-meta-BSvkhIBX.mjs.map +0 -1
  1429. package/dist/resolve-BxH64HN9.mjs +0 -100
  1430. package/dist/resolve-BxH64HN9.mjs.map +0 -1
  1431. package/dist/resolve-D-kqyKns.mjs +0 -199
  1432. package/dist/resolve-D-kqyKns.mjs.map +0 -1
  1433. package/dist/revision-BWEH2qQB.mjs +0 -368
  1434. package/dist/revision-BWEH2qQB.mjs.map +0 -1
  1435. package/dist/route-wire-CwbWB_6O.mjs +0 -197
  1436. package/dist/route-wire-CwbWB_6O.mjs.map +0 -1
  1437. package/dist/routes-BfIxc7ft.mjs +0 -272
  1438. package/dist/routes-BfIxc7ft.mjs.map +0 -1
  1439. package/dist/runner-DkeafPBA.d.mts +0 -68
  1440. package/dist/runner-DkeafPBA.d.mts.map +0 -1
  1441. package/dist/runner-wqt4BrIW.mjs +0 -6383
  1442. package/dist/runner-wqt4BrIW.mjs.map +0 -1
  1443. package/dist/schema-BXIW-JHi.mjs +0 -815
  1444. package/dist/schema-BXIW-JHi.mjs.map +0 -1
  1445. package/dist/schema-I74JwYte.mjs +0 -13
  1446. package/dist/schema-I74JwYte.mjs.map +0 -1
  1447. package/dist/scopes-RWZ5ft_Z.mjs +0 -34
  1448. package/dist/scopes-RWZ5ft_Z.mjs.map +0 -1
  1449. package/dist/search-DxwagyWS.mjs +0 -450
  1450. package/dist/search-DxwagyWS.mjs.map +0 -1
  1451. package/dist/sections-Ccq9ZgyD.mjs +0 -346
  1452. package/dist/sections-Ccq9ZgyD.mjs.map +0 -1
  1453. package/dist/seo-CCnfPWAQ.mjs +0 -133
  1454. package/dist/seo-CCnfPWAQ.mjs.map +0 -1
  1455. package/dist/seo-QCtJ1jjV.mjs +0 -188
  1456. package/dist/seo-QCtJ1jjV.mjs.map +0 -1
  1457. package/dist/service-DX84s2rw.mjs +0 -150
  1458. package/dist/service-DX84s2rw.mjs.map +0 -1
  1459. package/dist/session-user-1dtJc2zv.mjs +0 -61
  1460. package/dist/session-user-1dtJc2zv.mjs.map +0 -1
  1461. package/dist/settings-B1jOxAIl.mjs +0 -443
  1462. package/dist/settings-B1jOxAIl.mjs.map +0 -1
  1463. package/dist/settings-Bc1IBl1t.mjs +0 -66
  1464. package/dist/settings-Bc1IBl1t.mjs.map +0 -1
  1465. package/dist/settings-GaZ5sVgg.mjs +0 -73
  1466. package/dist/settings-GaZ5sVgg.mjs.map +0 -1
  1467. package/dist/setup-complete-DidMAWJS.mjs +0 -65
  1468. package/dist/setup-complete-DidMAWJS.mjs.map +0 -1
  1469. package/dist/setup-nonce-DKl4S4c6.mjs +0 -25
  1470. package/dist/setup-nonce-DKl4S4c6.mjs.map +0 -1
  1471. package/dist/site-domain-CbI51Pc2.mjs +0 -113
  1472. package/dist/site-domain-CbI51Pc2.mjs.map +0 -1
  1473. package/dist/site-settings-CDdT4mVm.mjs +0 -50
  1474. package/dist/site-settings-CDdT4mVm.mjs.map +0 -1
  1475. package/dist/site-url-CrDZaAvo.mjs +0 -45
  1476. package/dist/site-url-CrDZaAvo.mjs.map +0 -1
  1477. package/dist/sitemap-name-W3BTor6X.mjs +0 -26
  1478. package/dist/sitemap-name-W3BTor6X.mjs.map +0 -1
  1479. package/dist/slug-BJhHKoOH.mjs +0 -16
  1480. package/dist/slug-BJhHKoOH.mjs.map +0 -1
  1481. package/dist/slugify-bu2-jKia.mjs +0 -22
  1482. package/dist/slugify-bu2-jKia.mjs.map +0 -1
  1483. package/dist/snapshot-BuI_2uDe.mjs +0 -414
  1484. package/dist/snapshot-BuI_2uDe.mjs.map +0 -1
  1485. package/dist/ssrf-LM_0wpGA.mjs +0 -406
  1486. package/dist/ssrf-LM_0wpGA.mjs.map +0 -1
  1487. package/dist/stage-DhzZuYaT.mjs +0 -662
  1488. package/dist/stage-DhzZuYaT.mjs.map +0 -1
  1489. package/dist/staged-DboEaWsV.mjs +0 -686
  1490. package/dist/staged-DboEaWsV.mjs.map +0 -1
  1491. package/dist/state-DCXDzjHq.mjs +0 -178
  1492. package/dist/state-DCXDzjHq.mjs.map +0 -1
  1493. package/dist/status-Dl85BK39.mjs +0 -30
  1494. package/dist/status-Dl85BK39.mjs.map +0 -1
  1495. package/dist/storage-query-BOBmeDMD.d.mts +0 -1615
  1496. package/dist/storage-query-BOBmeDMD.d.mts.map +0 -1
  1497. package/dist/tar-K40edFMt.mjs +0 -449
  1498. package/dist/tar-K40edFMt.mjs.map +0 -1
  1499. package/dist/target-BOighEY1.mjs +0 -27
  1500. package/dist/target-BOighEY1.mjs.map +0 -1
  1501. package/dist/taxonomies-DQSywBvX.mjs +0 -697
  1502. package/dist/taxonomies-DQSywBvX.mjs.map +0 -1
  1503. package/dist/taxonomies-Dj5eaobC.mjs +0 -939
  1504. package/dist/taxonomies-Dj5eaobC.mjs.map +0 -1
  1505. package/dist/taxonomy-QrNmTfIZ.mjs +0 -550
  1506. package/dist/taxonomy-QrNmTfIZ.mjs.map +0 -1
  1507. package/dist/tokens-j5L0as2H.mjs +0 -171
  1508. package/dist/tokens-j5L0as2H.mjs.map +0 -1
  1509. package/dist/transaction-BVYIo_yu.mjs +0 -29
  1510. package/dist/transaction-BVYIo_yu.mjs.map +0 -1
  1511. package/dist/transfer-CYEw8Tu4.mjs +0 -8873
  1512. package/dist/transfer-CYEw8Tu4.mjs.map +0 -1
  1513. package/dist/transfer-DDX10hkD.mjs +0 -166
  1514. package/dist/transfer-DDX10hkD.mjs.map +0 -1
  1515. package/dist/transfer-download-BAqq6GJv.mjs +0 -33
  1516. package/dist/transfer-download-BAqq6GJv.mjs.map +0 -1
  1517. package/dist/transformations-De44wqV_.mjs +0 -196
  1518. package/dist/transformations-De44wqV_.mjs.map +0 -1
  1519. package/dist/transport-1QjUhCRO.d.mts +0 -42
  1520. package/dist/transport-1QjUhCRO.d.mts.map +0 -1
  1521. package/dist/transport-Ds5pVX7p.mjs +0 -136
  1522. package/dist/transport-Ds5pVX7p.mjs.map +0 -1
  1523. package/dist/trusted-proxy-d4Tk6biT.mjs +0 -51
  1524. package/dist/trusted-proxy-d4Tk6biT.mjs.map +0 -1
  1525. package/dist/turnstile-DaFLtyrs.mjs +0 -58
  1526. package/dist/turnstile-DaFLtyrs.mjs.map +0 -1
  1527. package/dist/types-B4-1P2DK.d.mts +0 -227
  1528. package/dist/types-B4-1P2DK.d.mts.map +0 -1
  1529. package/dist/types-BGmQ0uXs.mjs +0 -201
  1530. package/dist/types-BGmQ0uXs.mjs.map +0 -1
  1531. package/dist/types-BKXA0f-c.mjs +0 -16
  1532. package/dist/types-BKXA0f-c.mjs.map +0 -1
  1533. package/dist/types-BiHcpUoO.d.mts +0 -374
  1534. package/dist/types-BiHcpUoO.d.mts.map +0 -1
  1535. package/dist/types-BihhvkyN.d.mts +0 -85
  1536. package/dist/types-BihhvkyN.d.mts.map +0 -1
  1537. package/dist/types-Bq9Wohd7.d.mts +0 -363
  1538. package/dist/types-Bq9Wohd7.d.mts.map +0 -1
  1539. package/dist/types-C-Xp0CcN.mjs +0 -103
  1540. package/dist/types-C-Xp0CcN.mjs.map +0 -1
  1541. package/dist/types-C4P7F1Vq.d.mts +0 -1741
  1542. package/dist/types-C4P7F1Vq.d.mts.map +0 -1
  1543. package/dist/types-CGaqwHw4.mjs +0 -37
  1544. package/dist/types-CGaqwHw4.mjs.map +0 -1
  1545. package/dist/types-Cj0_yZkn.mjs +0 -18
  1546. package/dist/types-Cj0_yZkn.mjs.map +0 -1
  1547. package/dist/types-D4ECCE4X.mjs +0 -77
  1548. package/dist/types-D4ECCE4X.mjs.map +0 -1
  1549. package/dist/types-DcRJp0vS.d.mts +0 -125
  1550. package/dist/types-DcRJp0vS.d.mts.map +0 -1
  1551. package/dist/types-Ff85fTzU.d.mts +0 -289
  1552. package/dist/types-Ff85fTzU.d.mts.map +0 -1
  1553. package/dist/types-UKr5Sf4y.d.mts +0 -916
  1554. package/dist/types-UKr5Sf4y.d.mts.map +0 -1
  1555. package/dist/types-YpN8hZW7.d.mts +0 -204
  1556. package/dist/types-YpN8hZW7.d.mts.map +0 -1
  1557. package/dist/update-check-DrlsK-tt.mjs +0 -161
  1558. package/dist/update-check-DrlsK-tt.mjs.map +0 -1
  1559. package/dist/upload-attempts-D8CPPvRU.mjs +0 -32
  1560. package/dist/upload-attempts-D8CPPvRU.mjs.map +0 -1
  1561. package/dist/url-Dn3IStq8.mjs +0 -104
  1562. package/dist/url-Dn3IStq8.mjs.map +0 -1
  1563. package/dist/url-pattern-Di4Nn3vP.mjs +0 -41
  1564. package/dist/url-pattern-Di4Nn3vP.mjs.map +0 -1
  1565. package/dist/user-B-ZdGjhI.mjs +0 -171
  1566. package/dist/user-B-ZdGjhI.mjs.map +0 -1
  1567. package/dist/utils-D7wL3r6-.mjs +0 -437
  1568. package/dist/utils-D7wL3r6-.mjs.map +0 -1
  1569. package/dist/validate-BSZbSUDk.mjs +0 -524
  1570. package/dist/validate-BSZbSUDk.mjs.map +0 -1
  1571. package/dist/validate-Dfv0DpZi.d.mts +0 -468
  1572. package/dist/validate-Dfv0DpZi.d.mts.map +0 -1
  1573. package/dist/validation-DRyC_Vm5.mjs +0 -219
  1574. package/dist/validation-DRyC_Vm5.mjs.map +0 -1
  1575. package/dist/version-C4kz0PcO.mjs +0 -7
  1576. package/dist/version-C4kz0PcO.mjs.map +0 -1
  1577. package/dist/version-jhs2BRtl.mjs +0 -9
  1578. package/dist/version-jhs2BRtl.mjs.map +0 -1
  1579. package/dist/video-DReZ48Un.mjs +0 -54
  1580. package/dist/video-DReZ48Un.mjs.map +0 -1
  1581. package/dist/virtual-modules-D0e6VbEv.mjs +0 -516
  1582. package/dist/virtual-modules-D0e6VbEv.mjs.map +0 -1
  1583. package/dist/widgets-BkcMzKct.mjs +0 -121
  1584. package/dist/widgets-BkcMzKct.mjs.map +0 -1
  1585. package/dist/wxr-taxonomies-BxI0CbTg.mjs +0 -453
  1586. package/dist/wxr-taxonomies-BxI0CbTg.mjs.map +0 -1
  1587. package/dist/wxr-taxonomies-Dad33GJi.d.mts +0 -34
  1588. package/dist/wxr-taxonomies-Dad33GJi.d.mts.map +0 -1
  1589. package/dist/zod-generator-BQilAboC.mjs +0 -424
  1590. package/dist/zod-generator-BQilAboC.mjs.map +0 -1
  1591. /package/dist/{api-tokens-D2zgAIEt.mjs → api-tokens-C7l0GUAF.mjs} +0 -0
  1592. /package/dist/{ssrf-BvNItdxk.mjs → ssrf-BBXcxG-f.mjs} +0 -0
@@ -0,0 +1,1420 @@
1
+ import { f as __exportAll } from "./runner-CLorw5vo.mjs";
2
+ import { n as isMissingColumnError, r as isMissingTableError, t as getMissingColumnIdentifier } from "./db-errors-unnO6yiZ.mjs";
3
+ import { t as validateIdentifier } from "./validate-DANX1-Qi.mjs";
4
+ import { n as buildStatusCondition, u as isPostgres } from "./dialect-helpers-7_IqPdh9.mjs";
5
+ import { i as getLocaleCandidates, r as getI18nConfig } from "./config-Cs_AwWXI.mjs";
6
+ import { getRequestContext } from "./request-context.mjs";
7
+ import { i as storedLocaleOrder, n as localeMatches, r as localeOrder, t as canonicalLocaleColumn } from "./query-BFHjCzSh.mjs";
8
+ import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-CYBOL-zn.mjs";
9
+ import { i as setRequestCacheEntry } from "./request-cache-5z2WzWmh.mjs";
10
+ import { a as InvalidCursorError, l as decodeCursor, u as encodeCursor } from "./types-DwhEvIVb.mjs";
11
+ import { kyselyLogOption } from "./database/instrumentation.mjs";
12
+ import { t as jsonTextValues } from "./json-recordset-BjYIWFkV.mjs";
13
+ import { Kysely, sql } from "kysely";
14
+
15
+ //#region src/database/repositories/taxonomy-def.ts
16
+ /**
17
+ * Select definition rows (aliased `d`) with their taxonomy's structure.
18
+ * Qualify columns in `where` and `orderBy`: `id` and `name` exist on both tables.
19
+ *
20
+ * A row that has no group yet, because code without the group table wrote it
21
+ * during a rolling deploy, reads its own copy.
22
+ */
23
+ function selectTaxonomyDefs(db, locale) {
24
+ let query = db.selectFrom("_emdash_taxonomy_defs as d").leftJoin("_emdash_taxonomy_def_groups as g", "g.name", "d.name").select([
25
+ "d.id",
26
+ "d.name",
27
+ "d.label",
28
+ "d.label_singular",
29
+ "d.created_at",
30
+ "d.locale",
31
+ "d.translation_group",
32
+ sql`coalesce(g.hierarchical, d.hierarchical)`.as("hierarchical"),
33
+ sql`coalesce(g.collections, d.collections)`.as("collections")
34
+ ]);
35
+ if (locale !== void 0) query = query.where(localeMatches("d.locale", locale)).orderBy(localeOrder("d.locale", locale), "asc");
36
+ return query;
37
+ }
38
+ /**
39
+ * The taxonomy's group id and structure, or null when no locale defines `name`.
40
+ * A group whose definitions are all gone counts as deleted.
41
+ */
42
+ async function findTaxonomyStructure(db, name) {
43
+ const row = await selectTaxonomyDefs(db).where("d.name", "=", name).orderBy("d.id", "asc").executeTakeFirst();
44
+ if (!row) return null;
45
+ return {
46
+ id: row.translation_group ?? row.id,
47
+ hierarchical: row.hierarchical === 1,
48
+ collections: parseTaxonomyCollections(row.collections)
49
+ };
50
+ }
51
+ /**
52
+ * Write a taxonomy's structure for every locale and return its group id.
53
+ *
54
+ * Creates the group with `groupId` and `structure` when the name has none. An
55
+ * existing group changes only the fields in `overwrite`, so a caller holding an
56
+ * older read of the other field does not write it back. Every definition row of
57
+ * the name is then linked to the group and copies its values, including rows
58
+ * written without it.
59
+ */
60
+ async function saveTaxonomyStructure(db, name, groupId, structure, overwrite = structure) {
61
+ const changes = {};
62
+ if (overwrite.hierarchical !== void 0) changes.hierarchical = overwrite.hierarchical ? 1 : 0;
63
+ if (overwrite.collections !== void 0) changes.collections = JSON.stringify([...new Set(overwrite.collections)]);
64
+ const group = await db.insertInto("_emdash_taxonomy_def_groups").values({
65
+ id: groupId,
66
+ name,
67
+ hierarchical: structure.hierarchical ? 1 : 0,
68
+ collections: JSON.stringify([...new Set(structure.collections)])
69
+ }).onConflict((oc) => Object.keys(changes).length > 0 ? oc.column("name").doUpdateSet(changes) : oc.column("name").doNothing()).returning([
70
+ "id",
71
+ "hierarchical",
72
+ "collections"
73
+ ]).executeTakeFirst() ?? await db.selectFrom("_emdash_taxonomy_def_groups").select([
74
+ "id",
75
+ "hierarchical",
76
+ "collections"
77
+ ]).where("name", "=", name).executeTakeFirstOrThrow();
78
+ await db.updateTable("_emdash_taxonomy_defs").set({
79
+ hierarchical: group.hierarchical,
80
+ collections: group.collections,
81
+ translation_group: group.id
82
+ }).where("name", "=", name).execute();
83
+ return group.id;
84
+ }
85
+ /** Parse a stored `collections` value, skipping anything that isn't a string list. */
86
+ function parseTaxonomyCollections(value) {
87
+ if (!value) return [];
88
+ let parsed;
89
+ try {
90
+ parsed = JSON.parse(value);
91
+ } catch {
92
+ return [];
93
+ }
94
+ if (!Array.isArray(parsed)) return [];
95
+ return [...new Set(parsed.filter((entry) => typeof entry === "string"))];
96
+ }
97
+
98
+ //#endregion
99
+ //#region src/page/seo-panel.ts
100
+ function seoPanelCacheKey(collection, id) {
101
+ return `seo-panel:${collection}:${id}`;
102
+ }
103
+ /**
104
+ * Prime the request-scoped SEO panel cache for a content entry.
105
+ *
106
+ * Called wherever an entry's folded SEO data materializes: the loader's
107
+ * single-entry path (fresh query) and the object-cache revive path in
108
+ * `getEmDashEntry` (warm hit, where the loader never runs). No-ops outside
109
+ * a request context; never overwrites an already-primed value.
110
+ */
111
+ function primeSeoPanel(collection, id, seo) {
112
+ setRequestCacheEntry(seoPanelCacheKey(collection, id), seo);
113
+ }
114
+
115
+ //#endregion
116
+ //#region src/loader.ts
117
+ var loader_exports = /* @__PURE__ */ __exportAll({
118
+ CURSOR_RAW_VALUES: () => CURSOR_RAW_VALUES,
119
+ FOLDED_BYLINES: () => FOLDED_BYLINES,
120
+ FOLDED_BYLINES_EXIST: () => FOLDED_BYLINES_EXIST,
121
+ FOLDED_TERMS: () => FOLDED_TERMS,
122
+ LARGE_TERM_ASSIGNMENTS: () => LARGE_TERM_ASSIGNMENTS,
123
+ buildTaxonomyPivotQuery: () => buildTaxonomyPivotQuery,
124
+ creditsFromFoldedBylines: () => creditsFromFoldedBylines,
125
+ emdashLoader: () => emdashLoader,
126
+ encodeSortCursor: () => encodeSortCursor,
127
+ getDb: () => getDb,
128
+ loadEntriesByGroups: () => loadEntriesByGroups,
129
+ resetTaxonomyNamesCache: () => resetTaxonomyNamesCache
130
+ });
131
+ const FIELD_NAME_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
132
+ /**
133
+ * SEO columns folded into the single-entry query as a single JSON column
134
+ * (`_emdash_seo` in the result set), then expanded onto the row under these
135
+ * aliases for `extractSeo()`. Surfacing SEO as one aggregated column keeps the
136
+ * result-set width bounded regardless of how many fields the collection has,
137
+ * which matters for D1: a flat `LEFT JOIN _emdash_seo` adds 5 alias columns to
138
+ * every row and pushes wide collections (common after WordPress / ACF imports)
139
+ * past D1's per-result-set column limit, surfacing as a silent null entry.
140
+ * One JSON column is one column, so the join stays safe at any schema width.
141
+ *
142
+ * The aliases mirror the strategy used by `foldedHydrationSelects` for byline
143
+ * and taxonomy hydration: aggregate in SQL, expand in JS. SEO is 1:1 with
144
+ * content, so the subquery uses `json_object` (not the array aggregator).
145
+ *
146
+ * The `_emdash_` prefix on the aliases guarantees they can never collide with
147
+ * a content field. Field slugs must match `/^[a-z][a-z0-9_]*$/`, so a user can
148
+ * legitimately define a `seo_title` field; surfacing the SEO column under its
149
+ * bare name would shadow that field in the result set and drop the user's
150
+ * value. The prefix (illegal as a leading slug char) sidesteps this entirely.
151
+ */
152
+ const SEO_COLUMN_ALIASES = {
153
+ seo_title: "_emdash_seo_title",
154
+ seo_description: "_emdash_seo_description",
155
+ seo_image: "_emdash_seo_image",
156
+ seo_canonical: "_emdash_seo_canonical",
157
+ seo_no_index: "_emdash_seo_no_index"
158
+ };
159
+ /** Aliased SEO result keys — excluded from generic field mapping. */
160
+ const SEO_ALIAS_COLUMNS = Object.values(SEO_COLUMN_ALIASES);
161
+ /** Folded SEO JSON column name in the result set (expanded onto aliases in JS). */
162
+ const SEO_FOLDED_COLUMN = "_emdash_seo";
163
+ /** Folded boolean field slugs used to restore SQLite integer values. */
164
+ const BOOLEAN_FIELDS_FOLDED_COLUMN = "_emdash_boolean_fields";
165
+ /** Rank of a row among its translation group's variants, in {@link loadEntriesByGroups}. */
166
+ const VARIANT_RANK_COLUMN = "_emdash_variant_rank";
167
+ /**
168
+ * System columns excluded from entry.data
169
+ * Note: slug is intentionally NOT excluded - it's useful as data.slug in templates
170
+ */
171
+ const SYSTEM_COLUMNS = new Set([
172
+ "id",
173
+ "status",
174
+ "author_id",
175
+ "primary_byline_id",
176
+ "created_at",
177
+ "updated_at",
178
+ "published_at",
179
+ "scheduled_at",
180
+ "deleted_at",
181
+ "version",
182
+ "live_revision_id",
183
+ "draft_revision_id",
184
+ "locale",
185
+ "translation_group",
186
+ ...SEO_ALIAS_COLUMNS,
187
+ "_emdash_terms",
188
+ "_emdash_bylines",
189
+ "_emdash_bylines_exist",
190
+ SEO_FOLDED_COLUMN,
191
+ BOOLEAN_FIELDS_FOLDED_COLUMN,
192
+ VARIANT_RANK_COLUMN
193
+ ]);
194
+ /** Markers for byline/taxonomy hydration folded into the content query. */
195
+ const FOLDED_TERMS = Symbol.for("emdash:foldedTerms");
196
+ const FOLDED_BYLINES = Symbol.for("emdash:foldedBylines");
197
+ /**
198
+ * Marker for whether `_emdash_bylines` has any rows at all (`false` = table
199
+ * empty). Lets byline hydration trust an empty fold instead of re-checking
200
+ * via the byline query path on sites that never use bylines.
201
+ */
202
+ const FOLDED_BYLINES_EXIST = Symbol.for("emdash:foldedBylinesExist");
203
+ /**
204
+ * Correlated JSON-array subqueries that fold taxonomy-term and byline hydration
205
+ * into the content query, removing the two separate hydration round trips per
206
+ * fetch. `outer` is the content table's alias/name; each subquery correlates on
207
+ * `<outer>.id`, so the base query stays one row per entry (no join fan-out, no
208
+ * duplicated content payload). Order is NOT applied in the aggregate (it differs
209
+ * across dialects) — the consumer sorts terms by label and credits by sortOrder.
210
+ *
211
+ * Dialect-specific aggregation: SQLite `json_group_array`/`json_object` returns
212
+ * a JSON *string*; Postgres `json_agg`/`json_build_object` (coalesced to `[]`)
213
+ * returns parsed JSON. {@link stashFolded} handles both.
214
+ */
215
+ function foldedHydrationSelects(db, type, outer) {
216
+ const o = sql.ref(outer);
217
+ const pg = isPostgres(db);
218
+ const obj = (pairs) => pg ? sql.raw(`json_build_object(${pairs})`) : sql.raw(`json_object(${pairs})`);
219
+ const agg = (inner) => pg ? sql`coalesce(json_agg(${inner}), '[]'::json)` : sql`json_group_array(${inner})`;
220
+ const foldJoin = pg ? sql`JOIN` : sql`CROSS JOIN`;
221
+ const termObj = obj("'id', coalesce(exact_term.id, default_term.id), 'name', coalesce(exact_term.name, default_term.name), 'slug', coalesce(exact_term.slug, default_term.slug), 'label', coalesce(exact_term.label, default_term.label), 'parent_id', coalesce(exact_term.parent_id, default_term.parent_id), 'locale', coalesce(exact_term.locale, default_term.locale), 'translation_group', coalesce(exact_term.translation_group, default_term.translation_group)");
222
+ const defaultLocale = getI18nConfig()?.defaultLocale ?? "en";
223
+ const selectedTermId = sql`coalesce(exact_term.id, default_term.id)`;
224
+ const termAgg = pg ? sql`coalesce(json_agg(${termObj}) FILTER (WHERE ${selectedTermId} IS NOT NULL), '[]'::json)` : sql`json_group_array(${termObj}) FILTER (WHERE ${selectedTermId} IS NOT NULL)`;
225
+ const hasLocaleAliases = Object.keys(getI18nConfig()?.localeAliases ?? {}).length > 0;
226
+ const terms = hasLocaleAliases ? sql`(SELECT ${termAgg} FROM ${sql.ref("content_taxonomies")} AS ct
227
+ LEFT JOIN ${sql.ref("taxonomies")} AS exact_term ON exact_term.id = (
228
+ SELECT candidate.id FROM taxonomies AS candidate
229
+ WHERE candidate.translation_group = ct.taxonomy_id
230
+ AND ${canonicalLocaleColumn("candidate.locale")} = ${canonicalLocaleColumn(`${outer}.locale`)}
231
+ ORDER BY ${storedLocaleOrder("candidate.locale")}, candidate.id LIMIT 1
232
+ )
233
+ LEFT JOIN ${sql.ref("taxonomies")} AS default_term ON default_term.id = (
234
+ SELECT candidate.id FROM taxonomies AS candidate
235
+ WHERE candidate.translation_group = ct.taxonomy_id
236
+ AND ${localeMatches("candidate.locale", defaultLocale)}
237
+ ORDER BY ${localeOrder("candidate.locale", defaultLocale)}, candidate.id LIMIT 1
238
+ )
239
+ WHERE ct.collection = ${type} AND ct.entry_id = ${o}.translation_group) AS ${sql.ref("_emdash_terms")}` : sql`(SELECT ${termAgg} FROM ${sql.ref("content_taxonomies")} AS ct LEFT JOIN ${sql.ref("taxonomies")} AS exact_term ON exact_term.translation_group = ct.taxonomy_id AND exact_term.locale = ${o}.locale LEFT JOIN ${sql.ref("taxonomies")} AS default_term ON default_term.translation_group = ct.taxonomy_id AND default_term.locale = ${defaultLocale} WHERE ct.collection = ${type} AND ct.entry_id = ${o}.translation_group) AS ${sql.ref("_emdash_terms")}`;
240
+ const bylineInner = obj("'id', b.id, 'slug', b.slug, 'displayName', b.display_name, 'bio', b.bio, 'avatarMediaId', b.avatar_media_id, 'avatarStorageKey', m.storage_key, 'avatarAlt', m.alt, 'avatarBlurhash', m.blurhash, 'avatarDominantColor', m.dominant_color, 'websiteUrl', b.website_url, 'userId', b.user_id, 'isGuest', b.is_guest, 'createdAt', b.created_at, 'updatedAt', b.updated_at, 'locale', b.locale, 'translationGroup', b.translation_group");
241
+ const credit = sql`${pg ? sql.raw("json_build_object('roleLabel', cb.role_label, 'sortOrder', cb.sort_order, 'byline', ") : sql.raw("json_object('roleLabel', cb.role_label, 'sortOrder', cb.sort_order, 'byline', ")}${bylineInner})`;
242
+ return {
243
+ terms,
244
+ bylines: hasLocaleAliases ? sql`(SELECT ${agg(credit)} FROM ${sql.ref("_emdash_content_bylines")} AS cb
245
+ ${foldJoin} ${sql.ref("_emdash_bylines")} AS b ON b.id = (
246
+ SELECT candidate.id FROM _emdash_bylines AS candidate
247
+ WHERE candidate.translation_group = cb.byline_id
248
+ AND ${canonicalLocaleColumn("candidate.locale")} = ${canonicalLocaleColumn(`${outer}.locale`)}
249
+ ORDER BY ${storedLocaleOrder("candidate.locale")}, candidate.id LIMIT 1
250
+ )
251
+ LEFT JOIN ${sql.ref("media")} AS m ON m.id = b.avatar_media_id
252
+ WHERE cb.collection_slug = ${type} AND cb.content_id = ${o}.id) AS ${sql.ref("_emdash_bylines")}` : sql`(SELECT ${agg(credit)} FROM ${sql.ref("_emdash_content_bylines")} AS cb ${foldJoin} ${sql.ref("_emdash_bylines")} AS b ON b.translation_group = cb.byline_id LEFT JOIN ${sql.ref("media")} AS m ON m.id = b.avatar_media_id WHERE cb.collection_slug = ${type} AND cb.content_id = ${o}.id AND b.locale = ${o}.locale) AS ${sql.ref("_emdash_bylines")}`,
253
+ bylinesExist: sql`(SELECT 1 FROM ${sql.ref("_emdash_bylines")} LIMIT 1) AS ${sql.ref("_emdash_bylines_exist")}`
254
+ };
255
+ }
256
+ /**
257
+ * Correlated JSON-object subquery that folds per-entry SEO into the content
258
+ * query without widening the result set: 1 row of `_emdash_seo` becomes 1 JSON
259
+ * column rather than 5 flat columns. The JSON column is expanded onto the row
260
+ * via {@link expandFoldedSeo} after the query runs, preserving the alias keys
261
+ * that {@link extractSeo} reads. Missing SEO row (no entry in `_emdash_seo`)
262
+ * yields NULL, which {@link expandFoldedSeo} treats as "no SEO" - identical to
263
+ * the prior LEFT JOIN miss behavior.
264
+ *
265
+ * Dialect-specific aggregation mirrors {@link foldedHydrationSelects}: SQLite
266
+ * `json_object` returns a JSON *string*, Postgres `json_build_object` returns
267
+ * parsed JSON; both branches are handled in expansion.
268
+ */
269
+ function foldedSeoSelect(db, type, outer) {
270
+ const o = sql.ref(outer);
271
+ const pg = isPostgres(db);
272
+ const pairs = "'seo_title', s.seo_title, 'seo_description', s.seo_description, 'seo_image', s.seo_image, 'seo_canonical', s.seo_canonical, 'seo_no_index', s.seo_no_index";
273
+ return sql`(SELECT ${pg ? sql.raw(`json_build_object(${pairs})`) : sql.raw(`json_object(${pairs})`)} FROM ${sql.ref("_emdash_seo")} AS s WHERE s.collection = ${type} AND s.content_id = ${o}.id LIMIT 1) AS ${sql.ref(SEO_FOLDED_COLUMN)}`;
274
+ }
275
+ function foldedBooleanFieldsSelect(db, type) {
276
+ return sql`(
277
+ SELECT ${isPostgres(db) ? sql`coalesce(json_agg(f.slug), '[]'::json)` : sql`json_group_array(f.slug)`}
278
+ FROM ${sql.ref("_emdash_fields")} AS f
279
+ INNER JOIN ${sql.ref("_emdash_collections")} AS c ON c.id = f.collection_id
280
+ WHERE c.slug = ${type} AND f.type = ${"boolean"}
281
+ ) AS ${sql.ref(BOOLEAN_FIELDS_FOLDED_COLUMN)}`;
282
+ }
283
+ /**
284
+ * Expand the folded `_emdash_seo` JSON column onto the row using SEO_COLUMN_ALIASES,
285
+ * so {@link extractSeo} reads it transparently. SQLite returns a JSON string
286
+ * (parse it); Postgres returns already-parsed JSON. Missing/malformed/null is
287
+ * a no-op: {@link extractSeo} returns null when the aliases are absent.
288
+ */
289
+ function isPlainObject(value) {
290
+ return !!value && typeof value === "object" && !Array.isArray(value);
291
+ }
292
+ function expandFoldedSeo(row) {
293
+ const raw = row[SEO_FOLDED_COLUMN];
294
+ delete row[SEO_FOLDED_COLUMN];
295
+ let parsed = null;
296
+ if (typeof raw === "string") try {
297
+ const candidate = JSON.parse(raw);
298
+ if (isPlainObject(candidate)) parsed = candidate;
299
+ } catch {
300
+ return;
301
+ }
302
+ else if (isPlainObject(raw)) parsed = raw;
303
+ if (!parsed) return;
304
+ for (const [col, alias] of Object.entries(SEO_COLUMN_ALIASES)) row[alias] = parsed[col] ?? null;
305
+ }
306
+ function creditsFromFoldedBylines(folded) {
307
+ return folded.map((raw) => {
308
+ const credit = isPlainObject(raw) ? raw : {};
309
+ const byline = isPlainObject(credit.byline) ? credit.byline : {};
310
+ return {
311
+ roleLabel: typeof credit.roleLabel === "string" ? credit.roleLabel : null,
312
+ sortOrder: Number(credit.sortOrder ?? 0),
313
+ source: "explicit",
314
+ byline: {
315
+ ...byline,
316
+ isGuest: Boolean(byline.isGuest),
317
+ customFields: {}
318
+ }
319
+ };
320
+ }).toSorted((a, b) => a.sortOrder - b.sortOrder);
321
+ }
322
+ /**
323
+ * Stash folded hydration JSON (non-enumerable) for the query.ts fast paths.
324
+ * SQLite returns a JSON string (parse it); Postgres returns already-parsed JSON.
325
+ */
326
+ function stashFolded(data, row) {
327
+ for (const [col, sym] of [["_emdash_terms", FOLDED_TERMS], ["_emdash_bylines", FOLDED_BYLINES]]) {
328
+ const raw = row[col];
329
+ let value;
330
+ if (typeof raw === "string") try {
331
+ value = JSON.parse(raw);
332
+ } catch {
333
+ continue;
334
+ }
335
+ else if (Array.isArray(raw)) value = raw;
336
+ else continue;
337
+ Object.defineProperty(data, sym, {
338
+ value,
339
+ enumerable: false,
340
+ configurable: true
341
+ });
342
+ }
343
+ if ("_emdash_bylines_exist" in row) Object.defineProperty(data, FOLDED_BYLINES_EXIST, {
344
+ value: row["_emdash_bylines_exist"] != null,
345
+ enumerable: false,
346
+ configurable: true
347
+ });
348
+ const foldedBylines = Reflect.get(data, FOLDED_BYLINES);
349
+ if (!Array.isArray(foldedBylines)) return;
350
+ const credits = creditsFromFoldedBylines(foldedBylines);
351
+ data.bylines = credits;
352
+ data.byline = credits[0]?.byline ?? null;
353
+ }
354
+ /**
355
+ * Build a `data.seo` object from the joined `_emdash_seo` columns on a row.
356
+ *
357
+ * Returns `null` when no SEO row exists (LEFT JOIN miss → `seo_no_index` is
358
+ * NULL, since the column is `NOT NULL DEFAULT 0` whenever a row is present).
359
+ * Returning null keeps the `seo` key off entries that have none, so
360
+ * `getSeoMeta()` falls back to its defaults exactly as before.
361
+ */
362
+ function extractSeo(row) {
363
+ const noIndex = row[SEO_COLUMN_ALIASES.seo_no_index];
364
+ if (noIndex === null || noIndex === void 0) return null;
365
+ const title = row[SEO_COLUMN_ALIASES.seo_title];
366
+ const description = row[SEO_COLUMN_ALIASES.seo_description];
367
+ const image = row[SEO_COLUMN_ALIASES.seo_image];
368
+ const canonical = row[SEO_COLUMN_ALIASES.seo_canonical];
369
+ return {
370
+ title: typeof title === "string" ? title : null,
371
+ description: typeof description === "string" ? description : null,
372
+ image: typeof image === "string" ? image : null,
373
+ canonical: typeof canonical === "string" ? canonical : null,
374
+ noIndex: noIndex === 1
375
+ };
376
+ }
377
+ /**
378
+ * Get the table name for a collection type
379
+ */
380
+ function getTableName(type) {
381
+ validateIdentifier(type, "collection type");
382
+ return `ec_${type}`;
383
+ }
384
+ const TAXONOMY_NAMES_CACHE_KEY = Symbol.for("emdash:taxonomy-names");
385
+ const taxonomyNamesStore = globalThis;
386
+ const taxonomyNamesHolder = taxonomyNamesStore[TAXONOMY_NAMES_CACHE_KEY] ?? (() => {
387
+ const holder = { cache: null };
388
+ taxonomyNamesStore[TAXONOMY_NAMES_CACHE_KEY] = holder;
389
+ return holder;
390
+ })();
391
+ function setTaxonomyNamesCache(cache) {
392
+ taxonomyNamesHolder.cache = cache;
393
+ }
394
+ /**
395
+ * Get taxonomy names attached to a collection (cached for the primary DB,
396
+ * bypassed only when the per-request DB is an isolated instance — playground /
397
+ * DO preview). Plain D1 Sessions routing shares schema with the singleton, so
398
+ * the isolate-wide cache stays valid.
399
+ */
400
+ async function getTaxonomyNames(db, collection) {
401
+ const hasIsolatedDb = getRequestContext()?.dbIsIsolated === true;
402
+ if (!hasIsolatedDb && taxonomyNamesHolder.cache) return taxonomyNamesHolder.cache.get(collection) ?? /* @__PURE__ */ new Set();
403
+ try {
404
+ const defs = await selectTaxonomyDefs(db).execute();
405
+ const namesByCollection = /* @__PURE__ */ new Map();
406
+ for (const def of defs) {
407
+ let collections;
408
+ try {
409
+ collections = JSON.parse(def.collections ?? "[]");
410
+ } catch {
411
+ continue;
412
+ }
413
+ if (!Array.isArray(collections)) continue;
414
+ for (const attachedCollection of collections) {
415
+ if (typeof attachedCollection !== "string") continue;
416
+ const names = namesByCollection.get(attachedCollection) ?? /* @__PURE__ */ new Set();
417
+ names.add(def.name);
418
+ namesByCollection.set(attachedCollection, names);
419
+ }
420
+ }
421
+ if (!hasIsolatedDb) setTaxonomyNamesCache(namesByCollection);
422
+ return namesByCollection.get(collection) ?? /* @__PURE__ */ new Set();
423
+ } catch (error) {
424
+ if (!isMissingTableError(error) && !isMissingColumnError(error)) throw error;
425
+ const empty = /* @__PURE__ */ new Set();
426
+ if (!hasIsolatedDb) setTaxonomyNamesCache(/* @__PURE__ */ new Map());
427
+ return empty;
428
+ }
429
+ }
430
+ /**
431
+ * Reset the isolate-wide taxonomy-names cache.
432
+ *
433
+ * Called from `invalidateTaxonomyDefsCache()` so that creating or seeding a
434
+ * taxonomy definition is reflected within the current isolate instead of
435
+ * waiting for the isolate to recycle. Keeps this cache consistent with the
436
+ * isolate-wide taxonomy-defs cache in `taxonomies/index.ts`.
437
+ */
438
+ function resetTaxonomyNamesCache() {
439
+ setTaxonomyNamesCache(null);
440
+ }
441
+ /**
442
+ * System columns to include in data (mapped to camelCase where needed)
443
+ */
444
+ const INCLUDE_IN_DATA = {
445
+ id: "id",
446
+ status: "status",
447
+ author_id: "authorId",
448
+ primary_byline_id: "primaryBylineId",
449
+ created_at: "createdAt",
450
+ updated_at: "updatedAt",
451
+ published_at: "publishedAt",
452
+ scheduled_at: "scheduledAt",
453
+ draft_revision_id: "draftRevisionId",
454
+ live_revision_id: "liveRevisionId",
455
+ locale: "locale",
456
+ translation_group: "translationGroup"
457
+ };
458
+ /** System date columns that should be converted to Date objects */
459
+ const DATE_COLUMNS = new Set([
460
+ "created_at",
461
+ "updated_at",
462
+ "published_at",
463
+ "scheduled_at"
464
+ ]);
465
+ /**
466
+ * Hidden, symbol-keyed property on each mapped data record carrying raw DB
467
+ * values: the string of every date column and, in a collection load, the
468
+ * primary sort column's value. Lets cursor encoders downstream reproduce the
469
+ * loader's exact `nextCursor` from an entry, whose `data` leaves some columns
470
+ * out, parses text that looks like JSON, and holds dates as `Date` objects,
471
+ * which lose precision for stored values that aren't already
472
+ * ISO-with-milliseconds (e.g. `2026-01-01T00:00:00Z` becomes
473
+ * `2026-01-01T00:00:00.000Z`).
474
+ */
475
+ const CURSOR_RAW_VALUES = Symbol("emdash:cursorRawValues");
476
+ const LOCAL_MEDIA_FILE_PREFIX = "/_emdash/api/media/file/";
477
+ const URL_SCHEME_PATTERN = /^[a-zA-Z][a-zA-Z\d+\-.]*:/;
478
+ /** Safely extract a string value from a record, returning fallback if not a string */
479
+ function rowStr(row, key, fallback = "") {
480
+ const val = row[key];
481
+ return typeof val === "string" ? val : fallback;
482
+ }
483
+ function isRecord(value) {
484
+ return typeof value === "object" && value !== null && !Array.isArray(value);
485
+ }
486
+ function isBareMediaKey(src) {
487
+ return !src.startsWith("/") && !URL_SCHEME_PATTERN.test(src);
488
+ }
489
+ function normalizeLocalMediaValue(value) {
490
+ if (Array.isArray(value)) return value.map(normalizeLocalMediaValue);
491
+ if (!isRecord(value)) return value;
492
+ const normalized = {};
493
+ for (const [key, child] of Object.entries(value)) normalized[key] = normalizeLocalMediaValue(child);
494
+ if (normalized.provider === "local" && typeof normalized.src === "string" && normalized.src.length > 0) {
495
+ const src = normalized.src;
496
+ if (src.startsWith(LOCAL_MEDIA_FILE_PREFIX)) {
497
+ const id = src.slice(24);
498
+ if (!normalized.id && id) normalized.id = id;
499
+ } else if (isBareMediaKey(src)) {
500
+ if (!normalized.id) normalized.id = src;
501
+ normalized.src = `${LOCAL_MEDIA_FILE_PREFIX}${src}`;
502
+ }
503
+ }
504
+ return normalized;
505
+ }
506
+ /**
507
+ * Map a database row to entry data
508
+ * Extracts content fields (non-system columns) and parses JSON where needed.
509
+ * System columns needed for templates (id, status, dates) are included with camelCase names.
510
+ */
511
+ function mapRowToData(row, booleanFields, sortColumn) {
512
+ const data = {};
513
+ const rawValues = {};
514
+ for (const [key, value] of Object.entries(row)) {
515
+ if (key in INCLUDE_IN_DATA) {
516
+ if (DATE_COLUMNS.has(key)) if (typeof value === "string") {
517
+ rawValues[key] = value;
518
+ data[INCLUDE_IN_DATA[key]] = new Date(value);
519
+ } else data[INCLUDE_IN_DATA[key]] = null;
520
+ else data[INCLUDE_IN_DATA[key]] = value;
521
+ continue;
522
+ }
523
+ if (SYSTEM_COLUMNS.has(key)) continue;
524
+ if (booleanFields.has(key) && (typeof value === "boolean" || value === 0 || value === 1)) {
525
+ data[key] = Boolean(value);
526
+ continue;
527
+ }
528
+ if (typeof value === "string") try {
529
+ if (value.startsWith("{") || value.startsWith("[")) data[key] = normalizeLocalMediaValue(JSON.parse(value));
530
+ else data[key] = value;
531
+ } catch {
532
+ data[key] = value;
533
+ }
534
+ else data[key] = value;
535
+ }
536
+ stashSortValue(data, row, sortColumn, rawValues);
537
+ return data;
538
+ }
539
+ /**
540
+ * Keep the row's raw sort value on `data` (non-enumerable) so the next-page
541
+ * cursor is encoded from the same value the keyset query compares against.
542
+ */
543
+ function stashSortValue(data, row, sortColumn, rawValues = {}) {
544
+ if (sortColumn !== void 0 && sortColumn in row) rawValues[sortColumn] = sortCursorValue(row[sortColumn]);
545
+ Object.defineProperty(data, CURSOR_RAW_VALUES, {
546
+ value: rawValues,
547
+ enumerable: false,
548
+ configurable: false,
549
+ writable: false
550
+ });
551
+ }
552
+ /**
553
+ * Fetch the draft revision snapshots for the rows a collection read should
554
+ * serve as drafts, keyed by content row ID. One query per `SQL_BATCH_SIZE`
555
+ * revisions; nothing runs unless `scope` is set.
556
+ */
557
+ async function loadDraftRevisions(db, rows, scope) {
558
+ const drafts = /* @__PURE__ */ new Map();
559
+ if (!scope) return drafts;
560
+ const wanted = /* @__PURE__ */ new Map();
561
+ for (const row of rows) {
562
+ const draftId = rowStr(row, "draft_revision_id");
563
+ if (!draftId) continue;
564
+ if (scope !== "all" && scope.id !== rowStr(row, "id") && scope.id !== rowStr(row, "slug") && scope.id !== entryIdForRow(row)) continue;
565
+ wanted.set(draftId, rowStr(row, "id"));
566
+ }
567
+ for (const ids of chunks([...wanted.keys()], SQL_BATCH_SIZE)) {
568
+ const result = await sql`
569
+ SELECT id, data FROM revisions WHERE id IN (${sql.join(ids)})
570
+ `.execute(db);
571
+ for (const revision of result.rows) {
572
+ const rowId = wanted.get(revision.id);
573
+ if (rowId) drafts.set(rowId, JSON.parse(revision.data));
574
+ }
575
+ }
576
+ return drafts;
577
+ }
578
+ /**
579
+ * Build an entry whose content fields come from a revision snapshot, keeping
580
+ * the system metadata of the content table row.
581
+ */
582
+ function revisionEntry(row, parsed, booleanFields, sortColumn) {
583
+ const systemData = {};
584
+ for (const [key, mappedKey] of Object.entries(INCLUDE_IN_DATA)) if (key in row) if (DATE_COLUMNS.has(key)) systemData[mappedKey] = typeof row[key] === "string" ? new Date(row[key]) : null;
585
+ else systemData[mappedKey] = row[key];
586
+ const slug = typeof parsed._slug === "string" ? parsed._slug : rowStr(row, "slug");
587
+ const revSlug = slug || rowStr(row, "id");
588
+ const i18nConfig = virtualConfig?.i18n;
589
+ const i18nEnabled = i18nConfig && i18nConfig.locales.length > 1;
590
+ const revLocale = rowStr(row, "locale");
591
+ const shouldPrefixRev = i18nEnabled && revLocale !== "" && (revLocale !== i18nConfig.defaultLocale || i18nConfig.prefixDefaultLocale);
592
+ const data = {
593
+ ...systemData,
594
+ slug,
595
+ ...mapRevisionData(parsed, booleanFields)
596
+ };
597
+ stashSortValue(data, row, sortColumn);
598
+ return {
599
+ id: shouldPrefixRev ? `${revLocale}/${revSlug}` : revSlug,
600
+ slug,
601
+ status: rowStr(row, "status", "draft"),
602
+ data,
603
+ cacheHint: {
604
+ tags: [rowStr(row, "id")],
605
+ lastModified: row.updated_at ? new Date(rowStr(row, "updated_at")) : void 0
606
+ }
607
+ };
608
+ }
609
+ /**
610
+ * The entry id Astro addresses a row by: its slug, prefixed with the locale
611
+ * whenever i18n routing would prefix the URL. Shared by every path that builds
612
+ * a loader entry so a referenced entry carries the same id it would have been
613
+ * loaded under directly.
614
+ */
615
+ function entryIdForRow(row) {
616
+ const i18nConfig = virtualConfig?.i18n;
617
+ const slug = rowStr(row, "slug") || rowStr(row, "id");
618
+ const locale = rowStr(row, "locale");
619
+ return i18nConfig && i18nConfig.locales.length > 1 && locale !== "" && (locale !== i18nConfig.defaultLocale || i18nConfig.prefixDefaultLocale) ? `${locale}/${slug}` : slug;
620
+ }
621
+ /**
622
+ * Load one locale variant of each translation group, in one query per
623
+ * `SQL_BATCH_SIZE` chunk of groups.
624
+ *
625
+ * A group's variant is the first of `localeChain` it has, or else its lowest
626
+ * locale code: a reference names a translation group, so a target that exists
627
+ * only outside the chain is still a real reference. Groups with no surviving
628
+ * variant are absent from the result.
629
+ *
630
+ * The rows go through the same {@link mapRowToData} as a direct entry load, so
631
+ * a referenced entry's `data` carries the same dates, booleans and normalized
632
+ * media values a caller would get from `getEmDashEntry`. Bylines and taxonomy
633
+ * terms are not hydrated; each would cost a correlated subquery per row.
634
+ */
635
+ async function loadEntriesByGroups(type, translationGroups, options = {}) {
636
+ if (translationGroups.length === 0) return [];
637
+ const db = await getDb();
638
+ const tableName = getTableName(type);
639
+ const statusFilter = options.publishedOnly ? sql`AND status = ${"published"}` : sql``;
640
+ const booleanFieldsSelect = foldedBooleanFieldsSelect(db, type);
641
+ const localeChain = options.localeChain ?? [];
642
+ const localeCandidates = [...new Set(localeChain.flatMap((locale) => getLocaleCandidates(locale)))];
643
+ const chainPosition = localeCandidates.length > 0 ? sql`CASE locale ${sql.join(localeCandidates.map((locale, index) => sql`WHEN ${locale} THEN ${sql.lit(index)}`), sql` `)} ELSE ${sql.lit(localeCandidates.length)} END,` : sql``;
644
+ const entries = [];
645
+ try {
646
+ for (const chunk of chunks(translationGroups, SQL_BATCH_SIZE)) {
647
+ const result = await sql`
648
+ SELECT * FROM (
649
+ SELECT *, ${booleanFieldsSelect},
650
+ ROW_NUMBER() OVER (
651
+ PARTITION BY translation_group ORDER BY ${chainPosition} locale ASC
652
+ ) AS ${sql.ref(VARIANT_RANK_COLUMN)}
653
+ FROM ${sql.ref(tableName)}
654
+ WHERE translation_group IN (${sql.join(chunk.map((group) => sql`${group}`))})
655
+ AND deleted_at IS NULL
656
+ ${statusFilter}
657
+ ) AS variants
658
+ WHERE ${sql.ref(VARIANT_RANK_COLUMN)} = 1
659
+ ORDER BY translation_group ASC
660
+ `.execute(db);
661
+ const booleanFields = parseFoldedBooleanFields(result.rows[0]);
662
+ for (const row of result.rows) entries.push({
663
+ id: entryIdForRow(row),
664
+ slug: rowStr(row, "slug"),
665
+ status: rowStr(row, "status", "draft"),
666
+ data: mapRowToData(row, booleanFields),
667
+ cacheHint: {
668
+ tags: [rowStr(row, "id")],
669
+ lastModified: row.updated_at ? new Date(rowStr(row, "updated_at")) : void 0
670
+ }
671
+ });
672
+ }
673
+ } catch (error) {
674
+ if (isMissingTableError(error)) return [];
675
+ throw error;
676
+ }
677
+ return entries;
678
+ }
679
+ function parseFoldedBooleanFields(row) {
680
+ const raw = row?.[BOOLEAN_FIELDS_FOLDED_COLUMN];
681
+ let values;
682
+ if (typeof raw === "string") try {
683
+ values = JSON.parse(raw);
684
+ } catch {
685
+ return /* @__PURE__ */ new Set();
686
+ }
687
+ else values = raw;
688
+ if (!Array.isArray(values)) return /* @__PURE__ */ new Set();
689
+ return new Set(values.filter((value) => typeof value === "string"));
690
+ }
691
+ /**
692
+ * Map revision data (already-parsed JSON object) to entry data.
693
+ * Strips _-prefixed metadata keys (e.g. _slug) used internally by revisions.
694
+ */
695
+ function mapRevisionData(data, booleanFields) {
696
+ const result = {};
697
+ for (const [key, value] of Object.entries(data)) {
698
+ if (key.startsWith("_")) continue;
699
+ if (booleanFields.has(key) && (typeof value === "boolean" || value === 0 || value === 1)) {
700
+ result[key] = Boolean(value);
701
+ continue;
702
+ }
703
+ result[key] = normalizeLocalMediaValue(value);
704
+ }
705
+ return result;
706
+ }
707
+ let virtualConfig;
708
+ let virtualCreateDialect;
709
+ async function loadVirtualConfig() {
710
+ if (virtualConfig === void 0) virtualConfig = (await import("virtual:emdash/config")).default;
711
+ }
712
+ async function loadVirtualModules() {
713
+ await loadVirtualConfig();
714
+ if (virtualCreateDialect === void 0) virtualCreateDialect = (await import("virtual:emdash/dialect")).createDialect;
715
+ }
716
+ /**
717
+ * Get the primary sort field from an orderBy spec (first valid field, or default).
718
+ */
719
+ function getPrimarySort(orderBy, tablePrefix) {
720
+ if (orderBy) {
721
+ for (const [field, direction] of Object.entries(orderBy)) if (FIELD_NAME_PATTERN.test(field)) return {
722
+ field: tablePrefix ? `${tablePrefix}.${field}` : field,
723
+ direction
724
+ };
725
+ }
726
+ return {
727
+ field: tablePrefix ? `${tablePrefix}.created_at` : "created_at",
728
+ direction: "desc"
729
+ };
730
+ }
731
+ /**
732
+ * Build ORDER BY clause from orderBy spec
733
+ * Validates field names to prevent SQL injection (alphanumeric + underscore only)
734
+ * Supports multiple sort fields in object key order
735
+ */
736
+ function buildOrderByClause(orderBy, tablePrefix) {
737
+ if (!orderBy || Object.keys(orderBy).length === 0) {
738
+ const field = tablePrefix ? `${tablePrefix}.created_at` : "created_at";
739
+ return sql`ORDER BY ${sql.ref(field)} DESC, ${sql.ref(tablePrefix ? `${tablePrefix}.id` : "id")} DESC`;
740
+ }
741
+ const sortParts = [];
742
+ for (const [field, direction] of Object.entries(orderBy)) {
743
+ if (!FIELD_NAME_PATTERN.test(field)) continue;
744
+ const fullField = tablePrefix ? `${tablePrefix}.${field}` : field;
745
+ const dir = direction === "asc" ? sql`ASC` : sql`DESC`;
746
+ sortParts.push(sql`${sql.ref(fullField)} ${dir}`);
747
+ }
748
+ if (sortParts.length === 0) {
749
+ const defaultField = tablePrefix ? `${tablePrefix}.created_at` : "created_at";
750
+ return sql`ORDER BY ${sql.ref(defaultField)} DESC, ${sql.ref(tablePrefix ? `${tablePrefix}.id` : "id")} DESC`;
751
+ }
752
+ const primary = getPrimarySort(orderBy, tablePrefix);
753
+ const idField = tablePrefix ? `${tablePrefix}.id` : "id";
754
+ const idDir = primary.direction === "asc" ? sql`ASC` : sql`DESC`;
755
+ sortParts.push(sql`${sql.ref(idField)} ${idDir}`);
756
+ return sql`ORDER BY ${sql.join(sortParts, sql`, `)}`;
757
+ }
758
+ /**
759
+ * Sort columns every row has a value for. Their cursors keep the plain
760
+ * `{ orderValue, id }` shape; any other sort column can hold NULL.
761
+ */
762
+ const NON_NULL_SORT_COLUMNS = new Set([
763
+ "id",
764
+ "created_at",
765
+ "updated_at",
766
+ "status",
767
+ "locale"
768
+ ]);
769
+ function sortCursorValue(value) {
770
+ if (typeof value === "string" || typeof value === "number") return value;
771
+ if (typeof value === "boolean") return value ? 1 : 0;
772
+ if (value instanceof Date) return value.toISOString();
773
+ return null;
774
+ }
775
+ /**
776
+ * Encode the cursor for the page after the row whose primary sort column
777
+ * `field` holds `value`.
778
+ *
779
+ * @internal shared with query.ts, which re-encodes cursors from entries.
780
+ */
781
+ function encodeSortCursor(field, value, id) {
782
+ const cursorValue = sortCursorValue(value);
783
+ if (NON_NULL_SORT_COLUMNS.has(field)) return encodeCursor(cursorValue === null ? "" : String(cursorValue), id);
784
+ const payload = {
785
+ version: 1,
786
+ field,
787
+ value: cursorValue
788
+ };
789
+ return encodeCursor(JSON.stringify(payload), id);
790
+ }
791
+ function decodeSortCursor(cursor, field) {
792
+ const { orderValue, id } = decodeCursor(cursor);
793
+ if (NON_NULL_SORT_COLUMNS.has(field)) return {
794
+ value: orderValue,
795
+ id
796
+ };
797
+ let payload;
798
+ try {
799
+ payload = JSON.parse(orderValue);
800
+ } catch {
801
+ payload = void 0;
802
+ }
803
+ if (payload === null || typeof payload !== "object") return {
804
+ value: orderValue === "" ? null : orderValue,
805
+ id
806
+ };
807
+ const candidate = payload;
808
+ const { value } = candidate;
809
+ if (candidate.version !== 1 || candidate.field !== field || value !== null && typeof value !== "string" && typeof value !== "number") throw new InvalidCursorError(cursor);
810
+ return {
811
+ value,
812
+ id
813
+ };
814
+ }
815
+ /**
816
+ * Keyset condition for the rows after `cursor`, ordered by `sort` then `id`
817
+ * in `direction`. The ORDER BY keeps each dialect's own NULL position, lowest
818
+ * on SQLite and highest on Postgres, so the condition follows it.
819
+ *
820
+ * Throws `InvalidCursorError` if the cursor is malformed; callers should
821
+ * let this propagate so users see a real error rather than silently
822
+ * falling back to the first page.
823
+ */
824
+ function sortCursorCondition(db, cursor, column, direction, sort, id) {
825
+ const { value, id: cursorId } = decodeSortCursor(cursor, column);
826
+ const cmp = direction === "asc" ? sql.raw(">") : sql.raw("<");
827
+ const nullsFirst = direction === "asc" !== isPostgres(db);
828
+ if (value === null) return nullsFirst ? sql`(${sort} IS NOT NULL OR ${id} ${cmp} ${cursorId})` : sql`(${sort} IS NULL AND ${id} ${cmp} ${cursorId})`;
829
+ const past = sql`${sort} ${cmp} ${value} OR (${sort} = ${value} AND ${id} ${cmp} ${cursorId})`;
830
+ return nullsFirst || NON_NULL_SORT_COLUMNS.has(column) ? sql`(${past})` : sql`(${past} OR ${sort} IS NULL)`;
831
+ }
832
+ /**
833
+ * Build a cursor WHERE condition for keyset pagination.
834
+ * Uses the primary sort field + id as tiebreaker for stable ordering.
835
+ */
836
+ function buildCursorCondition(db, cursor, orderBy, tablePrefix) {
837
+ const primary = getPrimarySort(orderBy);
838
+ const ref = (column) => sql.ref(tablePrefix ? `${tablePrefix}.${column}` : column);
839
+ return sortCursorCondition(db, cursor, primary.field, primary.direction, ref(primary.field), ref("id"));
840
+ }
841
+ /** Type guard: is the where value a range object (not a string or array)? */
842
+ function isWhereRange(value) {
843
+ return value !== null && typeof value === "object" && !Array.isArray(value);
844
+ }
845
+ /**
846
+ * Keys a `where` or `orderBy` can name that belong to the table rather than to
847
+ * a field. `slug` is one of them; {@link SYSTEM_COLUMNS} leaves it out because
848
+ * it is kept in `entry.data` for templates.
849
+ */
850
+ const SYSTEM_QUERY_KEYS = new Set([...SYSTEM_COLUMNS, "slug"]);
851
+ /**
852
+ * The first of `keys` that names a reference field bound to a relation, or
853
+ * undefined.
854
+ *
855
+ * Such a field has no column: a `WHERE` on it fails with "no such column", which
856
+ * the catch below reads as an empty collection, and a field bound after its
857
+ * column existed answers from values it stopped writing. Both read to a template
858
+ * as "nothing matched", so the key has to be caught before the query is built.
859
+ *
860
+ * System columns are answered without a lookup, and the lookup itself is cached
861
+ * per request and in the schema object-cache namespace, so a render that filters
862
+ * by an ordinary field pays for this at most once between schema changes, and a
863
+ * render that filters by nothing never pays at all.
864
+ */
865
+ async function findStoragelessQueryKey(collection, keys) {
866
+ const candidates = keys.filter((key) => !SYSTEM_QUERY_KEYS.has(key));
867
+ if (candidates.length === 0) return void 0;
868
+ const { getReferenceFieldMap } = await import("./field-map-C_rDXfdJ.mjs").then((n) => n.t);
869
+ const bound = await getReferenceFieldMap(collection);
870
+ return candidates.find((key) => bound.has(key));
871
+ }
872
+ /**
873
+ * A boolean field owns an INTEGER column (`FIELD_TYPE_TO_COLUMN`) and its
874
+ * values are written as 0/1, so binding a native `true` against one is a type
875
+ * error on PostgreSQL. SQLite accepts the boolean and compares it as 1, which
876
+ * is why filtering by a boolean field only ever broke on one dialect.
877
+ */
878
+ function bindableFilterValue(value) {
879
+ return typeof value === "boolean" ? value ? 1 : 0 : value;
880
+ }
881
+ /**
882
+ * Build AND conditions for non-taxonomy field filters.
883
+ * Returns an array of sql fragments; empty if no field filters apply.
884
+ * Field names are validated against FIELD_NAME_PATTERN to prevent injection.
885
+ *
886
+ * D1 allows 100 bound parameters per statement, and an array filter binds one
887
+ * per value. So when the arrays in `fields` hold more than `SQL_BATCH_SIZE`
888
+ * values between them, the longest arrays are bound as a single JSON parameter
889
+ * each (`IN (SELECT value FROM json_each(?))`, or `jsonb_array_elements_text`
890
+ * on PostgreSQL) until the rest fit. The statement stays one query, so
891
+ * ordering, cursors, limit and offset stay in the database. Values bound that
892
+ * way compare as text.
893
+ */
894
+ function buildFieldConditions(db, fields, tablePrefix) {
895
+ const conditions = [];
896
+ const arrayLengths = Object.entries(fields).filter((entry) => Array.isArray(entry[1])).map(([key, value]) => [key, value.length]).toSorted((a, b) => b[1] - a[1]);
897
+ let inlineValues = arrayLengths.reduce((sum, [, length]) => sum + length, 0);
898
+ const asJson = /* @__PURE__ */ new Set();
899
+ for (const [key, length] of arrayLengths) {
900
+ if (inlineValues <= SQL_BATCH_SIZE) break;
901
+ asJson.add(key);
902
+ inlineValues -= length;
903
+ }
904
+ for (const [key, value] of Object.entries(fields)) {
905
+ if (!FIELD_NAME_PATTERN.test(key)) {
906
+ console.warn(`[emdash] where filter: invalid field name "${key}" ignored`);
907
+ continue;
908
+ }
909
+ if (value == null) continue;
910
+ const ref = tablePrefix ? sql.ref(`${tablePrefix}.${key}`) : sql.ref(key);
911
+ if (isWhereRange(value)) {
912
+ const { gt, gte, lt, lte } = value;
913
+ if (gt === void 0 && gte === void 0 && lt === void 0 && lte === void 0) {
914
+ console.warn(`[emdash] where filter: "${key}" is an object with none of gt/gte/lt/lte and was ignored (use an array for IN)`);
915
+ continue;
916
+ }
917
+ if (gt !== void 0) conditions.push(sql`${ref} > ${bindableFilterValue(gt)}`);
918
+ if (gte !== void 0) conditions.push(sql`${ref} >= ${bindableFilterValue(gte)}`);
919
+ if (lt !== void 0) conditions.push(sql`${ref} < ${bindableFilterValue(lt)}`);
920
+ if (lte !== void 0) conditions.push(sql`${ref} <= ${bindableFilterValue(lte)}`);
921
+ } else if (Array.isArray(value)) {
922
+ if (value.length === 0) continue;
923
+ if (asJson.has(key)) {
924
+ const values = value.map((v) => String(bindableFilterValue(v)));
925
+ conditions.push(sql`${ref} IN (${jsonTextValues(db, values)})`);
926
+ } else conditions.push(sql`${ref} IN (${sql.join(value.map((v) => sql`${bindableFilterValue(v)}`))})`);
927
+ } else conditions.push(sql`${ref} = ${bindableFilterValue(value)}`);
928
+ }
929
+ return conditions;
930
+ }
931
+ /**
932
+ * Pivot rows from which a term counts as large. Seeking the pivot reads every
933
+ * assignment of the term; walking `ec_*` in sort order reads about
934
+ * `collection size / term size` rows per match. The walk wins only for large
935
+ * terms, and the size probe reads at most this many pivot index entries.
936
+ *
937
+ * The walk estimate assumes the term's entries are spread over the sort order
938
+ * and the requested locale. A term clustered in time, a deep page or a narrow
939
+ * byline filter makes the walk read up to the whole collection; the seek would
940
+ * still read every assignment of the term.
941
+ */
942
+ const LARGE_TERM_ASSIGNMENTS = 200;
943
+ /** A single `published_at`/`created_at` sort, which an `ec_*` index serves in order. */
944
+ function isIndexedPivotSort(orderBy) {
945
+ const validSortKeys = orderBy ? Object.keys(orderBy).filter((k) => FIELD_NAME_PATTERN.test(k)) : [];
946
+ const primary = getPrimarySort(orderBy);
947
+ return validSortKeys.length <= 1 && (primary.field === "published_at" || primary.field === "created_at");
948
+ }
949
+ /**
950
+ * Resolve a taxonomy filter (`name` + one or more `slug`s, optionally scoped to
951
+ * `locale`) to the set of `translation_group`s the pivot stores in
952
+ * `content_taxonomies.taxonomy_id`. Exact terms only — no subtree expansion.
953
+ *
954
+ * Mirrors the meaning of the old EXISTS join (`t.name = ? AND t.slug IN (?)
955
+ * [AND t.locale = ?]`): a pivot row matches when its group has a term with that
956
+ * name/slug in the active locale. Resolving to explicit values (rather than an
957
+ * `IN (subquery)`) keeps the single-term case a plain equality on the pivot
958
+ * index, which is what gives the clean early-`LIMIT` seek.
959
+ *
960
+ * With `probeCollection`, `large` reports whether a resolved term has at least
961
+ * {@link LARGE_TERM_ASSIGNMENTS} pivot rows in that collection. The capped
962
+ * probe rides in this query; a query of its own would add a round trip to
963
+ * every listing.
964
+ */
965
+ async function resolveTermGroups(db, name, slugs, locale, probeCollection) {
966
+ let query = db.selectFrom("taxonomies").select("translation_group").distinct().where("name", "=", name).where("slug", "in", slugs).$if(probeCollection !== void 0, (qb) => qb.select((eb) => eb.selectFrom("content_taxonomies").select(sql`1`.as("hit")).where("content_taxonomies.collection", "=", probeCollection).whereRef("content_taxonomies.taxonomy_id", "=", "taxonomies.translation_group").limit(1).offset(LARGE_TERM_ASSIGNMENTS - 1).as("large")));
967
+ if (locale) query = query.where(localeMatches("locale", locale));
968
+ const rows = await query.execute();
969
+ const groups = /* @__PURE__ */ new Set();
970
+ let large = false;
971
+ for (const row of rows) {
972
+ if (row.translation_group) groups.add(row.translation_group);
973
+ if (row.large != null) large = true;
974
+ }
975
+ return {
976
+ groups: [...groups],
977
+ large
978
+ };
979
+ }
980
+ /** Equality (single) or `IN` (multiple) condition on a pivot group column. */
981
+ function pivotGroupCondition(ref, groups) {
982
+ if (groups.length === 1) return sql`${sql.ref(ref)} = ${groups[0]}`;
983
+ return sql`${sql.ref(ref)} IN (${sql.join(groups.map((g) => sql`${g}`))})`;
984
+ }
985
+ /** LIMIT/OFFSET fragment matching the loader's single-table variant. */
986
+ function buildPivotLimitOffset(db, fetchLimit, offset) {
987
+ if (fetchLimit != null && offset != null) return sql`LIMIT ${fetchLimit} OFFSET ${offset}`;
988
+ if (fetchLimit != null) return sql`LIMIT ${fetchLimit}`;
989
+ if (offset != null) return isPostgres(db) ? sql`OFFSET ${offset}` : sql`LIMIT -1 OFFSET ${offset}`;
990
+ return sql``;
991
+ }
992
+ /**
993
+ * Build the pivot-driven taxonomy listing query (#1834).
994
+ *
995
+ * Joins the term pivot to content translations through their shared
996
+ * translation_group. Content columns remain authoritative for locale,
997
+ * visibility, sorting, and cursor predicates.
998
+ *
999
+ * Two shapes:
1000
+ * - **Indexed sort** (`published_at`/`created_at`, single sort field): the
1001
+ * `LIMIT` lives in `picked`, which either sorts the term's candidates or,
1002
+ * with `driveFromContent`, walks the `ec_*` sort index and stops at `LIMIT`.
1003
+ * - **Temp-sort** (`updated_at` or any other field, or multi-field sort): no
1004
+ * pivot sort index applies, so `picked` collects the tagged candidate set and
1005
+ * the outer query sorts the joined rows. Bounded to tagged rows — no
1006
+ * `ec_*` full scan — but no early-`LIMIT`.
1007
+ */
1008
+ function buildTaxonomyPivotQuery(opts) {
1009
+ const { db, collection, tableName, groupSets, orderBy, cursor, locale, status, deletedIsNull, bylineGroups, fetchLimit, offset, driveFromContent = false } = opts;
1010
+ const primary = getPrimarySort(orderBy);
1011
+ const isIndexedSort = isIndexedPivotSort(orderBy);
1012
+ const dir = primary.direction === "asc" ? sql`ASC` : sql`DESC`;
1013
+ const firstGroups = groupSets[0] ?? [];
1014
+ const restGroups = groupSets.slice(1);
1015
+ const multiGroup = firstGroups.length > 1;
1016
+ const residual = restGroups.length > 0 ? sql`${sql.join(restGroups.map((g) => sql`AND EXISTS (
1017
+ SELECT 1 FROM content_taxonomies ct2
1018
+ WHERE ct2.collection = ${collection}
1019
+ AND ct2.entry_id = ct.entry_id
1020
+ AND ${pivotGroupCondition("ct2.taxonomy_id", g)}
1021
+ )`), sql` `)}` : sql``;
1022
+ const bylineCt = bylineGroups ? sql`AND EXISTS (
1023
+ SELECT 1 FROM _emdash_content_bylines cb
1024
+ WHERE cb.collection_slug = ${collection}
1025
+ AND cb.content_id = r.id
1026
+ AND cb.byline_id IN (${sql.join(bylineGroups.map((g) => sql`${g}`))})
1027
+ )` : sql``;
1028
+ const firstGroupCond = pivotGroupCondition("ct.taxonomy_id", firstGroups);
1029
+ const pivotContentJoin = isPostgres(db) || driveFromContent ? sql`JOIN` : sql`CROSS JOIN`;
1030
+ const { terms: termsSelect, bylines: bylinesSelect, bylinesExist: bylinesExistSelect } = foldedHydrationSelects(db, collection, "r");
1031
+ const booleanFieldsSelect = foldedBooleanFieldsSelect(db, collection);
1032
+ const deletedR = deletedIsNull ? sql`r.deleted_at IS NULL` : sql`r.deleted_at IS NOT NULL`;
1033
+ const statusR = status !== void 0 ? sql`AND ${buildStatusCondition(db, status, "r")}` : sql``;
1034
+ const localeR = locale ? sql`AND ${localeMatches("r.locale", locale)}` : sql``;
1035
+ if (isIndexedSort) {
1036
+ const sortRef = sql.ref(`r.${primary.field}`);
1037
+ const sortval = multiGroup ? sql`MAX(${sortRef})` : sortRef;
1038
+ const groupByClause = multiGroup ? sql`GROUP BY r.id` : sql``;
1039
+ let cursorClause = sql``;
1040
+ let havingClause = sql``;
1041
+ if (cursor) {
1042
+ const cond = sortCursorCondition(db, cursor, primary.field, primary.direction, sortval, sql.ref("r.id"));
1043
+ if (multiGroup) havingClause = sql`HAVING ${cond}`;
1044
+ else cursorClause = sql`AND ${cond}`;
1045
+ }
1046
+ const limitClause = buildPivotLimitOffset(db, fetchLimit, offset);
1047
+ return sql`
1048
+ WITH picked AS (
1049
+ SELECT r.id AS entry_id, ${sortval} AS sortval
1050
+ FROM content_taxonomies ct
1051
+ ${pivotContentJoin} ${sql.ref(tableName)} AS r ON r.translation_group = ct.entry_id
1052
+ WHERE ct.collection = ${collection}
1053
+ AND ${firstGroupCond}
1054
+ AND ${deletedR}
1055
+ ${statusR}
1056
+ ${localeR}
1057
+ ${residual}
1058
+ ${bylineCt}
1059
+ ${cursorClause}
1060
+ ${groupByClause}
1061
+ ${havingClause}
1062
+ ORDER BY sortval ${dir}, r.id ${dir}
1063
+ ${limitClause}
1064
+ )
1065
+ SELECT r.*, ${termsSelect}, ${bylinesSelect}, ${bylinesExistSelect}, ${booleanFieldsSelect}
1066
+ FROM picked JOIN ${sql.ref(tableName)} AS r ON r.id = picked.entry_id
1067
+ WHERE ${deletedR} ${statusR} ${localeR}
1068
+ ORDER BY picked.sortval ${dir}, picked.entry_id ${dir}
1069
+ `;
1070
+ }
1071
+ const orderByClause = buildOrderByClause(orderBy, "r");
1072
+ const cursorCond = cursor ? sql`AND ${buildCursorCondition(db, cursor, orderBy, "r")}` : sql``;
1073
+ const limitClause = buildPivotLimitOffset(db, fetchLimit, offset);
1074
+ return sql`
1075
+ WITH picked AS (
1076
+ SELECT DISTINCT r.id AS entry_id
1077
+ FROM content_taxonomies ct
1078
+ ${pivotContentJoin} ${sql.ref(tableName)} AS r ON r.translation_group = ct.entry_id
1079
+ WHERE ct.collection = ${collection}
1080
+ AND ${firstGroupCond}
1081
+ AND ${deletedR}
1082
+ ${statusR}
1083
+ ${localeR}
1084
+ ${residual}
1085
+ ${bylineCt}
1086
+ )
1087
+ SELECT r.*, ${termsSelect}, ${bylinesSelect}, ${bylinesExistSelect}, ${booleanFieldsSelect}
1088
+ FROM picked JOIN ${sql.ref(tableName)} AS r ON r.id = picked.entry_id
1089
+ WHERE ${deletedR} ${statusR} ${localeR}
1090
+ ${cursorCond}
1091
+ ${orderByClause}
1092
+ ${limitClause}
1093
+ `;
1094
+ }
1095
+ let dbInstance = null;
1096
+ /**
1097
+ * Get the database instance. Used by query wrapper functions and middleware.
1098
+ *
1099
+ * Checks the ALS request context first — if a per-request DB override is set
1100
+ * (e.g. by DO preview middleware), it takes precedence over the module-level
1101
+ * cached instance. This allows preview mode to route queries to an isolated
1102
+ * Durable Object database without modifying any calling code.
1103
+ *
1104
+ * Initializes the default database on first call using config from virtual module.
1105
+ */
1106
+ async function getDb() {
1107
+ await loadVirtualConfig();
1108
+ const ctx = getRequestContext();
1109
+ if (ctx?.db) return ctx.db;
1110
+ if (!dbInstance) {
1111
+ await loadVirtualModules();
1112
+ if (!virtualConfig?.database || typeof virtualCreateDialect !== "function") throw new Error("EmDash database not configured. Add database config to emdash() in astro.config.mjs");
1113
+ dbInstance = new Kysely({
1114
+ dialect: virtualCreateDialect(virtualConfig.database.config),
1115
+ log: kyselyLogOption()
1116
+ });
1117
+ }
1118
+ return dbInstance;
1119
+ }
1120
+ /**
1121
+ * Create an EmDash Live Collections loader
1122
+ *
1123
+ * This loader handles ALL content types in a single Astro collection.
1124
+ * Use `getEmDashCollection()` and `getEmDashEntry()` to query
1125
+ * specific content types.
1126
+ *
1127
+ * Database is configured in astro.config.mjs via the emdash() integration.
1128
+ *
1129
+ * @example
1130
+ * ```ts
1131
+ * // src/live.config.ts
1132
+ * import { defineLiveCollection } from "astro:content";
1133
+ * import { emdashLoader } from "emdash";
1134
+ *
1135
+ * export const collections = {
1136
+ * emdash: defineLiveCollection({
1137
+ * loader: emdashLoader(),
1138
+ * }),
1139
+ * };
1140
+ * ```
1141
+ */
1142
+ function emdashLoader() {
1143
+ return {
1144
+ name: "emdash",
1145
+ async loadCollection({ filter }) {
1146
+ const callerColumns = /* @__PURE__ */ new Set();
1147
+ try {
1148
+ const db = await getDb();
1149
+ const type = filter?.type;
1150
+ if (!type) return { error: /* @__PURE__ */ new Error("type filter is required. Use getEmDashCollection() instead of getLiveCollection() directly.") };
1151
+ const tableName = getTableName(type);
1152
+ const status = filter?.status || "published";
1153
+ const limit = filter?.limit;
1154
+ const cursor = filter?.cursor;
1155
+ const where = filter?.where;
1156
+ const orderBy = filter?.orderBy;
1157
+ const locale = filter?.locale;
1158
+ const fetchLimit = limit ? limit + 1 : void 0;
1159
+ const rawOffset = cursor ? void 0 : filter?.offset;
1160
+ const offset = typeof rawOffset === "number" && Number.isInteger(rawOffset) && rawOffset > 0 ? rawOffset : void 0;
1161
+ const cursorCondition = cursor ? buildCursorCondition(db, cursor, orderBy) : null;
1162
+ let result;
1163
+ const taxonomyFilters = [];
1164
+ let bylineFilter = null;
1165
+ const fieldFilters = {};
1166
+ if (where && Object.keys(where).length > 0) {
1167
+ const taxNames = await getTaxonomyNames(db, type);
1168
+ for (const [key, value] of Object.entries(where)) {
1169
+ if (value == null) continue;
1170
+ if (key === "byline") {
1171
+ if (isWhereRange(value)) {
1172
+ console.warn(`[emdash] where filter: range operators are not supported on "byline", ignored`);
1173
+ continue;
1174
+ }
1175
+ bylineFilter = { groups: Array.isArray(value) ? value : [value] };
1176
+ } else if (taxNames.has(key)) {
1177
+ if (isWhereRange(value)) {
1178
+ console.warn(`[emdash] where filter: range operators are not supported on taxonomy "${key}", ignored`);
1179
+ continue;
1180
+ }
1181
+ const slugs = Array.isArray(value) ? value : [value];
1182
+ taxonomyFilters.push({
1183
+ name: key,
1184
+ slugs
1185
+ });
1186
+ } else fieldFilters[key] = value;
1187
+ }
1188
+ }
1189
+ const storagelessKey = await findStoragelessQueryKey(type, [...Object.keys(fieldFilters), ...Object.keys(orderBy ?? {})]);
1190
+ if (storagelessKey) {
1191
+ const message = `Cannot filter or sort "${type}" by "${storagelessKey}": it is a reference field bound to a relation, and its links are not stored on the entry. Read them with getEmDashEntry(..., { references }) or getEmDashReferences().`;
1192
+ console.warn(`[emdash] where filter: ${message}`);
1193
+ return { error: new Error(message) };
1194
+ }
1195
+ for (const key of [...Object.keys(fieldFilters), ...Object.keys(orderBy ?? {})]) {
1196
+ if (!FIELD_NAME_PATTERN.test(key) || SYSTEM_QUERY_KEYS.has(key)) continue;
1197
+ const name = key.toLowerCase();
1198
+ callerColumns.add(name);
1199
+ callerColumns.add(`${tableName}.${name}`);
1200
+ if (taxonomyFilters.length > 0 && Object.keys(fieldFilters).length === 0) callerColumns.add(`r.${name}`);
1201
+ }
1202
+ if (bylineFilter && bylineFilter.groups.length === 0 || taxonomyFilters.some((f) => f.slugs.length === 0)) return {
1203
+ entries: [],
1204
+ cacheHint: { tags: [type] }
1205
+ };
1206
+ if (taxonomyFilters.length > 0 && Object.keys(fieldFilters).length === 0) {
1207
+ const groupSets = [];
1208
+ const probeCollection = !isPostgres(db) && taxonomyFilters.length === 1 && taxonomyFilters[0]?.slugs.length === 1 && fetchLimit != null && isIndexedPivotSort(orderBy) ? type : void 0;
1209
+ let driveFromContent = false;
1210
+ for (const taxFilter of taxonomyFilters) {
1211
+ const { groups, large } = await resolveTermGroups(db, taxFilter.name, taxFilter.slugs, locale, probeCollection);
1212
+ if (groups.length === 0) return {
1213
+ entries: [],
1214
+ cacheHint: { tags: [type] }
1215
+ };
1216
+ groupSets.push(groups);
1217
+ driveFromContent = large && groups.length === 1;
1218
+ }
1219
+ result = await buildTaxonomyPivotQuery({
1220
+ db,
1221
+ collection: type,
1222
+ tableName,
1223
+ groupSets,
1224
+ orderBy,
1225
+ cursor,
1226
+ locale,
1227
+ status,
1228
+ deletedIsNull: true,
1229
+ bylineGroups: bylineFilter ? bylineFilter.groups : null,
1230
+ fetchLimit,
1231
+ offset,
1232
+ driveFromContent
1233
+ }).execute(db);
1234
+ } else {
1235
+ const orderByClause = buildOrderByClause(orderBy);
1236
+ const statusCondition = buildStatusCondition(db, status);
1237
+ const localeFilter = locale ? sql`AND ${localeMatches("locale", locale)}` : sql``;
1238
+ const cursorCond = cursorCondition ? sql`AND ${cursorCondition}` : sql``;
1239
+ const fieldConds = buildFieldConditions(db, fieldFilters);
1240
+ const fieldCondsSQL = fieldConds.length > 0 ? sql`${sql.join(fieldConds, sql` AND `)}` : null;
1241
+ const taxonomyCond = taxonomyFilters.length > 0 ? sql`${sql.join(taxonomyFilters.map((f) => sql`AND EXISTS (
1242
+ SELECT 1 FROM content_taxonomies ct
1243
+ INNER JOIN taxonomies t ON t.translation_group = ct.taxonomy_id
1244
+ WHERE ct.collection = ${type}
1245
+ AND ct.entry_id = ${sql.ref(tableName)}.translation_group
1246
+ AND t.name = ${f.name}
1247
+ AND t.slug IN (${sql.join(f.slugs.map((s) => sql`${s}`))})
1248
+ ${locale ? sql`AND ${localeMatches("t.locale", locale)}` : sql``}
1249
+ )`), sql` `)}` : sql``;
1250
+ const bylineCond = bylineFilter ? sql`AND EXISTS (
1251
+ SELECT 1 FROM _emdash_content_bylines cb
1252
+ WHERE cb.collection_slug = ${type}
1253
+ AND cb.content_id = ${sql.ref(tableName)}.id
1254
+ AND cb.byline_id IN (${sql.join(bylineFilter.groups.map((g) => sql`${g}`))})
1255
+ )` : sql``;
1256
+ const { terms: termsSelect, bylines: bylinesSelect, bylinesExist: bylinesExistSelect } = foldedHydrationSelects(db, type, tableName);
1257
+ const booleanFieldsSelect = foldedBooleanFieldsSelect(db, type);
1258
+ let limitOffsetClause = sql``;
1259
+ if (fetchLimit != null && offset != null) limitOffsetClause = sql`LIMIT ${fetchLimit} OFFSET ${offset}`;
1260
+ else if (fetchLimit != null) limitOffsetClause = sql`LIMIT ${fetchLimit}`;
1261
+ else if (offset != null) limitOffsetClause = isPostgres(db) ? sql`OFFSET ${offset}` : sql`LIMIT -1 OFFSET ${offset}`;
1262
+ result = await sql`
1263
+ SELECT *, ${termsSelect}, ${bylinesSelect}, ${bylinesExistSelect}, ${booleanFieldsSelect} FROM ${sql.ref(tableName)}
1264
+ WHERE deleted_at IS NULL
1265
+ AND ${statusCondition}
1266
+ ${localeFilter}
1267
+ ${cursorCond}
1268
+ ${taxonomyCond}
1269
+ ${bylineCond}
1270
+ ${fieldCondsSQL ? sql`AND ${fieldCondsSQL}` : sql``}
1271
+ ${orderByClause}
1272
+ ${limitOffsetClause}
1273
+ `.execute(db);
1274
+ }
1275
+ const hasMore = limit ? result.rows.length > limit : false;
1276
+ const rows = hasMore ? result.rows.slice(0, limit) : result.rows;
1277
+ const primary = getPrimarySort(orderBy);
1278
+ const sortColumn = primary.field.includes(".") ? primary.field.split(".").pop() : primary.field;
1279
+ const booleanFields = parseFoldedBooleanFields(rows[0]);
1280
+ const drafts = await loadDraftRevisions(db, rows, filter?.draftRevisions);
1281
+ const entries = rows.map((row) => {
1282
+ const draft = drafts.get(rowStr(row, "id"));
1283
+ if (draft) {
1284
+ const revEntry = revisionEntry(row, draft, booleanFields, sortColumn);
1285
+ stashFolded(revEntry.data, row);
1286
+ return revEntry;
1287
+ }
1288
+ const id = entryIdForRow(row);
1289
+ const data = mapRowToData(row, booleanFields, sortColumn);
1290
+ stashFolded(data, row);
1291
+ return {
1292
+ id,
1293
+ slug: rowStr(row, "slug"),
1294
+ status: rowStr(row, "status", "draft"),
1295
+ data,
1296
+ cacheHint: {
1297
+ tags: [rowStr(row, "id")],
1298
+ lastModified: row.updated_at ? new Date(rowStr(row, "updated_at")) : void 0
1299
+ }
1300
+ };
1301
+ });
1302
+ let nextCursor;
1303
+ if (hasMore && rows.length > 0) {
1304
+ const lastRow = rows.at(-1);
1305
+ nextCursor = encodeSortCursor(sortColumn, lastRow[sortColumn], String(lastRow.id));
1306
+ }
1307
+ let collectionLastModified;
1308
+ for (const row of rows) if (row.updated_at) {
1309
+ const d = new Date(rowStr(row, "updated_at"));
1310
+ if (!collectionLastModified || d > collectionLastModified) collectionLastModified = d;
1311
+ }
1312
+ return {
1313
+ entries,
1314
+ nextCursor,
1315
+ cacheHint: {
1316
+ tags: [type],
1317
+ lastModified: collectionLastModified
1318
+ }
1319
+ };
1320
+ } catch (error) {
1321
+ const message = error instanceof Error ? error.message : String(error);
1322
+ if (isMissingTableError(error)) return { entries: [] };
1323
+ const missingColumn = getMissingColumnIdentifier(error);
1324
+ if (missingColumn && callerColumns.has(missingColumn)) {
1325
+ console.warn(`[emdash] where filter: ${message}`);
1326
+ return { entries: [] };
1327
+ }
1328
+ return { error: /* @__PURE__ */ new Error(`Failed to load collection: ${message}`) };
1329
+ }
1330
+ },
1331
+ async loadEntry({ filter }) {
1332
+ try {
1333
+ const db = await getDb();
1334
+ const type = filter?.type;
1335
+ const id = filter?.id;
1336
+ if (!type || !id) return { error: /* @__PURE__ */ new Error("type and id filters are required. Use getEmDashEntry() instead of getLiveEntry() directly.") };
1337
+ const tableName = getTableName(type);
1338
+ const locale = filter?.locale;
1339
+ const { terms: termsSelect, bylines: bylinesSelect, bylinesExist: bylinesExistSelect } = foldedHydrationSelects(db, type, "c");
1340
+ const seoSelect = foldedSeoSelect(db, type, "c");
1341
+ const booleanFieldsSelect = foldedBooleanFieldsSelect(db, type);
1342
+ const metadataSelect = sql`(
1343
+ SELECT ${isPostgres(db) ? sql`json_build_object` : sql`json_object`}(
1344
+ 'bylinesExist', _emdash_bylines_exist,
1345
+ 'booleanFields', _emdash_boolean_fields
1346
+ )
1347
+ FROM (SELECT ${bylinesExistSelect}, ${booleanFieldsSelect}) AS metadata
1348
+ ) AS _emdash_entry_metadata`;
1349
+ const slugVisibility = filter?.publishedOnly ? sql`AND c.status = ${"published"}` : sql``;
1350
+ const row = (locale ? await sql`
1351
+ SELECT c.*, ${seoSelect}, ${termsSelect}, ${bylinesSelect}, ${metadataSelect}
1352
+ FROM ${sql.ref(tableName)} AS c
1353
+ WHERE c.deleted_at IS NULL
1354
+ AND ((c.slug = ${id} AND ${localeMatches("c.locale", locale)} ${slugVisibility}) OR c.id = ${id})
1355
+ ORDER BY CASE WHEN c.id = ${id} THEN 0 ELSE 1 END, ${localeOrder("c.locale", locale)}, c.id
1356
+ LIMIT 1
1357
+ `.execute(db) : await sql`
1358
+ SELECT c.*, ${seoSelect}, ${termsSelect}, ${bylinesSelect}, ${metadataSelect}
1359
+ FROM ${sql.ref(tableName)} AS c
1360
+ WHERE c.deleted_at IS NULL
1361
+ AND ((c.slug = ${id} ${slugVisibility}) OR c.id = ${id})
1362
+ LIMIT 1
1363
+ `.execute(db)).rows[0];
1364
+ if (!row) return;
1365
+ const rawMetadata = row._emdash_entry_metadata;
1366
+ const metadata = typeof rawMetadata === "string" ? JSON.parse(rawMetadata) : rawMetadata;
1367
+ delete row._emdash_entry_metadata;
1368
+ if (isPlainObject(metadata)) {
1369
+ row._emdash_bylines_exist = metadata.bylinesExist;
1370
+ row[BOOLEAN_FIELDS_FOLDED_COLUMN] = metadata.booleanFields;
1371
+ }
1372
+ expandFoldedSeo(row);
1373
+ const entryId = entryIdForRow(row);
1374
+ const revisionId = filter?.revisionId;
1375
+ if (revisionId) {
1376
+ const revData = (await sql`
1377
+ SELECT data FROM revisions
1378
+ WHERE id = ${revisionId}
1379
+ LIMIT 1
1380
+ `.execute(db)).rows[0];
1381
+ if (revData) {
1382
+ const revEntry = revisionEntry(row, JSON.parse(revData.data), parseFoldedBooleanFields(row));
1383
+ const revSeo = extractSeo(row);
1384
+ if (revSeo) {
1385
+ revEntry.data.seo = revSeo;
1386
+ primeSeoPanel(type, rowStr(row, "id"), revSeo);
1387
+ }
1388
+ stashFolded(revEntry.data, row);
1389
+ return revEntry;
1390
+ }
1391
+ }
1392
+ const entryData = mapRowToData(row, parseFoldedBooleanFields(row));
1393
+ const entrySeo = extractSeo(row);
1394
+ if (entrySeo) {
1395
+ entryData.seo = entrySeo;
1396
+ primeSeoPanel(type, rowStr(row, "id"), entrySeo);
1397
+ }
1398
+ stashFolded(entryData, row);
1399
+ return {
1400
+ id: entryId,
1401
+ slug: rowStr(row, "slug"),
1402
+ status: rowStr(row, "status", "draft"),
1403
+ data: entryData,
1404
+ cacheHint: {
1405
+ tags: [rowStr(row, "id")],
1406
+ lastModified: row.updated_at ? new Date(rowStr(row, "updated_at")) : void 0
1407
+ }
1408
+ };
1409
+ } catch (error) {
1410
+ if (isMissingTableError(error)) return;
1411
+ const message = error instanceof Error ? error.message : String(error);
1412
+ return { error: /* @__PURE__ */ new Error(`Failed to load entry: ${message}`) };
1413
+ }
1414
+ }
1415
+ };
1416
+ }
1417
+
1418
+ //#endregion
1419
+ export { creditsFromFoldedBylines as a, getDb as c, resetTaxonomyNamesCache as d, primeSeoPanel as f, selectTaxonomyDefs as g, saveTaxonomyStructure as h, FOLDED_TERMS as i, loadEntriesByGroups as l, parseTaxonomyCollections as m, FOLDED_BYLINES as n, emdashLoader as o, findTaxonomyStructure as p, FOLDED_BYLINES_EXIST as r, encodeSortCursor as s, CURSOR_RAW_VALUES as t, loader_exports as u };
1420
+ //# sourceMappingURL=loader-D4w4XE7q.mjs.map