emdash 0.37.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 (1445) 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 -29
  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 +123 -13
  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 -9
  35. package/dist/astro/middleware/redirect.mjs.map +1 -1
  36. package/dist/astro/middleware/request-context.d.mts +1 -1
  37. package/dist/astro/middleware/request-context.d.mts.map +1 -1
  38. package/dist/astro/middleware/request-context.mjs +154 -28
  39. package/dist/astro/middleware/request-context.mjs.map +1 -1
  40. package/dist/astro/middleware/setup.mjs +1 -1
  41. package/dist/astro/middleware.d.mts +13 -10
  42. package/dist/astro/middleware.d.mts.map +1 -1
  43. package/dist/astro/middleware.mjs +122 -3041
  44. package/dist/astro/middleware.mjs.map +1 -1
  45. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +10 -9
  46. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
  47. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +10 -9
  48. package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
  49. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +5 -5
  50. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  51. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
  52. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +13 -12
  53. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
  54. package/dist/astro/routes/api/admin/byline-fields/index.mjs +13 -12
  55. package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
  56. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +13 -12
  57. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
  58. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +22 -21
  59. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
  60. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +22 -21
  61. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
  62. package/dist/astro/routes/api/admin/bylines/index.mjs +22 -21
  63. package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
  64. package/dist/astro/routes/api/admin/comments/_id_/status.d.mts.map +1 -1
  65. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +21 -54
  66. package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
  67. package/dist/astro/routes/api/admin/comments/_id_.mjs +8 -8
  68. package/dist/astro/routes/api/admin/comments/bulk.mjs +15 -14
  69. package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
  70. package/dist/astro/routes/api/admin/comments/counts.mjs +8 -8
  71. package/dist/astro/routes/api/admin/comments/index.mjs +15 -14
  72. package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
  73. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
  74. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
  75. package/dist/astro/routes/api/admin/media-usage/activation.mjs +17 -16
  76. package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -1
  77. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +19 -18
  78. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
  79. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +19 -18
  80. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
  81. package/dist/astro/routes/api/admin/media-usage/progress.mjs +17 -17
  82. package/dist/astro/routes/api/admin/media-usage/repair.mjs +21 -20
  83. package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
  84. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +19 -18
  85. package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +19 -18
  87. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +5 -5
  89. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +5 -5
  90. package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts.map +1 -1
  91. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +9 -66
  92. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  93. package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts.map +1 -1
  94. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +9 -69
  95. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  96. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +66 -59
  97. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  98. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -6
  99. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +65 -59
  100. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  101. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +70 -61
  102. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  103. package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts.map +1 -1
  104. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +87 -63
  105. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  106. package/dist/astro/routes/api/admin/plugins/index.mjs +66 -59
  107. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  108. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -4
  109. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +65 -59
  110. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  111. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts.map +1 -1
  112. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +85 -63
  113. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  114. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +65 -59
  115. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  116. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +70 -61
  117. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  118. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -1
  119. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +90 -66
  120. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  121. package/dist/astro/routes/api/admin/plugins/registry/artifact.d.mts.map +1 -1
  122. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -7
  123. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  124. package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -1
  125. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +77 -63
  126. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  127. package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts.map +1 -1
  128. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +67 -61
  129. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
  130. package/dist/astro/routes/api/admin/plugins/updates.d.mts.map +1 -1
  131. package/dist/astro/routes/api/admin/plugins/updates.mjs +66 -60
  132. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  133. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.d.mts +8 -0
  134. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.d.mts.map +1 -0
  135. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +27 -0
  136. package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs.map +1 -0
  137. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +65 -59
  138. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  139. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +4 -4
  140. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +65 -59
  141. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  142. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +4 -4
  143. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
  144. package/dist/astro/routes/api/admin/users/_id_/index.mjs +11 -10
  145. package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
  146. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +5 -5
  147. package/dist/astro/routes/api/admin/users/index.mjs +10 -9
  148. package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
  149. package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -5
  150. package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
  151. package/dist/astro/routes/api/auth/invite/complete.mjs +15 -14
  152. package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
  153. package/dist/astro/routes/api/auth/invite/index.mjs +12 -11
  154. package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
  155. package/dist/astro/routes/api/auth/invite/register-options.mjs +14 -13
  156. package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
  157. package/dist/astro/routes/api/auth/logout.mjs +4 -4
  158. package/dist/astro/routes/api/auth/magic-link/send.mjs +14 -13
  159. package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
  160. package/dist/astro/routes/api/auth/magic-link/verify.mjs +4 -4
  161. package/dist/astro/routes/api/auth/me.mjs +11 -10
  162. package/dist/astro/routes/api/auth/me.mjs.map +1 -1
  163. package/dist/astro/routes/api/auth/mode.mjs +4 -4
  164. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
  165. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  166. package/dist/astro/routes/api/auth/passkey/_id_.mjs +10 -9
  167. package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
  168. package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
  169. package/dist/astro/routes/api/auth/passkey/options.mjs +16 -15
  170. package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
  171. package/dist/astro/routes/api/auth/passkey/register/options.mjs +14 -13
  172. package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
  173. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +15 -14
  174. package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
  175. package/dist/astro/routes/api/auth/passkey/verify.mjs +15 -14
  176. package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
  177. package/dist/astro/routes/api/auth/signup/complete.mjs +15 -14
  178. package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
  179. package/dist/astro/routes/api/auth/signup/request.mjs +14 -13
  180. package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
  181. package/dist/astro/routes/api/auth/signup/verify.mjs +3 -3
  182. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts.map +1 -1
  183. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -211
  184. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
  185. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -17
  186. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
  187. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
  188. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
  189. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +17 -11
  190. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  191. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  192. package/dist/astro/routes/api/content/_collection_/_id_/lock.d.mts +10 -0
  193. package/dist/astro/routes/api/content/_collection_/_id_/lock.d.mts.map +1 -0
  194. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +67 -0
  195. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -0
  196. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -4
  197. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.d.mts +8 -0
  198. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.d.mts.map +1 -0
  199. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +35 -0
  200. package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs.map +1 -0
  201. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +16 -15
  202. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
  203. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts +9 -2
  204. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
  205. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +28 -16
  206. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  207. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +27 -23
  208. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  209. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +27 -23
  210. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  211. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  212. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
  213. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
  214. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +27 -12
  215. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  216. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +23 -20
  217. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  218. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -4
  219. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
  220. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +25 -12
  221. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  222. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  223. package/dist/astro/routes/api/content/_collection_/_id_.mjs +27 -14
  224. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  225. package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -4
  226. package/dist/astro/routes/api/content/_collection_/index.mjs +18 -12
  227. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  228. package/dist/astro/routes/api/content/_collection_/trash.mjs +11 -10
  229. package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
  230. package/dist/astro/routes/api/dashboard.mjs +14 -12
  231. package/dist/astro/routes/api/dashboard.mjs.map +1 -1
  232. package/dist/astro/routes/api/dev/emails.mjs +4 -4
  233. package/dist/astro/routes/api/health.d.mts +8 -0
  234. package/dist/astro/routes/api/health.d.mts.map +1 -0
  235. package/dist/astro/routes/api/health.mjs +21 -0
  236. package/dist/astro/routes/api/health.mjs.map +1 -0
  237. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  238. package/dist/astro/routes/api/import/probe.mjs +25 -23
  239. package/dist/astro/routes/api/import/probe.mjs.map +1 -1
  240. package/dist/astro/routes/api/import/wordpress/analyze.mjs +5 -5
  241. package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -11
  242. package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
  243. package/dist/astro/routes/api/import/wordpress/execute.mjs +20 -19
  244. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  245. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -10
  246. package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -1
  247. package/dist/astro/routes/api/import/wordpress/media.mjs +15 -14
  248. package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
  249. package/dist/astro/routes/api/import/wordpress/prepare.mjs +14 -13
  250. package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
  251. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -11
  252. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
  253. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +18 -17
  254. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
  255. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  256. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -23
  257. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
  258. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
  259. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -11
  260. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
  261. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +36 -33
  262. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  263. package/dist/astro/routes/api/manifest.mjs +17 -9
  264. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  265. package/dist/astro/routes/api/mcp.d.mts.map +1 -1
  266. package/dist/astro/routes/api/mcp.mjs +192 -110
  267. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  268. package/dist/astro/routes/api/media/_id_/confirm.mjs +15 -14
  269. package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
  270. package/dist/astro/routes/api/media/_id_/replace.mjs +12 -11
  271. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -1
  272. package/dist/astro/routes/api/media/_id_/upload.mjs +8 -8
  273. package/dist/astro/routes/api/media/_id_/usage.mjs +23 -22
  274. package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
  275. package/dist/astro/routes/api/media/_id_.mjs +22 -21
  276. package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
  277. package/dist/astro/routes/api/media/asset/_id_/_filename_.d.mts +8 -0
  278. package/dist/astro/routes/api/media/asset/_id_/_filename_.d.mts.map +1 -0
  279. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +52 -0
  280. package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs.map +1 -0
  281. package/dist/astro/routes/api/media/file/_...key_.mjs +3 -3
  282. package/dist/astro/routes/api/media/folders/_id_.mjs +12 -11
  283. package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -1
  284. package/dist/astro/routes/api/media/folders/index.mjs +12 -11
  285. package/dist/astro/routes/api/media/folders/index.mjs.map +1 -1
  286. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -4
  287. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -4
  288. package/dist/astro/routes/api/media/providers/index.mjs +4 -4
  289. package/dist/astro/routes/api/media/upload-url.mjs +14 -13
  290. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  291. package/dist/astro/routes/api/media.mjs +26 -25
  292. package/dist/astro/routes/api/media.mjs.map +1 -1
  293. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +15 -14
  294. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  295. package/dist/astro/routes/api/menus/_name_/items.mjs +15 -14
  296. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  297. package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -14
  298. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  299. package/dist/astro/routes/api/menus/_name_/translations.mjs +15 -14
  300. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  301. package/dist/astro/routes/api/menus/_name_.mjs +15 -14
  302. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  303. package/dist/astro/routes/api/menus/index.mjs +15 -14
  304. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  305. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  306. package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -7
  307. package/dist/astro/routes/api/oauth/device/code.mjs +10 -10
  308. package/dist/astro/routes/api/oauth/device/token.mjs +9 -9
  309. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  310. package/dist/astro/routes/api/oauth/token/refresh.mjs +7 -7
  311. package/dist/astro/routes/api/oauth/token/revoke.mjs +7 -7
  312. package/dist/astro/routes/api/oauth/token.mjs +7 -7
  313. package/dist/astro/routes/api/openapi.json.mjs +95 -24
  314. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  315. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts +2 -1
  316. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts.map +1 -1
  317. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +22 -40
  318. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
  319. package/dist/astro/routes/api/redirects/404s/index.mjs +18 -14
  320. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  321. package/dist/astro/routes/api/redirects/404s/summary.mjs +18 -14
  322. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  323. package/dist/astro/routes/api/redirects/_id_.d.mts.map +1 -1
  324. package/dist/astro/routes/api/redirects/_id_.mjs +20 -22
  325. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  326. package/dist/astro/routes/api/redirects/index.d.mts.map +1 -1
  327. package/dist/astro/routes/api/redirects/index.mjs +19 -19
  328. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  329. package/dist/astro/routes/api/relations/_id_/index.mjs +27 -23
  330. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  331. package/dist/astro/routes/api/relations/_id_/translations.mjs +21 -18
  332. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
  333. package/dist/astro/routes/api/relations/index.mjs +27 -23
  334. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  335. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
  336. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
  337. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +65 -59
  338. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  339. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +65 -59
  340. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  341. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +65 -59
  342. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  343. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +65 -59
  344. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  345. package/dist/astro/routes/api/schema/collections/index.mjs +65 -59
  346. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  347. package/dist/astro/routes/api/schema/collections/reorder.mjs +65 -59
  348. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  349. package/dist/astro/routes/api/schema/index.mjs +16 -14
  350. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  351. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +65 -59
  352. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  353. package/dist/astro/routes/api/schema/orphans/index.mjs +65 -59
  354. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  355. package/dist/astro/routes/api/search/enable.mjs +16 -14
  356. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  357. package/dist/astro/routes/api/search/index.mjs +17 -14
  358. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  359. package/dist/astro/routes/api/search/rebuild.mjs +16 -14
  360. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  361. package/dist/astro/routes/api/search/stats.mjs +10 -9
  362. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  363. package/dist/astro/routes/api/search/suggest.mjs +15 -13
  364. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  365. package/dist/astro/routes/api/sections/_slug_.mjs +15 -13
  366. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  367. package/dist/astro/routes/api/sections/index.mjs +15 -13
  368. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  369. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +9 -8
  370. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs.map +1 -1
  371. package/dist/astro/routes/api/settings/backups/archives/index.mjs +8 -7
  372. package/dist/astro/routes/api/settings/backups/archives/index.mjs.map +1 -1
  373. package/dist/astro/routes/api/settings/backups/export.mjs +9 -8
  374. package/dist/astro/routes/api/settings/backups/export.mjs.map +1 -1
  375. package/dist/astro/routes/api/settings/backups/index.mjs +10 -9
  376. package/dist/astro/routes/api/settings/backups/index.mjs.map +1 -1
  377. package/dist/astro/routes/api/settings/email.mjs +6 -6
  378. package/dist/astro/routes/api/settings.mjs +22 -20
  379. package/dist/astro/routes/api/settings.mjs.map +1 -1
  380. package/dist/astro/routes/api/setup/admin-verify.mjs +16 -15
  381. package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
  382. package/dist/astro/routes/api/setup/admin.mjs +15 -14
  383. package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
  384. package/dist/astro/routes/api/setup/dev-bypass.mjs +42 -38
  385. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  386. package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
  387. package/dist/astro/routes/api/setup/index.mjs +43 -38
  388. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  389. package/dist/astro/routes/api/setup/status.mjs +5 -5
  390. package/dist/astro/routes/api/snapshot.mjs +11 -10
  391. package/dist/astro/routes/api/snapshot.mjs.map +1 -1
  392. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -21
  393. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  394. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -21
  395. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  396. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +23 -21
  397. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  398. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -21
  399. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  400. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -20
  401. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  402. package/dist/astro/routes/api/taxonomies/_name_.mjs +23 -21
  403. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  404. package/dist/astro/routes/api/taxonomies/index.mjs +23 -21
  405. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  406. package/dist/astro/routes/api/themes/preview.mjs +8 -8
  407. package/dist/astro/routes/api/typegen.mjs +6 -6
  408. package/dist/astro/routes/api/visual-editing/action-token.d.mts +8 -0
  409. package/dist/astro/routes/api/visual-editing/action-token.d.mts.map +1 -0
  410. package/dist/astro/routes/api/visual-editing/action-token.mjs +25 -0
  411. package/dist/astro/routes/api/visual-editing/action-token.mjs.map +1 -0
  412. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.d.mts +8 -0
  413. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.d.mts.map +1 -0
  414. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +37 -0
  415. package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs.map +1 -0
  416. package/dist/astro/routes/api/visual-editing/toolbar-labels.d.mts +8 -0
  417. package/dist/astro/routes/api/visual-editing/toolbar-labels.d.mts.map +1 -0
  418. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +20 -0
  419. package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs.map +1 -0
  420. package/dist/astro/routes/api/well-known/auth.mjs +2 -2
  421. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  422. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  423. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +12 -11
  424. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  425. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +16 -15
  426. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  427. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +16 -15
  428. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  429. package/dist/astro/routes/api/widget-areas/_name_.mjs +10 -10
  430. package/dist/astro/routes/api/widget-areas/index.mjs +16 -15
  431. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  432. package/dist/astro/routes/api/widget-components.mjs +4 -4
  433. package/dist/astro/routes/robots.txt.mjs +13 -12
  434. package/dist/astro/routes/robots.txt.mjs.map +1 -1
  435. package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -1
  436. package/dist/astro/routes/sitemap-_collection_.xml.mjs +24 -19
  437. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  438. package/dist/astro/routes/sitemap.xml.mjs +14 -13
  439. package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
  440. package/dist/astro/types.d.mts +79 -26
  441. package/dist/astro/types.d.mts.map +1 -1
  442. package/dist/auth/providers/github.d.mts +1 -1
  443. package/dist/auth/providers/google.d.mts +1 -1
  444. package/dist/authoritative-records-DbqshfKD.mjs +5172 -0
  445. package/dist/authoritative-records-DbqshfKD.mjs.map +1 -0
  446. package/dist/authorize-BXpfMpp0.mjs +40 -0
  447. package/dist/authorize-BXpfMpp0.mjs.map +1 -0
  448. package/dist/backup-BsPQdwnS.mjs +246 -0
  449. package/dist/backup-BsPQdwnS.mjs.map +1 -0
  450. package/dist/base64-DvnNgP7e.mjs +63 -0
  451. package/dist/base64-DvnNgP7e.mjs.map +1 -0
  452. package/dist/byline-Doh-wt99.mjs +906 -0
  453. package/dist/byline-Doh-wt99.mjs.map +1 -0
  454. package/dist/byline-fields-CsrdvaLV.mjs +123 -0
  455. package/dist/byline-fields-CsrdvaLV.mjs.map +1 -0
  456. package/dist/byline-registry-D6lWzXk6.mjs +406 -0
  457. package/dist/byline-registry-D6lWzXk6.mjs.map +1 -0
  458. package/dist/bylines-Cop0hkoy.mjs +214 -0
  459. package/dist/bylines-Cop0hkoy.mjs.map +1 -0
  460. package/dist/bylines-kpBzHPr8.mjs +232 -0
  461. package/dist/bylines-kpBzHPr8.mjs.map +1 -0
  462. package/dist/cache-B0pOlXdM.mjs +108 -0
  463. package/dist/cache-B0pOlXdM.mjs.map +1 -0
  464. package/dist/capture-triggers-gxQxnxrJ.mjs +362 -0
  465. package/dist/capture-triggers-gxQxnxrJ.mjs.map +1 -0
  466. package/dist/challenge-store-CkRdSdd8.mjs +51 -0
  467. package/dist/challenge-store-CkRdSdd8.mjs.map +1 -0
  468. package/dist/checksum-Bsi2D9M1.mjs +162 -0
  469. package/dist/checksum-Bsi2D9M1.mjs.map +1 -0
  470. package/dist/chrome-tags-D7LGB91U.mjs +24 -0
  471. package/dist/chrome-tags-D7LGB91U.mjs.map +1 -0
  472. package/dist/chunks-BmWyou79.mjs +25 -0
  473. package/dist/chunks-BmWyou79.mjs.map +1 -0
  474. package/dist/cli/index.mjs +921 -106
  475. package/dist/cli/index.mjs.map +1 -1
  476. package/dist/client/cf-access.d.mts +1 -1
  477. package/dist/client/index.d.mts +17 -7
  478. package/dist/client/index.d.mts.map +1 -1
  479. package/dist/client/index.mjs +17 -12
  480. package/dist/client/index.mjs.map +1 -1
  481. package/dist/collection-deletion-C3Xixmkx.mjs +436 -0
  482. package/dist/collection-deletion-C3Xixmkx.mjs.map +1 -0
  483. package/dist/collection-slugs-cache-D9auiKmI.mjs +85 -0
  484. package/dist/collection-slugs-cache-D9auiKmI.mjs.map +1 -0
  485. package/dist/comment-DcT8qdPK.mjs +313 -0
  486. package/dist/comment-DcT8qdPK.mjs.map +1 -0
  487. package/dist/comment-reaction-DY5-y8Y5.mjs +85 -0
  488. package/dist/comment-reaction-DY5-y8Y5.mjs.map +1 -0
  489. package/dist/comments-B67VRNGw.mjs +204 -0
  490. package/dist/comments-B67VRNGw.mjs.map +1 -0
  491. package/dist/comments-BVzzt6x5.mjs +99 -0
  492. package/dist/comments-BVzzt6x5.mjs.map +1 -0
  493. package/dist/components-DIl9Qzh6.mjs +108 -0
  494. package/dist/components-DIl9Qzh6.mjs.map +1 -0
  495. package/dist/config-B2acLeC5.mjs +242 -0
  496. package/dist/config-B2acLeC5.mjs.map +1 -0
  497. package/dist/config-CGVeT8Hc.mjs +73 -0
  498. package/dist/config-CGVeT8Hc.mjs.map +1 -0
  499. package/dist/config-D3HhLON3.d.mts +39 -0
  500. package/dist/config-D3HhLON3.d.mts.map +1 -0
  501. package/dist/config-DS7e4EZ9.d.mts +6387 -0
  502. package/dist/config-DS7e4EZ9.d.mts.map +1 -0
  503. package/dist/content-DZ3B5qtA.mjs +2216 -0
  504. package/dist/content-DZ3B5qtA.mjs.map +1 -0
  505. package/dist/content-list-query-CbPdzsna.d.mts +26 -0
  506. package/dist/content-list-query-CbPdzsna.d.mts.map +1 -0
  507. package/dist/content-policy-CM4skrNi.mjs +46 -0
  508. package/dist/content-policy-CM4skrNi.mjs.map +1 -0
  509. package/dist/content-refresh-BHLHJgyt.mjs +3599 -0
  510. package/dist/content-refresh-BHLHJgyt.mjs.map +1 -0
  511. package/dist/content-repair-BVll5WNl.mjs +440 -0
  512. package/dist/content-repair-BVll5WNl.mjs.map +1 -0
  513. package/dist/context-B195kjqZ.mjs +1835 -0
  514. package/dist/context-B195kjqZ.mjs.map +1 -0
  515. package/dist/cron-BcR3RN4K.mjs +282 -0
  516. package/dist/cron-BcR3RN4K.mjs.map +1 -0
  517. package/dist/dashboard-CZD4G7k_.mjs +151 -0
  518. package/dist/dashboard-CZD4G7k_.mjs.map +1 -0
  519. package/dist/database/migration-lock.d.mts +37 -0
  520. package/dist/database/migration-lock.d.mts.map +1 -0
  521. package/dist/database/migration-lock.mjs +76 -0
  522. package/dist/database/migration-lock.mjs.map +1 -0
  523. package/dist/database/pg-migration-lock.d.mts +1 -1
  524. package/dist/database/pg-migration-lock.mjs +1 -1
  525. package/dist/database/pg-migration-lock.mjs.map +1 -1
  526. package/dist/datetime-normalization-PeiEdcRY.mjs +187 -0
  527. package/dist/datetime-normalization-PeiEdcRY.mjs.map +1 -0
  528. package/dist/db/index.d.mts +3 -3
  529. package/dist/db/index.mjs +4 -3
  530. package/dist/db/index.mjs.map +1 -1
  531. package/dist/db/libsql-migrations.d.mts +1 -1
  532. package/dist/db/libsql-migrations.mjs +7 -6
  533. package/dist/db/libsql-migrations.mjs.map +1 -1
  534. package/dist/db/libsql.d.mts +1 -1
  535. package/dist/db/postgres-migrations.d.mts +1 -1
  536. package/dist/db/postgres-migrations.mjs +7 -6
  537. package/dist/db/postgres-migrations.mjs.map +1 -1
  538. package/dist/db/postgres.d.mts +1 -1
  539. package/dist/db/sqlite-migrations.d.mts +1 -1
  540. package/dist/db/sqlite-migrations.mjs +7 -6
  541. package/dist/db/sqlite-migrations.mjs.map +1 -1
  542. package/dist/db/sqlite.d.mts +1 -1
  543. package/dist/db/sqlite.mjs +1 -1
  544. package/dist/db-errors-CBD5yMro.mjs +55 -0
  545. package/dist/db-errors-CBD5yMro.mjs.map +1 -0
  546. package/dist/default-BtlxWgh9.mjs +81 -0
  547. package/dist/default-BtlxWgh9.mjs.map +1 -0
  548. package/dist/deferred-tasks-Ba9fphlE.d.mts +9 -0
  549. package/dist/deferred-tasks-Ba9fphlE.d.mts.map +1 -0
  550. package/dist/dev-typegen-CZaPLl3V.mjs +29 -0
  551. package/dist/dev-typegen-CZaPLl3V.mjs.map +1 -0
  552. package/dist/device-flow-3E5l0fpH.mjs +466 -0
  553. package/dist/device-flow-3E5l0fpH.mjs.map +1 -0
  554. package/dist/dialect-helpers-CtYdsX4W.mjs +307 -0
  555. package/dist/dialect-helpers-CtYdsX4W.mjs.map +1 -0
  556. package/dist/direct-executor-ZI8E01Yt.mjs +104 -0
  557. package/dist/direct-executor-ZI8E01Yt.mjs.map +1 -0
  558. package/dist/dist-2hDLsLeq.mjs +810 -0
  559. package/dist/dist-2hDLsLeq.mjs.map +1 -0
  560. package/dist/email-console-gc-E3Eqj.mjs +50 -0
  561. package/dist/email-console-gc-E3Eqj.mjs.map +1 -0
  562. package/dist/emdash-runtime-DZGinqTL.mjs +4041 -0
  563. package/dist/emdash-runtime-DZGinqTL.mjs.map +1 -0
  564. package/dist/enrich-C2Mk0lwE.mjs +194 -0
  565. package/dist/enrich-C2Mk0lwE.mjs.map +1 -0
  566. package/dist/entry-lock-D3C99MXS.mjs +1520 -0
  567. package/dist/entry-lock-D3C99MXS.mjs.map +1 -0
  568. package/dist/entry-lock-D9rnj2Lu.mjs +163 -0
  569. package/dist/entry-lock-D9rnj2Lu.mjs.map +1 -0
  570. package/dist/entry-lock-DX7QkqEg.d.mts +3503 -0
  571. package/dist/entry-lock-DX7QkqEg.d.mts.map +1 -0
  572. package/dist/entry-locks-CO_KaoU5.mjs +167 -0
  573. package/dist/entry-locks-CO_KaoU5.mjs.map +1 -0
  574. package/dist/error-CCTCskie.mjs +90 -0
  575. package/dist/error-CCTCskie.mjs.map +1 -0
  576. package/dist/errors-W3PA8HqB.mjs +447 -0
  577. package/dist/errors-W3PA8HqB.mjs.map +1 -0
  578. package/dist/escape-DN4Qmjsl.mjs +9 -0
  579. package/dist/escape-DN4Qmjsl.mjs.map +1 -0
  580. package/dist/field-defs-cache-B337z8UJ.mjs +77 -0
  581. package/dist/field-defs-cache-B337z8UJ.mjs.map +1 -0
  582. package/dist/focal-point-Gr34o-4o.mjs +23 -0
  583. package/dist/focal-point-Gr34o-4o.mjs.map +1 -0
  584. package/dist/fts-manager-DMb0sbIQ.mjs +413 -0
  585. package/dist/fts-manager-DMb0sbIQ.mjs.map +1 -0
  586. package/dist/hash-CLVFzWvx.mjs +37 -0
  587. package/dist/hash-CLVFzWvx.mjs.map +1 -0
  588. package/dist/hook-result-KY1jq21o.d.mts +31 -0
  589. package/dist/hook-result-KY1jq21o.d.mts.map +1 -0
  590. package/dist/hreflang-BgS2FqhH.d.mts +50 -0
  591. package/dist/hreflang-BgS2FqhH.d.mts.map +1 -0
  592. package/dist/hreflang-CrJwqoeb.mjs +105 -0
  593. package/dist/hreflang-CrJwqoeb.mjs.map +1 -0
  594. package/dist/http-route-dispatch-DAKlanXb.mjs +339 -0
  595. package/dist/http-route-dispatch-DAKlanXb.mjs.map +1 -0
  596. package/dist/identity-DRGSHEEr.mjs +35 -0
  597. package/dist/identity-DRGSHEEr.mjs.map +1 -0
  598. package/dist/import-DFr5B_hC.mjs +2020 -0
  599. package/dist/import-DFr5B_hC.mjs.map +1 -0
  600. package/dist/index-CDwKDkTq.d.mts +623 -0
  601. package/dist/index-CDwKDkTq.d.mts.map +1 -0
  602. package/dist/index.d.mts +27 -22
  603. package/dist/index.mjs +101 -86
  604. package/dist/init-lock-4eRRB4Le.mjs +56 -0
  605. package/dist/init-lock-4eRRB4Le.mjs.map +1 -0
  606. package/dist/install-finalization-5Os-QZ-2.mjs +58 -0
  607. package/dist/install-finalization-5Os-QZ-2.mjs.map +1 -0
  608. package/dist/lifecycle-7e-Lt_kX.mjs +25 -0
  609. package/dist/lifecycle-7e-Lt_kX.mjs.map +1 -0
  610. package/dist/load-Cu5bvCZh.mjs +28 -0
  611. package/dist/load-Cu5bvCZh.mjs.map +1 -0
  612. package/dist/loader-t4TxaFiQ.mjs +1004 -0
  613. package/dist/loader-t4TxaFiQ.mjs.map +1 -0
  614. package/dist/manifest-builder-D31UoJCu.mjs +189 -0
  615. package/dist/manifest-builder-D31UoJCu.mjs.map +1 -0
  616. package/dist/manifest-schema-Bkh8SeHd.mjs +491 -0
  617. package/dist/manifest-schema-Bkh8SeHd.mjs.map +1 -0
  618. package/dist/media/image-endpoint.mjs +1 -1
  619. package/dist/media/index.d.mts +1 -1
  620. package/dist/media/index.mjs +4 -4
  621. package/dist/media/local-runtime.d.mts +14 -12
  622. package/dist/media/local-runtime.d.mts.map +1 -1
  623. package/dist/media/local-runtime.mjs +12 -11
  624. package/dist/media/local-runtime.mjs.map +1 -1
  625. package/dist/media-TBlKCwo7.mjs +334 -0
  626. package/dist/media-TBlKCwo7.mjs.map +1 -0
  627. package/dist/media-allowlist-s60eAIf6.mjs +44 -0
  628. package/dist/media-allowlist-s60eAIf6.mjs.map +1 -0
  629. package/dist/media-folders-ClIRLUQv.mjs +210 -0
  630. package/dist/media-folders-ClIRLUQv.mjs.map +1 -0
  631. package/dist/media-url-DY_ijO3B.mjs +43 -0
  632. package/dist/media-url-DY_ijO3B.mjs.map +1 -0
  633. package/dist/media-usage-C4NolTpQ.mjs +1833 -0
  634. package/dist/media-usage-C4NolTpQ.mjs.map +1 -0
  635. package/dist/media-usage-activation-CAhmb14O.mjs +78 -0
  636. package/dist/media-usage-activation-CAhmb14O.mjs.map +1 -0
  637. package/dist/media-usage-work-Cu5DqewW.mjs +586 -0
  638. package/dist/media-usage-work-Cu5DqewW.mjs.map +1 -0
  639. package/dist/media-usage-work-DJr3rOEN.mjs +152 -0
  640. package/dist/media-usage-work-DJr3rOEN.mjs.map +1 -0
  641. package/dist/media-usage-write-fence-DW5oHT7q.mjs +42 -0
  642. package/dist/media-usage-write-fence-DW5oHT7q.mjs.map +1 -0
  643. package/dist/menus-DbgU9z5Q.mjs +3732 -0
  644. package/dist/menus-DbgU9z5Q.mjs.map +1 -0
  645. package/dist/menus-Wy8m5NcH.mjs +753 -0
  646. package/dist/menus-Wy8m5NcH.mjs.map +1 -0
  647. package/dist/migrations/index.d.mts +2 -2
  648. package/dist/migrations/index.d.mts.map +1 -1
  649. package/dist/migrations/index.mjs +6 -5
  650. package/dist/mime-CCYRC4r1.mjs +36 -0
  651. package/dist/mime-CCYRC4r1.mjs.map +1 -0
  652. package/dist/mode-CkmOhFqj.mjs +23 -0
  653. package/dist/mode-CkmOhFqj.mjs.map +1 -0
  654. package/dist/node-sqlite-compat-vpVaILnb.mjs +46 -0
  655. package/dist/node-sqlite-compat-vpVaILnb.mjs.map +1 -0
  656. package/dist/normalize-dChXQjwS.mjs +191 -0
  657. package/dist/normalize-dChXQjwS.mjs.map +1 -0
  658. package/dist/oauth-authorization-DZ-R-hmx.mjs +274 -0
  659. package/dist/oauth-authorization-DZ-R-hmx.mjs.map +1 -0
  660. package/dist/oauth-clients-BMPA8vjl.mjs +266 -0
  661. package/dist/oauth-clients-BMPA8vjl.mjs.map +1 -0
  662. package/dist/oauth-state-store-0gIdb48-.mjs +50 -0
  663. package/dist/oauth-state-store-0gIdb48-.mjs.map +1 -0
  664. package/dist/oauth-user-lookup-ChVW4UWu.mjs +26 -0
  665. package/dist/oauth-user-lookup-ChVW4UWu.mjs.map +1 -0
  666. package/dist/object-cache/memory.d.mts +1 -1
  667. package/dist/object-cache-DlSVbn5Y.mjs +534 -0
  668. package/dist/object-cache-DlSVbn5Y.mjs.map +1 -0
  669. package/dist/options-D5WcorD5.mjs +200 -0
  670. package/dist/options-D5WcorD5.mjs.map +1 -0
  671. package/dist/options-DAknChnw.d.mts +77 -0
  672. package/dist/options-DAknChnw.d.mts.map +1 -0
  673. package/dist/page/index.d.mts +2 -2
  674. package/dist/page/index.d.mts.map +1 -1
  675. package/dist/page/index.mjs +13 -0
  676. package/dist/page/index.mjs.map +1 -1
  677. package/dist/parse-Cr379Av9.mjs +81 -0
  678. package/dist/parse-Cr379Av9.mjs.map +1 -0
  679. package/dist/parse-tj9XLNO_.d.mts +165 -0
  680. package/dist/parse-tj9XLNO_.d.mts.map +1 -0
  681. package/dist/passkey-config-BD-wMaCf.mjs +46 -0
  682. package/dist/passkey-config-BD-wMaCf.mjs.map +1 -0
  683. package/dist/patterns-Do3iqi7N.mjs +145 -0
  684. package/dist/patterns-Do3iqi7N.mjs.map +1 -0
  685. package/dist/placeholder-CubPFn_L.d.mts +306 -0
  686. package/dist/placeholder-CubPFn_L.d.mts.map +1 -0
  687. package/dist/plugin-test-runtime.d.mts +97 -0
  688. package/dist/plugin-test-runtime.d.mts.map +1 -0
  689. package/dist/plugin-test-runtime.mjs +105 -0
  690. package/dist/plugin-types.d.mts +53 -15
  691. package/dist/plugin-types.d.mts.map +1 -1
  692. package/dist/plugin-types.mjs +18 -1
  693. package/dist/plugin-types.mjs.map +1 -0
  694. package/dist/plugin-utils.d.mts +12 -10
  695. package/dist/plugin-utils.d.mts.map +1 -1
  696. package/dist/plugins/adapt-sandbox-entry.d.mts +12 -10
  697. package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
  698. package/dist/plugins/adapt-sandbox-entry.mjs +18 -13
  699. package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
  700. package/dist/plugins/host.d.mts +7 -0
  701. package/dist/plugins/host.mjs +45 -0
  702. package/dist/plugins/http-wire.d.mts +25 -0
  703. package/dist/plugins/http-wire.d.mts.map +1 -0
  704. package/dist/plugins/http-wire.mjs +148 -0
  705. package/dist/plugins/http-wire.mjs.map +1 -0
  706. package/dist/plugins/secret-redactor.d.mts +9 -0
  707. package/dist/plugins/secret-redactor.d.mts.map +1 -0
  708. package/dist/plugins/secret-redactor.mjs +51 -0
  709. package/dist/plugins/secret-redactor.mjs.map +1 -0
  710. package/dist/plugins-DHurtdXQ.mjs +277 -0
  711. package/dist/plugins-DHurtdXQ.mjs.map +1 -0
  712. package/dist/policy-lyZnjpwz.mjs +45 -0
  713. package/dist/policy-lyZnjpwz.mjs.map +1 -0
  714. package/dist/portable-text-oAwodbPS.mjs +286 -0
  715. package/dist/portable-text-oAwodbPS.mjs.map +1 -0
  716. package/dist/preview-Cup2bj8c.mjs +107 -0
  717. package/dist/preview-Cup2bj8c.mjs.map +1 -0
  718. package/dist/protocol-C1CNiKX4.d.mts +61 -0
  719. package/dist/protocol-C1CNiKX4.d.mts.map +1 -0
  720. package/dist/public-submission-Cs-pFMQK.mjs +245 -0
  721. package/dist/public-submission-Cs-pFMQK.mjs.map +1 -0
  722. package/dist/public-url-BWVHsfQv.mjs +101 -0
  723. package/dist/public-url-BWVHsfQv.mjs.map +1 -0
  724. package/dist/query-D-lxiOgn.mjs +890 -0
  725. package/dist/query-D-lxiOgn.mjs.map +1 -0
  726. package/dist/query-D7kHKOws.mjs +41 -0
  727. package/dist/query-D7kHKOws.mjs.map +1 -0
  728. package/dist/rate-limit-CqJn-w4h.mjs +120 -0
  729. package/dist/rate-limit-CqJn-w4h.mjs.map +1 -0
  730. package/dist/redirect-BrChFPIu.mjs +17 -0
  731. package/dist/redirect-BrChFPIu.mjs.map +1 -0
  732. package/dist/redirect-D2Yo-b6S.mjs +415 -0
  733. package/dist/redirect-D2Yo-b6S.mjs.map +1 -0
  734. package/dist/redirects-BCiTaIQ-.mjs +146 -0
  735. package/dist/redirects-BCiTaIQ-.mjs.map +1 -0
  736. package/dist/redirects-ByItliuu.mjs +644 -0
  737. package/dist/redirects-ByItliuu.mjs.map +1 -0
  738. package/dist/registry/testing.d.mts +14 -0
  739. package/dist/registry/testing.d.mts.map +1 -0
  740. package/dist/registry/testing.mjs +255 -0
  741. package/dist/registry/testing.mjs.map +1 -0
  742. package/dist/registry-CkuPoZs7.mjs +1222 -0
  743. package/dist/registry-CkuPoZs7.mjs.map +1 -0
  744. package/dist/relation-XTAtOpJO.mjs +334 -0
  745. package/dist/relation-XTAtOpJO.mjs.map +1 -0
  746. package/dist/relations-B4w-G5U9.mjs +309 -0
  747. package/dist/relations-B4w-G5U9.mjs.map +1 -0
  748. package/dist/relations-O63JWBRj.mjs +403 -0
  749. package/dist/relations-O63JWBRj.mjs.map +1 -0
  750. package/dist/request-cache-DaMhSQdx.mjs +104 -0
  751. package/dist/request-cache-DaMhSQdx.mjs.map +1 -0
  752. package/dist/request-context.d.mts +1 -1
  753. package/dist/request-meta-C8yl_sIs.mjs +141 -0
  754. package/dist/request-meta-C8yl_sIs.mjs.map +1 -0
  755. package/dist/resolve-BJIS8wKr.mjs +199 -0
  756. package/dist/resolve-BJIS8wKr.mjs.map +1 -0
  757. package/dist/route-wire-D66L2oaZ.mjs +197 -0
  758. package/dist/route-wire-D66L2oaZ.mjs.map +1 -0
  759. package/dist/routes-DYsTe-oR.mjs +321 -0
  760. package/dist/routes-DYsTe-oR.mjs.map +1 -0
  761. package/dist/runner-3gfxRsJG.d.mts +68 -0
  762. package/dist/runner-3gfxRsJG.d.mts.map +1 -0
  763. package/dist/runner-ClrleR8A.mjs +5502 -0
  764. package/dist/runner-ClrleR8A.mjs.map +1 -0
  765. package/dist/runtime.d.mts +13 -11
  766. package/dist/runtime.d.mts.map +1 -1
  767. package/dist/runtime.mjs +6 -5
  768. package/dist/runtime.mjs.map +1 -1
  769. package/dist/schema-CPhPM9Do.mjs +420 -0
  770. package/dist/schema-CPhPM9Do.mjs.map +1 -0
  771. package/dist/schema-DEERRrKS.mjs +9 -0
  772. package/dist/schema-DEERRrKS.mjs.map +1 -0
  773. package/dist/scopes-Bn8_rCSt.mjs +27 -0
  774. package/dist/scopes-Bn8_rCSt.mjs.map +1 -0
  775. package/dist/search-lami_Ota.mjs +448 -0
  776. package/dist/search-lami_Ota.mjs.map +1 -0
  777. package/dist/secrets-DNgVgz_e.mjs +341 -0
  778. package/dist/secrets-DNgVgz_e.mjs.map +1 -0
  779. package/dist/sections-BIpd4Cxf.mjs +346 -0
  780. package/dist/sections-BIpd4Cxf.mjs.map +1 -0
  781. package/dist/seed/index.d.mts +2 -2
  782. package/dist/seed/index.mjs +35 -31
  783. package/dist/seo/index.d.mts +3 -3
  784. package/dist/seo/index.d.mts.map +1 -1
  785. package/dist/seo/index.mjs +27 -26
  786. package/dist/seo/index.mjs.map +1 -1
  787. package/dist/seo-BtU70b7l.mjs +114 -0
  788. package/dist/seo-BtU70b7l.mjs.map +1 -0
  789. package/dist/seo-_4qmazxz.mjs +133 -0
  790. package/dist/seo-_4qmazxz.mjs.map +1 -0
  791. package/dist/service-Bpy5iTX0.mjs +150 -0
  792. package/dist/service-Bpy5iTX0.mjs.map +1 -0
  793. package/dist/session-user-BQeS2Mrb.mjs +51 -0
  794. package/dist/session-user-BQeS2Mrb.mjs.map +1 -0
  795. package/dist/settings-DmroR53o.mjs +420 -0
  796. package/dist/settings-DmroR53o.mjs.map +1 -0
  797. package/dist/settings-g2F2a3Ub.mjs +51 -0
  798. package/dist/settings-g2F2a3Ub.mjs.map +1 -0
  799. package/dist/setup-complete-BrZaXpVV.mjs +26 -0
  800. package/dist/setup-complete-BrZaXpVV.mjs.map +1 -0
  801. package/dist/setup-nonce-Cb9-884O.mjs +25 -0
  802. package/dist/setup-nonce-Cb9-884O.mjs.map +1 -0
  803. package/dist/single-flight-cache-B5O2qhO1.mjs +104 -0
  804. package/dist/single-flight-cache-B5O2qhO1.mjs.map +1 -0
  805. package/dist/site-url-DjhYCaep.mjs +16 -0
  806. package/dist/site-url-DjhYCaep.mjs.map +1 -0
  807. package/dist/slugify-T5GHH42D.mjs +17 -0
  808. package/dist/slugify-T5GHH42D.mjs.map +1 -0
  809. package/dist/snapshot-C32Xuv3o.mjs +233 -0
  810. package/dist/snapshot-C32Xuv3o.mjs.map +1 -0
  811. package/dist/ssrf-Co1GGFZz.mjs +406 -0
  812. package/dist/ssrf-Co1GGFZz.mjs.map +1 -0
  813. package/dist/state-C7gCoiHr.mjs +153 -0
  814. package/dist/state-C7gCoiHr.mjs.map +1 -0
  815. package/dist/status-DLoBmcDz.mjs +30 -0
  816. package/dist/status-DLoBmcDz.mjs.map +1 -0
  817. package/dist/storage/local.d.mts +1 -1
  818. package/dist/storage/local.mjs +1 -1
  819. package/dist/storage/s3.d.mts +1 -1
  820. package/dist/storage/s3.mjs +1 -1
  821. package/dist/storage-query-CPctdMKX.d.mts +1519 -0
  822. package/dist/storage-query-CPctdMKX.d.mts.map +1 -0
  823. package/dist/target-CUKlGrXb.mjs +27 -0
  824. package/dist/target-CUKlGrXb.mjs.map +1 -0
  825. package/dist/taxonomies-BpqpXJUE.mjs +707 -0
  826. package/dist/taxonomies-BpqpXJUE.mjs.map +1 -0
  827. package/dist/taxonomies-ClCo4IGO.mjs +899 -0
  828. package/dist/taxonomies-ClCo4IGO.mjs.map +1 -0
  829. package/dist/taxonomy-Dj1vpw5E.mjs +508 -0
  830. package/dist/taxonomy-Dj1vpw5E.mjs.map +1 -0
  831. package/dist/tokens-Ns02GAma.mjs +171 -0
  832. package/dist/tokens-Ns02GAma.mjs.map +1 -0
  833. package/dist/transaction-BcJO4Tmc.mjs +29 -0
  834. package/dist/transaction-BcJO4Tmc.mjs.map +1 -0
  835. package/dist/transport-B8P1xsqk.mjs +136 -0
  836. package/dist/transport-B8P1xsqk.mjs.map +1 -0
  837. package/dist/transport-BLHZZcD_.d.mts +42 -0
  838. package/dist/transport-BLHZZcD_.d.mts.map +1 -0
  839. package/dist/trusted-proxy-Cg7SuD15.mjs +51 -0
  840. package/dist/trusted-proxy-Cg7SuD15.mjs.map +1 -0
  841. package/dist/turnstile-DWCSh_Qc.mjs +53 -0
  842. package/dist/turnstile-DWCSh_Qc.mjs.map +1 -0
  843. package/dist/types-B3RkqvDW.mjs +156 -0
  844. package/dist/types-B3RkqvDW.mjs.map +1 -0
  845. package/dist/types-BkUg2yHx.mjs +92 -0
  846. package/dist/types-BkUg2yHx.mjs.map +1 -0
  847. package/dist/types-BtuppOTV.mjs +16 -0
  848. package/dist/types-BtuppOTV.mjs.map +1 -0
  849. package/dist/types-CCR3ivXE.d.mts +363 -0
  850. package/dist/types-CCR3ivXE.d.mts.map +1 -0
  851. package/dist/types-CSHgU_-_.mjs +18 -0
  852. package/dist/types-CSHgU_-_.mjs.map +1 -0
  853. package/dist/types-CbwqGOXm.d.mts +766 -0
  854. package/dist/types-CbwqGOXm.d.mts.map +1 -0
  855. package/dist/types-D4RGIc2I.d.mts +198 -0
  856. package/dist/types-D4RGIc2I.d.mts.map +1 -0
  857. package/dist/types-DEHidMEk.d.mts +1637 -0
  858. package/dist/types-DEHidMEk.d.mts.map +1 -0
  859. package/dist/types-DQeU2SR7.d.mts +279 -0
  860. package/dist/types-DQeU2SR7.d.mts.map +1 -0
  861. package/dist/types-DxQWoQLA.d.mts +264 -0
  862. package/dist/types-DxQWoQLA.d.mts.map +1 -0
  863. package/dist/types-FBBnGZ2Y.d.mts +198 -0
  864. package/dist/types-FBBnGZ2Y.d.mts.map +1 -0
  865. package/dist/types-ZCnlropY.mjs +69 -0
  866. package/dist/types-ZCnlropY.mjs.map +1 -0
  867. package/dist/types-_Qtyawiy.d.mts +124 -0
  868. package/dist/types-_Qtyawiy.d.mts.map +1 -0
  869. package/dist/types-gC6FAoa_.d.mts +75 -0
  870. package/dist/types-gC6FAoa_.d.mts.map +1 -0
  871. package/dist/types-k--LneIF.mjs +22 -0
  872. package/dist/types-k--LneIF.mjs.map +1 -0
  873. package/dist/upload-attempts-2xdnoKGe.mjs +27 -0
  874. package/dist/upload-attempts-2xdnoKGe.mjs.map +1 -0
  875. package/dist/url-pattern-3m3reMzr.mjs +33 -0
  876. package/dist/url-pattern-3m3reMzr.mjs.map +1 -0
  877. package/dist/user-DroRntkx.mjs +171 -0
  878. package/dist/user-DroRntkx.mjs.map +1 -0
  879. package/dist/utils-CC2oNGV8.mjs +435 -0
  880. package/dist/utils-CC2oNGV8.mjs.map +1 -0
  881. package/dist/validate-BCP9HNDn.mjs +384 -0
  882. package/dist/validate-BCP9HNDn.mjs.map +1 -0
  883. package/dist/validate-CyQ7I3xF.d.mts +410 -0
  884. package/dist/validate-CyQ7I3xF.d.mts.map +1 -0
  885. package/dist/validate-DANX1-Qi.mjs +120 -0
  886. package/dist/validate-DANX1-Qi.mjs.map +1 -0
  887. package/dist/validation-DBy6WF94.mjs +216 -0
  888. package/dist/validation-DBy6WF94.mjs.map +1 -0
  889. package/dist/version-B57E4Uo7.mjs +7 -0
  890. package/dist/version-B57E4Uo7.mjs.map +1 -0
  891. package/dist/widgets-wQ7Xcgq8.mjs +126 -0
  892. package/dist/widgets-wQ7Xcgq8.mjs.map +1 -0
  893. package/dist/wxr-taxonomies-DIHfvEDt.mjs +406 -0
  894. package/dist/wxr-taxonomies-DIHfvEDt.mjs.map +1 -0
  895. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts +34 -0
  896. package/dist/wxr-taxonomies-DU2ZSiGc.d.mts.map +1 -0
  897. package/dist/zod-generator-D_yHIWfs.mjs +329 -0
  898. package/dist/zod-generator-D_yHIWfs.mjs.map +1 -0
  899. package/package.json +39 -12
  900. package/src/api/errors.ts +23 -0
  901. package/src/api/handlers/backup.ts +11 -5
  902. package/src/api/handlers/content.ts +226 -85
  903. package/src/api/handlers/dashboard.ts +31 -1
  904. package/src/api/handlers/entry-lock.ts +206 -0
  905. package/src/api/handlers/index.ts +3 -0
  906. package/src/api/handlers/manifest.ts +5 -6
  907. package/src/api/handlers/marketplace.ts +126 -34
  908. package/src/api/handlers/media-upload.ts +31 -4
  909. package/src/api/handlers/menus.ts +9 -0
  910. package/src/api/handlers/plugin-settings.ts +35 -3
  911. package/src/api/handlers/redirects.ts +221 -138
  912. package/src/api/handlers/registry.ts +75 -29
  913. package/src/api/handlers/revision.ts +16 -27
  914. package/src/api/handlers/seo.ts +10 -1
  915. package/src/api/handlers/snapshot.ts +87 -72
  916. package/src/api/handlers/taxonomies.ts +79 -5
  917. package/src/api/handlers/validation.ts +120 -19
  918. package/src/api/openapi/document.ts +133 -11
  919. package/src/api/schemas/content.ts +32 -12
  920. package/src/api/schemas/entry-lock.ts +57 -0
  921. package/src/api/schemas/index.ts +1 -0
  922. package/src/api/schemas/schema.ts +10 -1
  923. package/src/api/schemas/search.ts +4 -0
  924. package/src/api/types.ts +4 -0
  925. package/src/astro/integration/index.ts +22 -6
  926. package/src/astro/integration/routes.ts +89 -0
  927. package/src/astro/integration/runtime.ts +40 -24
  928. package/src/astro/integration/virtual-modules.ts +4 -0
  929. package/src/astro/integration/vite-config.ts +31 -0
  930. package/src/astro/middleware/auth.ts +25 -4
  931. package/src/astro/middleware/request-context.ts +28 -10
  932. package/src/astro/middleware.ts +33 -1
  933. package/src/astro/prefetch.ts +2 -2
  934. package/src/astro/routes/api/admin/comments/[id]/status.ts +22 -58
  935. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +2 -15
  936. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +2 -25
  937. package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +1 -0
  938. package/src/astro/routes/api/admin/plugins/[id]/update.ts +23 -4
  939. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +12 -2
  940. package/src/astro/routes/api/admin/plugins/registry/[id]/uninstall.ts +1 -0
  941. package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +29 -10
  942. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +8 -2
  943. package/src/astro/routes/api/admin/plugins/registry/install.ts +15 -4
  944. package/src/astro/routes/api/admin/plugins/registry/verify.ts +2 -1
  945. package/src/astro/routes/api/admin/plugins/updates.ts +6 -1
  946. package/src/astro/routes/api/admin/scheduled-policy-rejections/[collection]/[id].ts +34 -0
  947. package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +4 -259
  948. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +10 -0
  949. package/src/astro/routes/api/content/[collection]/[id]/lock.ts +133 -0
  950. package/src/astro/routes/api/content/[collection]/[id]/plugin-extensions/[pluginId]/[kind]/[extensionId].ts +29 -0
  951. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +21 -4
  952. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +30 -1
  953. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +15 -1
  954. package/src/astro/routes/api/content/[collection]/[id].ts +27 -2
  955. package/src/astro/routes/api/content/[collection]/index.ts +3 -0
  956. package/src/astro/routes/api/health.ts +23 -0
  957. package/src/astro/routes/api/manifest.ts +14 -4
  958. package/src/astro/routes/api/mcp.ts +2 -1
  959. package/src/astro/routes/api/media/asset/[id]/[filename].ts +50 -0
  960. package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +13 -81
  961. package/src/astro/routes/api/redirects/[id].ts +0 -3
  962. package/src/astro/routes/api/redirects/index.ts +0 -2
  963. package/src/astro/routes/api/search/index.ts +1 -0
  964. package/src/astro/routes/api/visual-editing/action-token.ts +36 -0
  965. package/src/astro/routes/api/visual-editing/content/[collection]/[id]/publish.ts +32 -0
  966. package/src/astro/routes/api/visual-editing/toolbar-labels.ts +16 -0
  967. package/src/astro/routes/sitemap-[collection].xml.ts +11 -4
  968. package/src/astro/types.ts +83 -12
  969. package/src/cli/commands/bundle-utils.ts +19 -19
  970. package/src/cli/commands/bundle.ts +9 -6
  971. package/src/cli/commands/content.ts +32 -6
  972. package/src/cli/commands/doctor.ts +25 -0
  973. package/src/cli/commands/export-seed.ts +195 -56
  974. package/src/cli/commands/migrate.ts +71 -23
  975. package/src/cli/commands/publish.ts +2 -2
  976. package/src/client/index.ts +34 -7
  977. package/src/comments/public-submission.ts +246 -0
  978. package/src/comments/service.ts +59 -12
  979. package/src/components/EmDashBodyEnd.astro +4 -1
  980. package/src/components/EmDashBodyStart.astro +4 -1
  981. package/src/components/EmDashHead.astro +36 -16
  982. package/src/components/Gallery.astro +18 -4
  983. package/src/components/InlineEditor.astro +3 -1
  984. package/src/components/InlinePortableTextEditor.tsx +106 -11
  985. package/src/components/PortableText.astro +4 -0
  986. package/src/components/Table.astro +147 -62
  987. package/src/components/widgets/Archives.astro +6 -5
  988. package/src/config/errors.ts +13 -0
  989. package/src/config/secrets.ts +25 -11
  990. package/src/content/converters/portable-text-to-prosemirror.ts +26 -2
  991. package/src/content/converters/prosemirror-to-portable-text.ts +35 -6
  992. package/src/content/converters/types.ts +10 -0
  993. package/src/content/known-fields.ts +44 -0
  994. package/src/database/connection.ts +5 -1
  995. package/src/database/content-datetime.ts +123 -0
  996. package/src/database/datetime-storage.ts +452 -0
  997. package/src/database/dialect-helpers.ts +161 -1
  998. package/src/database/migration-lock.ts +140 -0
  999. package/src/database/migrations/075_entry_edit_locks.ts +44 -0
  1000. package/src/database/migrations/076_collection_nav_group.ts +22 -0
  1001. package/src/database/migrations/077_plugin_storage_revisions.ts +89 -0
  1002. package/src/database/migrations/078_menu_item_translation_groups.ts +15 -0
  1003. package/src/database/migrations/079_datetime_normalization.ts +13 -0
  1004. package/src/database/migrations/080_content_translation_locale_unique.ts +88 -0
  1005. package/src/database/migrations/081_redirect_write_guards.ts +257 -0
  1006. package/src/database/migrations/082_taxonomy_translation_locale_unique.ts +49 -0
  1007. package/src/database/migrations/runner.ts +63 -15
  1008. package/src/database/pg-migration-lock.ts +2 -2
  1009. package/src/database/repositories/byline.ts +9 -0
  1010. package/src/database/repositories/comment.ts +86 -0
  1011. package/src/database/repositories/content.ts +560 -69
  1012. package/src/database/repositories/entry-locks.ts +257 -0
  1013. package/src/database/repositories/media.ts +35 -4
  1014. package/src/database/repositories/menu.ts +1 -0
  1015. package/src/database/repositories/options.ts +113 -7
  1016. package/src/database/repositories/plugin-storage.ts +159 -0
  1017. package/src/database/repositories/redirect.ts +262 -56
  1018. package/src/database/repositories/revision.ts +116 -17
  1019. package/src/database/repositories/taxonomy.ts +42 -0
  1020. package/src/database/repositories/types.ts +5 -0
  1021. package/src/database/types.ts +26 -1
  1022. package/src/datetime-normalization.ts +311 -0
  1023. package/src/db/node-sqlite-compat.ts +3 -2
  1024. package/src/emdash-runtime.ts +1994 -424
  1025. package/src/fields/image.ts +2 -0
  1026. package/src/i18n/config.ts +6 -6
  1027. package/src/i18n/resolve.ts +98 -15
  1028. package/src/index.ts +101 -0
  1029. package/src/loader.ts +49 -4
  1030. package/src/mcp/server.ts +216 -68
  1031. package/src/media/responsive.ts +23 -0
  1032. package/src/media/usage/content-refresh.ts +2 -1
  1033. package/src/media/usage/extractor.ts +50 -15
  1034. package/src/media/usage/types.ts +1 -1
  1035. package/src/menus/index.ts +64 -35
  1036. package/src/migrations/direct-executor.ts +40 -2
  1037. package/src/migrations/index.ts +1 -0
  1038. package/src/migrations/protocol.ts +11 -1
  1039. package/src/page/seo-contributions.ts +78 -1
  1040. package/src/page/seo-panel.ts +47 -0
  1041. package/src/plugin-test-runtime.ts +17 -0
  1042. package/src/plugin-types.ts +128 -21
  1043. package/src/plugins/adapt-sandbox-entry.ts +34 -27
  1044. package/src/plugins/conditional-storage.ts +30 -0
  1045. package/src/plugins/content-access.ts +170 -0
  1046. package/src/plugins/content-policy.ts +74 -0
  1047. package/src/plugins/context.ts +790 -166
  1048. package/src/plugins/cron.ts +18 -10
  1049. package/src/plugins/define-plugin.ts +55 -54
  1050. package/src/plugins/editor-draft.ts +257 -0
  1051. package/src/plugins/hooks.ts +136 -3
  1052. package/src/plugins/host.ts +29 -0
  1053. package/src/plugins/http-route-dispatch.ts +389 -0
  1054. package/src/plugins/http-wire.ts +180 -0
  1055. package/src/plugins/index.ts +97 -3
  1056. package/src/plugins/install-finalization.ts +77 -0
  1057. package/src/plugins/lifecycle.ts +47 -0
  1058. package/src/plugins/manager.ts +5 -2
  1059. package/src/plugins/manifest-schema.ts +314 -58
  1060. package/src/plugins/media.ts +166 -0
  1061. package/src/plugins/request-meta.ts +12 -2
  1062. package/src/plugins/route-wire.ts +304 -0
  1063. package/src/plugins/routes.ts +38 -5
  1064. package/src/plugins/sandbox/index.ts +4 -0
  1065. package/src/plugins/sandbox/proxy.ts +129 -0
  1066. package/src/plugins/sandbox/types.ts +83 -7
  1067. package/src/plugins/secret-redactor.ts +65 -0
  1068. package/src/plugins/settings.ts +303 -0
  1069. package/src/plugins/state.ts +26 -0
  1070. package/src/plugins/storage-query.ts +45 -0
  1071. package/src/plugins/storage-update.ts +96 -0
  1072. package/src/plugins/types.ts +602 -15
  1073. package/src/query.ts +84 -4
  1074. package/src/registry/authoritative-records.ts +26 -0
  1075. package/src/registry/config.ts +182 -31
  1076. package/src/registry/testing.ts +100 -0
  1077. package/src/registry/types.ts +12 -70
  1078. package/src/scheduled-publish.ts +70 -3
  1079. package/src/schema/collection-slugs-cache.ts +157 -0
  1080. package/src/schema/index.ts +1 -0
  1081. package/src/schema/registry.ts +64 -1
  1082. package/src/schema/types.ts +32 -6
  1083. package/src/schema/zod-generator.ts +5 -13
  1084. package/src/search/fts-manager.ts +3 -3
  1085. package/src/search/query.ts +32 -5
  1086. package/src/search/types.ts +8 -0
  1087. package/src/security/ssrf.ts +167 -141
  1088. package/src/seed/apply.ts +41 -3
  1089. package/src/seed/types.ts +13 -3
  1090. package/src/seed/validate.ts +18 -1
  1091. package/src/seo/hreflang.ts +10 -6
  1092. package/src/seo/index.ts +5 -10
  1093. package/src/seo/media-url.ts +26 -0
  1094. package/src/settings/index.ts +53 -11
  1095. package/src/taxonomies/term-counts.ts +22 -5
  1096. package/src/visual-editing/action-token.ts +31 -0
  1097. package/src/visual-editing/toolbar-bootstrap.ts +31 -6
  1098. package/src/visual-editing/toolbar.ts +103 -12
  1099. package/src/widgets/archives.ts +10 -9
  1100. package/src/widgets/index.ts +11 -1
  1101. package/dist/activation-K0kGBWuJ.mjs +0 -382
  1102. package/dist/activation-K0kGBWuJ.mjs.map +0 -1
  1103. package/dist/adapters-BDQwg236.d.mts +0 -171
  1104. package/dist/adapters-BDQwg236.d.mts.map +0 -1
  1105. package/dist/after-CBU2vkoO.mjs +0 -96
  1106. package/dist/after-CBU2vkoO.mjs.map +0 -1
  1107. package/dist/allowed-origins-BGglilcs.mjs +0 -116
  1108. package/dist/allowed-origins-BGglilcs.mjs.map +0 -1
  1109. package/dist/api-Dz6rgoa3.mjs +0 -10040
  1110. package/dist/api-Dz6rgoa3.mjs.map +0 -1
  1111. package/dist/api-tokens-BSsQACNe.mjs +0 -163
  1112. package/dist/api-tokens-BSsQACNe.mjs.map +0 -1
  1113. package/dist/apply-B4SIOxR1.mjs +0 -980
  1114. package/dist/apply-B4SIOxR1.mjs.map +0 -1
  1115. package/dist/authorize-Bkf_UHhD.mjs +0 -40
  1116. package/dist/authorize-Bkf_UHhD.mjs.map +0 -1
  1117. package/dist/backup-rwVAl9NI.mjs +0 -241
  1118. package/dist/backup-rwVAl9NI.mjs.map +0 -1
  1119. package/dist/base64-CvLhUKQv.mjs +0 -63
  1120. package/dist/base64-CvLhUKQv.mjs.map +0 -1
  1121. package/dist/bundle-C8S2Zl6U.mjs +0 -663
  1122. package/dist/bundle-C8S2Zl6U.mjs.map +0 -1
  1123. package/dist/byline-DuhF7NWl.mjs +0 -902
  1124. package/dist/byline-DuhF7NWl.mjs.map +0 -1
  1125. package/dist/byline-fields-BovY4KYM.mjs +0 -123
  1126. package/dist/byline-fields-BovY4KYM.mjs.map +0 -1
  1127. package/dist/byline-registry-Bpu9-MVs.mjs +0 -406
  1128. package/dist/byline-registry-Bpu9-MVs.mjs.map +0 -1
  1129. package/dist/bylines-CJ5nd6Lw.mjs +0 -232
  1130. package/dist/bylines-CJ5nd6Lw.mjs.map +0 -1
  1131. package/dist/bylines-RwBAeOF1.mjs +0 -214
  1132. package/dist/bylines-RwBAeOF1.mjs.map +0 -1
  1133. package/dist/cache-BF5Kvn59.mjs +0 -108
  1134. package/dist/cache-BF5Kvn59.mjs.map +0 -1
  1135. package/dist/capture-triggers-CNW1q3HK.mjs +0 -362
  1136. package/dist/capture-triggers-CNW1q3HK.mjs.map +0 -1
  1137. package/dist/challenge-store-DQN_Yrck.mjs +0 -51
  1138. package/dist/challenge-store-DQN_Yrck.mjs.map +0 -1
  1139. package/dist/chrome-tags-D8fiZG94.mjs +0 -24
  1140. package/dist/chrome-tags-D8fiZG94.mjs.map +0 -1
  1141. package/dist/chunks-C4szrD8o.mjs +0 -25
  1142. package/dist/chunks-C4szrD8o.mjs.map +0 -1
  1143. package/dist/collection-deletion-Bj07NHbj.mjs +0 -436
  1144. package/dist/collection-deletion-Bj07NHbj.mjs.map +0 -1
  1145. package/dist/comment-reaction-BhrvSHml.mjs +0 -85
  1146. package/dist/comment-reaction-BhrvSHml.mjs.map +0 -1
  1147. package/dist/comment-vxOzWbZN.mjs +0 -255
  1148. package/dist/comment-vxOzWbZN.mjs.map +0 -1
  1149. package/dist/comments-Ct4ensnf.mjs +0 -204
  1150. package/dist/comments-Ct4ensnf.mjs.map +0 -1
  1151. package/dist/components-DJbo1z0S.mjs +0 -108
  1152. package/dist/components-DJbo1z0S.mjs.map +0 -1
  1153. package/dist/config-B9eZ340f.d.mts +0 -34
  1154. package/dist/config-B9eZ340f.d.mts.map +0 -1
  1155. package/dist/config-C3EBstHi.mjs +0 -72
  1156. package/dist/config-C3EBstHi.mjs.map +0 -1
  1157. package/dist/config-it29yDLA.mjs +0 -1163
  1158. package/dist/config-it29yDLA.mjs.map +0 -1
  1159. package/dist/content-DjvM0T92.mjs +0 -1725
  1160. package/dist/content-DjvM0T92.mjs.map +0 -1
  1161. package/dist/content-list-query-Btqd4uV2.d.mts +0 -26
  1162. package/dist/content-list-query-Btqd4uV2.d.mts.map +0 -1
  1163. package/dist/content-refresh-Bwp-8yGy.mjs +0 -3588
  1164. package/dist/content-refresh-Bwp-8yGy.mjs.map +0 -1
  1165. package/dist/content-repair-Czdp7jz5.mjs +0 -440
  1166. package/dist/content-repair-Czdp7jz5.mjs.map +0 -1
  1167. package/dist/context-CX6gxOLW.mjs +0 -1068
  1168. package/dist/context-CX6gxOLW.mjs.map +0 -1
  1169. package/dist/cron-C6o7VppJ.mjs +0 -277
  1170. package/dist/cron-C6o7VppJ.mjs.map +0 -1
  1171. package/dist/dashboard-C2kTeeRI.mjs +0 -140
  1172. package/dist/dashboard-C2kTeeRI.mjs.map +0 -1
  1173. package/dist/db-errors-Cl-sKYTm.mjs +0 -55
  1174. package/dist/db-errors-Cl-sKYTm.mjs.map +0 -1
  1175. package/dist/default-Clra32mw.mjs +0 -81
  1176. package/dist/default-Clra32mw.mjs.map +0 -1
  1177. package/dist/deferred-tasks-CvDETTJO.d.mts +0 -9
  1178. package/dist/deferred-tasks-CvDETTJO.d.mts.map +0 -1
  1179. package/dist/dev-typegen-DzOPfsNj.mjs +0 -29
  1180. package/dist/dev-typegen-DzOPfsNj.mjs.map +0 -1
  1181. package/dist/device-flow-D2oCWvLJ.mjs +0 -466
  1182. package/dist/device-flow-D2oCWvLJ.mjs.map +0 -1
  1183. package/dist/dialect-helpers-BSbfaO3F.mjs +0 -202
  1184. package/dist/dialect-helpers-BSbfaO3F.mjs.map +0 -1
  1185. package/dist/direct-executor-Bfa5_ToE.mjs +0 -85
  1186. package/dist/direct-executor-Bfa5_ToE.mjs.map +0 -1
  1187. package/dist/dist-89xCrGqi.mjs +0 -810
  1188. package/dist/dist-89xCrGqi.mjs.map +0 -1
  1189. package/dist/email-console-Dzb6uGYa.mjs +0 -50
  1190. package/dist/email-console-Dzb6uGYa.mjs.map +0 -1
  1191. package/dist/enrich-BX0IDp4z.mjs +0 -194
  1192. package/dist/enrich-BX0IDp4z.mjs.map +0 -1
  1193. package/dist/error-DFrQjppn.mjs +0 -90
  1194. package/dist/error-DFrQjppn.mjs.map +0 -1
  1195. package/dist/errors-DsVoDUjJ.mjs +0 -427
  1196. package/dist/errors-DsVoDUjJ.mjs.map +0 -1
  1197. package/dist/escape-HmHTC1Is.mjs +0 -9
  1198. package/dist/escape-HmHTC1Is.mjs.map +0 -1
  1199. package/dist/field-defs-cache-BM4SIRqH.mjs +0 -77
  1200. package/dist/field-defs-cache-BM4SIRqH.mjs.map +0 -1
  1201. package/dist/focal-point-BeWFo6Xx.mjs +0 -23
  1202. package/dist/focal-point-BeWFo6Xx.mjs.map +0 -1
  1203. package/dist/fts-manager-Do1BlW2r.mjs +0 -413
  1204. package/dist/fts-manager-Do1BlW2r.mjs.map +0 -1
  1205. package/dist/hash-3JJPlHF2.mjs +0 -37
  1206. package/dist/hash-3JJPlHF2.mjs.map +0 -1
  1207. package/dist/hook-result-DCh2WUpe.d.mts +0 -31
  1208. package/dist/hook-result-DCh2WUpe.d.mts.map +0 -1
  1209. package/dist/hreflang-B6hbAuuO.d.mts +0 -48
  1210. package/dist/hreflang-B6hbAuuO.d.mts.map +0 -1
  1211. package/dist/hreflang-DQbPZliA.mjs +0 -102
  1212. package/dist/hreflang-DQbPZliA.mjs.map +0 -1
  1213. package/dist/identity-DksvEazf.mjs +0 -35
  1214. package/dist/identity-DksvEazf.mjs.map +0 -1
  1215. package/dist/import-CJpaBBBT.mjs +0 -2020
  1216. package/dist/import-CJpaBBBT.mjs.map +0 -1
  1217. package/dist/index-BJNMCWmu.d.mts +0 -6562
  1218. package/dist/index-BJNMCWmu.d.mts.map +0 -1
  1219. package/dist/index-Du8K7bWa.d.mts +0 -278
  1220. package/dist/index-Du8K7bWa.d.mts.map +0 -1
  1221. package/dist/init-lock-DJkX6Hto.mjs +0 -56
  1222. package/dist/init-lock-DJkX6Hto.mjs.map +0 -1
  1223. package/dist/load-CawHjTOH.mjs +0 -28
  1224. package/dist/load-CawHjTOH.mjs.map +0 -1
  1225. package/dist/loader-Z8vl7zTq.mjs +0 -966
  1226. package/dist/loader-Z8vl7zTq.mjs.map +0 -1
  1227. package/dist/manifest-builder-COtzuca2.mjs +0 -189
  1228. package/dist/manifest-builder-COtzuca2.mjs.map +0 -1
  1229. package/dist/manifest-schema-BNWwR8Vd.mjs +0 -301
  1230. package/dist/manifest-schema-BNWwR8Vd.mjs.map +0 -1
  1231. package/dist/media-BBm8Wg3f.mjs +0 -318
  1232. package/dist/media-BBm8Wg3f.mjs.map +0 -1
  1233. package/dist/media-BHjus86Y.mjs +0 -464
  1234. package/dist/media-BHjus86Y.mjs.map +0 -1
  1235. package/dist/media-allowlist-CoTBWoDp.mjs +0 -44
  1236. package/dist/media-allowlist-CoTBWoDp.mjs.map +0 -1
  1237. package/dist/media-folders-BGkATs8n.mjs +0 -210
  1238. package/dist/media-folders-BGkATs8n.mjs.map +0 -1
  1239. package/dist/media-upload-BCidR-EY.mjs +0 -147
  1240. package/dist/media-upload-BCidR-EY.mjs.map +0 -1
  1241. package/dist/media-url-DHoPr0hq.mjs +0 -26
  1242. package/dist/media-url-DHoPr0hq.mjs.map +0 -1
  1243. package/dist/media-usage-CdY5jhSR.mjs +0 -1833
  1244. package/dist/media-usage-CdY5jhSR.mjs.map +0 -1
  1245. package/dist/media-usage-activation-BgeMtK5C.mjs +0 -78
  1246. package/dist/media-usage-activation-BgeMtK5C.mjs.map +0 -1
  1247. package/dist/media-usage-work-CnGCdHxx.mjs +0 -152
  1248. package/dist/media-usage-work-CnGCdHxx.mjs.map +0 -1
  1249. package/dist/media-usage-work-D6D9sMCA.mjs +0 -586
  1250. package/dist/media-usage-work-D6D9sMCA.mjs.map +0 -1
  1251. package/dist/media-usage-write-fence-hjeD4u7s.mjs +0 -42
  1252. package/dist/media-usage-write-fence-hjeD4u7s.mjs.map +0 -1
  1253. package/dist/menus-6qSwTNxG.mjs +0 -4010
  1254. package/dist/menus-6qSwTNxG.mjs.map +0 -1
  1255. package/dist/menus-uvPLXMZf.mjs +0 -744
  1256. package/dist/menus-uvPLXMZf.mjs.map +0 -1
  1257. package/dist/mime-CUIG6x84.mjs +0 -36
  1258. package/dist/mime-CUIG6x84.mjs.map +0 -1
  1259. package/dist/mode-DN_WneRx.mjs +0 -23
  1260. package/dist/mode-DN_WneRx.mjs.map +0 -1
  1261. package/dist/node-sqlite-compat-BuJXIeMz.mjs +0 -46
  1262. package/dist/node-sqlite-compat-BuJXIeMz.mjs.map +0 -1
  1263. package/dist/normalize-C2xNjTSG.mjs +0 -191
  1264. package/dist/normalize-C2xNjTSG.mjs.map +0 -1
  1265. package/dist/oauth-authorization-Dj6Kwc21.mjs +0 -274
  1266. package/dist/oauth-authorization-Dj6Kwc21.mjs.map +0 -1
  1267. package/dist/oauth-clients-FD7I0J8m.mjs +0 -266
  1268. package/dist/oauth-clients-FD7I0J8m.mjs.map +0 -1
  1269. package/dist/oauth-state-store-DkmDOmHs.mjs +0 -50
  1270. package/dist/oauth-state-store-DkmDOmHs.mjs.map +0 -1
  1271. package/dist/oauth-user-lookup-CvIwGpYd.mjs +0 -26
  1272. package/dist/oauth-user-lookup-CvIwGpYd.mjs.map +0 -1
  1273. package/dist/object-cache-DVKnyOfy.mjs +0 -534
  1274. package/dist/object-cache-DVKnyOfy.mjs.map +0 -1
  1275. package/dist/options-BHPeIbBd.mjs +0 -117
  1276. package/dist/options-BHPeIbBd.mjs.map +0 -1
  1277. package/dist/options-CYb4y7hM.d.mts +0 -221
  1278. package/dist/options-CYb4y7hM.d.mts.map +0 -1
  1279. package/dist/parse-Ckpg-Qfp.mjs +0 -81
  1280. package/dist/parse-Ckpg-Qfp.mjs.map +0 -1
  1281. package/dist/passkey-config-O_lj3y0k.mjs +0 -46
  1282. package/dist/passkey-config-O_lj3y0k.mjs.map +0 -1
  1283. package/dist/patterns-D9iDO3j8.mjs +0 -145
  1284. package/dist/patterns-D9iDO3j8.mjs.map +0 -1
  1285. package/dist/placeholder-4X9BrRrp.d.mts +0 -306
  1286. package/dist/placeholder-4X9BrRrp.d.mts.map +0 -1
  1287. package/dist/policy-Dhtwntrt.mjs +0 -45
  1288. package/dist/policy-Dhtwntrt.mjs.map +0 -1
  1289. package/dist/portable-text-U85hOafW.mjs +0 -286
  1290. package/dist/portable-text-U85hOafW.mjs.map +0 -1
  1291. package/dist/preview-B_vJLvf8.mjs +0 -107
  1292. package/dist/preview-B_vJLvf8.mjs.map +0 -1
  1293. package/dist/protocol-JdD2YhY9.d.mts +0 -52
  1294. package/dist/protocol-JdD2YhY9.d.mts.map +0 -1
  1295. package/dist/public-url-CarhZJgf.mjs +0 -101
  1296. package/dist/public-url-CarhZJgf.mjs.map +0 -1
  1297. package/dist/query-BZKZcG5b.mjs +0 -881
  1298. package/dist/query-BZKZcG5b.mjs.map +0 -1
  1299. package/dist/query-BndaFxxp.mjs +0 -41
  1300. package/dist/query-BndaFxxp.mjs.map +0 -1
  1301. package/dist/rate-limit-BZmATC6W.mjs +0 -120
  1302. package/dist/rate-limit-BZmATC6W.mjs.map +0 -1
  1303. package/dist/redirect-CZkbozu9.mjs +0 -313
  1304. package/dist/redirect-CZkbozu9.mjs.map +0 -1
  1305. package/dist/redirect-CzqnLxK-.mjs +0 -17
  1306. package/dist/redirect-CzqnLxK-.mjs.map +0 -1
  1307. package/dist/redirects-BLNOWQTn.mjs +0 -1238
  1308. package/dist/redirects-BLNOWQTn.mjs.map +0 -1
  1309. package/dist/redirects-CqzNM0KM.mjs +0 -579
  1310. package/dist/redirects-CqzNM0KM.mjs.map +0 -1
  1311. package/dist/registry-AZAsRsor.mjs +0 -1179
  1312. package/dist/registry-AZAsRsor.mjs.map +0 -1
  1313. package/dist/relation-04DfKRTO.mjs +0 -334
  1314. package/dist/relation-04DfKRTO.mjs.map +0 -1
  1315. package/dist/relations-C4htk5sb.mjs +0 -309
  1316. package/dist/relations-C4htk5sb.mjs.map +0 -1
  1317. package/dist/relations-CcFwDJdJ.mjs +0 -403
  1318. package/dist/relations-CcFwDJdJ.mjs.map +0 -1
  1319. package/dist/relations-DnRK4YIT.d.mts +0 -3354
  1320. package/dist/relations-DnRK4YIT.d.mts.map +0 -1
  1321. package/dist/request-cache-DH9zdCOD.mjs +0 -104
  1322. package/dist/request-cache-DH9zdCOD.mjs.map +0 -1
  1323. package/dist/request-meta-DYxLlnmz.mjs +0 -140
  1324. package/dist/request-meta-DYxLlnmz.mjs.map +0 -1
  1325. package/dist/resolve-prZ3mP7l.mjs +0 -143
  1326. package/dist/resolve-prZ3mP7l.mjs.map +0 -1
  1327. package/dist/runner-BLIDKpmA.mjs +0 -4676
  1328. package/dist/runner-BLIDKpmA.mjs.map +0 -1
  1329. package/dist/runner-YKfIMnaF.d.mts +0 -67
  1330. package/dist/runner-YKfIMnaF.d.mts.map +0 -1
  1331. package/dist/schema-CGnBeLiW.mjs +0 -9
  1332. package/dist/schema-CGnBeLiW.mjs.map +0 -1
  1333. package/dist/schema-DYr-Vd-L.mjs +0 -420
  1334. package/dist/schema-DYr-Vd-L.mjs.map +0 -1
  1335. package/dist/scopes-BhWvBavj.mjs +0 -27
  1336. package/dist/scopes-BhWvBavj.mjs.map +0 -1
  1337. package/dist/search-C-qDk4kx.mjs +0 -439
  1338. package/dist/search-C-qDk4kx.mjs.map +0 -1
  1339. package/dist/secrets-rEtHt-6z.mjs +0 -330
  1340. package/dist/secrets-rEtHt-6z.mjs.map +0 -1
  1341. package/dist/sections-B_nYvlwn.mjs +0 -346
  1342. package/dist/sections-B_nYvlwn.mjs.map +0 -1
  1343. package/dist/seo-926NRIgt.mjs +0 -133
  1344. package/dist/seo-926NRIgt.mjs.map +0 -1
  1345. package/dist/seo-CVWkdv6x.mjs +0 -113
  1346. package/dist/seo-CVWkdv6x.mjs.map +0 -1
  1347. package/dist/service-CJl3ZAYs.mjs +0 -195
  1348. package/dist/service-CJl3ZAYs.mjs.map +0 -1
  1349. package/dist/session-user-BlMgqCHS.mjs +0 -51
  1350. package/dist/session-user-BlMgqCHS.mjs.map +0 -1
  1351. package/dist/settings--wobrkkC.mjs +0 -258
  1352. package/dist/settings--wobrkkC.mjs.map +0 -1
  1353. package/dist/settings-Cwm6o2jY.mjs +0 -51
  1354. package/dist/settings-Cwm6o2jY.mjs.map +0 -1
  1355. package/dist/setup-complete-DQbClIN2.mjs +0 -26
  1356. package/dist/setup-complete-DQbClIN2.mjs.map +0 -1
  1357. package/dist/setup-nonce-DZCFS2sn.mjs +0 -25
  1358. package/dist/setup-nonce-DZCFS2sn.mjs.map +0 -1
  1359. package/dist/single-flight-cache-BPuGPdcN.mjs +0 -104
  1360. package/dist/single-flight-cache-BPuGPdcN.mjs.map +0 -1
  1361. package/dist/site-url-BrxA_E9H.mjs +0 -16
  1362. package/dist/site-url-BrxA_E9H.mjs.map +0 -1
  1363. package/dist/slugify-B994zkXC.mjs +0 -17
  1364. package/dist/slugify-B994zkXC.mjs.map +0 -1
  1365. package/dist/snapshot--OCDTqdb.mjs +0 -216
  1366. package/dist/snapshot--OCDTqdb.mjs.map +0 -1
  1367. package/dist/ssrf-5sIM5jzl.mjs +0 -349
  1368. package/dist/ssrf-5sIM5jzl.mjs.map +0 -1
  1369. package/dist/state-BpFVsJZB.mjs +0 -136
  1370. package/dist/state-BpFVsJZB.mjs.map +0 -1
  1371. package/dist/status-B777-dXz.mjs +0 -30
  1372. package/dist/status-B777-dXz.mjs.map +0 -1
  1373. package/dist/target-BmR0iTwz.mjs +0 -27
  1374. package/dist/target-BmR0iTwz.mjs.map +0 -1
  1375. package/dist/taxonomies-DkAkMupr.mjs +0 -837
  1376. package/dist/taxonomies-DkAkMupr.mjs.map +0 -1
  1377. package/dist/taxonomies-Wfy_Lg12.mjs +0 -698
  1378. package/dist/taxonomies-Wfy_Lg12.mjs.map +0 -1
  1379. package/dist/taxonomy-tJepplLL.mjs +0 -484
  1380. package/dist/taxonomy-tJepplLL.mjs.map +0 -1
  1381. package/dist/tokens-BCO1oruF.mjs +0 -171
  1382. package/dist/tokens-BCO1oruF.mjs.map +0 -1
  1383. package/dist/transaction-0KOpOyMu.mjs +0 -29
  1384. package/dist/transaction-0KOpOyMu.mjs.map +0 -1
  1385. package/dist/transport-Dr3qtwXC.mjs +0 -136
  1386. package/dist/transport-Dr3qtwXC.mjs.map +0 -1
  1387. package/dist/transport-xh6YKW2G.d.mts +0 -42
  1388. package/dist/transport-xh6YKW2G.d.mts.map +0 -1
  1389. package/dist/trusted-proxy-BR5F1Otp.mjs +0 -51
  1390. package/dist/trusted-proxy-BR5F1Otp.mjs.map +0 -1
  1391. package/dist/types-3qNFPlci.mjs +0 -16
  1392. package/dist/types-3qNFPlci.mjs.map +0 -1
  1393. package/dist/types-75KIqzL9.mjs +0 -142
  1394. package/dist/types-75KIqzL9.mjs.map +0 -1
  1395. package/dist/types-B6GrPic4.d.mts +0 -1335
  1396. package/dist/types-B6GrPic4.d.mts.map +0 -1
  1397. package/dist/types-BuHW4xDE.d.mts +0 -259
  1398. package/dist/types-BuHW4xDE.d.mts.map +0 -1
  1399. package/dist/types-C00oyCZp.d.mts +0 -198
  1400. package/dist/types-C00oyCZp.d.mts.map +0 -1
  1401. package/dist/types-CDtkNSFQ.d.mts +0 -75
  1402. package/dist/types-CDtkNSFQ.d.mts.map +0 -1
  1403. package/dist/types-CPeXo1wF.d.mts +0 -124
  1404. package/dist/types-CPeXo1wF.d.mts.map +0 -1
  1405. package/dist/types-CQPWhPxE.mjs +0 -92
  1406. package/dist/types-CQPWhPxE.mjs.map +0 -1
  1407. package/dist/types-CXFkwEGC.d.mts +0 -198
  1408. package/dist/types-CXFkwEGC.d.mts.map +0 -1
  1409. package/dist/types-DM3vioBY.mjs +0 -18
  1410. package/dist/types-DM3vioBY.mjs.map +0 -1
  1411. package/dist/types-DczELMop.d.mts +0 -363
  1412. package/dist/types-DczELMop.d.mts.map +0 -1
  1413. package/dist/types-DfuTR6dL.mjs +0 -3
  1414. package/dist/types-FV23hEoW.d.mts +0 -743
  1415. package/dist/types-FV23hEoW.d.mts.map +0 -1
  1416. package/dist/types-xDMtUFnO.d.mts +0 -257
  1417. package/dist/types-xDMtUFnO.d.mts.map +0 -1
  1418. package/dist/upload-attempts-BsqoQ1fn.mjs +0 -27
  1419. package/dist/upload-attempts-BsqoQ1fn.mjs.map +0 -1
  1420. package/dist/url-pattern-D4c2czpJ.mjs +0 -33
  1421. package/dist/url-pattern-D4c2czpJ.mjs.map +0 -1
  1422. package/dist/user-BTZ40aq6.mjs +0 -171
  1423. package/dist/user-BTZ40aq6.mjs.map +0 -1
  1424. package/dist/utils-BKvNjjhY.mjs +0 -435
  1425. package/dist/utils-BKvNjjhY.mjs.map +0 -1
  1426. package/dist/validate-BpwoDOgt.mjs +0 -120
  1427. package/dist/validate-BpwoDOgt.mjs.map +0 -1
  1428. package/dist/validate-DE_LRwo9.mjs +0 -379
  1429. package/dist/validate-DE_LRwo9.mjs.map +0 -1
  1430. package/dist/validate-DUP27OYD.d.mts +0 -400
  1431. package/dist/validate-DUP27OYD.d.mts.map +0 -1
  1432. package/dist/validation-BMImFJ11.mjs +0 -153
  1433. package/dist/validation-BMImFJ11.mjs.map +0 -1
  1434. package/dist/version-Bii3suaO.mjs +0 -7
  1435. package/dist/version-Bii3suaO.mjs.map +0 -1
  1436. package/dist/widgets-D3gJ10xU.mjs +0 -122
  1437. package/dist/widgets-D3gJ10xU.mjs.map +0 -1
  1438. package/dist/wxr-taxonomies-B2Og_6rU.d.mts +0 -34
  1439. package/dist/wxr-taxonomies-B2Og_6rU.d.mts.map +0 -1
  1440. package/dist/wxr-taxonomies-Cxngsjwo.mjs +0 -406
  1441. package/dist/wxr-taxonomies-Cxngsjwo.mjs.map +0 -1
  1442. package/dist/zod-generator-BuYSQJB7.mjs +0 -331
  1443. package/dist/zod-generator-BuYSQJB7.mjs.map +0 -1
  1444. /package/dist/{api-tokens-BfYts-sq.mjs → api-tokens-DS1VzN7_.mjs} +0 -0
  1445. /package/dist/{ssrf-Dg3cIT-b.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-FV23hEoW.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-YKfIMnaF.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-BDQwg236.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-BLIDKpmA.mjs";
2
- import "../dialect-helpers-BSbfaO3F.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-JdD2YhY9.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-BLIDKpmA.mjs";
2
- import "../dialect-helpers-BSbfaO3F.mjs";
3
- import "../config-C3EBstHi.mjs";
4
- import "../identity-DksvEazf.mjs";
5
- import { t as createDirectMigrationExecutor } from "../direct-executor-Bfa5_ToE.mjs";
6
- import { n as requireMigrationEnvironment, t as createMigrationTarget } from "../target-BmR0iTwz.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-BDQwg236.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-JdD2YhY9.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-BLIDKpmA.mjs";
2
- import "../dialect-helpers-BSbfaO3F.mjs";
3
- import "../config-C3EBstHi.mjs";
4
- import "../identity-DksvEazf.mjs";
5
- import { t as createDirectMigrationExecutor } from "../direct-executor-Bfa5_ToE.mjs";
6
- import { n as requireMigrationEnvironment, t as createMigrationTarget } from "../target-BmR0iTwz.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-BDQwg236.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-JdD2YhY9.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-BLIDKpmA.mjs";
2
- import "../dialect-helpers-BSbfaO3F.mjs";
3
- import "../config-C3EBstHi.mjs";
4
- import "../identity-DksvEazf.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-Bfa5_ToE.mjs";
7
- import { t as createMigrationTarget } from "../target-BmR0iTwz.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-BDQwg236.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-BuJXIeMz.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"}