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
@@ -0,0 +1,111 @@
1
+ import { t as INTERNAL_MEDIA_PREFIX } from "../normalize-Cyt7JdF7.mjs";
2
+
3
+ //#region src/media/image-endpoint.ts
4
+ /**
5
+ * Portable helpers shared by image-endpoint modules.
6
+ *
7
+ * Dineway wraps Astro's image endpoint so source bytes for Dineway media can be
8
+ * read directly from the storage adapter instead of fetched over HTTP.
9
+ */
10
+ const ALLOWED_TRANSFORM_FORMATS = [
11
+ "webp",
12
+ "avif",
13
+ "jpeg",
14
+ "png"
15
+ ];
16
+ const DEFAULT_TRANSFORM_FORMAT = "webp";
17
+ const MAX_TRANSFORM_DIMENSION = 4e3;
18
+ const IMMUTABLE_IMAGE_CACHE = "public, max-age=31536000, immutable";
19
+ const SAFE_INLINE_IMAGE_TYPES = new Set([
20
+ "image/jpeg",
21
+ "image/png",
22
+ "image/gif",
23
+ "image/webp",
24
+ "image/avif",
25
+ "image/x-icon"
26
+ ]);
27
+ function originalMediaHeaders(contentType) {
28
+ return {
29
+ "Content-Type": contentType,
30
+ "Cache-Control": IMMUTABLE_IMAGE_CACHE,
31
+ "X-Content-Type-Options": "nosniff",
32
+ "Content-Security-Policy": "sandbox; default-src 'none'; img-src 'self'; style-src 'unsafe-inline'",
33
+ "Content-Disposition": SAFE_INLINE_IMAGE_TYPES.has(contentType) ? "inline" : "attachment"
34
+ };
35
+ }
36
+ const SAFE_STORAGE_KEY_SEGMENT = /^[A-Za-z0-9._-]+$/;
37
+ const DECIMAL_DIGITS = /^\d+$/;
38
+ function isSafeTransformKey(key) {
39
+ const segments = key.split("/");
40
+ return segments.length > 0 && segments.every((segment) => segment !== "" && segment !== "." && segment !== ".." && SAFE_STORAGE_KEY_SEGMENT.test(segment));
41
+ }
42
+ function matchInternalMediaKey(href) {
43
+ if (!href) return null;
44
+ let pathname;
45
+ try {
46
+ pathname = new URL(href, "http://localhost").pathname;
47
+ } catch {
48
+ return null;
49
+ }
50
+ if (!pathname.startsWith(INTERNAL_MEDIA_PREFIX)) return null;
51
+ const key = pathname.slice(INTERNAL_MEDIA_PREFIX.length);
52
+ if (!key || !isSafeTransformKey(key)) return null;
53
+ return key;
54
+ }
55
+ function isTransformFormat(value) {
56
+ return ALLOWED_TRANSFORM_FORMATS.includes(value);
57
+ }
58
+ function parseTransformParams(params) {
59
+ const width = parseDimension(params.get("w"));
60
+ if (width === null) return {
61
+ ok: false,
62
+ message: "Invalid 'w' (width)"
63
+ };
64
+ if (width === void 0) return {
65
+ ok: false,
66
+ message: "Missing 'w' (width)"
67
+ };
68
+ const height = parseDimension(params.get("h"));
69
+ if (height === null) return {
70
+ ok: false,
71
+ message: "Invalid 'h' (height)"
72
+ };
73
+ const formatRaw = params.get("f");
74
+ let format = DEFAULT_TRANSFORM_FORMAT;
75
+ if (formatRaw !== null) {
76
+ if (!isTransformFormat(formatRaw)) return {
77
+ ok: false,
78
+ message: `Unsupported 'f' (format): ${formatRaw}`
79
+ };
80
+ format = formatRaw;
81
+ }
82
+ const qualityRaw = params.get("q");
83
+ let quality;
84
+ if (qualityRaw !== null) {
85
+ const parsedQuality = Number(qualityRaw);
86
+ if (!Number.isInteger(parsedQuality) || parsedQuality < 1 || parsedQuality > 100) return {
87
+ ok: false,
88
+ message: "Invalid 'q' (quality), expected 1-100"
89
+ };
90
+ quality = parsedQuality;
91
+ }
92
+ return {
93
+ ok: true,
94
+ options: {
95
+ width,
96
+ height,
97
+ format,
98
+ quality
99
+ }
100
+ };
101
+ }
102
+ function parseDimension(raw) {
103
+ if (raw === null) return void 0;
104
+ if (!DECIMAL_DIGITS.test(raw)) return null;
105
+ const parsed = Number(raw);
106
+ if (parsed < 1 || parsed > MAX_TRANSFORM_DIMENSION) return null;
107
+ return parsed;
108
+ }
109
+
110
+ //#endregion
111
+ export { ALLOWED_TRANSFORM_FORMATS, DEFAULT_TRANSFORM_FORMAT, IMMUTABLE_IMAGE_CACHE, MAX_TRANSFORM_DIMENSION, isSafeTransformKey, isTransformFormat, matchInternalMediaKey, originalMediaHeaders, parseTransformParams };
@@ -1,5 +1,30 @@
1
- import { _ as MediaValue, a as ComponentEmbed, b as mediaItemToValue, c as EmbedResult, d as MediaListResult, f as MediaProvider, g as MediaUploadInput, h as MediaProviderItem, i as AudioEmbed, l as ImageEmbed, m as MediaProviderDescriptor, n as generatePlaceholder, o as CreateMediaProviderFn, p as MediaProviderCapabilities, r as normalizeMediaValue, s as EmbedOptions, t as PlaceholderData, u as MediaListOptions, v as ThumbnailOptions, y as VideoEmbed } from "../placeholder-CXfoCtCd.mjs";
1
+ import { _ as MediaValue, a as ComponentEmbed, b as mediaItemToValue, c as EmbedResult, d as MediaListResult, f as MediaProvider, g as MediaUploadInput, h as MediaProviderItem, i as AudioEmbed, l as ImageEmbed, m as MediaProviderDescriptor, n as generatePlaceholder, o as CreateMediaProviderFn, p as MediaProviderCapabilities, r as normalizeMediaValue, s as EmbedOptions, t as PlaceholderData, u as MediaListOptions, v as ThumbnailOptions, y as VideoEmbed } from "../placeholder-DkWkXfDI.mjs";
2
2
 
3
+ //#region src/media/enrich.d.ts
4
+ /**
5
+ * Image Metadata Enrichment
6
+ *
7
+ * Derives dimensions and LQIP placeholders from image bytes. Server-side media
8
+ * creation paths share this helper so direct uploads, signed upload confirms,
9
+ * imports, and plugin uploads store consistent image metadata.
10
+ */
11
+ interface EnrichedImageMetadata {
12
+ width?: number;
13
+ height?: number;
14
+ blurhash?: string;
15
+ dominantColor?: string;
16
+ }
17
+ declare function enrichImageMetadata(bytes: Uint8Array, contentType: string, opts?: {
18
+ knownDimensions?: {
19
+ width: number;
20
+ height: number;
21
+ };
22
+ placeholder?: {
23
+ bytes: Uint8Array;
24
+ contentType: string;
25
+ };
26
+ }): Promise<EnrichedImageMetadata>;
27
+ //#endregion
3
28
  //#region src/media/local.d.ts
4
29
  interface LocalMediaConfig {
5
30
  /** Whether the local provider is enabled (default true) */
@@ -22,4 +47,4 @@ interface LocalMediaConfig {
22
47
  */
23
48
  declare function localMedia(config?: LocalMediaConfig): MediaProviderDescriptor;
24
49
  //#endregion
25
- export { type AudioEmbed, type ComponentEmbed, type CreateMediaProviderFn, type EmbedOptions, type EmbedResult, type ImageEmbed, type LocalMediaConfig, type MediaListOptions, type MediaListResult, type MediaProvider, type MediaProviderCapabilities, type MediaProviderDescriptor, type MediaProviderItem, type MediaUploadInput, type MediaValue, type PlaceholderData, type ThumbnailOptions, type VideoEmbed, generatePlaceholder, localMedia, mediaItemToValue, normalizeMediaValue };
50
+ export { type AudioEmbed, type ComponentEmbed, type CreateMediaProviderFn, type EmbedOptions, type EmbedResult, type EnrichedImageMetadata, type ImageEmbed, type LocalMediaConfig, type MediaListOptions, type MediaListResult, type MediaProvider, type MediaProviderCapabilities, type MediaProviderDescriptor, type MediaProviderItem, type MediaUploadInput, type MediaValue, type PlaceholderData, type ThumbnailOptions, type VideoEmbed, enrichImageMetadata, generatePlaceholder, localMedia, mediaItemToValue, normalizeMediaValue };
@@ -1,5 +1,5 @@
1
- import { n as normalizeMediaValue } from "../normalize-ByemhhfW.mjs";
2
- import { t as generatePlaceholder } from "../placeholder-d54Qr_7n.mjs";
1
+ import { n as normalizeMediaValue } from "../normalize-Cyt7JdF7.mjs";
2
+ import { n as generatePlaceholder, t as enrichImageMetadata } from "../enrich-Ck9tfMqe.mjs";
3
3
 
4
4
  //#region src/media/types.ts
5
5
  /**
@@ -13,6 +13,8 @@ function mediaItemToValue(providerId, item) {
13
13
  mimeType: item.mimeType,
14
14
  width: item.width,
15
15
  height: item.height,
16
+ blurhash: item.blurhash,
17
+ dominantColor: item.dominantColor,
16
18
  alt: item.alt,
17
19
  meta: item.meta
18
20
  };
@@ -52,4 +54,4 @@ function localMedia(config = {}) {
52
54
  }
53
55
 
54
56
  //#endregion
55
- export { generatePlaceholder, localMedia, mediaItemToValue, normalizeMediaValue };
57
+ export { enrichImageMetadata, generatePlaceholder, localMedia, mediaItemToValue, normalizeMediaValue };
@@ -1,14 +1,13 @@
1
- import "../runtime-C4-2lSFg.mjs";
2
- import { t as Database } from "../types-CuJOqHfM.mjs";
3
- import "../types-DSPGWjxO.mjs";
4
- import "../types-Dryvv7LH.mjs";
5
- import { h as MediaProviderItem, o as CreateMediaProviderFn } from "../placeholder-CXfoCtCd.mjs";
6
- import "../runner-09sTqtv0.mjs";
7
- import "../index-CZiWCQDp.mjs";
8
- import { d as Storage } from "../types-DZpT-PnG.mjs";
9
- import "../byline-fields-uJlygdzM.mjs";
10
- import "../types-GaCtZ1k9.mjs";
11
- import "../validate-DzjCdy6v.mjs";
1
+ import "../types-DwoUifGE.mjs";
2
+ import { t as Database } from "../types-DuQn1G7-.mjs";
3
+ import { h as MediaProviderItem, o as CreateMediaProviderFn } from "../placeholder-DkWkXfDI.mjs";
4
+ import "../runner-D6hzs8L9.mjs";
5
+ import "../index-DcnOCD1e.mjs";
6
+ import "../types-g0zMtraY.mjs";
7
+ import { d as Storage } from "../types-wFu80FrO.mjs";
8
+ import "../validate-CbVFoJgc.mjs";
9
+ import "../byline-fields-Ckeqd1OY.mjs";
10
+ import "../types-Cw0PeCT_.mjs";
12
11
  import "../index.mjs";
13
12
  import { Kysely } from "kysely";
14
13
 
@@ -16,6 +15,11 @@ import { Kysely } from "kysely";
16
15
  interface LocalMediaRuntimeConfig {
17
16
  enabled?: boolean;
18
17
  db?: Kysely<Database>;
18
+ /**
19
+ * Resolver for the current database connection. Runtime code injects this
20
+ * so media provider operations honor request-scoped database overrides.
21
+ */
22
+ getDb?: () => Kysely<Database>;
19
23
  storage?: Storage;
20
24
  }
21
25
  /**
@@ -1,6 +1,6 @@
1
1
  import "../base64-F8-DUraK.mjs";
2
- import "../types-CSgR9nQB.mjs";
3
- import { t as MediaRepository } from "../media-CbKyYukG.mjs";
2
+ import "../types-ChxYDRvx.mjs";
3
+ import { t as MediaRepository } from "../media-CVMOoywq.mjs";
4
4
 
5
5
  //#region src/media/local-runtime.ts
6
6
  /**
@@ -9,10 +9,11 @@ import { t as MediaRepository } from "../media-CbKyYukG.mjs";
9
9
  const createMediaProvider = (config) => {
10
10
  const { db, storage } = config;
11
11
  if (!db) throw new Error("Local media provider requires database connection");
12
- const repo = new MediaRepository(db);
12
+ const resolveDb = config.getDb ?? (() => db);
13
+ const repo = () => new MediaRepository(resolveDb());
13
14
  return {
14
15
  async list(options) {
15
- const result = await repo.findMany({
16
+ const result = await repo().findMany({
16
17
  cursor: options.cursor,
17
18
  limit: options.limit,
18
19
  mimeType: options.mimeType
@@ -38,7 +39,7 @@ const createMediaProvider = (config) => {
38
39
  };
39
40
  },
40
41
  async get(id) {
41
- const item = await repo.findById(id);
42
+ const item = await repo().findById(id);
42
43
  if (!item) return null;
43
44
  return {
44
45
  id: item.id,
@@ -62,12 +63,13 @@ const createMediaProvider = (config) => {
62
63
  throw new Error("Local upload should use /_dineway/api/media endpoint");
63
64
  },
64
65
  async delete(id) {
65
- const item = await repo.findById(id);
66
+ const repoInstance = repo();
67
+ const item = await repoInstance.findById(id);
66
68
  if (!item) return;
67
69
  if (storage) try {
68
70
  await storage.delete(item.storageKey);
69
71
  } catch {}
70
- await repo.delete(id);
72
+ await repoInstance.delete(id);
71
73
  },
72
74
  getEmbed(value, _options) {
73
75
  const src = `/_dineway/api/media/file/${typeof value.meta?.storageKey === "string" ? value.meta.storageKey : value.id}`;
@@ -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 { sql } from "kysely";
3
3
  import { ulid } from "ulidx";
4
4
 
@@ -65,6 +65,8 @@ var MediaRepository = class {
65
65
  if (metadata?.width !== void 0) updates.width = metadata.width;
66
66
  if (metadata?.height !== void 0) updates.height = metadata.height;
67
67
  if (metadata?.size !== void 0) updates.size = metadata.size;
68
+ if (metadata?.blurhash !== void 0) updates.blurhash = metadata.blurhash;
69
+ if (metadata?.dominantColor !== void 0) updates.dominant_color = metadata.dominantColor;
68
70
  await this.db.updateTable("media").set(updates).where("id", "=", id).execute();
69
71
  return this.findById(id);
70
72
  }
@@ -1,4 +1,4 @@
1
- import { r as parseAllowedMimeTypes } from "./mime-CbKsKDCB.mjs";
1
+ import { r as parseAllowedMimeTypes } from "./mime-C0vOHFm7.mjs";
2
2
 
3
3
  //#region src/api/handlers/media-allowlist.ts
4
4
  /**
@@ -0,0 +1,20 @@
1
+ //#region src/seo/media-url.ts
2
+ /**
3
+ * Resolve a stored SEO image reference to a URL.
4
+ *
5
+ * SEO image values can be stored as:
6
+ * - absolute URLs, which are returned unchanged;
7
+ * - root-relative media paths, which are prefixed with the site URL;
8
+ * - bare media IDs, which are expanded to the Dineway media API path.
9
+ */
10
+ const TRAILING_SLASH_RE = /\/$/;
11
+ const ABSOLUTE_URL_RE = /^https?:\/\//i;
12
+ function buildSeoImageUrl(imageRef, siteUrl) {
13
+ if (ABSOLUTE_URL_RE.test(imageRef)) return imageRef;
14
+ if (imageRef.startsWith("/")) return siteUrl ? `${siteUrl.replace(TRAILING_SLASH_RE, "")}${imageRef}` : imageRef;
15
+ const mediaPath = `/_dineway/api/media/file/${imageRef}`;
16
+ return siteUrl ? `${siteUrl.replace(TRAILING_SLASH_RE, "")}${mediaPath}` : mediaPath;
17
+ }
18
+
19
+ //#endregion
20
+ export { buildSeoImageUrl as t };
@@ -1,11 +1,33 @@
1
1
  import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
2
- import { r as getDb } from "./loader--GOYux8M.mjs";
3
- import { t as CommentRepository } from "./comment-Beue8-15.mjs";
4
- import { r as requestCached } from "./request-cache-ho99schz.mjs";
5
- import { i as resolveLocaleChain, r as resolveLocale } from "./resolve-DTuDyYKs.mjs";
6
- import { n as sanitizeHref } from "./url-w7Mp5qAD.mjs";
2
+ import { r as getDb } from "./loader-aWkkc1_o.mjs";
3
+ import { n as cachedQuery, t as CacheNamespace } from "./object-cache-D51qOseS.mjs";
4
+ import { t as CommentRepository } from "./comment-DFALgsJD.mjs";
5
+ import { r as requestCached } from "./request-cache-CBFjCwSt.mjs";
6
+ import { i as resolveLocaleChain, r as resolveLocale } from "./resolve-DE71WcL9.mjs";
7
+ import { n as sanitizeHref } from "./url-EMAguGVk.mjs";
8
+ import { t as CommentReactionRepository } from "./comment-reaction-C37bf99u.mjs";
7
9
  import { sql } from "kysely";
8
10
 
11
+ //#region src/comments/ranking.ts
12
+ const DEFAULT_Z = 1.96;
13
+ const NEGATIVE_REACTIONS = new Set(["dislike", "down"]);
14
+ function wilsonLowerBound(up, down, z = DEFAULT_Z) {
15
+ const n = up + down;
16
+ if (n <= 0) return 0;
17
+ const phat = up / n;
18
+ const z2 = z * z;
19
+ const denom = 1 + z2 / n;
20
+ return (phat + z2 / (2 * n) - z * Math.sqrt((phat * (1 - phat) + z2 / (4 * n)) / n)) / denom;
21
+ }
22
+ function reactionScore(counts) {
23
+ let up = 0;
24
+ let down = 0;
25
+ for (const [reaction, count] of Object.entries(counts)) if (NEGATIVE_REACTIONS.has(reaction)) down += count;
26
+ else up += count;
27
+ return wilsonLowerBound(up, down);
28
+ }
29
+
30
+ //#endregion
9
31
  //#region src/comments/query.ts
10
32
  /**
11
33
  * Get approved comments for a content item.
@@ -22,7 +44,15 @@ import { sql } from "kysely";
22
44
  * ```
23
45
  */
24
46
  async function getComments(options) {
25
- return getCommentsWithDb(await getDb(), options);
47
+ const sort = options.sort ?? "oldest";
48
+ const withReactions = options.reactions || sort === "best";
49
+ return cachedQuery({
50
+ namespace: CacheNamespace.COMMENTS,
51
+ key: `comments:${options.collection}:${options.contentId}:${options.threaded ? "t" : "f"}:${withReactions ? "r" : "n"}:${sort}`,
52
+ load: async () => {
53
+ return getCommentsWithDb(await getDb(), options);
54
+ }
55
+ });
26
56
  }
27
57
  /**
28
58
  * Get approved comments with an explicit db handle.
@@ -37,15 +67,42 @@ async function getCommentsWithDb(db, options) {
37
67
  status: "approved",
38
68
  limit: 500
39
69
  });
40
- if (options.threaded) return {
41
- items: CommentRepository.assembleThreads(result.items).map((c) => CommentRepository.toPublicComment(c)),
42
- total
43
- };
70
+ const items = options.threaded ? CommentRepository.assembleThreads(result.items).map((c) => CommentRepository.toPublicComment(c)) : result.items.map((c) => CommentRepository.toPublicComment(c));
71
+ if (options.reactions || options.sort === "best") {
72
+ await attachReactions(db, items);
73
+ if (options.sort === "best") sortByBest(items);
74
+ }
44
75
  return {
45
- items: result.items.map((c) => CommentRepository.toPublicComment(c)),
76
+ items,
46
77
  total
47
78
  };
48
79
  }
80
+ async function attachReactions(db, items) {
81
+ const ids = [];
82
+ for (const comment of items) {
83
+ ids.push(comment.id);
84
+ for (const reply of comment.replies ?? []) ids.push(reply.id);
85
+ }
86
+ if (ids.length === 0) return;
87
+ const counts = await new CommentReactionRepository(db).countsForComments(ids);
88
+ const assign = (comment) => {
89
+ const reactions = counts.get(comment.id);
90
+ if (reactions) comment.reactions = reactions;
91
+ };
92
+ for (const comment of items) {
93
+ assign(comment);
94
+ for (const reply of comment.replies ?? []) assign(reply);
95
+ }
96
+ }
97
+ function sortByBest(items) {
98
+ items.sort((a, b) => {
99
+ const scoreDelta = reactionScore(b.reactions ?? {}) - reactionScore(a.reactions ?? {});
100
+ if (scoreDelta !== 0) return scoreDelta;
101
+ if (a.createdAt < b.createdAt) return -1;
102
+ if (a.createdAt > b.createdAt) return 1;
103
+ return 0;
104
+ });
105
+ }
49
106
  /**
50
107
  * Get the count of approved comments for a content item.
51
108
  *
@@ -75,9 +132,13 @@ async function getCommentCountWithDb(db, collection, contentId) {
75
132
  */
76
133
  function getMenu(name, options = {}) {
77
134
  const locale = resolveLocale(options.locale);
78
- return requestCached(`menu:${name}:${locale ?? "*"}`, async () => {
79
- return getMenuWithDb(name, await getDb(), { locale });
80
- });
135
+ return requestCached(`menu:${name}:${locale ?? "*"}`, () => cachedQuery({
136
+ namespace: CacheNamespace.MENUS,
137
+ key: `${name}:${locale ?? "*"}`,
138
+ load: async () => {
139
+ return getMenuWithDb(name, await getDb(), { locale });
140
+ }
141
+ }));
81
142
  }
82
143
  /**
83
144
  * Get menu by name with resolved URLs (with explicit db).
@@ -182,7 +243,11 @@ async function resolveMenuItem(item, db, urlPatterns, locale) {
182
243
  if (url === null) return null;
183
244
  break;
184
245
  case "collection":
185
- url = `/${item.reference_collection}/`;
246
+ if (!item.reference_collection) return null;
247
+ if (item.reference_id) {
248
+ url = await resolveContentUrl(item.reference_collection, item.reference_id, db, urlPatterns, locale);
249
+ if (url === null) return null;
250
+ } else url = `/${item.reference_collection}/`;
186
251
  break;
187
252
  default: if (item.reference_collection && item.reference_id) {
188
253
  url = await resolveContentUrl(item.reference_collection, item.reference_id, db, urlPatterns, locale);
@@ -1,6 +1,7 @@
1
- import { a as __exportAll } from "./runner-DzIpHGND.mjs";
1
+ import { a as __exportAll } from "./runner-BgmttQmD.mjs";
2
2
  import { n as getI18nConfig } from "./config-CVssduLe.mjs";
3
- import { t as withTransaction } from "./transaction-CFLhEOuH.mjs";
3
+ import { c as invalidateMenuObjectCache } from "./object-cache-D51qOseS.mjs";
4
+ import { t as withTransaction } from "./transaction-0LEAAy8R.mjs";
4
5
  import { ulid } from "ulidx";
5
6
 
6
7
  //#region src/database/repositories/menu.ts
@@ -175,6 +176,7 @@ var MenuRepository = class {
175
176
  }
176
177
  }
177
178
  });
179
+ invalidateMenuObjectCache();
178
180
  const created = await this.findById(id);
179
181
  if (!created) throw new Error("Failed to create menu");
180
182
  return created;
@@ -183,7 +185,10 @@ var MenuRepository = class {
183
185
  if (!await this.findById(id)) return null;
184
186
  const values = {};
185
187
  if (input.label !== void 0) values.label = input.label;
186
- if (Object.keys(values).length > 0) await this.db.updateTable("_dineway_menus").set(values).where("id", "=", id).execute();
188
+ if (Object.keys(values).length > 0) {
189
+ await this.db.updateTable("_dineway_menus").set(values).where("id", "=", id).execute();
190
+ invalidateMenuObjectCache();
191
+ }
187
192
  return await this.findById(id);
188
193
  }
189
194
  /**
@@ -198,6 +203,7 @@ var MenuRepository = class {
198
203
  await trx.deleteFrom("_dineway_menu_items").where("menu_id", "=", id).execute();
199
204
  await trx.deleteFrom("_dineway_menus").where("id", "=", id).execute();
200
205
  });
206
+ invalidateMenuObjectCache();
201
207
  return true;
202
208
  }
203
209
  /**
@@ -250,6 +256,7 @@ var MenuRepository = class {
250
256
  locale,
251
257
  translation_group: id
252
258
  }).execute();
259
+ invalidateMenuObjectCache();
253
260
  return rowToMenuItem(await this.db.selectFrom("_dineway_menu_items").selectAll().where("id", "=", id).executeTakeFirstOrThrow());
254
261
  }
255
262
  /**
@@ -267,12 +274,17 @@ var MenuRepository = class {
267
274
  if (input.cssClasses !== void 0) values.css_classes = input.cssClasses;
268
275
  if (input.parentId !== void 0) values.parent_id = input.parentId;
269
276
  if (input.sortOrder !== void 0) values.sort_order = input.sortOrder;
270
- if (Object.keys(values).length > 0) await this.db.updateTable("_dineway_menu_items").set(values).where("id", "=", itemId).execute();
277
+ if (Object.keys(values).length > 0) {
278
+ await this.db.updateTable("_dineway_menu_items").set(values).where("id", "=", itemId).execute();
279
+ invalidateMenuObjectCache();
280
+ }
271
281
  return rowToMenuItem(await this.db.selectFrom("_dineway_menu_items").selectAll().where("id", "=", itemId).executeTakeFirstOrThrow());
272
282
  }
273
283
  /** Delete an item scoped to its menu. Returns false if nothing was deleted. */
274
284
  async deleteItem(menuId, itemId) {
275
- return (await this.db.deleteFrom("_dineway_menu_items").where("id", "=", itemId).where("menu_id", "=", menuId).execute())[0]?.numDeletedRows !== 0n;
285
+ const deleted = (await this.db.deleteFrom("_dineway_menu_items").where("id", "=", itemId).where("menu_id", "=", menuId).execute())[0]?.numDeletedRows !== 0n;
286
+ if (deleted) invalidateMenuObjectCache();
287
+ return deleted;
276
288
  }
277
289
  /**
278
290
  * Atomic replace: delete every existing item and re-insert in order.
@@ -310,6 +322,7 @@ var MenuRepository = class {
310
322
  }
311
323
  await trx.updateTable("_dineway_menus").set({ updated_at: (/* @__PURE__ */ new Date()).toISOString() }).where("id", "=", menuId).execute();
312
324
  });
325
+ invalidateMenuObjectCache();
313
326
  return { itemCount: items.length };
314
327
  }
315
328
  /**
@@ -317,6 +330,7 @@ var MenuRepository = class {
317
330
  * malicious payload cannot move foreign items into this menu's siblings.
318
331
  */
319
332
  async reorderItems(menuId, items) {
333
+ invalidateMenuObjectCache();
320
334
  return withTransaction(this.db, async (trx) => {
321
335
  for (const item of items) await trx.updateTable("_dineway_menu_items").set({
322
336
  parent_id: item.parentId,
@@ -25,7 +25,8 @@ async function normalizeMediaValue(value, getProvider) {
25
25
  const needsDimensions = result.width == null || result.height == null;
26
26
  const needsStorageKey = provider === "local" && !result.meta?.storageKey;
27
27
  const needsFileInfo = !result.mimeType || !result.filename;
28
- if (!(needsDimensions || needsStorageKey || needsFileInfo) || !id) return result;
28
+ const needsLqip = (result.mimeType ?? "").startsWith("image/") && (result.blurhash == null || result.dominantColor == null);
29
+ if (!(needsDimensions || needsStorageKey || needsFileInfo || needsLqip) || !id) return result;
29
30
  const mediaProvider = getProvider(provider);
30
31
  if (!mediaProvider?.get) return result;
31
32
  let providerItem;
@@ -80,6 +81,8 @@ async function resolveInternalUrl(url, getProvider) {
80
81
  mimeType: item.mimeType,
81
82
  width: item.width,
82
83
  height: item.height,
84
+ blurhash: item.blurhash,
85
+ dominantColor: item.dominantColor,
83
86
  alt: item.alt,
84
87
  meta: item.meta
85
88
  };
@@ -92,6 +95,8 @@ function mergeProviderData(existing, item) {
92
95
  const result = { ...existing };
93
96
  if (result.width == null && item.width != null) result.width = item.width;
94
97
  if (result.height == null && item.height != null) result.height = item.height;
98
+ if (result.blurhash == null && item.blurhash != null) result.blurhash = item.blurhash;
99
+ if (result.dominantColor == null && item.dominantColor != null) result.dominantColor = item.dominantColor;
95
100
  if (!result.filename && item.filename) result.filename = item.filename;
96
101
  if (!result.mimeType && item.mimeType) result.mimeType = item.mimeType;
97
102
  if (!result.alt && item.alt) result.alt = item.alt;
@@ -117,6 +122,8 @@ function recordToMediaValue(obj) {
117
122
  if (typeof obj.mimeType === "string") result.mimeType = obj.mimeType;
118
123
  if (typeof obj.width === "number") result.width = obj.width;
119
124
  if (typeof obj.height === "number") result.height = obj.height;
125
+ if (typeof obj.blurhash === "string") result.blurhash = obj.blurhash;
126
+ if (typeof obj.dominantColor === "string") result.dominantColor = obj.dominantColor;
120
127
  if (typeof obj.alt === "string") result.alt = obj.alt;
121
128
  if (isRecord(obj.meta)) result.meta = obj.meta;
122
129
  return result;
@@ -1,8 +1,8 @@
1
- import { t as withTransaction } from "./transaction-CFLhEOuH.mjs";
2
- import { a as filterExperimentalSiteContextWorkflowScopes, i as experimentalSiteContextWorkflowsEnabled, o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-CSMffP6q.mjs";
3
- import { a as hashApiToken, n as TOKEN_PREFIXES, r as generatePrefixedToken, t as ALL_VALID_SCOPES } from "./api-tokens-CYUoFGo7.mjs";
4
- import { c as validateRedirectUri, o as lookupOAuthClient, s as validateClientRedirectUri } from "./oauth-clients-Du-V0fEm.mjs";
5
- import { t as lookupUserRoleAndStatus } from "./oauth-user-lookup-BFjWF8wK.mjs";
1
+ import { t as withTransaction } from "./transaction-0LEAAy8R.mjs";
2
+ import { a as hashApiToken, n as TOKEN_PREFIXES, r as generatePrefixedToken, t as ALL_VALID_SCOPES } from "./api-tokens-Ypaly90d.mjs";
3
+ import { a as filterExperimentalSiteContextWorkflowScopes, i as experimentalSiteContextWorkflowsEnabled, o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-GVhUgzEs.mjs";
4
+ import { c as validateRedirectUri, o as lookupOAuthClient, s as validateClientRedirectUri } from "./oauth-clients-Dwl32-Uj.mjs";
5
+ import { t as lookupUserRoleAndStatus } from "./oauth-user-lookup-CMehAaKs.mjs";
6
6
  import { clampScopes, computeS256Challenge, secureCompare } from "@dineway-ai/auth";
7
7
  import { generateCodeVerifier } from "arctic";
8
8
 
@@ -1,5 +1,5 @@
1
- import { o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-CSMffP6q.mjs";
2
- import { s as validateScopes } from "./api-tokens-CYUoFGo7.mjs";
1
+ import { s as validateScopes } from "./api-tokens-Ypaly90d.mjs";
2
+ import { o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-GVhUgzEs.mjs";
3
3
 
4
4
  //#region src/api/oauth/redirect-uri.ts
5
5
  /**
@@ -0,0 +1,14 @@
1
+ import { t as CreateObjectCacheBackendFn } from "../types-BLQCz46p.mjs";
2
+
3
+ //#region src/object-cache/memory.d.ts
4
+ /**
5
+ * Create the in-isolate memory backend.
6
+ *
7
+ * Config keys (all optional):
8
+ * - `maxEntries` — soft cap on stored keys; oldest insertions are evicted
9
+ * first when exceeded (FIFO, cheap and good enough for a backstop). Default
10
+ * 1000.
11
+ */
12
+ declare const createObjectCache: CreateObjectCacheBackendFn;
13
+ //#endregion
14
+ export { createObjectCache };
@@ -0,0 +1,55 @@
1
+ //#region src/object-cache/memory.ts
2
+ const STORE_KEY = Symbol.for("dineway:object-cache:memory");
3
+ const g = globalThis;
4
+ function getStore(maxEntries) {
5
+ const existing = g[STORE_KEY];
6
+ if (existing) return existing;
7
+ const store = {
8
+ map: /* @__PURE__ */ new Map(),
9
+ maxEntries
10
+ };
11
+ g[STORE_KEY] = store;
12
+ return store;
13
+ }
14
+ /**
15
+ * Create the in-isolate memory backend.
16
+ *
17
+ * Config keys (all optional):
18
+ * - `maxEntries` — soft cap on stored keys; oldest insertions are evicted
19
+ * first when exceeded (FIFO, cheap and good enough for a backstop). Default
20
+ * 1000.
21
+ */
22
+ const createObjectCache = (config) => {
23
+ const store = getStore(typeof config.maxEntries === "number" ? config.maxEntries : 1e3);
24
+ return {
25
+ get(key) {
26
+ const entry = store.map.get(key);
27
+ if (!entry) return Promise.resolve(null);
28
+ if (entry.expiresAt !== null && entry.expiresAt <= Date.now()) {
29
+ store.map.delete(key);
30
+ return Promise.resolve(null);
31
+ }
32
+ return Promise.resolve(entry.value);
33
+ },
34
+ set(key, value, ttlSeconds) {
35
+ store.map.delete(key);
36
+ store.map.set(key, {
37
+ value,
38
+ expiresAt: ttlSeconds && ttlSeconds > 0 ? Date.now() + ttlSeconds * 1e3 : null
39
+ });
40
+ while (store.map.size > store.maxEntries) {
41
+ const oldest = store.map.keys().next().value;
42
+ if (oldest === void 0) break;
43
+ store.map.delete(oldest);
44
+ }
45
+ return Promise.resolve();
46
+ },
47
+ delete(key) {
48
+ store.map.delete(key);
49
+ return Promise.resolve();
50
+ }
51
+ };
52
+ };
53
+
54
+ //#endregion
55
+ export { createObjectCache };