dineway 0.1.48 → 0.2.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 (420) hide show
  1. package/dist/{activity-events-C9u37D5z.mjs → activity-events-y6eT8UW6.mjs} +6 -38
  2. package/dist/actor-CrObAPV0.mjs +37 -0
  3. package/dist/after-BfniwgIf.mjs +9 -0
  4. package/dist/{allowed-origins-DhipQNLb.mjs → allowed-origins-_oeyP6x-.mjs} +1 -1
  5. package/dist/api/route-utils.d.mts +10 -10
  6. package/dist/api/route-utils.mjs +17 -14
  7. package/dist/api/schemas/index.d.mts +2 -2
  8. package/dist/api/schemas/index.mjs +5 -4
  9. package/dist/{api-Eiy8_zVZ.mjs → api-ByrU2q-Z.mjs} +61 -37
  10. package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-CjVMQT-X.mjs} +6 -2
  11. package/dist/{apply-CX3no7XE.mjs → apply-bZswmZPm.mjs} +117 -77
  12. package/dist/astro/image-endpoint.d.mts +7 -0
  13. package/dist/astro/image-endpoint.mjs +54 -0
  14. package/dist/astro/index.d.mts +35 -11
  15. package/dist/astro/index.mjs +157 -23
  16. package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
  17. package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
  18. package/dist/astro/middleware/auth.d.mts +10 -10
  19. package/dist/astro/middleware/auth.mjs +42 -24
  20. package/dist/astro/middleware/redirect.mjs +14 -5
  21. package/dist/astro/middleware/request-context.mjs +9 -6
  22. package/dist/astro/middleware/seed.d.mts +1 -1
  23. package/dist/astro/middleware/seed.mjs +2 -2
  24. package/dist/astro/middleware/setup.mjs +1 -1
  25. package/dist/astro/middleware.mjs +334 -193
  26. package/dist/astro/routes/admin.astro +6 -1
  27. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
  28. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
  29. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  30. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  31. package/dist/astro/routes/api/admin/briefing.mjs +22 -18
  32. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
  33. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
  34. package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
  35. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
  36. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +18 -15
  37. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +18 -15
  38. package/dist/astro/routes/api/admin/bylines/index.mjs +18 -15
  39. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +15 -13
  40. package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -6
  41. package/dist/astro/routes/api/admin/comments/bulk.mjs +12 -10
  42. package/dist/astro/routes/api/admin/comments/counts.mjs +7 -6
  43. package/dist/astro/routes/api/admin/comments/index.mjs +12 -10
  44. package/dist/astro/routes/api/admin/context/_id_/history.mjs +27 -25
  45. package/dist/astro/routes/api/admin/context/_id_/index.mjs +27 -25
  46. package/dist/astro/routes/api/admin/context/_id_/review.mjs +32 -29
  47. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +32 -29
  48. package/dist/astro/routes/api/admin/context/diff.mjs +31 -28
  49. package/dist/astro/routes/api/admin/context/index.mjs +32 -29
  50. package/dist/astro/routes/api/admin/context/stale.mjs +31 -28
  51. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +27 -25
  52. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +31 -28
  53. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +31 -28
  54. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +28 -26
  55. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  56. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  57. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  58. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -52
  59. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -52
  60. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +48 -44
  61. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -50
  62. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -49
  63. package/dist/astro/routes/api/admin/plugins/index.mjs +48 -44
  64. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  65. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +47 -43
  66. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +53 -49
  67. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +47 -43
  68. package/dist/astro/routes/api/admin/plugins/updates.mjs +47 -43
  69. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +6 -6
  70. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +32 -28
  71. package/dist/astro/routes/api/admin/review-requests/index.mjs +11 -10
  72. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +47 -43
  73. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  74. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +47 -43
  75. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
  76. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
  77. package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
  78. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
  79. package/dist/astro/routes/api/admin/users/index.mjs +7 -6
  80. package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
  81. package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
  82. package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
  83. package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
  84. package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
  85. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  86. package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
  87. package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
  88. package/dist/astro/routes/api/auth/me.mjs +10 -9
  89. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  90. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  91. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  92. package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
  93. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  94. package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
  95. package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
  96. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
  97. package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
  98. package/dist/astro/routes/api/auth/setup-token/index.mjs +6 -6
  99. package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
  100. package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
  101. package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
  102. package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
  103. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +16 -14
  104. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
  105. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
  106. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  107. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -6
  108. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -6
  109. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -6
  110. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +12 -11
  111. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +11 -10
  112. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -6
  113. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  114. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +11 -10
  115. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +17 -15
  116. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  117. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -6
  118. package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -10
  119. package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
  120. package/dist/astro/routes/api/content/_collection_/index.mjs +11 -10
  121. package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
  122. package/dist/astro/routes/api/dashboard.mjs +10 -9
  123. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  124. package/dist/astro/routes/api/health.mjs +1 -1
  125. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  126. package/dist/astro/routes/api/import/probe.mjs +23 -11
  127. package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
  128. package/dist/astro/routes/api/import/wordpress/execute.d.mts +19 -1
  129. package/dist/astro/routes/api/import/wordpress/execute.mjs +85 -38
  130. package/dist/astro/routes/api/import/wordpress/media.d.mts +13 -1
  131. package/dist/astro/routes/api/import/wordpress/media.mjs +20 -14
  132. package/dist/astro/routes/api/import/wordpress/prepare.mjs +36 -33
  133. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +18 -1
  134. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +121 -101
  135. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  136. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -13
  137. package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
  138. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +56 -2
  139. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +284 -56
  140. package/dist/astro/routes/api/manifest.mjs +14 -5
  141. package/dist/astro/routes/api/mcp.mjs +266 -70
  142. package/dist/astro/routes/api/media/_id_/confirm.mjs +39 -11
  143. package/dist/astro/routes/api/media/_id_.mjs +11 -7
  144. package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
  145. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  146. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  147. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  148. package/dist/astro/routes/api/media/upload-url.mjs +12 -11
  149. package/dist/astro/routes/api/media.mjs +28 -35
  150. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +32 -29
  151. package/dist/astro/routes/api/menus/_name_/items.mjs +32 -29
  152. package/dist/astro/routes/api/menus/_name_/reorder.mjs +32 -29
  153. package/dist/astro/routes/api/menus/_name_/translations.mjs +32 -29
  154. package/dist/astro/routes/api/menus/_name_.mjs +32 -29
  155. package/dist/astro/routes/api/menus/index.mjs +32 -29
  156. package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
  157. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  158. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  159. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  160. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  161. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  162. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  163. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  164. package/dist/astro/routes/api/openapi.json.mjs +4 -3
  165. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +30 -30
  166. package/dist/astro/routes/api/redirects/404s/index.mjs +12 -11
  167. package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -11
  168. package/dist/astro/routes/api/redirects/_id_.mjs +33 -30
  169. package/dist/astro/routes/api/redirects/index.mjs +33 -30
  170. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  171. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
  172. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +48 -44
  173. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +48 -44
  174. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +48 -44
  175. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +48 -44
  176. package/dist/astro/routes/api/schema/collections/index.mjs +48 -44
  177. package/dist/astro/routes/api/schema/index.mjs +13 -14
  178. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +47 -43
  179. package/dist/astro/routes/api/schema/orphans/index.mjs +47 -43
  180. package/dist/astro/routes/api/search/enable.mjs +12 -11
  181. package/dist/astro/routes/api/search/index.mjs +11 -10
  182. package/dist/astro/routes/api/search/rebuild.mjs +12 -11
  183. package/dist/astro/routes/api/search/stats.mjs +7 -7
  184. package/dist/astro/routes/api/search/suggest.mjs +11 -10
  185. package/dist/astro/routes/api/sections/_slug_.mjs +32 -29
  186. package/dist/astro/routes/api/sections/index.mjs +32 -29
  187. package/dist/astro/routes/api/settings/email.mjs +4 -4
  188. package/dist/astro/routes/api/settings.mjs +32 -29
  189. package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
  190. package/dist/astro/routes/api/setup/admin.mjs +12 -11
  191. package/dist/astro/routes/api/setup/dev-bypass.mjs +32 -26
  192. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  193. package/dist/astro/routes/api/setup/index.mjs +30 -26
  194. package/dist/astro/routes/api/setup/status.mjs +3 -3
  195. package/dist/astro/routes/api/snapshot.mjs +9 -8
  196. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +35 -32
  197. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +35 -32
  198. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +35 -32
  199. package/dist/astro/routes/api/taxonomies/index.mjs +35 -32
  200. package/dist/astro/routes/api/themes/preview.mjs +6 -6
  201. package/dist/astro/routes/api/typegen.mjs +4 -4
  202. package/dist/astro/routes/api/well-known/auth.mjs +3 -3
  203. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
  204. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
  205. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +31 -28
  206. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +32 -29
  207. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +32 -29
  208. package/dist/astro/routes/api/widget-areas/_name_.mjs +29 -27
  209. package/dist/astro/routes/api/widget-areas/index.mjs +32 -29
  210. package/dist/astro/routes/api/widget-components.mjs +2 -2
  211. package/dist/astro/routes/robots.txt.mjs +9 -8
  212. package/dist/astro/routes/sitemap-_collection_.xml.mjs +24 -15
  213. package/dist/astro/routes/sitemap.xml.mjs +10 -9
  214. package/dist/astro/session-driver.d.mts +1 -1
  215. package/dist/astro/session-driver.mjs +3 -3
  216. package/dist/astro/types.d.mts +21 -13
  217. package/dist/{audit-D1cbG7xH.mjs → audit-ByVKIwWF.mjs} +1 -1
  218. package/dist/auth/providers/github.d.mts +1 -1
  219. package/dist/auth/providers/google.d.mts +1 -1
  220. package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-CqeUmQsv.mjs} +1 -1
  221. package/dist/{authorize-BLO0m7fW.mjs → authorize-CcBxcHtz.mjs} +1 -1
  222. package/dist/{briefing-CObXGOGz.mjs → briefing-BJaJI8dm.mjs} +2 -1
  223. package/dist/{briefing-gKWiGLt1.mjs → briefing-CawZ59CY.mjs} +90 -28
  224. package/dist/bundle-7C_DpkEq.mjs +602 -0
  225. package/dist/{byline-1ntDwv8c.mjs → byline-e51-fWRs.mjs} +30 -62
  226. package/dist/{byline-fields-BX7rWKNU.d.mts → byline-fields-CUvbslGc.d.mts} +49 -6
  227. package/dist/{byline-fields-C9_iaPaM.mjs → byline-fields-D-N5qVIG.mjs} +1 -1
  228. package/dist/{byline-fields-B-ZkoVft.mjs → byline-fields-DOJO16Gm.mjs} +3 -3
  229. package/dist/{byline-registry-CUSvkasJ.mjs → byline-registry-87nNnYl4.mjs} +2 -2
  230. package/dist/{bylines-bC15ZqAv.mjs → bylines-CMQNCNFh.mjs} +9 -3
  231. package/dist/{bylines-DtxChhN_.mjs → bylines-y4LO-dTj.mjs} +5 -5
  232. package/dist/{cache-DbKyr60Q.mjs → cache-C-FNTFYK.mjs} +2 -2
  233. package/dist/{chunks-C5zp2xir.mjs → chunks-CxBt-GxR.mjs} +1 -1
  234. package/dist/cli/index.mjs +820 -1276
  235. package/dist/client/external-auth-headers.d.mts +1 -1
  236. package/dist/client/index.d.mts +1 -1
  237. package/dist/client/index.mjs +2 -1
  238. package/dist/{comment-CXDOQ93N.mjs → comment-DlA4iChg.mjs} +13 -3
  239. package/dist/comment-reaction-DfFao1ST.mjs +58 -0
  240. package/dist/{comments-hK-rdzJ9.mjs → comments-DApFGMsP.mjs} +1 -1
  241. package/dist/{content-QaryevFO.mjs → content-Bh4BDjv8.mjs} +51 -34
  242. package/dist/content-refresh-CgutSUfO.mjs +1576 -0
  243. package/dist/{context-CoYb_fvK.mjs → context-C5W3G18y.mjs} +111 -50
  244. package/dist/{context-DBL1ib4v.mjs → context-CK4ym2Sf.mjs} +2 -2
  245. package/dist/{context-route-helpers-CYQVmbIm.mjs → context-route-helpers-MASyGgWf.mjs} +2 -1
  246. package/dist/{cron-DxCAU_Sn.mjs → cron-cKcNTix_.mjs} +7 -3
  247. package/dist/{dashboard-DNlqsknJ.mjs → dashboard-DQkVT7Ei.mjs} +4 -4
  248. package/dist/db/index.d.mts +3 -3
  249. package/dist/db/index.mjs +1 -1
  250. package/dist/db/libsql.d.mts +1 -1
  251. package/dist/db/postgres.d.mts +1 -1
  252. package/dist/db/sqlite.d.mts +1 -1
  253. package/dist/{device-flow-DygsFPGL.mjs → device-flow-BnqRH-T9.mjs} +5 -5
  254. package/dist/{placeholder-BDo81Is5.mjs → enrich-DIFIFA8O.mjs} +36 -9
  255. package/dist/{error-DCSuUAZW.mjs → error-CytFlgcd.mjs} +5 -0
  256. package/dist/field-defs-cache-DRNdhBJv.mjs +49 -0
  257. package/dist/{fts-manager-CIZlScg5.mjs → fts-manager-Crzypjqu.mjs} +1 -1
  258. package/dist/hitl-Hw1RmWOq.mjs +677 -0
  259. package/dist/{hitl-requests-CGQwOEiq.mjs → hitl-requests-B4Vbcmaq.mjs} +2 -2
  260. package/dist/{hitl-route-helpers-GSDLNPpN.mjs → hitl-route-helpers-hEVzvP8l.mjs} +5 -4
  261. package/dist/import-Bh9biJfx.mjs +1354 -0
  262. package/dist/{index-CwRuZ-u8.d.mts → index-D4y6NGiy.d.mts} +75 -3
  263. package/dist/index.d.mts +17 -16
  264. package/dist/index.mjs +81 -69
  265. package/dist/{jsonld-DZ67souc.d.mts → jsonld-Dq0gsnOH.d.mts} +8 -4
  266. package/dist/{load-xE01Jm0V.mjs → load-DmYeniXl.mjs} +1 -1
  267. package/dist/{loader-tg63WSY2.mjs → loader-CjWqjweO.mjs} +117 -31
  268. package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-BxVPYMJR.mjs} +34 -1
  269. package/dist/mcp-reviewed-executor-TwVbMzG6.mjs +555 -0
  270. package/dist/media/image-endpoint.d.mts +32 -0
  271. package/dist/media/image-endpoint.mjs +111 -0
  272. package/dist/media/index.d.mts +27 -2
  273. package/dist/media/index.mjs +5 -3
  274. package/dist/media/local-runtime.d.mts +16 -11
  275. package/dist/media/local-runtime.mjs +10 -8
  276. package/dist/{media-DUAjMfvR.mjs → media-DMj0grzC.mjs} +3 -1
  277. package/dist/{media-allowlist-BsXkT9RK.mjs → media-allowlist-BlVCSzHx.mjs} +1 -1
  278. package/dist/media-url-lEKSrpr9.mjs +20 -0
  279. package/dist/{menus-WpFRMXjz.mjs → menus-TaW1gKnk.mjs} +19 -5
  280. package/dist/{menus-DU1eZqw_.mjs → menus-xvsnVZXw.mjs} +80 -15
  281. package/dist/{normalize-DUnoXAa9.mjs → normalize-5ek_z7de.mjs} +8 -1
  282. package/dist/{oauth-authorization-D-1p52Je.mjs → oauth-authorization-DiaGvRVz.mjs} +5 -5
  283. package/dist/{oauth-clients-CzeMGyUU.mjs → oauth-clients-Dl9E8dEM.mjs} +2 -2
  284. package/dist/object-cache/memory.d.mts +14 -0
  285. package/dist/object-cache/memory.mjs +55 -0
  286. package/dist/object-cache-D51qOseS.mjs +419 -0
  287. package/dist/page/index.d.mts +4 -3
  288. package/dist/page/index.mjs +2 -2
  289. package/dist/{parse-CneSgl7-.mjs → parse-CbymENaR.mjs} +1 -1
  290. package/dist/{parser-DxfsARXL.mjs → parser-C1nYd-81.mjs} +151 -9
  291. package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-uvNRZBX9.d.mts} +12 -4
  292. package/dist/plugin-utils.d.mts +9 -9
  293. package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
  294. package/dist/plugins/adapt-sandbox-entry.mjs +11 -2
  295. package/dist/{plugins-C57YQi4l.mjs → plugins-BolVa-tl.mjs} +832 -64
  296. package/dist/{transport-LSdZVXHF.mjs → portable-text-dA_UlJwW.mjs} +1 -134
  297. package/dist/{preview-D5rvDhRt.mjs → preview-vSVg6fwG.mjs} +4 -3
  298. package/dist/process-cache-7xgAO9JY.mjs +106 -0
  299. package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-MD8zAbnH.d.mts} +1 -1
  300. package/dist/{public-url-DLUM5OOv.mjs → public-url-BEz_sM9n.mjs} +24 -18
  301. package/dist/{public-url-B5HaoGzj.d.mts → public-url-gsp3oUbu.d.mts} +5 -4
  302. package/dist/{query-BYc3oruA.mjs → query-CfRCdaL3.mjs} +281 -76
  303. package/dist/{query-DKEwzobh.mjs → query-jaAmw8E1.mjs} +11 -6
  304. package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-ZLdyWoZF.mjs} +2 -2
  305. package/dist/{redirect-C2zXRj3c.mjs → redirect-BAjt4Z6b.mjs} +2 -2
  306. package/dist/{redirects-YZo_znWG.mjs → redirects-BTdwpQtE.mjs} +47 -24
  307. package/dist/{redirects-ocRJmQHP.mjs → redirects-CA-xylPG.mjs} +19 -11
  308. package/dist/{registry-CTkbIDB9.mjs → registry-CtyVedcN.mjs} +130 -77
  309. package/dist/request-context.d.mts +2 -0
  310. package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CUypToDJ.mjs} +1 -1
  311. package/dist/{review-requests-C0un5kdV.mjs → review-requests-C9Ff11Vq.mjs} +1 -1
  312. package/dist/{review-requests-gGMyYYhy.mjs → review-requests-DUyEmtmG.mjs} +1 -1
  313. package/dist/{runner-D4FL9usy.d.mts → runner-1tC2tIRV.d.mts} +1 -1
  314. package/dist/runner-DB7CRfOF.mjs +6740 -0
  315. package/dist/{runtime-DEWQpZ-4.d.mts → runtime-BOeiQsCv.d.mts} +2028 -1564
  316. package/dist/runtime.d.mts +10 -10
  317. package/dist/runtime.mjs +4 -4
  318. package/dist/schema-DXdYj4R3.mjs +8 -0
  319. package/dist/{search-axGQ1KY3.mjs → search-DSaLgEFI.mjs} +5 -3
  320. package/dist/{secrets-062Izo8i.mjs → secrets-CDZo2k8L.mjs} +15 -12
  321. package/dist/{sections-OLKgXL10.mjs → sections-PVVXHGfp.mjs} +2 -2
  322. package/dist/seed/index.d.mts +2 -2
  323. package/dist/seed/index.mjs +22 -19
  324. package/dist/seo/index.d.mts +1 -1
  325. package/dist/seo/index.mjs +3 -12
  326. package/dist/{seo-Cd45Po8L.mjs → seo-CQG3GCHQ.mjs} +5 -2
  327. package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-C1EnikHB.mjs} +11 -3
  328. package/dist/{seo-5lJOtB5J.mjs → seo-qa7Dn0jK.mjs} +22 -4
  329. package/dist/{service-Bwad8s5h.mjs → service-DiN4ZuPp.mjs} +2 -2
  330. package/dist/session-user-CAKImna3.mjs +22 -0
  331. package/dist/{settings-yLjz_I4T.mjs → settings-BbqgHWpU.mjs} +28 -55
  332. package/dist/{settings-lAHjaUit.mjs → settings-i4VPP8bT.mjs} +2 -2
  333. package/dist/{setup-complete--PradA4R.mjs → setup-complete-B8fl-mjV.mjs} +1 -1
  334. package/dist/{site-activity-D7Xyropw.mjs → site-activity-Dy3FROs0.mjs} +1 -1
  335. package/dist/{site-context-DaN9Z91j.mjs → site-context-DQiL8Fl5.mjs} +23 -652
  336. package/dist/{site-url-DpGZo9Z6.mjs → site-url-BML3GQYm.mjs} +1 -1
  337. package/dist/status-DANd8ERo.mjs +21 -0
  338. package/dist/storage/local.d.mts +1 -1
  339. package/dist/storage/local.mjs +1 -1
  340. package/dist/storage/s3.d.mts +1 -1
  341. package/dist/storage/s3.mjs +1 -1
  342. package/dist/{taxonomies-uXVEoQso.mjs → taxonomies-9s-v03H-.mjs} +36 -29
  343. package/dist/taxonomies-DRiixp_E.mjs +443 -0
  344. package/dist/{taxonomy-CBmkmMuU.mjs → taxonomy-Dvsw6BOs.mjs} +44 -9
  345. package/dist/{tokens-CjSgb0AC.mjs → tokens-1RK1n6ED.mjs} +1 -1
  346. package/dist/transport-BNmCqLu7.mjs +134 -0
  347. package/dist/types-4garmdWa.mjs +66 -0
  348. package/dist/{types-DSPGWjxO.d.mts → types-C8XW6L19.d.mts} +225 -4
  349. package/dist/{types-GaCtZ1k9.d.mts → types-CDpH6MA4.d.mts} +18 -0
  350. package/dist/{types-DRIKLmJI.d.mts → types-C_ly5eTp.d.mts} +17 -2
  351. package/dist/types-DF7ZuGGk.d.mts +118 -0
  352. package/dist/types-DU0bU2Wu.d.mts +2392 -0
  353. package/dist/{types-CwawBUTa.d.mts → types-DW_-sFyz.d.mts} +2 -1
  354. package/dist/{types-DfuD0Afl.mjs → types-Dq1qT19x.mjs} +2 -2
  355. package/dist/ui/server-runtime.d.mts +15 -15
  356. package/dist/ui/server-runtime.mjs +25 -21
  357. package/dist/url-Cac7a9QZ.mjs +33 -0
  358. package/dist/{user-DtNmjNYt.mjs → user-BIZPzCb9.mjs} +2 -2
  359. package/dist/{utils-wv-zvC-Y.mjs → utils-CMDhr5Xd.mjs} +129 -7
  360. package/dist/{validate-BMs11tan.d.mts → validate-CZvb-BKB.d.mts} +10 -7
  361. package/dist/{validate-7SYRbz2f.mjs → validate-DNs0pTSc.mjs} +11 -6
  362. package/dist/version-BTvfRGc6.mjs +6 -0
  363. package/dist/{widgets-DR8EHuRO.mjs → widgets-f0ibZUIq.mjs} +46 -43
  364. package/dist/{wordpress-slugs-Dvhxh4cl.mjs → wordpress-slugs-BhHJX8XE.mjs} +1 -1
  365. package/dist/{zod-generator-BS9-umbk.mjs → zod-generator-B7TMjyFJ.mjs} +41 -13
  366. package/package.json +31 -8
  367. package/src/components/Block.astro +50 -0
  368. package/src/components/Comments.astro +143 -1
  369. package/src/components/DinewayHead.astro +19 -2
  370. package/src/components/DinewayImage.astro +66 -33
  371. package/src/components/DinewayMedia.astro +1 -2
  372. package/src/components/Image.astro +85 -40
  373. package/src/components/InlinePortableTextEditor.tsx +12 -2
  374. package/src/components/JsonLdScript.astro +9 -0
  375. package/src/components/LiveSearch.astro +40 -4
  376. package/src/components/index.ts +4 -0
  377. package/src/components/live-search-routing.ts +30 -0
  378. package/src/components/portable-text-text-align.ts +15 -0
  379. package/src/ui.ts +2 -0
  380. package/dist/entity-aliases-Egjmqc7I.mjs +0 -51
  381. package/dist/import-CvHY6sf5.mjs +0 -684
  382. package/dist/runner-B-tbV751.mjs +0 -2741
  383. package/dist/schema-B6zyB-Xn.mjs +0 -8
  384. package/dist/taxonomies-CNOGeC-3.mjs +0 -327
  385. package/dist/types-eu5UDgHN.d.mts +0 -652
  386. package/dist/version-xlzMSXF2.mjs +0 -6
  387. /package/dist/{adapters-OQCImOL7.d.mts → adapters-NVSs4UH7.d.mts} +0 -0
  388. /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-2r7OWi_I.mjs} +0 -0
  389. /package/dist/{base64-C1Q9yr0B.mjs → base64-F8-DUraK.mjs} +0 -0
  390. /package/dist/{challenge-store-CRSz-Xim.mjs → challenge-store-Bjlepa2E.mjs} +0 -0
  391. /package/dist/{components--pg6zBvu.mjs → components-Bclf98Be.mjs} +0 -0
  392. /package/dist/{context-types-DQh_XKkn.mjs → context-types-DqTo6C79.mjs} +0 -0
  393. /package/dist/{default-B6iaLvP7.mjs → default--K40jqm0.mjs} +0 -0
  394. /package/dist/{email-console-BOVqIYpB.mjs → email-console-ChgKFO8-.mjs} +0 -0
  395. /package/dist/{escape-BDgouFFY.mjs → escape-Bd4P_xKg.mjs} +0 -0
  396. /package/dist/{experimental-workflows-Dh4DUoD_.mjs → experimental-workflows-BMsUnIAw.mjs} +0 -0
  397. /package/dist/{mime-8pAB8-77.mjs → mime-CA7Lgovc.mjs} +0 -0
  398. /package/dist/{mode-CpyEz8pe.mjs → mode-C4CIyjtR.mjs} +0 -0
  399. /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CNoXafF7.mjs} +0 -0
  400. /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-Ygw4bNyt.mjs} +0 -0
  401. /package/dist/{options-BvJoSSJR.mjs → options-DQPTH5n0.mjs} +0 -0
  402. /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-BUwu8BA3.mjs} +0 -0
  403. /package/dist/{patterns-r-0n824Y.mjs → patterns-BhAvqO0S.mjs} +0 -0
  404. /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-D0w9dqjm.mjs} +0 -0
  405. /package/dist/{redirect-BjIBtDWY.mjs → redirect-wphRBv4y.mjs} +0 -0
  406. /package/dist/{request-cache-CYMbwZc6.mjs → request-cache-D9GQBxMP.mjs} +0 -0
  407. /package/dist/{resolve-DTuDyYKs.mjs → resolve-Cb6Dbz-C.mjs} +0 -0
  408. /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-CoyjILvW.mjs} +0 -0
  409. /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-C3mqXg4C.mjs} +0 -0
  410. /package/dist/{slugify-BzGxlOFx.mjs → slugify-KSsVD_D3.mjs} +0 -0
  411. /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-DWe8jwAp.mjs} +0 -0
  412. /package/dist/{transaction-CShMWIej.mjs → transaction-C2EOMTJA.mjs} +0 -0
  413. /package/dist/{transport-BnsNxh2l.d.mts → transport-CcJu3Co8.d.mts} +0 -0
  414. /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-DTXQ2IMv.mjs} +0 -0
  415. /package/dist/{types-BO8TGjS8.mjs → types-B3t5cxhU.mjs} +0 -0
  416. /package/dist/{types-nP9vGUFq.d.mts → types-C46EvNdc.d.mts} +0 -0
  417. /package/dist/{types-Cg276-3z.mjs → types-C5CVgwsV.mjs} +0 -0
  418. /package/dist/{types-DZpT-PnG.d.mts → types-POH8PQZh.d.mts} +0 -0
  419. /package/dist/{types-Dryvv7LH.d.mts → types-Rc3gQqqw.d.mts} +0 -0
  420. /package/dist/{url-w7Mp5qAD.mjs → url-CpyFDFpO.mjs} +0 -0
@@ -1,9 +1,10 @@
1
- import { a as __exportAll } from "./runner-B-tbV751.mjs";
1
+ import { a as __exportAll } from "./runner-DB7CRfOF.mjs";
2
2
  import { n as getI18nConfig, r as isI18nEnabled, t as getFallbackChain } from "./config-CVssduLe.mjs";
3
- import { i as encodeCursor } from "./types-DfuD0Afl.mjs";
4
3
  import { getRequestContext } from "./request-context.mjs";
5
- import { r as requestCached } from "./request-cache-CYMbwZc6.mjs";
6
- import { a as isMissingTableError, o as takeLiveCollectionMeta, t as CURSOR_RAW_VALUES } from "./loader-tg63WSY2.mjs";
4
+ import { i as encodeCursor } from "./types-Dq1qT19x.mjs";
5
+ import { o as isMissingTableError, s as takeLiveCollectionMeta, t as CURSOR_RAW_VALUES } from "./loader-CjWqjweO.mjs";
6
+ import { i as contentNamespaces, n as cachedQuery, u as invalidateSchemaObjectCache } from "./object-cache-D51qOseS.mjs";
7
+ import { r as requestCached } from "./request-cache-D9GQBxMP.mjs";
7
8
 
8
9
  //#region src/visual-editing/editable.ts
9
10
  /**
@@ -84,6 +85,8 @@ var query_exports = /* @__PURE__ */ __exportAll({
84
85
  resolveDinewayPath: () => resolveDinewayPath,
85
86
  sliceCollectionResult: () => sliceCollectionResult
86
87
  });
88
+ const FOLDED_TERMS = Symbol.for("dineway:foldedTerms");
89
+ const FOLDED_BYLINES = Symbol.for("dineway:foldedBylines");
87
90
  const COLLECTION_NAME = "_dineway";
88
91
  /** Symbol key for edit metadata on PT arrays — avoids collision with user data */
89
92
  const DINEWAY_EDIT = Symbol.for("__dineway");
@@ -125,6 +128,14 @@ function dataStr(data, key, fallback = "") {
125
128
  const val = data[key];
126
129
  return typeof val === "string" ? val : fallback;
127
130
  }
131
+ /** Safely read a date-like field from a Record */
132
+ function dataDate(data, key) {
133
+ const val = data[key];
134
+ if (val instanceof Date) return Number.isNaN(val.getTime()) ? void 0 : val;
135
+ if (typeof val !== "string" && typeof val !== "number") return void 0;
136
+ const date = new Date(val);
137
+ return Number.isNaN(date.getTime()) ? void 0 : date;
138
+ }
128
139
  /** Type guard for Record<string, unknown> */
129
140
  function isRecord(value) {
130
141
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -176,61 +187,105 @@ async function getDinewayCollection(type, filter) {
176
187
  const i18nConfig = getI18nConfig();
177
188
  const resolvedLocale = filter?.locale ?? ctx?.locale ?? (isI18nEnabled() ? i18nConfig.defaultLocale : void 0);
178
189
  const bucketed = bucketFilter(filter);
179
- const cached = await requestCached(collectionCacheKey(type, bucketed.fetchFilter, resolvedLocale), async () => {
180
- const { getLiveCollection } = await import("astro:content");
181
- const requestedFetchLimit = bucketed.fetchFilter?.limit;
182
- const liveLimit = requestedFetchLimit !== void 0 && requestedFetchLimit > 0 ? requestedFetchLimit + 1 : requestedFetchLimit;
183
- const liveFilter = {
184
- type,
185
- status: bucketed.fetchFilter?.status,
186
- limit: liveLimit,
187
- cursor: bucketed.fetchFilter?.cursor,
188
- where: bucketed.fetchFilter?.where,
189
- q: bucketed.fetchFilter?.q,
190
- searchColumns: bucketed.fetchFilter?.searchColumns,
191
- orderBy: bucketed.fetchFilter?.orderBy,
192
- locale: resolvedLocale
193
- };
194
- const result = await getLiveCollection(COLLECTION_NAME, liveFilter);
195
- const meta = takeLiveCollectionMeta(liveFilter);
196
- const { entries, error, cacheHint } = result;
197
- const rawCursor = Object.getOwnPropertyDescriptor(result, "nextCursor")?.value;
198
- const nextCursor = typeof rawCursor === "string" ? rawCursor : meta?.nextCursor;
199
- const rawTotal = Object.getOwnPropertyDescriptor(result, "total")?.value;
200
- const total = typeof rawTotal === "number" ? rawTotal : meta?.total;
201
- if (error) return {
202
- entries: [],
203
- error,
204
- cacheHint: {},
205
- total
206
- };
207
- const hasMore = requestedFetchLimit !== void 0 && requestedFetchLimit > 0 && entries.length > requestedFetchLimit;
208
- const pageEntries = hasMore ? entries.slice(0, requestedFetchLimit) : entries;
209
- const pageNextCursor = (hasMore ? encodeEntryCursor(pageEntries.at(-1), bucketed.fetchFilter?.orderBy) : void 0) ?? nextCursor;
210
- const isEditMode = ctx?.editMode ?? false;
211
- const entriesWithEdit = pageEntries.map((entry) => {
212
- const dbId = entryDatabaseId(entry);
213
- if (isEditMode) tagEditableFields(entryData(entry), type, dbId);
190
+ const cached = await requestCached(collectionCacheKey(type, bucketed.fetchFilter, resolvedLocale), () => loadCollectionCached(type, bucketed.fetchFilter, resolvedLocale));
191
+ return bucketed.requestedLimit === void 0 ? cached : sliceCollectionResult(cached, bucketed.requestedLimit, filter?.orderBy);
192
+ }
193
+ async function loadCollectionCached(type, filter, resolvedLocale) {
194
+ const snapshot = await cachedQuery({
195
+ namespace: contentNamespaces(type),
196
+ key: collectionCacheKey(type, filter, resolvedLocale),
197
+ load: async () => {
198
+ const result = await getDinewayCollectionUncached(type, filter, resolvedLocale);
199
+ if (result.error) return {
200
+ ok: false,
201
+ error: result.error,
202
+ cacheHint: result.cacheHint,
203
+ total: result.total
204
+ };
214
205
  return {
215
- ...entry,
216
- edit: isEditMode ? createEditable(type, dbId, entryEditOptions(entry)) : createNoop()
206
+ ok: true,
207
+ value: {
208
+ entries: result.entries.map(entrySnapshot),
209
+ nextCursor: result.nextCursor,
210
+ hasMore: result.hasMore,
211
+ total: result.total,
212
+ cacheHint: result.cacheHint
213
+ }
217
214
  };
218
- });
219
- await Promise.all([hydrateEntryBylines(type, entriesWithEdit), hydrateEntryTerms(type, entriesWithEdit, resolvedLocale)]);
215
+ },
216
+ cacheable: (snap) => snap.ok
217
+ });
218
+ if (!snapshot.ok) return {
219
+ entries: [],
220
+ error: snapshot.error,
221
+ cacheHint: snapshot.cacheHint,
222
+ total: snapshot.total
223
+ };
224
+ return {
225
+ entries: snapshot.value.entries.map((entry) => reviveEntry(entry)),
226
+ nextCursor: snapshot.value.nextCursor,
227
+ hasMore: snapshot.value.hasMore,
228
+ total: snapshot.value.total,
229
+ cacheHint: snapshot.value.cacheHint
230
+ };
231
+ }
232
+ async function getDinewayCollectionUncached(type, filter, resolvedLocale) {
233
+ const { getLiveCollection } = await import("astro:content");
234
+ const ctx = getRequestContext();
235
+ const requestedFetchLimit = filter?.limit;
236
+ const liveLimit = requestedFetchLimit !== void 0 && requestedFetchLimit > 0 ? requestedFetchLimit + 1 : requestedFetchLimit;
237
+ const pageParam = filter?.cursor !== void 0 ? { cursor: filter.cursor } : filter?.offset !== void 0 ? { offset: filter.offset } : {};
238
+ const liveFilter = {
239
+ type,
240
+ status: filter?.status,
241
+ limit: liveLimit,
242
+ ...pageParam,
243
+ where: filter?.where,
244
+ q: filter?.q,
245
+ searchColumns: filter?.searchColumns,
246
+ orderBy: filter?.orderBy,
247
+ locale: resolvedLocale
248
+ };
249
+ const result = await getLiveCollection(COLLECTION_NAME, liveFilter);
250
+ const meta = takeLiveCollectionMeta(liveFilter);
251
+ const { entries, error, cacheHint } = result;
252
+ const rawCursor = Object.getOwnPropertyDescriptor(result, "nextCursor")?.value;
253
+ const nextCursor = typeof rawCursor === "string" ? rawCursor : meta?.nextCursor;
254
+ const rawTotal = Object.getOwnPropertyDescriptor(result, "total")?.value;
255
+ const total = typeof rawTotal === "number" ? rawTotal : meta?.total;
256
+ if (error) return {
257
+ entries: [],
258
+ error,
259
+ cacheHint: {},
260
+ total
261
+ };
262
+ const hasMore = requestedFetchLimit !== void 0 && requestedFetchLimit > 0 && entries.length > requestedFetchLimit;
263
+ const pageEntries = hasMore ? entries.slice(0, requestedFetchLimit) : entries;
264
+ const pageNextCursor = (hasMore ? encodeEntryCursor(pageEntries.at(-1), filter?.orderBy) : void 0) ?? nextCursor;
265
+ const hasMoreResult = requestedFetchLimit !== void 0 && requestedFetchLimit > 0 ? hasMore : meta?.hasMore;
266
+ const isEditMode = ctx?.editMode ?? false;
267
+ const entriesWithEdit = pageEntries.map((entry) => {
268
+ const dbId = entryDatabaseId(entry);
269
+ if (isEditMode) tagEditableFields(entryData(entry), type, dbId);
220
270
  return {
221
- entries: entriesWithEdit,
222
- nextCursor: pageNextCursor,
223
- total,
224
- cacheHint: cacheHint ?? {}
271
+ ...entry,
272
+ edit: isEditMode ? createEditable(type, dbId, entryEditOptions(entry)) : createNoop()
225
273
  };
226
274
  });
227
- return bucketed.requestedLimit === void 0 ? cached : sliceCollectionResult(cached, bucketed.requestedLimit, filter?.orderBy);
275
+ await Promise.all([hydrateEntryBylines(type, entriesWithEdit), hydrateEntryTerms(type, entriesWithEdit, resolvedLocale)]);
276
+ return {
277
+ entries: entriesWithEdit,
278
+ nextCursor: pageNextCursor,
279
+ hasMore: hasMoreResult,
280
+ total,
281
+ cacheHint: cacheHint ?? {}
282
+ };
228
283
  }
229
284
  const BUCKET_LIMIT_THRESHOLD = 10;
230
285
  /** @internal exported for unit tests; not part of the public API. */
231
286
  function bucketFilter(filter) {
232
287
  const limit = filter?.limit;
233
- if (limit === void 0 || limit >= BUCKET_LIMIT_THRESHOLD || limit <= 0 || filter?.cursor !== void 0) return {
288
+ if (limit === void 0 || limit >= BUCKET_LIMIT_THRESHOLD || limit <= 0 || filter?.cursor !== void 0 || filter?.offset !== void 0) return {
234
289
  fetchFilter: filter,
235
290
  requestedLimit: void 0
236
291
  };
@@ -252,7 +307,8 @@ function sliceCollectionResult(cached, limit, orderBy) {
252
307
  return {
253
308
  ...cached,
254
309
  entries,
255
- nextCursor
310
+ nextCursor,
311
+ hasMore: true
256
312
  };
257
313
  }
258
314
  const ENTRY_DATA_KEY_MAP = {
@@ -292,6 +348,7 @@ function collectionCacheKey(type, filter, locale) {
292
348
  filter?.status ?? "",
293
349
  filter?.limit ?? "",
294
350
  filter?.cursor ?? "",
351
+ filter?.offset ?? "",
295
352
  filter?.where ? stableStringify(filter.where) : "",
296
353
  filter?.q ?? "",
297
354
  filter?.searchColumns ? JSON.stringify(filter.searchColumns) : "",
@@ -310,6 +367,36 @@ function stableOrder(value) {
310
367
  }
311
368
  return ordered;
312
369
  }
370
+ const CURSOR_RAW_FIELD = "__dinewayCursorRaw";
371
+ function entrySnapshot(entry) {
372
+ const data = entryData(entry);
373
+ const rawCursor = Reflect.get(data, CURSOR_RAW_VALUES);
374
+ return {
375
+ id: entry.id,
376
+ data: {
377
+ ...data,
378
+ [CURSOR_RAW_FIELD]: isRecord(rawCursor) ? rawCursor : {}
379
+ }
380
+ };
381
+ }
382
+ function reviveEntry(raw) {
383
+ const entry = isRecord(raw) ? raw : {};
384
+ const data = { ...isRecord(entry.data) ? entry.data : {} };
385
+ const rawCursorValue = data[CURSOR_RAW_FIELD];
386
+ const rawCursor = isRecord(rawCursorValue) ? rawCursorValue : {};
387
+ delete data[CURSOR_RAW_FIELD];
388
+ Object.defineProperty(data, CURSOR_RAW_VALUES, {
389
+ value: rawCursor,
390
+ enumerable: false,
391
+ configurable: false,
392
+ writable: false
393
+ });
394
+ return {
395
+ id: typeof entry.id === "string" ? entry.id : "",
396
+ data,
397
+ edit: createNoop()
398
+ };
399
+ }
313
400
  /**
314
401
  * Get a single entry by type and ID/slug
315
402
  *
@@ -351,8 +438,16 @@ async function getDinewayEntry(type, id, options) {
351
438
  function isVisible(entry) {
352
439
  const data = entryData(entry);
353
440
  const status = dataStr(data, "status");
354
- const scheduledAt = dataStr(data, "scheduledAt") || void 0;
355
- return status === "published" || !!(status === "scheduled" && scheduledAt && new Date(scheduledAt) <= /* @__PURE__ */ new Date());
441
+ const scheduledAt = dataDate(data, "scheduledAt");
442
+ const isPublished = status === "published";
443
+ const isScheduledAndReady = status === "scheduled" && scheduledAt !== void 0 && scheduledAt.getTime() <= Date.now();
444
+ return isPublished || !!isScheduledAndReady;
445
+ }
446
+ function isPendingScheduled(entry) {
447
+ const data = entryData(entry);
448
+ if (dataStr(data, "status") !== "scheduled") return false;
449
+ const scheduledAt = dataDate(data, "scheduledAt");
450
+ return scheduledAt !== void 0 && scheduledAt.getTime() > Date.now();
356
451
  }
357
452
  const localeChain = requestedLocale && isI18nEnabled() ? getFallbackChain(requestedLocale) : [requestedLocale];
358
453
  /** Return a successful EntryResult with runtime data hydrated */
@@ -419,30 +514,68 @@ async function getDinewayEntry(type, id, options) {
419
514
  cacheHint: {}
420
515
  };
421
516
  }
422
- for (let i = 0; i < localeChain.length; i++) {
423
- const locale = localeChain[i];
424
- const fallbackLocale = i > 0 ? locale : void 0;
425
- const { entry, error, cacheHint } = await getLiveEntry(COLLECTION_NAME, {
426
- type,
427
- id,
428
- locale
429
- });
430
- if (error) return {
517
+ let timeSensitive = false;
518
+ const resolveNormal = async () => {
519
+ for (let i = 0; i < localeChain.length; i++) {
520
+ const locale = localeChain[i];
521
+ const fallbackLocale = i > 0 ? locale : void 0;
522
+ const { entry, error, cacheHint } = await getLiveEntry(COLLECTION_NAME, {
523
+ type,
524
+ id,
525
+ locale
526
+ });
527
+ if (error) return {
528
+ entry: null,
529
+ error,
530
+ isPreview: false,
531
+ cacheHint: {}
532
+ };
533
+ if (entry && isVisible(entry)) return successResult(wrapEntry(entry), {
534
+ isPreview: false,
535
+ fallbackLocale,
536
+ cacheHint: cacheHint ?? {}
537
+ });
538
+ if (entry && isPendingScheduled(entry)) timeSensitive = true;
539
+ }
540
+ return {
431
541
  entry: null,
432
- error,
433
542
  isPreview: false,
434
543
  cacheHint: {}
435
544
  };
436
- if (entry && isVisible(entry)) return successResult(wrapEntry(entry), {
437
- isPreview: false,
438
- fallbackLocale,
439
- cacheHint: cacheHint ?? {}
440
- });
441
- }
442
- return {
545
+ };
546
+ const snapshot = await cachedQuery({
547
+ namespace: contentNamespaces(type),
548
+ key: `entry:${id}|loc=${requestedLocale ?? ""}`,
549
+ load: async () => {
550
+ const result = await resolveNormal();
551
+ if (result.error) return {
552
+ ok: false,
553
+ error: result.error,
554
+ cacheHint: result.cacheHint
555
+ };
556
+ return {
557
+ ok: true,
558
+ value: {
559
+ entry: result.entry ? entrySnapshot(result.entry) : null,
560
+ isPreview: result.isPreview,
561
+ fallbackLocale: result.fallbackLocale,
562
+ cacheHint: result.cacheHint
563
+ }
564
+ };
565
+ },
566
+ cacheable: (snap) => snap.ok && !timeSensitive
567
+ });
568
+ if (!snapshot.ok) return {
443
569
  entry: null,
570
+ error: snapshot.error,
444
571
  isPreview: false,
445
- cacheHint: {}
572
+ cacheHint: snapshot.cacheHint
573
+ };
574
+ return {
575
+ entry: snapshot.value.entry ? reviveEntry(snapshot.value.entry) : null,
576
+ isPreview: snapshot.value.isPreview,
577
+ fallbackLocale: snapshot.value.fallbackLocale,
578
+ cacheHint: snapshot.value.cacheHint
446
579
  };
447
580
  }
448
581
  /**
@@ -456,8 +589,47 @@ async function getDinewayEntry(type, id, options) {
456
589
  */
457
590
  async function hydrateEntryBylines(type, entries) {
458
591
  if (entries.length === 0) return;
592
+ if (entries.every((entry) => FOLDED_BYLINES in entryData(entry))) {
593
+ const parsed = entries.map((entry) => {
594
+ const data = entryData(entry);
595
+ const folded = Reflect.get(data, FOLDED_BYLINES);
596
+ return {
597
+ data,
598
+ credits: (Array.isArray(folded) ? folded : []).map((raw) => {
599
+ const byline = raw?.byline ?? {};
600
+ return {
601
+ roleLabel: raw?.roleLabel ?? null,
602
+ sortOrder: Number(raw?.sortOrder ?? 0),
603
+ source: "explicit",
604
+ byline: {
605
+ ...byline,
606
+ isGuest: Boolean(byline.isGuest),
607
+ customFields: {}
608
+ }
609
+ };
610
+ }).toSorted((a, b) => a.sortOrder - b.sortOrder)
611
+ };
612
+ });
613
+ let needsQueryPath = parsed.some((item) => item.credits.length === 0 && (dataStr(item.data, "authorId") !== "" || dataStr(item.data, "primaryBylineId") !== ""));
614
+ let hasCustomFields = false;
615
+ if (!needsQueryPath) try {
616
+ const { getDb } = await import("./loader-CjWqjweO.mjs").then((n) => n.i);
617
+ const db = await getDb();
618
+ const { getBylineFieldDefs } = await import("./field-defs-cache-DRNdhBJv.mjs").then((n) => n.t);
619
+ hasCustomFields = (await getBylineFieldDefs(db)).length > 0;
620
+ } catch (error) {
621
+ if (!isMissingTableError(error)) needsQueryPath = true;
622
+ }
623
+ if (!needsQueryPath && !hasCustomFields) {
624
+ for (const item of parsed) {
625
+ item.data.bylines = item.credits;
626
+ item.data.byline = item.credits[0]?.byline ?? null;
627
+ }
628
+ return;
629
+ }
630
+ }
459
631
  try {
460
- const { getBylinesForEntries } = await import("./bylines-DtxChhN_.mjs").then((n) => n.t);
632
+ const { getBylinesForEntries } = await import("./bylines-y4LO-dTj.mjs").then((n) => n.t);
461
633
  const refs = entries.map((entry) => {
462
634
  const data = entryData(entry);
463
635
  const id = dataStr(data, "id");
@@ -487,8 +659,40 @@ async function hydrateEntryBylines(type, entries) {
487
659
  }
488
660
  async function hydrateEntryTerms(type, entries, locale) {
489
661
  if (entries.length === 0) return;
662
+ if (entries.every((entry) => FOLDED_TERMS in entryData(entry))) {
663
+ const perEntry = [];
664
+ for (const entry of entries) {
665
+ const data = entryData(entry);
666
+ const folded = Reflect.get(data, FOLDED_TERMS);
667
+ const rows = Array.isArray(folded) ? folded : [];
668
+ const grouped = {};
669
+ for (const row of rows) {
670
+ const name = String(row?.name);
671
+ (grouped[name] ??= []).push({
672
+ id: row?.id,
673
+ name,
674
+ slug: row?.slug,
675
+ label: row?.label,
676
+ parentId: row?.parent_id ?? void 0,
677
+ children: [],
678
+ locale: row?.locale,
679
+ translationGroup: row?.translation_group
680
+ });
681
+ }
682
+ for (const [name, terms] of Object.entries(grouped)) grouped[name] = terms.toSorted((a, b) => String(a.label).localeCompare(String(b.label)));
683
+ data.terms = grouped;
684
+ const entryId = dataStr(data, "id");
685
+ if (entryId) perEntry.push({
686
+ entryId,
687
+ byTaxonomy: grouped
688
+ });
689
+ }
690
+ const { primeFoldedEntryTerms } = await import("./taxonomies-DRiixp_E.mjs").then((n) => n.u);
691
+ primeFoldedEntryTerms(type, perEntry, { locale });
692
+ return;
693
+ }
490
694
  try {
491
- const { getAllTermsForEntries } = await import("./taxonomies-CNOGeC-3.mjs").then((n) => n.l);
695
+ const { getAllTermsForEntries } = await import("./taxonomies-DRiixp_E.mjs").then((n) => n.u);
492
696
  const ids = entries.map((entry) => dataStr(entryData(entry), "id")).filter(Boolean);
493
697
  if (ids.length === 0) return;
494
698
  const termsMap = await getAllTermsForEntries(type, ids, { locale });
@@ -522,9 +726,9 @@ async function hydrateEntryTerms(type, entries, locale) {
522
726
  */
523
727
  async function getTranslations(type, id) {
524
728
  try {
525
- const db = (await import("./loader-tg63WSY2.mjs").then((n) => n.i)).getDb;
729
+ const db = (await import("./loader-CjWqjweO.mjs").then((n) => n.i)).getDb;
526
730
  const dbInstance = await db();
527
- const { ContentRepository } = await import("./content-QaryevFO.mjs").then((n) => n.n);
731
+ const { ContentRepository } = await import("./content-Bh4BDjv8.mjs").then((n) => n.n);
528
732
  const repo = new ContentRepository(dbInstance);
529
733
  const item = await repo.findByIdOrSlug(type, id);
530
734
  if (!item) return {
@@ -567,6 +771,7 @@ function patternToRegex(pattern) {
567
771
  let cachedUrlPatterns = null;
568
772
  function invalidateUrlPatternCache() {
569
773
  cachedUrlPatterns = null;
774
+ invalidateSchemaObjectCache();
570
775
  }
571
776
  /**
572
777
  * Resolve a URL path to a content entry by matching against collection URL patterns.
@@ -591,8 +796,8 @@ async function resolveDinewayPath(path) {
591
796
  const hasDbOverride = !!getRequestContext()?.db;
592
797
  let patterns = !hasDbOverride ? cachedUrlPatterns : null;
593
798
  if (!patterns) {
594
- const { getDb } = await import("./loader-tg63WSY2.mjs").then((n) => n.i);
595
- const { SchemaRegistry } = await import("./registry-CTkbIDB9.mjs").then((n) => n.r);
799
+ const { getDb } = await import("./loader-CjWqjweO.mjs").then((n) => n.i);
800
+ const { SchemaRegistry } = await import("./registry-CtyVedcN.mjs").then((n) => n.r);
596
801
  patterns = (await new SchemaRegistry(await getDb()).listCollections()).filter((collection) => collection.urlPattern).map((collection) => {
597
802
  const { regex, paramNames } = patternToRegex(collection.urlPattern);
598
803
  return {
@@ -1,6 +1,7 @@
1
- import { r as requestCached } from "./request-cache-CYMbwZc6.mjs";
2
- import { n as SchemaRegistry } from "./registry-CTkbIDB9.mjs";
3
- import { r as getDb } from "./loader-tg63WSY2.mjs";
1
+ import { r as getDb } from "./loader-CjWqjweO.mjs";
2
+ import { n as cachedQuery, t as CacheNamespace } from "./object-cache-D51qOseS.mjs";
3
+ import { r as requestCached } from "./request-cache-D9GQBxMP.mjs";
4
+ import { n as SchemaRegistry } from "./registry-CtyVedcN.mjs";
4
5
 
5
6
  //#region src/schema/query.ts
6
7
  /**
@@ -17,9 +18,13 @@ import { r as getDb } from "./loader-tg63WSY2.mjs";
17
18
  * ```
18
19
  */
19
20
  async function getCollectionInfo(slug) {
20
- return requestCached(`collection-info:${slug}`, async () => {
21
- return getCollectionInfoWithDb(await getDb(), slug);
22
- });
21
+ return requestCached(`collection-info:${slug}`, () => cachedQuery({
22
+ namespace: CacheNamespace.SCHEMA,
23
+ key: `collection-info:${slug}`,
24
+ load: async () => {
25
+ return getCollectionInfoWithDb(await getDb(), slug);
26
+ }
27
+ }));
23
28
  }
24
29
  /**
25
30
  * Get collection metadata with an explicit db handle.
@@ -1,5 +1,5 @@
1
- import { t as apiError } from "./error-DCSuUAZW.mjs";
2
- import { n as normalizeTrustedHeaders } from "./trusted-proxy-BgIIcbsN.mjs";
1
+ import { t as apiError } from "./error-CytFlgcd.mjs";
2
+ import { n as normalizeTrustedHeaders } from "./trusted-proxy-DTXQ2IMv.mjs";
3
3
  import { sql } from "kysely";
4
4
 
5
5
  //#region src/auth/rate-limit.ts
@@ -1,6 +1,6 @@
1
1
  import { a as currentTimestampValue } from "./dialect-helpers-fk43GbDb.mjs";
2
- import { i as encodeCursor, r as decodeCursor } from "./types-DfuD0Afl.mjs";
3
- import { i as matchPattern, n as interpolateDestination, r as isPattern, t as compilePattern } from "./patterns-r-0n824Y.mjs";
2
+ import { i as encodeCursor, r as decodeCursor } from "./types-Dq1qT19x.mjs";
3
+ import { i as matchPattern, n as interpolateDestination, r as isPattern, t as compilePattern } from "./patterns-BhAvqO0S.mjs";
4
4
  import { sql } from "kysely";
5
5
  import { ulid } from "ulidx";
6
6
 
@@ -1,7 +1,8 @@
1
- import { t as OptionsRepository } from "./options-BvJoSSJR.mjs";
2
- import { t as RedirectRepository } from "./redirect-C2zXRj3c.mjs";
3
- import { a as validateDestinationParams, i as matchPattern, n as interpolateDestination, o as validatePattern, r as isPattern, t as compilePattern } from "./patterns-r-0n824Y.mjs";
4
- import { i as invalidateRedirectCache } from "./cache-DbKyr60Q.mjs";
1
+ import { t as OptionsRepository } from "./options-DQPTH5n0.mjs";
2
+ import { t as RedirectRepository } from "./redirect-BAjt4Z6b.mjs";
3
+ import { a as validateDestinationParams, i as matchPattern, n as interpolateDestination, o as validatePattern, r as isPattern, t as compilePattern } from "./patterns-BhAvqO0S.mjs";
4
+ import { i as invalidateRedirectCache } from "./cache-C-FNTFYK.mjs";
5
+ import { n as isTerminalStatus } from "./status-DANd8ERo.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,