dineway 0.1.3 → 0.1.5

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 (296) hide show
  1. package/README.md +6 -3
  2. package/dist/{apply-CAPvMfoU.mjs → apply-iVSqz2qs.mjs} +132 -39
  3. package/dist/astro/index.d.mts +18 -9
  4. package/dist/astro/index.mjs +238 -16
  5. package/dist/astro/middleware/auth.d.mts +16 -5
  6. package/dist/astro/middleware/auth.mjs +74 -37
  7. package/dist/astro/middleware/redirect.mjs +24 -8
  8. package/dist/astro/middleware/request-context.mjs +18 -5
  9. package/dist/astro/middleware/setup.mjs +1 -1
  10. package/dist/astro/middleware.mjs +411 -169
  11. package/dist/astro/types.d.mts +25 -8
  12. package/dist/{byline-DeWCMU_i.mjs → byline-OhH2dlRu.mjs} +6 -21
  13. package/dist/{bylines-DyqBV9EQ.mjs → bylines-BGpD9_hy.mjs} +16 -6
  14. package/dist/cache-BdSY-gQN.mjs +42 -0
  15. package/dist/chunks--4F8ddV4.mjs +18 -0
  16. package/dist/cli/index.mjs +935 -15
  17. package/dist/client/external-auth-headers.d.mts +1 -1
  18. package/dist/client/index.d.mts +11 -3
  19. package/dist/client/index.mjs +4 -3
  20. package/dist/{connection-C9pxzuag.mjs → connection-BCNICDWN.mjs} +22 -5
  21. package/dist/{content-zSgdNmnt.mjs → content-DWi4d0rT.mjs} +41 -2
  22. package/dist/database/instrumentation.d.mts +34 -0
  23. package/dist/database/instrumentation.mjs +53 -0
  24. package/dist/db/index.d.mts +3 -3
  25. package/dist/db/index.mjs +2 -2
  26. package/dist/db/libsql.d.mts +1 -1
  27. package/dist/db/libsql.mjs +11 -5
  28. package/dist/db/postgres.d.mts +1 -1
  29. package/dist/db/sqlite.d.mts +1 -1
  30. package/dist/db/sqlite.mjs +7 -1
  31. package/dist/db-errors-CEqD7qH9.mjs +23 -0
  32. package/dist/{default-WYlzADZL.mjs → default-VjJyuuG9.mjs} +2 -0
  33. package/dist/{dialect-helpers-B9uSp2GJ.mjs → dialect-helpers-DhTzaUxP.mjs} +3 -0
  34. package/dist/{error-DrxtnGPg.mjs → error-BmL6QipT.mjs} +7 -3
  35. package/dist/{index-C-jx21qs.d.mts → index-yvc6E_17.d.mts} +157 -30
  36. package/dist/index.d.mts +11 -11
  37. package/dist/index.mjs +24 -22
  38. package/dist/{loader-qKmo0wAY.mjs → loader-sMG4TZ-u.mjs} +9 -3
  39. package/dist/media/index.d.mts +1 -1
  40. package/dist/media/index.mjs +1 -1
  41. package/dist/media/local-runtime.d.mts +7 -7
  42. package/dist/page/index.d.mts +10 -2
  43. package/dist/page/index.mjs +22 -1
  44. package/dist/patterns-CrCYkMBb.mjs +92 -0
  45. package/dist/{placeholder-bOx1xCTY.d.mts → placeholder--wOi4TbO.d.mts} +1 -1
  46. package/dist/{placeholder-B3knXwNc.mjs → placeholder-Cp8g5Emj.mjs} +1 -1
  47. package/dist/plugins/adapt-sandbox-entry.d.mts +5 -5
  48. package/dist/plugins/adapt-sandbox-entry.mjs +1 -1
  49. package/dist/{query-BiaPl_g2.mjs → query-kDmwCsHh.mjs} +118 -50
  50. package/dist/{redirect-JPqLAbxa.mjs → redirect-DnEWAkVg.mjs} +43 -99
  51. package/dist/{registry-DSd1GWB8.mjs → registry-C0zjeB9P.mjs} +191 -123
  52. package/dist/request-cache-Dk5qPSOx.mjs +66 -0
  53. package/dist/request-context.d.mts +4 -16
  54. package/dist/{runner-B5l1JfOj.d.mts → runner-CFI6B6J2.d.mts} +1 -1
  55. package/dist/{runner-BGUGywgG.mjs → runner-DWZm2KQm.mjs} +589 -137
  56. package/dist/runtime.d.mts +6 -6
  57. package/dist/runtime.mjs +2 -2
  58. package/dist/{search-BNruJHDL.mjs → search-ByRGV2pq.mjs} +570 -424
  59. package/dist/seed/index.d.mts +2 -2
  60. package/dist/seed/index.mjs +11 -10
  61. package/dist/seo/index.d.mts +1 -1
  62. package/dist/storage/local.d.mts +1 -1
  63. package/dist/storage/local.mjs +1 -1
  64. package/dist/storage/s3.d.mts +11 -3
  65. package/dist/storage/s3.mjs +78 -15
  66. package/dist/taxonomies-1s5PaS_8.mjs +266 -0
  67. package/dist/transaction-Cn2rjY78.mjs +27 -0
  68. package/dist/{types-BgQeVaPj.d.mts → types-BuMDPy5C.d.mts} +52 -3
  69. package/dist/{types-DuNbGKjF.mjs → types-COeOq9nK.mjs} +6 -1
  70. package/dist/{types-ju-_ORz7.d.mts → types-CWbdtiux.d.mts} +13 -5
  71. package/dist/{types-D38djUXv.d.mts → types-Cj0KMIZV.d.mts} +16 -3
  72. package/dist/{types-DkvMXalq.d.mts → types-DOrVigru.d.mts} +159 -0
  73. package/dist/{validate-CXnRKfJK.mjs → validate-BZ5wnLLp.mjs} +2 -1
  74. package/dist/{validate-DVKJJ-M_.d.mts → validate-IPf8n4Fj.d.mts} +4 -51
  75. package/dist/{validate-CqRJb_xU.mjs → validate-VPnKoIzW.mjs} +10 -10
  76. package/dist/version-BKXPsfmJ.mjs +6 -0
  77. package/package.json +53 -39
  78. package/src/astro/routes/PluginRegistry.tsx +21 -0
  79. package/src/astro/routes/admin.astro +99 -0
  80. package/src/astro/routes/api/admin/allowed-domains/[domain].ts +112 -0
  81. package/src/astro/routes/api/admin/allowed-domains/index.ts +108 -0
  82. package/src/astro/routes/api/admin/api-tokens/[id].ts +44 -0
  83. package/src/astro/routes/api/admin/api-tokens/index.ts +90 -0
  84. package/src/astro/routes/api/admin/briefing.ts +76 -0
  85. package/src/astro/routes/api/admin/bylines/[id]/index.ts +90 -0
  86. package/src/astro/routes/api/admin/bylines/index.ts +74 -0
  87. package/src/astro/routes/api/admin/comments/[id]/status.ts +120 -0
  88. package/src/astro/routes/api/admin/comments/[id].ts +64 -0
  89. package/src/astro/routes/api/admin/comments/bulk.ts +42 -0
  90. package/src/astro/routes/api/admin/comments/counts.ts +30 -0
  91. package/src/astro/routes/api/admin/comments/index.ts +46 -0
  92. package/src/astro/routes/api/admin/context/[id]/history.ts +35 -0
  93. package/src/astro/routes/api/admin/context/[id]/index.ts +35 -0
  94. package/src/astro/routes/api/admin/context/[id]/review.ts +57 -0
  95. package/src/astro/routes/api/admin/context/[id]/supersede.ts +58 -0
  96. package/src/astro/routes/api/admin/context/diff.ts +35 -0
  97. package/src/astro/routes/api/admin/context/index.ts +69 -0
  98. package/src/astro/routes/api/admin/context/stale.ts +35 -0
  99. package/src/astro/routes/api/admin/hitl-requests/[id]/index.ts +38 -0
  100. package/src/astro/routes/api/admin/hitl-requests/[id]/resolve.ts +54 -0
  101. package/src/astro/routes/api/admin/hitl-requests/index.ts +38 -0
  102. package/src/astro/routes/api/admin/hooks/exclusive/[hookName].ts +132 -0
  103. package/src/astro/routes/api/admin/hooks/exclusive/index.ts +51 -0
  104. package/src/astro/routes/api/admin/oauth-clients/[id].ts +137 -0
  105. package/src/astro/routes/api/admin/oauth-clients/index.ts +95 -0
  106. package/src/astro/routes/api/admin/plugins/[id]/disable.ts +91 -0
  107. package/src/astro/routes/api/admin/plugins/[id]/enable.ts +91 -0
  108. package/src/astro/routes/api/admin/plugins/[id]/index.ts +38 -0
  109. package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +98 -0
  110. package/src/astro/routes/api/admin/plugins/[id]/update.ts +154 -0
  111. package/src/astro/routes/api/admin/plugins/index.ts +32 -0
  112. package/src/astro/routes/api/admin/plugins/marketplace/[id]/icon.ts +62 -0
  113. package/src/astro/routes/api/admin/plugins/marketplace/[id]/index.ts +33 -0
  114. package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +135 -0
  115. package/src/astro/routes/api/admin/plugins/marketplace/index.ts +38 -0
  116. package/src/astro/routes/api/admin/plugins/updates.ts +28 -0
  117. package/src/astro/routes/api/admin/review-requests/[id]/index.ts +35 -0
  118. package/src/astro/routes/api/admin/review-requests/[id]/resolve.ts +52 -0
  119. package/src/astro/routes/api/admin/review-requests/index.ts +35 -0
  120. package/src/astro/routes/api/admin/themes/marketplace/[id]/index.ts +33 -0
  121. package/src/astro/routes/api/admin/themes/marketplace/[id]/thumbnail.ts +62 -0
  122. package/src/astro/routes/api/admin/themes/marketplace/index.ts +45 -0
  123. package/src/astro/routes/api/admin/users/[id]/disable.ts +72 -0
  124. package/src/astro/routes/api/admin/users/[id]/enable.ts +48 -0
  125. package/src/astro/routes/api/admin/users/[id]/index.ts +166 -0
  126. package/src/astro/routes/api/admin/users/[id]/send-recovery.ts +72 -0
  127. package/src/astro/routes/api/admin/users/index.ts +66 -0
  128. package/src/astro/routes/api/auth/dev-bypass.ts +139 -0
  129. package/src/astro/routes/api/auth/invite/accept.ts +52 -0
  130. package/src/astro/routes/api/auth/invite/complete.ts +86 -0
  131. package/src/astro/routes/api/auth/invite/index.ts +99 -0
  132. package/src/astro/routes/api/auth/invite/register-options.ts +73 -0
  133. package/src/astro/routes/api/auth/logout.ts +40 -0
  134. package/src/astro/routes/api/auth/magic-link/send.ts +90 -0
  135. package/src/astro/routes/api/auth/magic-link/verify.ts +71 -0
  136. package/src/astro/routes/api/auth/me.ts +60 -0
  137. package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +221 -0
  138. package/src/astro/routes/api/auth/oauth/[provider].ts +120 -0
  139. package/src/astro/routes/api/auth/passkey/[id].ts +124 -0
  140. package/src/astro/routes/api/auth/passkey/index.ts +54 -0
  141. package/src/astro/routes/api/auth/passkey/options.ts +85 -0
  142. package/src/astro/routes/api/auth/passkey/register/options.ts +88 -0
  143. package/src/astro/routes/api/auth/passkey/register/verify.ts +119 -0
  144. package/src/astro/routes/api/auth/passkey/verify.ts +72 -0
  145. package/src/astro/routes/api/auth/signup/complete.ts +87 -0
  146. package/src/astro/routes/api/auth/signup/request.ts +89 -0
  147. package/src/astro/routes/api/auth/signup/verify.ts +53 -0
  148. package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +310 -0
  149. package/src/astro/routes/api/content/[collection]/[id]/compare.ts +28 -0
  150. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +68 -0
  151. package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +77 -0
  152. package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +42 -0
  153. package/src/astro/routes/api/content/[collection]/[id]/preview-url.ts +107 -0
  154. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +100 -0
  155. package/src/astro/routes/api/content/[collection]/[id]/restore.ts +64 -0
  156. package/src/astro/routes/api/content/[collection]/[id]/revisions.ts +31 -0
  157. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +129 -0
  158. package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +143 -0
  159. package/src/astro/routes/api/content/[collection]/[id]/translations.ts +50 -0
  160. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +69 -0
  161. package/src/astro/routes/api/content/[collection]/[id].ts +173 -0
  162. package/src/astro/routes/api/content/[collection]/index.ts +103 -0
  163. package/src/astro/routes/api/content/[collection]/trash.ts +33 -0
  164. package/src/astro/routes/api/dashboard.ts +32 -0
  165. package/src/astro/routes/api/dev/emails.ts +36 -0
  166. package/src/astro/routes/api/health.ts +54 -0
  167. package/src/astro/routes/api/import/probe.ts +47 -0
  168. package/src/astro/routes/api/import/wordpress/analyze.ts +523 -0
  169. package/src/astro/routes/api/import/wordpress/execute.ts +330 -0
  170. package/src/astro/routes/api/import/wordpress/media.ts +338 -0
  171. package/src/astro/routes/api/import/wordpress/prepare.ts +212 -0
  172. package/src/astro/routes/api/import/wordpress/rewrite-urls.ts +425 -0
  173. package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +111 -0
  174. package/src/astro/routes/api/import/wordpress-plugin/callback.ts +58 -0
  175. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +399 -0
  176. package/src/astro/routes/api/manifest.ts +75 -0
  177. package/src/astro/routes/api/mcp.ts +125 -0
  178. package/src/astro/routes/api/media/[id]/confirm.ts +93 -0
  179. package/src/astro/routes/api/media/[id].ts +145 -0
  180. package/src/astro/routes/api/media/file/[...key].ts +79 -0
  181. package/src/astro/routes/api/media/providers/[providerId]/[itemId].ts +91 -0
  182. package/src/astro/routes/api/media/providers/[providerId]/index.ts +111 -0
  183. package/src/astro/routes/api/media/providers/index.ts +30 -0
  184. package/src/astro/routes/api/media/upload-url.ts +146 -0
  185. package/src/astro/routes/api/media.ts +204 -0
  186. package/src/astro/routes/api/menus/[name]/items.ts +206 -0
  187. package/src/astro/routes/api/menus/[name]/reorder.ts +79 -0
  188. package/src/astro/routes/api/menus/[name].ts +145 -0
  189. package/src/astro/routes/api/menus/index.ts +91 -0
  190. package/src/astro/routes/api/oauth/authorize.ts +430 -0
  191. package/src/astro/routes/api/oauth/device/authorize.ts +45 -0
  192. package/src/astro/routes/api/oauth/device/code.ts +56 -0
  193. package/src/astro/routes/api/oauth/device/token.ts +70 -0
  194. package/src/astro/routes/api/oauth/register.ts +182 -0
  195. package/src/astro/routes/api/oauth/token/refresh.ts +38 -0
  196. package/src/astro/routes/api/oauth/token/revoke.ts +38 -0
  197. package/src/astro/routes/api/oauth/token.ts +195 -0
  198. package/src/astro/routes/api/openapi.json.ts +33 -0
  199. package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +109 -0
  200. package/src/astro/routes/api/redirects/404s/index.ts +72 -0
  201. package/src/astro/routes/api/redirects/404s/summary.ts +33 -0
  202. package/src/astro/routes/api/redirects/[id].ts +183 -0
  203. package/src/astro/routes/api/redirects/index.ts +100 -0
  204. package/src/astro/routes/api/revisions/[revisionId]/index.ts +29 -0
  205. package/src/astro/routes/api/revisions/[revisionId]/restore.ts +62 -0
  206. package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +104 -0
  207. package/src/astro/routes/api/schema/collections/[slug]/fields/index.ts +67 -0
  208. package/src/astro/routes/api/schema/collections/[slug]/fields/reorder.ts +45 -0
  209. package/src/astro/routes/api/schema/collections/[slug]/index.ts +107 -0
  210. package/src/astro/routes/api/schema/collections/index.ts +61 -0
  211. package/src/astro/routes/api/schema/index.ts +109 -0
  212. package/src/astro/routes/api/schema/orphans/[slug].ts +36 -0
  213. package/src/astro/routes/api/schema/orphans/index.ts +26 -0
  214. package/src/astro/routes/api/search/enable.ts +64 -0
  215. package/src/astro/routes/api/search/index.ts +52 -0
  216. package/src/astro/routes/api/search/rebuild.ts +72 -0
  217. package/src/astro/routes/api/search/stats.ts +35 -0
  218. package/src/astro/routes/api/search/suggest.ts +50 -0
  219. package/src/astro/routes/api/sections/[slug].ts +203 -0
  220. package/src/astro/routes/api/sections/index.ts +107 -0
  221. package/src/astro/routes/api/settings/email.ts +150 -0
  222. package/src/astro/routes/api/settings.ts +116 -0
  223. package/src/astro/routes/api/setup/admin-verify.ts +122 -0
  224. package/src/astro/routes/api/setup/admin.ts +104 -0
  225. package/src/astro/routes/api/setup/dev-bypass.ts +200 -0
  226. package/src/astro/routes/api/setup/dev-reset.ts +40 -0
  227. package/src/astro/routes/api/setup/index.ts +128 -0
  228. package/src/astro/routes/api/setup/status.ts +122 -0
  229. package/src/astro/routes/api/snapshot.ts +76 -0
  230. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +232 -0
  231. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +131 -0
  232. package/src/astro/routes/api/taxonomies/index.ts +114 -0
  233. package/src/astro/routes/api/themes/preview.ts +78 -0
  234. package/src/astro/routes/api/typegen.ts +114 -0
  235. package/src/astro/routes/api/well-known/auth.ts +71 -0
  236. package/src/astro/routes/api/well-known/oauth-authorization-server.ts +48 -0
  237. package/src/astro/routes/api/well-known/oauth-protected-resource.ts +39 -0
  238. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +114 -0
  239. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +213 -0
  240. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +126 -0
  241. package/src/astro/routes/api/widget-areas/[name].ts +135 -0
  242. package/src/astro/routes/api/widget-areas/index.ts +149 -0
  243. package/src/astro/routes/api/widget-components.ts +22 -0
  244. package/src/astro/routes/robots.txt.ts +81 -0
  245. package/src/astro/routes/sitemap-[collection].xml.ts +104 -0
  246. package/src/astro/routes/sitemap.xml.ts +92 -0
  247. package/src/components/Break.astro +45 -0
  248. package/src/components/Button.astro +71 -0
  249. package/src/components/Buttons.astro +49 -0
  250. package/src/components/Code.astro +59 -0
  251. package/src/components/Columns.astro +59 -0
  252. package/src/components/CommentForm.astro +315 -0
  253. package/src/components/Comments.astro +232 -0
  254. package/src/components/Cover.astro +128 -0
  255. package/src/components/DinewayBodyEnd.astro +32 -0
  256. package/src/components/DinewayBodyStart.astro +32 -0
  257. package/src/components/DinewayHead.astro +61 -0
  258. package/src/components/DinewayImage.astro +178 -0
  259. package/src/components/DinewayMedia.astro +167 -0
  260. package/src/components/Embed.astro +128 -0
  261. package/src/components/File.astro +122 -0
  262. package/src/components/Gallery.astro +93 -0
  263. package/src/components/HtmlBlock.astro +33 -0
  264. package/src/components/Image.astro +178 -0
  265. package/src/components/InlineEditor.astro +27 -0
  266. package/src/components/InlinePortableTextEditor.tsx +1937 -0
  267. package/src/components/LiveSearch.astro +614 -0
  268. package/src/components/PortableText.astro +51 -0
  269. package/src/components/Pullquote.astro +51 -0
  270. package/src/components/Table.astro +135 -0
  271. package/src/components/WidgetArea.astro +22 -0
  272. package/src/components/WidgetRenderer.astro +72 -0
  273. package/src/components/index.ts +106 -0
  274. package/src/components/marks/Link.astro +31 -0
  275. package/src/components/marks/StrikeThrough.astro +7 -0
  276. package/src/components/marks/Subscript.astro +7 -0
  277. package/src/components/marks/Superscript.astro +7 -0
  278. package/src/components/marks/Underline.astro +7 -0
  279. package/src/components/marks.ts +19 -0
  280. package/src/components/widgets/Archives.astro +65 -0
  281. package/src/components/widgets/Categories.astro +35 -0
  282. package/src/components/widgets/RecentPosts.astro +51 -0
  283. package/src/components/widgets/Search.astro +18 -0
  284. package/src/components/widgets/Tags.astro +38 -0
  285. package/src/ui.ts +75 -0
  286. package/LICENSE +0 -9
  287. /package/dist/{adapters-BlzWJG82.d.mts → adapters-C2ypTrZZ.d.mts} +0 -0
  288. /package/dist/{config-Cq8H0SfX.mjs → config-BXwuX8Bx.mjs} +0 -0
  289. /package/dist/{load-C6FCD1FU.mjs → load-Coc9HpHH.mjs} +0 -0
  290. /package/dist/{manifest-schema-CTSEyIJ3.mjs → manifest-schema-D1MSVnoI.mjs} +0 -0
  291. /package/dist/{mode-BlyYtIFO.mjs → mode-47goXBBK.mjs} +0 -0
  292. /package/dist/{tokens-4vgYuXsZ.mjs → tokens-CJz9ubV6.mjs} +0 -0
  293. /package/dist/{transport-C5FYnid7.mjs → transport-DB5eDN4x.mjs} +0 -0
  294. /package/dist/{transport-gIL-e43D.d.mts → transport-Wge_IzKl.d.mts} +0 -0
  295. /package/dist/{types-CLLdsG3g.d.mts → types-BzcUjoqg.d.mts} +0 -0
  296. /package/dist/{types-DShnjzb6.mjs → types-griIBQOQ.mjs} +0 -0
@@ -1,3 +1,3 @@
1
- import "../types-DkvMXalq.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-DVKJJ-M_.mjs";
1
+ import "../types-DOrVigru.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-IPf8n4Fj.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 };
@@ -1,15 +1,16 @@
1
- import "../dialect-helpers-B9uSp2GJ.mjs";
2
- import "../content-zSgdNmnt.mjs";
1
+ import "../dialect-helpers-DhTzaUxP.mjs";
2
+ import "../content-DWi4d0rT.mjs";
3
3
  import "../base64-F8-DUraK.mjs";
4
4
  import "../types-BawVha09.mjs";
5
5
  import "../media-DMTr80Gv.mjs";
6
- import { t as applySeed } from "../apply-CAPvMfoU.mjs";
7
- import "../registry-DSd1GWB8.mjs";
8
- import "../redirect-JPqLAbxa.mjs";
9
- import "../byline-DeWCMU_i.mjs";
10
- import "../loader-qKmo0wAY.mjs";
11
- import { t as validateSeed } from "../validate-CXnRKfJK.mjs";
12
- import { t as defaultSeed } from "../default-WYlzADZL.mjs";
13
- import { n as loadUserSeed, t as loadSeed } from "../load-C6FCD1FU.mjs";
6
+ import { t as applySeed } from "../apply-iVSqz2qs.mjs";
7
+ import "../redirect-DnEWAkVg.mjs";
8
+ import "../byline-OhH2dlRu.mjs";
9
+ import "../registry-C0zjeB9P.mjs";
10
+ import "../loader-sMG4TZ-u.mjs";
11
+ import "../request-cache-Dk5qPSOx.mjs";
12
+ import { t as validateSeed } from "../validate-BZ5wnLLp.mjs";
13
+ import { t as defaultSeed } from "../default-VjJyuuG9.mjs";
14
+ import { n as loadUserSeed, t as loadSeed } from "../load-Coc9HpHH.mjs";
14
15
 
15
16
  export { applySeed, defaultSeed, loadSeed, loadUserSeed, validateSeed };
@@ -1,4 +1,4 @@
1
- import { i as ContentSeo } from "../types-CLLdsG3g.mjs";
1
+ import { i as ContentSeo } from "../types-BzcUjoqg.mjs";
2
2
 
3
3
  //#region src/seo/index.d.ts
4
4
  /**
@@ -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-ju-_ORz7.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-CWbdtiux.mjs";
2
2
 
3
3
  //#region src/storage/local.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { t as DinewayStorageError } from "../types-DShnjzb6.mjs";
1
+ import { t as DinewayStorageError } from "../types-griIBQOQ.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,6 +1,14 @@
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-ju-_ORz7.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-CWbdtiux.mjs";
2
2
 
3
3
  //#region src/storage/s3.d.ts
4
+ /**
5
+ * Merge explicit S3 config with runtime S3_* env vars.
6
+ *
7
+ * Explicit non-empty values win. Env vars are only read for omitted fields,
8
+ * which lets one container image receive credentials at runtime without
9
+ * making malformed env vars override intentional config.
10
+ */
11
+ declare function resolveS3Config(partial: Record<string, unknown>): S3StorageConfig;
4
12
  /**
5
13
  * S3-compatible storage implementation
6
14
  */
@@ -24,8 +32,8 @@ declare class S3Storage implements Storage {
24
32
  }
25
33
  /**
26
34
  * Create S3 storage adapter
27
- * This is the factory function called at runtime
35
+ * This is the factory function called at runtime.
28
36
  */
29
37
  declare function createStorage(config: Record<string, unknown>): Storage;
30
38
  //#endregion
31
- export { S3Storage, createStorage };
39
+ export { S3Storage, createStorage, resolveS3Config };
@@ -1,4 +1,4 @@
1
- import { t as DinewayStorageError } from "../types-DShnjzb6.mjs";
1
+ import { t as DinewayStorageError } from "../types-griIBQOQ.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
 
@@ -9,7 +9,79 @@ import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
9
9
  * Uses the AWS SDK v3 for S3 operations.
10
10
  * Works with AWS S3, Cloudflare R2, Minio, and other S3-compatible services.
11
11
  */
12
+ const ENV_KEYS = {
13
+ endpoint: "S3_ENDPOINT",
14
+ bucket: "S3_BUCKET",
15
+ accessKeyId: "S3_ACCESS_KEY_ID",
16
+ secretAccessKey: "S3_SECRET_ACCESS_KEY",
17
+ region: "S3_REGION",
18
+ publicUrl: "S3_PUBLIC_URL"
19
+ };
12
20
  const TRAILING_SLASH_PATTERN = /\/$/;
21
+ function failConfig(message) {
22
+ throw new DinewayStorageError(message, "MISSING_S3_CONFIG");
23
+ }
24
+ function isConfigKey(key) {
25
+ return key in ENV_KEYS;
26
+ }
27
+ function getRuntimeEnv(key) {
28
+ if (typeof process === "undefined" || !process.env) return void 0;
29
+ const value = process.env[key];
30
+ return value === "" ? void 0 : value;
31
+ }
32
+ function getPresentExplicitValue(partial, field) {
33
+ const value = partial[field];
34
+ return value === "" ? void 0 : value;
35
+ }
36
+ function isHttpEndpoint(value) {
37
+ try {
38
+ const url = new URL(value);
39
+ return (url.protocol === "http:" || url.protocol === "https:") && url.hostname.length > 0;
40
+ } catch {
41
+ return false;
42
+ }
43
+ }
44
+ /**
45
+ * Merge explicit S3 config with runtime S3_* env vars.
46
+ *
47
+ * Explicit non-empty values win. Env vars are only read for omitted fields,
48
+ * which lets one container image receive credentials at runtime without
49
+ * making malformed env vars override intentional config.
50
+ */
51
+ function resolveS3Config(partial) {
52
+ const merged = {};
53
+ const explicitSources = /* @__PURE__ */ new Set();
54
+ for (const [field, envKey] of Object.entries(ENV_KEYS)) {
55
+ if (!isConfigKey(field)) continue;
56
+ const explicit = getPresentExplicitValue(partial, field);
57
+ if (explicit !== void 0) {
58
+ if (typeof explicit !== "string") failConfig(`s3({ ${field} }) must be a string`);
59
+ merged[field] = explicit;
60
+ explicitSources.add(field);
61
+ continue;
62
+ }
63
+ const envValue = getRuntimeEnv(envKey);
64
+ if (envValue !== void 0) merged[field] = envValue;
65
+ }
66
+ const endpoint = merged.endpoint;
67
+ const bucket = merged.bucket;
68
+ const missing = [];
69
+ if (!endpoint) missing.push("endpoint: set S3_ENDPOINT or pass endpoint to s3({...})");
70
+ if (!bucket) missing.push("bucket: set S3_BUCKET or pass bucket to s3({...})");
71
+ if (!endpoint || !bucket) failConfig(`missing required S3 config: ${missing.join("; ")}`);
72
+ if (!isHttpEndpoint(endpoint)) failConfig(`${explicitSources.has("endpoint") ? "s3({ endpoint })" : ENV_KEYS.endpoint} is not a valid http/https URL`);
73
+ const { accessKeyId, secretAccessKey } = merged;
74
+ if (accessKeyId && !secretAccessKey) failConfig(`S3 credentials incomplete: accessKeyId is set but secretAccessKey is missing (set ${ENV_KEYS.secretAccessKey} or pass secretAccessKey to s3({...}))`);
75
+ if (secretAccessKey && !accessKeyId) failConfig(`S3 credentials incomplete: secretAccessKey is set but accessKeyId is missing (set ${ENV_KEYS.accessKeyId} or pass accessKeyId to s3({...}))`);
76
+ return {
77
+ endpoint,
78
+ bucket,
79
+ accessKeyId,
80
+ secretAccessKey,
81
+ region: merged.region,
82
+ publicUrl: merged.publicUrl
83
+ };
84
+ }
13
85
  /** Type guard for AWS SDK errors (have a `name` property) */
14
86
  function hasErrorName(error) {
15
87
  return error instanceof Error && typeof error.name === "string";
@@ -29,10 +101,10 @@ var S3Storage = class {
29
101
  this.client = new S3Client({
30
102
  endpoint: config.endpoint,
31
103
  region: config.region || "auto",
32
- credentials: {
104
+ ...config.accessKeyId && config.secretAccessKey ? { credentials: {
33
105
  accessKeyId: config.accessKeyId,
34
106
  secretAccessKey: config.secretAccessKey
35
- },
107
+ } } : {},
36
108
  forcePathStyle: true
37
109
  });
38
110
  }
@@ -155,20 +227,11 @@ var S3Storage = class {
155
227
  };
156
228
  /**
157
229
  * Create S3 storage adapter
158
- * This is the factory function called at runtime
230
+ * This is the factory function called at runtime.
159
231
  */
160
232
  function createStorage(config) {
161
- const { endpoint, bucket, accessKeyId, secretAccessKey, region, publicUrl } = config;
162
- if (typeof endpoint !== "string" || typeof bucket !== "string" || typeof accessKeyId !== "string" || typeof secretAccessKey !== "string") throw new Error("S3Storage requires 'endpoint', 'bucket', 'accessKeyId', and 'secretAccessKey' string config values");
163
- return new S3Storage({
164
- endpoint,
165
- bucket,
166
- accessKeyId,
167
- secretAccessKey,
168
- region: typeof region === "string" ? region : void 0,
169
- publicUrl: typeof publicUrl === "string" ? publicUrl : void 0
170
- });
233
+ return new S3Storage(resolveS3Config(config));
171
234
  }
172
235
 
173
236
  //#endregion
174
- export { S3Storage, createStorage };
237
+ export { S3Storage, createStorage, resolveS3Config };
@@ -0,0 +1,266 @@
1
+ import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
+ import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks--4F8ddV4.mjs";
3
+ import { n as getDb } from "./loader-sMG4TZ-u.mjs";
4
+ import { n as requestCached, r as setRequestCacheEntry } from "./request-cache-Dk5qPSOx.mjs";
5
+ import { t as isMissingTableError } from "./db-errors-CEqD7qH9.mjs";
6
+
7
+ //#region src/taxonomies/index.ts
8
+ /**
9
+ * Runtime API for taxonomies
10
+ *
11
+ * Provides functions to query taxonomy definitions and terms.
12
+ */
13
+ var taxonomies_exports = /* @__PURE__ */ __exportAll({
14
+ getAllTermsForEntries: () => getAllTermsForEntries,
15
+ getEntriesByTerm: () => getEntriesByTerm,
16
+ getEntryTerms: () => getEntryTerms,
17
+ getTaxonomyDef: () => getTaxonomyDef,
18
+ getTaxonomyDefs: () => getTaxonomyDefs,
19
+ getTaxonomyTerms: () => getTaxonomyTerms,
20
+ getTerm: () => getTerm,
21
+ getTermsForEntries: () => getTermsForEntries
22
+ });
23
+ /**
24
+ * Get all taxonomy definitions
25
+ */
26
+ async function getTaxonomyDefs() {
27
+ return requestCached("taxonomy-defs:all", async () => {
28
+ return (await (await getDb()).selectFrom("_dineway_taxonomy_defs").selectAll().execute()).map((row) => ({
29
+ id: row.id,
30
+ name: row.name,
31
+ label: row.label,
32
+ labelSingular: row.label_singular ?? void 0,
33
+ hierarchical: row.hierarchical === 1,
34
+ collections: row.collections ? JSON.parse(row.collections) : []
35
+ }));
36
+ });
37
+ }
38
+ /**
39
+ * Get a single taxonomy definition by name
40
+ */
41
+ async function getTaxonomyDef(name) {
42
+ return requestCached(`taxonomy-def:${name}`, async () => {
43
+ const row = await (await getDb()).selectFrom("_dineway_taxonomy_defs").selectAll().where("name", "=", name).executeTakeFirst();
44
+ if (!row) return null;
45
+ return {
46
+ id: row.id,
47
+ name: row.name,
48
+ label: row.label,
49
+ labelSingular: row.label_singular ?? void 0,
50
+ hierarchical: row.hierarchical === 1,
51
+ collections: row.collections ? JSON.parse(row.collections) : []
52
+ };
53
+ });
54
+ }
55
+ /**
56
+ * Get all terms for a taxonomy (as tree for hierarchical, flat for tags)
57
+ */
58
+ async function getTaxonomyTerms(taxonomyName) {
59
+ return requestCached(`taxonomy-terms:${taxonomyName}`, async () => {
60
+ const db = await getDb();
61
+ const def = await getTaxonomyDef(taxonomyName);
62
+ if (!def) return [];
63
+ const rows = await db.selectFrom("taxonomies").selectAll().where("name", "=", taxonomyName).orderBy("label", "asc").execute();
64
+ const countsResult = await db.selectFrom("content_taxonomies").select(["taxonomy_id"]).select((eb) => eb.fn.count("entry_id").as("count")).groupBy("taxonomy_id").execute();
65
+ const counts = /* @__PURE__ */ new Map();
66
+ for (const row of countsResult) counts.set(row.taxonomy_id, row.count);
67
+ const flatTerms = rows.map((row) => ({
68
+ id: row.id,
69
+ name: row.name,
70
+ slug: row.slug,
71
+ label: row.label,
72
+ parent_id: row.parent_id,
73
+ data: row.data
74
+ }));
75
+ if (def.hierarchical) return buildTree(flatTerms, counts);
76
+ return flatTerms.map((term) => ({
77
+ id: term.id,
78
+ name: term.name,
79
+ slug: term.slug,
80
+ label: term.label,
81
+ children: [],
82
+ count: counts.get(term.id) ?? 0
83
+ }));
84
+ });
85
+ }
86
+ /**
87
+ * Get a single term by taxonomy and slug
88
+ */
89
+ async function getTerm(taxonomyName, slug) {
90
+ const db = await getDb();
91
+ const row = await db.selectFrom("taxonomies").selectAll().where("name", "=", taxonomyName).where("slug", "=", slug).executeTakeFirst();
92
+ if (!row) return null;
93
+ const count = (await db.selectFrom("content_taxonomies").select((eb) => eb.fn.count("entry_id").as("count")).where("taxonomy_id", "=", row.id).executeTakeFirst())?.count ?? 0;
94
+ const children = (await db.selectFrom("taxonomies").selectAll().where("parent_id", "=", row.id).orderBy("label", "asc").execute()).map((child) => ({
95
+ id: child.id,
96
+ name: child.name,
97
+ slug: child.slug,
98
+ label: child.label,
99
+ parentId: child.parent_id ?? void 0,
100
+ children: []
101
+ }));
102
+ return {
103
+ id: row.id,
104
+ name: row.name,
105
+ slug: row.slug,
106
+ label: row.label,
107
+ parentId: row.parent_id ?? void 0,
108
+ description: row.data ? JSON.parse(row.data).description : void 0,
109
+ children,
110
+ count
111
+ };
112
+ }
113
+ /**
114
+ * Get terms assigned to an entry
115
+ */
116
+ function getEntryTerms(collection, entryId, taxonomyName) {
117
+ return requestCached(`terms:${collection}:${entryId}:${taxonomyName ?? "*"}`, async () => {
118
+ let query = (await getDb()).selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.id", "content_taxonomies.taxonomy_id").selectAll("taxonomies").where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "=", entryId);
119
+ if (taxonomyName) query = query.where("taxonomies.name", "=", taxonomyName);
120
+ return (await query.execute()).map((row) => ({
121
+ id: row.id,
122
+ name: row.name,
123
+ slug: row.slug,
124
+ label: row.label,
125
+ parentId: row.parent_id ?? void 0,
126
+ children: []
127
+ }));
128
+ });
129
+ }
130
+ /**
131
+ * Get terms for multiple entries in a single query (batched API)
132
+ *
133
+ * This is more efficient than calling getEntryTerms for each entry
134
+ * when you need terms for a list of entries.
135
+ *
136
+ * @param collection - The collection type (e.g., "posts")
137
+ * @param entryIds - Array of entry IDs
138
+ * @param taxonomyName - The taxonomy name (e.g., "categories")
139
+ * @returns Map from entry ID to array of terms
140
+ */
141
+ async function getTermsForEntries(collection, entryIds, taxonomyName) {
142
+ const result = /* @__PURE__ */ new Map();
143
+ const uniqueIds = [...new Set(entryIds)];
144
+ for (const id of uniqueIds) result.set(id, []);
145
+ if (uniqueIds.length === 0) return result;
146
+ const db = await getDb();
147
+ for (const chunk of chunks(uniqueIds, SQL_BATCH_SIZE)) {
148
+ let rows;
149
+ try {
150
+ rows = await db.selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.id", "content_taxonomies.taxonomy_id").select([
151
+ "content_taxonomies.entry_id",
152
+ "taxonomies.id",
153
+ "taxonomies.name",
154
+ "taxonomies.slug",
155
+ "taxonomies.label",
156
+ "taxonomies.parent_id"
157
+ ]).where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "in", chunk).where("taxonomies.name", "=", taxonomyName).execute();
158
+ } catch (error) {
159
+ if (isMissingTableError(error)) return result;
160
+ throw error;
161
+ }
162
+ for (const row of rows) {
163
+ const entryId = row.entry_id;
164
+ const term = {
165
+ id: row.id,
166
+ name: row.name,
167
+ slug: row.slug,
168
+ label: row.label,
169
+ parentId: row.parent_id ?? void 0,
170
+ children: []
171
+ };
172
+ const terms = result.get(entryId);
173
+ if (terms) terms.push(term);
174
+ }
175
+ }
176
+ return result;
177
+ }
178
+ async function getAllTermsForEntries(collection, entryIds) {
179
+ const result = /* @__PURE__ */ new Map();
180
+ const uniqueIds = [...new Set(entryIds)];
181
+ for (const id of uniqueIds) result.set(id, {});
182
+ if (uniqueIds.length === 0) return result;
183
+ const db = await getDb();
184
+ const applicableTaxonomyNames = await getCollectionTaxonomyNames(collection);
185
+ for (const chunk of chunks(uniqueIds, SQL_BATCH_SIZE)) {
186
+ let rows;
187
+ try {
188
+ rows = await db.selectFrom("content_taxonomies").innerJoin("taxonomies", "taxonomies.id", "content_taxonomies.taxonomy_id").select([
189
+ "content_taxonomies.entry_id",
190
+ "taxonomies.id",
191
+ "taxonomies.name",
192
+ "taxonomies.slug",
193
+ "taxonomies.label",
194
+ "taxonomies.parent_id"
195
+ ]).where("content_taxonomies.collection", "=", collection).where("content_taxonomies.entry_id", "in", chunk).orderBy("taxonomies.label", "asc").execute();
196
+ } catch (error) {
197
+ if (isMissingTableError(error)) {
198
+ for (const id of uniqueIds) primeEntryTermsCache(collection, id, {}, applicableTaxonomyNames);
199
+ return result;
200
+ }
201
+ throw error;
202
+ }
203
+ for (const row of rows) {
204
+ const entryId = row.entry_id;
205
+ const term = {
206
+ id: row.id,
207
+ name: row.name,
208
+ slug: row.slug,
209
+ label: row.label,
210
+ parentId: row.parent_id ?? void 0,
211
+ children: []
212
+ };
213
+ const byTaxonomy = result.get(entryId);
214
+ if (!byTaxonomy) continue;
215
+ const existing = byTaxonomy[row.name];
216
+ if (existing) existing.push(term);
217
+ else byTaxonomy[row.name] = [term];
218
+ }
219
+ }
220
+ for (const [entryId, byTaxonomy] of result) primeEntryTermsCache(collection, entryId, byTaxonomy, applicableTaxonomyNames);
221
+ return result;
222
+ }
223
+ async function getCollectionTaxonomyNames(collection) {
224
+ try {
225
+ return (await getTaxonomyDefs()).filter((def) => def.collections.includes(collection)).map((def) => def.name);
226
+ } catch (error) {
227
+ if (isMissingTableError(error)) return [];
228
+ throw error;
229
+ }
230
+ }
231
+ function primeEntryTermsCache(collection, entryId, byTaxonomy, applicableTaxonomyNames) {
232
+ for (const name of applicableTaxonomyNames) setRequestCacheEntry(`terms:${collection}:${entryId}:${name}`, byTaxonomy[name] ?? []);
233
+ for (const [name, terms] of Object.entries(byTaxonomy)) setRequestCacheEntry(`terms:${collection}:${entryId}:${name}`, terms);
234
+ setRequestCacheEntry(`terms:${collection}:${entryId}:*`, Object.values(byTaxonomy).flat());
235
+ }
236
+ /**
237
+ * Get entries by term (wraps getDinewayCollection)
238
+ */
239
+ async function getEntriesByTerm(collection, taxonomyName, termSlug) {
240
+ const { getDinewayCollection } = await import("./query-kDmwCsHh.mjs").then((n) => n.o);
241
+ const { entries } = await getDinewayCollection(collection, { where: { [taxonomyName]: termSlug } });
242
+ return entries;
243
+ }
244
+ /**
245
+ * Build tree structure from flat terms
246
+ */
247
+ function buildTree(flatTerms, counts) {
248
+ const map = /* @__PURE__ */ new Map();
249
+ const roots = [];
250
+ for (const term of flatTerms) map.set(term.id, {
251
+ id: term.id,
252
+ name: term.name,
253
+ slug: term.slug,
254
+ label: term.label,
255
+ parentId: term.parent_id ?? void 0,
256
+ description: term.data ? JSON.parse(term.data).description : void 0,
257
+ children: [],
258
+ count: counts.get(term.id) ?? 0
259
+ });
260
+ for (const term of map.values()) if (term.parentId && map.has(term.parentId)) map.get(term.parentId).children.push(term);
261
+ else roots.push(term);
262
+ return roots;
263
+ }
264
+
265
+ //#endregion
266
+ export { getTaxonomyTerms as a, taxonomies_exports as c, getTaxonomyDefs as i, getEntryTerms as n, getTerm as o, getTaxonomyDef as r, getTermsForEntries as s, getEntriesByTerm as t };
@@ -0,0 +1,27 @@
1
+ //#region src/database/transaction.ts
2
+ /**
3
+ * Run a callback inside a transaction if supported, or directly if not.
4
+ *
5
+ * Probes the database once on first call to determine if transactions work.
6
+ * The result is cached for the lifetime of the process/worker.
7
+ */
8
+ let transactionsSupported = null;
9
+ const TRANSACTIONS_NOT_SUPPORTED_RE = /transactions are not supported/i;
10
+ async function withTransaction(db, fn) {
11
+ if (transactionsSupported === true) return db.transaction().execute(fn);
12
+ if (transactionsSupported === false) return fn(db);
13
+ try {
14
+ const result = await db.transaction().execute(fn);
15
+ transactionsSupported = true;
16
+ return result;
17
+ } catch (error) {
18
+ if (error instanceof Error && TRANSACTIONS_NOT_SUPPORTED_RE.test(error.message)) {
19
+ transactionsSupported = false;
20
+ return fn(db);
21
+ }
22
+ throw error;
23
+ }
24
+ }
25
+
26
+ //#endregion
27
+ export { withTransaction as t };
@@ -8,7 +8,7 @@
8
8
  /**
9
9
  * Supported field types
10
10
  */
11
- type FieldType = "string" | "text" | "number" | "integer" | "boolean" | "datetime" | "select" | "multiSelect" | "portableText" | "image" | "file" | "reference" | "json" | "slug" | "repeater";
11
+ type FieldType = "string" | "text" | "url" | "number" | "integer" | "boolean" | "datetime" | "select" | "multiSelect" | "portableText" | "image" | "file" | "reference" | "json" | "slug" | "repeater";
12
12
  /**
13
13
  * SQLite column types that map from field types
14
14
  */
@@ -31,7 +31,7 @@ type CollectionSource = `template:${string}` | `import:${string}` | "manual" | "
31
31
  /** Sub-field definition for repeater fields */
32
32
  interface RepeaterSubField {
33
33
  slug: string;
34
- type: "string" | "text" | "number" | "integer" | "boolean" | "datetime" | "select";
34
+ type: "string" | "text" | "url" | "number" | "integer" | "boolean" | "datetime" | "select";
35
35
  label: string;
36
36
  required?: boolean;
37
37
  options?: string[];
@@ -189,4 +189,53 @@ declare const RESERVED_FIELD_SLUGS: string[];
189
189
  */
190
190
  declare const RESERVED_COLLECTION_SLUGS: string[];
191
191
  //#endregion
192
- export { ColumnType as a, FIELD_TYPE_TO_COLUMN as c, FieldValidation as d, FieldWidgetOptions as f, UpdateFieldInput as g, UpdateCollectionInput as h, CollectionWithFields as i, Field as l, RESERVED_FIELD_SLUGS as m, CollectionSource as n, CreateCollectionInput as o, RESERVED_COLLECTION_SLUGS as p, CollectionSupport as r, CreateFieldInput as s, Collection as t, FieldType as u };
192
+ //#region src/settings/types.d.ts
193
+ /**
194
+ * Site Settings Types
195
+ *
196
+ * Global configuration for the site (title, logo, social links, etc.)
197
+ */
198
+ /** Media reference for logo/favicon */
199
+ interface MediaReference {
200
+ mediaId: string;
201
+ alt?: string;
202
+ /** Resolved media URL returned by getSiteSettings()/getSiteSetting(). */
203
+ url?: string;
204
+ }
205
+ /** Site-level SEO settings */
206
+ interface SeoSettings {
207
+ /** Separator between page title and site title (e.g., " | ", " — ") */
208
+ titleSeparator?: string;
209
+ /** Default OG image when content has no seo_image */
210
+ defaultOgImage?: MediaReference;
211
+ /** Custom robots.txt content. If unset, a default is generated. */
212
+ robotsTxt?: string;
213
+ /** Google Search Console verification meta tag content */
214
+ googleVerification?: string;
215
+ /** Bing Webmaster Tools verification meta tag content */
216
+ bingVerification?: string;
217
+ }
218
+ /** Site settings schema */
219
+ interface SiteSettings {
220
+ title: string;
221
+ tagline?: string;
222
+ logo?: MediaReference;
223
+ favicon?: MediaReference;
224
+ url?: string;
225
+ postsPerPage: number;
226
+ dateFormat: string;
227
+ timezone: string;
228
+ social?: {
229
+ twitter?: string;
230
+ github?: string;
231
+ facebook?: string;
232
+ instagram?: string;
233
+ linkedin?: string;
234
+ youtube?: string;
235
+ };
236
+ seo?: SeoSettings;
237
+ }
238
+ /** Keys that are valid site settings */
239
+ type SiteSettingKey = keyof SiteSettings;
240
+ //#endregion
241
+ export { RESERVED_COLLECTION_SLUGS as _, Collection as a, UpdateFieldInput as b, CollectionWithFields as c, CreateFieldInput as d, FIELD_TYPE_TO_COLUMN as f, FieldWidgetOptions as g, FieldValidation as h, SiteSettings as i, ColumnType as l, FieldType as m, SeoSettings as n, CollectionSource as o, Field as p, SiteSettingKey as r, CollectionSupport as s, MediaReference as t, CreateCollectionInput as u, RESERVED_FIELD_SLUGS as v, UpdateCollectionInput as y };
@@ -5,6 +5,7 @@
5
5
  const FIELD_TYPES = [
6
6
  "string",
7
7
  "text",
8
+ "url",
8
9
  "number",
9
10
  "integer",
10
11
  "boolean",
@@ -25,6 +26,7 @@ const FIELD_TYPES = [
25
26
  const FIELD_TYPE_TO_COLUMN = {
26
27
  string: "TEXT",
27
28
  text: "TEXT",
29
+ url: "TEXT",
28
30
  number: "REAL",
29
31
  integer: "INTEGER",
30
32
  boolean: "INTEGER",
@@ -55,7 +57,10 @@ const RESERVED_FIELD_SLUGS = [
55
57
  "deleted_at",
56
58
  "version",
57
59
  "live_revision_id",
58
- "draft_revision_id"
60
+ "draft_revision_id",
61
+ "terms",
62
+ "bylines",
63
+ "byline"
59
64
  ];
60
65
  /**
61
66
  * Reserved collection slugs that cannot be used
@@ -13,11 +13,19 @@ interface S3StorageConfig {
13
13
  endpoint: string;
14
14
  /** Bucket name */
15
15
  bucket: string;
16
- /** AWS access key ID */
17
- accessKeyId: string;
18
- /** AWS secret access key */
19
- secretAccessKey: string;
20
- /** Optional region (provider-specific default when omitted) */
16
+ /**
17
+ * AWS access key ID.
18
+ * May be resolved from `S3_ACCESS_KEY_ID` at runtime on Node.
19
+ * Must be provided together with `secretAccessKey`, or both omitted.
20
+ */
21
+ accessKeyId?: string;
22
+ /**
23
+ * AWS secret access key.
24
+ * May be resolved from `S3_SECRET_ACCESS_KEY` at runtime on Node.
25
+ * Must be provided together with `accessKeyId`, or both omitted.
26
+ */
27
+ secretAccessKey?: string;
28
+ /** Optional region (defaults to "auto") */
21
29
  region?: string;
22
30
  /** Optional public URL prefix for generated URLs (e.g., CDN URL) */
23
31
  publicUrl?: string;