dineway 0.1.49 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/dist/activity-DUaz_w7p.mjs +79 -0
  2. package/dist/{activity-events-CwM7yxPW.mjs → activity-events-CJDvE2uc.mjs} +5 -113
  3. package/dist/actor-0QJ1Gbtf.mjs +37 -0
  4. package/dist/after-BfniwgIf.mjs +9 -0
  5. package/dist/{allowed-origins-CyGnbgBd.mjs → allowed-origins--OwHHiY8.mjs} +1 -1
  6. package/dist/api/route-utils.d.mts +9 -10
  7. package/dist/api/route-utils.mjs +16 -13
  8. package/dist/api/schemas/index.d.mts +2 -2
  9. package/dist/api/schemas/index.mjs +5 -4
  10. package/dist/{api-BMIxRIEN.mjs → api-B4PHIF4V.mjs} +93 -41
  11. package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-tbK_sORH.mjs} +6 -2
  12. package/dist/{apply-D_RlTYtC.mjs → apply-DjTqq6Ae.mjs} +117 -77
  13. package/dist/astro/image-endpoint.d.mts +7 -0
  14. package/dist/astro/image-endpoint.mjs +54 -0
  15. package/dist/astro/index.d.mts +34 -11
  16. package/dist/astro/index.mjs +163 -24
  17. package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
  18. package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
  19. package/dist/astro/middleware/auth.d.mts +8 -18
  20. package/dist/astro/middleware/auth.mjs +42 -24
  21. package/dist/astro/middleware/redirect.mjs +13 -4
  22. package/dist/astro/middleware/request-context.mjs +8 -5
  23. package/dist/astro/middleware/seed.d.mts +1 -1
  24. package/dist/astro/middleware/seed.mjs +2 -2
  25. package/dist/astro/middleware/setup.mjs +1 -1
  26. package/dist/astro/middleware.mjs +389 -206
  27. package/dist/astro/routes/admin.astro +6 -1
  28. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
  29. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
  30. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  31. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  32. package/dist/astro/routes/api/admin/briefing.mjs +21 -17
  33. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
  34. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
  35. package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
  36. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
  37. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +17 -14
  38. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +17 -14
  39. package/dist/astro/routes/api/admin/bylines/index.mjs +17 -14
  40. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +14 -12
  41. package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -5
  42. package/dist/astro/routes/api/admin/comments/bulk.mjs +11 -9
  43. package/dist/astro/routes/api/admin/comments/counts.mjs +6 -5
  44. package/dist/astro/routes/api/admin/comments/index.mjs +11 -9
  45. package/dist/astro/routes/api/admin/context/_id_/history.mjs +27 -24
  46. package/dist/astro/routes/api/admin/context/_id_/index.mjs +27 -24
  47. package/dist/astro/routes/api/admin/context/_id_/review.mjs +32 -28
  48. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +32 -28
  49. package/dist/astro/routes/api/admin/context/diff.mjs +31 -27
  50. package/dist/astro/routes/api/admin/context/index.mjs +32 -28
  51. package/dist/astro/routes/api/admin/context/stale.mjs +31 -27
  52. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +27 -24
  53. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +31 -27
  54. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +31 -27
  55. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +28 -25
  56. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  57. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  58. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  59. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -51
  60. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -51
  61. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +47 -43
  62. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -49
  63. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -48
  64. package/dist/astro/routes/api/admin/plugins/index.mjs +47 -43
  65. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  66. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +46 -42
  67. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +53 -48
  68. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +46 -42
  69. package/dist/astro/routes/api/admin/plugins/updates.mjs +46 -42
  70. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +5 -5
  71. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +32 -63
  72. package/dist/astro/routes/api/admin/review-requests/index.d.mts +2 -1
  73. package/dist/astro/routes/api/admin/review-requests/index.mjs +58 -10
  74. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +46 -42
  75. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  76. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +46 -42
  77. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
  78. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
  79. package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
  80. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
  81. package/dist/astro/routes/api/admin/users/index.mjs +7 -6
  82. package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
  83. package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
  84. package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
  85. package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
  86. package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
  87. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  88. package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
  89. package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
  90. package/dist/astro/routes/api/auth/me.mjs +9 -8
  91. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  92. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  93. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  94. package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
  95. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  96. package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
  97. package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
  98. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
  99. package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
  100. package/dist/astro/routes/api/auth/setup-token/index.mjs +5 -5
  101. package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
  102. package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
  103. package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
  104. package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
  105. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -13
  106. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
  107. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
  108. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  109. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -5
  110. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -5
  111. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -5
  112. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -10
  113. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +49 -20
  114. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -5
  115. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  116. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +67 -32
  117. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +16 -14
  118. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  119. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -5
  120. package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -9
  121. package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
  122. package/dist/astro/routes/api/content/_collection_/index.mjs +11 -9
  123. package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
  124. package/dist/astro/routes/api/dashboard.mjs +9 -8
  125. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  126. package/dist/astro/routes/api/health.mjs +1 -1
  127. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  128. package/dist/astro/routes/api/import/probe.mjs +22 -10
  129. package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
  130. package/dist/astro/routes/api/import/wordpress/execute.d.mts +18 -1
  131. package/dist/astro/routes/api/import/wordpress/execute.mjs +85 -37
  132. package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -1
  133. package/dist/astro/routes/api/import/wordpress/media.mjs +20 -14
  134. package/dist/astro/routes/api/import/wordpress/prepare.mjs +36 -32
  135. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +17 -1
  136. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +121 -100
  137. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  138. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +24 -12
  139. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +55 -2
  140. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +284 -55
  141. package/dist/astro/routes/api/manifest.mjs +14 -5
  142. package/dist/astro/routes/api/mcp.mjs +753 -170
  143. package/dist/astro/routes/api/media/_id_/confirm.mjs +38 -10
  144. package/dist/astro/routes/api/media/_id_.mjs +11 -7
  145. package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
  146. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  147. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  148. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  149. package/dist/astro/routes/api/media/upload-url.mjs +11 -10
  150. package/dist/astro/routes/api/media.mjs +28 -35
  151. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +32 -28
  152. package/dist/astro/routes/api/menus/_name_/items.mjs +32 -28
  153. package/dist/astro/routes/api/menus/_name_/reorder.mjs +32 -28
  154. package/dist/astro/routes/api/menus/_name_/translations.mjs +32 -28
  155. package/dist/astro/routes/api/menus/_name_.mjs +32 -28
  156. package/dist/astro/routes/api/menus/index.mjs +32 -28
  157. package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
  158. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  159. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  160. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  161. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  162. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  163. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  164. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  165. package/dist/astro/routes/api/openapi.json.mjs +4 -3
  166. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +46 -31
  167. package/dist/astro/routes/api/redirects/404s/index.mjs +11 -10
  168. package/dist/astro/routes/api/redirects/404s/summary.mjs +11 -10
  169. package/dist/astro/routes/api/redirects/_id_.mjs +33 -29
  170. package/dist/astro/routes/api/redirects/index.mjs +33 -29
  171. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  172. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
  173. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +48 -43
  174. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +48 -43
  175. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +48 -43
  176. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +48 -43
  177. package/dist/astro/routes/api/schema/collections/index.mjs +48 -43
  178. package/dist/astro/routes/api/schema/index.mjs +14 -15
  179. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +46 -42
  180. package/dist/astro/routes/api/schema/orphans/index.mjs +46 -42
  181. package/dist/astro/routes/api/search/enable.mjs +11 -10
  182. package/dist/astro/routes/api/search/index.mjs +10 -9
  183. package/dist/astro/routes/api/search/rebuild.mjs +11 -10
  184. package/dist/astro/routes/api/search/stats.mjs +6 -6
  185. package/dist/astro/routes/api/search/suggest.mjs +10 -9
  186. package/dist/astro/routes/api/sections/_slug_.mjs +32 -28
  187. package/dist/astro/routes/api/sections/index.mjs +32 -28
  188. package/dist/astro/routes/api/settings/email.mjs +4 -4
  189. package/dist/astro/routes/api/settings.mjs +32 -28
  190. package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
  191. package/dist/astro/routes/api/setup/admin.mjs +12 -11
  192. package/dist/astro/routes/api/setup/dev-bypass.mjs +31 -25
  193. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  194. package/dist/astro/routes/api/setup/index.mjs +29 -25
  195. package/dist/astro/routes/api/setup/status.mjs +3 -3
  196. package/dist/astro/routes/api/snapshot.mjs +8 -7
  197. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +35 -31
  198. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +35 -31
  199. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +35 -31
  200. package/dist/astro/routes/api/taxonomies/index.mjs +35 -31
  201. package/dist/astro/routes/api/themes/preview.mjs +5 -5
  202. package/dist/astro/routes/api/typegen.mjs +4 -4
  203. package/dist/astro/routes/api/well-known/auth.mjs +3 -3
  204. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
  205. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
  206. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +31 -27
  207. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +32 -28
  208. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +32 -28
  209. package/dist/astro/routes/api/widget-areas/_name_.mjs +29 -26
  210. package/dist/astro/routes/api/widget-areas/index.mjs +32 -28
  211. package/dist/astro/routes/api/widget-components.mjs +2 -2
  212. package/dist/astro/routes/robots.txt.mjs +8 -7
  213. package/dist/astro/routes/sitemap-_collection_.xml.mjs +23 -14
  214. package/dist/astro/routes/sitemap.xml.mjs +9 -8
  215. package/dist/astro/session-driver.d.mts +1 -1
  216. package/dist/astro/session-driver.mjs +2 -2
  217. package/dist/astro/types.d.mts +22 -13
  218. package/dist/{audit-BeNsSyfU.mjs → audit-B2pRxZ20.mjs} +1 -1
  219. package/dist/auth/providers/github.d.mts +1 -1
  220. package/dist/auth/providers/google.d.mts +1 -1
  221. package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-D71jourk.mjs} +1 -1
  222. package/dist/{authorize-BLO0m7fW.mjs → authorize-ZXPGPwKn.mjs} +1 -1
  223. package/dist/{briefing-CkTee1ex.mjs → briefing-0rf-su3-.mjs} +90 -28
  224. package/dist/{briefing-DJX6irto.mjs → briefing-kRhegBoF.mjs} +2 -1
  225. package/dist/bundle-CEcdUa1s.mjs +602 -0
  226. package/dist/{byline-BVC1lV6G.mjs → byline-7xR185Ly.mjs} +30 -62
  227. package/dist/{byline-fields-Cj39WhXC.mjs → byline-fields-BKzA0fJU.mjs} +1 -1
  228. package/dist/{byline-fields-uJlygdzM.d.mts → byline-fields-Ckeqd1OY.d.mts} +88 -35
  229. package/dist/{byline-fields-cNrLJVRs.mjs → byline-fields-WN7RQT4q.mjs} +10 -4
  230. package/dist/{byline-registry-4v6tXMNX.mjs → byline-registry-Ba54M74c.mjs} +2 -2
  231. package/dist/{bylines-LN9XISRo.mjs → bylines-C-EL6dh3.mjs} +9 -3
  232. package/dist/{bylines-DwokOFj6.mjs → bylines-CmZFCMr0.mjs} +5 -5
  233. package/dist/{cache-Bac05gBd.mjs → cache-DkVCKGio.mjs} +2 -2
  234. package/dist/{chunks-CuUt7K50.mjs → chunks-ChGNDY8r.mjs} +1 -1
  235. package/dist/cli/index.d.mts +29 -1
  236. package/dist/cli/index.mjs +1466 -1763
  237. package/dist/cli/plugin-kit.d.mts +75 -0
  238. package/dist/cli/plugin-kit.mjs +4 -0
  239. package/dist/client/external-auth-headers.d.mts +1 -1
  240. package/dist/client/index.d.mts +27 -52
  241. package/dist/client/index.mjs +34 -6
  242. package/dist/client-factory-BDD9azPJ.mjs +233 -0
  243. package/dist/{comment-Beue8-15.mjs → comment-DFALgsJD.mjs} +13 -3
  244. package/dist/comment-reaction-C37bf99u.mjs +58 -0
  245. package/dist/{comments-DcjFIfqX.mjs → comments-B3NwDBxl.mjs} +1 -1
  246. package/dist/{content-CBxYGWfL.mjs → content-DJcAYFhz.mjs} +51 -34
  247. package/dist/content-refresh-B4ZCmxgd.mjs +1576 -0
  248. package/dist/{context-Df1xVYyr.mjs → context-DnpXcp6Y.mjs} +2 -2
  249. package/dist/{context-CQVNZaR8.mjs → context-fSCYLL3c.mjs} +125 -53
  250. package/dist/{context-route-helpers-B9wj8Rmh.mjs → context-route-helpers-CI8XzcsK.mjs} +2 -1
  251. package/dist/{cron-DxCAU_Sn.mjs → cron-B1SL_lsb.mjs} +7 -3
  252. package/dist/{dashboard-B7ZUNuyF.mjs → dashboard-D0nj5oWg.mjs} +4 -4
  253. package/dist/db/index.d.mts +3 -3
  254. package/dist/db/index.mjs +1 -1
  255. package/dist/db/libsql.d.mts +1 -1
  256. package/dist/db/postgres.d.mts +1 -1
  257. package/dist/db/sqlite.d.mts +1 -1
  258. package/dist/{device-flow-BZVGftqi.mjs → device-flow-BJe6VEhP.mjs} +5 -5
  259. package/dist/{placeholder-d54Qr_7n.mjs → enrich-Ck9tfMqe.mjs} +36 -9
  260. package/dist/{error-DCSuUAZW.mjs → error-CSVaQNZy.mjs} +5 -0
  261. package/dist/{experimental-workflows-CSMffP6q.mjs → experimental-workflows-GVhUgzEs.mjs} +1 -1
  262. package/dist/field-defs-cache-DL-T2XVS.mjs +49 -0
  263. package/dist/forgeway-seo-client-G5ddhVHd.mjs +456 -0
  264. package/dist/{fts-manager-B5l_qwrA.mjs → fts-manager-ewTGohf4.mjs} +1 -1
  265. package/dist/{hitl-requests-7NlzVeUA.mjs → hitl-requests-DEFj8e6u.mjs} +2 -2
  266. package/dist/{hitl-route-helpers-k---_H3-.mjs → hitl-route-helpers-C23JHaWz.mjs} +5 -4
  267. package/dist/import-CXXL5pip.mjs +1354 -0
  268. package/dist/index-DcnOCD1e.d.mts +375 -0
  269. package/dist/index.d.mts +15 -16
  270. package/dist/index.mjs +85 -70
  271. package/dist/{jsonld-DZ67souc.d.mts → jsonld-DzKbhRZ4.d.mts} +8 -4
  272. package/dist/{load-D9OiGr2m.mjs → load-CFtJRT3c.mjs} +1 -1
  273. package/dist/{loader--GOYux8M.mjs → loader-aWkkc1_o.mjs} +117 -31
  274. package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-uA6pRFXi.mjs} +38 -1
  275. package/dist/mcp-reviewed-executor-Dn52L_yY.mjs +558 -0
  276. package/dist/media/image-endpoint.d.mts +32 -0
  277. package/dist/media/image-endpoint.mjs +111 -0
  278. package/dist/media/index.d.mts +27 -2
  279. package/dist/media/index.mjs +5 -3
  280. package/dist/media/local-runtime.d.mts +15 -11
  281. package/dist/media/local-runtime.mjs +9 -7
  282. package/dist/{media-CbKyYukG.mjs → media-CVMOoywq.mjs} +3 -1
  283. package/dist/{media-allowlist-BYxJIcTO.mjs → media-allowlist-zDNJmXCo.mjs} +1 -1
  284. package/dist/media-url-BdoLPvg8.mjs +20 -0
  285. package/dist/{menus-C7F0sCrC.mjs → menus-CCG2z5um.mjs} +80 -15
  286. package/dist/{menus-BZbXf-ej.mjs → menus-CmyIkRG5.mjs} +19 -5
  287. package/dist/{normalize-ByemhhfW.mjs → normalize-Cyt7JdF7.mjs} +8 -1
  288. package/dist/{oauth-authorization-DF-LCsIA.mjs → oauth-authorization-B9H7X85L.mjs} +5 -5
  289. package/dist/{oauth-clients-Du-V0fEm.mjs → oauth-clients-Dwl32-Uj.mjs} +2 -2
  290. package/dist/object-cache/memory.d.mts +14 -0
  291. package/dist/object-cache/memory.mjs +55 -0
  292. package/dist/object-cache-D51qOseS.mjs +419 -0
  293. package/dist/output-DhBe5_Pi.mjs +68 -0
  294. package/dist/page/index.d.mts +10 -3
  295. package/dist/page/index.mjs +2 -2
  296. package/dist/{parse-CneSgl7-.mjs → parse-i15EFSAE.mjs} +1 -1
  297. package/dist/{parser-DxfsARXL.mjs → parser-06LLLL4E.mjs} +151 -9
  298. package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-DkWkXfDI.d.mts} +12 -4
  299. package/dist/plugin-utils.d.mts +8 -9
  300. package/dist/plugins/adapt-sandbox-entry.d.mts +8 -9
  301. package/dist/plugins/adapt-sandbox-entry.mjs +13 -2
  302. package/dist/{plugins-DzfqRREq.mjs → plugins-CPA2PtfY.mjs} +919 -66
  303. package/dist/{transport-LSdZVXHF.mjs → portable-text-BASHceim.mjs} +1 -134
  304. package/dist/portable-text-E79LyjGo.d.mts +45 -0
  305. package/dist/{preview-C-3YTX2U.mjs → preview-BjedZm8G.mjs} +4 -3
  306. package/dist/process-cache-CCDgti7j.mjs +106 -0
  307. package/dist/project-env-DKibmuP8.mjs +95 -0
  308. package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-DC2JdWeO.d.mts} +1 -1
  309. package/dist/{public-url-B4xV4rGa.d.mts → public-url-DQJCnYi9.d.mts} +1 -1
  310. package/dist/publication-authorization-RKiHXKtq.mjs +985 -0
  311. package/dist/{query-CZ3TH_Uu.mjs → query-C2U5u5_p.mjs} +11 -6
  312. package/dist/{query-Ds0EnMFX.mjs → query-DEv5x6yB.mjs} +281 -76
  313. package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-DglsAJSw.mjs} +2 -2
  314. package/dist/{redirect-CEACczxo.mjs → redirect-ubhEqQCQ.mjs} +2 -2
  315. package/dist/{redirects-ocRJmQHP.mjs → redirects-Bhpm8bRe.mjs} +35 -19
  316. package/dist/{redirects-DYj1yPxs.mjs → redirects-xs2yahLq.mjs} +47 -24
  317. package/dist/{registry-D7HACema.mjs → registry-BYYyb2tF.mjs} +148 -81
  318. package/dist/request-context.d.mts +2 -0
  319. package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CFe1tW2M.mjs} +1 -1
  320. package/dist/review-payload-BysRWpxS.mjs +111 -0
  321. package/dist/{review-requests-BW2NxY-l.mjs → review-requests-CTWGnWUt.mjs} +1 -1
  322. package/dist/review-requests-D42VEP1l.mjs +142 -0
  323. package/dist/review-route-helpers-C31vO6SI.mjs +41 -0
  324. package/dist/runner-BgmttQmD.mjs +7444 -0
  325. package/dist/{runner-09sTqtv0.d.mts → runner-D6hzs8L9.d.mts} +1 -1
  326. package/dist/runtime.d.mts +9 -10
  327. package/dist/runtime.mjs +3 -3
  328. package/dist/schema-DUtnZxjZ.mjs +8 -0
  329. package/dist/{search-Gdrqj582.mjs → search-DUKgZUlm.mjs} +5 -3
  330. package/dist/{secrets-CeGpBFV2.mjs → secrets-ZV5rd8yV.mjs} +14 -11
  331. package/dist/{sections-BOjU13Y-.mjs → sections-DvFgsnda.mjs} +2 -2
  332. package/dist/seed/index.d.mts +2 -2
  333. package/dist/seed/index.mjs +21 -18
  334. package/dist/seo/index.d.mts +1 -1
  335. package/dist/seo/index.mjs +3 -12
  336. package/dist/{seo-5lJOtB5J.mjs → seo-BLszyJxd.mjs} +22 -4
  337. package/dist/{seo-CLj8lS7Q.mjs → seo-BU8MLCS9.mjs} +5 -2
  338. package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-GnCuL1ML.mjs} +11 -3
  339. package/dist/{service-jGlhrICs.mjs → service-FL3fB0Rx.mjs} +2 -2
  340. package/dist/session-user-Ct6GBLvn.mjs +22 -0
  341. package/dist/{settings-CUXOxzsT.mjs → settings-BECcAIRH.mjs} +28 -55
  342. package/dist/{settings-DlBsT2VS.mjs → settings-EzADu-dd.mjs} +2 -2
  343. package/dist/{setup-complete-BRrdPYjZ.mjs → setup-complete-Da0axZEE.mjs} +1 -1
  344. package/dist/{site-activity-DONFrMBJ.mjs → site-activity-h8smOlYI.mjs} +1 -1
  345. package/dist/{site-context-C8Az_P_I.mjs → site-context-B8T1kpUP.mjs} +337 -530
  346. package/dist/{site-url-DIMD68go.mjs → site-url-DJEid0ml.mjs} +1 -1
  347. package/dist/stable-hash-DshcXvRE.mjs +19 -0
  348. package/dist/status-NqWOSFAD.mjs +21 -0
  349. package/dist/storage/local.d.mts +1 -1
  350. package/dist/storage/local.mjs +1 -1
  351. package/dist/storage/s3.d.mts +1 -1
  352. package/dist/storage/s3.mjs +1 -1
  353. package/dist/{taxonomies-D9Sw4wWM.mjs → taxonomies-BiM9NtgW.mjs} +36 -29
  354. package/dist/taxonomies-DSnY5nOa.mjs +443 -0
  355. package/dist/{taxonomy-B169Nm6B.mjs → taxonomy-0k_vRVsD.mjs} +44 -9
  356. package/dist/transport-C46KHLMP.mjs +134 -0
  357. package/dist/types-A8fPOJnl.mjs +69 -0
  358. package/dist/types-BLQCz46p.d.mts +118 -0
  359. package/dist/{types-CwawBUTa.d.mts → types-B_FlxIIl.d.mts} +4 -1
  360. package/dist/{types-CSgR9nQB.mjs → types-ChxYDRvx.mjs} +1 -1
  361. package/dist/{types-GaCtZ1k9.d.mts → types-Cw0PeCT_.d.mts} +18 -0
  362. package/dist/types-DuQn1G7-.d.mts +2973 -0
  363. package/dist/{runtime-C4-2lSFg.d.mts → types-DwoUifGE.d.mts} +5668 -3000
  364. package/dist/{types-DRIKLmJI.d.mts → types-opjX_kz6.d.mts} +17 -2
  365. package/dist/ui/server-runtime.d.mts +13 -15
  366. package/dist/ui/server-runtime.mjs +24 -20
  367. package/dist/url-guoXQQcV.mjs +33 -0
  368. package/dist/{user-DTLoZs16.mjs → user-BH-n01y3.mjs} +2 -2
  369. package/dist/{utils-B8hBJ9Oz.mjs → utils-D1SrKGtP.mjs} +129 -7
  370. package/dist/{validate-DzjCdy6v.d.mts → validate-CbVFoJgc.d.mts} +65 -8
  371. package/dist/{validate-DWmPO6oj.mjs → validate-D1HL-oLR.mjs} +11 -6
  372. package/dist/version-C3iVRuaF.mjs +6 -0
  373. package/dist/{widgets-BpJ8EpPd.mjs → widgets-BZrLrNgS.mjs} +46 -43
  374. package/dist/{wordpress-slugs-DHNR9LpG.mjs → wordpress-slugs-C3PWcowq.mjs} +1 -1
  375. package/dist/{zod-generator-K91-g665.mjs → zod-generator-C7AsLpSB.mjs} +42 -14
  376. package/package.json +38 -8
  377. package/src/components/Block.astro +50 -0
  378. package/src/components/Comments.astro +143 -1
  379. package/src/components/DinewayHead.astro +19 -2
  380. package/src/components/DinewayImage.astro +66 -33
  381. package/src/components/DinewayMedia.astro +1 -2
  382. package/src/components/Image.astro +85 -40
  383. package/src/components/InlinePortableTextEditor.tsx +12 -2
  384. package/src/components/JsonLdScript.astro +9 -0
  385. package/src/components/LiveSearch.astro +40 -4
  386. package/src/components/index.ts +4 -0
  387. package/src/components/live-search-routing.ts +30 -0
  388. package/src/components/portable-text-text-align.ts +15 -0
  389. package/src/ui.ts +2 -0
  390. package/dist/entity-aliases-4y93Yjuc.mjs +0 -51
  391. package/dist/import-4YBXbDkI.mjs +0 -684
  392. package/dist/index-CZiWCQDp.d.mts +0 -227
  393. package/dist/review-requests-Qum4713s.mjs +0 -79
  394. package/dist/runner-DzIpHGND.mjs +0 -2836
  395. package/dist/schema-Bsi-VpYv.mjs +0 -8
  396. package/dist/taxonomies-CZ-_DitR.mjs +0 -327
  397. package/dist/types-CuJOqHfM.d.mts +0 -758
  398. package/dist/types-DSPGWjxO.d.mts +0 -1247
  399. package/dist/types-nP9vGUFq.d.mts +0 -56
  400. package/dist/version-C4gfn0PJ.mjs +0 -6
  401. /package/dist/{adapters-OQCImOL7.d.mts → adapters-BiRymx02.d.mts} +0 -0
  402. /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-Ypaly90d.mjs} +0 -0
  403. /package/dist/{challenge-store-DFxX0_15.mjs → challenge-store-D5pSY2S1.mjs} +0 -0
  404. /package/dist/{components--pg6zBvu.mjs → components-DImzlLhb.mjs} +0 -0
  405. /package/dist/{context-types-r8oFvyOq.mjs → context-types-eBuMDAg-.mjs} +0 -0
  406. /package/dist/{default-B6iaLvP7.mjs → default-D4Vygcy_.mjs} +0 -0
  407. /package/dist/{email-console-BOVqIYpB.mjs → email-console-Bp0r68iF.mjs} +0 -0
  408. /package/dist/{escape-BDgouFFY.mjs → escape-DN4Qmjsl.mjs} +0 -0
  409. /package/dist/{hash-BPmX6P8I.mjs → hash-mxxx2oPW.mjs} +0 -0
  410. /package/dist/{mime-CbKsKDCB.mjs → mime-C0vOHFm7.mjs} +0 -0
  411. /package/dist/{mode-CZqCF9dZ.mjs → mode-C8yZnIlR.mjs} +0 -0
  412. /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CndT35iw.mjs} +0 -0
  413. /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-CMehAaKs.mjs} +0 -0
  414. /package/dist/{options-LsPjZlqD.mjs → options-DQPTH5n0.mjs} +0 -0
  415. /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-NYukYGed.mjs} +0 -0
  416. /package/dist/{patterns-DKAX6oqN.mjs → patterns-CoqlXUvk.mjs} +0 -0
  417. /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-BtfrrzfD.mjs} +0 -0
  418. /package/dist/{public-url-B_m9IwdV.mjs → public-url-Cp6hyjVR.mjs} +0 -0
  419. /package/dist/{redirect-BjIBtDWY.mjs → redirect-DrbEmU9a.mjs} +0 -0
  420. /package/dist/{request-cache-ho99schz.mjs → request-cache-CBFjCwSt.mjs} +0 -0
  421. /package/dist/{resolve-DTuDyYKs.mjs → resolve-DE71WcL9.mjs} +0 -0
  422. /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-BtkKnvxQ.mjs} +0 -0
  423. /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-Ctzfyyp-.mjs} +0 -0
  424. /package/dist/{slugify-BqebcqBg.mjs → slugify-KSsVD_D3.mjs} +0 -0
  425. /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-FJqwQzj4.mjs} +0 -0
  426. /package/dist/{tokens-SLmgowfd.mjs → tokens-BDQU29Vd.mjs} +0 -0
  427. /package/dist/{transaction-CFLhEOuH.mjs → transaction-0LEAAy8R.mjs} +0 -0
  428. /package/dist/{transport-BnsNxh2l.d.mts → transport-D9pKAzFP.d.mts} +0 -0
  429. /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-Dm7Mxvt6.mjs} +0 -0
  430. /package/dist/{types-CJ8DkL0q.mjs → types-B7TDDFMG.mjs} +0 -0
  431. /package/dist/{types-Dryvv7LH.d.mts → types-g0zMtraY.d.mts} +0 -0
  432. /package/dist/{types-Cg276-3z.mjs → types-mVVgRPaU.mjs} +0 -0
  433. /package/dist/{types-DZpT-PnG.d.mts → types-wFu80FrO.d.mts} +0 -0
  434. /package/dist/{url-w7Mp5qAD.mjs → url-EMAguGVk.mjs} +0 -0
@@ -1,7 +1,8 @@
1
- import { t as OptionsRepository } from "./options-LsPjZlqD.mjs";
2
- import { t as RedirectRepository } from "./redirect-CEACczxo.mjs";
3
- import { a as validateDestinationParams, i as matchPattern, n as interpolateDestination, o as validatePattern, r as isPattern, t as compilePattern } from "./patterns-DKAX6oqN.mjs";
4
- import { i as invalidateRedirectCache } from "./cache-Bac05gBd.mjs";
1
+ import { t as OptionsRepository } from "./options-DQPTH5n0.mjs";
2
+ import { t as RedirectRepository } from "./redirect-ubhEqQCQ.mjs";
3
+ import { a as validateDestinationParams, i as matchPattern, n as interpolateDestination, o as validatePattern, r as isPattern, t as compilePattern } from "./patterns-CoqlXUvk.mjs";
4
+ import { i as invalidateRedirectCache } from "./cache-DkVCKGio.mjs";
5
+ import { n as isTerminalStatus } from "./status-NqWOSFAD.mjs";
5
6
 
6
7
  //#region src/redirects/loops.ts
7
8
  /**
@@ -176,7 +177,17 @@ async function handleRedirectList(db, params) {
176
177
  async function handleRedirectCreate(db, input) {
177
178
  try {
178
179
  const repo = new RedirectRepository(db);
179
- if (input.source === input.destination) return {
180
+ const type = input.type ?? 301;
181
+ const terminal = isTerminalStatus(type);
182
+ const destination = terminal ? "" : input.destination ?? "";
183
+ if (!terminal && !destination) return {
184
+ success: false,
185
+ error: {
186
+ code: "VALIDATION_ERROR",
187
+ message: "destination is required for redirect types"
188
+ }
189
+ };
190
+ if (!terminal && input.source === destination) return {
180
191
  success: false,
181
192
  error: {
182
193
  code: "VALIDATION_ERROR",
@@ -193,14 +204,16 @@ async function handleRedirectCreate(db, input) {
193
204
  message: `Invalid source pattern: ${patternError}`
194
205
  }
195
206
  };
196
- const destError = validateDestinationParams(input.source, input.destination);
197
- if (destError) return {
198
- success: false,
199
- error: {
200
- code: "VALIDATION_ERROR",
201
- message: destError
202
- }
203
- };
207
+ if (!terminal) {
208
+ const destError = validateDestinationParams(input.source, destination);
209
+ if (destError) return {
210
+ success: false,
211
+ error: {
212
+ code: "VALIDATION_ERROR",
213
+ message: destError
214
+ }
215
+ };
216
+ }
204
217
  }
205
218
  if (await repo.findBySource(input.source)) return {
206
219
  success: false,
@@ -209,14 +222,14 @@ async function handleRedirectCreate(db, input) {
209
222
  message: `A redirect from "${input.source}" already exists`
210
223
  }
211
224
  };
212
- if (input.enabled !== false) {
213
- const loopPath = wouldCreateLoop(input.source, input.destination, toEdges(await repo.findAllEnabled()));
225
+ if (!terminal && input.enabled !== false) {
226
+ const loopPath = wouldCreateLoop(input.source, destination, toEdges(await repo.findAllEnabled()));
214
227
  if (loopPath) return loopError(loopPath);
215
228
  }
216
229
  const redirect = await repo.create({
217
230
  source: input.source,
218
- destination: input.destination,
219
- type: input.type ?? 301,
231
+ destination,
232
+ type,
220
233
  isPattern: sourceIsPattern,
221
234
  enabled: input.enabled ?? true,
222
235
  groupName: input.groupName ?? null
@@ -279,8 +292,17 @@ async function handleRedirectUpdate(db, id, input) {
279
292
  }
280
293
  };
281
294
  const newSource = input.source ?? existing.source;
282
- const newDest = input.destination ?? existing.destination;
283
- if (newSource === newDest) return {
295
+ const newType = input.type ?? existing.type;
296
+ const terminal = isTerminalStatus(newType);
297
+ const newDest = terminal ? "" : input.destination ?? existing.destination;
298
+ if (!terminal && !newDest) return {
299
+ success: false,
300
+ error: {
301
+ code: "VALIDATION_ERROR",
302
+ message: "destination is required for redirect types"
303
+ }
304
+ };
305
+ if (!terminal && newSource === newDest) return {
284
306
  success: false,
285
307
  error: {
286
308
  code: "VALIDATION_ERROR",
@@ -307,7 +329,7 @@ async function handleRedirectUpdate(db, id, input) {
307
329
  }
308
330
  };
309
331
  }
310
- if (isPattern(newSource)) {
332
+ if (!terminal && isPattern(newSource)) {
311
333
  const destError = validateDestinationParams(newSource, newDest);
312
334
  if (destError) return {
313
335
  success: false,
@@ -317,14 +339,15 @@ async function handleRedirectUpdate(db, id, input) {
317
339
  }
318
340
  };
319
341
  }
320
- if ((input.enabled ?? existing.enabled) && (input.source !== void 0 || input.destination !== void 0 || input.enabled === true && !existing.enabled)) {
342
+ const newEnabled = input.enabled ?? existing.enabled;
343
+ if (!terminal && newEnabled && (input.source !== void 0 || input.destination !== void 0 || input.type !== void 0 || input.enabled === true && !existing.enabled)) {
321
344
  const loopPath = wouldCreateLoop(newSource, newDest, toEdges(await repo.findAllEnabled()), id);
322
345
  if (loopPath) return loopError(loopPath);
323
346
  }
324
347
  const updated = await repo.update(id, {
325
348
  source: input.source,
326
- destination: input.destination,
327
- type: input.type,
349
+ destination: terminal ? "" : input.destination,
350
+ type: newType,
328
351
  enabled: input.enabled,
329
352
  groupName: input.groupName
330
353
  });
@@ -390,7 +413,7 @@ function loopError(loopPath) {
390
413
  };
391
414
  }
392
415
  function toEdges(redirects) {
393
- return redirects.map((redirect) => ({
416
+ return redirects.filter((redirect) => !isTerminalStatus(redirect.type)).map((redirect) => ({
394
417
  id: redirect.id,
395
418
  source: redirect.source,
396
419
  destination: redirect.destination,
@@ -1,11 +1,13 @@
1
- import { a as __exportAll } from "./runner-DzIpHGND.mjs";
1
+ import { a as __exportAll } from "./runner-BgmttQmD.mjs";
2
2
  import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
3
3
  import { i as currentTimestamp, l as listTablesLike, n as columnExists, u as tableExists } from "./dialect-helpers-fk43GbDb.mjs";
4
4
  import { n as contentLocaleUpdatedIndexName, t as contentLocaleCreatedIndexName } from "./content-index-names-Bbu1FY1r.mjs";
5
- import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-CuUt7K50.mjs";
6
- import { t as withTransaction } from "./transaction-CFLhEOuH.mjs";
7
- import { a as RESERVED_COLLECTION_SLUGS, o as RESERVED_FIELD_SLUGS, r as FIELD_TYPE_TO_COLUMN } from "./types-CJ8DkL0q.mjs";
8
- import { t as FTSManager } from "./fts-manager-B5l_qwrA.mjs";
5
+ import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-ChGNDY8r.mjs";
6
+ import { t as withTransaction } from "./transaction-0LEAAy8R.mjs";
7
+ import { a as RESERVED_COLLECTION_SLUGS, o as RESERVED_FIELD_SLUGS, r as FIELD_TYPE_TO_COLUMN } from "./types-B7TDDFMG.mjs";
8
+ import { a as markContentMediaUsageCollectionStaleSafely, n as deleteContentMediaUsageCollection } from "./content-refresh-B4ZCmxgd.mjs";
9
+ import { t as FTSManager } from "./fts-manager-ewTGohf4.mjs";
10
+ import { t as buildStableHash } from "./stable-hash-DshcXvRE.mjs";
9
11
  import { sql } from "kysely";
10
12
  import { ulid } from "ulidx";
11
13
 
@@ -93,9 +95,17 @@ var SchemaRegistry = class {
93
95
  else fieldsByCollectionId.set(field.collectionId, [field]);
94
96
  }
95
97
  }
96
- return collections.map((collection) => ({
97
- ...collection,
98
- fields: fieldsByCollectionId.get(collection.id) ?? []
98
+ return Promise.all(collections.map(async (collection) => {
99
+ const fields = fieldsByCollectionId.get(collection.id) ?? [];
100
+ const schemaFingerprint = await buildStableHash({
101
+ collection,
102
+ fields
103
+ });
104
+ return {
105
+ ...collection,
106
+ fields,
107
+ schemaFingerprint
108
+ };
99
109
  }));
100
110
  }
101
111
  /**
@@ -112,9 +122,14 @@ var SchemaRegistry = class {
112
122
  const collection = await this.getCollection(slug);
113
123
  if (!collection) return null;
114
124
  const fields = await this.listFields(collection.id);
125
+ const schemaFingerprint = await buildStableHash({
126
+ collection,
127
+ fields
128
+ });
115
129
  return {
116
130
  ...collection,
117
- fields
131
+ fields,
132
+ schemaFingerprint
118
133
  };
119
134
  }
120
135
  /**
@@ -226,11 +241,19 @@ var SchemaRegistry = class {
226
241
  if (!options?.force) {
227
242
  if (await this.collectionHasContent(slug)) throw new SchemaError(`Collection "${slug}" has content. Use force: true to delete.`, "COLLECTION_HAS_CONTENT");
228
243
  }
229
- await withTransaction(this.db, async (trx) => {
230
- await new FTSManager(trx).dropFtsTable(slug);
231
- await this.dropContentTable(slug, trx);
232
- await trx.deleteFrom("_dineway_collections").where("id", "=", existing.id).execute();
233
- });
244
+ let contentTableDropped = false;
245
+ try {
246
+ await withTransaction(this.db, async (trx) => {
247
+ await new FTSManager(trx).dropFtsTable(slug);
248
+ await this.dropContentTable(slug, trx);
249
+ contentTableDropped = true;
250
+ await trx.deleteFrom("_dineway_collections").where("id", "=", existing.id).execute();
251
+ });
252
+ await deleteContentMediaUsageCollection(this.db, slug);
253
+ } catch (error) {
254
+ if (contentTableDropped && !await tableExists(this.db, this.getTableName(slug))) await deleteContentMediaUsageCollection(this.db, slug);
255
+ throw error;
256
+ }
234
257
  }
235
258
  /**
236
259
  * List fields for a collection
@@ -260,34 +283,43 @@ var SchemaRegistry = class {
260
283
  const columnType = FIELD_TYPE_TO_COLUMN[input.type];
261
284
  const maxSort = await this.db.selectFrom("_dineway_fields").where("collection_id", "=", collection.id).select((eb) => eb.fn.max("sort_order").as("max")).executeTakeFirst();
262
285
  const sortOrder = input.sortOrder ?? (maxSort?.max ?? -1) + 1;
263
- return withTransaction(this.db, async (trx) => {
264
- await trx.insertInto("_dineway_fields").values({
265
- id,
266
- collection_id: collection.id,
267
- slug: input.slug,
268
- label: input.label,
269
- type: input.type,
270
- column_type: columnType,
271
- required: input.required ? 1 : 0,
272
- unique: input.unique ? 1 : 0,
273
- default_value: input.defaultValue !== void 0 ? JSON.stringify(input.defaultValue) : null,
274
- validation: input.validation ? JSON.stringify(input.validation) : null,
275
- widget: input.widget ?? null,
276
- options: input.options ? JSON.stringify(input.options) : null,
277
- sort_order: sortOrder,
278
- searchable: input.searchable ? 1 : 0,
279
- translatable: input.translatable === false ? 0 : 1
280
- }).execute();
281
- await this.addColumn(collectionSlug, input.slug, input.type, {
282
- required: input.required,
283
- defaultValue: input.defaultValue
284
- }, trx);
285
- const fieldRow = await trx.selectFrom("_dineway_fields").where("collection_id", "=", collection.id).where("slug", "=", input.slug).selectAll().executeTakeFirst();
286
- if (!fieldRow) throw new SchemaError("Failed to create field", "CREATE_FAILED");
287
- const field = this.mapFieldRow(fieldRow);
288
- if (input.searchable) await this.syncSearchState(collectionSlug, trx);
289
- return field;
290
- });
286
+ let schemaMutated = false;
287
+ try {
288
+ const created = await withTransaction(this.db, async (trx) => {
289
+ await trx.insertInto("_dineway_fields").values({
290
+ id,
291
+ collection_id: collection.id,
292
+ slug: input.slug,
293
+ label: input.label,
294
+ type: input.type,
295
+ column_type: columnType,
296
+ required: input.required ? 1 : 0,
297
+ unique: input.unique ? 1 : 0,
298
+ default_value: input.defaultValue !== void 0 ? JSON.stringify(input.defaultValue) : null,
299
+ validation: input.validation ? JSON.stringify(input.validation) : null,
300
+ widget: input.widget ?? null,
301
+ options: input.options ? JSON.stringify(input.options) : null,
302
+ sort_order: sortOrder,
303
+ searchable: input.searchable ? 1 : 0,
304
+ translatable: input.translatable === false ? 0 : 1
305
+ }).execute();
306
+ schemaMutated = true;
307
+ await this.addColumn(collectionSlug, input.slug, input.type, {
308
+ required: input.required,
309
+ defaultValue: input.defaultValue
310
+ }, trx);
311
+ const fieldRow = await trx.selectFrom("_dineway_fields").where("collection_id", "=", collection.id).where("slug", "=", input.slug).selectAll().executeTakeFirst();
312
+ if (!fieldRow) throw new SchemaError("Failed to create field", "CREATE_FAILED");
313
+ const field = this.mapFieldRow(fieldRow);
314
+ if (input.searchable) await this.syncSearchState(collectionSlug, trx);
315
+ return field;
316
+ });
317
+ await markContentMediaUsageCollectionStaleSafely(this.db, collectionSlug, "CONTENT_USAGE_STALE");
318
+ return created;
319
+ } catch (error) {
320
+ if (schemaMutated) await markContentMediaUsageCollectionStaleSafely(this.db, collectionSlug, "CONTENT_USAGE_STALE");
321
+ throw error;
322
+ }
291
323
  }
292
324
  /**
293
325
  * Ensure the content table for an existing collection exists.
@@ -327,25 +359,44 @@ var SchemaRegistry = class {
327
359
  async updateField(collectionSlug, fieldSlug, input) {
328
360
  const field = await this.getField(collectionSlug, fieldSlug);
329
361
  if (!field) throw new SchemaError(`Field "${fieldSlug}" not found in collection "${collectionSlug}"`, "FIELD_NOT_FOUND");
330
- return withTransaction(this.db, async (trx) => {
331
- await trx.updateTable("_dineway_fields").set({
332
- label: input.label ?? field.label,
333
- required: input.required !== void 0 ? input.required ? 1 : 0 : field.required ? 1 : 0,
334
- unique: input.unique !== void 0 ? input.unique ? 1 : 0 : field.unique ? 1 : 0,
335
- searchable: input.searchable !== void 0 ? input.searchable ? 1 : 0 : field.searchable ? 1 : 0,
336
- translatable: input.translatable !== void 0 ? input.translatable ? 1 : 0 : field.translatable ? 1 : 0,
337
- default_value: input.defaultValue !== void 0 ? JSON.stringify(input.defaultValue) : field.defaultValue !== void 0 ? JSON.stringify(field.defaultValue) : null,
338
- validation: input.validation ? JSON.stringify(input.validation) : field.validation ? JSON.stringify(field.validation) : null,
339
- widget: input.widget ?? field.widget ?? null,
340
- options: input.options ? JSON.stringify(input.options) : field.options ? JSON.stringify(field.options) : null,
341
- sort_order: input.sortOrder ?? field.sortOrder
342
- }).where("id", "=", field.id).execute();
343
- const updatedRow = await trx.selectFrom("_dineway_fields").where("collection_id", "=", field.collectionId).where("slug", "=", fieldSlug).selectAll().executeTakeFirst();
344
- if (!updatedRow) throw new SchemaError("Failed to update field", "UPDATE_FAILED");
345
- const updated = this.mapFieldRow(updatedRow);
346
- if (input.searchable !== void 0 && input.searchable !== field.searchable) await this.syncSearchState(collectionSlug, trx);
347
- return updated;
348
- });
362
+ let nextType = field.type;
363
+ let nextColumnType = field.columnType;
364
+ if (input.type !== void 0 && input.type !== field.type) {
365
+ nextColumnType = FIELD_TYPE_TO_COLUMN[input.type];
366
+ if (nextColumnType !== field.columnType) throw new SchemaError(`Cannot change field "${fieldSlug}" in collection "${collectionSlug}" from type "${field.type}" to "${input.type}" because the underlying column type would change from ${field.columnType} to ${nextColumnType}`, "FIELD_TYPE_COLUMN_CHANGE");
367
+ nextType = input.type;
368
+ }
369
+ const nextValidation = input.validation === void 0 ? field.validation : input.validation;
370
+ let schemaMutated = false;
371
+ try {
372
+ const updatedField = await withTransaction(this.db, async (trx) => {
373
+ await trx.updateTable("_dineway_fields").set({
374
+ label: input.label ?? field.label,
375
+ type: nextType,
376
+ column_type: nextColumnType,
377
+ required: input.required !== void 0 ? input.required ? 1 : 0 : field.required ? 1 : 0,
378
+ unique: input.unique !== void 0 ? input.unique ? 1 : 0 : field.unique ? 1 : 0,
379
+ searchable: input.searchable !== void 0 ? input.searchable ? 1 : 0 : field.searchable ? 1 : 0,
380
+ translatable: input.translatable !== void 0 ? input.translatable ? 1 : 0 : field.translatable ? 1 : 0,
381
+ default_value: input.defaultValue !== void 0 ? JSON.stringify(input.defaultValue) : field.defaultValue !== void 0 ? JSON.stringify(field.defaultValue) : null,
382
+ validation: nextValidation ? JSON.stringify(nextValidation) : null,
383
+ widget: input.widget ?? field.widget ?? null,
384
+ options: input.options ? JSON.stringify(input.options) : field.options ? JSON.stringify(field.options) : null,
385
+ sort_order: input.sortOrder ?? field.sortOrder
386
+ }).where("id", "=", field.id).execute();
387
+ schemaMutated = true;
388
+ const updatedRow = await trx.selectFrom("_dineway_fields").where("collection_id", "=", field.collectionId).where("slug", "=", fieldSlug).selectAll().executeTakeFirst();
389
+ if (!updatedRow) throw new SchemaError("Failed to update field", "UPDATE_FAILED");
390
+ const updated = this.mapFieldRow(updatedRow);
391
+ if (input.searchable !== void 0 && input.searchable !== field.searchable) await this.syncSearchState(collectionSlug, trx);
392
+ return updated;
393
+ });
394
+ await markContentMediaUsageCollectionStaleSafely(this.db, collectionSlug, "CONTENT_USAGE_STALE");
395
+ return updatedField;
396
+ } catch (error) {
397
+ if (schemaMutated) await markContentMediaUsageCollectionStaleSafely(this.db, collectionSlug, "CONTENT_USAGE_STALE");
398
+ throw error;
399
+ }
349
400
  }
350
401
  /**
351
402
  * Synchronize an existing FTS index with the collection's current state.
@@ -371,11 +422,19 @@ var SchemaRegistry = class {
371
422
  async deleteField(collectionSlug, fieldSlug) {
372
423
  const field = await this.getField(collectionSlug, fieldSlug);
373
424
  if (!field) throw new SchemaError(`Field "${fieldSlug}" not found in collection "${collectionSlug}"`, "FIELD_NOT_FOUND");
374
- await withTransaction(this.db, async (trx) => {
375
- await trx.deleteFrom("_dineway_fields").where("id", "=", field.id).execute();
376
- if (field.searchable) await this.syncSearchState(collectionSlug, trx);
377
- await this.dropColumn(collectionSlug, fieldSlug, trx);
378
- });
425
+ let schemaMutated = false;
426
+ try {
427
+ await withTransaction(this.db, async (trx) => {
428
+ await trx.deleteFrom("_dineway_fields").where("id", "=", field.id).execute();
429
+ schemaMutated = true;
430
+ if (field.searchable) await this.syncSearchState(collectionSlug, trx);
431
+ await this.dropColumn(collectionSlug, fieldSlug, trx);
432
+ });
433
+ await markContentMediaUsageCollectionStaleSafely(this.db, collectionSlug, "CONTENT_USAGE_STALE");
434
+ } catch (error) {
435
+ if (schemaMutated) await markContentMediaUsageCollectionStaleSafely(this.db, collectionSlug, "CONTENT_USAGE_STALE");
436
+ throw error;
437
+ }
379
438
  }
380
439
  /**
381
440
  * Reorder fields
@@ -664,21 +723,29 @@ var SchemaRegistry = class {
664
723
  if (await this.getCollection(slug)) throw new SchemaError(`Collection "${slug}" is already registered`, "COLLECTION_EXISTS");
665
724
  const id = ulid();
666
725
  const label = options?.label || this.slugToLabel(slug);
667
- await this.db.insertInto("_dineway_collections").values({
668
- id,
669
- slug,
670
- label,
671
- label_singular: options?.labelSingular ?? null,
672
- description: options?.description ?? null,
673
- icon: null,
674
- supports: JSON.stringify([]),
675
- source: "discovered",
676
- has_seo: 0,
677
- url_pattern: null
678
- }).execute();
679
- const collection = await this.getCollection(slug);
680
- if (!collection) throw new SchemaError("Failed to register orphaned table", "REGISTER_FAILED");
681
- return collection;
726
+ let collectionRegistered = false;
727
+ try {
728
+ await this.db.insertInto("_dineway_collections").values({
729
+ id,
730
+ slug,
731
+ label,
732
+ label_singular: options?.labelSingular ?? null,
733
+ description: options?.description ?? null,
734
+ icon: null,
735
+ supports: JSON.stringify([]),
736
+ source: "discovered",
737
+ has_seo: 0,
738
+ url_pattern: null
739
+ }).execute();
740
+ collectionRegistered = true;
741
+ const collection = await this.getCollection(slug);
742
+ if (!collection) throw new SchemaError("Failed to register orphaned table", "REGISTER_FAILED");
743
+ await markContentMediaUsageCollectionStaleSafely(this.db, slug, "CONTENT_USAGE_STALE");
744
+ return collection;
745
+ } catch (error) {
746
+ if (collectionRegistered) await markContentMediaUsageCollectionStaleSafely(this.db, slug, "CONTENT_USAGE_STALE");
747
+ throw error;
748
+ }
682
749
  }
683
750
  /**
684
751
  * Convert slug to human-readable label
@@ -36,6 +36,8 @@ interface DinewayRequestContext {
36
36
  * playground sidecar flows.
37
37
  */
38
38
  db?: unknown;
39
+ /** Whether `db` points at an isolated session database instead of the site database. */
40
+ dbIsIsolated?: boolean;
39
41
  /** Optional query recorder for per-request instrumentation. */
40
42
  queryRecorder?: QueryRecorder;
41
43
  /** Optional metrics collector for Server-Timing request counters. */
@@ -1,4 +1,4 @@
1
- import { n as normalizeTrustedHeaders, t as getTrustedProxyHeaders } from "./trusted-proxy-BgIIcbsN.mjs";
1
+ import { n as normalizeTrustedHeaders, t as getTrustedProxyHeaders } from "./trusted-proxy-Dm7Mxvt6.mjs";
2
2
 
3
3
  //#region src/plugins/request-meta.ts
4
4
  /**
@@ -0,0 +1,111 @@
1
+ import { n as stableStringify, t as buildStableHash } from "./stable-hash-DshcXvRE.mjs";
2
+
3
+ //#region src/site-context/action-hash.ts
4
+ async function buildStableActionHash(value) {
5
+ return buildStableHash(value);
6
+ }
7
+
8
+ //#endregion
9
+ //#region src/site-context/review-payload.ts
10
+ var ReviewPayloadBuilder = class {
11
+ constructor(handlers) {
12
+ this.handlers = handlers;
13
+ }
14
+ async buildContentReviewPayload(input) {
15
+ const actionType = input.actionType ?? "content.publish";
16
+ const content = await this.loadContent(input.collection, input.id);
17
+ const compare = await this.loadCompare(input.collection, content.entryId);
18
+ const live = asRecord(compare.live);
19
+ const draft = asRecord(compare.draft) ?? content.data;
20
+ const hasChanges = typeof compare.hasChanges === "boolean" ? compare.hasChanges : stableStringify(live) !== stableStringify(draft);
21
+ const actionHash = await buildStableActionHash({
22
+ actionType,
23
+ collection: input.collection,
24
+ entryId: content.entryId,
25
+ liveRevisionId: content.liveRevisionId,
26
+ draftRevisionId: content.draftRevisionId,
27
+ reviewedRev: content.reviewedRev,
28
+ live,
29
+ draft
30
+ });
31
+ const scope = `content:${input.collection}:${content.entryId}`;
32
+ const summary = input.summary ?? `Review ${actionType} for ${input.collection}/${content.displayTitle ?? content.entryId}`;
33
+ return {
34
+ collection: input.collection,
35
+ entryId: content.entryId,
36
+ scope,
37
+ liveRevisionId: content.liveRevisionId,
38
+ draftRevisionId: content.draftRevisionId,
39
+ reviewedRev: content.reviewedRev,
40
+ actionType,
41
+ actionHash,
42
+ reviewPayload: {
43
+ kind: "content_review",
44
+ actionType,
45
+ summary,
46
+ target: {
47
+ collection: input.collection,
48
+ entryId: content.entryId,
49
+ scope,
50
+ liveRevisionId: content.liveRevisionId,
51
+ draftRevisionId: content.draftRevisionId,
52
+ reviewedRev: content.reviewedRev,
53
+ actionHash
54
+ },
55
+ content: {
56
+ id: content.entryId,
57
+ slug: content.slug,
58
+ status: content.status,
59
+ title: content.displayTitle,
60
+ updatedAt: content.updatedAt
61
+ },
62
+ diff: {
63
+ hasChanges,
64
+ live,
65
+ draft
66
+ }
67
+ }
68
+ };
69
+ }
70
+ async loadContent(collection, id) {
71
+ const result = await this.handlers.handleContentGet(collection, id);
72
+ if (!result.success) throw new Error(result.error?.message ?? `Content item not found: ${collection}/${id}`);
73
+ const payload = asRecord(result.data);
74
+ const item = asRecord(payload?.item);
75
+ if (!payload || !item) throw new Error("Content get response did not include an item");
76
+ const entryId = stringOrNull(item.id);
77
+ const reviewedRev = stringOrNull(payload._rev);
78
+ if (!entryId) throw new Error("Content item is missing id");
79
+ if (!reviewedRev) throw new Error("Content item is missing _rev for review binding");
80
+ const data = asRecord(item.data) ?? {};
81
+ const title = stringOrNull(data.title) ?? stringOrNull(item.title) ?? stringOrNull(item.slug);
82
+ return {
83
+ entryId,
84
+ reviewedRev,
85
+ liveRevisionId: stringOrNull(item.liveRevisionId),
86
+ draftRevisionId: stringOrNull(item.draftRevisionId),
87
+ slug: stringOrNull(item.slug),
88
+ status: stringOrNull(item.status),
89
+ updatedAt: stringOrNull(item.updatedAt),
90
+ displayTitle: title,
91
+ data
92
+ };
93
+ }
94
+ async loadCompare(collection, id) {
95
+ const result = await this.handlers.handleContentCompare(collection, id);
96
+ if (!result.success) throw new Error(result.error?.message ?? `Failed to compare content: ${collection}/${id}`);
97
+ return asRecord(result.data) ?? {};
98
+ }
99
+ };
100
+ function asRecord(value) {
101
+ return isRecord(value) ? value : null;
102
+ }
103
+ function isRecord(value) {
104
+ return typeof value === "object" && value !== null && !Array.isArray(value);
105
+ }
106
+ function stringOrNull(value) {
107
+ return typeof value === "string" && value.length > 0 ? value : null;
108
+ }
109
+
110
+ //#endregion
111
+ export { buildStableActionHash as n, ReviewPayloadBuilder as t };
@@ -1,4 +1,4 @@
1
- import { i as encodeCursor, r as decodeCursor } from "./types-CSgR9nQB.mjs";
1
+ import { i as encodeCursor, r as decodeCursor } from "./types-ChxYDRvx.mjs";
2
2
  import { ulid } from "ulidx";
3
3
 
4
4
  //#region src/database/repositories/review-requests.ts