dineway 0.1.11 → 0.1.13

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 (334) hide show
  1. package/dist/{allowed-origins-DG86sH8U.mjs → allowed-origins-C1AKK9AT.mjs} +1 -1
  2. package/dist/api/route-utils.d.mts +10 -9
  3. package/dist/api/route-utils.mjs +7 -7
  4. package/dist/api/schemas/index.d.mts +1 -1
  5. package/dist/api/schemas/index.mjs +2 -2
  6. package/dist/{api-Cmy8Rjk5.mjs → api-Lyjc8wqZ.mjs} +4 -4
  7. package/dist/{api-tokens-Bu3ez1MO.mjs → api-tokens-D7UjLbdt.mjs} +1 -1
  8. package/dist/{apply-Co5imxxT.mjs → apply-Bm5QgdrE.mjs} +5 -5
  9. package/dist/astro/index.d.mts +11 -10
  10. package/dist/astro/index.mjs +3 -3
  11. package/dist/astro/middleware/auth.d.mts +10 -9
  12. package/dist/astro/middleware/auth.mjs +5 -5
  13. package/dist/astro/middleware/request-context.mjs +2 -2
  14. package/dist/astro/middleware/setup.mjs +1 -1
  15. package/dist/astro/middleware.mjs +42 -40
  16. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +4 -4
  17. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +4 -4
  18. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  19. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  20. package/dist/astro/routes/api/admin/briefing.mjs +7 -7
  21. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +6 -6
  22. package/dist/astro/routes/api/admin/bylines/index.mjs +6 -6
  23. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +8 -8
  24. package/dist/astro/routes/api/admin/comments/_id_.mjs +3 -3
  25. package/dist/astro/routes/api/admin/comments/bulk.mjs +6 -6
  26. package/dist/astro/routes/api/admin/comments/counts.mjs +3 -3
  27. package/dist/astro/routes/api/admin/comments/index.mjs +6 -6
  28. package/dist/astro/routes/api/admin/context/_id_/history.mjs +11 -10
  29. package/dist/astro/routes/api/admin/context/_id_/index.mjs +11 -10
  30. package/dist/astro/routes/api/admin/context/_id_/review.mjs +15 -14
  31. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +15 -14
  32. package/dist/astro/routes/api/admin/context/diff.mjs +14 -13
  33. package/dist/astro/routes/api/admin/context/index.mjs +15 -14
  34. package/dist/astro/routes/api/admin/context/stale.mjs +14 -13
  35. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +11 -10
  36. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +14 -13
  37. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +14 -13
  38. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +12 -11
  39. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +2 -2
  40. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  41. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  42. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +24 -23
  43. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +24 -23
  44. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +18 -17
  45. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +23 -22
  46. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +23 -22
  47. package/dist/astro/routes/api/admin/plugins/index.mjs +18 -17
  48. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  49. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +18 -17
  50. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +23 -22
  51. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +18 -17
  52. package/dist/astro/routes/api/admin/plugins/updates.mjs +18 -17
  53. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +2 -2
  54. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +13 -12
  55. package/dist/astro/routes/api/admin/review-requests/index.mjs +5 -5
  56. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +18 -17
  57. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  58. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +18 -17
  59. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +1 -1
  60. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
  61. package/dist/astro/routes/api/admin/users/_id_/index.mjs +4 -4
  62. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +2 -2
  63. package/dist/astro/routes/api/admin/users/index.mjs +4 -4
  64. package/dist/astro/routes/api/auth/dev-bypass.mjs +3 -3
  65. package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
  66. package/dist/astro/routes/api/auth/invite/complete.mjs +8 -8
  67. package/dist/astro/routes/api/auth/invite/index.mjs +5 -5
  68. package/dist/astro/routes/api/auth/invite/register-options.mjs +7 -7
  69. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  70. package/dist/astro/routes/api/auth/magic-link/send.mjs +7 -7
  71. package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
  72. package/dist/astro/routes/api/auth/me.mjs +4 -4
  73. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  74. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +2 -2
  75. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  76. package/dist/astro/routes/api/auth/passkey/_id_.mjs +4 -4
  77. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  78. package/dist/astro/routes/api/auth/passkey/options.mjs +9 -9
  79. package/dist/astro/routes/api/auth/passkey/register/options.mjs +7 -7
  80. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +8 -8
  81. package/dist/astro/routes/api/auth/passkey/verify.mjs +8 -8
  82. package/dist/astro/routes/api/auth/signup/complete.mjs +8 -8
  83. package/dist/astro/routes/api/auth/signup/request.mjs +7 -7
  84. package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
  85. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +9 -9
  86. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  87. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +3 -3
  88. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
  89. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +3 -3
  90. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +8 -8
  91. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +13 -12
  92. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
  93. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  94. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +6 -6
  95. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +6 -6
  96. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  97. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +3 -3
  98. package/dist/astro/routes/api/content/_collection_/_id_.mjs +6 -6
  99. package/dist/astro/routes/api/content/_collection_/index.mjs +6 -6
  100. package/dist/astro/routes/api/content/_collection_/trash.mjs +5 -5
  101. package/dist/astro/routes/api/dashboard.mjs +2 -2
  102. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  103. package/dist/astro/routes/api/health.mjs +1 -1
  104. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  105. package/dist/astro/routes/api/import/probe.mjs +8 -8
  106. package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
  107. package/dist/astro/routes/api/import/wordpress/execute.mjs +12 -11
  108. package/dist/astro/routes/api/import/wordpress/media.mjs +6 -6
  109. package/dist/astro/routes/api/import/wordpress/prepare.mjs +15 -14
  110. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +14 -13
  111. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  112. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +8 -8
  113. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +1 -1
  114. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +16 -15
  115. package/dist/astro/routes/api/manifest.mjs +4 -4
  116. package/dist/astro/routes/api/mcp.mjs +22 -21
  117. package/dist/astro/routes/api/media/_id_/confirm.mjs +5 -5
  118. package/dist/astro/routes/api/media/_id_.mjs +5 -5
  119. package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
  120. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  121. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  122. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  123. package/dist/astro/routes/api/media/upload-url.mjs +5 -5
  124. package/dist/astro/routes/api/media.mjs +5 -5
  125. package/dist/astro/routes/api/menus/_name_/items.mjs +15 -14
  126. package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -14
  127. package/dist/astro/routes/api/menus/_name_.mjs +15 -14
  128. package/dist/astro/routes/api/menus/index.mjs +15 -14
  129. package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
  130. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  131. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  132. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  133. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  134. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  135. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  136. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  137. package/dist/astro/routes/api/openapi.json.mjs +3 -3
  138. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +3 -3
  139. package/dist/astro/routes/api/redirects/404s/index.mjs +6 -6
  140. package/dist/astro/routes/api/redirects/404s/summary.mjs +6 -6
  141. package/dist/astro/routes/api/redirects/_id_.mjs +15 -14
  142. package/dist/astro/routes/api/redirects/index.mjs +15 -14
  143. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  144. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
  145. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +19 -18
  146. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +19 -18
  147. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +19 -18
  148. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +19 -18
  149. package/dist/astro/routes/api/schema/collections/index.mjs +19 -18
  150. package/dist/astro/routes/api/schema/index.mjs +2 -2
  151. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +18 -17
  152. package/dist/astro/routes/api/schema/orphans/index.mjs +18 -17
  153. package/dist/astro/routes/api/search/enable.mjs +6 -6
  154. package/dist/astro/routes/api/search/index.mjs +5 -5
  155. package/dist/astro/routes/api/search/rebuild.mjs +6 -6
  156. package/dist/astro/routes/api/search/stats.mjs +3 -3
  157. package/dist/astro/routes/api/search/suggest.mjs +5 -5
  158. package/dist/astro/routes/api/sections/_slug_.mjs +15 -14
  159. package/dist/astro/routes/api/sections/index.mjs +15 -14
  160. package/dist/astro/routes/api/settings/email.mjs +3 -3
  161. package/dist/astro/routes/api/settings.mjs +15 -14
  162. package/dist/astro/routes/api/setup/admin-verify.mjs +10 -10
  163. package/dist/astro/routes/api/setup/admin.mjs +8 -8
  164. package/dist/astro/routes/api/setup/dev-bypass.mjs +11 -11
  165. package/dist/astro/routes/api/setup/dev-reset.mjs +1 -1
  166. package/dist/astro/routes/api/setup/index.mjs +11 -11
  167. package/dist/astro/routes/api/setup/status.mjs +3 -3
  168. package/dist/astro/routes/api/snapshot.mjs +5 -5
  169. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +16 -15
  170. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +16 -15
  171. package/dist/astro/routes/api/taxonomies/index.mjs +16 -15
  172. package/dist/astro/routes/api/themes/preview.mjs +4 -4
  173. package/dist/astro/routes/api/typegen.mjs +1 -1
  174. package/dist/astro/routes/api/well-known/auth.mjs +2 -2
  175. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
  176. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
  177. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +14 -13
  178. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +15 -14
  179. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +15 -14
  180. package/dist/astro/routes/api/widget-areas/_name_.mjs +13 -12
  181. package/dist/astro/routes/api/widget-areas/index.mjs +15 -14
  182. package/dist/astro/routes/api/widget-components.mjs +2 -2
  183. package/dist/astro/routes/robots.txt.mjs +2 -2
  184. package/dist/astro/routes/sitemap-_collection_.xml.mjs +2 -2
  185. package/dist/astro/routes/sitemap.xml.mjs +3 -3
  186. package/dist/astro/types.d.mts +13 -12
  187. package/dist/auth/providers/github.d.mts +1 -1
  188. package/dist/auth/providers/google.d.mts +1 -1
  189. package/dist/{auth-control-guard-DKUe_1oa.mjs → auth-control-guard-DOZ3UCsP.mjs} +1 -1
  190. package/dist/{authorize-BBj8C6Y8.mjs → authorize-BAdbMCwC.mjs} +1 -1
  191. package/dist/{briefing-BrXCuMEE.mjs → briefing-MVYe_Uyf.mjs} +1 -1
  192. package/dist/{briefing-ClWw4mc9.mjs → briefing-rty4O-wa.mjs} +1 -1
  193. package/dist/{bylines-BcOPh6Ej.mjs → bylines-C4LIBOOO.mjs} +1 -1
  194. package/dist/{bylines-HfUKum_j.d.mts → bylines-DCvz5gtm.d.mts} +13 -13
  195. package/dist/cli/index.mjs +7 -7
  196. package/dist/client/external-auth-headers.d.mts +1 -1
  197. package/dist/client/index.d.mts +1 -1
  198. package/dist/client/index.mjs +1 -1
  199. package/dist/{context-nxMyOe3p.mjs → context-CNIkMzot.mjs} +2 -2
  200. package/dist/{context-bE5Kyvcj.mjs → context-DNfcm853.mjs} +2 -2
  201. package/dist/{context-route-helpers-D-6uCQ0S.mjs → context-route-helpers-MurhoxWF.mjs} +1 -1
  202. package/dist/db/index.d.mts +3 -3
  203. package/dist/db/libsql.d.mts +1 -1
  204. package/dist/db/postgres.d.mts +1 -1
  205. package/dist/db/sqlite.d.mts +1 -1
  206. package/dist/{device-flow-7AhWNwCK.mjs → device-flow-BGEH5jfn.mjs} +4 -4
  207. package/dist/{hitl-requests-Bx3Bkk9l.mjs → hitl-requests-ChT32Ilo.mjs} +2 -2
  208. package/dist/{hitl-route-helpers-DMmJRS7B.mjs → hitl-route-helpers-CSit54Ru.mjs} +4 -4
  209. package/dist/{import-DVZcYlDp.mjs → import-BHRLhXAn.mjs} +2 -2
  210. package/dist/{import-DD3f2jkc.mjs → import-CNcKWTbp.mjs} +1 -1
  211. package/dist/{index-CkljPf5F.d.mts → index-CYfhYgXd.d.mts} +2 -2
  212. package/dist/index-EUAWaIxW.d.mts +835 -0
  213. package/dist/index.d.mts +16 -14
  214. package/dist/index.mjs +35 -32
  215. package/dist/jsonld-D2gUY4kA.d.mts +141 -0
  216. package/dist/media/index.d.mts +2 -1
  217. package/dist/media/local-runtime.d.mts +12 -11
  218. package/dist/menus-DYW_UHjv.mjs +256 -0
  219. package/dist/{oauth-authorization-C1qiw4hd.mjs → oauth-authorization-DxGjiWKL.mjs} +4 -4
  220. package/dist/{oauth-clients-CvWatf5p.mjs → oauth-clients-DxO_NO7k.mjs} +2 -2
  221. package/dist/page/index.d.mts +2 -139
  222. package/dist/page/index.mjs +1 -427
  223. package/dist/{parse-BeQXIt1U.mjs → parse-C9106ehs.mjs} +1 -1
  224. package/dist/placeholder-Bh1dfUOd.d.mts +40 -0
  225. package/dist/plugins/adapt-sandbox-entry.d.mts +10 -9
  226. package/dist/plugins/adapt-sandbox-entry.mjs +1 -1
  227. package/dist/{menus-CrzHokKj.mjs → plugins-D7-ILNib.mjs} +4 -257
  228. package/dist/{preview-C_4DyVox.mjs → preview-DvYRU-Oy.mjs} +2 -2
  229. package/dist/provider-loader-BiQ6lNmf.d.mts +20 -0
  230. package/dist/provider-loader-C21b9OpH.mjs +36 -0
  231. package/dist/{query-RiobVwB5.mjs → query-B9BO5goQ.mjs} +3 -3
  232. package/dist/{schema-BNpI53of.mjs → query-CsbOywSY.mjs} +1 -6
  233. package/dist/{rate-limit-CbJoj_fT.mjs → rate-limit-DmVTHI5v.mjs} +2 -2
  234. package/dist/{redirects-CqaxraTO.mjs → redirects-lrlmYXVE.mjs} +2 -49
  235. package/dist/{request-meta-Bd0mQfiS.mjs → request-meta-DixlNKKa.mjs} +1 -1
  236. package/dist/{runner-9eIQXuc2.d.mts → runner-BU6Lo1ZS.d.mts} +1 -1
  237. package/dist/{runtime-C4-7y7xK.d.mts → runtime-QuuFSlc6.d.mts} +104 -932
  238. package/dist/runtime.d.mts +11 -28
  239. package/dist/runtime.mjs +1 -35
  240. package/dist/schema-BECjUhP8.mjs +8 -0
  241. package/dist/seed/index.d.mts +2 -2
  242. package/dist/seed/index.mjs +6 -6
  243. package/dist/seo/index.d.mts +1 -1
  244. package/dist/seo-contributions-B1fWCnqY.mjs +429 -0
  245. package/dist/{service-CSfcQguB.mjs → service-CyOsm0R6.mjs} +1 -1
  246. package/dist/{settings-4XnpVMOS.mjs → settings-DGtLLSaz.mjs} +15 -1
  247. package/dist/{settings-Bw93cLfe.mjs → settings-Dzgswvg4.mjs} +1 -1
  248. package/dist/{site-context-Bpu_Paur.mjs → site-context-WBxoD99D.mjs} +6 -6
  249. package/dist/storage/local.d.mts +1 -1
  250. package/dist/storage/local.mjs +1 -1
  251. package/dist/storage/s3.d.mts +1 -1
  252. package/dist/storage/s3.mjs +1 -1
  253. package/dist/{taxonomies-BvBgfzn3.mjs → taxonomies-D2aZGuns.mjs} +2 -2
  254. package/dist/{taxonomies-CpqGcIJD.mjs → taxonomies-z6Lz91BC.mjs} +1 -1
  255. package/dist/{placeholder-CHkLckzK.d.mts → types-OPs5Q_sX.d.mts} +1 -38
  256. package/dist/{types-DgfUZqcd.d.mts → types-Q616b2Hn.d.mts} +1 -1
  257. package/dist/ui/client-runtime.d.mts +12 -0
  258. package/dist/ui/client-runtime.mjs +32 -0
  259. package/dist/ui/server-runtime.d.mts +33 -0
  260. package/dist/ui/server-runtime.mjs +80 -0
  261. package/dist/url-DNjT2abR.mjs +49 -0
  262. package/dist/{validate-JCZihRIa.d.mts → validate-BwmQEbu8.d.mts} +3 -3
  263. package/dist/version-C5JkNvmb.mjs +6 -0
  264. package/dist/{widgets-B7Q_7bxN.mjs → widgets-B7DRpZvy.mjs} +1 -1
  265. package/package.json +19 -5
  266. package/src/components/Button.astro +1 -1
  267. package/src/components/CommentForm.astro +1 -1
  268. package/src/components/Comments.astro +1 -3
  269. package/src/components/DinewayBodyEnd.astro +5 -3
  270. package/src/components/DinewayBodyStart.astro +5 -3
  271. package/src/components/DinewayHead.astro +9 -7
  272. package/src/components/DinewayImage.astro +6 -4
  273. package/src/components/DinewayMedia.astro +7 -4
  274. package/src/components/Embed.astro +1 -2
  275. package/src/components/File.astro +1 -1
  276. package/src/components/Gallery.astro +1 -1
  277. package/src/components/HtmlBlock.astro +1 -1
  278. package/src/components/Image.astro +5 -3
  279. package/src/components/InlinePortableTextEditor.tsx +1 -2
  280. package/src/components/PortableText.astro +1 -1
  281. package/src/components/WidgetArea.astro +1 -1
  282. package/src/components/WidgetRenderer.astro +1 -3
  283. package/src/components/marks/Link.astro +1 -1
  284. package/src/components/widgets/Archives.astro +1 -1
  285. package/src/components/widgets/Categories.astro +1 -1
  286. package/src/components/widgets/RecentPosts.astro +1 -1
  287. package/src/components/widgets/Tags.astro +1 -1
  288. package/dist/version-DH53KCQd.mjs +0 -6
  289. /package/dist/{activity-events-BsMaXdJa.mjs → activity-events-B4wp7CrU.mjs} +0 -0
  290. /package/dist/{adapters-BLDldpJg.d.mts → adapters-DuLQZhRY.d.mts} +0 -0
  291. /package/dist/{api-tokens-DzloJxuh.mjs → api-tokens-CPjC3zf8.mjs} +0 -0
  292. /package/dist/{challenge-store-DHMgBGOq.mjs → challenge-store-DDTbisbf.mjs} +0 -0
  293. /package/dist/{comments-Gy3zLBaP.mjs → comments--BsZ9pqA.mjs} +0 -0
  294. /package/dist/{components-DND2rd3D.mjs → components-BPknylYg.mjs} +0 -0
  295. /package/dist/{cron-DGzVTtJp.mjs → cron-CKxvBrRT.mjs} +0 -0
  296. /package/dist/{db-errors-DKUg_NgF.mjs → db-errors-DyZkswzF.mjs} +0 -0
  297. /package/dist/{default-C3PZN-bz.mjs → default-D4ngTpW8.mjs} +0 -0
  298. /package/dist/{email-console-CgLVZbcn.mjs → email-console-CuefUXfX.mjs} +0 -0
  299. /package/dist/{error-DEGjx2Xw.mjs → error-BMUPwxgx.mjs} +0 -0
  300. /package/dist/{escape-mNZr4t2A.mjs → escape-BRVaw1Ai.mjs} +0 -0
  301. /package/dist/{experimental-workflows-DldxJlqV.mjs → experimental-workflows-C9X7yblQ.mjs} +0 -0
  302. /package/dist/{load-D-9NhLmF.mjs → load-B2XtDw__.mjs} +0 -0
  303. /package/dist/{manifest-schema-DYoCQ5np.mjs → manifest-schema-CgFJAp0H.mjs} +0 -0
  304. /package/dist/{menus-BacxVCCo.mjs → menus-DS3_5nWY.mjs} +0 -0
  305. /package/dist/{mode-C80mAZQv.mjs → mode-DUhxwUhv.mjs} +0 -0
  306. /package/dist/{oauth-state-store-hSdzxsEe.mjs → oauth-state-store-C5UFhzwD.mjs} +0 -0
  307. /package/dist/{oauth-user-lookup-B4OcmsLV.mjs → oauth-user-lookup-Bi0ek9eM.mjs} +0 -0
  308. /package/dist/{passkey-config-Daqs5fjq.mjs → passkey-config-BRSZx4pW.mjs} +0 -0
  309. /package/dist/{public-url-BB_umF5G.mjs → public-url-Cun8N3NU.mjs} +0 -0
  310. /package/dist/{redirect-ClSmMOtC.mjs → redirect-COZy-3iY.mjs} +0 -0
  311. /package/dist/{redirects-B69T59hK.mjs → redirects-Cgi_cZfN.mjs} +0 -0
  312. /package/dist/{search-DM6CVti3.mjs → search-DqTHQqtV.mjs} +0 -0
  313. /package/dist/{secrets-dI8zzTV7.mjs → secrets-CkoJ9zN0.mjs} +0 -0
  314. /package/dist/{sections-DZFyAQXd.mjs → sections-B61OxnfB.mjs} +0 -0
  315. /package/dist/{seo-BBgTCOYU.mjs → seo-C007Luwn.mjs} +0 -0
  316. /package/dist/{setup-complete-DidsDQ1e.mjs → setup-complete-ChilE-da.mjs} +0 -0
  317. /package/dist/{setup-nonce-pml1PMKo.mjs → setup-nonce-BpmLXAuu.mjs} +0 -0
  318. /package/dist/{sidecar-client-vzwV98K4.mjs → sidecar-client-B1C6Cf80.mjs} +0 -0
  319. /package/dist/{site-url-CYIcO0Tj.mjs → site-url-BP7k7OCe.mjs} +0 -0
  320. /package/dist/{ssrf-CmM76lLV.mjs → ssrf-DDwRxF6B.mjs} +0 -0
  321. /package/dist/{tokens-DLTo4dO2.mjs → tokens-BOJw-D9F.mjs} +0 -0
  322. /package/dist/{transport-6RefuBdV.d.mts → transport-BXe1AM79.d.mts} +0 -0
  323. /package/dist/{transport-C9e_h-BF.mjs → transport-D3i4yWRE.mjs} +0 -0
  324. /package/dist/{trusted-proxy-Bi0Cuk5n.mjs → trusted-proxy-BbaZfkT9.mjs} +0 -0
  325. /package/dist/{types-C982qI5I.d.mts → types-0Vr68fc2.d.mts} +0 -0
  326. /package/dist/{types-B9qVtiHb.d.mts → types-B7kpsMJ3.d.mts} +0 -0
  327. /package/dist/{types-D4XVOt01.d.mts → types-BFmjniC2.d.mts} +0 -0
  328. /package/dist/{types-IPACEM14.d.mts → types-C0mmVRJN.d.mts} +0 -0
  329. /package/dist/{types-Djdp0cZO.d.mts → types-DJlpx5Ay.d.mts} +0 -0
  330. /package/dist/{types-Du8jreyC.d.mts → types-DZPw8Rru.d.mts} +0 -0
  331. /package/dist/{types-B9gKVOHk.mjs → types-fAInWQDO.mjs} +0 -0
  332. /package/dist/{utils-D2in-zwy.mjs → utils-C0ONdBul.mjs} +0 -0
  333. /package/dist/{validate-BJgA6TW_.mjs → validate-C7TzfamJ.mjs} +0 -0
  334. /package/dist/{wordpress-slugs-BevajWrC.mjs → wordpress-slugs-CnporCYH.mjs} +0 -0
@@ -1,29 +1,12 @@
1
- import { $t as EntryFilter, Qt as EntryData, Zt as CollectionFilter, en as dinewayLoader, tn as getDb } from "./runtime-C4-7y7xK.mjs";
2
- import "./types-Du8jreyC.mjs";
3
- import "./types-DgfUZqcd.mjs";
4
- import "./types-D4XVOt01.mjs";
5
- import { f as MediaProvider } from "./placeholder-CHkLckzK.mjs";
6
- import "./runner-9eIQXuc2.mjs";
7
- import "./index-CkljPf5F.mjs";
8
- import "./bylines-HfUKum_j.mjs";
9
- import "./types-C982qI5I.mjs";
10
- import "./validate-JCZihRIa.mjs";
11
-
12
- //#region src/media/provider-loader.d.ts
13
- /**
14
- * Get a media provider by ID.
15
- *
16
- * Used by DinewayMedia component for frontend rendering.
17
- * Providers are lazy-loaded from virtual module and cached.
18
- *
19
- * @example
20
- * ```ts
21
- * const provider = await getMediaProvider("image-cdn");
22
- * if (provider) {
23
- * const embed = provider.getEmbed(mediaValue, { width: 800 });
24
- * }
25
- * ```
26
- */
27
- declare function getMediaProvider(providerId: string): Promise<MediaProvider | undefined>;
28
- //#endregion
1
+ import { ct as CollectionFilter, dt as dinewayLoader, ft as getDb, lt as EntryData, ut as EntryFilter } from "./runtime-QuuFSlc6.mjs";
2
+ import "./types-DZPw8Rru.mjs";
3
+ import "./types-Q616b2Hn.mjs";
4
+ import "./types-BFmjniC2.mjs";
5
+ import "./runner-BU6Lo1ZS.mjs";
6
+ import "./index-EUAWaIxW.mjs";
7
+ import "./index-CYfhYgXd.mjs";
8
+ import "./bylines-DCvz5gtm.mjs";
9
+ import "./types-0Vr68fc2.mjs";
10
+ import "./validate-BwmQEbu8.mjs";
11
+ import { t as getMediaProvider } from "./provider-loader-BiQ6lNmf.mjs";
29
12
  export { type CollectionFilter, type EntryData, type EntryFilter, dinewayLoader, getDb, getMediaProvider };
package/dist/runtime.mjs CHANGED
@@ -2,40 +2,6 @@ import "./dialect-helpers-DhTzaUxP.mjs";
2
2
  import "./base64-Cz-aU0X1.mjs";
3
3
  import "./types-Bs6lTBBW.mjs";
4
4
  import { n as dinewayLoader, r as getDb } from "./loader-PZnPxFLc.mjs";
5
+ import { t as getMediaProvider } from "./provider-loader-C21b9OpH.mjs";
5
6
 
6
- //#region src/media/provider-loader.ts
7
- let virtualMediaProviders;
8
- const mediaProviderInstances = /* @__PURE__ */ new Map();
9
- /**
10
- * Load media providers from virtual module
11
- */
12
- async function loadMediaProviders() {
13
- if (virtualMediaProviders === void 0) virtualMediaProviders = (await import("virtual:dineway/media-providers")).mediaProviders || [];
14
- }
15
- /**
16
- * Get a media provider by ID.
17
- *
18
- * Used by DinewayMedia component for frontend rendering.
19
- * Providers are lazy-loaded from virtual module and cached.
20
- *
21
- * @example
22
- * ```ts
23
- * const provider = await getMediaProvider("image-cdn");
24
- * if (provider) {
25
- * const embed = provider.getEmbed(mediaValue, { width: 800 });
26
- * }
27
- * ```
28
- */
29
- async function getMediaProvider(providerId) {
30
- const cached = mediaProviderInstances.get(providerId);
31
- if (cached) return cached;
32
- await loadMediaProviders();
33
- const entry = virtualMediaProviders?.find((p) => p.id === providerId);
34
- if (!entry) return;
35
- const provider = entry.createProvider({});
36
- mediaProviderInstances.set(providerId, provider);
37
- return provider;
38
- }
39
-
40
- //#endregion
41
7
  export { dinewayLoader, getDb, getMediaProvider };
@@ -0,0 +1,8 @@
1
+ import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
+ import { n as SchemaRegistry } from "./registry-C-_hxLqa.mjs";
3
+
4
+ //#region src/schema/index.ts
5
+ var schema_exports = /* @__PURE__ */ __exportAll({ SchemaRegistry: () => SchemaRegistry });
6
+
7
+ //#endregion
8
+ export { schema_exports as t };
@@ -1,3 +1,3 @@
1
- import "../types-Du8jreyC.mjs";
2
- import { _ as SeedTaxonomyTerm, a as applySeed, b as ValidationResult, c as SeedCollection, d as SeedFile, f as SeedMenu, g as SeedTaxonomy, h as SeedSection, i as defaultSeed, l as SeedContentEntry, m as SeedRedirect, n as loadSeed, o as SeedApplyOptions, p as SeedMenuItem, r as loadUserSeed, s as SeedApplyResult, t as validateSeed, u as SeedField, v as SeedWidget, y as SeedWidgetArea } from "../validate-JCZihRIa.mjs";
1
+ import "../types-DZPw8Rru.mjs";
2
+ import { _ as SeedTaxonomyTerm, a as applySeed, b as ValidationResult, c as SeedCollection, d as SeedFile, f as SeedMenu, g as SeedTaxonomy, h as SeedSection, i as defaultSeed, l as SeedContentEntry, m as SeedRedirect, n as loadSeed, o as SeedApplyOptions, p as SeedMenuItem, r as loadUserSeed, s as SeedApplyResult, t as validateSeed, u as SeedField, v as SeedWidget, y as SeedWidgetArea } from "../validate-BwmQEbu8.mjs";
3
3
  export { type SeedApplyOptions, type SeedApplyResult, type SeedCollection, type SeedContentEntry, type SeedField, type SeedFile, type SeedMenu, type SeedMenuItem, type SeedRedirect, type SeedSection, type SeedTaxonomy, type SeedTaxonomyTerm, type SeedWidget, type SeedWidgetArea, type ValidationResult, applySeed, defaultSeed, loadSeed, loadUserSeed, validateSeed };
@@ -10,12 +10,12 @@ import "../byline-naZxOPSa.mjs";
10
10
  import "../fts-manager-B1pTNEG_.mjs";
11
11
  import "../registry-C-_hxLqa.mjs";
12
12
  import "../loader-PZnPxFLc.mjs";
13
- import "../settings-4XnpVMOS.mjs";
13
+ import "../settings-DGtLLSaz.mjs";
14
14
  import "../request-cache-DHMRr2Lf.mjs";
15
- import "../ssrf-CmM76lLV.mjs";
16
- import { t as validateSeed } from "../validate-BJgA6TW_.mjs";
17
- import { t as applySeed } from "../apply-Co5imxxT.mjs";
18
- import { t as defaultSeed } from "../default-C3PZN-bz.mjs";
19
- import { n as loadUserSeed, t as loadSeed } from "../load-D-9NhLmF.mjs";
15
+ import "../ssrf-DDwRxF6B.mjs";
16
+ import { t as validateSeed } from "../validate-C7TzfamJ.mjs";
17
+ import { t as applySeed } from "../apply-Bm5QgdrE.mjs";
18
+ import { t as defaultSeed } from "../default-D4ngTpW8.mjs";
19
+ import { n as loadUserSeed, t as loadSeed } from "../load-B2XtDw__.mjs";
20
20
 
21
21
  export { applySeed, defaultSeed, loadSeed, loadUserSeed, validateSeed };
@@ -1,4 +1,4 @@
1
- import { i as ContentSeo } from "../types-Djdp0cZO.mjs";
1
+ import { i as ContentSeo } from "../types-DJlpx5Ay.mjs";
2
2
 
3
3
  //#region src/seo/index.d.ts
4
4
  /**
@@ -0,0 +1,429 @@
1
+ //#region src/page/context.ts
2
+ function isAstroInput(input) {
3
+ return "Astro" in input;
4
+ }
5
+ /**
6
+ * Build a PublicPageContext from template input.
7
+ */
8
+ function createPublicPageContext(input) {
9
+ let url;
10
+ let path;
11
+ let locale;
12
+ if (isAstroInput(input)) {
13
+ url = input.Astro.url.href;
14
+ path = input.Astro.url.pathname;
15
+ locale = input.Astro.currentLocale ?? null;
16
+ } else {
17
+ const parsed = typeof input.url === "string" ? new URL(input.url) : input.url;
18
+ url = parsed.href;
19
+ path = parsed.pathname;
20
+ locale = input.locale ?? null;
21
+ }
22
+ return {
23
+ url,
24
+ path,
25
+ locale,
26
+ kind: input.kind,
27
+ pageType: input.pageType ?? (input.kind === "content" ? "article" : "website"),
28
+ title: input.title ?? null,
29
+ pageTitle: input.pageTitle ?? null,
30
+ description: input.description ?? null,
31
+ canonical: input.canonical ?? null,
32
+ image: input.image ?? null,
33
+ content: input.content ? {
34
+ collection: input.content.collection,
35
+ id: input.content.id,
36
+ slug: input.content.slug ?? null
37
+ } : void 0,
38
+ seo: input.seo,
39
+ articleMeta: input.articleMeta,
40
+ siteName: input.siteName,
41
+ breadcrumbs: input.breadcrumbs,
42
+ siteUrl: input.siteUrl
43
+ };
44
+ }
45
+
46
+ //#endregion
47
+ //#region src/page/metadata.ts
48
+ /** Schemes safe for use in link href attributes */
49
+ const SAFE_HREF_RE = /^(https?|at):\/\//i;
50
+ const HTML_ESCAPE_MAP = {
51
+ "&": "&amp;",
52
+ "<": "&lt;",
53
+ ">": "&gt;",
54
+ "\"": "&quot;",
55
+ "'": "&#39;"
56
+ };
57
+ const HTML_ESCAPE_RE = /[&<>"']/g;
58
+ /** Escape a string for safe use in an HTML attribute value */
59
+ function escapeHtmlAttr(value) {
60
+ return value.replace(HTML_ESCAPE_RE, (ch) => HTML_ESCAPE_MAP[ch] ?? ch);
61
+ }
62
+ /** Validate that a URL uses a safe scheme (http, https, at) */
63
+ function isSafeHref(url) {
64
+ return SAFE_HREF_RE.test(url);
65
+ }
66
+ const JSONLD_LT_RE = /</g;
67
+ const JSONLD_GT_RE = />/g;
68
+ const JSONLD_U2028_RE = /\u2028/g;
69
+ const JSONLD_U2029_RE = /\u2029/g;
70
+ /**
71
+ * Safely serialize a value for embedding in a <script type="application/ld+json"> tag.
72
+ *
73
+ * Plain JSON.stringify is not sufficient because:
74
+ * - "<\/script>" in a nested string breaks out of the script tag
75
+ * - "<!--" can open an HTML comment
76
+ * - U+2028/U+2029 are line terminators in some JS engines
77
+ */
78
+ function safeJsonLdSerialize(value) {
79
+ return JSON.stringify(value).replace(JSONLD_LT_RE, "\\u003c").replace(JSONLD_GT_RE, "\\u003e").replace(JSONLD_U2028_RE, "\\u2028").replace(JSONLD_U2029_RE, "\\u2029");
80
+ }
81
+ /**
82
+ * Resolve a flat list of contributions into deduplicated metadata.
83
+ * First contribution wins for any given dedupe key.
84
+ */
85
+ function resolvePageMetadata(contributions) {
86
+ const result = {
87
+ meta: [],
88
+ properties: [],
89
+ links: [],
90
+ jsonld: []
91
+ };
92
+ const seenMeta = /* @__PURE__ */ new Set();
93
+ const seenProperties = /* @__PURE__ */ new Set();
94
+ const seenLinks = /* @__PURE__ */ new Set();
95
+ const seenJsonLd = /* @__PURE__ */ new Set();
96
+ for (const c of contributions) switch (c.kind) {
97
+ case "meta": {
98
+ const dedupeKey = c.key ?? c.name;
99
+ if (seenMeta.has(dedupeKey)) continue;
100
+ seenMeta.add(dedupeKey);
101
+ result.meta.push({
102
+ name: c.name,
103
+ content: c.content
104
+ });
105
+ break;
106
+ }
107
+ case "property": {
108
+ const dedupeKey = c.key ?? c.property;
109
+ if (seenProperties.has(dedupeKey)) continue;
110
+ seenProperties.add(dedupeKey);
111
+ result.properties.push({
112
+ property: c.property,
113
+ content: c.content
114
+ });
115
+ break;
116
+ }
117
+ case "link":
118
+ if (!isSafeHref(c.href)) {
119
+ if (import.meta.env?.DEV) console.warn(`[page:metadata] Rejected link contribution with unsafe href scheme: ${c.href}`);
120
+ continue;
121
+ }
122
+ if (c.rel === "canonical") {
123
+ if (seenLinks.has("canonical")) continue;
124
+ seenLinks.add("canonical");
125
+ } else {
126
+ const dedupeKey = c.key ?? c.hreflang ?? c.href;
127
+ if (seenLinks.has(dedupeKey)) continue;
128
+ seenLinks.add(dedupeKey);
129
+ }
130
+ result.links.push({
131
+ rel: c.rel,
132
+ href: c.href,
133
+ ...c.hreflang && { hreflang: c.hreflang }
134
+ });
135
+ break;
136
+ case "jsonld":
137
+ if (c.id) {
138
+ if (seenJsonLd.has(c.id)) continue;
139
+ seenJsonLd.add(c.id);
140
+ }
141
+ result.jsonld.push({
142
+ id: c.id,
143
+ json: safeJsonLdSerialize(c.graph)
144
+ });
145
+ break;
146
+ default: break;
147
+ }
148
+ return result;
149
+ }
150
+ /** Render resolved metadata to an HTML string for embedding in <head> */
151
+ function renderPageMetadata(metadata) {
152
+ const parts = [];
153
+ for (const m of metadata.meta) parts.push(`<meta name="${escapeHtmlAttr(m.name)}" content="${escapeHtmlAttr(m.content)}">`);
154
+ for (const p of metadata.properties) parts.push(`<meta property="${escapeHtmlAttr(p.property)}" content="${escapeHtmlAttr(p.content)}">`);
155
+ for (const l of metadata.links) {
156
+ let tag = `<link rel="${escapeHtmlAttr(l.rel)}" href="${escapeHtmlAttr(l.href)}"`;
157
+ if (l.hreflang) tag += ` hreflang="${escapeHtmlAttr(l.hreflang)}"`;
158
+ tag += ">";
159
+ parts.push(tag);
160
+ }
161
+ for (const j of metadata.jsonld) parts.push(`<script type="application/ld+json">${j.json}<\/script>`);
162
+ return parts.join("\n");
163
+ }
164
+
165
+ //#endregion
166
+ //#region src/page/fragments.ts
167
+ /** Escape sequences that would break out of a script tag */
168
+ const SCRIPT_CLOSE_RE = /<\//g;
169
+ /**
170
+ * Filter contributions to a specific placement and deduplicate.
171
+ * - Contributions with the same `key + placement` are deduped (first wins).
172
+ * - External scripts with the same `src + placement` are deduped.
173
+ */
174
+ function resolveFragments(contributions, placement) {
175
+ const filtered = contributions.filter((c) => c.placement === placement);
176
+ const seen = /* @__PURE__ */ new Set();
177
+ const result = [];
178
+ for (const c of filtered) {
179
+ if (c.key) {
180
+ const dedupeKey = `key:${c.key}`;
181
+ if (seen.has(dedupeKey)) continue;
182
+ seen.add(dedupeKey);
183
+ } else if (c.kind === "external-script") {
184
+ const dedupeKey = `src:${c.src}`;
185
+ if (seen.has(dedupeKey)) continue;
186
+ seen.add(dedupeKey);
187
+ }
188
+ result.push(c);
189
+ }
190
+ return result;
191
+ }
192
+ const EVENT_HANDLER_RE = /^on/i;
193
+ function renderAttributes(attrs) {
194
+ return Object.entries(attrs).filter(([k]) => !EVENT_HANDLER_RE.test(k)).map(([k, v]) => ` ${escapeHtmlAttr(k)}="${escapeHtmlAttr(v)}"`).join("");
195
+ }
196
+ /** Render a single fragment contribution to HTML */
197
+ function renderFragment(c) {
198
+ switch (c.kind) {
199
+ case "external-script": {
200
+ let tag = `<script src="${escapeHtmlAttr(c.src)}"`;
201
+ if (c.async) tag += " async";
202
+ if (c.defer) tag += " defer";
203
+ if (c.attributes) tag += renderAttributes(c.attributes);
204
+ tag += "><\/script>";
205
+ return tag;
206
+ }
207
+ case "inline-script": {
208
+ let tag = "<script";
209
+ if (c.attributes) tag += renderAttributes(c.attributes);
210
+ tag += `>${c.code.replace(SCRIPT_CLOSE_RE, "<\\/")}<\/script>`;
211
+ return tag;
212
+ }
213
+ case "html": return c.html;
214
+ }
215
+ }
216
+ /** Render a list of fragment contributions to an HTML string */
217
+ function renderFragments(contributions, placement) {
218
+ return resolveFragments(contributions, placement).map(renderFragment).join("\n");
219
+ }
220
+
221
+ //#endregion
222
+ //#region src/page/jsonld.ts
223
+ /**
224
+ * Remove null/undefined values from a JSON-LD object recursively.
225
+ * JSON-LD validators prefer absent keys over null values.
226
+ */
227
+ function cleanJsonLd(obj) {
228
+ const cleaned = {};
229
+ for (const [key, value] of Object.entries(obj)) if (value !== void 0 && value !== null) if (typeof value === "object" && !Array.isArray(value)) cleaned[key] = cleanJsonLd(value);
230
+ else cleaned[key] = value;
231
+ return cleaned;
232
+ }
233
+ /**
234
+ * Build a BlogPosting JSON-LD graph from page context.
235
+ * Used for article-type content pages.
236
+ */
237
+ function buildBlogPostingJsonLd(page) {
238
+ if (page.pageType !== "article" || !page.canonical) return null;
239
+ const ogTitle = page.seo?.ogTitle ?? page.pageTitle ?? page.title;
240
+ const description = page.seo?.ogDescription || page.description;
241
+ const ogImage = page.seo?.ogImage || page.image;
242
+ const publishedTime = page.articleMeta?.publishedTime;
243
+ const modifiedTime = page.articleMeta?.modifiedTime;
244
+ const author = page.articleMeta?.author;
245
+ const siteName = page.siteName;
246
+ return cleanJsonLd({
247
+ "@context": "https://schema.org",
248
+ "@type": "BlogPosting",
249
+ headline: ogTitle,
250
+ description,
251
+ image: ogImage || void 0,
252
+ url: page.canonical,
253
+ datePublished: publishedTime || void 0,
254
+ dateModified: modifiedTime || publishedTime || void 0,
255
+ author: author ? {
256
+ "@type": "Person",
257
+ name: author
258
+ } : void 0,
259
+ publisher: siteName ? {
260
+ "@type": "Organization",
261
+ name: siteName
262
+ } : void 0,
263
+ mainEntityOfPage: {
264
+ "@type": "WebPage",
265
+ "@id": page.canonical
266
+ }
267
+ });
268
+ }
269
+ /**
270
+ * Build a WebSite JSON-LD graph from page context.
271
+ * Used for non-article pages (homepage, listing pages, etc.)
272
+ */
273
+ function buildWebSiteJsonLd(page) {
274
+ const siteName = page.siteName;
275
+ if (!siteName) return null;
276
+ let siteUrl;
277
+ if (page.siteUrl) siteUrl = page.siteUrl;
278
+ else try {
279
+ siteUrl = new URL(page.url).origin;
280
+ } catch {
281
+ siteUrl = page.canonical || page.url;
282
+ }
283
+ return cleanJsonLd({
284
+ "@context": "https://schema.org",
285
+ "@type": "WebSite",
286
+ name: siteName,
287
+ url: siteUrl
288
+ });
289
+ }
290
+
291
+ //#endregion
292
+ //#region src/page/seo-contributions.ts
293
+ /**
294
+ * Generate base metadata contributions from a page context's SEO data.
295
+ * Returns an empty array if no SEO-relevant data is present.
296
+ */
297
+ function generateBaseSeoContributions(page) {
298
+ const contributions = [];
299
+ const description = page.description;
300
+ const ogTitle = page.seo?.ogTitle ?? page.pageTitle ?? page.title;
301
+ const ogDescription = page.seo?.ogDescription || description;
302
+ const ogImage = page.seo?.ogImage || page.image;
303
+ const robots = page.seo?.robots;
304
+ const canonical = page.canonical;
305
+ const siteName = page.siteName;
306
+ if (description) contributions.push({
307
+ kind: "meta",
308
+ name: "description",
309
+ content: description
310
+ });
311
+ if (robots) contributions.push({
312
+ kind: "meta",
313
+ name: "robots",
314
+ content: robots
315
+ });
316
+ if (canonical) contributions.push({
317
+ kind: "link",
318
+ rel: "canonical",
319
+ href: canonical
320
+ });
321
+ contributions.push({
322
+ kind: "property",
323
+ property: "og:type",
324
+ content: page.pageType === "article" ? "article" : "website"
325
+ });
326
+ if (ogTitle) contributions.push({
327
+ kind: "property",
328
+ property: "og:title",
329
+ content: ogTitle
330
+ });
331
+ if (ogDescription) contributions.push({
332
+ kind: "property",
333
+ property: "og:description",
334
+ content: ogDescription
335
+ });
336
+ if (ogImage) contributions.push({
337
+ kind: "property",
338
+ property: "og:image",
339
+ content: ogImage
340
+ });
341
+ if (canonical) contributions.push({
342
+ kind: "property",
343
+ property: "og:url",
344
+ content: canonical
345
+ });
346
+ if (siteName) contributions.push({
347
+ kind: "property",
348
+ property: "og:site_name",
349
+ content: siteName
350
+ });
351
+ contributions.push({
352
+ kind: "meta",
353
+ name: "twitter:card",
354
+ content: ogImage ? "summary_large_image" : "summary"
355
+ });
356
+ if (ogTitle) contributions.push({
357
+ kind: "meta",
358
+ name: "twitter:title",
359
+ content: ogTitle
360
+ });
361
+ if (ogDescription) contributions.push({
362
+ kind: "meta",
363
+ name: "twitter:description",
364
+ content: ogDescription
365
+ });
366
+ if (ogImage) contributions.push({
367
+ kind: "meta",
368
+ name: "twitter:image",
369
+ content: ogImage
370
+ });
371
+ if (page.pageType === "article" && page.articleMeta) {
372
+ const { publishedTime, modifiedTime, author } = page.articleMeta;
373
+ if (publishedTime) contributions.push({
374
+ kind: "property",
375
+ property: "article:published_time",
376
+ content: publishedTime
377
+ });
378
+ if (modifiedTime) contributions.push({
379
+ kind: "property",
380
+ property: "article:modified_time",
381
+ content: modifiedTime
382
+ });
383
+ if (author) contributions.push({
384
+ kind: "property",
385
+ property: "article:author",
386
+ content: author
387
+ });
388
+ }
389
+ if (page.pageType === "article") {
390
+ const blogPosting = buildBlogPostingJsonLd(page);
391
+ if (blogPosting) contributions.push({
392
+ kind: "jsonld",
393
+ id: "primary",
394
+ graph: blogPosting
395
+ });
396
+ } else if (siteName) {
397
+ const webSite = buildWebSiteJsonLd(page);
398
+ if (webSite) contributions.push({
399
+ kind: "jsonld",
400
+ id: "primary",
401
+ graph: webSite
402
+ });
403
+ }
404
+ return contributions;
405
+ }
406
+ /**
407
+ * Generate site-level SEO metadata contributions from SiteSettings.seo.
408
+ *
409
+ * These tags apply to every page, so they're sourced from global site settings
410
+ * rather than page-specific context.
411
+ */
412
+ function generateSiteSeoContributions(seoSettings) {
413
+ const contributions = [];
414
+ if (!seoSettings) return contributions;
415
+ if (seoSettings.googleVerification) contributions.push({
416
+ kind: "meta",
417
+ name: "google-site-verification",
418
+ content: seoSettings.googleVerification
419
+ });
420
+ if (seoSettings.bingVerification) contributions.push({
421
+ kind: "meta",
422
+ name: "msvalidate.01",
423
+ content: seoSettings.bingVerification
424
+ });
425
+ return contributions;
426
+ }
427
+
428
+ //#endregion
429
+ export { cleanJsonLd as a, escapeHtmlAttr as c, safeJsonLdSerialize as d, createPublicPageContext as f, buildWebSiteJsonLd as i, renderPageMetadata as l, generateSiteSeoContributions as n, renderFragments as o, buildBlogPostingJsonLd as r, resolveFragments as s, generateBaseSeoContributions as t, resolvePageMetadata as u };
@@ -1,6 +1,6 @@
1
1
  import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
2
2
  import { t as CommentRepository } from "./comment-DFO-gWDH.mjs";
3
- import { t as escapeHtml } from "./escape-mNZr4t2A.mjs";
3
+ import { t as escapeHtml } from "./escape-BRVaw1Ai.mjs";
4
4
 
5
5
  //#region src/comments/notifications.ts
6
6
  const NOTIFICATION_SOURCE = "dineway-comments";
@@ -5,6 +5,7 @@ import { n as requestCached, t as peekRequestCache } from "./request-cache-DHMRr
5
5
 
6
6
  //#region src/media/url.ts
7
7
  const INTERNAL_MEDIA_PREFIX = "/_dineway/api/media/file/";
8
+ const SAFE_STORAGE_KEY = /^[A-Za-z0-9._-]+$/;
8
9
  function resolvePublicMediaUrl(storage, storageKey) {
9
10
  if (!storageKey) return "";
10
11
  if (storage) return storage.getPublicUrl(storageKey);
@@ -13,6 +14,19 @@ function resolvePublicMediaUrl(storage, storageKey) {
13
14
  function createPublicMediaUrlResolver(storage) {
14
15
  return (key) => resolvePublicMediaUrl(storage, key);
15
16
  }
17
+ function buildRenderMediaUrl(resolve, ref) {
18
+ const { storageKey, url, id } = ref;
19
+ if (storageKey) return resolve ? resolve(storageKey) : `${INTERNAL_MEDIA_PREFIX}${storageKey}`;
20
+ if (url) {
21
+ if (resolve && url.startsWith(INTERNAL_MEDIA_PREFIX)) {
22
+ const key = url.slice(25);
23
+ if (SAFE_STORAGE_KEY.test(key)) return resolve(key);
24
+ }
25
+ return url;
26
+ }
27
+ if (id) return `${INTERNAL_MEDIA_PREFIX}${id}`;
28
+ return "";
29
+ }
16
30
 
17
31
  //#endregion
18
32
  //#region src/settings/index.ts
@@ -220,4 +234,4 @@ async function getPluginSettingsWithDb(pluginId, db) {
220
234
  }
221
235
 
222
236
  //#endregion
223
- export { getSiteSettingsWithDb as a, getSiteSettings as i, getPluginSettings as n, setSiteSettings as o, getSiteSetting as r, createPublicMediaUrlResolver as s, getPluginSetting as t };
237
+ export { getSiteSettingsWithDb as a, createPublicMediaUrlResolver as c, getSiteSettings as i, getPluginSettings as n, setSiteSettings as o, getSiteSetting as r, buildRenderMediaUrl as s, getPluginSetting as t };
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
- import { a as getSiteSettingsWithDb, o as setSiteSettings } from "./settings-4XnpVMOS.mjs";
2
+ import { a as getSiteSettingsWithDb, o as setSiteSettings } from "./settings-DGtLLSaz.mjs";
3
3
 
4
4
  //#region src/api/handlers/settings.ts
5
5
  var settings_exports = /* @__PURE__ */ __exportAll({
@@ -5,14 +5,14 @@ import { t as SiteActivityRepository } from "./site-activity-B8FjLIVh.mjs";
5
5
  import { t as ReviewRequestRepository } from "./review-requests-C2DIHwlJ.mjs";
6
6
  import { n as normalizeEntityAlias, t as EntityAliasRepository } from "./entity-aliases-C0v-yNET.mjs";
7
7
  import { r as isPattern } from "./patterns-K0DLqWir.mjs";
8
- import { a as ContextRepository, i as parseSiteBriefingScope, l as handlePluginList } from "./briefing-BrXCuMEE.mjs";
8
+ import { a as ContextRepository, i as parseSiteBriefingScope, l as handlePluginList } from "./briefing-MVYe_Uyf.mjs";
9
9
  import { t as FTSManager } from "./fts-manager-B1pTNEG_.mjs";
10
10
  import { n as SchemaRegistry } from "./registry-C-_hxLqa.mjs";
11
- import { a as getSiteSettingsWithDb } from "./settings-4XnpVMOS.mjs";
12
- import { p as normalizeUrl } from "./utils-D2in-zwy.mjs";
13
- import { t as sanitizeWordPressImportSlug } from "./wordpress-slugs-BevajWrC.mjs";
14
- import { s as searchCollection } from "./search-DM6CVti3.mjs";
15
- import { n as assertExperimentalSiteContextWorkflowsEnabled } from "./experimental-workflows-DldxJlqV.mjs";
11
+ import { a as getSiteSettingsWithDb } from "./settings-DGtLLSaz.mjs";
12
+ import { p as normalizeUrl } from "./utils-C0ONdBul.mjs";
13
+ import { t as sanitizeWordPressImportSlug } from "./wordpress-slugs-CnporCYH.mjs";
14
+ import { s as searchCollection } from "./search-DqTHQqtV.mjs";
15
+ import { n as assertExperimentalSiteContextWorkflowsEnabled } from "./experimental-workflows-C9X7yblQ.mjs";
16
16
  import { sql } from "kysely";
17
17
  import { ulid } from "ulidx";
18
18
  import { Role } from "@dineway-ai/auth";
@@ -1,4 +1,4 @@
1
- import { a as ListOptions, d as Storage, l as SignedUploadOptions, o as ListResult, p as UploadResult, r as DownloadResult, s as LocalStorageConfig, u as SignedUploadUrl } from "../types-B9qVtiHb.mjs";
1
+ import { a as ListOptions, d as Storage, l as SignedUploadOptions, o as ListResult, p as UploadResult, r as DownloadResult, s as LocalStorageConfig, u as SignedUploadUrl } from "../types-B7kpsMJ3.mjs";
2
2
 
3
3
  //#region src/storage/local.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as DinewayStorageError } from "../types-B9gKVOHk.mjs";
1
+ import { t as DinewayStorageError } from "../types-fAInWQDO.mjs";
2
2
  import { createReadStream, existsSync } from "node:fs";
3
3
  import * as path from "node:path";
4
4
  import mime from "mime/lite";
@@ -1,4 +1,4 @@
1
- import { a as ListOptions, c as S3StorageConfig, d as Storage, l as SignedUploadOptions, o as ListResult, p as UploadResult, r as DownloadResult, u as SignedUploadUrl } from "../types-B9qVtiHb.mjs";
1
+ import { a as ListOptions, c as S3StorageConfig, d as Storage, l as SignedUploadOptions, o as ListResult, p as UploadResult, r as DownloadResult, u as SignedUploadUrl } from "../types-B7kpsMJ3.mjs";
2
2
 
3
3
  //#region src/storage/s3.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as DinewayStorageError } from "../types-B9gKVOHk.mjs";
1
+ import { t as DinewayStorageError } from "../types-fAInWQDO.mjs";
2
2
  import { DeleteObjectCommand, GetObjectCommand, HeadObjectCommand, ListObjectsV2Command, PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
3
3
  import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
4
4
 
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
2
  import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-D_jVet6z.mjs";
3
3
  import { r as getDb } from "./loader-PZnPxFLc.mjs";
4
4
  import { n as requestCached, r as setRequestCacheEntry, t as peekRequestCache } from "./request-cache-DHMRr2Lf.mjs";
5
- import { t as isMissingTableError } from "./db-errors-DKUg_NgF.mjs";
5
+ import { t as isMissingTableError } from "./db-errors-DyZkswzF.mjs";
6
6
 
7
7
  //#region src/taxonomies/index.ts
8
8
  /**
@@ -241,7 +241,7 @@ function primeEntryTermsCache(collection, entryId, byTaxonomy, applicableTaxonom
241
241
  * Get entries by term (wraps getDinewayCollection)
242
242
  */
243
243
  async function getEntriesByTerm(collection, taxonomyName, termSlug) {
244
- const { getDinewayCollection } = await import("./query-RiobVwB5.mjs").then((n) => n.o);
244
+ const { getDinewayCollection } = await import("./query-B9BO5goQ.mjs").then((n) => n.o);
245
245
  const { entries } = await getDinewayCollection(collection, { where: { [taxonomyName]: termSlug } });
246
246
  return entries;
247
247
  }