emdash 0.38.0 → 0.39.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 (1394) hide show
  1. package/dist/action-token-On1sot_c.mjs +26 -0
  2. package/dist/action-token-On1sot_c.mjs.map +1 -0
  3. package/dist/activation-CaMfdBt1.mjs +382 -0
  4. package/dist/activation-CaMfdBt1.mjs.map +1 -0
  5. package/dist/adapters-Cq10K4_c.d.mts +171 -0
  6. package/dist/adapters-Cq10K4_c.d.mts.map +1 -0
  7. package/dist/after-PcEvMY_6.mjs +96 -0
  8. package/dist/after-PcEvMY_6.mjs.map +1 -0
  9. package/dist/allowed-origins-1Sa-2wZK.mjs +116 -0
  10. package/dist/allowed-origins-1Sa-2wZK.mjs.map +1 -0
  11. package/dist/api/route-utils.d.mts +4 -3
  12. package/dist/api/route-utils.d.mts.map +1 -1
  13. package/dist/api/route-utils.mjs +45 -30
  14. package/dist/api/route-utils.mjs.map +1 -1
  15. package/dist/api/schemas/index.d.mts +2 -2
  16. package/dist/api/schemas/index.mjs +7 -6
  17. package/dist/api-DmjKxPCY.mjs +4831 -0
  18. package/dist/api-DmjKxPCY.mjs.map +1 -0
  19. package/dist/api-tokens-BIXItFKV.mjs +163 -0
  20. package/dist/api-tokens-BIXItFKV.mjs.map +1 -0
  21. package/dist/apply-drpfmqrR.mjs +1005 -0
  22. package/dist/apply-drpfmqrR.mjs.map +1 -0
  23. package/dist/artifact-fetch-COiMhVgk.mjs +813 -0
  24. package/dist/artifact-fetch-COiMhVgk.mjs.map +1 -0
  25. package/dist/astro/index.d.mts +14 -12
  26. package/dist/astro/index.d.mts.map +1 -1
  27. package/dist/astro/index.mjs +99 -15
  28. package/dist/astro/index.mjs.map +1 -1
  29. package/dist/astro/middleware/auth.d.mts +12 -10
  30. package/dist/astro/middleware/auth.d.mts.map +1 -1
  31. package/dist/astro/middleware/auth.mjs +20 -11
  32. package/dist/astro/middleware/auth.mjs.map +1 -1
  33. package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
  34. package/dist/astro/middleware/redirect.mjs +11 -11
  35. package/dist/astro/middleware/request-context.d.mts +1 -1
  36. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  37. package/dist/astro/middleware/request-context.mjs +154 -28
  38. package/dist/astro/middleware/request-context.mjs.map +1 -1
  39. package/dist/astro/middleware/setup.mjs +1 -1
  40. package/dist/astro/middleware.d.mts +13 -10
  41. package/dist/astro/middleware.d.mts.map +1 -1
  42. package/dist/astro/middleware.mjs +114 -3062
  43. package/dist/astro/middleware.mjs.map +1 -1
  44. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +10 -9
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
  46. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +10 -9
  47. package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
  48. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +5 -5
  49. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  50. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
  51. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +13 -12
  52. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
  53. package/dist/astro/routes/api/admin/byline-fields/index.mjs +13 -12
  54. package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
  55. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +13 -12
  56. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
  57. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +22 -21
  58. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  59. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +22 -21
  60. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  61. package/dist/astro/routes/api/admin/bylines/index.mjs +22 -21
  62. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  63. package/dist/astro/routes/api/admin/comments/_id_/status.d.mts.map +1 -1
  64. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +21 -54
  65. package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
  66. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  67. package/dist/astro/routes/api/admin/comments/bulk.mjs +15 -14
  68. package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
  69. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  70. package/dist/astro/routes/api/admin/comments/index.mjs +15 -14
  71. package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
  72. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  73. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  74. package/dist/astro/routes/api/admin/media-usage/activation.mjs +17 -16
  75. package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -1
  76. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +19 -18
  77. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
  78. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +19 -18
  79. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
  80. package/dist/astro/routes/api/admin/media-usage/progress.mjs +17 -17
  81. package/dist/astro/routes/api/admin/media-usage/repair.mjs +21 -20
  82. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  83. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +19 -18
  84. package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
  85. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +19 -18
  86. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
  87. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +5 -5
  88. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +5 -5
  89. package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts.map +1 -1
  90. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +9 -69
  91. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  92. package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts.map +1 -1
  93. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +9 -72
  94. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  95. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +66 -62
  96. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  97. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -6
  98. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +65 -62
  99. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  100. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +70 -64
  101. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  102. package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts.map +1 -1
  103. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +87 -66
  104. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  105. package/dist/astro/routes/api/admin/plugins/index.mjs +66 -62
  106. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  107. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -4
  108. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +65 -62
  109. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  110. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts.map +1 -1
  111. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +85 -66
  112. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  113. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +65 -62
  114. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  115. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +70 -64
  116. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  117. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -1
  118. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +90 -69
  119. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  120. package/dist/astro/routes/api/admin/plugins/registry/artifact.d.mts.map +1 -1
  121. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -8
  122. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  123. package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -1
  124. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +77 -66
  125. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  126. package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts.map +1 -1
  127. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +67 -64
  128. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  129. package/dist/astro/routes/api/admin/plugins/updates.d.mts.map +1 -1
  130. package/dist/astro/routes/api/admin/plugins/updates.mjs +66 -63
  131. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  132. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.d.mts +8 -0
  133. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.d.mts.map +1 -0
  134. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +27 -0
  135. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs.map +1 -0
  136. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +65 -62
  137. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  138. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +4 -4
  139. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +65 -62
  140. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  141. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
  142. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
  143. package/dist/astro/routes/api/admin/users/_id_/index.mjs +11 -10
  144. package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
  145. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +5 -5
  146. package/dist/astro/routes/api/admin/users/index.mjs +10 -9
  147. package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
  148. package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
  149. package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
  150. package/dist/astro/routes/api/auth/invite/complete.mjs +15 -14
  151. package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
  152. package/dist/astro/routes/api/auth/invite/index.mjs +12 -11
  153. package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
  154. package/dist/astro/routes/api/auth/invite/register-options.mjs +14 -13
  155. package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
  156. package/dist/astro/routes/api/auth/logout.mjs +4 -4
  157. package/dist/astro/routes/api/auth/magic-link/send.mjs +14 -13
  158. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  159. package/dist/astro/routes/api/auth/magic-link/verify.mjs +4 -4
  160. package/dist/astro/routes/api/auth/me.mjs +11 -10
  161. package/dist/astro/routes/api/auth/me.mjs.map +1 -1
  162. package/dist/astro/routes/api/auth/mode.mjs +4 -4
  163. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
  164. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  165. package/dist/astro/routes/api/auth/passkey/_id_.mjs +10 -9
  166. package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
  167. package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
  168. package/dist/astro/routes/api/auth/passkey/options.mjs +16 -15
  169. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
  170. package/dist/astro/routes/api/auth/passkey/register/options.mjs +14 -13
  171. package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
  172. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +15 -14
  173. package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
  174. package/dist/astro/routes/api/auth/passkey/verify.mjs +15 -14
  175. package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
  176. package/dist/astro/routes/api/auth/signup/complete.mjs +15 -14
  177. package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
  178. package/dist/astro/routes/api/auth/signup/request.mjs +14 -13
  179. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  180. package/dist/astro/routes/api/auth/signup/verify.mjs +3 -3
  181. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts.map +1 -1
  182. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -211
  183. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
  184. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -17
  185. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
  186. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
  187. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +15 -14
  188. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  189. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  190. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +15 -14
  191. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -1
  192. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -4
  193. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.d.mts +8 -0
  194. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.d.mts.map +1 -0
  195. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +35 -0
  196. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs.map +1 -0
  197. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +16 -15
  198. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  199. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts +9 -2
  200. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
  201. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +25 -18
  202. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  203. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +27 -25
  204. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  205. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +27 -25
  206. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  207. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  208. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
  209. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
  210. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +23 -15
  211. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  212. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +23 -21
  213. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  214. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -4
  215. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +23 -15
  216. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  217. package/dist/astro/routes/api/content/_collection_/_id_.mjs +15 -14
  218. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  219. package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -4
  220. package/dist/astro/routes/api/content/_collection_/index.mjs +12 -11
  221. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  222. package/dist/astro/routes/api/content/_collection_/trash.mjs +11 -10
  223. package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
  224. package/dist/astro/routes/api/dashboard.mjs +14 -12
  225. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  226. package/dist/astro/routes/api/dev/emails.mjs +4 -4
  227. package/dist/astro/routes/api/health.d.mts +8 -0
  228. package/dist/astro/routes/api/health.d.mts.map +1 -0
  229. package/dist/astro/routes/api/health.mjs +21 -0
  230. package/dist/astro/routes/api/health.mjs.map +1 -0
  231. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  232. package/dist/astro/routes/api/import/probe.mjs +25 -23
  233. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  234. package/dist/astro/routes/api/import/wordpress/analyze.mjs +5 -5
  235. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -11
  236. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  237. package/dist/astro/routes/api/import/wordpress/execute.mjs +20 -20
  238. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -10
  239. package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -1
  240. package/dist/astro/routes/api/import/wordpress/media.mjs +15 -14
  241. package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
  242. package/dist/astro/routes/api/import/wordpress/prepare.mjs +14 -13
  243. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  244. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -11
  245. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
  246. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +18 -17
  247. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  248. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  249. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -23
  250. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  251. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
  252. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -11
  253. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  254. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +36 -34
  255. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  256. package/dist/astro/routes/api/manifest.mjs +17 -9
  257. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  258. package/dist/astro/routes/api/mcp.d.mts.map +1 -1
  259. package/dist/astro/routes/api/mcp.mjs +167 -101
  260. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  261. package/dist/astro/routes/api/media/_id_/confirm.mjs +15 -14
  262. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  263. package/dist/astro/routes/api/media/_id_/replace.mjs +12 -11
  264. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -1
  265. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -8
  266. package/dist/astro/routes/api/media/_id_/usage.mjs +23 -22
  267. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  268. package/dist/astro/routes/api/media/_id_.mjs +22 -21
  269. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  270. package/dist/astro/routes/api/media/asset/_id_/_filename_.d.mts +8 -0
  271. package/dist/astro/routes/api/media/asset/_id_/_filename_.d.mts.map +1 -0
  272. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +52 -0
  273. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs.map +1 -0
  274. package/dist/astro/routes/api/media/file/_...key_.mjs +3 -3
  275. package/dist/astro/routes/api/media/folders/_id_.mjs +12 -11
  276. package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -1
  277. package/dist/astro/routes/api/media/folders/index.mjs +12 -11
  278. package/dist/astro/routes/api/media/folders/index.mjs.map +1 -1
  279. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -4
  280. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -4
  281. package/dist/astro/routes/api/media/providers/index.mjs +4 -4
  282. package/dist/astro/routes/api/media/upload-url.mjs +14 -13
  283. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  284. package/dist/astro/routes/api/media.mjs +26 -25
  285. package/dist/astro/routes/api/media.mjs.map +1 -1
  286. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +15 -14
  287. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  288. package/dist/astro/routes/api/menus/_name_/items.mjs +15 -14
  289. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  290. package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -14
  291. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  292. package/dist/astro/routes/api/menus/_name_/translations.mjs +15 -14
  293. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  294. package/dist/astro/routes/api/menus/_name_.mjs +15 -14
  295. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  296. package/dist/astro/routes/api/menus/index.mjs +15 -14
  297. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  298. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  299. package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -7
  300. package/dist/astro/routes/api/oauth/device/code.mjs +10 -10
  301. package/dist/astro/routes/api/oauth/device/token.mjs +9 -9
  302. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  303. package/dist/astro/routes/api/oauth/token/refresh.mjs +7 -7
  304. package/dist/astro/routes/api/oauth/token/revoke.mjs +7 -7
  305. package/dist/astro/routes/api/oauth/token.mjs +7 -7
  306. package/dist/astro/routes/api/openapi.json.mjs +28 -23
  307. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  308. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts +2 -1
  309. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts.map +1 -1
  310. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +22 -40
  311. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
  312. package/dist/astro/routes/api/redirects/404s/index.mjs +18 -15
  313. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  314. package/dist/astro/routes/api/redirects/404s/summary.mjs +18 -15
  315. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  316. package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -1
  317. package/dist/astro/routes/api/redirects/_id_.mjs +20 -23
  318. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  319. package/dist/astro/routes/api/redirects/index.d.mts.map +1 -1
  320. package/dist/astro/routes/api/redirects/index.mjs +19 -20
  321. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  322. package/dist/astro/routes/api/relations/_id_/index.mjs +27 -25
  323. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  324. package/dist/astro/routes/api/relations/_id_/translations.mjs +21 -20
  325. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
  326. package/dist/astro/routes/api/relations/index.mjs +27 -25
  327. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  328. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
  329. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
  330. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +65 -62
  331. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  332. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +65 -62
  333. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  334. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +65 -62
  335. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  336. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +65 -62
  337. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  338. package/dist/astro/routes/api/schema/collections/index.mjs +65 -62
  339. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  340. package/dist/astro/routes/api/schema/collections/reorder.mjs +65 -62
  341. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  342. package/dist/astro/routes/api/schema/index.mjs +16 -16
  343. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +65 -62
  344. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  345. package/dist/astro/routes/api/schema/orphans/index.mjs +65 -62
  346. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  347. package/dist/astro/routes/api/search/enable.mjs +16 -15
  348. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  349. package/dist/astro/routes/api/search/index.mjs +17 -15
  350. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  351. package/dist/astro/routes/api/search/rebuild.mjs +16 -15
  352. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  353. package/dist/astro/routes/api/search/stats.mjs +10 -10
  354. package/dist/astro/routes/api/search/suggest.mjs +15 -14
  355. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  356. package/dist/astro/routes/api/sections/_slug_.mjs +15 -14
  357. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  358. package/dist/astro/routes/api/sections/index.mjs +15 -14
  359. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  360. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +9 -9
  361. package/dist/astro/routes/api/settings/backups/archives/index.mjs +8 -8
  362. package/dist/astro/routes/api/settings/backups/export.mjs +9 -9
  363. package/dist/astro/routes/api/settings/backups/index.mjs +10 -10
  364. package/dist/astro/routes/api/settings/email.mjs +6 -6
  365. package/dist/astro/routes/api/settings.mjs +22 -20
  366. package/dist/astro/routes/api/settings.mjs.map +1 -1
  367. package/dist/astro/routes/api/setup/admin-verify.mjs +16 -15
  368. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  369. package/dist/astro/routes/api/setup/admin.mjs +15 -14
  370. package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
  371. package/dist/astro/routes/api/setup/dev-bypass.mjs +42 -40
  372. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  373. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  374. package/dist/astro/routes/api/setup/index.mjs +43 -40
  375. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  376. package/dist/astro/routes/api/setup/status.mjs +5 -5
  377. package/dist/astro/routes/api/snapshot.mjs +11 -11
  378. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -22
  379. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  380. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -22
  381. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  382. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +23 -22
  383. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  384. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -22
  385. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  386. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -21
  387. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  388. package/dist/astro/routes/api/taxonomies/_name_.mjs +23 -22
  389. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  390. package/dist/astro/routes/api/taxonomies/index.mjs +23 -22
  391. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  392. package/dist/astro/routes/api/themes/preview.mjs +8 -8
  393. package/dist/astro/routes/api/typegen.mjs +6 -6
  394. package/dist/astro/routes/api/visual-editing/action-token.d.mts +8 -0
  395. package/dist/astro/routes/api/visual-editing/action-token.d.mts.map +1 -0
  396. package/dist/astro/routes/api/visual-editing/action-token.mjs +25 -0
  397. package/dist/astro/routes/api/visual-editing/action-token.mjs.map +1 -0
  398. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.d.mts +8 -0
  399. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.d.mts.map +1 -0
  400. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +37 -0
  401. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs.map +1 -0
  402. package/dist/astro/routes/api/visual-editing/toolbar-labels.d.mts +8 -0
  403. package/dist/astro/routes/api/visual-editing/toolbar-labels.d.mts.map +1 -0
  404. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +20 -0
  405. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs.map +1 -0
  406. package/dist/astro/routes/api/well-known/auth.mjs +2 -2
  407. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  408. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  409. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +12 -11
  410. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  411. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +16 -15
  412. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  413. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +16 -15
  414. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  415. package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -10
  416. package/dist/astro/routes/api/widget-areas/index.mjs +16 -15
  417. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  418. package/dist/astro/routes/api/widget-components.mjs +4 -4
  419. package/dist/astro/routes/robots.txt.mjs +13 -12
  420. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  421. package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -1
  422. package/dist/astro/routes/sitemap-_collection_.xml.mjs +23 -19
  423. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  424. package/dist/astro/routes/sitemap.xml.mjs +14 -13
  425. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  426. package/dist/astro/types.d.mts +61 -23
  427. package/dist/astro/types.d.mts.map +1 -1
  428. package/dist/auth/providers/github.d.mts +1 -1
  429. package/dist/auth/providers/google.d.mts +1 -1
  430. package/dist/authoritative-records-DbqshfKD.mjs +5172 -0
  431. package/dist/authoritative-records-DbqshfKD.mjs.map +1 -0
  432. package/dist/authorize-BXpfMpp0.mjs +40 -0
  433. package/dist/authorize-BXpfMpp0.mjs.map +1 -0
  434. package/dist/backup-BsPQdwnS.mjs +246 -0
  435. package/dist/backup-BsPQdwnS.mjs.map +1 -0
  436. package/dist/base64-DvnNgP7e.mjs +63 -0
  437. package/dist/base64-DvnNgP7e.mjs.map +1 -0
  438. package/dist/byline-Doh-wt99.mjs +906 -0
  439. package/dist/byline-Doh-wt99.mjs.map +1 -0
  440. package/dist/byline-fields-CsrdvaLV.mjs +123 -0
  441. package/dist/byline-fields-CsrdvaLV.mjs.map +1 -0
  442. package/dist/byline-registry-D6lWzXk6.mjs +406 -0
  443. package/dist/byline-registry-D6lWzXk6.mjs.map +1 -0
  444. package/dist/bylines-Cop0hkoy.mjs +214 -0
  445. package/dist/bylines-Cop0hkoy.mjs.map +1 -0
  446. package/dist/bylines-kpBzHPr8.mjs +232 -0
  447. package/dist/bylines-kpBzHPr8.mjs.map +1 -0
  448. package/dist/cache-B0pOlXdM.mjs +108 -0
  449. package/dist/cache-B0pOlXdM.mjs.map +1 -0
  450. package/dist/capture-triggers-gxQxnxrJ.mjs +362 -0
  451. package/dist/capture-triggers-gxQxnxrJ.mjs.map +1 -0
  452. package/dist/challenge-store-CkRdSdd8.mjs +51 -0
  453. package/dist/challenge-store-CkRdSdd8.mjs.map +1 -0
  454. package/dist/checksum-Bsi2D9M1.mjs +162 -0
  455. package/dist/checksum-Bsi2D9M1.mjs.map +1 -0
  456. package/dist/chrome-tags-D7LGB91U.mjs +24 -0
  457. package/dist/chrome-tags-D7LGB91U.mjs.map +1 -0
  458. package/dist/chunks-BmWyou79.mjs +25 -0
  459. package/dist/chunks-BmWyou79.mjs.map +1 -0
  460. package/dist/cli/index.mjs +889 -102
  461. package/dist/cli/index.mjs.map +1 -1
  462. package/dist/client/cf-access.d.mts +1 -1
  463. package/dist/client/index.d.mts +2 -2
  464. package/dist/client/index.mjs +2 -2
  465. package/dist/collection-deletion-C3Xixmkx.mjs +436 -0
  466. package/dist/collection-deletion-C3Xixmkx.mjs.map +1 -0
  467. package/dist/collection-slugs-cache-D9auiKmI.mjs +85 -0
  468. package/dist/collection-slugs-cache-D9auiKmI.mjs.map +1 -0
  469. package/dist/comment-DcT8qdPK.mjs +313 -0
  470. package/dist/comment-DcT8qdPK.mjs.map +1 -0
  471. package/dist/comment-reaction-DY5-y8Y5.mjs +85 -0
  472. package/dist/comment-reaction-DY5-y8Y5.mjs.map +1 -0
  473. package/dist/comments-B67VRNGw.mjs +204 -0
  474. package/dist/comments-B67VRNGw.mjs.map +1 -0
  475. package/dist/comments-BVzzt6x5.mjs +99 -0
  476. package/dist/comments-BVzzt6x5.mjs.map +1 -0
  477. package/dist/components-DIl9Qzh6.mjs +108 -0
  478. package/dist/components-DIl9Qzh6.mjs.map +1 -0
  479. package/dist/config-B2acLeC5.mjs +242 -0
  480. package/dist/config-B2acLeC5.mjs.map +1 -0
  481. package/dist/config-CGVeT8Hc.mjs +73 -0
  482. package/dist/config-CGVeT8Hc.mjs.map +1 -0
  483. package/dist/config-D3HhLON3.d.mts +39 -0
  484. package/dist/config-D3HhLON3.d.mts.map +1 -0
  485. package/dist/config-DS7e4EZ9.d.mts +6387 -0
  486. package/dist/config-DS7e4EZ9.d.mts.map +1 -0
  487. package/dist/content-DZ3B5qtA.mjs +2216 -0
  488. package/dist/content-DZ3B5qtA.mjs.map +1 -0
  489. package/dist/content-list-query-CbPdzsna.d.mts +26 -0
  490. package/dist/content-list-query-CbPdzsna.d.mts.map +1 -0
  491. package/dist/content-policy-CM4skrNi.mjs +46 -0
  492. package/dist/content-policy-CM4skrNi.mjs.map +1 -0
  493. package/dist/content-refresh-BHLHJgyt.mjs +3599 -0
  494. package/dist/content-refresh-BHLHJgyt.mjs.map +1 -0
  495. package/dist/content-repair-BVll5WNl.mjs +440 -0
  496. package/dist/content-repair-BVll5WNl.mjs.map +1 -0
  497. package/dist/context-B195kjqZ.mjs +1835 -0
  498. package/dist/context-B195kjqZ.mjs.map +1 -0
  499. package/dist/cron-BcR3RN4K.mjs +282 -0
  500. package/dist/cron-BcR3RN4K.mjs.map +1 -0
  501. package/dist/dashboard-CZD4G7k_.mjs +151 -0
  502. package/dist/dashboard-CZD4G7k_.mjs.map +1 -0
  503. package/dist/database/migration-lock.d.mts +37 -0
  504. package/dist/database/migration-lock.d.mts.map +1 -0
  505. package/dist/database/migration-lock.mjs +76 -0
  506. package/dist/database/migration-lock.mjs.map +1 -0
  507. package/dist/database/pg-migration-lock.d.mts +1 -1
  508. package/dist/database/pg-migration-lock.mjs +1 -1
  509. package/dist/database/pg-migration-lock.mjs.map +1 -1
  510. package/dist/datetime-normalization-PeiEdcRY.mjs +187 -0
  511. package/dist/datetime-normalization-PeiEdcRY.mjs.map +1 -0
  512. package/dist/db/index.d.mts +3 -3
  513. package/dist/db/index.mjs +4 -3
  514. package/dist/db/index.mjs.map +1 -1
  515. package/dist/db/libsql-migrations.d.mts +1 -1
  516. package/dist/db/libsql-migrations.mjs +7 -6
  517. package/dist/db/libsql-migrations.mjs.map +1 -1
  518. package/dist/db/libsql.d.mts +1 -1
  519. package/dist/db/postgres-migrations.d.mts +1 -1
  520. package/dist/db/postgres-migrations.mjs +7 -6
  521. package/dist/db/postgres-migrations.mjs.map +1 -1
  522. package/dist/db/postgres.d.mts +1 -1
  523. package/dist/db/sqlite-migrations.d.mts +1 -1
  524. package/dist/db/sqlite-migrations.mjs +7 -6
  525. package/dist/db/sqlite-migrations.mjs.map +1 -1
  526. package/dist/db/sqlite.d.mts +1 -1
  527. package/dist/db/sqlite.mjs +1 -1
  528. package/dist/db-errors-CBD5yMro.mjs +55 -0
  529. package/dist/db-errors-CBD5yMro.mjs.map +1 -0
  530. package/dist/default-BtlxWgh9.mjs +81 -0
  531. package/dist/default-BtlxWgh9.mjs.map +1 -0
  532. package/dist/deferred-tasks-Ba9fphlE.d.mts +9 -0
  533. package/dist/deferred-tasks-Ba9fphlE.d.mts.map +1 -0
  534. package/dist/dev-typegen-CZaPLl3V.mjs +29 -0
  535. package/dist/dev-typegen-CZaPLl3V.mjs.map +1 -0
  536. package/dist/device-flow-3E5l0fpH.mjs +466 -0
  537. package/dist/device-flow-3E5l0fpH.mjs.map +1 -0
  538. package/dist/dialect-helpers-CtYdsX4W.mjs +307 -0
  539. package/dist/dialect-helpers-CtYdsX4W.mjs.map +1 -0
  540. package/dist/direct-executor-ZI8E01Yt.mjs +104 -0
  541. package/dist/direct-executor-ZI8E01Yt.mjs.map +1 -0
  542. package/dist/dist-2hDLsLeq.mjs +810 -0
  543. package/dist/dist-2hDLsLeq.mjs.map +1 -0
  544. package/dist/email-console-gc-E3Eqj.mjs +50 -0
  545. package/dist/email-console-gc-E3Eqj.mjs.map +1 -0
  546. package/dist/emdash-runtime-DZGinqTL.mjs +4041 -0
  547. package/dist/emdash-runtime-DZGinqTL.mjs.map +1 -0
  548. package/dist/enrich-C2Mk0lwE.mjs +194 -0
  549. package/dist/enrich-C2Mk0lwE.mjs.map +1 -0
  550. package/dist/entry-lock-D3C99MXS.mjs +1520 -0
  551. package/dist/entry-lock-D3C99MXS.mjs.map +1 -0
  552. package/dist/entry-lock-D9rnj2Lu.mjs +163 -0
  553. package/dist/entry-lock-D9rnj2Lu.mjs.map +1 -0
  554. package/dist/entry-lock-DX7QkqEg.d.mts +3503 -0
  555. package/dist/entry-lock-DX7QkqEg.d.mts.map +1 -0
  556. package/dist/entry-locks-CO_KaoU5.mjs +167 -0
  557. package/dist/entry-locks-CO_KaoU5.mjs.map +1 -0
  558. package/dist/error-CCTCskie.mjs +90 -0
  559. package/dist/error-CCTCskie.mjs.map +1 -0
  560. package/dist/errors-W3PA8HqB.mjs +447 -0
  561. package/dist/errors-W3PA8HqB.mjs.map +1 -0
  562. package/dist/escape-DN4Qmjsl.mjs +9 -0
  563. package/dist/escape-DN4Qmjsl.mjs.map +1 -0
  564. package/dist/field-defs-cache-B337z8UJ.mjs +77 -0
  565. package/dist/field-defs-cache-B337z8UJ.mjs.map +1 -0
  566. package/dist/focal-point-Gr34o-4o.mjs +23 -0
  567. package/dist/focal-point-Gr34o-4o.mjs.map +1 -0
  568. package/dist/fts-manager-DMb0sbIQ.mjs +413 -0
  569. package/dist/fts-manager-DMb0sbIQ.mjs.map +1 -0
  570. package/dist/hash-CLVFzWvx.mjs +37 -0
  571. package/dist/hash-CLVFzWvx.mjs.map +1 -0
  572. package/dist/hook-result-KY1jq21o.d.mts +31 -0
  573. package/dist/hook-result-KY1jq21o.d.mts.map +1 -0
  574. package/dist/hreflang-BgS2FqhH.d.mts +50 -0
  575. package/dist/hreflang-BgS2FqhH.d.mts.map +1 -0
  576. package/dist/hreflang-CrJwqoeb.mjs +105 -0
  577. package/dist/hreflang-CrJwqoeb.mjs.map +1 -0
  578. package/dist/http-route-dispatch-DAKlanXb.mjs +339 -0
  579. package/dist/http-route-dispatch-DAKlanXb.mjs.map +1 -0
  580. package/dist/identity-DRGSHEEr.mjs +35 -0
  581. package/dist/identity-DRGSHEEr.mjs.map +1 -0
  582. package/dist/import-DFr5B_hC.mjs +2020 -0
  583. package/dist/import-DFr5B_hC.mjs.map +1 -0
  584. package/dist/index-CDwKDkTq.d.mts +623 -0
  585. package/dist/index-CDwKDkTq.d.mts.map +1 -0
  586. package/dist/index.d.mts +27 -22
  587. package/dist/index.mjs +101 -89
  588. package/dist/init-lock-4eRRB4Le.mjs +56 -0
  589. package/dist/init-lock-4eRRB4Le.mjs.map +1 -0
  590. package/dist/install-finalization-5Os-QZ-2.mjs +58 -0
  591. package/dist/install-finalization-5Os-QZ-2.mjs.map +1 -0
  592. package/dist/lifecycle-7e-Lt_kX.mjs +25 -0
  593. package/dist/lifecycle-7e-Lt_kX.mjs.map +1 -0
  594. package/dist/load-Cu5bvCZh.mjs +28 -0
  595. package/dist/load-Cu5bvCZh.mjs.map +1 -0
  596. package/dist/loader-t4TxaFiQ.mjs +1004 -0
  597. package/dist/loader-t4TxaFiQ.mjs.map +1 -0
  598. package/dist/manifest-builder-D31UoJCu.mjs +189 -0
  599. package/dist/manifest-builder-D31UoJCu.mjs.map +1 -0
  600. package/dist/manifest-schema-Bkh8SeHd.mjs +491 -0
  601. package/dist/manifest-schema-Bkh8SeHd.mjs.map +1 -0
  602. package/dist/media/image-endpoint.mjs +1 -1
  603. package/dist/media/index.d.mts +1 -1
  604. package/dist/media/index.mjs +4 -4
  605. package/dist/media/local-runtime.d.mts +14 -12
  606. package/dist/media/local-runtime.d.mts.map +1 -1
  607. package/dist/media/local-runtime.mjs +12 -11
  608. package/dist/media/local-runtime.mjs.map +1 -1
  609. package/dist/media-TBlKCwo7.mjs +334 -0
  610. package/dist/media-TBlKCwo7.mjs.map +1 -0
  611. package/dist/media-allowlist-s60eAIf6.mjs +44 -0
  612. package/dist/media-allowlist-s60eAIf6.mjs.map +1 -0
  613. package/dist/media-folders-ClIRLUQv.mjs +210 -0
  614. package/dist/media-folders-ClIRLUQv.mjs.map +1 -0
  615. package/dist/media-url-DY_ijO3B.mjs +43 -0
  616. package/dist/media-url-DY_ijO3B.mjs.map +1 -0
  617. package/dist/media-usage-C4NolTpQ.mjs +1833 -0
  618. package/dist/media-usage-C4NolTpQ.mjs.map +1 -0
  619. package/dist/media-usage-activation-CAhmb14O.mjs +78 -0
  620. package/dist/media-usage-activation-CAhmb14O.mjs.map +1 -0
  621. package/dist/media-usage-work-Cu5DqewW.mjs +586 -0
  622. package/dist/media-usage-work-Cu5DqewW.mjs.map +1 -0
  623. package/dist/media-usage-work-DJr3rOEN.mjs +152 -0
  624. package/dist/media-usage-work-DJr3rOEN.mjs.map +1 -0
  625. package/dist/media-usage-write-fence-DW5oHT7q.mjs +42 -0
  626. package/dist/media-usage-write-fence-DW5oHT7q.mjs.map +1 -0
  627. package/dist/menus-DbgU9z5Q.mjs +3732 -0
  628. package/dist/menus-DbgU9z5Q.mjs.map +1 -0
  629. package/dist/menus-Wy8m5NcH.mjs +753 -0
  630. package/dist/menus-Wy8m5NcH.mjs.map +1 -0
  631. package/dist/migrations/index.d.mts +2 -2
  632. package/dist/migrations/index.d.mts.map +1 -1
  633. package/dist/migrations/index.mjs +6 -5
  634. package/dist/mime-CCYRC4r1.mjs +36 -0
  635. package/dist/mime-CCYRC4r1.mjs.map +1 -0
  636. package/dist/mode-CkmOhFqj.mjs +23 -0
  637. package/dist/mode-CkmOhFqj.mjs.map +1 -0
  638. package/dist/node-sqlite-compat-vpVaILnb.mjs +46 -0
  639. package/dist/node-sqlite-compat-vpVaILnb.mjs.map +1 -0
  640. package/dist/normalize-dChXQjwS.mjs +191 -0
  641. package/dist/normalize-dChXQjwS.mjs.map +1 -0
  642. package/dist/oauth-authorization-DZ-R-hmx.mjs +274 -0
  643. package/dist/oauth-authorization-DZ-R-hmx.mjs.map +1 -0
  644. package/dist/oauth-clients-BMPA8vjl.mjs +266 -0
  645. package/dist/oauth-clients-BMPA8vjl.mjs.map +1 -0
  646. package/dist/oauth-state-store-0gIdb48-.mjs +50 -0
  647. package/dist/oauth-state-store-0gIdb48-.mjs.map +1 -0
  648. package/dist/oauth-user-lookup-ChVW4UWu.mjs +26 -0
  649. package/dist/oauth-user-lookup-ChVW4UWu.mjs.map +1 -0
  650. package/dist/object-cache/memory.d.mts +1 -1
  651. package/dist/object-cache-DlSVbn5Y.mjs +534 -0
  652. package/dist/object-cache-DlSVbn5Y.mjs.map +1 -0
  653. package/dist/options-D5WcorD5.mjs +200 -0
  654. package/dist/options-D5WcorD5.mjs.map +1 -0
  655. package/dist/options-DAknChnw.d.mts +77 -0
  656. package/dist/options-DAknChnw.d.mts.map +1 -0
  657. package/dist/page/index.d.mts +2 -2
  658. package/dist/page/index.mjs +12 -11
  659. package/dist/page/index.mjs.map +1 -1
  660. package/dist/parse-Cr379Av9.mjs +81 -0
  661. package/dist/parse-Cr379Av9.mjs.map +1 -0
  662. package/dist/parse-tj9XLNO_.d.mts +165 -0
  663. package/dist/parse-tj9XLNO_.d.mts.map +1 -0
  664. package/dist/passkey-config-BD-wMaCf.mjs +46 -0
  665. package/dist/passkey-config-BD-wMaCf.mjs.map +1 -0
  666. package/dist/patterns-Do3iqi7N.mjs +145 -0
  667. package/dist/patterns-Do3iqi7N.mjs.map +1 -0
  668. package/dist/placeholder-CubPFn_L.d.mts +306 -0
  669. package/dist/placeholder-CubPFn_L.d.mts.map +1 -0
  670. package/dist/plugin-test-runtime.d.mts +97 -0
  671. package/dist/plugin-test-runtime.d.mts.map +1 -0
  672. package/dist/plugin-test-runtime.mjs +105 -0
  673. package/dist/plugin-types.d.mts +53 -15
  674. package/dist/plugin-types.d.mts.map +1 -1
  675. package/dist/plugin-types.mjs +18 -1
  676. package/dist/plugin-types.mjs.map +1 -0
  677. package/dist/plugin-utils.d.mts +12 -10
  678. package/dist/plugin-utils.d.mts.map +1 -1
  679. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -10
  680. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  681. package/dist/plugins/adapt-sandbox-entry.mjs +18 -13
  682. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  683. package/dist/plugins/host.d.mts +7 -0
  684. package/dist/plugins/host.mjs +45 -0
  685. package/dist/plugins/http-wire.d.mts +25 -0
  686. package/dist/plugins/http-wire.d.mts.map +1 -0
  687. package/dist/plugins/http-wire.mjs +148 -0
  688. package/dist/plugins/http-wire.mjs.map +1 -0
  689. package/dist/plugins/secret-redactor.d.mts +9 -0
  690. package/dist/plugins/secret-redactor.d.mts.map +1 -0
  691. package/dist/plugins/secret-redactor.mjs +51 -0
  692. package/dist/plugins/secret-redactor.mjs.map +1 -0
  693. package/dist/plugins-DHurtdXQ.mjs +277 -0
  694. package/dist/plugins-DHurtdXQ.mjs.map +1 -0
  695. package/dist/policy-lyZnjpwz.mjs +45 -0
  696. package/dist/policy-lyZnjpwz.mjs.map +1 -0
  697. package/dist/portable-text-oAwodbPS.mjs +286 -0
  698. package/dist/portable-text-oAwodbPS.mjs.map +1 -0
  699. package/dist/preview-Cup2bj8c.mjs +107 -0
  700. package/dist/preview-Cup2bj8c.mjs.map +1 -0
  701. package/dist/protocol-C1CNiKX4.d.mts +61 -0
  702. package/dist/protocol-C1CNiKX4.d.mts.map +1 -0
  703. package/dist/public-submission-Cs-pFMQK.mjs +245 -0
  704. package/dist/public-submission-Cs-pFMQK.mjs.map +1 -0
  705. package/dist/public-url-BWVHsfQv.mjs +101 -0
  706. package/dist/public-url-BWVHsfQv.mjs.map +1 -0
  707. package/dist/query-D-lxiOgn.mjs +890 -0
  708. package/dist/query-D-lxiOgn.mjs.map +1 -0
  709. package/dist/query-D7kHKOws.mjs +41 -0
  710. package/dist/query-D7kHKOws.mjs.map +1 -0
  711. package/dist/rate-limit-CqJn-w4h.mjs +120 -0
  712. package/dist/rate-limit-CqJn-w4h.mjs.map +1 -0
  713. package/dist/redirect-BrChFPIu.mjs +17 -0
  714. package/dist/redirect-BrChFPIu.mjs.map +1 -0
  715. package/dist/redirect-D2Yo-b6S.mjs +415 -0
  716. package/dist/redirect-D2Yo-b6S.mjs.map +1 -0
  717. package/dist/redirects-BCiTaIQ-.mjs +146 -0
  718. package/dist/redirects-BCiTaIQ-.mjs.map +1 -0
  719. package/dist/redirects-ByItliuu.mjs +644 -0
  720. package/dist/redirects-ByItliuu.mjs.map +1 -0
  721. package/dist/registry/testing.d.mts +14 -0
  722. package/dist/registry/testing.d.mts.map +1 -0
  723. package/dist/registry/testing.mjs +255 -0
  724. package/dist/registry/testing.mjs.map +1 -0
  725. package/dist/registry-CkuPoZs7.mjs +1222 -0
  726. package/dist/registry-CkuPoZs7.mjs.map +1 -0
  727. package/dist/relation-XTAtOpJO.mjs +334 -0
  728. package/dist/relation-XTAtOpJO.mjs.map +1 -0
  729. package/dist/relations-B4w-G5U9.mjs +309 -0
  730. package/dist/relations-B4w-G5U9.mjs.map +1 -0
  731. package/dist/relations-O63JWBRj.mjs +403 -0
  732. package/dist/relations-O63JWBRj.mjs.map +1 -0
  733. package/dist/request-cache-DaMhSQdx.mjs +104 -0
  734. package/dist/request-cache-DaMhSQdx.mjs.map +1 -0
  735. package/dist/request-context.d.mts +1 -1
  736. package/dist/request-meta-C8yl_sIs.mjs +141 -0
  737. package/dist/request-meta-C8yl_sIs.mjs.map +1 -0
  738. package/dist/resolve-BJIS8wKr.mjs +199 -0
  739. package/dist/resolve-BJIS8wKr.mjs.map +1 -0
  740. package/dist/route-wire-D66L2oaZ.mjs +197 -0
  741. package/dist/route-wire-D66L2oaZ.mjs.map +1 -0
  742. package/dist/routes-DYsTe-oR.mjs +321 -0
  743. package/dist/routes-DYsTe-oR.mjs.map +1 -0
  744. package/dist/runner-3gfxRsJG.d.mts +68 -0
  745. package/dist/runner-3gfxRsJG.d.mts.map +1 -0
  746. package/dist/runner-ClrleR8A.mjs +5502 -0
  747. package/dist/runner-ClrleR8A.mjs.map +1 -0
  748. package/dist/runtime.d.mts +13 -11
  749. package/dist/runtime.d.mts.map +1 -1
  750. package/dist/runtime.mjs +6 -6
  751. package/dist/schema-CPhPM9Do.mjs +420 -0
  752. package/dist/schema-CPhPM9Do.mjs.map +1 -0
  753. package/dist/schema-DEERRrKS.mjs +9 -0
  754. package/dist/schema-DEERRrKS.mjs.map +1 -0
  755. package/dist/scopes-Bn8_rCSt.mjs +27 -0
  756. package/dist/scopes-Bn8_rCSt.mjs.map +1 -0
  757. package/dist/search-lami_Ota.mjs +448 -0
  758. package/dist/search-lami_Ota.mjs.map +1 -0
  759. package/dist/secrets-DNgVgz_e.mjs +341 -0
  760. package/dist/secrets-DNgVgz_e.mjs.map +1 -0
  761. package/dist/sections-BIpd4Cxf.mjs +346 -0
  762. package/dist/sections-BIpd4Cxf.mjs.map +1 -0
  763. package/dist/seed/index.d.mts +2 -2
  764. package/dist/seed/index.mjs +35 -33
  765. package/dist/seo/index.d.mts +3 -3
  766. package/dist/seo/index.mjs +26 -24
  767. package/dist/seo/index.mjs.map +1 -1
  768. package/dist/seo-BtU70b7l.mjs +114 -0
  769. package/dist/seo-BtU70b7l.mjs.map +1 -0
  770. package/dist/seo-_4qmazxz.mjs +133 -0
  771. package/dist/seo-_4qmazxz.mjs.map +1 -0
  772. package/dist/service-Bpy5iTX0.mjs +150 -0
  773. package/dist/service-Bpy5iTX0.mjs.map +1 -0
  774. package/dist/session-user-BQeS2Mrb.mjs +51 -0
  775. package/dist/session-user-BQeS2Mrb.mjs.map +1 -0
  776. package/dist/settings-DmroR53o.mjs +420 -0
  777. package/dist/settings-DmroR53o.mjs.map +1 -0
  778. package/dist/settings-g2F2a3Ub.mjs +51 -0
  779. package/dist/settings-g2F2a3Ub.mjs.map +1 -0
  780. package/dist/setup-complete-BrZaXpVV.mjs +26 -0
  781. package/dist/setup-complete-BrZaXpVV.mjs.map +1 -0
  782. package/dist/setup-nonce-Cb9-884O.mjs +25 -0
  783. package/dist/setup-nonce-Cb9-884O.mjs.map +1 -0
  784. package/dist/single-flight-cache-B5O2qhO1.mjs +104 -0
  785. package/dist/single-flight-cache-B5O2qhO1.mjs.map +1 -0
  786. package/dist/site-url-DjhYCaep.mjs +16 -0
  787. package/dist/site-url-DjhYCaep.mjs.map +1 -0
  788. package/dist/slugify-T5GHH42D.mjs +17 -0
  789. package/dist/slugify-T5GHH42D.mjs.map +1 -0
  790. package/dist/snapshot-C32Xuv3o.mjs +233 -0
  791. package/dist/snapshot-C32Xuv3o.mjs.map +1 -0
  792. package/dist/ssrf-Co1GGFZz.mjs +406 -0
  793. package/dist/ssrf-Co1GGFZz.mjs.map +1 -0
  794. package/dist/state-C7gCoiHr.mjs +153 -0
  795. package/dist/state-C7gCoiHr.mjs.map +1 -0
  796. package/dist/status-DLoBmcDz.mjs +30 -0
  797. package/dist/status-DLoBmcDz.mjs.map +1 -0
  798. package/dist/storage/local.d.mts +1 -1
  799. package/dist/storage/local.mjs +1 -1
  800. package/dist/storage/s3.d.mts +1 -1
  801. package/dist/storage/s3.mjs +1 -1
  802. package/dist/storage-query-CPctdMKX.d.mts +1519 -0
  803. package/dist/storage-query-CPctdMKX.d.mts.map +1 -0
  804. package/dist/target-CUKlGrXb.mjs +27 -0
  805. package/dist/target-CUKlGrXb.mjs.map +1 -0
  806. package/dist/taxonomies-BpqpXJUE.mjs +707 -0
  807. package/dist/taxonomies-BpqpXJUE.mjs.map +1 -0
  808. package/dist/taxonomies-ClCo4IGO.mjs +899 -0
  809. package/dist/taxonomies-ClCo4IGO.mjs.map +1 -0
  810. package/dist/taxonomy-Dj1vpw5E.mjs +508 -0
  811. package/dist/taxonomy-Dj1vpw5E.mjs.map +1 -0
  812. package/dist/tokens-Ns02GAma.mjs +171 -0
  813. package/dist/tokens-Ns02GAma.mjs.map +1 -0
  814. package/dist/transaction-BcJO4Tmc.mjs +29 -0
  815. package/dist/transaction-BcJO4Tmc.mjs.map +1 -0
  816. package/dist/transport-B8P1xsqk.mjs +136 -0
  817. package/dist/transport-B8P1xsqk.mjs.map +1 -0
  818. package/dist/transport-BLHZZcD_.d.mts +42 -0
  819. package/dist/transport-BLHZZcD_.d.mts.map +1 -0
  820. package/dist/trusted-proxy-Cg7SuD15.mjs +51 -0
  821. package/dist/trusted-proxy-Cg7SuD15.mjs.map +1 -0
  822. package/dist/turnstile-DWCSh_Qc.mjs +53 -0
  823. package/dist/turnstile-DWCSh_Qc.mjs.map +1 -0
  824. package/dist/types-B3RkqvDW.mjs +156 -0
  825. package/dist/types-B3RkqvDW.mjs.map +1 -0
  826. package/dist/types-BkUg2yHx.mjs +92 -0
  827. package/dist/types-BkUg2yHx.mjs.map +1 -0
  828. package/dist/types-BtuppOTV.mjs +16 -0
  829. package/dist/types-BtuppOTV.mjs.map +1 -0
  830. package/dist/types-CCR3ivXE.d.mts +363 -0
  831. package/dist/types-CCR3ivXE.d.mts.map +1 -0
  832. package/dist/types-CSHgU_-_.mjs +18 -0
  833. package/dist/types-CSHgU_-_.mjs.map +1 -0
  834. package/dist/types-CbwqGOXm.d.mts +766 -0
  835. package/dist/types-CbwqGOXm.d.mts.map +1 -0
  836. package/dist/types-D4RGIc2I.d.mts +198 -0
  837. package/dist/types-D4RGIc2I.d.mts.map +1 -0
  838. package/dist/types-DEHidMEk.d.mts +1637 -0
  839. package/dist/types-DEHidMEk.d.mts.map +1 -0
  840. package/dist/types-DQeU2SR7.d.mts +279 -0
  841. package/dist/types-DQeU2SR7.d.mts.map +1 -0
  842. package/dist/types-DxQWoQLA.d.mts +264 -0
  843. package/dist/types-DxQWoQLA.d.mts.map +1 -0
  844. package/dist/types-FBBnGZ2Y.d.mts +198 -0
  845. package/dist/types-FBBnGZ2Y.d.mts.map +1 -0
  846. package/dist/types-ZCnlropY.mjs +69 -0
  847. package/dist/types-ZCnlropY.mjs.map +1 -0
  848. package/dist/types-_Qtyawiy.d.mts +124 -0
  849. package/dist/types-_Qtyawiy.d.mts.map +1 -0
  850. package/dist/types-gC6FAoa_.d.mts +75 -0
  851. package/dist/types-gC6FAoa_.d.mts.map +1 -0
  852. package/dist/types-k--LneIF.mjs +22 -0
  853. package/dist/types-k--LneIF.mjs.map +1 -0
  854. package/dist/upload-attempts-2xdnoKGe.mjs +27 -0
  855. package/dist/upload-attempts-2xdnoKGe.mjs.map +1 -0
  856. package/dist/url-pattern-3m3reMzr.mjs +33 -0
  857. package/dist/url-pattern-3m3reMzr.mjs.map +1 -0
  858. package/dist/user-DroRntkx.mjs +171 -0
  859. package/dist/user-DroRntkx.mjs.map +1 -0
  860. package/dist/utils-CC2oNGV8.mjs +435 -0
  861. package/dist/utils-CC2oNGV8.mjs.map +1 -0
  862. package/dist/validate-BCP9HNDn.mjs +384 -0
  863. package/dist/validate-BCP9HNDn.mjs.map +1 -0
  864. package/dist/validate-CyQ7I3xF.d.mts +410 -0
  865. package/dist/validate-CyQ7I3xF.d.mts.map +1 -0
  866. package/dist/validate-DANX1-Qi.mjs +120 -0
  867. package/dist/validate-DANX1-Qi.mjs.map +1 -0
  868. package/dist/validation-DBy6WF94.mjs +216 -0
  869. package/dist/validation-DBy6WF94.mjs.map +1 -0
  870. package/dist/version-B57E4Uo7.mjs +7 -0
  871. package/dist/version-B57E4Uo7.mjs.map +1 -0
  872. package/dist/widgets-wQ7Xcgq8.mjs +126 -0
  873. package/dist/widgets-wQ7Xcgq8.mjs.map +1 -0
  874. package/dist/wxr-taxonomies-DIHfvEDt.mjs +406 -0
  875. package/dist/wxr-taxonomies-DIHfvEDt.mjs.map +1 -0
  876. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts +34 -0
  877. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts.map +1 -0
  878. package/dist/zod-generator-D_yHIWfs.mjs +329 -0
  879. package/dist/zod-generator-D_yHIWfs.mjs.map +1 -0
  880. package/package.json +36 -11
  881. package/src/api/errors.ts +16 -0
  882. package/src/api/handlers/backup.ts +11 -5
  883. package/src/api/handlers/content.ts +160 -6
  884. package/src/api/handlers/dashboard.ts +31 -1
  885. package/src/api/handlers/index.ts +3 -0
  886. package/src/api/handlers/manifest.ts +4 -6
  887. package/src/api/handlers/marketplace.ts +99 -15
  888. package/src/api/handlers/media-upload.ts +31 -4
  889. package/src/api/handlers/plugin-settings.ts +35 -3
  890. package/src/api/handlers/redirects.ts +221 -138
  891. package/src/api/handlers/registry.ts +62 -21
  892. package/src/api/handlers/revision.ts +14 -26
  893. package/src/api/handlers/snapshot.ts +4 -1
  894. package/src/api/handlers/taxonomies.ts +70 -5
  895. package/src/api/handlers/validation.ts +120 -19
  896. package/src/api/openapi/document.ts +34 -17
  897. package/src/api/schemas/content.ts +26 -14
  898. package/src/api/schemas/entry-lock.ts +9 -0
  899. package/src/api/schemas/search.ts +4 -0
  900. package/src/api/types.ts +2 -0
  901. package/src/astro/integration/index.ts +16 -3
  902. package/src/astro/integration/routes.ts +84 -0
  903. package/src/astro/integration/runtime.ts +31 -23
  904. package/src/astro/integration/virtual-modules.ts +4 -0
  905. package/src/astro/integration/vite-config.ts +1 -0
  906. package/src/astro/middleware/auth.ts +25 -4
  907. package/src/astro/middleware/request-context.ts +28 -10
  908. package/src/astro/middleware.ts +17 -1
  909. package/src/astro/prefetch.ts +2 -2
  910. package/src/astro/routes/api/admin/comments/[id]/status.ts +22 -58
  911. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +2 -15
  912. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +2 -25
  913. package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +1 -0
  914. package/src/astro/routes/api/admin/plugins/[id]/update.ts +23 -4
  915. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +12 -2
  916. package/src/astro/routes/api/admin/plugins/registry/[id]/uninstall.ts +1 -0
  917. package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +29 -10
  918. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +8 -2
  919. package/src/astro/routes/api/admin/plugins/registry/install.ts +15 -4
  920. package/src/astro/routes/api/admin/plugins/registry/verify.ts +2 -1
  921. package/src/astro/routes/api/admin/plugins/updates.ts +6 -1
  922. package/src/astro/routes/api/admin/scheduled-policy-rejections/[collection]/[id].ts +34 -0
  923. package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +4 -259
  924. package/src/astro/routes/api/content/[collection]/[id]/plugin-extensions/[pluginId]/[kind]/[extensionId].ts +29 -0
  925. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +10 -3
  926. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +10 -1
  927. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +5 -1
  928. package/src/astro/routes/api/health.ts +23 -0
  929. package/src/astro/routes/api/manifest.ts +14 -4
  930. package/src/astro/routes/api/mcp.ts +2 -1
  931. package/src/astro/routes/api/media/asset/[id]/[filename].ts +50 -0
  932. package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +13 -81
  933. package/src/astro/routes/api/redirects/[id].ts +0 -3
  934. package/src/astro/routes/api/redirects/index.ts +0 -2
  935. package/src/astro/routes/api/search/index.ts +1 -0
  936. package/src/astro/routes/api/visual-editing/action-token.ts +36 -0
  937. package/src/astro/routes/api/visual-editing/content/[collection]/[id]/publish.ts +32 -0
  938. package/src/astro/routes/api/visual-editing/toolbar-labels.ts +16 -0
  939. package/src/astro/routes/sitemap-[collection].xml.ts +7 -4
  940. package/src/astro/types.ts +70 -9
  941. package/src/cli/commands/bundle-utils.ts +19 -19
  942. package/src/cli/commands/bundle.ts +9 -6
  943. package/src/cli/commands/content.ts +1 -1
  944. package/src/cli/commands/doctor.ts +25 -0
  945. package/src/cli/commands/export-seed.ts +193 -56
  946. package/src/cli/commands/migrate.ts +71 -23
  947. package/src/cli/commands/publish.ts +2 -2
  948. package/src/comments/public-submission.ts +246 -0
  949. package/src/comments/service.ts +59 -12
  950. package/src/components/EmDashHead.astro +1 -0
  951. package/src/components/widgets/Archives.astro +6 -5
  952. package/src/config/secrets.ts +25 -11
  953. package/src/content/known-fields.ts +44 -0
  954. package/src/database/connection.ts +5 -1
  955. package/src/database/content-datetime.ts +123 -0
  956. package/src/database/datetime-storage.ts +452 -0
  957. package/src/database/dialect-helpers.ts +36 -1
  958. package/src/database/migration-lock.ts +140 -0
  959. package/src/database/migrations/078_menu_item_translation_groups.ts +15 -0
  960. package/src/database/migrations/079_datetime_normalization.ts +13 -0
  961. package/src/database/migrations/080_content_translation_locale_unique.ts +88 -0
  962. package/src/database/migrations/081_redirect_write_guards.ts +257 -0
  963. package/src/database/migrations/082_taxonomy_translation_locale_unique.ts +49 -0
  964. package/src/database/migrations/runner.ts +57 -15
  965. package/src/database/pg-migration-lock.ts +2 -2
  966. package/src/database/repositories/byline.ts +9 -0
  967. package/src/database/repositories/comment.ts +86 -0
  968. package/src/database/repositories/content.ts +391 -69
  969. package/src/database/repositories/media.ts +35 -4
  970. package/src/database/repositories/menu.ts +1 -0
  971. package/src/database/repositories/options.ts +46 -4
  972. package/src/database/repositories/redirect.ts +259 -64
  973. package/src/database/repositories/revision.ts +116 -17
  974. package/src/database/repositories/taxonomy.ts +34 -0
  975. package/src/database/repositories/types.ts +2 -0
  976. package/src/database/types.ts +11 -0
  977. package/src/datetime-normalization.ts +311 -0
  978. package/src/db/node-sqlite-compat.ts +3 -2
  979. package/src/emdash-runtime.ts +1925 -422
  980. package/src/fields/image.ts +2 -0
  981. package/src/i18n/config.ts +6 -6
  982. package/src/i18n/resolve.ts +54 -11
  983. package/src/index.ts +87 -0
  984. package/src/loader.ts +14 -0
  985. package/src/mcp/server.ts +194 -64
  986. package/src/media/usage/extractor.ts +50 -15
  987. package/src/media/usage/types.ts +1 -1
  988. package/src/menus/index.ts +49 -16
  989. package/src/migrations/direct-executor.ts +40 -2
  990. package/src/migrations/index.ts +1 -0
  991. package/src/migrations/protocol.ts +11 -1
  992. package/src/plugin-test-runtime.ts +17 -0
  993. package/src/plugin-types.ts +119 -21
  994. package/src/plugins/adapt-sandbox-entry.ts +34 -27
  995. package/src/plugins/content-access.ts +170 -0
  996. package/src/plugins/content-policy.ts +74 -0
  997. package/src/plugins/context.ts +742 -150
  998. package/src/plugins/cron.ts +18 -10
  999. package/src/plugins/define-plugin.ts +55 -54
  1000. package/src/plugins/editor-draft.ts +257 -0
  1001. package/src/plugins/hooks.ts +129 -2
  1002. package/src/plugins/host.ts +29 -0
  1003. package/src/plugins/http-route-dispatch.ts +389 -0
  1004. package/src/plugins/http-wire.ts +180 -0
  1005. package/src/plugins/index.ts +88 -3
  1006. package/src/plugins/install-finalization.ts +77 -0
  1007. package/src/plugins/lifecycle.ts +47 -0
  1008. package/src/plugins/manifest-schema.ts +314 -58
  1009. package/src/plugins/media.ts +166 -0
  1010. package/src/plugins/request-meta.ts +12 -2
  1011. package/src/plugins/route-wire.ts +304 -0
  1012. package/src/plugins/routes.ts +38 -5
  1013. package/src/plugins/sandbox/index.ts +4 -0
  1014. package/src/plugins/sandbox/proxy.ts +129 -0
  1015. package/src/plugins/sandbox/types.ts +67 -5
  1016. package/src/plugins/secret-redactor.ts +65 -0
  1017. package/src/plugins/settings.ts +303 -0
  1018. package/src/plugins/state.ts +26 -0
  1019. package/src/plugins/types.ts +488 -15
  1020. package/src/query.ts +55 -1
  1021. package/src/registry/authoritative-records.ts +26 -0
  1022. package/src/registry/config.ts +70 -22
  1023. package/src/registry/testing.ts +100 -0
  1024. package/src/registry/types.ts +7 -64
  1025. package/src/scheduled-publish.ts +70 -3
  1026. package/src/schema/index.ts +1 -0
  1027. package/src/schema/registry.ts +45 -1
  1028. package/src/schema/types.ts +7 -0
  1029. package/src/schema/zod-generator.ts +5 -13
  1030. package/src/search/fts-manager.ts +3 -3
  1031. package/src/search/query.ts +32 -5
  1032. package/src/search/types.ts +8 -0
  1033. package/src/seed/apply.ts +37 -3
  1034. package/src/seed/types.ts +6 -1
  1035. package/src/seo/hreflang.ts +9 -6
  1036. package/src/settings/index.ts +53 -11
  1037. package/src/visual-editing/action-token.ts +31 -0
  1038. package/src/visual-editing/toolbar-bootstrap.ts +31 -6
  1039. package/src/visual-editing/toolbar.ts +103 -12
  1040. package/src/widgets/archives.ts +10 -9
  1041. package/src/widgets/index.ts +11 -1
  1042. package/dist/activation-DyNTe_Tl.mjs +0 -382
  1043. package/dist/activation-DyNTe_Tl.mjs.map +0 -1
  1044. package/dist/adapters-DCEgOBXi.d.mts +0 -171
  1045. package/dist/adapters-DCEgOBXi.d.mts.map +0 -1
  1046. package/dist/after-CBU2vkoO.mjs +0 -96
  1047. package/dist/after-CBU2vkoO.mjs.map +0 -1
  1048. package/dist/allowed-origins-GFUVavRj.mjs +0 -116
  1049. package/dist/allowed-origins-GFUVavRj.mjs.map +0 -1
  1050. package/dist/api-BvxJmnFY.mjs +0 -10094
  1051. package/dist/api-BvxJmnFY.mjs.map +0 -1
  1052. package/dist/api-tokens-xpGqMHrC.mjs +0 -163
  1053. package/dist/api-tokens-xpGqMHrC.mjs.map +0 -1
  1054. package/dist/apply-DLmM3R7f.mjs +0 -984
  1055. package/dist/apply-DLmM3R7f.mjs.map +0 -1
  1056. package/dist/artifact-fetch-P2JXVwOq.mjs +0 -972
  1057. package/dist/artifact-fetch-P2JXVwOq.mjs.map +0 -1
  1058. package/dist/authorize-C2QHlWSS.mjs +0 -40
  1059. package/dist/authorize-C2QHlWSS.mjs.map +0 -1
  1060. package/dist/backup-oS8ft5Cm.mjs +0 -241
  1061. package/dist/backup-oS8ft5Cm.mjs.map +0 -1
  1062. package/dist/base64-CvLhUKQv.mjs +0 -63
  1063. package/dist/base64-CvLhUKQv.mjs.map +0 -1
  1064. package/dist/bundle-CL0JjIPx.mjs +0 -663
  1065. package/dist/bundle-CL0JjIPx.mjs.map +0 -1
  1066. package/dist/byline-Vdi85CsZ.mjs +0 -902
  1067. package/dist/byline-Vdi85CsZ.mjs.map +0 -1
  1068. package/dist/byline-fields-DPVRFMz2.mjs +0 -123
  1069. package/dist/byline-fields-DPVRFMz2.mjs.map +0 -1
  1070. package/dist/byline-registry-BxDGIO0I.mjs +0 -406
  1071. package/dist/byline-registry-BxDGIO0I.mjs.map +0 -1
  1072. package/dist/bylines-BX8QhcTk.mjs +0 -232
  1073. package/dist/bylines-BX8QhcTk.mjs.map +0 -1
  1074. package/dist/bylines-w-E1IEQd.mjs +0 -214
  1075. package/dist/bylines-w-E1IEQd.mjs.map +0 -1
  1076. package/dist/cache--7HKu5Xm.mjs +0 -108
  1077. package/dist/cache--7HKu5Xm.mjs.map +0 -1
  1078. package/dist/capture-triggers-CeAsC76Z.mjs +0 -362
  1079. package/dist/capture-triggers-CeAsC76Z.mjs.map +0 -1
  1080. package/dist/challenge-store-BIOak-tp.mjs +0 -51
  1081. package/dist/challenge-store-BIOak-tp.mjs.map +0 -1
  1082. package/dist/chrome-tags-DzDQBCjX.mjs +0 -24
  1083. package/dist/chrome-tags-DzDQBCjX.mjs.map +0 -1
  1084. package/dist/chunks-VG_tyqnP.mjs +0 -25
  1085. package/dist/chunks-VG_tyqnP.mjs.map +0 -1
  1086. package/dist/collection-deletion-BCwaWTDw.mjs +0 -436
  1087. package/dist/collection-deletion-BCwaWTDw.mjs.map +0 -1
  1088. package/dist/collection-slugs-cache-7lTmNzeA.mjs +0 -85
  1089. package/dist/collection-slugs-cache-7lTmNzeA.mjs.map +0 -1
  1090. package/dist/comment-reaction-CDyvPQRj.mjs +0 -85
  1091. package/dist/comment-reaction-CDyvPQRj.mjs.map +0 -1
  1092. package/dist/comment-vxOzWbZN.mjs +0 -255
  1093. package/dist/comment-vxOzWbZN.mjs.map +0 -1
  1094. package/dist/comments-VzmVLyaC.mjs +0 -204
  1095. package/dist/comments-VzmVLyaC.mjs.map +0 -1
  1096. package/dist/components-CL6Wkdk-.mjs +0 -108
  1097. package/dist/components-CL6Wkdk-.mjs.map +0 -1
  1098. package/dist/config--eWjQJE5.mjs +0 -217
  1099. package/dist/config--eWjQJE5.mjs.map +0 -1
  1100. package/dist/config-C3EBstHi.mjs +0 -72
  1101. package/dist/config-C3EBstHi.mjs.map +0 -1
  1102. package/dist/config-CGAhyOjP.d.mts +0 -6653
  1103. package/dist/config-CGAhyOjP.d.mts.map +0 -1
  1104. package/dist/config-ChFzshGd.d.mts +0 -34
  1105. package/dist/config-ChFzshGd.d.mts.map +0 -1
  1106. package/dist/content-CNfMWuhY.mjs +0 -1841
  1107. package/dist/content-CNfMWuhY.mjs.map +0 -1
  1108. package/dist/content-list-query-B8d4UQp9.d.mts +0 -26
  1109. package/dist/content-list-query-B8d4UQp9.d.mts.map +0 -1
  1110. package/dist/content-refresh-GTMyi2Xy.mjs +0 -3588
  1111. package/dist/content-refresh-GTMyi2Xy.mjs.map +0 -1
  1112. package/dist/content-repair-CIMt5C0U.mjs +0 -440
  1113. package/dist/content-repair-CIMt5C0U.mjs.map +0 -1
  1114. package/dist/context-C9PB8vGd.mjs +0 -1308
  1115. package/dist/context-C9PB8vGd.mjs.map +0 -1
  1116. package/dist/cron-DHAy9oyq.mjs +0 -277
  1117. package/dist/cron-DHAy9oyq.mjs.map +0 -1
  1118. package/dist/dashboard-BNSvAN8A.mjs +0 -140
  1119. package/dist/dashboard-BNSvAN8A.mjs.map +0 -1
  1120. package/dist/db-errors-Cl-sKYTm.mjs +0 -55
  1121. package/dist/db-errors-Cl-sKYTm.mjs.map +0 -1
  1122. package/dist/default-ByZ0JqZo.mjs +0 -81
  1123. package/dist/default-ByZ0JqZo.mjs.map +0 -1
  1124. package/dist/deferred-tasks-Cu4NSJpa.d.mts +0 -9
  1125. package/dist/deferred-tasks-Cu4NSJpa.d.mts.map +0 -1
  1126. package/dist/dev-typegen-DHT7lcMU.mjs +0 -29
  1127. package/dist/dev-typegen-DHT7lcMU.mjs.map +0 -1
  1128. package/dist/device-flow-Cf6bhCCT.mjs +0 -466
  1129. package/dist/device-flow-Cf6bhCCT.mjs.map +0 -1
  1130. package/dist/dialect-helpers-BcQvkHgn.mjs +0 -283
  1131. package/dist/dialect-helpers-BcQvkHgn.mjs.map +0 -1
  1132. package/dist/direct-executor-yAyUGSqB.mjs +0 -85
  1133. package/dist/direct-executor-yAyUGSqB.mjs.map +0 -1
  1134. package/dist/dist-BAsh8dbf.mjs +0 -810
  1135. package/dist/dist-BAsh8dbf.mjs.map +0 -1
  1136. package/dist/email-console-DNup1Fku.mjs +0 -50
  1137. package/dist/email-console-DNup1Fku.mjs.map +0 -1
  1138. package/dist/enrich-t2Xvjdqa.mjs +0 -194
  1139. package/dist/enrich-t2Xvjdqa.mjs.map +0 -1
  1140. package/dist/entry-lock-BEr8gDkG.mjs +0 -163
  1141. package/dist/entry-lock-BEr8gDkG.mjs.map +0 -1
  1142. package/dist/entry-lock-CGAtrwAR.d.mts +0 -3409
  1143. package/dist/entry-lock-CGAtrwAR.d.mts.map +0 -1
  1144. package/dist/entry-lock-DIYHAaSw.mjs +0 -1281
  1145. package/dist/entry-lock-DIYHAaSw.mjs.map +0 -1
  1146. package/dist/entry-locks-BEcX7ET0.mjs +0 -167
  1147. package/dist/entry-locks-BEcX7ET0.mjs.map +0 -1
  1148. package/dist/error-BDcFyoRt.mjs +0 -90
  1149. package/dist/error-BDcFyoRt.mjs.map +0 -1
  1150. package/dist/errors-DvMdNrgf.mjs +0 -434
  1151. package/dist/errors-DvMdNrgf.mjs.map +0 -1
  1152. package/dist/escape-B3asJC6W.mjs +0 -9
  1153. package/dist/escape-B3asJC6W.mjs.map +0 -1
  1154. package/dist/field-defs-cache-Cf5FHK0M.mjs +0 -77
  1155. package/dist/field-defs-cache-Cf5FHK0M.mjs.map +0 -1
  1156. package/dist/focal-point-BeWFo6Xx.mjs +0 -23
  1157. package/dist/focal-point-BeWFo6Xx.mjs.map +0 -1
  1158. package/dist/fts-manager-iddym8cd.mjs +0 -413
  1159. package/dist/fts-manager-iddym8cd.mjs.map +0 -1
  1160. package/dist/hash-BRweX6jz.mjs +0 -37
  1161. package/dist/hash-BRweX6jz.mjs.map +0 -1
  1162. package/dist/hook-result-BrshYHLx.d.mts +0 -31
  1163. package/dist/hook-result-BrshYHLx.d.mts.map +0 -1
  1164. package/dist/hreflang-CQpu5bMy.d.mts +0 -48
  1165. package/dist/hreflang-CQpu5bMy.d.mts.map +0 -1
  1166. package/dist/hreflang-DshnweTC.mjs +0 -103
  1167. package/dist/hreflang-DshnweTC.mjs.map +0 -1
  1168. package/dist/identity-CjGKDq8J.mjs +0 -35
  1169. package/dist/identity-CjGKDq8J.mjs.map +0 -1
  1170. package/dist/import-D96g2otw.mjs +0 -2020
  1171. package/dist/import-D96g2otw.mjs.map +0 -1
  1172. package/dist/index-1ECYpfiF.d.mts +0 -278
  1173. package/dist/index-1ECYpfiF.d.mts.map +0 -1
  1174. package/dist/init-lock-CFNBe_iH.mjs +0 -56
  1175. package/dist/init-lock-CFNBe_iH.mjs.map +0 -1
  1176. package/dist/load-DPtY9cZo.mjs +0 -28
  1177. package/dist/load-DPtY9cZo.mjs.map +0 -1
  1178. package/dist/loader-WJi6GFRn.mjs +0 -1004
  1179. package/dist/loader-WJi6GFRn.mjs.map +0 -1
  1180. package/dist/manifest-builder-BfNlGQIA.mjs +0 -189
  1181. package/dist/manifest-builder-BfNlGQIA.mjs.map +0 -1
  1182. package/dist/manifest-schema-CILooI5J.mjs +0 -301
  1183. package/dist/manifest-schema-CILooI5J.mjs.map +0 -1
  1184. package/dist/media-BBm8Wg3f.mjs +0 -318
  1185. package/dist/media-BBm8Wg3f.mjs.map +0 -1
  1186. package/dist/media-C1EIZKh1.mjs +0 -464
  1187. package/dist/media-C1EIZKh1.mjs.map +0 -1
  1188. package/dist/media-allowlist-elXJgb_K.mjs +0 -44
  1189. package/dist/media-allowlist-elXJgb_K.mjs.map +0 -1
  1190. package/dist/media-folders-DASfX_DH.mjs +0 -210
  1191. package/dist/media-folders-DASfX_DH.mjs.map +0 -1
  1192. package/dist/media-upload-C7_AQJ5v.mjs +0 -147
  1193. package/dist/media-upload-C7_AQJ5v.mjs.map +0 -1
  1194. package/dist/media-url-8dVl1loq.mjs +0 -43
  1195. package/dist/media-url-8dVl1loq.mjs.map +0 -1
  1196. package/dist/media-usage-C1EswMTq.mjs +0 -1833
  1197. package/dist/media-usage-C1EswMTq.mjs.map +0 -1
  1198. package/dist/media-usage-activation-CrHNltlL.mjs +0 -78
  1199. package/dist/media-usage-activation-CrHNltlL.mjs.map +0 -1
  1200. package/dist/media-usage-work-C5B1zT1c.mjs +0 -586
  1201. package/dist/media-usage-work-C5B1zT1c.mjs.map +0 -1
  1202. package/dist/media-usage-work-IkQx_Yz6.mjs +0 -152
  1203. package/dist/media-usage-work-IkQx_Yz6.mjs.map +0 -1
  1204. package/dist/media-usage-write-fence-B9anjOSg.mjs +0 -42
  1205. package/dist/media-usage-write-fence-B9anjOSg.mjs.map +0 -1
  1206. package/dist/menus-D8mC4eaN.mjs +0 -3989
  1207. package/dist/menus-D8mC4eaN.mjs.map +0 -1
  1208. package/dist/menus-UdwjHZJC.mjs +0 -752
  1209. package/dist/menus-UdwjHZJC.mjs.map +0 -1
  1210. package/dist/mime-DYpsOAny.mjs +0 -36
  1211. package/dist/mime-DYpsOAny.mjs.map +0 -1
  1212. package/dist/mode-Dm4BHhRH.mjs +0 -23
  1213. package/dist/mode-Dm4BHhRH.mjs.map +0 -1
  1214. package/dist/node-sqlite-compat-2sezm-Zd.mjs +0 -46
  1215. package/dist/node-sqlite-compat-2sezm-Zd.mjs.map +0 -1
  1216. package/dist/normalize-4nkKGsuW.mjs +0 -191
  1217. package/dist/normalize-4nkKGsuW.mjs.map +0 -1
  1218. package/dist/oauth-authorization-BxE_lURD.mjs +0 -274
  1219. package/dist/oauth-authorization-BxE_lURD.mjs.map +0 -1
  1220. package/dist/oauth-clients-DJIdOdq0.mjs +0 -266
  1221. package/dist/oauth-clients-DJIdOdq0.mjs.map +0 -1
  1222. package/dist/oauth-state-store-CsdxP57n.mjs +0 -50
  1223. package/dist/oauth-state-store-CsdxP57n.mjs.map +0 -1
  1224. package/dist/oauth-user-lookup-HzzW-dkF.mjs +0 -26
  1225. package/dist/oauth-user-lookup-HzzW-dkF.mjs.map +0 -1
  1226. package/dist/object-cache-DVKnyOfy.mjs +0 -534
  1227. package/dist/object-cache-DVKnyOfy.mjs.map +0 -1
  1228. package/dist/options-D1FBiAv1.mjs +0 -172
  1229. package/dist/options-D1FBiAv1.mjs.map +0 -1
  1230. package/dist/options-D8Y0VHc7.d.mts +0 -227
  1231. package/dist/options-D8Y0VHc7.d.mts.map +0 -1
  1232. package/dist/parse-WRg5C3NX.mjs +0 -81
  1233. package/dist/parse-WRg5C3NX.mjs.map +0 -1
  1234. package/dist/passkey-config-qIdO-wF6.mjs +0 -46
  1235. package/dist/passkey-config-qIdO-wF6.mjs.map +0 -1
  1236. package/dist/patterns-DC8CLptu.mjs +0 -145
  1237. package/dist/patterns-DC8CLptu.mjs.map +0 -1
  1238. package/dist/placeholder-COrvARyD.d.mts +0 -306
  1239. package/dist/placeholder-COrvARyD.d.mts.map +0 -1
  1240. package/dist/policy-XCfb-IE9.mjs +0 -45
  1241. package/dist/policy-XCfb-IE9.mjs.map +0 -1
  1242. package/dist/portable-text-BS3d5n-0.mjs +0 -286
  1243. package/dist/portable-text-BS3d5n-0.mjs.map +0 -1
  1244. package/dist/preview-BxwsGgGp.mjs +0 -107
  1245. package/dist/preview-BxwsGgGp.mjs.map +0 -1
  1246. package/dist/protocol-CLn58-nw.d.mts +0 -52
  1247. package/dist/protocol-CLn58-nw.d.mts.map +0 -1
  1248. package/dist/public-url-FWWAvnre.mjs +0 -101
  1249. package/dist/public-url-FWWAvnre.mjs.map +0 -1
  1250. package/dist/query-DygOte9M.mjs +0 -890
  1251. package/dist/query-DygOte9M.mjs.map +0 -1
  1252. package/dist/query-gtXT03Wc.mjs +0 -41
  1253. package/dist/query-gtXT03Wc.mjs.map +0 -1
  1254. package/dist/rate-limit-CQUPm0dh.mjs +0 -120
  1255. package/dist/rate-limit-CQUPm0dh.mjs.map +0 -1
  1256. package/dist/redirect-D1cWafi6.mjs +0 -17
  1257. package/dist/redirect-D1cWafi6.mjs.map +0 -1
  1258. package/dist/redirect-DId44BS1.mjs +0 -326
  1259. package/dist/redirect-DId44BS1.mjs.map +0 -1
  1260. package/dist/redirects-DN-ZE33W.mjs +0 -579
  1261. package/dist/redirects-DN-ZE33W.mjs.map +0 -1
  1262. package/dist/registry-DTqaqxed.mjs +0 -1195
  1263. package/dist/registry-DTqaqxed.mjs.map +0 -1
  1264. package/dist/relation-DxgCHOBw.mjs +0 -334
  1265. package/dist/relation-DxgCHOBw.mjs.map +0 -1
  1266. package/dist/relations-KKDSLUwS.mjs +0 -403
  1267. package/dist/relations-KKDSLUwS.mjs.map +0 -1
  1268. package/dist/relations-rOmbndUJ.mjs +0 -309
  1269. package/dist/relations-rOmbndUJ.mjs.map +0 -1
  1270. package/dist/request-cache-DAZZmesc.mjs +0 -104
  1271. package/dist/request-cache-DAZZmesc.mjs.map +0 -1
  1272. package/dist/request-meta-BgjUQLQ-.mjs +0 -140
  1273. package/dist/request-meta-BgjUQLQ-.mjs.map +0 -1
  1274. package/dist/resolve-Cy0aWSRj.mjs +0 -176
  1275. package/dist/resolve-Cy0aWSRj.mjs.map +0 -1
  1276. package/dist/runner-CfwysRM0.d.mts +0 -67
  1277. package/dist/runner-CfwysRM0.d.mts.map +0 -1
  1278. package/dist/runner-nEzvnogG.mjs +0 -4800
  1279. package/dist/runner-nEzvnogG.mjs.map +0 -1
  1280. package/dist/schema-CRu38Pr5.mjs +0 -9
  1281. package/dist/schema-CRu38Pr5.mjs.map +0 -1
  1282. package/dist/schema-DifxndJx.mjs +0 -420
  1283. package/dist/schema-DifxndJx.mjs.map +0 -1
  1284. package/dist/scopes-D5A1OZbq.mjs +0 -27
  1285. package/dist/scopes-D5A1OZbq.mjs.map +0 -1
  1286. package/dist/search-DEPFSBFq.mjs +0 -439
  1287. package/dist/search-DEPFSBFq.mjs.map +0 -1
  1288. package/dist/secrets-CdfzLdoO.mjs +0 -330
  1289. package/dist/secrets-CdfzLdoO.mjs.map +0 -1
  1290. package/dist/sections-3X52kmIR.mjs +0 -346
  1291. package/dist/sections-3X52kmIR.mjs.map +0 -1
  1292. package/dist/seo-Bw68KxRc.mjs +0 -133
  1293. package/dist/seo-Bw68KxRc.mjs.map +0 -1
  1294. package/dist/seo-C4AmbsMU.mjs +0 -114
  1295. package/dist/seo-C4AmbsMU.mjs.map +0 -1
  1296. package/dist/service-J_-Vgo7R.mjs +0 -195
  1297. package/dist/service-J_-Vgo7R.mjs.map +0 -1
  1298. package/dist/session-user-CbnMMwk6.mjs +0 -51
  1299. package/dist/session-user-CbnMMwk6.mjs.map +0 -1
  1300. package/dist/settings-AnEFYICn.mjs +0 -51
  1301. package/dist/settings-AnEFYICn.mjs.map +0 -1
  1302. package/dist/settings-DcMjREe5.mjs +0 -258
  1303. package/dist/settings-DcMjREe5.mjs.map +0 -1
  1304. package/dist/setup-complete-BClXXTvr.mjs +0 -26
  1305. package/dist/setup-complete-BClXXTvr.mjs.map +0 -1
  1306. package/dist/setup-nonce-BheRa4RG.mjs +0 -25
  1307. package/dist/setup-nonce-BheRa4RG.mjs.map +0 -1
  1308. package/dist/single-flight-cache-jaswDzmQ.mjs +0 -104
  1309. package/dist/single-flight-cache-jaswDzmQ.mjs.map +0 -1
  1310. package/dist/site-url-Bqf-ea3N.mjs +0 -16
  1311. package/dist/site-url-Bqf-ea3N.mjs.map +0 -1
  1312. package/dist/slugify-B994zkXC.mjs +0 -17
  1313. package/dist/slugify-B994zkXC.mjs.map +0 -1
  1314. package/dist/snapshot-C4CtXntb.mjs +0 -232
  1315. package/dist/snapshot-C4CtXntb.mjs.map +0 -1
  1316. package/dist/ssrf-gl4gFNhw.mjs +0 -406
  1317. package/dist/ssrf-gl4gFNhw.mjs.map +0 -1
  1318. package/dist/state-1F6IOhdQ.mjs +0 -136
  1319. package/dist/state-1F6IOhdQ.mjs.map +0 -1
  1320. package/dist/status-Cenfk_r5.mjs +0 -30
  1321. package/dist/status-Cenfk_r5.mjs.map +0 -1
  1322. package/dist/target-CRzeTs8G.mjs +0 -27
  1323. package/dist/target-CRzeTs8G.mjs.map +0 -1
  1324. package/dist/taxonomies-BOdxuZpV.mjs +0 -844
  1325. package/dist/taxonomies-BOdxuZpV.mjs.map +0 -1
  1326. package/dist/taxonomies-NcFDq5Gg.mjs +0 -707
  1327. package/dist/taxonomies-NcFDq5Gg.mjs.map +0 -1
  1328. package/dist/taxonomy-DP1vny4K.mjs +0 -492
  1329. package/dist/taxonomy-DP1vny4K.mjs.map +0 -1
  1330. package/dist/tokens-CDk8ox9p.mjs +0 -171
  1331. package/dist/tokens-CDk8ox9p.mjs.map +0 -1
  1332. package/dist/transaction-0KOpOyMu.mjs +0 -29
  1333. package/dist/transaction-0KOpOyMu.mjs.map +0 -1
  1334. package/dist/transport-BVn4tVb9.d.mts +0 -42
  1335. package/dist/transport-BVn4tVb9.d.mts.map +0 -1
  1336. package/dist/transport-DP0JI-8i.mjs +0 -136
  1337. package/dist/transport-DP0JI-8i.mjs.map +0 -1
  1338. package/dist/trusted-proxy-BTM6UxqD.mjs +0 -51
  1339. package/dist/trusted-proxy-BTM6UxqD.mjs.map +0 -1
  1340. package/dist/types-2n848aVW.d.mts +0 -198
  1341. package/dist/types-2n848aVW.d.mts.map +0 -1
  1342. package/dist/types-A2cN6a4a.mjs +0 -3
  1343. package/dist/types-BMXnRIrX.mjs +0 -144
  1344. package/dist/types-BMXnRIrX.mjs.map +0 -1
  1345. package/dist/types-BouXpOsa.d.mts +0 -1446
  1346. package/dist/types-BouXpOsa.d.mts.map +0 -1
  1347. package/dist/types-ByG2coLw.mjs +0 -16
  1348. package/dist/types-ByG2coLw.mjs.map +0 -1
  1349. package/dist/types-CQPWhPxE.mjs +0 -92
  1350. package/dist/types-CQPWhPxE.mjs.map +0 -1
  1351. package/dist/types-DEfNJ__A.d.mts +0 -75
  1352. package/dist/types-DEfNJ__A.d.mts.map +0 -1
  1353. package/dist/types-DKcKSbtB.d.mts +0 -273
  1354. package/dist/types-DKcKSbtB.d.mts.map +0 -1
  1355. package/dist/types-DRYs7uTL.d.mts +0 -198
  1356. package/dist/types-DRYs7uTL.d.mts.map +0 -1
  1357. package/dist/types-DaEg7KX2.d.mts +0 -363
  1358. package/dist/types-DaEg7KX2.d.mts.map +0 -1
  1359. package/dist/types-LU8utpP_.d.mts +0 -262
  1360. package/dist/types-LU8utpP_.d.mts.map +0 -1
  1361. package/dist/types-VpYfPUxN.d.mts +0 -124
  1362. package/dist/types-VpYfPUxN.d.mts.map +0 -1
  1363. package/dist/types-c9GP7Dj5.mjs +0 -18
  1364. package/dist/types-c9GP7Dj5.mjs.map +0 -1
  1365. package/dist/types-tJWDK__M.d.mts +0 -756
  1366. package/dist/types-tJWDK__M.d.mts.map +0 -1
  1367. package/dist/upload-attempts-C6S2y-lp.mjs +0 -27
  1368. package/dist/upload-attempts-C6S2y-lp.mjs.map +0 -1
  1369. package/dist/url-pattern-UYtxVTuj.mjs +0 -33
  1370. package/dist/url-pattern-UYtxVTuj.mjs.map +0 -1
  1371. package/dist/user-DIsIXogT.mjs +0 -171
  1372. package/dist/user-DIsIXogT.mjs.map +0 -1
  1373. package/dist/utils-BicP5Qbg.mjs +0 -435
  1374. package/dist/utils-BicP5Qbg.mjs.map +0 -1
  1375. package/dist/validate-BpwoDOgt.mjs +0 -120
  1376. package/dist/validate-BpwoDOgt.mjs.map +0 -1
  1377. package/dist/validate-D8VPn4Hv.mjs +0 -384
  1378. package/dist/validate-D8VPn4Hv.mjs.map +0 -1
  1379. package/dist/validate-Df6Dvwbw.d.mts +0 -405
  1380. package/dist/validate-Df6Dvwbw.d.mts.map +0 -1
  1381. package/dist/validation-CzMJn9Ku.mjs +0 -155
  1382. package/dist/validation-CzMJn9Ku.mjs.map +0 -1
  1383. package/dist/version-CK67_SXX.mjs +0 -7
  1384. package/dist/version-CK67_SXX.mjs.map +0 -1
  1385. package/dist/widgets-RFVAxQl3.mjs +0 -122
  1386. package/dist/widgets-RFVAxQl3.mjs.map +0 -1
  1387. package/dist/wxr-taxonomies-BX4yQL9s.d.mts +0 -34
  1388. package/dist/wxr-taxonomies-BX4yQL9s.d.mts.map +0 -1
  1389. package/dist/wxr-taxonomies-Csdp7yde.mjs +0 -406
  1390. package/dist/wxr-taxonomies-Csdp7yde.mjs.map +0 -1
  1391. package/dist/zod-generator-CNRGdnBY.mjs +0 -331
  1392. package/dist/zod-generator-CNRGdnBY.mjs.map +0 -1
  1393. /package/dist/{api-tokens-B_lfpmH3.mjs → api-tokens-DS1VzN7_.mjs} +0 -0
  1394. /package/dist/{ssrf-TQhaljuI.mjs → ssrf-BRpTDMV6.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"pg-migration-lock.mjs","names":["PostgresAdapter","KyselyPostgresAdapter"],"sources":["../../src/database/pg-migration-lock.ts"],"sourcesContent":["/**\n * Fail-fast Postgres migration locking.\n *\n * Kysely's stock `PostgresAdapter.acquireMigrationLock` runs\n * `select pg_advisory_xact_lock(...)` — an unbounded blocking wait on a\n * database-wide advisory lock, held for the whole migration transaction.\n * On Cloudflare Workers that is a stampede amplifier (#1744): every isolate\n * that cold-starts while migrations are pending parks a connection inside\n * Postgres waiting for the lock, and when the holder's migration fails and\n * rolls back, the next waiter acquires the lock and re-runs the same\n * failing migration.\n *\n * `FailFastPostgresDialect` swaps the blocking wait for\n * `pg_try_advisory_xact_lock`: when another migrator holds the lock, the\n * adapter throws `MIGRATION_LOCK_BUSY_MESSAGE` immediately instead of\n * queueing inside the database. `runMigrations` treats that error like the\n * SQLite/D1 concurrent-migration race — it polls the migration table with\n * cheap bounded SELECTs until the concurrent migrator finishes (or the\n * wait deadline passes), without holding a transaction open.\n */\n\nimport type { DialectAdapter, Kysely, MigrationLockOptions } from \"kysely\";\nimport { PostgresAdapter as KyselyPostgresAdapter, PostgresDialect, sql } from \"kysely\";\n\n/**\n * Sentinel message thrown when another migrator holds the advisory lock.\n * `runMigrations` matches on it to route into the concurrent-migrator wait.\n */\nexport const MIGRATION_LOCK_BUSY_MESSAGE = \"EMDASH_MIGRATION_LOCK_BUSY\";\n\n/**\n * Kysely's advisory lock id (LOCK_ID in kysely's postgres-adapter). Reused\n * deliberately: during a rolling deploy, old isolates still run the stock\n * blocking adapter, and using the same id keeps old and new builds mutually\n * exclusive on the same lock.\n */\nconst KYSELY_PG_MIGRATION_LOCK_ID = BigInt(\"3853314791062309107\");\n\n/**\n * Extends the stock adapter so every capability flag and `instanceof` check\n * is inherited.\n */\nclass PostgresAdapter extends KyselyPostgresAdapter {\n\t// eslint-disable-next-line typescript/no-explicit-any -- matches the DialectAdapter signature\n\toverride async acquireMigrationLock(db: Kysely<any>, _opt: MigrationLockOptions): Promise<void> {\n\t\t// Transaction-level lock, like the stock adapter: Postgres supports\n\t\t// transactional DDL, so `db` here is the migration transaction and\n\t\t// the lock is released automatically on commit/rollback.\n\t\tconst result = await sql<{ acquired: boolean }>`\n\t\t\tselect pg_try_advisory_xact_lock(${sql.lit(KYSELY_PG_MIGRATION_LOCK_ID)}) as acquired\n\t\t`.execute(db);\n\t\tif (!result.rows[0]?.acquired) {\n\t\t\tthrow new Error(MIGRATION_LOCK_BUSY_MESSAGE);\n\t\t}\n\t}\n}\n\n/**\n * Drop-in replacement for Kysely's `PostgresDialect` whose migration lock\n * fails fast instead of blocking inside the database. Everything except\n * `createAdapter` is inherited unchanged, and because it subclasses\n * `PostgresDialect`, the public dialect type of `emdash/db/postgres` stays\n * `PostgresDialect` and `instanceof` checks keep working.\n */\nexport class FailFastPostgresDialect extends PostgresDialect {\n\toverride createAdapter(): DialectAdapter {\n\t\treturn new PostgresAdapter();\n\t}\n}\n"],"mappings":";;;;;;;AA4BA,MAAa,8BAA8B;;;;;;;AAQ3C,MAAM,8BAA8B,OAAO,sBAAsB;;;;;AAMjE,IAAMA,oBAAN,cAA8BC,gBAAsB;CAEnD,MAAe,qBAAqB,IAAiB,MAA2C;AAO/F,MAAI,EAHW,MAAM,GAA0B;sCACX,IAAI,IAAI,4BAA4B,CAAC;IACvE,QAAQ,GAAG,EACD,KAAK,IAAI,SACpB,OAAM,IAAI,MAAM,4BAA4B;;;;;;;;;;AAY/C,IAAa,0BAAb,cAA6C,gBAAgB;CAC5D,AAAS,gBAAgC;AACxC,SAAO,IAAID,mBAAiB"}
1
+ {"version":3,"file":"pg-migration-lock.mjs","names":["PostgresAdapter","KyselyPostgresAdapter"],"sources":["../../src/database/pg-migration-lock.ts"],"sourcesContent":["/**\n * Fail-fast Postgres migration locking.\n *\n * Kysely's stock `PostgresAdapter.acquireMigrationLock` runs\n * `select pg_advisory_xact_lock(...)` — an unbounded blocking wait on a\n * database-wide advisory lock, held for the whole migration transaction.\n * On Cloudflare Workers that is a stampede amplifier (#1744): every isolate\n * that cold-starts while migrations are pending parks a connection inside\n * Postgres waiting for the lock, and when the holder's migration fails and\n * rolls back, the next waiter acquires the lock and re-runs the same\n * failing migration.\n *\n * `FailFastPostgresDialect` swaps the blocking wait for\n * `pg_try_advisory_xact_lock`: when another migrator holds the lock, the\n * adapter throws `MIGRATION_LOCK_BUSY_MESSAGE` immediately instead of\n * queueing inside the database. `runMigrations` treats that error like the\n * SQLite concurrent-migration race — it polls the migration table with\n * cheap bounded SELECTs until the concurrent migrator finishes (or the\n * wait deadline passes), without holding a transaction open.\n */\n\nimport type { DialectAdapter, Kysely, MigrationLockOptions } from \"kysely\";\nimport { PostgresAdapter as KyselyPostgresAdapter, PostgresDialect, sql } from \"kysely\";\n\n/**\n * Sentinel message thrown when another migrator holds the migration lock.\n * `runMigrations` matches on it to route into the concurrent-migrator wait.\n */\nexport const MIGRATION_LOCK_BUSY_MESSAGE = \"EMDASH_MIGRATION_LOCK_BUSY\";\n\n/**\n * Kysely's advisory lock id (LOCK_ID in kysely's postgres-adapter). Reused\n * deliberately: during a rolling deploy, old isolates still run the stock\n * blocking adapter, and using the same id keeps old and new builds mutually\n * exclusive on the same lock.\n */\nconst KYSELY_PG_MIGRATION_LOCK_ID = BigInt(\"3853314791062309107\");\n\n/**\n * Extends the stock adapter so every capability flag and `instanceof` check\n * is inherited.\n */\nclass PostgresAdapter extends KyselyPostgresAdapter {\n\t// eslint-disable-next-line typescript/no-explicit-any -- matches the DialectAdapter signature\n\toverride async acquireMigrationLock(db: Kysely<any>, _opt: MigrationLockOptions): Promise<void> {\n\t\t// Transaction-level lock, like the stock adapter: Postgres supports\n\t\t// transactional DDL, so `db` here is the migration transaction and\n\t\t// the lock is released automatically on commit/rollback.\n\t\tconst result = await sql<{ acquired: boolean }>`\n\t\t\tselect pg_try_advisory_xact_lock(${sql.lit(KYSELY_PG_MIGRATION_LOCK_ID)}) as acquired\n\t\t`.execute(db);\n\t\tif (!result.rows[0]?.acquired) {\n\t\t\tthrow new Error(MIGRATION_LOCK_BUSY_MESSAGE);\n\t\t}\n\t}\n}\n\n/**\n * Drop-in replacement for Kysely's `PostgresDialect` whose migration lock\n * fails fast instead of blocking inside the database. Everything except\n * `createAdapter` is inherited unchanged, and because it subclasses\n * `PostgresDialect`, the public dialect type of `emdash/db/postgres` stays\n * `PostgresDialect` and `instanceof` checks keep working.\n */\nexport class FailFastPostgresDialect extends PostgresDialect {\n\toverride createAdapter(): DialectAdapter {\n\t\treturn new PostgresAdapter();\n\t}\n}\n"],"mappings":";;;;;;;AA4BA,MAAa,8BAA8B;;;;;;;AAQ3C,MAAM,8BAA8B,OAAO,sBAAsB;;;;;AAMjE,IAAMA,oBAAN,cAA8BC,gBAAsB;CAEnD,MAAe,qBAAqB,IAAiB,MAA2C;AAO/F,MAAI,EAHW,MAAM,GAA0B;sCACX,IAAI,IAAI,4BAA4B,CAAC;IACvE,QAAQ,GAAG,EACD,KAAK,IAAI,SACpB,OAAM,IAAI,MAAM,4BAA4B;;;;;;;;;;AAY/C,IAAa,0BAAb,cAA6C,gBAAgB;CAC5D,AAAS,gBAAgC;AACxC,SAAO,IAAID,mBAAiB"}
@@ -0,0 +1,187 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/datetime-normalization.ts
4
+ var DatetimeNormalizationError = class extends Error {
5
+ constructor(code, value, timezone) {
6
+ const detail = code === "ambiguous" ? "occurs more than once because of a daylight-saving transition" : code === "nonexistent" ? "does not exist because of a daylight-saving transition" : code === "invalid_timezone" ? `uses an invalid site timezone (${timezone})` : code === "offset_required" ? "must include Z or an explicit UTC offset" : "is not a valid ISO 8601 datetime";
7
+ super(`Datetime ${JSON.stringify(value)} ${detail}`);
8
+ this.code = code;
9
+ this.value = value;
10
+ this.timezone = timezone;
11
+ this.name = "DatetimeNormalizationError";
12
+ }
13
+ };
14
+ function isRecord(value) {
15
+ return typeof value === "object" && value !== null && !Array.isArray(value);
16
+ }
17
+ const NAIVE_DATETIME_PATTERN = /^(\d{4})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,3}))?)?)?$/;
18
+ const EXPLICIT_OFFSET_PATTERN = /(?:Z|[+-]\d{2}:?\d{2})$/i;
19
+ const EXPLICIT_DATETIME_SCHEMA = z.iso.datetime({ offset: true }).or(z.iso.datetime({
20
+ offset: true,
21
+ precision: -1
22
+ }));
23
+ const OFFSET_SAMPLE_RANGE_MS = 2880 * 60 * 1e3;
24
+ const OFFSET_SAMPLE_STEP_MS = 360 * 60 * 1e3;
25
+ function parseNaiveDatetime(value) {
26
+ const match = NAIVE_DATETIME_PATTERN.exec(value);
27
+ if (!match) return null;
28
+ const parts = {
29
+ year: Number(match[1]),
30
+ month: Number(match[2]),
31
+ day: Number(match[3]),
32
+ hour: Number(match[4] ?? 0),
33
+ minute: Number(match[5] ?? 0),
34
+ second: Number(match[6] ?? 0),
35
+ millisecond: Number((match[7] ?? "0").padEnd(3, "0"))
36
+ };
37
+ const check = new Date(Date.UTC(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, parts.second, parts.millisecond));
38
+ if (check.getUTCFullYear() !== parts.year || check.getUTCMonth() + 1 !== parts.month || check.getUTCDate() !== parts.day || check.getUTCHours() !== parts.hour || check.getUTCMinutes() !== parts.minute || check.getUTCSeconds() !== parts.second || check.getUTCMilliseconds() !== parts.millisecond) return null;
39
+ return parts;
40
+ }
41
+ function zonedFormatter(timezone, value) {
42
+ try {
43
+ return new Intl.DateTimeFormat("en-US-u-ca-iso8601-nu-latn", {
44
+ timeZone: timezone,
45
+ year: "numeric",
46
+ month: "2-digit",
47
+ day: "2-digit",
48
+ hour: "2-digit",
49
+ minute: "2-digit",
50
+ second: "2-digit",
51
+ hourCycle: "h23"
52
+ });
53
+ } catch {
54
+ throw new DatetimeNormalizationError("invalid_timezone", value, timezone);
55
+ }
56
+ }
57
+ function zonedParts(formatter, epochMs) {
58
+ const values = {};
59
+ for (const part of formatter.formatToParts(new Date(epochMs))) if (part.type !== "literal") values[part.type] = Number(part.value);
60
+ return {
61
+ year: values.year ?? 0,
62
+ month: values.month ?? 0,
63
+ day: values.day ?? 0,
64
+ hour: values.hour ?? 0,
65
+ minute: values.minute ?? 0,
66
+ second: values.second ?? 0
67
+ };
68
+ }
69
+ function timezoneOffsetMs(formatter, epochMs) {
70
+ const wholeSecond = Math.floor(epochMs / 1e3) * 1e3;
71
+ const parts = zonedParts(formatter, wholeSecond);
72
+ return Date.UTC(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, parts.second) - wholeSecond;
73
+ }
74
+ function sameLocalDatetime(formatter, epochMs, expected) {
75
+ const actual = zonedParts(formatter, epochMs);
76
+ return actual.year === expected.year && actual.month === expected.month && actual.day === expected.day && actual.hour === expected.hour && actual.minute === expected.minute && actual.second === expected.second && new Date(epochMs).getUTCMilliseconds() === expected.millisecond;
77
+ }
78
+ function resolveNaiveDatetime(value, timezone, parts) {
79
+ const formatter = zonedFormatter(timezone, value);
80
+ const localEpoch = Date.UTC(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, parts.second, parts.millisecond);
81
+ const offsets = /* @__PURE__ */ new Set();
82
+ for (let sample = localEpoch - OFFSET_SAMPLE_RANGE_MS; sample <= localEpoch + OFFSET_SAMPLE_RANGE_MS; sample += OFFSET_SAMPLE_STEP_MS) offsets.add(timezoneOffsetMs(formatter, sample));
83
+ const candidates = /* @__PURE__ */ new Set();
84
+ for (const offset of offsets) {
85
+ const candidate = localEpoch - offset;
86
+ if (sameLocalDatetime(formatter, candidate, parts)) candidates.add(candidate);
87
+ }
88
+ if (candidates.size === 0) throw new DatetimeNormalizationError("nonexistent", value, timezone);
89
+ if (candidates.size > 1) throw new DatetimeNormalizationError("ambiguous", value, timezone);
90
+ const candidate = candidates.values().next().value;
91
+ if (candidate === void 0) throw new DatetimeNormalizationError("nonexistent", value, timezone);
92
+ return new Date(candidate).toISOString();
93
+ }
94
+ function normalizeDatetime(value, timezone) {
95
+ if (value instanceof Date) {
96
+ if (Number.isNaN(value.getTime())) throw new DatetimeNormalizationError("invalid", value, timezone);
97
+ return {
98
+ value: value.toISOString(),
99
+ kind: "offset"
100
+ };
101
+ }
102
+ if (typeof value !== "string") throw new DatetimeNormalizationError("invalid", value, timezone);
103
+ if (value.startsWith("\"") && value.endsWith("\"")) try {
104
+ const unquoted = JSON.parse(value);
105
+ if (typeof unquoted === "string") {
106
+ const normalized = normalizeDatetime(unquoted, timezone);
107
+ return {
108
+ value: normalized.value,
109
+ kind: normalized.kind === "naive" ? "naive" : "offset"
110
+ };
111
+ }
112
+ } catch {
113
+ throw new DatetimeNormalizationError("invalid", value, timezone);
114
+ }
115
+ const naive = parseNaiveDatetime(value);
116
+ if (naive) return {
117
+ value: resolveNaiveDatetime(value, timezone, naive),
118
+ kind: "naive"
119
+ };
120
+ if (!EXPLICIT_OFFSET_PATTERN.test(value)) throw new DatetimeNormalizationError("invalid", value, timezone);
121
+ if (!EXPLICIT_DATETIME_SCHEMA.safeParse(value).success) throw new DatetimeNormalizationError("invalid", value, timezone);
122
+ const parsed = new Date(value);
123
+ if (Number.isNaN(parsed.getTime())) throw new DatetimeNormalizationError("invalid", value, timezone);
124
+ const normalized = parsed.toISOString();
125
+ return {
126
+ value: normalized,
127
+ kind: value === normalized ? "canonical" : "offset"
128
+ };
129
+ }
130
+ function normalizeExplicitDatetime(value) {
131
+ const normalized = normalizeDatetime(value, "UTC");
132
+ if (normalized.kind === "naive") throw new DatetimeNormalizationError("offset_required", value, "UTC");
133
+ return normalized.value;
134
+ }
135
+ function normalizeContentDatetimes(data, fields, timezone) {
136
+ let value = data;
137
+ let changedCount = 0;
138
+ let naiveCount = 0;
139
+ const write = (slug, next) => {
140
+ if (value === data) value = { ...data };
141
+ value[slug] = next;
142
+ };
143
+ for (const field of fields) {
144
+ const current = data[field.slug];
145
+ if (current === null || current === void 0 || current === "") continue;
146
+ if (field.type === "datetime") {
147
+ const normalized = normalizeDatetime(current, timezone);
148
+ if (normalized.kind === "naive") naiveCount++;
149
+ if (!Object.is(normalized.value, current)) {
150
+ changedCount++;
151
+ write(field.slug, normalized.value);
152
+ }
153
+ continue;
154
+ }
155
+ if (!Array.isArray(current) || !field.datetimeSubFields?.length) continue;
156
+ let rows = current;
157
+ for (const [index, row] of current.entries()) {
158
+ if (!isRecord(row)) continue;
159
+ let nextRow = row;
160
+ for (const subField of field.datetimeSubFields) {
161
+ const nested = nextRow[subField];
162
+ if (nested === null || nested === void 0 || nested === "") continue;
163
+ const normalized = normalizeDatetime(nested, timezone);
164
+ if (normalized.kind === "naive") naiveCount++;
165
+ if (!Object.is(normalized.value, nested)) {
166
+ changedCount++;
167
+ if (nextRow === row) nextRow = { ...nextRow };
168
+ nextRow[subField] = normalized.value;
169
+ }
170
+ }
171
+ if (nextRow !== row) {
172
+ if (rows === current) rows = [...current];
173
+ rows[index] = nextRow;
174
+ }
175
+ }
176
+ if (rows !== current) write(field.slug, rows);
177
+ }
178
+ return {
179
+ value,
180
+ changedCount,
181
+ naiveCount
182
+ };
183
+ }
184
+
185
+ //#endregion
186
+ export { normalizeExplicitDatetime as i, normalizeContentDatetimes as n, normalizeDatetime as r, DatetimeNormalizationError as t };
187
+ //# sourceMappingURL=datetime-normalization-PeiEdcRY.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetime-normalization-PeiEdcRY.mjs","names":[],"sources":["../src/datetime-normalization.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport type DatetimeNormalizationKind = \"canonical\" | \"offset\" | \"naive\";\n\nexport type DatetimeNormalizationErrorCode =\n\t| \"invalid\"\n\t| \"invalid_timezone\"\n\t| \"offset_required\"\n\t| \"ambiguous\"\n\t| \"nonexistent\";\n\nexport class DatetimeNormalizationError extends Error {\n\tconstructor(\n\t\tpublic readonly code: DatetimeNormalizationErrorCode,\n\t\tpublic readonly value: unknown,\n\t\tpublic readonly timezone: string,\n\t) {\n\t\tconst detail =\n\t\t\tcode === \"ambiguous\"\n\t\t\t\t? \"occurs more than once because of a daylight-saving transition\"\n\t\t\t\t: code === \"nonexistent\"\n\t\t\t\t\t? \"does not exist because of a daylight-saving transition\"\n\t\t\t\t\t: code === \"invalid_timezone\"\n\t\t\t\t\t\t? `uses an invalid site timezone (${timezone})`\n\t\t\t\t\t\t: code === \"offset_required\"\n\t\t\t\t\t\t\t? \"must include Z or an explicit UTC offset\"\n\t\t\t\t\t\t\t: \"is not a valid ISO 8601 datetime\";\n\t\tsuper(`Datetime ${JSON.stringify(value)} ${detail}`);\n\t\tthis.name = \"DatetimeNormalizationError\";\n\t}\n}\n\nexport interface DatetimeFieldDescriptor {\n\tslug: string;\n\ttype: \"datetime\" | \"repeater\";\n\tdatetimeSubFields?: readonly string[];\n}\n\nexport interface NormalizedDatetime {\n\tvalue: string;\n\tkind: DatetimeNormalizationKind;\n}\n\nexport interface NormalizedContentDatetimes {\n\tvalue: Record<string, unknown>;\n\tchangedCount: number;\n\tnaiveCount: number;\n}\n\ninterface LocalDatetimeParts {\n\tyear: number;\n\tmonth: number;\n\tday: number;\n\thour: number;\n\tminute: number;\n\tsecond: number;\n\tmillisecond: number;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nconst NAIVE_DATETIME_PATTERN =\n\t/^(\\d{4})-(\\d{2})-(\\d{2})(?:[T ](\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{1,3}))?)?)?$/;\nconst EXPLICIT_OFFSET_PATTERN = /(?:Z|[+-]\\d{2}:?\\d{2})$/i;\nconst EXPLICIT_DATETIME_SCHEMA = z.iso\n\t.datetime({ offset: true })\n\t.or(z.iso.datetime({ offset: true, precision: -1 }));\nconst OFFSET_SAMPLE_RANGE_MS = 48 * 60 * 60 * 1000;\nconst OFFSET_SAMPLE_STEP_MS = 6 * 60 * 60 * 1000;\n\nfunction parseNaiveDatetime(value: string): LocalDatetimeParts | null {\n\tconst match = NAIVE_DATETIME_PATTERN.exec(value);\n\tif (!match) return null;\n\tconst parts: LocalDatetimeParts = {\n\t\tyear: Number(match[1]),\n\t\tmonth: Number(match[2]),\n\t\tday: Number(match[3]),\n\t\thour: Number(match[4] ?? 0),\n\t\tminute: Number(match[5] ?? 0),\n\t\tsecond: Number(match[6] ?? 0),\n\t\tmillisecond: Number((match[7] ?? \"0\").padEnd(3, \"0\")),\n\t};\n\tconst check = new Date(\n\t\tDate.UTC(\n\t\t\tparts.year,\n\t\t\tparts.month - 1,\n\t\t\tparts.day,\n\t\t\tparts.hour,\n\t\t\tparts.minute,\n\t\t\tparts.second,\n\t\t\tparts.millisecond,\n\t\t),\n\t);\n\tif (\n\t\tcheck.getUTCFullYear() !== parts.year ||\n\t\tcheck.getUTCMonth() + 1 !== parts.month ||\n\t\tcheck.getUTCDate() !== parts.day ||\n\t\tcheck.getUTCHours() !== parts.hour ||\n\t\tcheck.getUTCMinutes() !== parts.minute ||\n\t\tcheck.getUTCSeconds() !== parts.second ||\n\t\tcheck.getUTCMilliseconds() !== parts.millisecond\n\t) {\n\t\treturn null;\n\t}\n\treturn parts;\n}\n\nfunction zonedFormatter(timezone: string, value: unknown): Intl.DateTimeFormat {\n\ttry {\n\t\treturn new Intl.DateTimeFormat(\"en-US-u-ca-iso8601-nu-latn\", {\n\t\t\ttimeZone: timezone,\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"2-digit\",\n\t\t\tday: \"2-digit\",\n\t\t\thour: \"2-digit\",\n\t\t\tminute: \"2-digit\",\n\t\t\tsecond: \"2-digit\",\n\t\t\thourCycle: \"h23\",\n\t\t});\n\t} catch {\n\t\tthrow new DatetimeNormalizationError(\"invalid_timezone\", value, timezone);\n\t}\n}\n\nfunction zonedParts(\n\tformatter: Intl.DateTimeFormat,\n\tepochMs: number,\n): Omit<LocalDatetimeParts, \"millisecond\"> {\n\tconst values: Record<string, number> = {};\n\tfor (const part of formatter.formatToParts(new Date(epochMs))) {\n\t\tif (part.type !== \"literal\") values[part.type] = Number(part.value);\n\t}\n\treturn {\n\t\tyear: values.year ?? 0,\n\t\tmonth: values.month ?? 0,\n\t\tday: values.day ?? 0,\n\t\thour: values.hour ?? 0,\n\t\tminute: values.minute ?? 0,\n\t\tsecond: values.second ?? 0,\n\t};\n}\n\nfunction timezoneOffsetMs(formatter: Intl.DateTimeFormat, epochMs: number): number {\n\tconst wholeSecond = Math.floor(epochMs / 1000) * 1000;\n\tconst parts = zonedParts(formatter, wholeSecond);\n\treturn (\n\t\tDate.UTC(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, parts.second) -\n\t\twholeSecond\n\t);\n}\n\nfunction sameLocalDatetime(\n\tformatter: Intl.DateTimeFormat,\n\tepochMs: number,\n\texpected: LocalDatetimeParts,\n): boolean {\n\tconst actual = zonedParts(formatter, epochMs);\n\treturn (\n\t\tactual.year === expected.year &&\n\t\tactual.month === expected.month &&\n\t\tactual.day === expected.day &&\n\t\tactual.hour === expected.hour &&\n\t\tactual.minute === expected.minute &&\n\t\tactual.second === expected.second &&\n\t\tnew Date(epochMs).getUTCMilliseconds() === expected.millisecond\n\t);\n}\n\nfunction resolveNaiveDatetime(value: string, timezone: string, parts: LocalDatetimeParts): string {\n\tconst formatter = zonedFormatter(timezone, value);\n\tconst localEpoch = Date.UTC(\n\t\tparts.year,\n\t\tparts.month - 1,\n\t\tparts.day,\n\t\tparts.hour,\n\t\tparts.minute,\n\t\tparts.second,\n\t\tparts.millisecond,\n\t);\n\tconst offsets = new Set<number>();\n\tfor (\n\t\tlet sample = localEpoch - OFFSET_SAMPLE_RANGE_MS;\n\t\tsample <= localEpoch + OFFSET_SAMPLE_RANGE_MS;\n\t\tsample += OFFSET_SAMPLE_STEP_MS\n\t) {\n\t\toffsets.add(timezoneOffsetMs(formatter, sample));\n\t}\n\n\tconst candidates = new Set<number>();\n\tfor (const offset of offsets) {\n\t\tconst candidate = localEpoch - offset;\n\t\tif (sameLocalDatetime(formatter, candidate, parts)) candidates.add(candidate);\n\t}\n\tif (candidates.size === 0) {\n\t\tthrow new DatetimeNormalizationError(\"nonexistent\", value, timezone);\n\t}\n\tif (candidates.size > 1) {\n\t\tthrow new DatetimeNormalizationError(\"ambiguous\", value, timezone);\n\t}\n\tconst candidate = candidates.values().next().value;\n\tif (candidate === undefined) {\n\t\tthrow new DatetimeNormalizationError(\"nonexistent\", value, timezone);\n\t}\n\treturn new Date(candidate).toISOString();\n}\n\nexport function normalizeDatetime(value: unknown, timezone: string): NormalizedDatetime {\n\tif (value instanceof Date) {\n\t\tif (Number.isNaN(value.getTime())) {\n\t\t\tthrow new DatetimeNormalizationError(\"invalid\", value, timezone);\n\t\t}\n\t\treturn { value: value.toISOString(), kind: \"offset\" };\n\t}\n\tif (typeof value !== \"string\") {\n\t\tthrow new DatetimeNormalizationError(\"invalid\", value, timezone);\n\t}\n\tif (value.startsWith('\"') && value.endsWith('\"')) {\n\t\ttry {\n\t\t\tconst unquoted: unknown = JSON.parse(value);\n\t\t\tif (typeof unquoted === \"string\") {\n\t\t\t\tconst normalized = normalizeDatetime(unquoted, timezone);\n\t\t\t\treturn {\n\t\t\t\t\tvalue: normalized.value,\n\t\t\t\t\tkind: normalized.kind === \"naive\" ? \"naive\" : \"offset\",\n\t\t\t\t};\n\t\t\t}\n\t\t} catch {\n\t\t\tthrow new DatetimeNormalizationError(\"invalid\", value, timezone);\n\t\t}\n\t}\n\n\tconst naive = parseNaiveDatetime(value);\n\tif (naive) {\n\t\treturn { value: resolveNaiveDatetime(value, timezone, naive), kind: \"naive\" };\n\t}\n\tif (!EXPLICIT_OFFSET_PATTERN.test(value)) {\n\t\tthrow new DatetimeNormalizationError(\"invalid\", value, timezone);\n\t}\n\tif (!EXPLICIT_DATETIME_SCHEMA.safeParse(value).success) {\n\t\tthrow new DatetimeNormalizationError(\"invalid\", value, timezone);\n\t}\n\tconst parsed = new Date(value);\n\tif (Number.isNaN(parsed.getTime())) {\n\t\tthrow new DatetimeNormalizationError(\"invalid\", value, timezone);\n\t}\n\tconst normalized = parsed.toISOString();\n\treturn { value: normalized, kind: value === normalized ? \"canonical\" : \"offset\" };\n}\n\nexport function normalizeExplicitDatetime(value: unknown): string {\n\tconst normalized = normalizeDatetime(value, \"UTC\");\n\tif (normalized.kind === \"naive\") {\n\t\tthrow new DatetimeNormalizationError(\"offset_required\", value, \"UTC\");\n\t}\n\treturn normalized.value;\n}\n\nexport function normalizeContentDatetimes(\n\tdata: Record<string, unknown>,\n\tfields: readonly DatetimeFieldDescriptor[],\n\ttimezone: string,\n): NormalizedContentDatetimes {\n\tlet value = data;\n\tlet changedCount = 0;\n\tlet naiveCount = 0;\n\tconst write = (slug: string, next: unknown) => {\n\t\tif (value === data) value = { ...data };\n\t\tvalue[slug] = next;\n\t};\n\n\tfor (const field of fields) {\n\t\tconst current = data[field.slug];\n\t\tif (current === null || current === undefined || current === \"\") continue;\n\t\tif (field.type === \"datetime\") {\n\t\t\tconst normalized = normalizeDatetime(current, timezone);\n\t\t\tif (normalized.kind === \"naive\") naiveCount++;\n\t\t\tif (!Object.is(normalized.value, current)) {\n\t\t\t\tchangedCount++;\n\t\t\t\twrite(field.slug, normalized.value);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!Array.isArray(current) || !field.datetimeSubFields?.length) continue;\n\t\tlet rows = current;\n\t\tfor (const [index, row] of current.entries()) {\n\t\t\tif (!isRecord(row)) continue;\n\t\t\tlet nextRow = row;\n\t\t\tfor (const subField of field.datetimeSubFields) {\n\t\t\t\tconst nested = nextRow[subField];\n\t\t\t\tif (nested === null || nested === undefined || nested === \"\") continue;\n\t\t\t\tconst normalized = normalizeDatetime(nested, timezone);\n\t\t\t\tif (normalized.kind === \"naive\") naiveCount++;\n\t\t\t\tif (!Object.is(normalized.value, nested)) {\n\t\t\t\t\tchangedCount++;\n\t\t\t\t\tif (nextRow === row) nextRow = { ...nextRow };\n\t\t\t\t\tnextRow[subField] = normalized.value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (nextRow !== row) {\n\t\t\t\tif (rows === current) rows = [...current];\n\t\t\t\trows[index] = nextRow;\n\t\t\t}\n\t\t}\n\t\tif (rows !== current) write(field.slug, rows);\n\t}\n\n\treturn { value, changedCount, naiveCount };\n}\n"],"mappings":";;;AAWA,IAAa,6BAAb,cAAgD,MAAM;CACrD,YACC,AAAgB,MAChB,AAAgB,OAChB,AAAgB,UACf;EACD,MAAM,SACL,SAAS,cACN,kEACA,SAAS,gBACR,2DACA,SAAS,qBACR,kCAAkC,SAAS,KAC3C,SAAS,oBACR,6CACA;AACP,QAAM,YAAY,KAAK,UAAU,MAAM,CAAC,GAAG,SAAS;EAdpC;EACA;EACA;AAahB,OAAK,OAAO;;;AA+Bd,SAAS,SAAS,OAAkD;AACnE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM;;AAG5E,MAAM,yBACL;AACD,MAAM,0BAA0B;AAChC,MAAM,2BAA2B,EAAE,IACjC,SAAS,EAAE,QAAQ,MAAM,CAAC,CAC1B,GAAG,EAAE,IAAI,SAAS;CAAE,QAAQ;CAAM,WAAW;CAAI,CAAC,CAAC;AACrD,MAAM,yBAAyB,OAAU,KAAK;AAC9C,MAAM,wBAAwB,MAAS,KAAK;AAE5C,SAAS,mBAAmB,OAA0C;CACrE,MAAM,QAAQ,uBAAuB,KAAK,MAAM;AAChD,KAAI,CAAC,MAAO,QAAO;CACnB,MAAM,QAA4B;EACjC,MAAM,OAAO,MAAM,GAAG;EACtB,OAAO,OAAO,MAAM,GAAG;EACvB,KAAK,OAAO,MAAM,GAAG;EACrB,MAAM,OAAO,MAAM,MAAM,EAAE;EAC3B,QAAQ,OAAO,MAAM,MAAM,EAAE;EAC7B,QAAQ,OAAO,MAAM,MAAM,EAAE;EAC7B,aAAa,QAAQ,MAAM,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;EACrD;CACD,MAAM,QAAQ,IAAI,KACjB,KAAK,IACJ,MAAM,MACN,MAAM,QAAQ,GACd,MAAM,KACN,MAAM,MACN,MAAM,QACN,MAAM,QACN,MAAM,YACN,CACD;AACD,KACC,MAAM,gBAAgB,KAAK,MAAM,QACjC,MAAM,aAAa,GAAG,MAAM,MAAM,SAClC,MAAM,YAAY,KAAK,MAAM,OAC7B,MAAM,aAAa,KAAK,MAAM,QAC9B,MAAM,eAAe,KAAK,MAAM,UAChC,MAAM,eAAe,KAAK,MAAM,UAChC,MAAM,oBAAoB,KAAK,MAAM,YAErC,QAAO;AAER,QAAO;;AAGR,SAAS,eAAe,UAAkB,OAAqC;AAC9E,KAAI;AACH,SAAO,IAAI,KAAK,eAAe,8BAA8B;GAC5D,UAAU;GACV,MAAM;GACN,OAAO;GACP,KAAK;GACL,MAAM;GACN,QAAQ;GACR,QAAQ;GACR,WAAW;GACX,CAAC;SACK;AACP,QAAM,IAAI,2BAA2B,oBAAoB,OAAO,SAAS;;;AAI3E,SAAS,WACR,WACA,SAC0C;CAC1C,MAAM,SAAiC,EAAE;AACzC,MAAK,MAAM,QAAQ,UAAU,cAAc,IAAI,KAAK,QAAQ,CAAC,CAC5D,KAAI,KAAK,SAAS,UAAW,QAAO,KAAK,QAAQ,OAAO,KAAK,MAAM;AAEpE,QAAO;EACN,MAAM,OAAO,QAAQ;EACrB,OAAO,OAAO,SAAS;EACvB,KAAK,OAAO,OAAO;EACnB,MAAM,OAAO,QAAQ;EACrB,QAAQ,OAAO,UAAU;EACzB,QAAQ,OAAO,UAAU;EACzB;;AAGF,SAAS,iBAAiB,WAAgC,SAAyB;CAClF,MAAM,cAAc,KAAK,MAAM,UAAU,IAAK,GAAG;CACjD,MAAM,QAAQ,WAAW,WAAW,YAAY;AAChD,QACC,KAAK,IAAI,MAAM,MAAM,MAAM,QAAQ,GAAG,MAAM,KAAK,MAAM,MAAM,MAAM,QAAQ,MAAM,OAAO,GACxF;;AAIF,SAAS,kBACR,WACA,SACA,UACU;CACV,MAAM,SAAS,WAAW,WAAW,QAAQ;AAC7C,QACC,OAAO,SAAS,SAAS,QACzB,OAAO,UAAU,SAAS,SAC1B,OAAO,QAAQ,SAAS,OACxB,OAAO,SAAS,SAAS,QACzB,OAAO,WAAW,SAAS,UAC3B,OAAO,WAAW,SAAS,UAC3B,IAAI,KAAK,QAAQ,CAAC,oBAAoB,KAAK,SAAS;;AAItD,SAAS,qBAAqB,OAAe,UAAkB,OAAmC;CACjG,MAAM,YAAY,eAAe,UAAU,MAAM;CACjD,MAAM,aAAa,KAAK,IACvB,MAAM,MACN,MAAM,QAAQ,GACd,MAAM,KACN,MAAM,MACN,MAAM,QACN,MAAM,QACN,MAAM,YACN;CACD,MAAM,0BAAU,IAAI,KAAa;AACjC,MACC,IAAI,SAAS,aAAa,wBAC1B,UAAU,aAAa,wBACvB,UAAU,sBAEV,SAAQ,IAAI,iBAAiB,WAAW,OAAO,CAAC;CAGjD,MAAM,6BAAa,IAAI,KAAa;AACpC,MAAK,MAAM,UAAU,SAAS;EAC7B,MAAM,YAAY,aAAa;AAC/B,MAAI,kBAAkB,WAAW,WAAW,MAAM,CAAE,YAAW,IAAI,UAAU;;AAE9E,KAAI,WAAW,SAAS,EACvB,OAAM,IAAI,2BAA2B,eAAe,OAAO,SAAS;AAErE,KAAI,WAAW,OAAO,EACrB,OAAM,IAAI,2BAA2B,aAAa,OAAO,SAAS;CAEnE,MAAM,YAAY,WAAW,QAAQ,CAAC,MAAM,CAAC;AAC7C,KAAI,cAAc,OACjB,OAAM,IAAI,2BAA2B,eAAe,OAAO,SAAS;AAErE,QAAO,IAAI,KAAK,UAAU,CAAC,aAAa;;AAGzC,SAAgB,kBAAkB,OAAgB,UAAsC;AACvF,KAAI,iBAAiB,MAAM;AAC1B,MAAI,OAAO,MAAM,MAAM,SAAS,CAAC,CAChC,OAAM,IAAI,2BAA2B,WAAW,OAAO,SAAS;AAEjE,SAAO;GAAE,OAAO,MAAM,aAAa;GAAE,MAAM;GAAU;;AAEtD,KAAI,OAAO,UAAU,SACpB,OAAM,IAAI,2BAA2B,WAAW,OAAO,SAAS;AAEjE,KAAI,MAAM,WAAW,KAAI,IAAI,MAAM,SAAS,KAAI,CAC/C,KAAI;EACH,MAAM,WAAoB,KAAK,MAAM,MAAM;AAC3C,MAAI,OAAO,aAAa,UAAU;GACjC,MAAM,aAAa,kBAAkB,UAAU,SAAS;AACxD,UAAO;IACN,OAAO,WAAW;IAClB,MAAM,WAAW,SAAS,UAAU,UAAU;IAC9C;;SAEK;AACP,QAAM,IAAI,2BAA2B,WAAW,OAAO,SAAS;;CAIlE,MAAM,QAAQ,mBAAmB,MAAM;AACvC,KAAI,MACH,QAAO;EAAE,OAAO,qBAAqB,OAAO,UAAU,MAAM;EAAE,MAAM;EAAS;AAE9E,KAAI,CAAC,wBAAwB,KAAK,MAAM,CACvC,OAAM,IAAI,2BAA2B,WAAW,OAAO,SAAS;AAEjE,KAAI,CAAC,yBAAyB,UAAU,MAAM,CAAC,QAC9C,OAAM,IAAI,2BAA2B,WAAW,OAAO,SAAS;CAEjE,MAAM,SAAS,IAAI,KAAK,MAAM;AAC9B,KAAI,OAAO,MAAM,OAAO,SAAS,CAAC,CACjC,OAAM,IAAI,2BAA2B,WAAW,OAAO,SAAS;CAEjE,MAAM,aAAa,OAAO,aAAa;AACvC,QAAO;EAAE,OAAO;EAAY,MAAM,UAAU,aAAa,cAAc;EAAU;;AAGlF,SAAgB,0BAA0B,OAAwB;CACjE,MAAM,aAAa,kBAAkB,OAAO,MAAM;AAClD,KAAI,WAAW,SAAS,QACvB,OAAM,IAAI,2BAA2B,mBAAmB,OAAO,MAAM;AAEtE,QAAO,WAAW;;AAGnB,SAAgB,0BACf,MACA,QACA,UAC6B;CAC7B,IAAI,QAAQ;CACZ,IAAI,eAAe;CACnB,IAAI,aAAa;CACjB,MAAM,SAAS,MAAc,SAAkB;AAC9C,MAAI,UAAU,KAAM,SAAQ,EAAE,GAAG,MAAM;AACvC,QAAM,QAAQ;;AAGf,MAAK,MAAM,SAAS,QAAQ;EAC3B,MAAM,UAAU,KAAK,MAAM;AAC3B,MAAI,YAAY,QAAQ,YAAY,UAAa,YAAY,GAAI;AACjE,MAAI,MAAM,SAAS,YAAY;GAC9B,MAAM,aAAa,kBAAkB,SAAS,SAAS;AACvD,OAAI,WAAW,SAAS,QAAS;AACjC,OAAI,CAAC,OAAO,GAAG,WAAW,OAAO,QAAQ,EAAE;AAC1C;AACA,UAAM,MAAM,MAAM,WAAW,MAAM;;AAEpC;;AAGD,MAAI,CAAC,MAAM,QAAQ,QAAQ,IAAI,CAAC,MAAM,mBAAmB,OAAQ;EACjE,IAAI,OAAO;AACX,OAAK,MAAM,CAAC,OAAO,QAAQ,QAAQ,SAAS,EAAE;AAC7C,OAAI,CAAC,SAAS,IAAI,CAAE;GACpB,IAAI,UAAU;AACd,QAAK,MAAM,YAAY,MAAM,mBAAmB;IAC/C,MAAM,SAAS,QAAQ;AACvB,QAAI,WAAW,QAAQ,WAAW,UAAa,WAAW,GAAI;IAC9D,MAAM,aAAa,kBAAkB,QAAQ,SAAS;AACtD,QAAI,WAAW,SAAS,QAAS;AACjC,QAAI,CAAC,OAAO,GAAG,WAAW,OAAO,OAAO,EAAE;AACzC;AACA,SAAI,YAAY,IAAK,WAAU,EAAE,GAAG,SAAS;AAC7C,aAAQ,YAAY,WAAW;;;AAGjC,OAAI,YAAY,KAAK;AACpB,QAAI,SAAS,QAAS,QAAO,CAAC,GAAG,QAAQ;AACzC,SAAK,SAAS;;;AAGhB,MAAI,SAAS,QAAS,OAAM,MAAM,MAAM,KAAK;;AAG9C,QAAO;EAAE;EAAO;EAAc;EAAY"}
@@ -1,4 +1,4 @@
1
- import "../types-tJWDK__M.mjs";
2
- import { a as getMigrationStatus, i as getExactMigrationStatus, n as MIGRATION_NAMES, o as rollbackMigration, r as MigrationStatus, s as runMigrations, t as ExactMigrationStatus } from "../runner-CfwysRM0.mjs";
3
- import { a as ExecuteCollectionDeletionGuard, c as SqliteConfig, d as sqlite, i as DatabaseDialectType, l as libsql, n as CollectionDeletionGuardResult, o as LibsqlConfig, r as DatabaseDescriptor, s as PostgresConfig, t as CollectionDeletionGuardInput, u as postgres } from "../adapters-DCEgOBXi.mjs";
1
+ import "../types-CbwqGOXm.mjs";
2
+ import { a as getMigrationStatus, i as getExactMigrationStatus, n as MIGRATION_NAMES, o as rollbackMigration, r as MigrationStatus, s as runMigrations, t as ExactMigrationStatus } from "../runner-3gfxRsJG.mjs";
3
+ import { a as ExecuteCollectionDeletionGuard, c as SqliteConfig, d as sqlite, i as DatabaseDialectType, l as libsql, n as CollectionDeletionGuardResult, o as LibsqlConfig, r as DatabaseDescriptor, s as PostgresConfig, t as CollectionDeletionGuardInput, u as postgres } from "../adapters-Cq10K4_c.mjs";
4
4
  export { type CollectionDeletionGuardInput, type CollectionDeletionGuardResult, type DatabaseDescriptor, type DatabaseDialectType, type ExactMigrationStatus, type ExecuteCollectionDeletionGuard, type LibsqlConfig, MIGRATION_NAMES, type MigrationStatus, type PostgresConfig, type SqliteConfig, getExactMigrationStatus, getMigrationStatus, libsql, postgres, rollbackMigration, runMigrations, sqlite };
package/dist/db/index.mjs CHANGED
@@ -1,6 +1,7 @@
1
- import { a as getMigrationStatus, i as getExactMigrationStatus, n as MIGRATION_NAMES, o as rollbackMigration, s as runMigrations } from "../runner-nEzvnogG.mjs";
2
- import "../dialect-helpers-BcQvkHgn.mjs";
3
- import "../config-C3EBstHi.mjs";
1
+ import { a as getMigrationStatus, i as getExactMigrationStatus, n as MIGRATION_NAMES, o as rollbackMigration, s as runMigrations } from "../runner-ClrleR8A.mjs";
2
+ import "../dialect-helpers-CtYdsX4W.mjs";
3
+ import "../config-CGVeT8Hc.mjs";
4
+ import "../datetime-normalization-PeiEdcRY.mjs";
4
5
 
5
6
  //#region src/db/adapters.ts
6
7
  const ENVIRONMENT_VARIABLE_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/db/adapters.ts"],"sourcesContent":["/**\n * Database Adapter Functions\n *\n * These run at config time (astro.config.mjs) and return serializable descriptors.\n * The actual dialect is created at runtime by loading the entrypoint.\n *\n * @example\n * ```ts\n * // astro.config.mjs\n * import emdash from \"emdash/astro\";\n * import { sqlite } from \"emdash/db\";\n *\n * export default defineConfig({\n * integrations: [\n * emdash({\n * database: sqlite({ url: \"file:./data.db\" }),\n * }),\n * ],\n * });\n * ```\n */\n\n/**\n * Dialect family identifier.\n * Used at runtime to select dialect-specific SQL fragments.\n */\nexport type DatabaseDialectType = \"sqlite\" | \"postgres\";\n\nexport type CollectionDeletionGuardInput =\n\t| {\n\t\t\taction: \"fence\";\n\t\t\tcollectionId: string;\n\t\t\tcollectionSlug: string;\n\t\t\tleaseToken: string;\n\t\t\tforceDelete: boolean;\n\t }\n\t| {\n\t\t\taction: \"drop\";\n\t\t\tcollectionId: string;\n\t\t\tcollectionSlug: string;\n\t\t\tleaseToken: string;\n\t };\n\nexport type CollectionDeletionGuardResult =\n\t| { outcome: \"fenced\" }\n\t| { outcome: \"has_content\" }\n\t| { outcome: \"stale\" }\n\t| { outcome: \"dropped\" };\n\nexport type ExecuteCollectionDeletionGuard = (\n\tconfig: unknown,\n\tinput: CollectionDeletionGuardInput,\n) => Promise<CollectionDeletionGuardResult>;\n\nconst ENVIRONMENT_VARIABLE_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nfunction migrationEnvironmentVariable(\n\tvalue: string | undefined,\n\tfallback: string,\n\toptionName: string,\n): string {\n\tconst name = value ?? fallback;\n\tif (!ENVIRONMENT_VARIABLE_PATTERN.test(name)) {\n\t\tthrow new Error(`${optionName} must be a valid environment variable name.`);\n\t}\n\treturn name;\n}\n\n/**\n * Database descriptor - serializable config for virtual modules\n */\nexport interface DatabaseDescriptor {\n\tentrypoint: string;\n\tconfig: unknown;\n\ttype: DatabaseDialectType;\n\t/** Deployment migration capability with configuration safe for a build artifact. */\n\tmigrations?: {\n\t\tentrypoint: string;\n\t\tmanifestConfig: unknown;\n\t};\n\t/**\n\t * When true, the adapter's runtime entrypoint MUST export a named\n\t * `createRequestScopedDb` function matching the signature declared in\n\t * `virtual:emdash/dialect`. The virtual-module generator re-exports it\n\t * by name, so a missing export becomes a build-time bundler error.\n\t *\n\t * The function is called once per request and decides — based on its own\n\t * runtime config (e.g. whether the user opted into D1 sessions) — whether\n\t * to return a per-request Kysely or null. Use this for features like D1\n\t * read-replica sessions, bookmark cookies, or any per-request DB handle.\n\t *\n\t * When false or absent, the generator emits a stub that returns null and\n\t * the middleware takes its default (singleton) path.\n\t */\n\tsupportsRequestScope?: boolean;\n\t/**\n\t * When true, request middleware resolves the last content-namespace\n\t * invalidation timestamp and passes it to `createRequestScopedDb`.\n\t *\n\t * Keep this unset unless request routing depends on that timestamp: reading\n\t * it may require an object-cache backend round trip.\n\t */\n\tneedsLastContentWriteAt?: boolean;\n\t/**\n\t * When true, the adapter's runtime entrypoint MUST export a named\n\t * `createCoalescingDialect` function. The runtime uses this fresh dialect\n\t * only for its cold-start read batch.\n\t *\n\t * When false or absent, the virtual module exports `undefined` without\n\t * inspecting an optional entrypoint export.\n\t */\n\tsupportsCoalescing?: boolean;\n\t/** The runtime entrypoint exports the deletion-specific atomic guard. */\n\tsupportsCollectionDeletionGuard?: boolean;\n}\n\nexport interface SqliteConfig {\n\t/**\n\t * Database URL (e.g., \"file:./data.db\")\n\t */\n\turl: string;\n}\n\nexport interface LibsqlConfig {\n\t/**\n\t * Database URL (e.g., \"file:./data.db\" or \"libsql://...\")\n\t */\n\turl: string;\n\t/**\n\t * Auth token for remote libSQL\n\t */\n\tauthToken?: string;\n\tmigrationAuthTokenEnv?: string;\n}\n\n/**\n * SQLite database adapter (node:sqlite)\n *\n * For local development and Node.js deployments. Requires Node.js 22.16 or later.\n *\n * @example\n * ```ts\n * database: sqlite({ url: \"file:./data.db\" })\n * ```\n */\nexport function sqlite(config: SqliteConfig): DatabaseDescriptor {\n\treturn {\n\t\tentrypoint: \"emdash/db/sqlite\",\n\t\tconfig,\n\t\ttype: \"sqlite\",\n\t\tmigrations: {\n\t\t\tentrypoint: \"emdash/db/sqlite-migrations\",\n\t\t\tmanifestConfig: { url: config.url },\n\t\t},\n\t};\n}\n\n/**\n * libSQL database adapter (Turso)\n *\n * For Turso hosted databases or local libSQL.\n *\n * @example\n * ```ts\n * database: libsql({\n * url: \"libsql://my-db.turso.io\",\n * authToken: process.env.TURSO_AUTH_TOKEN,\n * })\n * ```\n */\nexport function libsql(config: LibsqlConfig): DatabaseDescriptor {\n\tconst { migrationAuthTokenEnv, ...runtimeConfig } = config;\n\treturn {\n\t\tentrypoint: \"emdash/db/libsql\",\n\t\tconfig: runtimeConfig,\n\t\ttype: \"sqlite\",\n\t\tmigrations: {\n\t\t\tentrypoint: \"emdash/db/libsql-migrations\",\n\t\t\tmanifestConfig: {\n\t\t\t\turl: config.url,\n\t\t\t\tauthTokenEnv: migrationEnvironmentVariable(\n\t\t\t\t\tmigrationAuthTokenEnv,\n\t\t\t\t\t\"TURSO_AUTH_TOKEN\",\n\t\t\t\t\t\"migrationAuthTokenEnv\",\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * PostgreSQL connection configuration\n */\nexport interface PostgresConfig {\n\tconnectionString?: string;\n\thost?: string;\n\tport?: number;\n\tdatabase?: string;\n\tuser?: string;\n\tpassword?: string;\n\tssl?: boolean;\n\tpool?: {\n\t\tmin?: number;\n\t\tmax?: number;\n\t\t/** Maximum time to wait for a connection, in milliseconds. Uses the pg default when omitted. */\n\t\tconnectionTimeoutMillis?: number;\n\t\t/** Time before an idle client is closed, in milliseconds. Uses the pg default when omitted. */\n\t\tidleTimeoutMillis?: number;\n\t};\n\tmigrationConnectionStringEnv?: string;\n}\n\n/**\n * PostgreSQL database adapter\n *\n * For PostgreSQL deployments with connection pooling.\n *\n * @example\n * ```ts\n * database: postgres({ connectionString: process.env.DATABASE_URL })\n * ```\n */\nexport function postgres(config: PostgresConfig): DatabaseDescriptor {\n\tconst { migrationConnectionStringEnv, ...runtimeConfig } = config;\n\treturn {\n\t\tentrypoint: \"emdash/db/postgres\",\n\t\tconfig: runtimeConfig,\n\t\ttype: \"postgres\",\n\t\tmigrations: {\n\t\t\tentrypoint: \"emdash/db/postgres-migrations\",\n\t\t\tmanifestConfig: {\n\t\t\t\tconnectionStringEnv: migrationEnvironmentVariable(\n\t\t\t\t\tmigrationConnectionStringEnv,\n\t\t\t\t\t\"DATABASE_URL\",\n\t\t\t\t\t\"migrationConnectionStringEnv\",\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t};\n}\n"],"mappings":";;;;;AAsDA,MAAM,+BAA+B;AAErC,SAAS,6BACR,OACA,UACA,YACS;CACT,MAAM,OAAO,SAAS;AACtB,KAAI,CAAC,6BAA6B,KAAK,KAAK,CAC3C,OAAM,IAAI,MAAM,GAAG,WAAW,6CAA6C;AAE5E,QAAO;;;;;;;;;;;;AAgFR,SAAgB,OAAO,QAA0C;AAChE,QAAO;EACN,YAAY;EACZ;EACA,MAAM;EACN,YAAY;GACX,YAAY;GACZ,gBAAgB,EAAE,KAAK,OAAO,KAAK;GACnC;EACD;;;;;;;;;;;;;;;AAgBF,SAAgB,OAAO,QAA0C;CAChE,MAAM,EAAE,uBAAuB,GAAG,kBAAkB;AACpD,QAAO;EACN,YAAY;EACZ,QAAQ;EACR,MAAM;EACN,YAAY;GACX,YAAY;GACZ,gBAAgB;IACf,KAAK,OAAO;IACZ,cAAc,6BACb,uBACA,oBACA,wBACA;IACD;GACD;EACD;;;;;;;;;;;;AAmCF,SAAgB,SAAS,QAA4C;CACpE,MAAM,EAAE,8BAA8B,GAAG,kBAAkB;AAC3D,QAAO;EACN,YAAY;EACZ,QAAQ;EACR,MAAM;EACN,YAAY;GACX,YAAY;GACZ,gBAAgB,EACf,qBAAqB,6BACpB,8BACA,gBACA,+BACA,EACD;GACD;EACD"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/db/adapters.ts"],"sourcesContent":["/**\n * Database Adapter Functions\n *\n * These run at config time (astro.config.mjs) and return serializable descriptors.\n * The actual dialect is created at runtime by loading the entrypoint.\n *\n * @example\n * ```ts\n * // astro.config.mjs\n * import emdash from \"emdash/astro\";\n * import { sqlite } from \"emdash/db\";\n *\n * export default defineConfig({\n * integrations: [\n * emdash({\n * database: sqlite({ url: \"file:./data.db\" }),\n * }),\n * ],\n * });\n * ```\n */\n\n/**\n * Dialect family identifier.\n * Used at runtime to select dialect-specific SQL fragments.\n */\nexport type DatabaseDialectType = \"sqlite\" | \"postgres\";\n\nexport type CollectionDeletionGuardInput =\n\t| {\n\t\t\taction: \"fence\";\n\t\t\tcollectionId: string;\n\t\t\tcollectionSlug: string;\n\t\t\tleaseToken: string;\n\t\t\tforceDelete: boolean;\n\t }\n\t| {\n\t\t\taction: \"drop\";\n\t\t\tcollectionId: string;\n\t\t\tcollectionSlug: string;\n\t\t\tleaseToken: string;\n\t };\n\nexport type CollectionDeletionGuardResult =\n\t| { outcome: \"fenced\" }\n\t| { outcome: \"has_content\" }\n\t| { outcome: \"stale\" }\n\t| { outcome: \"dropped\" };\n\nexport type ExecuteCollectionDeletionGuard = (\n\tconfig: unknown,\n\tinput: CollectionDeletionGuardInput,\n) => Promise<CollectionDeletionGuardResult>;\n\nconst ENVIRONMENT_VARIABLE_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nfunction migrationEnvironmentVariable(\n\tvalue: string | undefined,\n\tfallback: string,\n\toptionName: string,\n): string {\n\tconst name = value ?? fallback;\n\tif (!ENVIRONMENT_VARIABLE_PATTERN.test(name)) {\n\t\tthrow new Error(`${optionName} must be a valid environment variable name.`);\n\t}\n\treturn name;\n}\n\n/**\n * Database descriptor - serializable config for virtual modules\n */\nexport interface DatabaseDescriptor {\n\tentrypoint: string;\n\tconfig: unknown;\n\ttype: DatabaseDialectType;\n\t/** Deployment migration capability with configuration safe for a build artifact. */\n\tmigrations?: {\n\t\tentrypoint: string;\n\t\tmanifestConfig: unknown;\n\t};\n\t/**\n\t * When true, the adapter's runtime entrypoint MUST export a named\n\t * `createRequestScopedDb` function matching the signature declared in\n\t * `virtual:emdash/dialect`. The virtual-module generator re-exports it\n\t * by name, so a missing export becomes a build-time bundler error.\n\t *\n\t * The function is called once per request and decides — based on its own\n\t * runtime config (e.g. whether the user opted into D1 sessions) — whether\n\t * to return a per-request Kysely or null. Use this for features like D1\n\t * read-replica sessions, bookmark cookies, or any per-request DB handle.\n\t *\n\t * When false or absent, the generator emits a stub that returns null and\n\t * the middleware takes its default (singleton) path.\n\t */\n\tsupportsRequestScope?: boolean;\n\t/**\n\t * When true, request middleware resolves the last content-namespace\n\t * invalidation timestamp and passes it to `createRequestScopedDb`.\n\t *\n\t * Keep this unset unless request routing depends on that timestamp: reading\n\t * it may require an object-cache backend round trip.\n\t */\n\tneedsLastContentWriteAt?: boolean;\n\t/**\n\t * When true, the adapter's runtime entrypoint MUST export a named\n\t * `createCoalescingDialect` function. The runtime uses this fresh dialect\n\t * only for its cold-start read batch.\n\t *\n\t * When false or absent, the virtual module exports `undefined` without\n\t * inspecting an optional entrypoint export.\n\t */\n\tsupportsCoalescing?: boolean;\n\t/** The runtime entrypoint exports the deletion-specific atomic guard. */\n\tsupportsCollectionDeletionGuard?: boolean;\n}\n\nexport interface SqliteConfig {\n\t/**\n\t * Database URL (e.g., \"file:./data.db\")\n\t */\n\turl: string;\n}\n\nexport interface LibsqlConfig {\n\t/**\n\t * Database URL (e.g., \"file:./data.db\" or \"libsql://...\")\n\t */\n\turl: string;\n\t/**\n\t * Auth token for remote libSQL\n\t */\n\tauthToken?: string;\n\tmigrationAuthTokenEnv?: string;\n}\n\n/**\n * SQLite database adapter (node:sqlite)\n *\n * For local development and Node.js deployments. Requires Node.js 22.16 or later.\n *\n * @example\n * ```ts\n * database: sqlite({ url: \"file:./data.db\" })\n * ```\n */\nexport function sqlite(config: SqliteConfig): DatabaseDescriptor {\n\treturn {\n\t\tentrypoint: \"emdash/db/sqlite\",\n\t\tconfig,\n\t\ttype: \"sqlite\",\n\t\tmigrations: {\n\t\t\tentrypoint: \"emdash/db/sqlite-migrations\",\n\t\t\tmanifestConfig: { url: config.url },\n\t\t},\n\t};\n}\n\n/**\n * libSQL database adapter (Turso)\n *\n * For Turso hosted databases or local libSQL.\n *\n * @example\n * ```ts\n * database: libsql({\n * url: \"libsql://my-db.turso.io\",\n * authToken: process.env.TURSO_AUTH_TOKEN,\n * })\n * ```\n */\nexport function libsql(config: LibsqlConfig): DatabaseDescriptor {\n\tconst { migrationAuthTokenEnv, ...runtimeConfig } = config;\n\treturn {\n\t\tentrypoint: \"emdash/db/libsql\",\n\t\tconfig: runtimeConfig,\n\t\ttype: \"sqlite\",\n\t\tmigrations: {\n\t\t\tentrypoint: \"emdash/db/libsql-migrations\",\n\t\t\tmanifestConfig: {\n\t\t\t\turl: config.url,\n\t\t\t\tauthTokenEnv: migrationEnvironmentVariable(\n\t\t\t\t\tmigrationAuthTokenEnv,\n\t\t\t\t\t\"TURSO_AUTH_TOKEN\",\n\t\t\t\t\t\"migrationAuthTokenEnv\",\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t};\n}\n\n/**\n * PostgreSQL connection configuration\n */\nexport interface PostgresConfig {\n\tconnectionString?: string;\n\thost?: string;\n\tport?: number;\n\tdatabase?: string;\n\tuser?: string;\n\tpassword?: string;\n\tssl?: boolean;\n\tpool?: {\n\t\tmin?: number;\n\t\tmax?: number;\n\t\t/** Maximum time to wait for a connection, in milliseconds. Uses the pg default when omitted. */\n\t\tconnectionTimeoutMillis?: number;\n\t\t/** Time before an idle client is closed, in milliseconds. Uses the pg default when omitted. */\n\t\tidleTimeoutMillis?: number;\n\t};\n\tmigrationConnectionStringEnv?: string;\n}\n\n/**\n * PostgreSQL database adapter\n *\n * For PostgreSQL deployments with connection pooling.\n *\n * @example\n * ```ts\n * database: postgres({ connectionString: process.env.DATABASE_URL })\n * ```\n */\nexport function postgres(config: PostgresConfig): DatabaseDescriptor {\n\tconst { migrationConnectionStringEnv, ...runtimeConfig } = config;\n\treturn {\n\t\tentrypoint: \"emdash/db/postgres\",\n\t\tconfig: runtimeConfig,\n\t\ttype: \"postgres\",\n\t\tmigrations: {\n\t\t\tentrypoint: \"emdash/db/postgres-migrations\",\n\t\t\tmanifestConfig: {\n\t\t\t\tconnectionStringEnv: migrationEnvironmentVariable(\n\t\t\t\t\tmigrationConnectionStringEnv,\n\t\t\t\t\t\"DATABASE_URL\",\n\t\t\t\t\t\"migrationConnectionStringEnv\",\n\t\t\t\t),\n\t\t\t},\n\t\t},\n\t};\n}\n"],"mappings":";;;;;;AAsDA,MAAM,+BAA+B;AAErC,SAAS,6BACR,OACA,UACA,YACS;CACT,MAAM,OAAO,SAAS;AACtB,KAAI,CAAC,6BAA6B,KAAK,KAAK,CAC3C,OAAM,IAAI,MAAM,GAAG,WAAW,6CAA6C;AAE5E,QAAO;;;;;;;;;;;;AAgFR,SAAgB,OAAO,QAA0C;AAChE,QAAO;EACN,YAAY;EACZ;EACA,MAAM;EACN,YAAY;GACX,YAAY;GACZ,gBAAgB,EAAE,KAAK,OAAO,KAAK;GACnC;EACD;;;;;;;;;;;;;;;AAgBF,SAAgB,OAAO,QAA0C;CAChE,MAAM,EAAE,uBAAuB,GAAG,kBAAkB;AACpD,QAAO;EACN,YAAY;EACZ,QAAQ;EACR,MAAM;EACN,YAAY;GACX,YAAY;GACZ,gBAAgB;IACf,KAAK,OAAO;IACZ,cAAc,6BACb,uBACA,oBACA,wBACA;IACD;GACD;EACD;;;;;;;;;;;;AAmCF,SAAgB,SAAS,QAA4C;CACpE,MAAM,EAAE,8BAA8B,GAAG,kBAAkB;AAC3D,QAAO;EACN,YAAY;EACZ,QAAQ;EACR,MAAM;EACN,YAAY;GACX,YAAY;GACZ,gBAAgB,EACf,qBAAqB,6BACpB,8BACA,gBACA,+BACA,EACD;GACD;EACD"}
@@ -1,4 +1,4 @@
1
- import { i as MigrationExecutorFactoryContext, n as MigrationExecutor } from "../protocol-CLn58-nw.mjs";
1
+ import { i as MigrationExecutorFactoryContext, n as MigrationExecutor } from "../protocol-C1CNiKX4.mjs";
2
2
 
3
3
  //#region src/db/libsql-migrations.d.ts
4
4
  interface LibsqlMigrationManifestConfig {
@@ -1,9 +1,10 @@
1
- import "../runner-nEzvnogG.mjs";
2
- import "../dialect-helpers-BcQvkHgn.mjs";
3
- import "../config-C3EBstHi.mjs";
4
- import "../identity-CjGKDq8J.mjs";
5
- import { t as createDirectMigrationExecutor } from "../direct-executor-yAyUGSqB.mjs";
6
- import { n as requireMigrationEnvironment, t as createMigrationTarget } from "../target-CRzeTs8G.mjs";
1
+ import "../runner-ClrleR8A.mjs";
2
+ import "../dialect-helpers-CtYdsX4W.mjs";
3
+ import "../config-CGVeT8Hc.mjs";
4
+ import "../datetime-normalization-PeiEdcRY.mjs";
5
+ import "../identity-DRGSHEEr.mjs";
6
+ import { t as createDirectMigrationExecutor } from "../direct-executor-ZI8E01Yt.mjs";
7
+ import { n as requireMigrationEnvironment, t as createMigrationTarget } from "../target-CUKlGrXb.mjs";
7
8
  import { createDialect } from "./libsql.mjs";
8
9
  import { pathToFileURL } from "node:url";
9
10
  import { resolve } from "node:path";
@@ -1 +1 @@
1
- {"version":3,"file":"libsql-migrations.mjs","names":[],"sources":["../../src/db/libsql-migrations.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { createDirectMigrationExecutor } from \"../migrations/direct-executor.js\";\nimport type { MigrationExecutor, MigrationExecutorFactoryContext } from \"../migrations/protocol.js\";\nimport { createMigrationTarget, requireMigrationEnvironment } from \"../migrations/target.js\";\nimport { createDialect } from \"./libsql.js\";\n\nexport interface LibsqlMigrationManifestConfig {\n\turl: string;\n\tauthTokenEnv: string;\n}\n\ninterface ResolvedLibsqlUrl {\n\tconnectionUrl: string;\n\tlabel: string;\n\tidentity: string[];\n\trequiresAuthToken: boolean;\n}\n\nfunction resolveLibsqlUrl(url: unknown, projectRoot: string): ResolvedLibsqlUrl {\n\tif (typeof url !== \"string\" || url.length === 0) {\n\t\tthrow new Error(\"libSQL migration URL is missing.\");\n\t}\n\tif (url.startsWith(\"file:\")) {\n\t\tconst configuredPath = url.slice(5);\n\t\tif (configuredPath.length === 0) throw new Error(\"libSQL migration URL is invalid.\");\n\t\tconst fileUrl = pathToFileURL(resolve(projectRoot, configuredPath));\n\t\treturn {\n\t\t\tconnectionUrl: fileUrl.href,\n\t\t\tlabel: fileUrl.href,\n\t\t\tidentity: [fileUrl.protocol, fileUrl.pathname],\n\t\t\trequiresAuthToken: false,\n\t\t};\n\t}\n\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(url);\n\t} catch {\n\t\tthrow new Error(\"libSQL migration URL is invalid.\");\n\t}\n\tif (parsed.username || parsed.password) {\n\t\tthrow new Error(\"libSQL migration URL must not contain credentials.\");\n\t}\n\tconst label = `${parsed.protocol}//${parsed.host}${parsed.pathname}`;\n\treturn {\n\t\tconnectionUrl: url,\n\t\tlabel,\n\t\tidentity: [parsed.protocol, parsed.host, parsed.pathname],\n\t\trequiresAuthToken: true,\n\t};\n}\n\nexport async function createMigrationExecutor(\n\tmanifestConfig: LibsqlMigrationManifestConfig,\n\tcontext: MigrationExecutorFactoryContext,\n): Promise<MigrationExecutor> {\n\tconst resolvedUrl = resolveLibsqlUrl(manifestConfig.url, context.projectRoot);\n\tconst authToken = resolvedUrl.requiresAuthToken\n\t\t? requireMigrationEnvironment(manifestConfig.authTokenEnv, context.env)\n\t\t: undefined;\n\tconst target = await createMigrationTarget(\"libsql\", resolvedUrl.label, resolvedUrl.identity);\n\treturn createDirectMigrationExecutor({\n\t\ttarget,\n\t\tcreateDialect: () =>\n\t\t\tcreateDialect({\n\t\t\t\turl: resolvedUrl.connectionUrl,\n\t\t\t\tauthToken,\n\t\t\t}),\n\t});\n}\n"],"mappings":";;;;;;;;;;;AAoBA,SAAS,iBAAiB,KAAc,aAAwC;AAC/E,KAAI,OAAO,QAAQ,YAAY,IAAI,WAAW,EAC7C,OAAM,IAAI,MAAM,mCAAmC;AAEpD,KAAI,IAAI,WAAW,QAAQ,EAAE;EAC5B,MAAM,iBAAiB,IAAI,MAAM,EAAE;AACnC,MAAI,eAAe,WAAW,EAAG,OAAM,IAAI,MAAM,mCAAmC;EACpF,MAAM,UAAU,cAAc,QAAQ,aAAa,eAAe,CAAC;AACnE,SAAO;GACN,eAAe,QAAQ;GACvB,OAAO,QAAQ;GACf,UAAU,CAAC,QAAQ,UAAU,QAAQ,SAAS;GAC9C,mBAAmB;GACnB;;CAGF,IAAI;AACJ,KAAI;AACH,WAAS,IAAI,IAAI,IAAI;SACd;AACP,QAAM,IAAI,MAAM,mCAAmC;;AAEpD,KAAI,OAAO,YAAY,OAAO,SAC7B,OAAM,IAAI,MAAM,qDAAqD;AAGtE,QAAO;EACN,eAAe;EACf,OAHa,GAAG,OAAO,SAAS,IAAI,OAAO,OAAO,OAAO;EAIzD,UAAU;GAAC,OAAO;GAAU,OAAO;GAAM,OAAO;GAAS;EACzD,mBAAmB;EACnB;;AAGF,eAAsB,wBACrB,gBACA,SAC6B;CAC7B,MAAM,cAAc,iBAAiB,eAAe,KAAK,QAAQ,YAAY;CAC7E,MAAM,YAAY,YAAY,oBAC3B,4BAA4B,eAAe,cAAc,QAAQ,IAAI,GACrE;AAEH,QAAO,8BAA8B;EACpC,QAFc,MAAM,sBAAsB,UAAU,YAAY,OAAO,YAAY,SAAS;EAG5F,qBACC,cAAc;GACb,KAAK,YAAY;GACjB;GACA,CAAC;EACH,CAAC"}
1
+ {"version":3,"file":"libsql-migrations.mjs","names":[],"sources":["../../src/db/libsql-migrations.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport { createDirectMigrationExecutor } from \"../migrations/direct-executor.js\";\nimport type { MigrationExecutor, MigrationExecutorFactoryContext } from \"../migrations/protocol.js\";\nimport { createMigrationTarget, requireMigrationEnvironment } from \"../migrations/target.js\";\nimport { createDialect } from \"./libsql.js\";\n\nexport interface LibsqlMigrationManifestConfig {\n\turl: string;\n\tauthTokenEnv: string;\n}\n\ninterface ResolvedLibsqlUrl {\n\tconnectionUrl: string;\n\tlabel: string;\n\tidentity: string[];\n\trequiresAuthToken: boolean;\n}\n\nfunction resolveLibsqlUrl(url: unknown, projectRoot: string): ResolvedLibsqlUrl {\n\tif (typeof url !== \"string\" || url.length === 0) {\n\t\tthrow new Error(\"libSQL migration URL is missing.\");\n\t}\n\tif (url.startsWith(\"file:\")) {\n\t\tconst configuredPath = url.slice(5);\n\t\tif (configuredPath.length === 0) throw new Error(\"libSQL migration URL is invalid.\");\n\t\tconst fileUrl = pathToFileURL(resolve(projectRoot, configuredPath));\n\t\treturn {\n\t\t\tconnectionUrl: fileUrl.href,\n\t\t\tlabel: fileUrl.href,\n\t\t\tidentity: [fileUrl.protocol, fileUrl.pathname],\n\t\t\trequiresAuthToken: false,\n\t\t};\n\t}\n\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(url);\n\t} catch {\n\t\tthrow new Error(\"libSQL migration URL is invalid.\");\n\t}\n\tif (parsed.username || parsed.password) {\n\t\tthrow new Error(\"libSQL migration URL must not contain credentials.\");\n\t}\n\tconst label = `${parsed.protocol}//${parsed.host}${parsed.pathname}`;\n\treturn {\n\t\tconnectionUrl: url,\n\t\tlabel,\n\t\tidentity: [parsed.protocol, parsed.host, parsed.pathname],\n\t\trequiresAuthToken: true,\n\t};\n}\n\nexport async function createMigrationExecutor(\n\tmanifestConfig: LibsqlMigrationManifestConfig,\n\tcontext: MigrationExecutorFactoryContext,\n): Promise<MigrationExecutor> {\n\tconst resolvedUrl = resolveLibsqlUrl(manifestConfig.url, context.projectRoot);\n\tconst authToken = resolvedUrl.requiresAuthToken\n\t\t? requireMigrationEnvironment(manifestConfig.authTokenEnv, context.env)\n\t\t: undefined;\n\tconst target = await createMigrationTarget(\"libsql\", resolvedUrl.label, resolvedUrl.identity);\n\treturn createDirectMigrationExecutor({\n\t\ttarget,\n\t\tcreateDialect: () =>\n\t\t\tcreateDialect({\n\t\t\t\turl: resolvedUrl.connectionUrl,\n\t\t\t\tauthToken,\n\t\t\t}),\n\t});\n}\n"],"mappings":";;;;;;;;;;;;AAoBA,SAAS,iBAAiB,KAAc,aAAwC;AAC/E,KAAI,OAAO,QAAQ,YAAY,IAAI,WAAW,EAC7C,OAAM,IAAI,MAAM,mCAAmC;AAEpD,KAAI,IAAI,WAAW,QAAQ,EAAE;EAC5B,MAAM,iBAAiB,IAAI,MAAM,EAAE;AACnC,MAAI,eAAe,WAAW,EAAG,OAAM,IAAI,MAAM,mCAAmC;EACpF,MAAM,UAAU,cAAc,QAAQ,aAAa,eAAe,CAAC;AACnE,SAAO;GACN,eAAe,QAAQ;GACvB,OAAO,QAAQ;GACf,UAAU,CAAC,QAAQ,UAAU,QAAQ,SAAS;GAC9C,mBAAmB;GACnB;;CAGF,IAAI;AACJ,KAAI;AACH,WAAS,IAAI,IAAI,IAAI;SACd;AACP,QAAM,IAAI,MAAM,mCAAmC;;AAEpD,KAAI,OAAO,YAAY,OAAO,SAC7B,OAAM,IAAI,MAAM,qDAAqD;AAGtE,QAAO;EACN,eAAe;EACf,OAHa,GAAG,OAAO,SAAS,IAAI,OAAO,OAAO,OAAO;EAIzD,UAAU;GAAC,OAAO;GAAU,OAAO;GAAM,OAAO;GAAS;EACzD,mBAAmB;EACnB;;AAGF,eAAsB,wBACrB,gBACA,SAC6B;CAC7B,MAAM,cAAc,iBAAiB,eAAe,KAAK,QAAQ,YAAY;CAC7E,MAAM,YAAY,YAAY,oBAC3B,4BAA4B,eAAe,cAAc,QAAQ,IAAI,GACrE;AAEH,QAAO,8BAA8B;EACpC,QAFc,MAAM,sBAAsB,UAAU,YAAY,OAAO,YAAY,SAAS;EAG5F,qBACC,cAAc;GACb,KAAK,YAAY;GACjB;GACA,CAAC;EACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import { o as LibsqlConfig } from "../adapters-DCEgOBXi.mjs";
1
+ import { o as LibsqlConfig } from "../adapters-Cq10K4_c.mjs";
2
2
  import { Dialect } from "kysely";
3
3
 
4
4
  //#region src/db/libsql.d.ts
@@ -1,4 +1,4 @@
1
- import { i as MigrationExecutorFactoryContext, n as MigrationExecutor } from "../protocol-CLn58-nw.mjs";
1
+ import { i as MigrationExecutorFactoryContext, n as MigrationExecutor } from "../protocol-C1CNiKX4.mjs";
2
2
 
3
3
  //#region src/db/postgres-migrations.d.ts
4
4
  interface PostgresMigrationManifestConfig {
@@ -1,9 +1,10 @@
1
- import "../runner-nEzvnogG.mjs";
2
- import "../dialect-helpers-BcQvkHgn.mjs";
3
- import "../config-C3EBstHi.mjs";
4
- import "../identity-CjGKDq8J.mjs";
5
- import { t as createDirectMigrationExecutor } from "../direct-executor-yAyUGSqB.mjs";
6
- import { n as requireMigrationEnvironment, t as createMigrationTarget } from "../target-CRzeTs8G.mjs";
1
+ import "../runner-ClrleR8A.mjs";
2
+ import "../dialect-helpers-CtYdsX4W.mjs";
3
+ import "../config-CGVeT8Hc.mjs";
4
+ import "../datetime-normalization-PeiEdcRY.mjs";
5
+ import "../identity-DRGSHEEr.mjs";
6
+ import { t as createDirectMigrationExecutor } from "../direct-executor-ZI8E01Yt.mjs";
7
+ import { n as requireMigrationEnvironment, t as createMigrationTarget } from "../target-CUKlGrXb.mjs";
7
8
  import { createDialect } from "./postgres.mjs";
8
9
 
9
10
  //#region src/db/postgres-migrations.ts
@@ -1 +1 @@
1
- {"version":3,"file":"postgres-migrations.mjs","names":[],"sources":["../../src/db/postgres-migrations.ts"],"sourcesContent":["import { createDirectMigrationExecutor } from \"../migrations/direct-executor.js\";\nimport type { MigrationExecutor, MigrationExecutorFactoryContext } from \"../migrations/protocol.js\";\nimport { createMigrationTarget, requireMigrationEnvironment } from \"../migrations/target.js\";\nimport { createDialect } from \"./postgres.js\";\n\nexport interface PostgresMigrationManifestConfig {\n\tconnectionStringEnv: string;\n}\n\ninterface PostgresTargetIdentity {\n\thost: string;\n\tport: string;\n\tdatabase: string;\n}\n\nfunction parseTargetIdentity(connectionString: string): PostgresTargetIdentity {\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(connectionString);\n\t} catch {\n\t\tthrow new Error(\"PostgreSQL migration connection string is invalid.\");\n\t}\n\tif (parsed.protocol !== \"postgres:\" && parsed.protocol !== \"postgresql:\") {\n\t\tthrow new Error(\"PostgreSQL migration connection string is invalid.\");\n\t}\n\tconst database = parsed.pathname.slice(1);\n\tif (!parsed.hostname || !database) {\n\t\tthrow new Error(\"PostgreSQL migration connection string must identify a host and database.\");\n\t}\n\treturn {\n\t\thost: parsed.hostname,\n\t\tport: parsed.port || \"5432\",\n\t\tdatabase,\n\t};\n}\n\nexport async function createMigrationExecutor(\n\tmanifestConfig: PostgresMigrationManifestConfig,\n\tcontext: MigrationExecutorFactoryContext,\n): Promise<MigrationExecutor> {\n\tconst connectionStringEnv =\n\t\tcontext.overrides?.databaseUrlEnv ?? manifestConfig.connectionStringEnv;\n\tconst connectionString = requireMigrationEnvironment(connectionStringEnv, context.env);\n\tconst identity = parseTargetIdentity(connectionString);\n\tconst label = `${identity.host}:${identity.port}/${identity.database}`;\n\tconst target = await createMigrationTarget(\"postgres\", label, [\n\t\tidentity.host,\n\t\tidentity.port,\n\t\tidentity.database,\n\t]);\n\treturn createDirectMigrationExecutor({\n\t\ttarget,\n\t\tcreateDialect: () =>\n\t\t\tcreateDialect({\n\t\t\t\tconnectionString,\n\t\t\t\tpool: { min: 0, max: 1 },\n\t\t\t}),\n\t});\n}\n"],"mappings":";;;;;;;;;AAeA,SAAS,oBAAoB,kBAAkD;CAC9E,IAAI;AACJ,KAAI;AACH,WAAS,IAAI,IAAI,iBAAiB;SAC3B;AACP,QAAM,IAAI,MAAM,qDAAqD;;AAEtE,KAAI,OAAO,aAAa,eAAe,OAAO,aAAa,cAC1D,OAAM,IAAI,MAAM,qDAAqD;CAEtE,MAAM,WAAW,OAAO,SAAS,MAAM,EAAE;AACzC,KAAI,CAAC,OAAO,YAAY,CAAC,SACxB,OAAM,IAAI,MAAM,4EAA4E;AAE7F,QAAO;EACN,MAAM,OAAO;EACb,MAAM,OAAO,QAAQ;EACrB;EACA;;AAGF,eAAsB,wBACrB,gBACA,SAC6B;CAG7B,MAAM,mBAAmB,4BADxB,QAAQ,WAAW,kBAAkB,eAAe,qBACqB,QAAQ,IAAI;CACtF,MAAM,WAAW,oBAAoB,iBAAiB;AAOtD,QAAO,8BAA8B;EACpC,QANc,MAAM,sBAAsB,YAD7B,GAAG,SAAS,KAAK,GAAG,SAAS,KAAK,GAAG,SAAS,YACE;GAC7D,SAAS;GACT,SAAS;GACT,SAAS;GACT,CAAC;EAGD,qBACC,cAAc;GACb;GACA,MAAM;IAAE,KAAK;IAAG,KAAK;IAAG;GACxB,CAAC;EACH,CAAC"}
1
+ {"version":3,"file":"postgres-migrations.mjs","names":[],"sources":["../../src/db/postgres-migrations.ts"],"sourcesContent":["import { createDirectMigrationExecutor } from \"../migrations/direct-executor.js\";\nimport type { MigrationExecutor, MigrationExecutorFactoryContext } from \"../migrations/protocol.js\";\nimport { createMigrationTarget, requireMigrationEnvironment } from \"../migrations/target.js\";\nimport { createDialect } from \"./postgres.js\";\n\nexport interface PostgresMigrationManifestConfig {\n\tconnectionStringEnv: string;\n}\n\ninterface PostgresTargetIdentity {\n\thost: string;\n\tport: string;\n\tdatabase: string;\n}\n\nfunction parseTargetIdentity(connectionString: string): PostgresTargetIdentity {\n\tlet parsed: URL;\n\ttry {\n\t\tparsed = new URL(connectionString);\n\t} catch {\n\t\tthrow new Error(\"PostgreSQL migration connection string is invalid.\");\n\t}\n\tif (parsed.protocol !== \"postgres:\" && parsed.protocol !== \"postgresql:\") {\n\t\tthrow new Error(\"PostgreSQL migration connection string is invalid.\");\n\t}\n\tconst database = parsed.pathname.slice(1);\n\tif (!parsed.hostname || !database) {\n\t\tthrow new Error(\"PostgreSQL migration connection string must identify a host and database.\");\n\t}\n\treturn {\n\t\thost: parsed.hostname,\n\t\tport: parsed.port || \"5432\",\n\t\tdatabase,\n\t};\n}\n\nexport async function createMigrationExecutor(\n\tmanifestConfig: PostgresMigrationManifestConfig,\n\tcontext: MigrationExecutorFactoryContext,\n): Promise<MigrationExecutor> {\n\tconst connectionStringEnv =\n\t\tcontext.overrides?.databaseUrlEnv ?? manifestConfig.connectionStringEnv;\n\tconst connectionString = requireMigrationEnvironment(connectionStringEnv, context.env);\n\tconst identity = parseTargetIdentity(connectionString);\n\tconst label = `${identity.host}:${identity.port}/${identity.database}`;\n\tconst target = await createMigrationTarget(\"postgres\", label, [\n\t\tidentity.host,\n\t\tidentity.port,\n\t\tidentity.database,\n\t]);\n\treturn createDirectMigrationExecutor({\n\t\ttarget,\n\t\tcreateDialect: () =>\n\t\t\tcreateDialect({\n\t\t\t\tconnectionString,\n\t\t\t\tpool: { min: 0, max: 1 },\n\t\t\t}),\n\t});\n}\n"],"mappings":";;;;;;;;;;AAeA,SAAS,oBAAoB,kBAAkD;CAC9E,IAAI;AACJ,KAAI;AACH,WAAS,IAAI,IAAI,iBAAiB;SAC3B;AACP,QAAM,IAAI,MAAM,qDAAqD;;AAEtE,KAAI,OAAO,aAAa,eAAe,OAAO,aAAa,cAC1D,OAAM,IAAI,MAAM,qDAAqD;CAEtE,MAAM,WAAW,OAAO,SAAS,MAAM,EAAE;AACzC,KAAI,CAAC,OAAO,YAAY,CAAC,SACxB,OAAM,IAAI,MAAM,4EAA4E;AAE7F,QAAO;EACN,MAAM,OAAO;EACb,MAAM,OAAO,QAAQ;EACrB;EACA;;AAGF,eAAsB,wBACrB,gBACA,SAC6B;CAG7B,MAAM,mBAAmB,4BADxB,QAAQ,WAAW,kBAAkB,eAAe,qBACqB,QAAQ,IAAI;CACtF,MAAM,WAAW,oBAAoB,iBAAiB;AAOtD,QAAO,8BAA8B;EACpC,QANc,MAAM,sBAAsB,YAD7B,GAAG,SAAS,KAAK,GAAG,SAAS,KAAK,GAAG,SAAS,YACE;GAC7D,SAAS;GACT,SAAS;GACT,SAAS;GACT,CAAC;EAGD,qBACC,cAAc;GACb;GACA,MAAM;IAAE,KAAK;IAAG,KAAK;IAAG;GACxB,CAAC;EACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import { s as PostgresConfig } from "../adapters-DCEgOBXi.mjs";
1
+ import { s as PostgresConfig } from "../adapters-Cq10K4_c.mjs";
2
2
  import { PostgresDialect } from "kysely";
3
3
 
4
4
  //#region src/db/postgres.d.ts
@@ -1,4 +1,4 @@
1
- import { i as MigrationExecutorFactoryContext, n as MigrationExecutor } from "../protocol-CLn58-nw.mjs";
1
+ import { i as MigrationExecutorFactoryContext, n as MigrationExecutor } from "../protocol-C1CNiKX4.mjs";
2
2
 
3
3
  //#region src/db/sqlite-migrations.d.ts
4
4
  interface SqliteMigrationManifestConfig {
@@ -1,10 +1,11 @@
1
- import "../runner-nEzvnogG.mjs";
2
- import "../dialect-helpers-BcQvkHgn.mjs";
3
- import "../config-C3EBstHi.mjs";
4
- import "../identity-CjGKDq8J.mjs";
1
+ import "../runner-ClrleR8A.mjs";
2
+ import "../dialect-helpers-CtYdsX4W.mjs";
3
+ import "../config-CGVeT8Hc.mjs";
4
+ import "../datetime-normalization-PeiEdcRY.mjs";
5
+ import "../identity-DRGSHEEr.mjs";
5
6
  import { createDialect } from "./sqlite.mjs";
6
- import { t as createDirectMigrationExecutor } from "../direct-executor-yAyUGSqB.mjs";
7
- import { t as createMigrationTarget } from "../target-CRzeTs8G.mjs";
7
+ import { t as createDirectMigrationExecutor } from "../direct-executor-ZI8E01Yt.mjs";
8
+ import { t as createMigrationTarget } from "../target-CUKlGrXb.mjs";
8
9
  import { isAbsolute, resolve } from "node:path";
9
10
 
10
11
  //#region src/db/sqlite-migrations.ts
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-migrations.mjs","names":[],"sources":["../../src/db/sqlite-migrations.ts"],"sourcesContent":["import { isAbsolute, resolve } from \"node:path\";\n\nimport { createDirectMigrationExecutor } from \"../migrations/direct-executor.js\";\nimport type { MigrationExecutor, MigrationExecutorFactoryContext } from \"../migrations/protocol.js\";\nimport { createMigrationTarget } from \"../migrations/target.js\";\nimport { createDialect } from \"./sqlite.js\";\n\nexport interface SqliteMigrationManifestConfig {\n\turl: string;\n}\n\nfunction resolveDatabasePath(\n\tmanifestConfig: SqliteMigrationManifestConfig,\n\tcontext: MigrationExecutorFactoryContext,\n): string {\n\tconst configuredUrl = context.overrides?.database ?? manifestConfig.url;\n\tif (typeof configuredUrl !== \"string\" || configuredUrl.length === 0) {\n\t\tthrow new Error(\"SQLite migration database path is missing.\");\n\t}\n\tconst path = configuredUrl.startsWith(\"file:\") ? configuredUrl.slice(5) : configuredUrl;\n\tif (path.length === 0) {\n\t\tthrow new Error(\"SQLite migration database path is missing.\");\n\t}\n\treturn isAbsolute(path) ? resolve(path) : resolve(context.projectRoot, path);\n}\n\nexport async function createMigrationExecutor(\n\tmanifestConfig: SqliteMigrationManifestConfig,\n\tcontext: MigrationExecutorFactoryContext,\n): Promise<MigrationExecutor> {\n\tconst databasePath = resolveDatabasePath(manifestConfig, context);\n\tconst target = await createMigrationTarget(\"sqlite\", databasePath, [databasePath]);\n\treturn createDirectMigrationExecutor({\n\t\ttarget,\n\t\tcreateDialect: () => createDialect({ url: databasePath }),\n\t});\n}\n"],"mappings":";;;;;;;;;;AAWA,SAAS,oBACR,gBACA,SACS;CACT,MAAM,gBAAgB,QAAQ,WAAW,YAAY,eAAe;AACpE,KAAI,OAAO,kBAAkB,YAAY,cAAc,WAAW,EACjE,OAAM,IAAI,MAAM,6CAA6C;CAE9D,MAAM,OAAO,cAAc,WAAW,QAAQ,GAAG,cAAc,MAAM,EAAE,GAAG;AAC1E,KAAI,KAAK,WAAW,EACnB,OAAM,IAAI,MAAM,6CAA6C;AAE9D,QAAO,WAAW,KAAK,GAAG,QAAQ,KAAK,GAAG,QAAQ,QAAQ,aAAa,KAAK;;AAG7E,eAAsB,wBACrB,gBACA,SAC6B;CAC7B,MAAM,eAAe,oBAAoB,gBAAgB,QAAQ;AAEjE,QAAO,8BAA8B;EACpC,QAFc,MAAM,sBAAsB,UAAU,cAAc,CAAC,aAAa,CAAC;EAGjF,qBAAqB,cAAc,EAAE,KAAK,cAAc,CAAC;EACzD,CAAC"}
1
+ {"version":3,"file":"sqlite-migrations.mjs","names":[],"sources":["../../src/db/sqlite-migrations.ts"],"sourcesContent":["import { isAbsolute, resolve } from \"node:path\";\n\nimport { createDirectMigrationExecutor } from \"../migrations/direct-executor.js\";\nimport type { MigrationExecutor, MigrationExecutorFactoryContext } from \"../migrations/protocol.js\";\nimport { createMigrationTarget } from \"../migrations/target.js\";\nimport { createDialect } from \"./sqlite.js\";\n\nexport interface SqliteMigrationManifestConfig {\n\turl: string;\n}\n\nfunction resolveDatabasePath(\n\tmanifestConfig: SqliteMigrationManifestConfig,\n\tcontext: MigrationExecutorFactoryContext,\n): string {\n\tconst configuredUrl = context.overrides?.database ?? manifestConfig.url;\n\tif (typeof configuredUrl !== \"string\" || configuredUrl.length === 0) {\n\t\tthrow new Error(\"SQLite migration database path is missing.\");\n\t}\n\tconst path = configuredUrl.startsWith(\"file:\") ? configuredUrl.slice(5) : configuredUrl;\n\tif (path.length === 0) {\n\t\tthrow new Error(\"SQLite migration database path is missing.\");\n\t}\n\treturn isAbsolute(path) ? resolve(path) : resolve(context.projectRoot, path);\n}\n\nexport async function createMigrationExecutor(\n\tmanifestConfig: SqliteMigrationManifestConfig,\n\tcontext: MigrationExecutorFactoryContext,\n): Promise<MigrationExecutor> {\n\tconst databasePath = resolveDatabasePath(manifestConfig, context);\n\tconst target = await createMigrationTarget(\"sqlite\", databasePath, [databasePath]);\n\treturn createDirectMigrationExecutor({\n\t\ttarget,\n\t\tcreateDialect: () => createDialect({ url: databasePath }),\n\t});\n}\n"],"mappings":";;;;;;;;;;;AAWA,SAAS,oBACR,gBACA,SACS;CACT,MAAM,gBAAgB,QAAQ,WAAW,YAAY,eAAe;AACpE,KAAI,OAAO,kBAAkB,YAAY,cAAc,WAAW,EACjE,OAAM,IAAI,MAAM,6CAA6C;CAE9D,MAAM,OAAO,cAAc,WAAW,QAAQ,GAAG,cAAc,MAAM,EAAE,GAAG;AAC1E,KAAI,KAAK,WAAW,EACnB,OAAM,IAAI,MAAM,6CAA6C;AAE9D,QAAO,WAAW,KAAK,GAAG,QAAQ,KAAK,GAAG,QAAQ,QAAQ,aAAa,KAAK;;AAG7E,eAAsB,wBACrB,gBACA,SAC6B;CAC7B,MAAM,eAAe,oBAAoB,gBAAgB,QAAQ;AAEjE,QAAO,8BAA8B;EACpC,QAFc,MAAM,sBAAsB,UAAU,cAAc,CAAC,aAAa,CAAC;EAGjF,qBAAqB,cAAc,EAAE,KAAK,cAAc,CAAC;EACzD,CAAC"}
@@ -1,4 +1,4 @@
1
- import { c as SqliteConfig } from "../adapters-DCEgOBXi.mjs";
1
+ import { c as SqliteConfig } from "../adapters-Cq10K4_c.mjs";
2
2
  import { Dialect } from "kysely";
3
3
 
4
4
  //#region src/db/sqlite.d.ts
@@ -1,4 +1,4 @@
1
- import { t as openNodeSqliteDatabase } from "../node-sqlite-compat-2sezm-Zd.mjs";
1
+ import { t as openNodeSqliteDatabase } from "../node-sqlite-compat-vpVaILnb.mjs";
2
2
  import { SqliteDialect } from "kysely";
3
3
 
4
4
  //#region src/db/sqlite.ts
@@ -0,0 +1,55 @@
1
+ //#region src/utils/db-errors.ts
2
+ /**
3
+ * Shared detection helpers for database-layer error messages.
4
+ *
5
+ * Different SQL dialects phrase "table or relation does not exist" differently:
6
+ *
7
+ * - SQLite / D1: "no such table: foo"
8
+ * - PostgreSQL: 'relation "foo" does not exist'
9
+ * 'table "foo" does not exist'
10
+ * - MySQL (future): "Table 'db.foo' doesn't exist"
11
+ *
12
+ * Runtime code paths that short-circuit on missing tables (pre-migration
13
+ * probes, optional feature tables, etc.) should use these helpers rather
14
+ * than hand-rolling string matches per call-site.
15
+ */
16
+ /**
17
+ * Extract a lowercase error message from any unknown value, safely.
18
+ */
19
+ function messageOf(error) {
20
+ if (error instanceof Error) return error.message.toLowerCase();
21
+ if (typeof error === "string") return error.toLowerCase();
22
+ return "";
23
+ }
24
+ /**
25
+ * Returns true when `error` is a "column does not exist" error.
26
+ * Used to handle where filters that reference non-existent field names
27
+ * gracefully (return empty results) instead of propagating a SQL error.
28
+ * When `column` is given, only errors naming that column match.
29
+ */
30
+ function isMissingColumnError(error, column) {
31
+ const message = messageOf(error);
32
+ if (!message) return false;
33
+ if (column && !message.includes(column.toLowerCase())) return false;
34
+ if (message.includes("no such column")) return true;
35
+ if (message.includes("does not exist") && message.includes("column") && !message.includes("relation")) return true;
36
+ return false;
37
+ }
38
+ /**
39
+ * Returns true when `error` is a "table does not exist" error across the
40
+ * dialects EmDash supports (D1/SQLite and PostgreSQL). Used by runtime
41
+ * probes to treat pre-migration databases as empty without logging a scary
42
+ * warning, while still propagating unrelated errors (permissions, connection
43
+ * loss, syntax issues) to callers.
44
+ */
45
+ function isMissingTableError(error) {
46
+ const message = messageOf(error);
47
+ if (!message) return false;
48
+ if (message.includes("no such table")) return true;
49
+ if (message.includes("does not exist") || message.includes("doesn't exist")) return message.includes("relation") || message.includes("table");
50
+ return false;
51
+ }
52
+
53
+ //#endregion
54
+ export { isMissingTableError as n, isMissingColumnError as t };
55
+ //# sourceMappingURL=db-errors-CBD5yMro.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-errors-CBD5yMro.mjs","names":[],"sources":["../src/utils/db-errors.ts"],"sourcesContent":["/**\n * Shared detection helpers for database-layer error messages.\n *\n * Different SQL dialects phrase \"table or relation does not exist\" differently:\n *\n * - SQLite / D1: \"no such table: foo\"\n * - PostgreSQL: 'relation \"foo\" does not exist'\n * 'table \"foo\" does not exist'\n * - MySQL (future): \"Table 'db.foo' doesn't exist\"\n *\n * Runtime code paths that short-circuit on missing tables (pre-migration\n * probes, optional feature tables, etc.) should use these helpers rather\n * than hand-rolling string matches per call-site.\n */\n\n/**\n * Extract a lowercase error message from any unknown value, safely.\n */\nfunction messageOf(error: unknown): string {\n\tif (error instanceof Error) return error.message.toLowerCase();\n\tif (typeof error === \"string\") return error.toLowerCase();\n\treturn \"\";\n}\n\n/**\n * Returns true when `error` is a \"column does not exist\" error.\n * Used to handle where filters that reference non-existent field names\n * gracefully (return empty results) instead of propagating a SQL error.\n * When `column` is given, only errors naming that column match.\n */\nexport function isMissingColumnError(error: unknown, column?: string): boolean {\n\tconst message = messageOf(error);\n\tif (!message) return false;\n\tif (column && !message.includes(column.toLowerCase())) return false;\n\n\t// SQLite / D1: \"no such column: foo\"\n\tif (message.includes(\"no such column\")) return true;\n\n\t// PostgreSQL SQLSTATE 42703: 'column \"foo\" does not exist'\n\t// Exclude \"relation\" to avoid false positives on table names containing \"column\"\n\tif (\n\t\tmessage.includes(\"does not exist\") &&\n\t\tmessage.includes(\"column\") &&\n\t\t!message.includes(\"relation\")\n\t)\n\t\treturn true;\n\n\treturn false;\n}\n\n/**\n * Returns true when `error` is a \"table does not exist\" error across the\n * dialects EmDash supports (D1/SQLite and PostgreSQL). Used by runtime\n * probes to treat pre-migration databases as empty without logging a scary\n * warning, while still propagating unrelated errors (permissions, connection\n * loss, syntax issues) to callers.\n */\nexport function isMissingTableError(error: unknown): boolean {\n\tconst message = messageOf(error);\n\tif (!message) return false;\n\n\t// SQLite / D1\n\tif (message.includes(\"no such table\")) return true;\n\n\t// PostgreSQL (and some MySQL variants): \"relation ... does not exist\" /\n\t// \"table ... does not exist\" / \"doesn't exist\".\n\tif (message.includes(\"does not exist\") || message.includes(\"doesn't exist\")) {\n\t\treturn message.includes(\"relation\") || message.includes(\"table\");\n\t}\n\n\treturn false;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkBA,SAAS,UAAU,OAAwB;AAC1C,KAAI,iBAAiB,MAAO,QAAO,MAAM,QAAQ,aAAa;AAC9D,KAAI,OAAO,UAAU,SAAU,QAAO,MAAM,aAAa;AACzD,QAAO;;;;;;;;AASR,SAAgB,qBAAqB,OAAgB,QAA0B;CAC9E,MAAM,UAAU,UAAU,MAAM;AAChC,KAAI,CAAC,QAAS,QAAO;AACrB,KAAI,UAAU,CAAC,QAAQ,SAAS,OAAO,aAAa,CAAC,CAAE,QAAO;AAG9D,KAAI,QAAQ,SAAS,iBAAiB,CAAE,QAAO;AAI/C,KACC,QAAQ,SAAS,iBAAiB,IAClC,QAAQ,SAAS,SAAS,IAC1B,CAAC,QAAQ,SAAS,WAAW,CAE7B,QAAO;AAER,QAAO;;;;;;;;;AAUR,SAAgB,oBAAoB,OAAyB;CAC5D,MAAM,UAAU,UAAU,MAAM;AAChC,KAAI,CAAC,QAAS,QAAO;AAGrB,KAAI,QAAQ,SAAS,gBAAgB,CAAE,QAAO;AAI9C,KAAI,QAAQ,SAAS,iBAAiB,IAAI,QAAQ,SAAS,gBAAgB,CAC1E,QAAO,QAAQ,SAAS,WAAW,IAAI,QAAQ,SAAS,QAAQ;AAGjE,QAAO"}
@@ -0,0 +1,81 @@
1
+ //#region src/seed/default.ts
2
+ const defaultSeed = {
3
+ version: "1",
4
+ meta: {
5
+ name: "Default",
6
+ description: "Posts and pages with categories and tags"
7
+ },
8
+ collections: [{
9
+ slug: "posts",
10
+ label: "Posts",
11
+ labelSingular: "Post",
12
+ supports: [
13
+ "drafts",
14
+ "revisions",
15
+ "search"
16
+ ],
17
+ fields: [
18
+ {
19
+ slug: "title",
20
+ label: "Title",
21
+ type: "string",
22
+ required: true,
23
+ searchable: true
24
+ },
25
+ {
26
+ slug: "featured_image",
27
+ label: "Featured Image",
28
+ type: "image"
29
+ },
30
+ {
31
+ slug: "content",
32
+ label: "Content",
33
+ type: "portableText",
34
+ searchable: true
35
+ },
36
+ {
37
+ slug: "excerpt",
38
+ label: "Excerpt",
39
+ type: "text"
40
+ }
41
+ ]
42
+ }, {
43
+ slug: "pages",
44
+ label: "Pages",
45
+ labelSingular: "Page",
46
+ supports: [
47
+ "drafts",
48
+ "revisions",
49
+ "search"
50
+ ],
51
+ fields: [{
52
+ slug: "title",
53
+ label: "Title",
54
+ type: "string",
55
+ required: true,
56
+ searchable: true
57
+ }, {
58
+ slug: "content",
59
+ label: "Content",
60
+ type: "portableText",
61
+ searchable: true
62
+ }]
63
+ }],
64
+ taxonomies: [{
65
+ name: "category",
66
+ label: "Categories",
67
+ labelSingular: "Category",
68
+ hierarchical: true,
69
+ collections: ["posts"]
70
+ }, {
71
+ name: "tag",
72
+ label: "Tags",
73
+ labelSingular: "Tag",
74
+ hierarchical: false,
75
+ collections: ["posts"]
76
+ }]
77
+ };
78
+
79
+ //#endregion
80
+ export { defaultSeed as t };
81
+ //# sourceMappingURL=default-BtlxWgh9.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-BtlxWgh9.mjs","names":[],"sources":["../src/seed/default.ts"],"sourcesContent":["/**\n * Default seed applied when no user seed file exists.\n *\n * Provides the baseline schema every EmDash site needs:\n * posts, pages, categories, and tags.\n */\n\nimport type { SeedFile } from \"./types.js\";\n\nexport const defaultSeed: SeedFile = {\n\tversion: \"1\",\n\tmeta: {\n\t\tname: \"Default\",\n\t\tdescription: \"Posts and pages with categories and tags\",\n\t},\n\tcollections: [\n\t\t{\n\t\t\tslug: \"posts\",\n\t\t\tlabel: \"Posts\",\n\t\t\tlabelSingular: \"Post\",\n\t\t\tsupports: [\"drafts\", \"revisions\", \"search\"],\n\t\t\tfields: [\n\t\t\t\t{\n\t\t\t\t\tslug: \"title\",\n\t\t\t\t\tlabel: \"Title\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: true,\n\t\t\t\t\tsearchable: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tslug: \"featured_image\",\n\t\t\t\t\tlabel: \"Featured Image\",\n\t\t\t\t\ttype: \"image\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tslug: \"content\",\n\t\t\t\t\tlabel: \"Content\",\n\t\t\t\t\ttype: \"portableText\",\n\t\t\t\t\tsearchable: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tslug: \"excerpt\",\n\t\t\t\t\tlabel: \"Excerpt\",\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tslug: \"pages\",\n\t\t\tlabel: \"Pages\",\n\t\t\tlabelSingular: \"Page\",\n\t\t\tsupports: [\"drafts\", \"revisions\", \"search\"],\n\t\t\tfields: [\n\t\t\t\t{\n\t\t\t\t\tslug: \"title\",\n\t\t\t\t\tlabel: \"Title\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: true,\n\t\t\t\t\tsearchable: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tslug: \"content\",\n\t\t\t\t\tlabel: \"Content\",\n\t\t\t\t\ttype: \"portableText\",\n\t\t\t\t\tsearchable: true,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n\ttaxonomies: [\n\t\t{\n\t\t\tname: \"category\",\n\t\t\tlabel: \"Categories\",\n\t\t\tlabelSingular: \"Category\",\n\t\t\thierarchical: true,\n\t\t\tcollections: [\"posts\"],\n\t\t},\n\t\t{\n\t\t\tname: \"tag\",\n\t\t\tlabel: \"Tags\",\n\t\t\tlabelSingular: \"Tag\",\n\t\t\thierarchical: false,\n\t\t\tcollections: [\"posts\"],\n\t\t},\n\t],\n};\n"],"mappings":";AASA,MAAa,cAAwB;CACpC,SAAS;CACT,MAAM;EACL,MAAM;EACN,aAAa;EACb;CACD,aAAa,CACZ;EACC,MAAM;EACN,OAAO;EACP,eAAe;EACf,UAAU;GAAC;GAAU;GAAa;GAAS;EAC3C,QAAQ;GACP;IACC,MAAM;IACN,OAAO;IACP,MAAM;IACN,UAAU;IACV,YAAY;IACZ;GACD;IACC,MAAM;IACN,OAAO;IACP,MAAM;IACN;GACD;IACC,MAAM;IACN,OAAO;IACP,MAAM;IACN,YAAY;IACZ;GACD;IACC,MAAM;IACN,OAAO;IACP,MAAM;IACN;GACD;EACD,EACD;EACC,MAAM;EACN,OAAO;EACP,eAAe;EACf,UAAU;GAAC;GAAU;GAAa;GAAS;EAC3C,QAAQ,CACP;GACC,MAAM;GACN,OAAO;GACP,MAAM;GACN,UAAU;GACV,YAAY;GACZ,EACD;GACC,MAAM;GACN,OAAO;GACP,MAAM;GACN,YAAY;GACZ,CACD;EACD,CACD;CACD,YAAY,CACX;EACC,MAAM;EACN,OAAO;EACP,eAAe;EACf,cAAc;EACd,aAAa,CAAC,QAAQ;EACtB,EACD;EACC,MAAM;EACN,OAAO;EACP,eAAe;EACf,cAAc;EACd,aAAa,CAAC,QAAQ;EACtB,CACD;CACD"}