emdash 0.40.0 → 0.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1258) hide show
  1. package/dist/action-token-CbKDcPJi.mjs +26 -0
  2. package/dist/action-token-CbKDcPJi.mjs.map +1 -0
  3. package/dist/activation-PtniBLt9.mjs +382 -0
  4. package/dist/activation-PtniBLt9.mjs.map +1 -0
  5. package/dist/adapters-C_Tf5x90.d.mts +171 -0
  6. package/dist/adapters-C_Tf5x90.d.mts.map +1 -0
  7. package/dist/allowed-origins-U1z4TdEZ.mjs +116 -0
  8. package/dist/allowed-origins-U1z4TdEZ.mjs.map +1 -0
  9. package/dist/api/route-utils.d.mts +4 -4
  10. package/dist/api/route-utils.mjs +46 -45
  11. package/dist/api/route-utils.mjs.map +1 -1
  12. package/dist/api/schemas/index.d.mts +2 -2
  13. package/dist/api/schemas/index.mjs +10 -10
  14. package/dist/api-CXwQkV_m.mjs +5122 -0
  15. package/dist/api-CXwQkV_m.mjs.map +1 -0
  16. package/dist/api-tokens-89WlohEN.mjs +166 -0
  17. package/dist/api-tokens-89WlohEN.mjs.map +1 -0
  18. package/dist/apply-Do3KNnUk.mjs +1659 -0
  19. package/dist/apply-Do3KNnUk.mjs.map +1 -0
  20. package/dist/approvals-CAX9Yw33.mjs +460 -0
  21. package/dist/approvals-CAX9Yw33.mjs.map +1 -0
  22. package/dist/artifact-fetch-B9W4CEST.mjs +659 -0
  23. package/dist/artifact-fetch-B9W4CEST.mjs.map +1 -0
  24. package/dist/astro/index.d.mts +14 -14
  25. package/dist/astro/index.mjs +26 -30
  26. package/dist/astro/index.mjs.map +1 -1
  27. package/dist/astro/middleware/auth.d.mts +12 -12
  28. package/dist/astro/middleware/auth.mjs +10 -10
  29. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  30. package/dist/astro/middleware/redirect.mjs +7 -7
  31. package/dist/astro/middleware/request-context.mjs +3 -3
  32. package/dist/astro/middleware/setup.mjs +1 -1
  33. package/dist/astro/middleware.d.mts +12 -12
  34. package/dist/astro/middleware.d.mts.map +1 -1
  35. package/dist/astro/middleware.mjs +110 -106
  36. package/dist/astro/middleware.mjs.map +1 -1
  37. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
  38. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
  39. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
  40. package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
  41. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +7 -7
  42. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +17 -17
  43. package/dist/astro/routes/api/admin/byline-fields/index.mjs +17 -17
  44. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +17 -17
  45. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +23 -23
  46. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +23 -23
  47. package/dist/astro/routes/api/admin/bylines/index.mjs +23 -23
  48. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
  49. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
  50. package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
  51. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
  52. package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
  53. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  54. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  55. package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
  56. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +22 -22
  57. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +22 -22
  58. package/dist/astro/routes/api/admin/media-usage/progress.mjs +25 -25
  59. package/dist/astro/routes/api/admin/media-usage/repair.mjs +31 -31
  60. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +22 -22
  61. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +22 -22
  62. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  63. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  64. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
  65. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
  66. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -68
  67. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  68. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
  69. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -67
  70. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  71. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +72 -68
  72. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  73. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +82 -78
  74. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  75. package/dist/astro/routes/api/admin/plugins/index.mjs +72 -68
  76. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  77. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +5 -5
  78. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -67
  79. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +81 -77
  81. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  82. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -67
  83. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +72 -68
  85. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +83 -79
  87. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -9
  89. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +74 -70
  90. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
  92. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -68
  93. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -67
  95. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
  97. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -67
  98. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  99. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +5 -5
  100. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -67
  101. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
  103. package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +40 -40
  104. package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +40 -40
  105. package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +42 -42
  106. package/dist/astro/routes/api/admin/transfer/capabilities.mjs +42 -42
  107. package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +42 -42
  108. package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +43 -43
  109. package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +43 -43
  110. package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +42 -42
  111. package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +43 -43
  112. package/dist/astro/routes/api/admin/transfer/exports/index.mjs +44 -44
  113. package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +42 -42
  114. package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +42 -42
  115. package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +44 -44
  116. package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +42 -42
  117. package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +44 -44
  118. package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +42 -42
  119. package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +42 -42
  120. package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +44 -44
  121. package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +42 -42
  122. package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +42 -42
  123. package/dist/astro/routes/api/admin/transfer/imports/index.mjs +44 -44
  124. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
  125. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
  126. package/dist/astro/routes/api/admin/users/_id_/index.mjs +15 -15
  127. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
  128. package/dist/astro/routes/api/admin/users/index.mjs +14 -14
  129. package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
  130. package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
  131. package/dist/astro/routes/api/auth/invite/complete.mjs +18 -18
  132. package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
  133. package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
  134. package/dist/astro/routes/api/auth/logout.mjs +5 -5
  135. package/dist/astro/routes/api/auth/magic-link/send.mjs +18 -18
  136. package/dist/astro/routes/api/auth/magic-link/verify.mjs +14 -14
  137. package/dist/astro/routes/api/auth/me.mjs +15 -15
  138. package/dist/astro/routes/api/auth/mode.mjs +5 -5
  139. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  140. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  141. package/dist/astro/routes/api/auth/passkey/_id_.mjs +14 -14
  142. package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
  143. package/dist/astro/routes/api/auth/passkey/options.mjs +19 -19
  144. package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
  145. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
  146. package/dist/astro/routes/api/auth/passkey/verify.mjs +18 -18
  147. package/dist/astro/routes/api/auth/signup/complete.mjs +18 -18
  148. package/dist/astro/routes/api/auth/signup/request.mjs +17 -17
  149. package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
  150. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
  151. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
  152. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
  153. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +17 -17
  154. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  155. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +17 -17
  156. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
  157. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
  158. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +31 -31
  159. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +17 -17
  160. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts +1 -2
  161. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -1
  162. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +42 -53
  163. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  164. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -29
  165. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  166. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  167. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
  168. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +17 -17
  169. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +25 -24
  170. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  171. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
  172. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +17 -17
  173. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  174. package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -18
  175. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  176. package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
  177. package/dist/astro/routes/api/content/_collection_/index.mjs +15 -15
  178. package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
  179. package/dist/astro/routes/api/dashboard.mjs +10 -9
  180. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  181. package/dist/astro/routes/api/dev/emails.mjs +5 -5
  182. package/dist/astro/routes/api/health.mjs +6 -6
  183. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  184. package/dist/astro/routes/api/import/probe.mjs +23 -23
  185. package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
  186. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
  187. package/dist/astro/routes/api/import/wordpress/execute.mjs +16 -16
  188. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
  189. package/dist/astro/routes/api/import/wordpress/media.mjs +19 -19
  190. package/dist/astro/routes/api/import/wordpress/prepare.mjs +18 -18
  191. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
  192. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +28 -28
  193. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  194. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +23 -23
  195. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
  196. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +34 -34
  197. package/dist/astro/routes/api/manifest.mjs +6 -6
  198. package/dist/astro/routes/api/mcp.mjs +98 -118
  199. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  200. package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -19
  201. package/dist/astro/routes/api/media/_id_/replace.mjs +16 -16
  202. package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
  203. package/dist/astro/routes/api/media/_id_/usage.mjs +33 -33
  204. package/dist/astro/routes/api/media/_id_.mjs +31 -31
  205. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
  206. package/dist/astro/routes/api/media/file/_...key_.mjs +9 -9
  207. package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
  208. package/dist/astro/routes/api/media/folders/index.mjs +16 -16
  209. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
  210. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
  211. package/dist/astro/routes/api/media/providers/index.mjs +5 -5
  212. package/dist/astro/routes/api/media/upload-url.mjs +18 -18
  213. package/dist/astro/routes/api/media.mjs +35 -35
  214. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +17 -17
  215. package/dist/astro/routes/api/menus/_name_/items.mjs +17 -17
  216. package/dist/astro/routes/api/menus/_name_/reorder.mjs +17 -17
  217. package/dist/astro/routes/api/menus/_name_/translations.mjs +17 -17
  218. package/dist/astro/routes/api/menus/_name_.mjs +17 -17
  219. package/dist/astro/routes/api/menus/index.mjs +17 -17
  220. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  221. package/dist/astro/routes/api/oauth/device/authorize.d.mts +2 -1
  222. package/dist/astro/routes/api/oauth/device/authorize.d.mts.map +1 -1
  223. package/dist/astro/routes/api/oauth/device/authorize.mjs +23 -9
  224. package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
  225. package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
  226. package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
  227. package/dist/astro/routes/api/oauth/register.mjs +5 -5
  228. package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
  229. package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
  230. package/dist/astro/routes/api/oauth/token.mjs +8 -8
  231. package/dist/astro/routes/api/openapi.json.mjs +20 -20
  232. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
  233. package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
  234. package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
  235. package/dist/astro/routes/api/redirects/_id_.mjs +19 -19
  236. package/dist/astro/routes/api/redirects/index.mjs +19 -19
  237. package/dist/astro/routes/api/relations/_id_/index.mjs +34 -29
  238. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  239. package/dist/astro/routes/api/relations/index.mjs +36 -31
  240. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  241. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
  242. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
  243. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +71 -67
  244. package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
  245. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +71 -67
  246. package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
  247. package/dist/astro/routes/api/schema/block-types/index.mjs +71 -67
  248. package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
  249. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +73 -69
  250. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  251. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +71 -67
  252. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  253. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +71 -67
  254. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  255. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -67
  256. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  257. package/dist/astro/routes/api/schema/collections/index.mjs +71 -67
  258. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  259. package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -67
  260. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  261. package/dist/astro/routes/api/schema/index.mjs +16 -16
  262. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -67
  263. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  264. package/dist/astro/routes/api/schema/orphans/index.mjs +71 -67
  265. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  266. package/dist/astro/routes/api/search/enable.mjs +19 -19
  267. package/dist/astro/routes/api/search/index.mjs +18 -18
  268. package/dist/astro/routes/api/search/rebuild.mjs +19 -19
  269. package/dist/astro/routes/api/search/stats.mjs +9 -9
  270. package/dist/astro/routes/api/search/suggest.mjs +18 -18
  271. package/dist/astro/routes/api/sections/_slug_.mjs +18 -18
  272. package/dist/astro/routes/api/sections/index.mjs +18 -18
  273. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
  274. package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
  275. package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
  276. package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
  277. package/dist/astro/routes/api/settings/email.mjs +6 -6
  278. package/dist/astro/routes/api/settings.mjs +21 -21
  279. package/dist/astro/routes/api/setup/admin-verify.mjs +19 -19
  280. package/dist/astro/routes/api/setup/admin.mjs +18 -18
  281. package/dist/astro/routes/api/setup/dev-bypass.mjs +45 -39
  282. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  283. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  284. package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
  285. package/dist/astro/routes/api/setup/index.mjs +80 -49
  286. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  287. package/dist/astro/routes/api/setup/status.mjs +6 -6
  288. package/dist/astro/routes/api/snapshot.mjs +9 -9
  289. package/dist/astro/routes/api/snapshot.mjs.map +1 -1
  290. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -23
  291. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -23
  292. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +23 -23
  293. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -23
  294. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -22
  295. package/dist/astro/routes/api/taxonomies/_name_.mjs +23 -23
  296. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +36 -35
  297. package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
  298. package/dist/astro/routes/api/taxonomies/index.mjs +23 -23
  299. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  300. package/dist/astro/routes/api/typegen.mjs +8 -8
  301. package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
  302. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +19 -19
  303. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
  304. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  305. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  306. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  307. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +16 -16
  308. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +19 -19
  309. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +19 -19
  310. package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
  311. package/dist/astro/routes/api/widget-areas/index.mjs +19 -19
  312. package/dist/astro/routes/api/widget-components.mjs +5 -5
  313. package/dist/astro/routes/robots.txt.mjs +6 -6
  314. package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
  315. package/dist/astro/routes/sitemap.xml.mjs +7 -7
  316. package/dist/astro/types.d.mts +28 -18
  317. package/dist/astro/types.d.mts.map +1 -1
  318. package/dist/audit-CrgmE9LE.mjs +127 -0
  319. package/dist/audit-CrgmE9LE.mjs.map +1 -0
  320. package/dist/auth/providers/github.d.mts +1 -1
  321. package/dist/auth/providers/google.d.mts +1 -1
  322. package/dist/authoritative-records-C2YzIdbu.mjs +5172 -0
  323. package/dist/authoritative-records-C2YzIdbu.mjs.map +1 -0
  324. package/dist/authorize-WgdKF8QY.mjs +49 -0
  325. package/dist/authorize-WgdKF8QY.mjs.map +1 -0
  326. package/dist/backup-Ck8_lMO3.mjs +246 -0
  327. package/dist/backup-Ck8_lMO3.mjs.map +1 -0
  328. package/dist/block-types-BQ90asVI.mjs +132 -0
  329. package/dist/block-types-BQ90asVI.mjs.map +1 -0
  330. package/dist/block-values-ACFqgB1D.mjs +175 -0
  331. package/dist/block-values-ACFqgB1D.mjs.map +1 -0
  332. package/dist/bundle-Db1iNMv_.mjs +667 -0
  333. package/dist/bundle-Db1iNMv_.mjs.map +1 -0
  334. package/dist/byline-BayaYGoj.mjs +909 -0
  335. package/dist/byline-BayaYGoj.mjs.map +1 -0
  336. package/dist/byline-fields-B8HH-35f.mjs +254 -0
  337. package/dist/byline-fields-B8HH-35f.mjs.map +1 -0
  338. package/dist/byline-fields-hMPjf6Eu.mjs +123 -0
  339. package/dist/byline-fields-hMPjf6Eu.mjs.map +1 -0
  340. package/dist/byline-registry-B_EK_TQf.mjs +406 -0
  341. package/dist/byline-registry-B_EK_TQf.mjs.map +1 -0
  342. package/dist/bylines-DFAaFXWi.mjs +214 -0
  343. package/dist/bylines-DFAaFXWi.mjs.map +1 -0
  344. package/dist/bylines-DkIxUxmr.mjs +232 -0
  345. package/dist/bylines-DkIxUxmr.mjs.map +1 -0
  346. package/dist/cache-DkvhQ8XE.mjs +108 -0
  347. package/dist/cache-DkvhQ8XE.mjs.map +1 -0
  348. package/dist/canonical-CcSuuTlH.mjs +174 -0
  349. package/dist/canonical-CcSuuTlH.mjs.map +1 -0
  350. package/dist/capture-triggers-DJEoOTOq.mjs +362 -0
  351. package/dist/capture-triggers-DJEoOTOq.mjs.map +1 -0
  352. package/dist/challenge-store-CvBl81AQ.mjs +51 -0
  353. package/dist/challenge-store-CvBl81AQ.mjs.map +1 -0
  354. package/dist/checksum-CClweQzI.mjs +162 -0
  355. package/dist/checksum-CClweQzI.mjs.map +1 -0
  356. package/dist/chrome-tags-D5caJwwp.mjs +24 -0
  357. package/dist/chrome-tags-D5caJwwp.mjs.map +1 -0
  358. package/dist/chunks-DwBaj8aT.mjs +25 -0
  359. package/dist/chunks-DwBaj8aT.mjs.map +1 -0
  360. package/dist/cli/index.mjs +374 -761
  361. package/dist/cli/index.mjs.map +1 -1
  362. package/dist/client/cf-access.d.mts +1 -1
  363. package/dist/client/index.d.mts +18 -18
  364. package/dist/client/index.mjs +2 -2
  365. package/dist/collection-deletion-CLCdXsnV.mjs +436 -0
  366. package/dist/collection-deletion-CLCdXsnV.mjs.map +1 -0
  367. package/dist/collection-deletion-processor-hNw8x01F.mjs +217 -0
  368. package/dist/collection-deletion-processor-hNw8x01F.mjs.map +1 -0
  369. package/dist/collection-slugs-cache-CUuiduLq.mjs +85 -0
  370. package/dist/collection-slugs-cache-CUuiduLq.mjs.map +1 -0
  371. package/dist/comment-D2uvL63j.mjs +313 -0
  372. package/dist/comment-D2uvL63j.mjs.map +1 -0
  373. package/dist/comment-reaction-DevUuzg4.mjs +85 -0
  374. package/dist/comment-reaction-DevUuzg4.mjs.map +1 -0
  375. package/dist/comments-Cq0s7_hO.mjs +195 -0
  376. package/dist/comments-Cq0s7_hO.mjs.map +1 -0
  377. package/dist/comments-M4EDYAHw.mjs +99 -0
  378. package/dist/comments-M4EDYAHw.mjs.map +1 -0
  379. package/dist/components-CuIGwXMs.mjs +108 -0
  380. package/dist/components-CuIGwXMs.mjs.map +1 -0
  381. package/dist/config-52Ea5IWt.d.mts +39 -0
  382. package/dist/config-52Ea5IWt.d.mts.map +1 -0
  383. package/dist/config-CCz3xOLc.mjs +242 -0
  384. package/dist/config-CCz3xOLc.mjs.map +1 -0
  385. package/dist/config-D3d5Qudq.d.mts +6669 -0
  386. package/dist/config-D3d5Qudq.d.mts.map +1 -0
  387. package/dist/content-CbnufDsM.mjs +2018 -0
  388. package/dist/content-CbnufDsM.mjs.map +1 -0
  389. package/dist/content-list-query-D_7B1FE5.d.mts +26 -0
  390. package/dist/content-list-query-D_7B1FE5.d.mts.map +1 -0
  391. package/dist/content-policy-CYu6K1KB.mjs +46 -0
  392. package/dist/content-policy-CYu6K1KB.mjs.map +1 -0
  393. package/dist/content-repair-DlDUgFGp.mjs +442 -0
  394. package/dist/content-repair-DlDUgFGp.mjs.map +1 -0
  395. package/dist/context-CGQLA1-a.mjs +1922 -0
  396. package/dist/context-CGQLA1-a.mjs.map +1 -0
  397. package/dist/cron-c4D5C5Fx.mjs +284 -0
  398. package/dist/cron-c4D5C5Fx.mjs.map +1 -0
  399. package/dist/dashboard-CBq9kmOn.mjs +151 -0
  400. package/dist/dashboard-CBq9kmOn.mjs.map +1 -0
  401. package/dist/db/index.d.mts +3 -3
  402. package/dist/db/index.mjs +1 -1
  403. package/dist/db/libsql-migrations.d.mts +1 -1
  404. package/dist/db/libsql-migrations.mjs +4 -4
  405. package/dist/db/libsql.d.mts +1 -1
  406. package/dist/db/postgres-migrations.d.mts +1 -1
  407. package/dist/db/postgres-migrations.mjs +4 -4
  408. package/dist/db/postgres.d.mts +1 -1
  409. package/dist/db/sqlite-migrations.d.mts +1 -1
  410. package/dist/db/sqlite-migrations.mjs +4 -4
  411. package/dist/db/sqlite.d.mts +1 -1
  412. package/dist/db/sqlite.mjs +1 -1
  413. package/dist/default-DPsys51U.mjs +81 -0
  414. package/dist/default-DPsys51U.mjs.map +1 -0
  415. package/dist/deferred-tasks-CZ7rzBdo.d.mts +9 -0
  416. package/dist/deferred-tasks-CZ7rzBdo.d.mts.map +1 -0
  417. package/dist/dev-typegen-HRxwLRcT.mjs +29 -0
  418. package/dist/dev-typegen-HRxwLRcT.mjs.map +1 -0
  419. package/dist/device-flow-OcSqE9uY.mjs +521 -0
  420. package/dist/device-flow-OcSqE9uY.mjs.map +1 -0
  421. package/dist/digest-DVZ--cE9.mjs +194 -0
  422. package/dist/digest-DVZ--cE9.mjs.map +1 -0
  423. package/dist/direct-executor-DyjAqkpT.mjs +104 -0
  424. package/dist/direct-executor-DyjAqkpT.mjs.map +1 -0
  425. package/dist/dist-FPR93_xf.mjs +810 -0
  426. package/dist/dist-FPR93_xf.mjs.map +1 -0
  427. package/dist/email-console-DyQIgEnz.mjs +50 -0
  428. package/dist/email-console-DyQIgEnz.mjs.map +1 -0
  429. package/dist/email-locale-BYb16rVd.mjs +25 -0
  430. package/dist/email-locale-BYb16rVd.mjs.map +1 -0
  431. package/dist/emdash-runtime-CrzxJFmF.mjs +4214 -0
  432. package/dist/emdash-runtime-CrzxJFmF.mjs.map +1 -0
  433. package/dist/enrich-DBtCncE2.mjs +194 -0
  434. package/dist/enrich-DBtCncE2.mjs.map +1 -0
  435. package/dist/entry-lock-BN5y4YbO.d.mts +4481 -0
  436. package/dist/entry-lock-BN5y4YbO.d.mts.map +1 -0
  437. package/dist/entry-lock-BaRBHCsH.mjs +1173 -0
  438. package/dist/entry-lock-BaRBHCsH.mjs.map +1 -0
  439. package/dist/entry-lock-C6NcnZPV.mjs +163 -0
  440. package/dist/entry-lock-C6NcnZPV.mjs.map +1 -0
  441. package/dist/entry-locks-BTyQLdbC.mjs +167 -0
  442. package/dist/entry-locks-BTyQLdbC.mjs.map +1 -0
  443. package/dist/error-BfsNNrIE.mjs +90 -0
  444. package/dist/error-BfsNNrIE.mjs.map +1 -0
  445. package/dist/errors-BN1QAnEY.mjs +460 -0
  446. package/dist/errors-BN1QAnEY.mjs.map +1 -0
  447. package/dist/errors-Bt3goF8I.mjs +120 -0
  448. package/dist/errors-Bt3goF8I.mjs.map +1 -0
  449. package/dist/escape-BveidMa2.mjs +9 -0
  450. package/dist/escape-BveidMa2.mjs.map +1 -0
  451. package/dist/fence-Bb_IbCxI.mjs +162 -0
  452. package/dist/fence-Bb_IbCxI.mjs.map +1 -0
  453. package/dist/field-defs-cache-CsZctvbu.mjs +77 -0
  454. package/dist/field-defs-cache-CsZctvbu.mjs.map +1 -0
  455. package/dist/field-map-6m9rF49t.mjs +83 -0
  456. package/dist/field-map-6m9rF49t.mjs.map +1 -0
  457. package/dist/focal-point-CZ3d1wK5.mjs +23 -0
  458. package/dist/focal-point-CZ3d1wK5.mjs.map +1 -0
  459. package/dist/fts-manager-CCaZTp8y.mjs +443 -0
  460. package/dist/fts-manager-CCaZTp8y.mjs.map +1 -0
  461. package/dist/gc-xowRjczI.mjs +75 -0
  462. package/dist/gc-xowRjczI.mjs.map +1 -0
  463. package/dist/hash-COVK27Pc.mjs +37 -0
  464. package/dist/hash-COVK27Pc.mjs.map +1 -0
  465. package/dist/hook-result-CYSk0XFe.d.mts +31 -0
  466. package/dist/hook-result-CYSk0XFe.d.mts.map +1 -0
  467. package/dist/hreflang-CChPV7jx.mjs +105 -0
  468. package/dist/hreflang-CChPV7jx.mjs.map +1 -0
  469. package/dist/hreflang-DRslq3QI.d.mts +50 -0
  470. package/dist/hreflang-DRslq3QI.d.mts.map +1 -0
  471. package/dist/http-route-dispatch-CAdp2onn.mjs +339 -0
  472. package/dist/http-route-dispatch-CAdp2onn.mjs.map +1 -0
  473. package/dist/identity-NVTOOQyq.mjs +35 -0
  474. package/dist/identity-NVTOOQyq.mjs.map +1 -0
  475. package/dist/import-wpSO2N0x.mjs +2020 -0
  476. package/dist/import-wpSO2N0x.mjs.map +1 -0
  477. package/dist/index-CDs2wq4X.d.mts +623 -0
  478. package/dist/index-CDs2wq4X.d.mts.map +1 -0
  479. package/dist/index.d.mts +24 -24
  480. package/dist/index.mjs +103 -101
  481. package/dist/install-finalization-D9R9R-W8.mjs +58 -0
  482. package/dist/install-finalization-D9R9R-W8.mjs.map +1 -0
  483. package/dist/keys-Bck6LBfF.mjs +61 -0
  484. package/dist/keys-Bck6LBfF.mjs.map +1 -0
  485. package/dist/kinds-CYmRESWj.mjs +974 -0
  486. package/dist/kinds-CYmRESWj.mjs.map +1 -0
  487. package/dist/lifecycle-C815ZQfV.mjs +25 -0
  488. package/dist/lifecycle-C815ZQfV.mjs.map +1 -0
  489. package/dist/load-D99axixL.mjs +28 -0
  490. package/dist/load-D99axixL.mjs.map +1 -0
  491. package/dist/loader-CrRPfkHS.mjs +1197 -0
  492. package/dist/loader-CrRPfkHS.mjs.map +1 -0
  493. package/dist/loops-DMKlygqX.mjs +203 -0
  494. package/dist/loops-DMKlygqX.mjs.map +1 -0
  495. package/dist/manifest-builder-BQzCHNgB.mjs +189 -0
  496. package/dist/manifest-builder-BQzCHNgB.mjs.map +1 -0
  497. package/dist/manifest-schema-Ci2gmd0u.mjs +492 -0
  498. package/dist/manifest-schema-Ci2gmd0u.mjs.map +1 -0
  499. package/dist/media/image-endpoint.mjs +1 -1
  500. package/dist/media/index.d.mts +1 -1
  501. package/dist/media/index.mjs +4 -4
  502. package/dist/media/local-runtime.d.mts +14 -14
  503. package/dist/media/local-runtime.mjs +6 -6
  504. package/dist/media-BUQePMxP.mjs +373 -0
  505. package/dist/media-BUQePMxP.mjs.map +1 -0
  506. package/dist/media-DH8ibNlY.mjs +294 -0
  507. package/dist/media-DH8ibNlY.mjs.map +1 -0
  508. package/dist/media-OEIQ3bVc.mjs +408 -0
  509. package/dist/media-OEIQ3bVc.mjs.map +1 -0
  510. package/dist/media-allowlist-pYtaBA95.mjs +44 -0
  511. package/dist/media-allowlist-pYtaBA95.mjs.map +1 -0
  512. package/dist/media-folders-Bf8_s4de.mjs +210 -0
  513. package/dist/media-folders-Bf8_s4de.mjs.map +1 -0
  514. package/dist/media-url-C6klEuNd.mjs +43 -0
  515. package/dist/media-url-C6klEuNd.mjs.map +1 -0
  516. package/dist/media-usage-D7Y64m6v.mjs +1629 -0
  517. package/dist/media-usage-D7Y64m6v.mjs.map +1 -0
  518. package/dist/media-usage-activation-DrqbmgLA.mjs +78 -0
  519. package/dist/media-usage-activation-DrqbmgLA.mjs.map +1 -0
  520. package/dist/media-usage-work-DommYhYA.mjs +152 -0
  521. package/dist/media-usage-work-DommYhYA.mjs.map +1 -0
  522. package/dist/media-usage-work-HU63hNDu.mjs +586 -0
  523. package/dist/media-usage-work-HU63hNDu.mjs.map +1 -0
  524. package/dist/menus-BQfusWEC.mjs +3608 -0
  525. package/dist/menus-BQfusWEC.mjs.map +1 -0
  526. package/dist/menus-BtwjQt5s.mjs +753 -0
  527. package/dist/menus-BtwjQt5s.mjs.map +1 -0
  528. package/dist/menus-p_M1V7J_.mjs +139 -0
  529. package/dist/menus-p_M1V7J_.mjs.map +1 -0
  530. package/dist/migrations/index.d.mts +1 -1
  531. package/dist/migrations/index.mjs +3 -3
  532. package/dist/mime-C94qBG-P.mjs +36 -0
  533. package/dist/mime-C94qBG-P.mjs.map +1 -0
  534. package/dist/mode-DpYW3w6U.mjs +23 -0
  535. package/dist/mode-DpYW3w6U.mjs.map +1 -0
  536. package/dist/node-sqlite-compat-pWFw0lcc.mjs +46 -0
  537. package/dist/node-sqlite-compat-pWFw0lcc.mjs.map +1 -0
  538. package/dist/normalize-DduyxBjf.mjs +191 -0
  539. package/dist/normalize-DduyxBjf.mjs.map +1 -0
  540. package/dist/oauth-authorization-DAXsH1H9.mjs +274 -0
  541. package/dist/oauth-authorization-DAXsH1H9.mjs.map +1 -0
  542. package/dist/oauth-clients-DENiDQri.mjs +266 -0
  543. package/dist/oauth-clients-DENiDQri.mjs.map +1 -0
  544. package/dist/oauth-state-store-y8mEYVq9.mjs +50 -0
  545. package/dist/oauth-state-store-y8mEYVq9.mjs.map +1 -0
  546. package/dist/oauth-user-lookup-CtTYAy-O.mjs +26 -0
  547. package/dist/oauth-user-lookup-CtTYAy-O.mjs.map +1 -0
  548. package/dist/object-cache/memory.d.mts +1 -1
  549. package/dist/options-BYa1FgIM.d.mts +81 -0
  550. package/dist/options-BYa1FgIM.d.mts.map +1 -0
  551. package/dist/page/index.d.mts +2 -2
  552. package/dist/page/index.mjs +5 -5
  553. package/dist/parse-CORGGhHf.mjs +81 -0
  554. package/dist/parse-CORGGhHf.mjs.map +1 -0
  555. package/dist/parse-avNM1xWV.d.mts +168 -0
  556. package/dist/parse-avNM1xWV.d.mts.map +1 -0
  557. package/dist/passkey-config-Dih5YeIS.mjs +46 -0
  558. package/dist/passkey-config-Dih5YeIS.mjs.map +1 -0
  559. package/dist/paths-d51RFm8M.mjs +77 -0
  560. package/dist/paths-d51RFm8M.mjs.map +1 -0
  561. package/dist/patterns-CoqlXUvk.mjs +145 -0
  562. package/dist/patterns-CoqlXUvk.mjs.map +1 -0
  563. package/dist/placeholder-D2aksPMF.d.mts +306 -0
  564. package/dist/placeholder-D2aksPMF.d.mts.map +1 -0
  565. package/dist/plan-DqeZKuaR.mjs +135 -0
  566. package/dist/plan-DqeZKuaR.mjs.map +1 -0
  567. package/dist/plugin-test-runtime.d.mts +14 -14
  568. package/dist/plugin-test-runtime.mjs +110 -107
  569. package/dist/plugin-types.d.mts +2 -2
  570. package/dist/plugin-utils.d.mts +12 -12
  571. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
  572. package/dist/plugins/adapt-sandbox-entry.mjs +3 -3
  573. package/dist/plugins/host.d.mts +5 -5
  574. package/dist/plugins/host.mjs +42 -41
  575. package/dist/plugins-Bb7oqjQA.mjs +277 -0
  576. package/dist/plugins-Bb7oqjQA.mjs.map +1 -0
  577. package/dist/policy-BcEqut3n.mjs +45 -0
  578. package/dist/policy-BcEqut3n.mjs.map +1 -0
  579. package/dist/portable-text-DXE8ymtD.mjs +307 -0
  580. package/dist/portable-text-DXE8ymtD.mjs.map +1 -0
  581. package/dist/preview-DEDWbwA_.mjs +107 -0
  582. package/dist/preview-DEDWbwA_.mjs.map +1 -0
  583. package/dist/protocol-BJbTzvwl.d.mts +61 -0
  584. package/dist/protocol-BJbTzvwl.d.mts.map +1 -0
  585. package/dist/public-submission-D9c9S14m.mjs +250 -0
  586. package/dist/public-submission-D9c9S14m.mjs.map +1 -0
  587. package/dist/public-url-CIRe-2T6.mjs +101 -0
  588. package/dist/public-url-CIRe-2T6.mjs.map +1 -0
  589. package/dist/query-BzifXlPS.mjs +1156 -0
  590. package/dist/query-BzifXlPS.mjs.map +1 -0
  591. package/dist/query-OzMJ6vJP.mjs +41 -0
  592. package/dist/query-OzMJ6vJP.mjs.map +1 -0
  593. package/dist/rate-limit-Csp60Vik.mjs +120 -0
  594. package/dist/rate-limit-Csp60Vik.mjs.map +1 -0
  595. package/dist/receipt-B-aU4hpJ.mjs +43 -0
  596. package/dist/receipt-B-aU4hpJ.mjs.map +1 -0
  597. package/dist/redirect-CDSw1sU3.mjs +17 -0
  598. package/dist/redirect-CDSw1sU3.mjs.map +1 -0
  599. package/dist/redirect-D1ArbO85.mjs +411 -0
  600. package/dist/redirect-D1ArbO85.mjs.map +1 -0
  601. package/dist/redirects-BjTwDTsV.mjs +148 -0
  602. package/dist/redirects-BjTwDTsV.mjs.map +1 -0
  603. package/dist/redirects-Ck50kH3n.mjs +446 -0
  604. package/dist/redirects-Ck50kH3n.mjs.map +1 -0
  605. package/dist/registry/testing.mjs +3 -3
  606. package/dist/registry-CFcNCayZ.mjs +6754 -0
  607. package/dist/registry-CFcNCayZ.mjs.map +1 -0
  608. package/dist/relations-Cfaa1fDl.mjs +776 -0
  609. package/dist/relations-Cfaa1fDl.mjs.map +1 -0
  610. package/dist/request-cache-iHRlHx1d.mjs +104 -0
  611. package/dist/request-cache-iHRlHx1d.mjs.map +1 -0
  612. package/dist/request-context.d.mts +1 -1
  613. package/dist/request-meta-D47mqyev.mjs +141 -0
  614. package/dist/request-meta-D47mqyev.mjs.map +1 -0
  615. package/dist/resolve-BPE8sMvx.mjs +99 -0
  616. package/dist/resolve-BPE8sMvx.mjs.map +1 -0
  617. package/dist/resolve-C0s1E_fH.mjs +199 -0
  618. package/dist/resolve-C0s1E_fH.mjs.map +1 -0
  619. package/dist/revision-j1p4-bOj.mjs +302 -0
  620. package/dist/revision-j1p4-bOj.mjs.map +1 -0
  621. package/dist/route-wire-C9PJV9aL.mjs +197 -0
  622. package/dist/route-wire-C9PJV9aL.mjs.map +1 -0
  623. package/dist/routes-lyYw0mMf.mjs +272 -0
  624. package/dist/routes-lyYw0mMf.mjs.map +1 -0
  625. package/dist/runner-B3eyB9Gb.mjs +6121 -0
  626. package/dist/runner-B3eyB9Gb.mjs.map +1 -0
  627. package/dist/runner-DoYH2Jcu.d.mts +68 -0
  628. package/dist/runner-DoYH2Jcu.d.mts.map +1 -0
  629. package/dist/runtime.d.mts +13 -13
  630. package/dist/runtime.mjs +3 -3
  631. package/dist/schema-BAayK46S.mjs +13 -0
  632. package/dist/schema-BAayK46S.mjs.map +1 -0
  633. package/dist/schema-Gqcl-8G4.mjs +815 -0
  634. package/dist/schema-Gqcl-8G4.mjs.map +1 -0
  635. package/dist/scopes-BqPOKoKf.mjs +34 -0
  636. package/dist/scopes-BqPOKoKf.mjs.map +1 -0
  637. package/dist/search-YJKPIEV6.mjs +448 -0
  638. package/dist/search-YJKPIEV6.mjs.map +1 -0
  639. package/dist/sections-BR_e-wK5.mjs +346 -0
  640. package/dist/sections-BR_e-wK5.mjs.map +1 -0
  641. package/dist/seed/index.d.mts +2 -2
  642. package/dist/seed/index.mjs +37 -31
  643. package/dist/seo/index.d.mts +3 -3
  644. package/dist/seo/index.mjs +22 -21
  645. package/dist/seo/index.mjs.map +1 -1
  646. package/dist/seo-Dsj8hy3j.mjs +114 -0
  647. package/dist/seo-Dsj8hy3j.mjs.map +1 -0
  648. package/dist/seo-XvH4LNNp.mjs +133 -0
  649. package/dist/seo-XvH4LNNp.mjs.map +1 -0
  650. package/dist/service-BsVG05gS.mjs +150 -0
  651. package/dist/service-BsVG05gS.mjs.map +1 -0
  652. package/dist/session-user-DgKbYrlj.mjs +51 -0
  653. package/dist/session-user-DgKbYrlj.mjs.map +1 -0
  654. package/dist/settings-CNPUntkh.mjs +51 -0
  655. package/dist/settings-CNPUntkh.mjs.map +1 -0
  656. package/dist/settings-D5EHi0Tk.mjs +439 -0
  657. package/dist/settings-D5EHi0Tk.mjs.map +1 -0
  658. package/dist/settings-DSfE7wOa.mjs +61 -0
  659. package/dist/settings-DSfE7wOa.mjs.map +1 -0
  660. package/dist/setup-complete-B8W8sJ9v.mjs +26 -0
  661. package/dist/setup-complete-B8W8sJ9v.mjs.map +1 -0
  662. package/dist/setup-nonce-DnSBP260.mjs +25 -0
  663. package/dist/setup-nonce-DnSBP260.mjs.map +1 -0
  664. package/dist/site-settings-NGzdrt7O.mjs +50 -0
  665. package/dist/site-settings-NGzdrt7O.mjs.map +1 -0
  666. package/dist/site-url-D6JB7tLW.mjs +16 -0
  667. package/dist/site-url-D6JB7tLW.mjs.map +1 -0
  668. package/dist/snapshot-CdcwwWAf.mjs +414 -0
  669. package/dist/snapshot-CdcwwWAf.mjs.map +1 -0
  670. package/dist/ssrf-Dv0_tRpo.mjs +406 -0
  671. package/dist/ssrf-Dv0_tRpo.mjs.map +1 -0
  672. package/dist/stage-CUjhED3P.mjs +662 -0
  673. package/dist/stage-CUjhED3P.mjs.map +1 -0
  674. package/dist/staged-C36IWXff.mjs +659 -0
  675. package/dist/staged-C36IWXff.mjs.map +1 -0
  676. package/dist/state-CKouMCSY.mjs +153 -0
  677. package/dist/state-CKouMCSY.mjs.map +1 -0
  678. package/dist/status-lzyj4Uu7.mjs +30 -0
  679. package/dist/status-lzyj4Uu7.mjs.map +1 -0
  680. package/dist/storage/local.d.mts +1 -1
  681. package/dist/storage/local.mjs +1 -1
  682. package/dist/storage/s3.d.mts +1 -1
  683. package/dist/storage/s3.mjs +1 -1
  684. package/dist/storage-query-B-cWcTjJ.d.mts +1594 -0
  685. package/dist/storage-query-B-cWcTjJ.d.mts.map +1 -0
  686. package/dist/tar-DsTXX6ch.mjs +449 -0
  687. package/dist/tar-DsTXX6ch.mjs.map +1 -0
  688. package/dist/target-DLQCwp_Z.mjs +27 -0
  689. package/dist/target-DLQCwp_Z.mjs.map +1 -0
  690. package/dist/taxonomies-BlAjr4BL.mjs +697 -0
  691. package/dist/taxonomies-BlAjr4BL.mjs.map +1 -0
  692. package/dist/taxonomies-Byyo7LOZ.mjs +939 -0
  693. package/dist/taxonomies-Byyo7LOZ.mjs.map +1 -0
  694. package/dist/taxonomy-CKDwM61Y.mjs +525 -0
  695. package/dist/taxonomy-CKDwM61Y.mjs.map +1 -0
  696. package/dist/tokens-BojXlk49.mjs +171 -0
  697. package/dist/tokens-BojXlk49.mjs.map +1 -0
  698. package/dist/transaction-DLPQWik1.mjs +29 -0
  699. package/dist/transaction-DLPQWik1.mjs.map +1 -0
  700. package/dist/transfer-XSTh2BCr.mjs +8706 -0
  701. package/dist/transfer-XSTh2BCr.mjs.map +1 -0
  702. package/dist/transfer-download-DkoCDA9d.mjs +33 -0
  703. package/dist/transfer-download-DkoCDA9d.mjs.map +1 -0
  704. package/dist/transfer-iQ26J-RT.mjs +166 -0
  705. package/dist/transfer-iQ26J-RT.mjs.map +1 -0
  706. package/dist/transformations-C7RQabKQ.mjs +196 -0
  707. package/dist/transformations-C7RQabKQ.mjs.map +1 -0
  708. package/dist/transport-D3RulfD6.mjs +136 -0
  709. package/dist/transport-D3RulfD6.mjs.map +1 -0
  710. package/dist/transport-DhlZlf4D.d.mts +42 -0
  711. package/dist/transport-DhlZlf4D.d.mts.map +1 -0
  712. package/dist/trusted-proxy-B6ECOZJc.mjs +51 -0
  713. package/dist/trusted-proxy-B6ECOZJc.mjs.map +1 -0
  714. package/dist/turnstile-lqUiY7lP.mjs +53 -0
  715. package/dist/turnstile-lqUiY7lP.mjs.map +1 -0
  716. package/dist/types-4Dn9bZhu.mjs +77 -0
  717. package/dist/types-4Dn9bZhu.mjs.map +1 -0
  718. package/dist/types-5LSo7PPx.d.mts +85 -0
  719. package/dist/types-5LSo7PPx.d.mts.map +1 -0
  720. package/dist/types-BQ3hwYJT.d.mts +896 -0
  721. package/dist/types-BQ3hwYJT.d.mts.map +1 -0
  722. package/dist/types-BYEk7qo3.d.mts +198 -0
  723. package/dist/types-BYEk7qo3.d.mts.map +1 -0
  724. package/dist/types-CJKsWVFR.mjs +199 -0
  725. package/dist/types-CJKsWVFR.mjs.map +1 -0
  726. package/dist/types-Ca_w8mmY.d.mts +363 -0
  727. package/dist/types-Ca_w8mmY.d.mts.map +1 -0
  728. package/dist/types-CkE41ZAG.mjs +18 -0
  729. package/dist/types-CkE41ZAG.mjs.map +1 -0
  730. package/dist/types-D0aJW2uR.d.mts +1641 -0
  731. package/dist/types-D0aJW2uR.d.mts.map +1 -0
  732. package/dist/types-DbpN4Qto.d.mts +372 -0
  733. package/dist/types-DbpN4Qto.d.mts.map +1 -0
  734. package/dist/types-ILDI1sdY.mjs +16 -0
  735. package/dist/types-ILDI1sdY.mjs.map +1 -0
  736. package/dist/types-OC5c-edM.mjs +22 -0
  737. package/dist/types-OC5c-edM.mjs.map +1 -0
  738. package/dist/types-aOOxRSx6.mjs +103 -0
  739. package/dist/types-aOOxRSx6.mjs.map +1 -0
  740. package/dist/types-m1WbUffD.d.mts +198 -0
  741. package/dist/types-m1WbUffD.d.mts.map +1 -0
  742. package/dist/types-uxLoPBio.d.mts +124 -0
  743. package/dist/types-uxLoPBio.d.mts.map +1 -0
  744. package/dist/types-we5uR-tV.d.mts +287 -0
  745. package/dist/types-we5uR-tV.d.mts.map +1 -0
  746. package/dist/upload-attempts-DduMy6B0.mjs +32 -0
  747. package/dist/upload-attempts-DduMy6B0.mjs.map +1 -0
  748. package/dist/url-pattern-B3EwxAAk.mjs +33 -0
  749. package/dist/url-pattern-B3EwxAAk.mjs.map +1 -0
  750. package/dist/user-ElwQjTQT.mjs +171 -0
  751. package/dist/user-ElwQjTQT.mjs.map +1 -0
  752. package/dist/utils-BlAXmfOG.mjs +439 -0
  753. package/dist/utils-BlAXmfOG.mjs.map +1 -0
  754. package/dist/validate-CH0X5b2c.d.mts +468 -0
  755. package/dist/validate-CH0X5b2c.d.mts.map +1 -0
  756. package/dist/validate-CfgRpcjA.mjs +492 -0
  757. package/dist/validate-CfgRpcjA.mjs.map +1 -0
  758. package/dist/validation-DvYJtv4k.mjs +218 -0
  759. package/dist/validation-DvYJtv4k.mjs.map +1 -0
  760. package/dist/version-DgYjhTud.mjs +9 -0
  761. package/dist/version-DgYjhTud.mjs.map +1 -0
  762. package/dist/version-Dq71scUb.mjs +7 -0
  763. package/dist/version-Dq71scUb.mjs.map +1 -0
  764. package/dist/widgets-ChFIj0be.mjs +126 -0
  765. package/dist/widgets-ChFIj0be.mjs.map +1 -0
  766. package/dist/wxr-taxonomies-CBZMp2YX.mjs +372 -0
  767. package/dist/wxr-taxonomies-CBZMp2YX.mjs.map +1 -0
  768. package/dist/wxr-taxonomies-DlKDpWN1.d.mts +34 -0
  769. package/dist/wxr-taxonomies-DlKDpWN1.d.mts.map +1 -0
  770. package/dist/zod-generator-DmTKI-Ig.mjs +426 -0
  771. package/dist/zod-generator-DmTKI-Ig.mjs.map +1 -0
  772. package/package.json +7 -6
  773. package/src/api/handlers/content.ts +593 -16
  774. package/src/api/handlers/device-flow.ts +74 -21
  775. package/src/api/handlers/index.ts +1 -0
  776. package/src/api/handlers/manifest.ts +79 -5
  777. package/src/api/handlers/media-upload.ts +17 -71
  778. package/src/api/handlers/media.ts +97 -3
  779. package/src/api/handlers/relations.ts +638 -157
  780. package/src/api/handlers/revision.ts +30 -0
  781. package/src/api/handlers/schema.ts +403 -1
  782. package/src/api/handlers/snapshot.ts +257 -3
  783. package/src/api/handlers/staged-references.ts +142 -0
  784. package/src/api/handlers/validate-references.ts +146 -0
  785. package/src/api/schemas/content.ts +13 -0
  786. package/src/api/schemas/relations.ts +54 -44
  787. package/src/api/schemas/schema.ts +14 -0
  788. package/src/astro/integration/routes.ts +15 -19
  789. package/src/astro/integration/vite-config.ts +10 -4
  790. package/src/astro/middleware.ts +1 -0
  791. package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +11 -54
  792. package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
  793. package/src/astro/routes/api/oauth/device/authorize.ts +33 -4
  794. package/src/astro/routes/api/relations/index.ts +4 -4
  795. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +6 -2
  796. package/src/astro/routes/api/setup/index.ts +66 -23
  797. package/src/astro/routes/api/snapshot.ts +2 -1
  798. package/src/astro/types.ts +10 -0
  799. package/src/cleanup.ts +10 -0
  800. package/src/cli/commands/export-seed.ts +510 -89
  801. package/src/components/Columns.astro +3 -1
  802. package/src/components/Cover.astro +3 -1
  803. package/src/components/WidgetArea.astro +3 -2
  804. package/src/database/migrations/086_relations_structural.ts +197 -0
  805. package/src/database/migrations/087_reference_field_relations.ts +407 -0
  806. package/src/database/migrations/runner.ts +4 -0
  807. package/src/database/reference-backfill.ts +141 -0
  808. package/src/database/repositories/content.ts +43 -8
  809. package/src/database/repositories/media.ts +40 -1
  810. package/src/database/repositories/redirect.ts +17 -34
  811. package/src/database/repositories/relation.ts +620 -208
  812. package/src/database/repositories/revision.ts +16 -0
  813. package/src/database/repositories/types.ts +38 -0
  814. package/src/database/transaction.ts +12 -1
  815. package/src/database/types.ts +14 -5
  816. package/src/emdash-runtime.ts +114 -11
  817. package/src/index.ts +11 -0
  818. package/src/loader.ts +169 -22
  819. package/src/mcp/server.ts +13 -48
  820. package/src/query.ts +455 -25
  821. package/src/references/field-map.ts +115 -0
  822. package/src/references/resolve.ts +160 -0
  823. package/src/references/staged.ts +117 -0
  824. package/src/references/types.ts +16 -0
  825. package/src/registry/artifact-fetch.ts +45 -271
  826. package/src/schema/registry.ts +99 -24
  827. package/src/schema/types.ts +58 -0
  828. package/src/schema/zod-generator.ts +67 -1
  829. package/src/seed/apply.ts +841 -103
  830. package/src/seed/types.ts +36 -2
  831. package/src/seed/validate.ts +78 -2
  832. package/src/transfer/analyze/unique-keys.ts +3 -12
  833. package/src/transfer/analyze/validate.ts +65 -39
  834. package/src/transfer/analyze/values.ts +12 -1
  835. package/src/transfer/export/readers.ts +12 -8
  836. package/src/transfer/format/columns.ts +26 -6
  837. package/src/transfer/format/kinds.ts +21 -5
  838. package/src/transfer/import/context.ts +8 -1
  839. package/src/transfer/ops/package-index.ts +1 -1
  840. package/dist/action-token-DYwe4Pk0.mjs +0 -26
  841. package/dist/action-token-DYwe4Pk0.mjs.map +0 -1
  842. package/dist/activation-LOkDM5WT.mjs +0 -382
  843. package/dist/activation-LOkDM5WT.mjs.map +0 -1
  844. package/dist/adapters-B64LbYcB.d.mts +0 -171
  845. package/dist/adapters-B64LbYcB.d.mts.map +0 -1
  846. package/dist/allowed-origins-CHB8oZNM.mjs +0 -116
  847. package/dist/allowed-origins-CHB8oZNM.mjs.map +0 -1
  848. package/dist/api-cFFZpyS0.mjs +0 -4718
  849. package/dist/api-cFFZpyS0.mjs.map +0 -1
  850. package/dist/api-tokens-s4i4aUp_.mjs +0 -166
  851. package/dist/api-tokens-s4i4aUp_.mjs.map +0 -1
  852. package/dist/apply-CoT603H3.mjs +0 -1163
  853. package/dist/apply-CoT603H3.mjs.map +0 -1
  854. package/dist/approvals-CqMfNxak.mjs +0 -460
  855. package/dist/approvals-CqMfNxak.mjs.map +0 -1
  856. package/dist/artifact-fetch-DZMOGZ3-.mjs +0 -818
  857. package/dist/artifact-fetch-DZMOGZ3-.mjs.map +0 -1
  858. package/dist/astro/routes/api/relations/_id_/translations.d.mts +0 -8
  859. package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +0 -1
  860. package/dist/astro/routes/api/relations/_id_/translations.mjs +0 -47
  861. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +0 -1
  862. package/dist/audit-RfCugiSB.mjs +0 -127
  863. package/dist/audit-RfCugiSB.mjs.map +0 -1
  864. package/dist/authoritative-records-CoJvBXAD.mjs +0 -5172
  865. package/dist/authoritative-records-CoJvBXAD.mjs.map +0 -1
  866. package/dist/authorize-seCifOMJ.mjs +0 -49
  867. package/dist/authorize-seCifOMJ.mjs.map +0 -1
  868. package/dist/backup-CBu0LrXf.mjs +0 -246
  869. package/dist/backup-CBu0LrXf.mjs.map +0 -1
  870. package/dist/block-type-registry-DUI_3KxT.mjs +0 -6709
  871. package/dist/block-type-registry-DUI_3KxT.mjs.map +0 -1
  872. package/dist/block-types-BmZmLmAD.mjs +0 -132
  873. package/dist/block-types-BmZmLmAD.mjs.map +0 -1
  874. package/dist/block-values-C_VIPr5t.mjs +0 -175
  875. package/dist/block-values-C_VIPr5t.mjs.map +0 -1
  876. package/dist/byline-DYmkXqvo.mjs +0 -909
  877. package/dist/byline-DYmkXqvo.mjs.map +0 -1
  878. package/dist/byline-fields-D28AT-Fh.mjs +0 -123
  879. package/dist/byline-fields-D28AT-Fh.mjs.map +0 -1
  880. package/dist/byline-registry-gnKscbQX.mjs +0 -406
  881. package/dist/byline-registry-gnKscbQX.mjs.map +0 -1
  882. package/dist/bylines-BPwJqoYH.mjs +0 -232
  883. package/dist/bylines-BPwJqoYH.mjs.map +0 -1
  884. package/dist/bylines-ukLaYpVZ.mjs +0 -214
  885. package/dist/bylines-ukLaYpVZ.mjs.map +0 -1
  886. package/dist/cache-m7UEkRFV.mjs +0 -108
  887. package/dist/cache-m7UEkRFV.mjs.map +0 -1
  888. package/dist/canonical-YhEQezjg.mjs +0 -174
  889. package/dist/canonical-YhEQezjg.mjs.map +0 -1
  890. package/dist/capture-triggers-kJyl_yyM.mjs +0 -362
  891. package/dist/capture-triggers-kJyl_yyM.mjs.map +0 -1
  892. package/dist/challenge-store-ppU6Uv13.mjs +0 -51
  893. package/dist/challenge-store-ppU6Uv13.mjs.map +0 -1
  894. package/dist/checksum-B2IINIlN.mjs +0 -162
  895. package/dist/checksum-B2IINIlN.mjs.map +0 -1
  896. package/dist/chrome-tags-DApCQSIk.mjs +0 -24
  897. package/dist/chrome-tags-DApCQSIk.mjs.map +0 -1
  898. package/dist/chunks-Dms7Uxbt.mjs +0 -25
  899. package/dist/chunks-Dms7Uxbt.mjs.map +0 -1
  900. package/dist/collection-deletion-BIm28mo3.mjs +0 -436
  901. package/dist/collection-deletion-BIm28mo3.mjs.map +0 -1
  902. package/dist/collection-deletion-processor-Br6rxs3u.mjs +0 -217
  903. package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +0 -1
  904. package/dist/collection-slugs-cache-CjGk__zp.mjs +0 -85
  905. package/dist/collection-slugs-cache-CjGk__zp.mjs.map +0 -1
  906. package/dist/comment-CrBl22OF.mjs +0 -313
  907. package/dist/comment-CrBl22OF.mjs.map +0 -1
  908. package/dist/comment-reaction-JEQ2Fpd8.mjs +0 -85
  909. package/dist/comment-reaction-JEQ2Fpd8.mjs.map +0 -1
  910. package/dist/comments-2ah9du9y.mjs +0 -195
  911. package/dist/comments-2ah9du9y.mjs.map +0 -1
  912. package/dist/comments-fHZ8ON9O.mjs +0 -99
  913. package/dist/comments-fHZ8ON9O.mjs.map +0 -1
  914. package/dist/components-CXbq7CSM.mjs +0 -108
  915. package/dist/components-CXbq7CSM.mjs.map +0 -1
  916. package/dist/config-5ii2haYu.d.mts +0 -6528
  917. package/dist/config-5ii2haYu.d.mts.map +0 -1
  918. package/dist/config-IhybvkIQ.mjs +0 -242
  919. package/dist/config-IhybvkIQ.mjs.map +0 -1
  920. package/dist/config-Py43JK9r.d.mts +0 -39
  921. package/dist/config-Py43JK9r.d.mts.map +0 -1
  922. package/dist/content-DFaIEDj9.mjs +0 -2281
  923. package/dist/content-DFaIEDj9.mjs.map +0 -1
  924. package/dist/content-list-query-Dra4Dalc.d.mts +0 -26
  925. package/dist/content-list-query-Dra4Dalc.d.mts.map +0 -1
  926. package/dist/content-policy-DFNw91-d.mjs +0 -46
  927. package/dist/content-policy-DFNw91-d.mjs.map +0 -1
  928. package/dist/content-repair-Q8IUrpLL.mjs +0 -442
  929. package/dist/content-repair-Q8IUrpLL.mjs.map +0 -1
  930. package/dist/context-BeGccdUX.mjs +0 -1921
  931. package/dist/context-BeGccdUX.mjs.map +0 -1
  932. package/dist/cron-7DCJwPXq.mjs +0 -284
  933. package/dist/cron-7DCJwPXq.mjs.map +0 -1
  934. package/dist/dashboard-DjrB-xxZ.mjs +0 -151
  935. package/dist/dashboard-DjrB-xxZ.mjs.map +0 -1
  936. package/dist/default-DQ6vsviu.mjs +0 -81
  937. package/dist/default-DQ6vsviu.mjs.map +0 -1
  938. package/dist/deferred-tasks-BPxXUB4x.d.mts +0 -9
  939. package/dist/deferred-tasks-BPxXUB4x.d.mts.map +0 -1
  940. package/dist/dev-typegen-CZaPLl3V.mjs +0 -29
  941. package/dist/dev-typegen-CZaPLl3V.mjs.map +0 -1
  942. package/dist/device-flow-CRd6DXmW.mjs +0 -466
  943. package/dist/device-flow-CRd6DXmW.mjs.map +0 -1
  944. package/dist/digest-BarSh-pN.mjs +0 -194
  945. package/dist/digest-BarSh-pN.mjs.map +0 -1
  946. package/dist/direct-executor-BmuFJJZV.mjs +0 -104
  947. package/dist/direct-executor-BmuFJJZV.mjs.map +0 -1
  948. package/dist/dist-BNwANFJR.mjs +0 -810
  949. package/dist/dist-BNwANFJR.mjs.map +0 -1
  950. package/dist/email-console-bJn3ctqA.mjs +0 -50
  951. package/dist/email-console-bJn3ctqA.mjs.map +0 -1
  952. package/dist/email-locale-CN6WAMx0.mjs +0 -25
  953. package/dist/email-locale-CN6WAMx0.mjs.map +0 -1
  954. package/dist/emdash-runtime-DAjghyEG.mjs +0 -4186
  955. package/dist/emdash-runtime-DAjghyEG.mjs.map +0 -1
  956. package/dist/enrich-Dl3kZ-lP.mjs +0 -194
  957. package/dist/enrich-Dl3kZ-lP.mjs.map +0 -1
  958. package/dist/entry-lock-BJYdBfXb.mjs +0 -1097
  959. package/dist/entry-lock-BJYdBfXb.mjs.map +0 -1
  960. package/dist/entry-lock-DHQOxN7R.mjs +0 -163
  961. package/dist/entry-lock-DHQOxN7R.mjs.map +0 -1
  962. package/dist/entry-lock-DVhCt49A.d.mts +0 -4368
  963. package/dist/entry-lock-DVhCt49A.d.mts.map +0 -1
  964. package/dist/entry-locks-D0foLdjQ.mjs +0 -167
  965. package/dist/entry-locks-D0foLdjQ.mjs.map +0 -1
  966. package/dist/error-CfvOHP0M.mjs +0 -90
  967. package/dist/error-CfvOHP0M.mjs.map +0 -1
  968. package/dist/errors-BF0_LFhW.mjs +0 -460
  969. package/dist/errors-BF0_LFhW.mjs.map +0 -1
  970. package/dist/errors-DgE1zJGG.mjs +0 -120
  971. package/dist/errors-DgE1zJGG.mjs.map +0 -1
  972. package/dist/escape-CuaZhZvL.mjs +0 -9
  973. package/dist/escape-CuaZhZvL.mjs.map +0 -1
  974. package/dist/fence-CMDXJYc_.mjs +0 -162
  975. package/dist/fence-CMDXJYc_.mjs.map +0 -1
  976. package/dist/field-defs-cache-HIgBbqZZ.mjs +0 -77
  977. package/dist/field-defs-cache-HIgBbqZZ.mjs.map +0 -1
  978. package/dist/focal-point-Gr34o-4o.mjs +0 -23
  979. package/dist/focal-point-Gr34o-4o.mjs.map +0 -1
  980. package/dist/fts-manager-S-K0laoS.mjs +0 -443
  981. package/dist/fts-manager-S-K0laoS.mjs.map +0 -1
  982. package/dist/gc-DjKY0Ay1.mjs +0 -75
  983. package/dist/gc-DjKY0Ay1.mjs.map +0 -1
  984. package/dist/hash-SDAW6zC-.mjs +0 -37
  985. package/dist/hash-SDAW6zC-.mjs.map +0 -1
  986. package/dist/hook-result-B5bXDgS2.d.mts +0 -31
  987. package/dist/hook-result-B5bXDgS2.d.mts.map +0 -1
  988. package/dist/hreflang-D5uNnsGJ.d.mts +0 -50
  989. package/dist/hreflang-D5uNnsGJ.d.mts.map +0 -1
  990. package/dist/hreflang-DMFBL2eb.mjs +0 -105
  991. package/dist/hreflang-DMFBL2eb.mjs.map +0 -1
  992. package/dist/http-route-dispatch-BitqzwMy.mjs +0 -339
  993. package/dist/http-route-dispatch-BitqzwMy.mjs.map +0 -1
  994. package/dist/identity-IyNWwXr6.mjs +0 -35
  995. package/dist/identity-IyNWwXr6.mjs.map +0 -1
  996. package/dist/import-C3JZplWq.mjs +0 -2020
  997. package/dist/import-C3JZplWq.mjs.map +0 -1
  998. package/dist/index-D-hdtLe8.d.mts +0 -623
  999. package/dist/index-D-hdtLe8.d.mts.map +0 -1
  1000. package/dist/install-finalization-DfM1fj5x.mjs +0 -58
  1001. package/dist/install-finalization-DfM1fj5x.mjs.map +0 -1
  1002. package/dist/keys-yxLm5l35.mjs +0 -61
  1003. package/dist/keys-yxLm5l35.mjs.map +0 -1
  1004. package/dist/kinds-CRu_T5T5.mjs +0 -961
  1005. package/dist/kinds-CRu_T5T5.mjs.map +0 -1
  1006. package/dist/lifecycle-BzeGPeQ-.mjs +0 -25
  1007. package/dist/lifecycle-BzeGPeQ-.mjs.map +0 -1
  1008. package/dist/load-XgJiE6_3.mjs +0 -28
  1009. package/dist/load-XgJiE6_3.mjs.map +0 -1
  1010. package/dist/loader-BzqeR1ZN.mjs +0 -1086
  1011. package/dist/loader-BzqeR1ZN.mjs.map +0 -1
  1012. package/dist/loops-BQSzv5Zn.mjs +0 -203
  1013. package/dist/loops-BQSzv5Zn.mjs.map +0 -1
  1014. package/dist/manifest-builder-B8zR-73J.mjs +0 -189
  1015. package/dist/manifest-builder-B8zR-73J.mjs.map +0 -1
  1016. package/dist/manifest-schema-CY3zng_M.mjs +0 -492
  1017. package/dist/manifest-schema-CY3zng_M.mjs.map +0 -1
  1018. package/dist/media-Pu1L6xir.mjs +0 -408
  1019. package/dist/media-Pu1L6xir.mjs.map +0 -1
  1020. package/dist/media-Qp5S3eH3.mjs +0 -355
  1021. package/dist/media-Qp5S3eH3.mjs.map +0 -1
  1022. package/dist/media-allowlist-BSoa9Vvm.mjs +0 -44
  1023. package/dist/media-allowlist-BSoa9Vvm.mjs.map +0 -1
  1024. package/dist/media-folders-BE0oo2eX.mjs +0 -210
  1025. package/dist/media-folders-BE0oo2eX.mjs.map +0 -1
  1026. package/dist/media-h7tOiDLj.mjs +0 -221
  1027. package/dist/media-h7tOiDLj.mjs.map +0 -1
  1028. package/dist/media-url-jArBpzIG.mjs +0 -43
  1029. package/dist/media-url-jArBpzIG.mjs.map +0 -1
  1030. package/dist/media-usage-My-Vi-ex.mjs +0 -1629
  1031. package/dist/media-usage-My-Vi-ex.mjs.map +0 -1
  1032. package/dist/media-usage-activation-HKp7zk7W.mjs +0 -78
  1033. package/dist/media-usage-activation-HKp7zk7W.mjs.map +0 -1
  1034. package/dist/media-usage-work-C2OZLCAd.mjs +0 -586
  1035. package/dist/media-usage-work-C2OZLCAd.mjs.map +0 -1
  1036. package/dist/media-usage-work-DwUNbgvS.mjs +0 -152
  1037. package/dist/media-usage-work-DwUNbgvS.mjs.map +0 -1
  1038. package/dist/menus-BM7BPLOb.mjs +0 -139
  1039. package/dist/menus-BM7BPLOb.mjs.map +0 -1
  1040. package/dist/menus-ITeAbcIF.mjs +0 -753
  1041. package/dist/menus-ITeAbcIF.mjs.map +0 -1
  1042. package/dist/menus-TsSGmSR4.mjs +0 -3608
  1043. package/dist/menus-TsSGmSR4.mjs.map +0 -1
  1044. package/dist/mime-ChLqYwDk.mjs +0 -36
  1045. package/dist/mime-ChLqYwDk.mjs.map +0 -1
  1046. package/dist/mode-CCuKXUci.mjs +0 -23
  1047. package/dist/mode-CCuKXUci.mjs.map +0 -1
  1048. package/dist/node-sqlite-compat-CONMsl-x.mjs +0 -46
  1049. package/dist/node-sqlite-compat-CONMsl-x.mjs.map +0 -1
  1050. package/dist/normalize-CO2P8-iE.mjs +0 -191
  1051. package/dist/normalize-CO2P8-iE.mjs.map +0 -1
  1052. package/dist/oauth-authorization-DlMIL5_h.mjs +0 -274
  1053. package/dist/oauth-authorization-DlMIL5_h.mjs.map +0 -1
  1054. package/dist/oauth-clients-Djq9r_KP.mjs +0 -266
  1055. package/dist/oauth-clients-Djq9r_KP.mjs.map +0 -1
  1056. package/dist/oauth-state-store-BbjnZXNC.mjs +0 -50
  1057. package/dist/oauth-state-store-BbjnZXNC.mjs.map +0 -1
  1058. package/dist/oauth-user-lookup-vue9a64A.mjs +0 -26
  1059. package/dist/oauth-user-lookup-vue9a64A.mjs.map +0 -1
  1060. package/dist/options-SQCHQCPH.d.mts +0 -81
  1061. package/dist/options-SQCHQCPH.d.mts.map +0 -1
  1062. package/dist/parse-CVgO-Qai.d.mts +0 -168
  1063. package/dist/parse-CVgO-Qai.d.mts.map +0 -1
  1064. package/dist/parse-DY6OD1j_.mjs +0 -81
  1065. package/dist/parse-DY6OD1j_.mjs.map +0 -1
  1066. package/dist/passkey-config-X_H8128a.mjs +0 -46
  1067. package/dist/passkey-config-X_H8128a.mjs.map +0 -1
  1068. package/dist/paths-JxokKIbr.mjs +0 -77
  1069. package/dist/paths-JxokKIbr.mjs.map +0 -1
  1070. package/dist/patterns-BhAvqO0S.mjs +0 -145
  1071. package/dist/patterns-BhAvqO0S.mjs.map +0 -1
  1072. package/dist/placeholder-MSEd8gty.d.mts +0 -306
  1073. package/dist/placeholder-MSEd8gty.d.mts.map +0 -1
  1074. package/dist/plan-xjcWrAah.mjs +0 -135
  1075. package/dist/plan-xjcWrAah.mjs.map +0 -1
  1076. package/dist/plugins-DUXUt8B9.mjs +0 -277
  1077. package/dist/plugins-DUXUt8B9.mjs.map +0 -1
  1078. package/dist/policy-CUvwAARc.mjs +0 -45
  1079. package/dist/policy-CUvwAARc.mjs.map +0 -1
  1080. package/dist/portable-text-5O_ZGUjB.mjs +0 -307
  1081. package/dist/portable-text-5O_ZGUjB.mjs.map +0 -1
  1082. package/dist/preview-CIUcPYr6.mjs +0 -107
  1083. package/dist/preview-CIUcPYr6.mjs.map +0 -1
  1084. package/dist/protocol-B97DZaFr.d.mts +0 -61
  1085. package/dist/protocol-B97DZaFr.d.mts.map +0 -1
  1086. package/dist/public-submission-BFBUrqst.mjs +0 -250
  1087. package/dist/public-submission-BFBUrqst.mjs.map +0 -1
  1088. package/dist/public-url-Bn7U0D7-.mjs +0 -101
  1089. package/dist/public-url-Bn7U0D7-.mjs.map +0 -1
  1090. package/dist/query-B48peoRT.mjs +0 -890
  1091. package/dist/query-B48peoRT.mjs.map +0 -1
  1092. package/dist/query-C4IH0uhR.mjs +0 -41
  1093. package/dist/query-C4IH0uhR.mjs.map +0 -1
  1094. package/dist/rate-limit-BZ6nybgc.mjs +0 -120
  1095. package/dist/rate-limit-BZ6nybgc.mjs.map +0 -1
  1096. package/dist/receipt-B4wJj5Jq.mjs +0 -43
  1097. package/dist/receipt-B4wJj5Jq.mjs.map +0 -1
  1098. package/dist/redirect-Cd1E7VUt.mjs +0 -17
  1099. package/dist/redirect-Cd1E7VUt.mjs.map +0 -1
  1100. package/dist/redirect-iJf5fltD.mjs +0 -415
  1101. package/dist/redirect-iJf5fltD.mjs.map +0 -1
  1102. package/dist/redirects-CYu1u1aK.mjs +0 -446
  1103. package/dist/redirects-CYu1u1aK.mjs.map +0 -1
  1104. package/dist/redirects-Cv9apQKj.mjs +0 -148
  1105. package/dist/redirects-Cv9apQKj.mjs.map +0 -1
  1106. package/dist/relation-M4NUCb0b.mjs +0 -334
  1107. package/dist/relation-M4NUCb0b.mjs.map +0 -1
  1108. package/dist/relations-CCif47Oq.mjs +0 -403
  1109. package/dist/relations-CCif47Oq.mjs.map +0 -1
  1110. package/dist/relations-CK9CYUyr.mjs +0 -310
  1111. package/dist/relations-CK9CYUyr.mjs.map +0 -1
  1112. package/dist/request-cache-DzLYKm_x.mjs +0 -104
  1113. package/dist/request-cache-DzLYKm_x.mjs.map +0 -1
  1114. package/dist/request-meta-sZXt3sRo.mjs +0 -141
  1115. package/dist/request-meta-sZXt3sRo.mjs.map +0 -1
  1116. package/dist/resolve-2WbQsCvT.mjs +0 -199
  1117. package/dist/resolve-2WbQsCvT.mjs.map +0 -1
  1118. package/dist/route-wire--1hLuACz.mjs +0 -197
  1119. package/dist/route-wire--1hLuACz.mjs.map +0 -1
  1120. package/dist/routes-CUsM40Cc.mjs +0 -272
  1121. package/dist/routes-CUsM40Cc.mjs.map +0 -1
  1122. package/dist/runner-1y4J9fJB.mjs +0 -5742
  1123. package/dist/runner-1y4J9fJB.mjs.map +0 -1
  1124. package/dist/runner-D5_LzKXI.d.mts +0 -68
  1125. package/dist/runner-D5_LzKXI.d.mts.map +0 -1
  1126. package/dist/schema-BABiRdsH.mjs +0 -13
  1127. package/dist/schema-BABiRdsH.mjs.map +0 -1
  1128. package/dist/schema-Du3MzCG0.mjs +0 -446
  1129. package/dist/schema-Du3MzCG0.mjs.map +0 -1
  1130. package/dist/scopes-Dbk-ElhT.mjs +0 -34
  1131. package/dist/scopes-Dbk-ElhT.mjs.map +0 -1
  1132. package/dist/search-Bt1PL1jf.mjs +0 -448
  1133. package/dist/search-Bt1PL1jf.mjs.map +0 -1
  1134. package/dist/sections-Ddptx_o9.mjs +0 -346
  1135. package/dist/sections-Ddptx_o9.mjs.map +0 -1
  1136. package/dist/seo-CZT2oLtT.mjs +0 -114
  1137. package/dist/seo-CZT2oLtT.mjs.map +0 -1
  1138. package/dist/seo-D5w3-Azy.mjs +0 -133
  1139. package/dist/seo-D5w3-Azy.mjs.map +0 -1
  1140. package/dist/service-DuykXPyW.mjs +0 -150
  1141. package/dist/service-DuykXPyW.mjs.map +0 -1
  1142. package/dist/session-user-BhaVp8w0.mjs +0 -51
  1143. package/dist/session-user-BhaVp8w0.mjs.map +0 -1
  1144. package/dist/settings-2xNYr90o.mjs +0 -51
  1145. package/dist/settings-2xNYr90o.mjs.map +0 -1
  1146. package/dist/settings-CgjRWGW9.mjs +0 -439
  1147. package/dist/settings-CgjRWGW9.mjs.map +0 -1
  1148. package/dist/settings-DYidIB26.mjs +0 -61
  1149. package/dist/settings-DYidIB26.mjs.map +0 -1
  1150. package/dist/setup-complete-bOogcHWG.mjs +0 -26
  1151. package/dist/setup-complete-bOogcHWG.mjs.map +0 -1
  1152. package/dist/setup-nonce-0EGuKM4s.mjs +0 -25
  1153. package/dist/setup-nonce-0EGuKM4s.mjs.map +0 -1
  1154. package/dist/site-settings-DOgRUoFX.mjs +0 -50
  1155. package/dist/site-settings-DOgRUoFX.mjs.map +0 -1
  1156. package/dist/site-url-BU_bbxwj.mjs +0 -16
  1157. package/dist/site-url-BU_bbxwj.mjs.map +0 -1
  1158. package/dist/snapshot-CugwUqKQ.mjs +0 -237
  1159. package/dist/snapshot-CugwUqKQ.mjs.map +0 -1
  1160. package/dist/ssrf-CJUnJymJ.mjs +0 -406
  1161. package/dist/ssrf-CJUnJymJ.mjs.map +0 -1
  1162. package/dist/stage-DgrBz_du.mjs +0 -662
  1163. package/dist/stage-DgrBz_du.mjs.map +0 -1
  1164. package/dist/state-DDiPySSG.mjs +0 -153
  1165. package/dist/state-DDiPySSG.mjs.map +0 -1
  1166. package/dist/status-DZKIG4a9.mjs +0 -30
  1167. package/dist/status-DZKIG4a9.mjs.map +0 -1
  1168. package/dist/storage-query-Bdv7A62k.d.mts +0 -1576
  1169. package/dist/storage-query-Bdv7A62k.d.mts.map +0 -1
  1170. package/dist/tar-_1AgTYFu.mjs +0 -449
  1171. package/dist/tar-_1AgTYFu.mjs.map +0 -1
  1172. package/dist/target-_7pn2Gbg.mjs +0 -27
  1173. package/dist/target-_7pn2Gbg.mjs.map +0 -1
  1174. package/dist/taxonomies-C1IwNe8Q.mjs +0 -697
  1175. package/dist/taxonomies-C1IwNe8Q.mjs.map +0 -1
  1176. package/dist/taxonomies-C_XMoRcX.mjs +0 -939
  1177. package/dist/taxonomies-C_XMoRcX.mjs.map +0 -1
  1178. package/dist/taxonomy-C3Fu1YeH.mjs +0 -525
  1179. package/dist/taxonomy-C3Fu1YeH.mjs.map +0 -1
  1180. package/dist/tokens-u78jETkX.mjs +0 -171
  1181. package/dist/tokens-u78jETkX.mjs.map +0 -1
  1182. package/dist/transaction-BcJO4Tmc.mjs +0 -29
  1183. package/dist/transaction-BcJO4Tmc.mjs.map +0 -1
  1184. package/dist/transfer-BhUCrgDc.mjs +0 -8675
  1185. package/dist/transfer-BhUCrgDc.mjs.map +0 -1
  1186. package/dist/transfer-DIGvR9Af.mjs +0 -166
  1187. package/dist/transfer-DIGvR9Af.mjs.map +0 -1
  1188. package/dist/transfer-download-Pml7RMio.mjs +0 -33
  1189. package/dist/transfer-download-Pml7RMio.mjs.map +0 -1
  1190. package/dist/transformations-9gfpwY65.mjs +0 -196
  1191. package/dist/transformations-9gfpwY65.mjs.map +0 -1
  1192. package/dist/transport-BIfH7_hx.d.mts +0 -42
  1193. package/dist/transport-BIfH7_hx.d.mts.map +0 -1
  1194. package/dist/transport-DKWIq53q.mjs +0 -136
  1195. package/dist/transport-DKWIq53q.mjs.map +0 -1
  1196. package/dist/trusted-proxy-tKiVtyTD.mjs +0 -51
  1197. package/dist/trusted-proxy-tKiVtyTD.mjs.map +0 -1
  1198. package/dist/turnstile-DpsoyOfg.mjs +0 -53
  1199. package/dist/turnstile-DpsoyOfg.mjs.map +0 -1
  1200. package/dist/types-B4sUC2p1.d.mts +0 -198
  1201. package/dist/types-B4sUC2p1.d.mts.map +0 -1
  1202. package/dist/types-B7Lmsh1E.d.mts +0 -887
  1203. package/dist/types-B7Lmsh1E.d.mts.map +0 -1
  1204. package/dist/types-BZakh7Ym.mjs +0 -22
  1205. package/dist/types-BZakh7Ym.mjs.map +0 -1
  1206. package/dist/types-B_CppEmv.d.mts +0 -264
  1207. package/dist/types-B_CppEmv.d.mts.map +0 -1
  1208. package/dist/types-BcrBrE6-.mjs +0 -159
  1209. package/dist/types-BcrBrE6-.mjs.map +0 -1
  1210. package/dist/types-BkUg2yHx.mjs +0 -92
  1211. package/dist/types-BkUg2yHx.mjs.map +0 -1
  1212. package/dist/types-CAZgq9fO.d.mts +0 -124
  1213. package/dist/types-CAZgq9fO.d.mts.map +0 -1
  1214. package/dist/types-Cd-O03VG.d.mts +0 -363
  1215. package/dist/types-Cd-O03VG.d.mts.map +0 -1
  1216. package/dist/types-Cr-Kg-3D.d.mts +0 -1641
  1217. package/dist/types-Cr-Kg-3D.d.mts.map +0 -1
  1218. package/dist/types-D2fvWd1i.d.mts +0 -359
  1219. package/dist/types-D2fvWd1i.d.mts.map +0 -1
  1220. package/dist/types-D7HUsguf.mjs +0 -77
  1221. package/dist/types-D7HUsguf.mjs.map +0 -1
  1222. package/dist/types-DA1Te3Oy.d.mts +0 -198
  1223. package/dist/types-DA1Te3Oy.d.mts.map +0 -1
  1224. package/dist/types-DhV6Q5bP.mjs +0 -18
  1225. package/dist/types-DhV6Q5bP.mjs.map +0 -1
  1226. package/dist/types-DnnVSl6Y.d.mts +0 -85
  1227. package/dist/types-DnnVSl6Y.d.mts.map +0 -1
  1228. package/dist/types-VT4-BugW.mjs +0 -16
  1229. package/dist/types-VT4-BugW.mjs.map +0 -1
  1230. package/dist/upload-attempts-B68ZGNu9.mjs +0 -32
  1231. package/dist/upload-attempts-B68ZGNu9.mjs.map +0 -1
  1232. package/dist/url-pattern-CCeZMGOh.mjs +0 -33
  1233. package/dist/url-pattern-CCeZMGOh.mjs.map +0 -1
  1234. package/dist/user-DDSL-sGw.mjs +0 -171
  1235. package/dist/user-DDSL-sGw.mjs.map +0 -1
  1236. package/dist/utils-DdhmO9w9.mjs +0 -439
  1237. package/dist/utils-DdhmO9w9.mjs.map +0 -1
  1238. package/dist/validate-CHosPEhs.mjs +0 -453
  1239. package/dist/validate-CHosPEhs.mjs.map +0 -1
  1240. package/dist/validate-CM79QXYE.d.mts +0 -432
  1241. package/dist/validate-CM79QXYE.d.mts.map +0 -1
  1242. package/dist/validation-BFecQczG.mjs +0 -218
  1243. package/dist/validation-BFecQczG.mjs.map +0 -1
  1244. package/dist/version-BRZXVifl.mjs +0 -9
  1245. package/dist/version-BRZXVifl.mjs.map +0 -1
  1246. package/dist/version-DUQDHgrf.mjs +0 -7
  1247. package/dist/version-DUQDHgrf.mjs.map +0 -1
  1248. package/dist/widgets-WdV72brA.mjs +0 -126
  1249. package/dist/widgets-WdV72brA.mjs.map +0 -1
  1250. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +0 -34
  1251. package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +0 -1
  1252. package/dist/wxr-taxonomies-DP6ESgMN.mjs +0 -372
  1253. package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +0 -1
  1254. package/dist/zod-generator-D6uE4WiS.mjs +0 -389
  1255. package/dist/zod-generator-D6uE4WiS.mjs.map +0 -1
  1256. package/src/astro/routes/api/relations/[id]/translations.ts +0 -33
  1257. /package/dist/{api-tokens-CE1ECIg0.mjs → api-tokens-FaG1zPsj.mjs} +0 -0
  1258. /package/dist/{ssrf-DpBH7aOt.mjs → ssrf-DZOt8Qof.mjs} +0 -0
@@ -1,1086 +0,0 @@
1
- import { u as __exportAll } from "./runner-1y4J9fJB.mjs";
2
- import { n as isMissingTableError, t as isMissingColumnError } from "./db-errors-CBD5yMro.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 { r as getI18nConfig } from "./config-CvmjJcVw.mjs";
6
- import { getRequestContext } from "./request-context.mjs";
7
- import { o as decodeCursor, s as encodeCursor } from "./types-BkUg2yHx.mjs";
8
- import { i as setRequestCacheEntry } from "./request-cache-DzLYKm_x.mjs";
9
- import { kyselyLogOption } from "./database/instrumentation.mjs";
10
- import { Kysely, sql } from "kysely";
11
-
12
- //#region src/database/repositories/taxonomy-def.ts
13
- /**
14
- * Select definition rows (aliased `d`) with their taxonomy's structure.
15
- * Qualify columns in `where` and `orderBy`: `id` and `name` exist on both tables.
16
- *
17
- * A row that has no group yet, because code without the group table wrote it
18
- * during a rolling deploy, reads its own copy.
19
- */
20
- function selectTaxonomyDefs(db) {
21
- return db.selectFrom("_emdash_taxonomy_defs as d").leftJoin("_emdash_taxonomy_def_groups as g", "g.name", "d.name").select([
22
- "d.id",
23
- "d.name",
24
- "d.label",
25
- "d.label_singular",
26
- "d.created_at",
27
- "d.locale",
28
- "d.translation_group",
29
- sql`coalesce(g.hierarchical, d.hierarchical)`.as("hierarchical"),
30
- sql`coalesce(g.collections, d.collections)`.as("collections")
31
- ]);
32
- }
33
- /**
34
- * The taxonomy's group id and structure, or null when no locale defines `name`.
35
- * A group whose definitions are all gone counts as deleted.
36
- */
37
- async function findTaxonomyStructure(db, name) {
38
- const row = await selectTaxonomyDefs(db).where("d.name", "=", name).orderBy("d.id", "asc").executeTakeFirst();
39
- if (!row) return null;
40
- return {
41
- id: row.translation_group ?? row.id,
42
- hierarchical: row.hierarchical === 1,
43
- collections: parseTaxonomyCollections(row.collections)
44
- };
45
- }
46
- /**
47
- * Write a taxonomy's structure for every locale and return its group id.
48
- *
49
- * Creates the group with `groupId` and `structure` when the name has none. An
50
- * existing group changes only the fields in `overwrite`, so a caller holding an
51
- * older read of the other field does not write it back. Every definition row of
52
- * the name is then linked to the group and copies its values, including rows
53
- * written without it.
54
- */
55
- async function saveTaxonomyStructure(db, name, groupId, structure, overwrite = structure) {
56
- const changes = {};
57
- if (overwrite.hierarchical !== void 0) changes.hierarchical = overwrite.hierarchical ? 1 : 0;
58
- if (overwrite.collections !== void 0) changes.collections = JSON.stringify([...new Set(overwrite.collections)]);
59
- const group = await db.insertInto("_emdash_taxonomy_def_groups").values({
60
- id: groupId,
61
- name,
62
- hierarchical: structure.hierarchical ? 1 : 0,
63
- collections: JSON.stringify([...new Set(structure.collections)])
64
- }).onConflict((oc) => Object.keys(changes).length > 0 ? oc.column("name").doUpdateSet(changes) : oc.column("name").doNothing()).returning([
65
- "id",
66
- "hierarchical",
67
- "collections"
68
- ]).executeTakeFirst() ?? await db.selectFrom("_emdash_taxonomy_def_groups").select([
69
- "id",
70
- "hierarchical",
71
- "collections"
72
- ]).where("name", "=", name).executeTakeFirstOrThrow();
73
- await db.updateTable("_emdash_taxonomy_defs").set({
74
- hierarchical: group.hierarchical,
75
- collections: group.collections,
76
- translation_group: group.id
77
- }).where("name", "=", name).execute();
78
- return group.id;
79
- }
80
- /** Parse a stored `collections` value, skipping anything that isn't a string list. */
81
- function parseTaxonomyCollections(value) {
82
- if (!value) return [];
83
- let parsed;
84
- try {
85
- parsed = JSON.parse(value);
86
- } catch {
87
- return [];
88
- }
89
- if (!Array.isArray(parsed)) return [];
90
- return [...new Set(parsed.filter((entry) => typeof entry === "string"))];
91
- }
92
-
93
- //#endregion
94
- //#region src/page/seo-panel.ts
95
- function seoPanelCacheKey(collection, id) {
96
- return `seo-panel:${collection}:${id}`;
97
- }
98
- /**
99
- * Prime the request-scoped SEO panel cache for a content entry.
100
- *
101
- * Called wherever an entry's folded SEO data materializes: the loader's
102
- * single-entry path (fresh query) and the object-cache revive path in
103
- * `getEmDashEntry` (warm hit, where the loader never runs). No-ops outside
104
- * a request context; never overwrites an already-primed value.
105
- */
106
- function primeSeoPanel(collection, id, seo) {
107
- setRequestCacheEntry(seoPanelCacheKey(collection, id), seo);
108
- }
109
-
110
- //#endregion
111
- //#region src/loader.ts
112
- var loader_exports = /* @__PURE__ */ __exportAll({
113
- CURSOR_RAW_VALUES: () => CURSOR_RAW_VALUES,
114
- FOLDED_BYLINES: () => FOLDED_BYLINES,
115
- FOLDED_BYLINES_EXIST: () => FOLDED_BYLINES_EXIST,
116
- FOLDED_TERMS: () => FOLDED_TERMS,
117
- buildTaxonomyPivotQuery: () => buildTaxonomyPivotQuery,
118
- creditsFromFoldedBylines: () => creditsFromFoldedBylines,
119
- emdashLoader: () => emdashLoader,
120
- getDb: () => getDb,
121
- resetTaxonomyNamesCache: () => resetTaxonomyNamesCache
122
- });
123
- const FIELD_NAME_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
124
- /**
125
- * SEO columns folded into the single-entry query as a single JSON column
126
- * (`_emdash_seo` in the result set), then expanded onto the row under these
127
- * aliases for `extractSeo()`. Surfacing SEO as one aggregated column keeps the
128
- * result-set width bounded regardless of how many fields the collection has,
129
- * which matters for D1: a flat `LEFT JOIN _emdash_seo` adds 5 alias columns to
130
- * every row and pushes wide collections (common after WordPress / ACF imports)
131
- * past D1's per-result-set column limit, surfacing as a silent null entry.
132
- * One JSON column is one column, so the join stays safe at any schema width.
133
- *
134
- * The aliases mirror the strategy used by `foldedHydrationSelects` for byline
135
- * and taxonomy hydration: aggregate in SQL, expand in JS. SEO is 1:1 with
136
- * content, so the subquery uses `json_object` (not the array aggregator).
137
- *
138
- * The `_emdash_` prefix on the aliases guarantees they can never collide with
139
- * a content field. Field slugs must match `/^[a-z][a-z0-9_]*$/`, so a user can
140
- * legitimately define a `seo_title` field; surfacing the SEO column under its
141
- * bare name would shadow that field in the result set and drop the user's
142
- * value. The prefix (illegal as a leading slug char) sidesteps this entirely.
143
- */
144
- const SEO_COLUMN_ALIASES = {
145
- seo_title: "_emdash_seo_title",
146
- seo_description: "_emdash_seo_description",
147
- seo_image: "_emdash_seo_image",
148
- seo_canonical: "_emdash_seo_canonical",
149
- seo_no_index: "_emdash_seo_no_index"
150
- };
151
- /** Aliased SEO result keys — excluded from generic field mapping. */
152
- const SEO_ALIAS_COLUMNS = Object.values(SEO_COLUMN_ALIASES);
153
- /** Folded SEO JSON column name in the result set (expanded onto aliases in JS). */
154
- const SEO_FOLDED_COLUMN = "_emdash_seo";
155
- /** Folded boolean field slugs used to restore SQLite integer values. */
156
- const BOOLEAN_FIELDS_FOLDED_COLUMN = "_emdash_boolean_fields";
157
- /**
158
- * System columns excluded from entry.data
159
- * Note: slug is intentionally NOT excluded - it's useful as data.slug in templates
160
- */
161
- const SYSTEM_COLUMNS = new Set([
162
- "id",
163
- "status",
164
- "author_id",
165
- "primary_byline_id",
166
- "created_at",
167
- "updated_at",
168
- "published_at",
169
- "scheduled_at",
170
- "deleted_at",
171
- "version",
172
- "live_revision_id",
173
- "draft_revision_id",
174
- "locale",
175
- "translation_group",
176
- ...SEO_ALIAS_COLUMNS,
177
- "_emdash_terms",
178
- "_emdash_bylines",
179
- "_emdash_bylines_exist",
180
- SEO_FOLDED_COLUMN,
181
- BOOLEAN_FIELDS_FOLDED_COLUMN
182
- ]);
183
- /** Markers for byline/taxonomy hydration folded into the content query. */
184
- const FOLDED_TERMS = Symbol.for("emdash:foldedTerms");
185
- const FOLDED_BYLINES = Symbol.for("emdash:foldedBylines");
186
- /**
187
- * Marker for whether `_emdash_bylines` has any rows at all (`false` = table
188
- * empty). Lets byline hydration trust an empty fold instead of re-checking
189
- * via the byline query path on sites that never use bylines.
190
- */
191
- const FOLDED_BYLINES_EXIST = Symbol.for("emdash:foldedBylinesExist");
192
- /**
193
- * Correlated JSON-array subqueries that fold taxonomy-term and byline hydration
194
- * into the content query, removing the two separate hydration round trips per
195
- * fetch. `outer` is the content table's alias/name; each subquery correlates on
196
- * `<outer>.id`, so the base query stays one row per entry (no join fan-out, no
197
- * duplicated content payload). Order is NOT applied in the aggregate (it differs
198
- * across dialects) — the consumer sorts terms by label and credits by sortOrder.
199
- *
200
- * Dialect-specific aggregation: SQLite `json_group_array`/`json_object` returns
201
- * a JSON *string*; Postgres `json_agg`/`json_build_object` (coalesced to `[]`)
202
- * returns parsed JSON. {@link stashFolded} handles both.
203
- */
204
- function foldedHydrationSelects(db, type, outer) {
205
- const o = sql.ref(outer);
206
- const pg = isPostgres(db);
207
- const obj = (pairs) => pg ? sql.raw(`json_build_object(${pairs})`) : sql.raw(`json_object(${pairs})`);
208
- const agg = (inner) => pg ? sql`coalesce(json_agg(${inner}), '[]'::json)` : sql`json_group_array(${inner})`;
209
- const foldJoin = pg ? sql`JOIN` : sql`CROSS JOIN`;
210
- 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)");
211
- const defaultLocale = getI18nConfig()?.defaultLocale ?? "en";
212
- const selectedTermId = sql`coalesce(exact_term.id, default_term.id)`;
213
- const terms = sql`(SELECT ${pg ? sql`coalesce(json_agg(${termObj}) FILTER (WHERE ${selectedTermId} IS NOT NULL), '[]'::json)` : sql`json_group_array(${termObj}) FILTER (WHERE ${selectedTermId} IS NOT NULL)`} 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")}`;
214
- 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");
215
- return {
216
- terms,
217
- bylines: sql`(SELECT ${agg(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})`)} 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")}`,
218
- bylinesExist: sql`(SELECT 1 FROM ${sql.ref("_emdash_bylines")} LIMIT 1) AS ${sql.ref("_emdash_bylines_exist")}`
219
- };
220
- }
221
- /**
222
- * Correlated JSON-object subquery that folds per-entry SEO into the content
223
- * query without widening the result set: 1 row of `_emdash_seo` becomes 1 JSON
224
- * column rather than 5 flat columns. The JSON column is expanded onto the row
225
- * via {@link expandFoldedSeo} after the query runs, preserving the alias keys
226
- * that {@link extractSeo} reads. Missing SEO row (no entry in `_emdash_seo`)
227
- * yields NULL, which {@link expandFoldedSeo} treats as "no SEO" - identical to
228
- * the prior LEFT JOIN miss behavior.
229
- *
230
- * Dialect-specific aggregation mirrors {@link foldedHydrationSelects}: SQLite
231
- * `json_object` returns a JSON *string*, Postgres `json_build_object` returns
232
- * parsed JSON; both branches are handled in expansion.
233
- */
234
- function foldedSeoSelect(db, type, outer) {
235
- const o = sql.ref(outer);
236
- const pg = isPostgres(db);
237
- 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";
238
- 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)}`;
239
- }
240
- function foldedBooleanFieldsSelect(db, type) {
241
- return sql`(
242
- SELECT ${isPostgres(db) ? sql`coalesce(json_agg(f.slug), '[]'::json)` : sql`json_group_array(f.slug)`}
243
- FROM ${sql.ref("_emdash_fields")} AS f
244
- INNER JOIN ${sql.ref("_emdash_collections")} AS c ON c.id = f.collection_id
245
- WHERE c.slug = ${type} AND f.type = ${"boolean"}
246
- ) AS ${sql.ref(BOOLEAN_FIELDS_FOLDED_COLUMN)}`;
247
- }
248
- /**
249
- * Expand the folded `_emdash_seo` JSON column onto the row using SEO_COLUMN_ALIASES,
250
- * so {@link extractSeo} reads it transparently. SQLite returns a JSON string
251
- * (parse it); Postgres returns already-parsed JSON. Missing/malformed/null is
252
- * a no-op: {@link extractSeo} returns null when the aliases are absent.
253
- */
254
- function isPlainObject(value) {
255
- return !!value && typeof value === "object" && !Array.isArray(value);
256
- }
257
- function expandFoldedSeo(row) {
258
- const raw = row[SEO_FOLDED_COLUMN];
259
- delete row[SEO_FOLDED_COLUMN];
260
- let parsed = null;
261
- if (typeof raw === "string") try {
262
- const candidate = JSON.parse(raw);
263
- if (isPlainObject(candidate)) parsed = candidate;
264
- } catch {
265
- return;
266
- }
267
- else if (isPlainObject(raw)) parsed = raw;
268
- if (!parsed) return;
269
- for (const [col, alias] of Object.entries(SEO_COLUMN_ALIASES)) row[alias] = parsed[col] ?? null;
270
- }
271
- function creditsFromFoldedBylines(folded) {
272
- return folded.map((raw) => {
273
- const credit = isPlainObject(raw) ? raw : {};
274
- const byline = isPlainObject(credit.byline) ? credit.byline : {};
275
- return {
276
- roleLabel: typeof credit.roleLabel === "string" ? credit.roleLabel : null,
277
- sortOrder: Number(credit.sortOrder ?? 0),
278
- source: "explicit",
279
- byline: {
280
- ...byline,
281
- isGuest: Boolean(byline.isGuest),
282
- customFields: {}
283
- }
284
- };
285
- }).toSorted((a, b) => a.sortOrder - b.sortOrder);
286
- }
287
- /**
288
- * Stash folded hydration JSON (non-enumerable) for the query.ts fast paths.
289
- * SQLite returns a JSON string (parse it); Postgres returns already-parsed JSON.
290
- */
291
- function stashFolded(data, row) {
292
- for (const [col, sym] of [["_emdash_terms", FOLDED_TERMS], ["_emdash_bylines", FOLDED_BYLINES]]) {
293
- const raw = row[col];
294
- let value;
295
- if (typeof raw === "string") try {
296
- value = JSON.parse(raw);
297
- } catch {
298
- continue;
299
- }
300
- else if (Array.isArray(raw)) value = raw;
301
- else continue;
302
- Object.defineProperty(data, sym, {
303
- value,
304
- enumerable: false,
305
- configurable: true
306
- });
307
- }
308
- if ("_emdash_bylines_exist" in row) Object.defineProperty(data, FOLDED_BYLINES_EXIST, {
309
- value: row["_emdash_bylines_exist"] != null,
310
- enumerable: false,
311
- configurable: true
312
- });
313
- const foldedBylines = Reflect.get(data, FOLDED_BYLINES);
314
- if (!Array.isArray(foldedBylines)) return;
315
- const credits = creditsFromFoldedBylines(foldedBylines);
316
- data.bylines = credits;
317
- data.byline = credits[0]?.byline ?? null;
318
- }
319
- /**
320
- * Build a `data.seo` object from the joined `_emdash_seo` columns on a row.
321
- *
322
- * Returns `null` when no SEO row exists (LEFT JOIN miss → `seo_no_index` is
323
- * NULL, since the column is `NOT NULL DEFAULT 0` whenever a row is present).
324
- * Returning null keeps the `seo` key off entries that have none, so
325
- * `getSeoMeta()` falls back to its defaults exactly as before.
326
- */
327
- function extractSeo(row) {
328
- const noIndex = row[SEO_COLUMN_ALIASES.seo_no_index];
329
- if (noIndex === null || noIndex === void 0) return null;
330
- const title = row[SEO_COLUMN_ALIASES.seo_title];
331
- const description = row[SEO_COLUMN_ALIASES.seo_description];
332
- const image = row[SEO_COLUMN_ALIASES.seo_image];
333
- const canonical = row[SEO_COLUMN_ALIASES.seo_canonical];
334
- return {
335
- title: typeof title === "string" ? title : null,
336
- description: typeof description === "string" ? description : null,
337
- image: typeof image === "string" ? image : null,
338
- canonical: typeof canonical === "string" ? canonical : null,
339
- noIndex: noIndex === 1
340
- };
341
- }
342
- /**
343
- * Get the table name for a collection type
344
- */
345
- function getTableName(type) {
346
- validateIdentifier(type, "collection type");
347
- return `ec_${type}`;
348
- }
349
- const TAXONOMY_NAMES_CACHE_KEY = Symbol.for("emdash:taxonomy-names");
350
- const taxonomyNamesStore = globalThis;
351
- const taxonomyNamesHolder = taxonomyNamesStore[TAXONOMY_NAMES_CACHE_KEY] ?? (() => {
352
- const holder = { cache: null };
353
- taxonomyNamesStore[TAXONOMY_NAMES_CACHE_KEY] = holder;
354
- return holder;
355
- })();
356
- function setTaxonomyNamesCache(cache) {
357
- taxonomyNamesHolder.cache = cache;
358
- }
359
- /**
360
- * Get taxonomy names attached to a collection (cached for the primary DB,
361
- * bypassed only when the per-request DB is an isolated instance — playground /
362
- * DO preview). Plain D1 Sessions routing shares schema with the singleton, so
363
- * the isolate-wide cache stays valid.
364
- */
365
- async function getTaxonomyNames(db, collection) {
366
- const hasIsolatedDb = getRequestContext()?.dbIsIsolated === true;
367
- if (!hasIsolatedDb && taxonomyNamesHolder.cache) return taxonomyNamesHolder.cache.get(collection) ?? /* @__PURE__ */ new Set();
368
- try {
369
- const defs = await selectTaxonomyDefs(db).execute();
370
- const namesByCollection = /* @__PURE__ */ new Map();
371
- for (const def of defs) {
372
- let collections;
373
- try {
374
- collections = JSON.parse(def.collections ?? "[]");
375
- } catch {
376
- continue;
377
- }
378
- if (!Array.isArray(collections)) continue;
379
- for (const attachedCollection of collections) {
380
- if (typeof attachedCollection !== "string") continue;
381
- const names = namesByCollection.get(attachedCollection) ?? /* @__PURE__ */ new Set();
382
- names.add(def.name);
383
- namesByCollection.set(attachedCollection, names);
384
- }
385
- }
386
- if (!hasIsolatedDb) setTaxonomyNamesCache(namesByCollection);
387
- return namesByCollection.get(collection) ?? /* @__PURE__ */ new Set();
388
- } catch (error) {
389
- if (!isMissingTableError(error) && !isMissingColumnError(error)) throw error;
390
- const empty = /* @__PURE__ */ new Set();
391
- if (!hasIsolatedDb) setTaxonomyNamesCache(/* @__PURE__ */ new Map());
392
- return empty;
393
- }
394
- }
395
- /**
396
- * Reset the isolate-wide taxonomy-names cache.
397
- *
398
- * Called from `invalidateTaxonomyDefsCache()` so that creating or seeding a
399
- * taxonomy definition is reflected within the current isolate instead of
400
- * waiting for the isolate to recycle. Keeps this cache consistent with the
401
- * isolate-wide taxonomy-defs cache in `taxonomies/index.ts`.
402
- */
403
- function resetTaxonomyNamesCache() {
404
- setTaxonomyNamesCache(null);
405
- }
406
- /**
407
- * System columns to include in data (mapped to camelCase where needed)
408
- */
409
- const INCLUDE_IN_DATA = {
410
- id: "id",
411
- status: "status",
412
- author_id: "authorId",
413
- primary_byline_id: "primaryBylineId",
414
- created_at: "createdAt",
415
- updated_at: "updatedAt",
416
- published_at: "publishedAt",
417
- scheduled_at: "scheduledAt",
418
- draft_revision_id: "draftRevisionId",
419
- live_revision_id: "liveRevisionId",
420
- locale: "locale",
421
- translation_group: "translationGroup"
422
- };
423
- /** System date columns that should be converted to Date objects */
424
- const DATE_COLUMNS = new Set([
425
- "created_at",
426
- "updated_at",
427
- "published_at",
428
- "scheduled_at"
429
- ]);
430
- /**
431
- * Hidden, symbol-keyed property on each mapped data record carrying the raw
432
- * DB string for every date column. Lets cursor encoders downstream reproduce
433
- * the loader's exact `nextCursor` format without round-tripping through
434
- * `new Date()`, which loses precision for stored values that aren't already
435
- * ISO-with-milliseconds (e.g. `2026-01-01T00:00:00Z` becomes
436
- * `2026-01-01T00:00:00.000Z`).
437
- */
438
- const CURSOR_RAW_VALUES = Symbol("emdash:cursorRawValues");
439
- const LOCAL_MEDIA_FILE_PREFIX = "/_emdash/api/media/file/";
440
- const URL_SCHEME_PATTERN = /^[a-zA-Z][a-zA-Z\d+\-.]*:/;
441
- /** Safely extract a string value from a record, returning fallback if not a string */
442
- function rowStr(row, key, fallback = "") {
443
- const val = row[key];
444
- return typeof val === "string" ? val : fallback;
445
- }
446
- function isRecord(value) {
447
- return typeof value === "object" && value !== null && !Array.isArray(value);
448
- }
449
- function isBareMediaKey(src) {
450
- return !src.startsWith("/") && !URL_SCHEME_PATTERN.test(src);
451
- }
452
- function normalizeLocalMediaValue(value) {
453
- if (Array.isArray(value)) return value.map(normalizeLocalMediaValue);
454
- if (!isRecord(value)) return value;
455
- const normalized = {};
456
- for (const [key, child] of Object.entries(value)) normalized[key] = normalizeLocalMediaValue(child);
457
- if (normalized.provider === "local" && typeof normalized.src === "string" && normalized.src.length > 0) {
458
- const src = normalized.src;
459
- if (src.startsWith(LOCAL_MEDIA_FILE_PREFIX)) {
460
- const id = src.slice(24);
461
- if (!normalized.id && id) normalized.id = id;
462
- } else if (isBareMediaKey(src)) {
463
- if (!normalized.id) normalized.id = src;
464
- normalized.src = `${LOCAL_MEDIA_FILE_PREFIX}${src}`;
465
- }
466
- }
467
- return normalized;
468
- }
469
- /**
470
- * Map a database row to entry data
471
- * Extracts content fields (non-system columns) and parses JSON where needed.
472
- * System columns needed for templates (id, status, dates) are included with camelCase names.
473
- */
474
- function mapRowToData(row, booleanFields) {
475
- const data = {};
476
- const rawDateValues = {};
477
- for (const [key, value] of Object.entries(row)) {
478
- if (key in INCLUDE_IN_DATA) {
479
- if (DATE_COLUMNS.has(key)) if (typeof value === "string") {
480
- rawDateValues[key] = value;
481
- data[INCLUDE_IN_DATA[key]] = new Date(value);
482
- } else data[INCLUDE_IN_DATA[key]] = null;
483
- else data[INCLUDE_IN_DATA[key]] = value;
484
- continue;
485
- }
486
- if (SYSTEM_COLUMNS.has(key)) continue;
487
- if (booleanFields.has(key) && (typeof value === "boolean" || value === 0 || value === 1)) {
488
- data[key] = Boolean(value);
489
- continue;
490
- }
491
- if (typeof value === "string") try {
492
- if (value.startsWith("{") || value.startsWith("[")) data[key] = normalizeLocalMediaValue(JSON.parse(value));
493
- else data[key] = value;
494
- } catch {
495
- data[key] = value;
496
- }
497
- else data[key] = value;
498
- }
499
- Object.defineProperty(data, CURSOR_RAW_VALUES, {
500
- value: rawDateValues,
501
- enumerable: false,
502
- configurable: false,
503
- writable: false
504
- });
505
- return data;
506
- }
507
- function parseFoldedBooleanFields(row) {
508
- const raw = row?.[BOOLEAN_FIELDS_FOLDED_COLUMN];
509
- let values;
510
- if (typeof raw === "string") try {
511
- values = JSON.parse(raw);
512
- } catch {
513
- return /* @__PURE__ */ new Set();
514
- }
515
- else values = raw;
516
- if (!Array.isArray(values)) return /* @__PURE__ */ new Set();
517
- return new Set(values.filter((value) => typeof value === "string"));
518
- }
519
- /**
520
- * Map revision data (already-parsed JSON object) to entry data.
521
- * Strips _-prefixed metadata keys (e.g. _slug) used internally by revisions.
522
- */
523
- function mapRevisionData(data, booleanFields) {
524
- const result = {};
525
- for (const [key, value] of Object.entries(data)) {
526
- if (key.startsWith("_")) continue;
527
- if (booleanFields.has(key) && (typeof value === "boolean" || value === 0 || value === 1)) {
528
- result[key] = Boolean(value);
529
- continue;
530
- }
531
- result[key] = normalizeLocalMediaValue(value);
532
- }
533
- return result;
534
- }
535
- let virtualConfig;
536
- let virtualCreateDialect;
537
- async function loadVirtualModules() {
538
- if (virtualConfig === void 0) virtualConfig = (await import("virtual:emdash/config")).default;
539
- if (virtualCreateDialect === void 0) virtualCreateDialect = (await import("virtual:emdash/dialect")).createDialect;
540
- }
541
- /**
542
- * Get the primary sort field from an orderBy spec (first valid field, or default).
543
- */
544
- function getPrimarySort(orderBy, tablePrefix) {
545
- if (orderBy) {
546
- for (const [field, direction] of Object.entries(orderBy)) if (FIELD_NAME_PATTERN.test(field)) return {
547
- field: tablePrefix ? `${tablePrefix}.${field}` : field,
548
- direction
549
- };
550
- }
551
- return {
552
- field: tablePrefix ? `${tablePrefix}.created_at` : "created_at",
553
- direction: "desc"
554
- };
555
- }
556
- /**
557
- * Build ORDER BY clause from orderBy spec
558
- * Validates field names to prevent SQL injection (alphanumeric + underscore only)
559
- * Supports multiple sort fields in object key order
560
- */
561
- function buildOrderByClause(orderBy, tablePrefix) {
562
- if (!orderBy || Object.keys(orderBy).length === 0) {
563
- const field = tablePrefix ? `${tablePrefix}.created_at` : "created_at";
564
- return sql`ORDER BY ${sql.ref(field)} DESC, ${sql.ref(tablePrefix ? `${tablePrefix}.id` : "id")} DESC`;
565
- }
566
- const sortParts = [];
567
- for (const [field, direction] of Object.entries(orderBy)) {
568
- if (!FIELD_NAME_PATTERN.test(field)) continue;
569
- const fullField = tablePrefix ? `${tablePrefix}.${field}` : field;
570
- const dir = direction === "asc" ? sql`ASC` : sql`DESC`;
571
- sortParts.push(sql`${sql.ref(fullField)} ${dir}`);
572
- }
573
- if (sortParts.length === 0) {
574
- const defaultField = tablePrefix ? `${tablePrefix}.created_at` : "created_at";
575
- return sql`ORDER BY ${sql.ref(defaultField)} DESC, ${sql.ref(tablePrefix ? `${tablePrefix}.id` : "id")} DESC`;
576
- }
577
- const primary = getPrimarySort(orderBy, tablePrefix);
578
- const idField = tablePrefix ? `${tablePrefix}.id` : "id";
579
- const idDir = primary.direction === "asc" ? sql`ASC` : sql`DESC`;
580
- sortParts.push(sql`${sql.ref(idField)} ${idDir}`);
581
- return sql`ORDER BY ${sql.join(sortParts, sql`, `)}`;
582
- }
583
- /**
584
- * Build a cursor WHERE condition for keyset pagination.
585
- * Uses the primary sort field + id as tiebreaker for stable ordering.
586
- *
587
- * Throws `InvalidCursorError` if the cursor is malformed; callers should
588
- * let this propagate so users see a real error rather than silently
589
- * falling back to the first page.
590
- */
591
- function buildCursorCondition(cursor, orderBy, tablePrefix) {
592
- const { orderValue, id: cursorId } = decodeCursor(cursor);
593
- const primary = getPrimarySort(orderBy, tablePrefix);
594
- const idField = tablePrefix ? `${tablePrefix}.id` : "id";
595
- if (primary.direction === "desc") return sql`(${sql.ref(primary.field)} < ${orderValue} OR (${sql.ref(primary.field)} = ${orderValue} AND ${sql.ref(idField)} < ${cursorId}))`;
596
- return sql`(${sql.ref(primary.field)} > ${orderValue} OR (${sql.ref(primary.field)} = ${orderValue} AND ${sql.ref(idField)} > ${cursorId}))`;
597
- }
598
- /** Type guard: is the where value a range object (not a string or array)? */
599
- function isWhereRange(value) {
600
- return value !== null && typeof value === "object" && !Array.isArray(value);
601
- }
602
- /**
603
- * Build AND conditions for non-taxonomy field filters.
604
- * Returns an array of sql fragments; empty if no field filters apply.
605
- * Field names are validated against FIELD_NAME_PATTERN to prevent injection.
606
- */
607
- function buildFieldConditions(fields, tablePrefix) {
608
- const conditions = [];
609
- for (const [key, value] of Object.entries(fields)) {
610
- if (!FIELD_NAME_PATTERN.test(key)) {
611
- console.warn(`[emdash] where filter: invalid field name "${key}" ignored`);
612
- continue;
613
- }
614
- if (value == null) continue;
615
- const ref = tablePrefix ? sql.ref(`${tablePrefix}.${key}`) : sql.ref(key);
616
- if (isWhereRange(value)) {
617
- if (value.gt !== void 0) conditions.push(sql`${ref} > ${value.gt}`);
618
- if (value.gte !== void 0) conditions.push(sql`${ref} >= ${value.gte}`);
619
- if (value.lt !== void 0) conditions.push(sql`${ref} < ${value.lt}`);
620
- if (value.lte !== void 0) conditions.push(sql`${ref} <= ${value.lte}`);
621
- } else if (Array.isArray(value)) {
622
- if (value.length > 0) conditions.push(sql`${ref} IN (${sql.join(value.map((v) => sql`${v}`))})`);
623
- } else conditions.push(sql`${ref} = ${value}`);
624
- }
625
- return conditions;
626
- }
627
- /**
628
- * Resolve a taxonomy filter (`name` + one or more `slug`s, optionally scoped to
629
- * `locale`) to the set of `translation_group`s the pivot stores in
630
- * `content_taxonomies.taxonomy_id`. Exact terms only — no subtree expansion.
631
- *
632
- * Mirrors the meaning of the old EXISTS join (`t.name = ? AND t.slug IN (?)
633
- * [AND t.locale = ?]`): a pivot row matches when its group has a term with that
634
- * name/slug in the active locale. Resolving to explicit values (rather than an
635
- * `IN (subquery)`) keeps the single-term case a plain equality on the pivot
636
- * index, which is what gives the clean early-`LIMIT` seek.
637
- */
638
- async function resolveTermGroups(db, name, slugs, locale) {
639
- let query = db.selectFrom("taxonomies").select("translation_group").distinct().where("name", "=", name).where("slug", "in", slugs);
640
- if (locale) query = query.where("locale", "=", locale);
641
- const rows = await query.execute();
642
- const groups = /* @__PURE__ */ new Set();
643
- for (const row of rows) if (row.translation_group) groups.add(row.translation_group);
644
- return [...groups];
645
- }
646
- /** Equality (single) or `IN` (multiple) condition on a pivot group column. */
647
- function pivotGroupCondition(ref, groups) {
648
- if (groups.length === 1) return sql`${sql.ref(ref)} = ${groups[0]}`;
649
- return sql`${sql.ref(ref)} IN (${sql.join(groups.map((g) => sql`${g}`))})`;
650
- }
651
- /** LIMIT/OFFSET fragment matching the loader's single-table variant. */
652
- function buildPivotLimitOffset(db, fetchLimit, offset) {
653
- if (fetchLimit != null && offset != null) return sql`LIMIT ${fetchLimit} OFFSET ${offset}`;
654
- if (fetchLimit != null) return sql`LIMIT ${fetchLimit}`;
655
- if (offset != null) return isPostgres(db) ? sql`OFFSET ${offset}` : sql`LIMIT -1 OFFSET ${offset}`;
656
- return sql``;
657
- }
658
- /**
659
- * Build the pivot-driven taxonomy listing query (#1834).
660
- *
661
- * Drives from the term pivot and joins content translations through their
662
- * shared translation_group. Content columns remain authoritative for locale,
663
- * visibility, sorting, and cursor predicates.
664
- *
665
- * Two shapes:
666
- * - **Indexed sort** (`published_at`/`created_at`, single sort field): the
667
- * `LIMIT` lives in `picked`.
668
- * - **Temp-sort** (`updated_at` or any other field, or multi-field sort): no
669
- * pivot sort index applies, so `picked` collects the tagged candidate set and
670
- * the outer query sorts the joined rows. Bounded to tagged rows — no
671
- * `ec_*` full scan — but no early-`LIMIT`.
672
- */
673
- function buildTaxonomyPivotQuery(opts) {
674
- const { db, collection, tableName, groupSets, orderBy, cursor, locale, status, deletedIsNull, bylineGroups, fetchLimit, offset } = opts;
675
- const primary = getPrimarySort(orderBy);
676
- const isIndexedSort = (orderBy ? Object.keys(orderBy).filter((k) => FIELD_NAME_PATTERN.test(k)) : []).length <= 1 && (primary.field === "published_at" || primary.field === "created_at");
677
- const dir = primary.direction === "asc" ? sql`ASC` : sql`DESC`;
678
- const cmp = primary.direction === "asc" ? sql.raw(">") : sql.raw("<");
679
- const firstGroups = groupSets[0] ?? [];
680
- const restGroups = groupSets.slice(1);
681
- const multiGroup = firstGroups.length > 1;
682
- const residual = restGroups.length > 0 ? sql`${sql.join(restGroups.map((g) => sql`AND EXISTS (
683
- SELECT 1 FROM content_taxonomies ct2
684
- WHERE ct2.collection = ${collection}
685
- AND ct2.entry_id = ct.entry_id
686
- AND ${pivotGroupCondition("ct2.taxonomy_id", g)}
687
- )`), sql` `)}` : sql``;
688
- const bylineCt = bylineGroups ? sql`AND EXISTS (
689
- SELECT 1 FROM _emdash_content_bylines cb
690
- WHERE cb.collection_slug = ${collection}
691
- AND cb.content_id = r.id
692
- AND cb.byline_id IN (${sql.join(bylineGroups.map((g) => sql`${g}`))})
693
- )` : sql``;
694
- const firstGroupCond = pivotGroupCondition("ct.taxonomy_id", firstGroups);
695
- const pivotContentJoin = sql`JOIN`;
696
- const { terms: termsSelect, bylines: bylinesSelect, bylinesExist: bylinesExistSelect } = foldedHydrationSelects(db, collection, "r");
697
- const booleanFieldsSelect = foldedBooleanFieldsSelect(db, collection);
698
- const deletedR = deletedIsNull ? sql`r.deleted_at IS NULL` : sql`r.deleted_at IS NOT NULL`;
699
- const statusR = status !== void 0 ? sql`AND ${buildStatusCondition(db, status, "r")}` : sql``;
700
- const localeR = locale ? sql`AND r.locale = ${locale}` : sql``;
701
- if (isIndexedSort) {
702
- const sortRef = sql.ref(`r.${primary.field}`);
703
- const sortval = multiGroup ? sql`MAX(${sortRef})` : sortRef;
704
- const groupByClause = multiGroup ? sql`GROUP BY r.id` : sql``;
705
- let cursorClause = sql``;
706
- let havingClause = sql``;
707
- if (cursor) {
708
- const { orderValue, id } = decodeCursor(cursor);
709
- const cond = sql`(${sortval} ${cmp} ${orderValue} OR (${sortval} = ${orderValue} AND r.id ${cmp} ${id}))`;
710
- if (multiGroup) havingClause = sql`HAVING ${cond}`;
711
- else cursorClause = sql`AND ${cond}`;
712
- }
713
- const limitClause = buildPivotLimitOffset(db, fetchLimit, offset);
714
- return sql`
715
- WITH picked AS (
716
- SELECT r.id AS entry_id, ${sortval} AS sortval
717
- FROM content_taxonomies ct
718
- ${pivotContentJoin} ${sql.ref(tableName)} AS r ON r.translation_group = ct.entry_id
719
- WHERE ct.collection = ${collection}
720
- AND ${firstGroupCond}
721
- AND ${deletedR}
722
- ${statusR}
723
- ${localeR}
724
- ${residual}
725
- ${bylineCt}
726
- ${cursorClause}
727
- ${groupByClause}
728
- ${havingClause}
729
- ORDER BY sortval ${dir}, r.id ${dir}
730
- ${limitClause}
731
- )
732
- SELECT r.*, ${termsSelect}, ${bylinesSelect}, ${bylinesExistSelect}, ${booleanFieldsSelect}
733
- FROM picked JOIN ${sql.ref(tableName)} AS r ON r.id = picked.entry_id
734
- WHERE ${deletedR} ${statusR} ${localeR}
735
- ORDER BY picked.sortval ${dir}, picked.entry_id ${dir}
736
- `;
737
- }
738
- const orderByClause = buildOrderByClause(orderBy, "r");
739
- const cursorCond = cursor ? sql`AND ${buildCursorCondition(cursor, orderBy, "r")}` : sql``;
740
- const limitClause = buildPivotLimitOffset(db, fetchLimit, offset);
741
- return sql`
742
- WITH picked AS (
743
- SELECT DISTINCT r.id AS entry_id
744
- FROM content_taxonomies ct
745
- ${pivotContentJoin} ${sql.ref(tableName)} AS r ON r.translation_group = ct.entry_id
746
- WHERE ct.collection = ${collection}
747
- AND ${firstGroupCond}
748
- AND ${deletedR}
749
- ${statusR}
750
- ${localeR}
751
- ${residual}
752
- ${bylineCt}
753
- )
754
- SELECT r.*, ${termsSelect}, ${bylinesSelect}, ${bylinesExistSelect}, ${booleanFieldsSelect}
755
- FROM picked JOIN ${sql.ref(tableName)} AS r ON r.id = picked.entry_id
756
- WHERE ${deletedR} ${statusR} ${localeR}
757
- ${cursorCond}
758
- ${orderByClause}
759
- ${limitClause}
760
- `;
761
- }
762
- let dbInstance = null;
763
- /**
764
- * Get the database instance. Used by query wrapper functions and middleware.
765
- *
766
- * Checks the ALS request context first — if a per-request DB override is set
767
- * (e.g. by DO preview middleware), it takes precedence over the module-level
768
- * cached instance. This allows preview mode to route queries to an isolated
769
- * Durable Object database without modifying any calling code.
770
- *
771
- * Initializes the default database on first call using config from virtual module.
772
- */
773
- async function getDb() {
774
- const ctx = getRequestContext();
775
- if (ctx?.db) return ctx.db;
776
- if (!dbInstance) {
777
- await loadVirtualModules();
778
- if (!virtualConfig?.database || typeof virtualCreateDialect !== "function") throw new Error("EmDash database not configured. Add database config to emdash() in astro.config.mjs");
779
- dbInstance = new Kysely({
780
- dialect: virtualCreateDialect(virtualConfig.database.config),
781
- log: kyselyLogOption()
782
- });
783
- }
784
- return dbInstance;
785
- }
786
- /**
787
- * Create an EmDash Live Collections loader
788
- *
789
- * This loader handles ALL content types in a single Astro collection.
790
- * Use `getEmDashCollection()` and `getEmDashEntry()` to query
791
- * specific content types.
792
- *
793
- * Database is configured in astro.config.mjs via the emdash() integration.
794
- *
795
- * @example
796
- * ```ts
797
- * // src/live.config.ts
798
- * import { defineLiveCollection } from "astro:content";
799
- * import { emdashLoader } from "emdash";
800
- *
801
- * export const collections = {
802
- * emdash: defineLiveCollection({
803
- * loader: emdashLoader(),
804
- * }),
805
- * };
806
- * ```
807
- */
808
- function emdashLoader() {
809
- return {
810
- name: "emdash",
811
- async loadCollection({ filter }) {
812
- try {
813
- const db = await getDb();
814
- const type = filter?.type;
815
- if (!type) return { error: /* @__PURE__ */ new Error("type filter is required. Use getEmDashCollection() instead of getLiveCollection() directly.") };
816
- const tableName = getTableName(type);
817
- const status = filter?.status || "published";
818
- const limit = filter?.limit;
819
- const cursor = filter?.cursor;
820
- const where = filter?.where;
821
- const orderBy = filter?.orderBy;
822
- const locale = filter?.locale;
823
- const fetchLimit = limit ? limit + 1 : void 0;
824
- const rawOffset = cursor ? void 0 : filter?.offset;
825
- const offset = typeof rawOffset === "number" && Number.isInteger(rawOffset) && rawOffset > 0 ? rawOffset : void 0;
826
- const cursorCondition = cursor ? buildCursorCondition(cursor, orderBy) : null;
827
- let result;
828
- const taxonomyFilters = [];
829
- let bylineFilter = null;
830
- const fieldFilters = {};
831
- if (where && Object.keys(where).length > 0) {
832
- const taxNames = await getTaxonomyNames(db, type);
833
- for (const [key, value] of Object.entries(where)) {
834
- if (value == null) continue;
835
- if (key === "byline") {
836
- if (isWhereRange(value)) {
837
- console.warn(`[emdash] where filter: range operators are not supported on "byline", ignored`);
838
- continue;
839
- }
840
- bylineFilter = { groups: Array.isArray(value) ? value : [value] };
841
- } else if (taxNames.has(key)) {
842
- if (isWhereRange(value)) {
843
- console.warn(`[emdash] where filter: range operators are not supported on taxonomy "${key}", ignored`);
844
- continue;
845
- }
846
- const slugs = Array.isArray(value) ? value : [value];
847
- taxonomyFilters.push({
848
- name: key,
849
- slugs
850
- });
851
- } else fieldFilters[key] = value;
852
- }
853
- }
854
- if (bylineFilter && bylineFilter.groups.length === 0 || taxonomyFilters.some((f) => f.slugs.length === 0)) return {
855
- entries: [],
856
- cacheHint: { tags: [type] }
857
- };
858
- if (taxonomyFilters.length > 0 && Object.keys(fieldFilters).length === 0) {
859
- const groupSets = [];
860
- for (const taxFilter of taxonomyFilters) {
861
- const groups = await resolveTermGroups(db, taxFilter.name, taxFilter.slugs, locale);
862
- if (groups.length === 0) return {
863
- entries: [],
864
- cacheHint: { tags: [type] }
865
- };
866
- groupSets.push(groups);
867
- }
868
- result = await buildTaxonomyPivotQuery({
869
- db,
870
- collection: type,
871
- tableName,
872
- groupSets,
873
- orderBy,
874
- cursor,
875
- locale,
876
- status,
877
- deletedIsNull: true,
878
- bylineGroups: bylineFilter ? bylineFilter.groups : null,
879
- fetchLimit,
880
- offset
881
- }).execute(db);
882
- } else {
883
- const orderByClause = buildOrderByClause(orderBy);
884
- const statusCondition = buildStatusCondition(db, status);
885
- const localeFilter = locale ? sql`AND locale = ${locale}` : sql``;
886
- const cursorCond = cursorCondition ? sql`AND ${cursorCondition}` : sql``;
887
- const fieldConds = buildFieldConditions(fieldFilters);
888
- const fieldCondsSQL = fieldConds.length > 0 ? sql`${sql.join(fieldConds, sql` AND `)}` : null;
889
- const taxonomyCond = taxonomyFilters.length > 0 ? sql`${sql.join(taxonomyFilters.map((f) => sql`AND EXISTS (
890
- SELECT 1 FROM content_taxonomies ct
891
- INNER JOIN taxonomies t ON t.translation_group = ct.taxonomy_id
892
- WHERE ct.collection = ${type}
893
- AND ct.entry_id = ${sql.ref(tableName)}.translation_group
894
- AND t.name = ${f.name}
895
- AND t.slug IN (${sql.join(f.slugs.map((s) => sql`${s}`))})
896
- ${locale ? sql`AND t.locale = ${locale}` : sql``}
897
- )`), sql` `)}` : sql``;
898
- const bylineCond = bylineFilter ? sql`AND EXISTS (
899
- SELECT 1 FROM _emdash_content_bylines cb
900
- WHERE cb.collection_slug = ${type}
901
- AND cb.content_id = ${sql.ref(tableName)}.id
902
- AND cb.byline_id IN (${sql.join(bylineFilter.groups.map((g) => sql`${g}`))})
903
- )` : sql``;
904
- const { terms: termsSelect, bylines: bylinesSelect, bylinesExist: bylinesExistSelect } = foldedHydrationSelects(db, type, tableName);
905
- const booleanFieldsSelect = foldedBooleanFieldsSelect(db, type);
906
- let limitOffsetClause = sql``;
907
- if (fetchLimit != null && offset != null) limitOffsetClause = sql`LIMIT ${fetchLimit} OFFSET ${offset}`;
908
- else if (fetchLimit != null) limitOffsetClause = sql`LIMIT ${fetchLimit}`;
909
- else if (offset != null) limitOffsetClause = isPostgres(db) ? sql`OFFSET ${offset}` : sql`LIMIT -1 OFFSET ${offset}`;
910
- result = await sql`
911
- SELECT *, ${termsSelect}, ${bylinesSelect}, ${bylinesExistSelect}, ${booleanFieldsSelect} FROM ${sql.ref(tableName)}
912
- WHERE deleted_at IS NULL
913
- AND ${statusCondition}
914
- ${localeFilter}
915
- ${cursorCond}
916
- ${taxonomyCond}
917
- ${bylineCond}
918
- ${fieldCondsSQL ? sql`AND ${fieldCondsSQL}` : sql``}
919
- ${orderByClause}
920
- ${limitOffsetClause}
921
- `.execute(db);
922
- }
923
- const hasMore = limit ? result.rows.length > limit : false;
924
- const rows = hasMore ? result.rows.slice(0, limit) : result.rows;
925
- const i18nConfig = virtualConfig?.i18n;
926
- const i18nEnabled = i18nConfig && i18nConfig.locales.length > 1;
927
- const booleanFields = parseFoldedBooleanFields(rows[0]);
928
- const entries = rows.map((row) => {
929
- const slug = rowStr(row, "slug") || rowStr(row, "id");
930
- const rowLocale = rowStr(row, "locale");
931
- const id = i18nEnabled && rowLocale !== "" && (rowLocale !== i18nConfig.defaultLocale || i18nConfig.prefixDefaultLocale) ? `${rowLocale}/${slug}` : slug;
932
- const data = mapRowToData(row, booleanFields);
933
- stashFolded(data, row);
934
- return {
935
- id,
936
- slug: rowStr(row, "slug"),
937
- status: rowStr(row, "status", "draft"),
938
- data,
939
- cacheHint: {
940
- tags: [rowStr(row, "id")],
941
- lastModified: row.updated_at ? new Date(rowStr(row, "updated_at")) : void 0
942
- }
943
- };
944
- });
945
- let nextCursor;
946
- if (hasMore && rows.length > 0) {
947
- const lastRow = rows.at(-1);
948
- const primary = getPrimarySort(orderBy);
949
- const lastOrderValue = lastRow[primary.field.includes(".") ? primary.field.split(".").pop() : primary.field];
950
- nextCursor = encodeCursor(typeof lastOrderValue === "string" || typeof lastOrderValue === "number" ? String(lastOrderValue) : "", String(lastRow.id));
951
- }
952
- let collectionLastModified;
953
- for (const row of rows) if (row.updated_at) {
954
- const d = new Date(rowStr(row, "updated_at"));
955
- if (!collectionLastModified || d > collectionLastModified) collectionLastModified = d;
956
- }
957
- return {
958
- entries,
959
- nextCursor,
960
- cacheHint: {
961
- tags: [type],
962
- lastModified: collectionLastModified
963
- }
964
- };
965
- } catch (error) {
966
- const message = error instanceof Error ? error.message : String(error);
967
- if (isMissingTableError(error) || isMissingColumnError(error)) {
968
- if (isMissingColumnError(error)) console.warn(`[emdash] where filter: ${message}`);
969
- return { entries: [] };
970
- }
971
- return { error: /* @__PURE__ */ new Error(`Failed to load collection: ${message}`) };
972
- }
973
- },
974
- async loadEntry({ filter }) {
975
- try {
976
- const db = await getDb();
977
- const type = filter?.type;
978
- const id = filter?.id;
979
- if (!type || !id) return { error: /* @__PURE__ */ new Error("type and id filters are required. Use getEmDashEntry() instead of getLiveEntry() directly.") };
980
- const tableName = getTableName(type);
981
- const locale = filter?.locale;
982
- const { terms: termsSelect, bylines: bylinesSelect, bylinesExist: bylinesExistSelect } = foldedHydrationSelects(db, type, "c");
983
- const seoSelect = foldedSeoSelect(db, type, "c");
984
- const booleanFieldsSelect = foldedBooleanFieldsSelect(db, type);
985
- const metadataSelect = sql`(
986
- SELECT ${isPostgres(db) ? sql`json_build_object` : sql`json_object`}(
987
- 'bylinesExist', _emdash_bylines_exist,
988
- 'booleanFields', _emdash_boolean_fields
989
- )
990
- FROM (SELECT ${bylinesExistSelect}, ${booleanFieldsSelect}) AS metadata
991
- ) AS _emdash_entry_metadata`;
992
- const row = (locale ? await sql`
993
- SELECT c.*, ${seoSelect}, ${termsSelect}, ${bylinesSelect}, ${metadataSelect}
994
- FROM ${sql.ref(tableName)} AS c
995
- WHERE c.deleted_at IS NULL
996
- AND ((c.slug = ${id} AND c.locale = ${locale}) OR c.id = ${id})
997
- LIMIT 1
998
- `.execute(db) : await sql`
999
- SELECT c.*, ${seoSelect}, ${termsSelect}, ${bylinesSelect}, ${metadataSelect}
1000
- FROM ${sql.ref(tableName)} AS c
1001
- WHERE c.deleted_at IS NULL
1002
- AND (c.slug = ${id} OR c.id = ${id})
1003
- LIMIT 1
1004
- `.execute(db)).rows[0];
1005
- if (!row) return;
1006
- const rawMetadata = row._emdash_entry_metadata;
1007
- const metadata = typeof rawMetadata === "string" ? JSON.parse(rawMetadata) : rawMetadata;
1008
- delete row._emdash_entry_metadata;
1009
- if (isPlainObject(metadata)) {
1010
- row._emdash_bylines_exist = metadata.bylinesExist;
1011
- row[BOOLEAN_FIELDS_FOLDED_COLUMN] = metadata.booleanFields;
1012
- }
1013
- expandFoldedSeo(row);
1014
- const i18nConfig = virtualConfig?.i18n;
1015
- const i18nEnabled = i18nConfig && i18nConfig.locales.length > 1;
1016
- const entrySlug = rowStr(row, "slug") || rowStr(row, "id");
1017
- const entryLocale = rowStr(row, "locale");
1018
- const entryId = i18nEnabled && entryLocale !== "" && (entryLocale !== i18nConfig.defaultLocale || i18nConfig.prefixDefaultLocale) ? `${entryLocale}/${entrySlug}` : entrySlug;
1019
- const revisionId = filter?.revisionId;
1020
- if (revisionId) {
1021
- const revData = (await sql`
1022
- SELECT data FROM revisions
1023
- WHERE id = ${revisionId}
1024
- LIMIT 1
1025
- `.execute(db)).rows[0];
1026
- if (revData) {
1027
- const parsed = JSON.parse(revData.data);
1028
- const systemData = {};
1029
- 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;
1030
- else systemData[mappedKey] = row[key];
1031
- const slug = typeof parsed._slug === "string" ? parsed._slug : rowStr(row, "slug");
1032
- const revSlug = slug || rowStr(row, "id");
1033
- const revLocale = rowStr(row, "locale");
1034
- const revId = i18nEnabled && revLocale !== "" && (revLocale !== i18nConfig.defaultLocale || i18nConfig.prefixDefaultLocale) ? `${revLocale}/${revSlug}` : revSlug;
1035
- const revEntryData = {
1036
- ...systemData,
1037
- slug,
1038
- ...mapRevisionData(parsed, parseFoldedBooleanFields(row))
1039
- };
1040
- const revSeo = extractSeo(row);
1041
- if (revSeo) {
1042
- revEntryData.seo = revSeo;
1043
- primeSeoPanel(type, rowStr(row, "id"), revSeo);
1044
- }
1045
- stashFolded(revEntryData, row);
1046
- return {
1047
- id: revId,
1048
- slug,
1049
- status: rowStr(row, "status", "draft"),
1050
- data: revEntryData,
1051
- cacheHint: {
1052
- tags: [rowStr(row, "id")],
1053
- lastModified: row.updated_at ? new Date(rowStr(row, "updated_at")) : void 0
1054
- }
1055
- };
1056
- }
1057
- }
1058
- const entryData = mapRowToData(row, parseFoldedBooleanFields(row));
1059
- const entrySeo = extractSeo(row);
1060
- if (entrySeo) {
1061
- entryData.seo = entrySeo;
1062
- primeSeoPanel(type, rowStr(row, "id"), entrySeo);
1063
- }
1064
- stashFolded(entryData, row);
1065
- return {
1066
- id: entryId,
1067
- slug: rowStr(row, "slug"),
1068
- status: rowStr(row, "status", "draft"),
1069
- data: entryData,
1070
- cacheHint: {
1071
- tags: [rowStr(row, "id")],
1072
- lastModified: row.updated_at ? new Date(rowStr(row, "updated_at")) : void 0
1073
- }
1074
- };
1075
- } catch (error) {
1076
- if (isMissingTableError(error)) return;
1077
- const message = error instanceof Error ? error.message : String(error);
1078
- return { error: /* @__PURE__ */ new Error(`Failed to load entry: ${message}`) };
1079
- }
1080
- }
1081
- };
1082
- }
1083
-
1084
- //#endregion
1085
- export { creditsFromFoldedBylines as a, loader_exports as c, findTaxonomyStructure as d, parseTaxonomyCollections as f, FOLDED_TERMS as i, resetTaxonomyNamesCache as l, selectTaxonomyDefs as m, FOLDED_BYLINES as n, emdashLoader as o, saveTaxonomyStructure as p, FOLDED_BYLINES_EXIST as r, getDb as s, CURSOR_RAW_VALUES as t, primeSeoPanel as u };
1086
- //# sourceMappingURL=loader-BzqeR1ZN.mjs.map