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,4 +1,4 @@
1
- import { t as Interceptor } from "../transport-gIL-e43D.mjs";
1
+ import { t as Interceptor } from "../transport-Wge_IzKl.mjs";
2
2
 
3
3
  //#region src/client/external-auth-headers.d.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { a as tokenInterceptor, i as devBypassInterceptor, n as createTransport, r as csrfInterceptor, t as Interceptor } from "../transport-gIL-e43D.mjs";
1
+ import { a as tokenInterceptor, i as devBypassInterceptor, n as createTransport, r as csrfInterceptor, t as Interceptor } from "../transport-Wge_IzKl.mjs";
2
2
 
3
3
  //#region src/client/portable-text.d.ts
4
4
  /**
@@ -75,6 +75,11 @@ interface ListResult<T> {
75
75
  items: T[];
76
76
  nextCursor?: string;
77
77
  }
78
+ /** Options for publishing content. */
79
+ interface PublishContentOptions {
80
+ /** Approved review request ID for token-authenticated publish execution. */
81
+ reviewRequestId?: string;
82
+ }
78
83
  /** Content item as returned by the API */
79
84
  interface ContentItem {
80
85
  id: string;
@@ -204,6 +209,9 @@ interface SchemaExport {
204
209
  interface Manifest {
205
210
  version: string;
206
211
  hash: string;
212
+ features?: {
213
+ siteContextWorkflows: boolean;
214
+ };
207
215
  collections: Record<string, {
208
216
  label: string;
209
217
  labelSingular: string;
@@ -313,7 +321,7 @@ declare class DinewayClient {
313
321
  /** Delete (soft) a content item */
314
322
  delete(collection: string, id: string): Promise<void>;
315
323
  /** Publish a content item */
316
- publish(collection: string, id: string): Promise<void>;
324
+ publish(collection: string, id: string, options?: PublishContentOptions): Promise<void>;
317
325
  /** Unpublish a content item */
318
326
  unpublish(collection: string, id: string): Promise<void>;
319
327
  /** Schedule publishing */
@@ -394,4 +402,4 @@ declare class DinewayClient {
394
402
  private getFieldSchemas;
395
403
  }
396
404
  //#endregion
397
- export { ApiError, ClientResponse, Collection, CollectionWithFields, ContentItem, DinewayApiError, DinewayClient, DinewayClientError, DinewayClientOptions, Field, type Interceptor, ListResult, Manifest, MediaItem, Menu, MenuItem, MenuWithItems, type PortableTextBlock, SchemaExport, SearchResult, Taxonomy, Term, createTransport, csrfInterceptor, devBypassInterceptor, markdownToPortableText, portableTextToMarkdown, tokenInterceptor };
405
+ export { ApiError, ClientResponse, Collection, CollectionWithFields, ContentItem, DinewayApiError, DinewayClient, DinewayClientError, DinewayClientOptions, Field, type Interceptor, ListResult, Manifest, MediaItem, Menu, MenuItem, MenuWithItems, type PortableTextBlock, PublishContentOptions, SchemaExport, SearchResult, Taxonomy, Term, createTransport, csrfInterceptor, devBypassInterceptor, markdownToPortableText, portableTextToMarkdown, tokenInterceptor };
@@ -1,4 +1,4 @@
1
- import { a as tokenInterceptor, c as markdownToPortableText, i as refreshInterceptor, l as portableTextToMarkdown, n as csrfInterceptor, o as convertDataForRead, r as devBypassInterceptor, s as convertDataForWrite, t as createTransport } from "../transport-C5FYnid7.mjs";
1
+ import { a as tokenInterceptor, c as markdownToPortableText, i as refreshInterceptor, l as portableTextToMarkdown, n as csrfInterceptor, o as convertDataForRead, r as devBypassInterceptor, s as convertDataForWrite, t as createTransport } from "../transport-DB5eDN4x.mjs";
2
2
  import mime from "mime/lite";
3
3
 
4
4
  //#region src/client/index.ts
@@ -186,8 +186,9 @@ var DinewayClient = class {
186
186
  await this.request("DELETE", `/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}`);
187
187
  }
188
188
  /** Publish a content item */
189
- async publish(collection, id) {
190
- await this.request("POST", `/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/publish`);
189
+ async publish(collection, id, options = {}) {
190
+ const body = options.reviewRequestId ? { reviewRequestId: options.reviewRequestId } : void 0;
191
+ await this.request("POST", `/content/${encodeURIComponent(collection)}/${encodeURIComponent(id)}/publish`, body);
191
192
  }
192
193
  /** Unpublish a content item */
193
194
  async unpublish(collection, id) {
@@ -1,4 +1,5 @@
1
1
  import { n as __require } from "./chunk-ClPoSABd.mjs";
2
+ import { kyselyLogOption } from "./database/instrumentation.mjs";
2
3
  import BetterSqlite3 from "better-sqlite3";
3
4
  import { Kysely, SqliteDialect } from "kysely";
4
5
 
@@ -18,6 +19,14 @@ var DinewayDatabaseError = class extends Error {
18
19
  }
19
20
  };
20
21
  /**
22
+ * Returns a helpful message when better-sqlite3's native binary was compiled
23
+ * against a different Node.js version than the one running.
24
+ */
25
+ function formatNativeModuleVersionError(error) {
26
+ if (!(error instanceof Error ? error.message : String(error)).includes("NODE_MODULE_VERSION")) return null;
27
+ return "better-sqlite3's native binary was compiled against a different Node.js version. Rebuild it with `pnpm rebuild better-sqlite3` (or `npm rebuild better-sqlite3`), or reinstall dependencies with your current Node.js version.";
28
+ }
29
+ /**
21
30
  * Creates a Kysely database instance
22
31
  * Supports:
23
32
  * - file:./path/to/db.sqlite (local SQLite)
@@ -30,20 +39,28 @@ function createDatabase(config) {
30
39
  const sqlite = new BetterSqlite3(config.url === ":memory:" ? ":memory:" : config.url.replace("file:", ""));
31
40
  sqlite.pragma("journal_mode = WAL");
32
41
  sqlite.pragma("foreign_keys = ON");
33
- return new Kysely({ dialect: new SqliteDialect({ database: sqlite }) });
42
+ return new Kysely({
43
+ dialect: new SqliteDialect({ database: sqlite }),
44
+ log: kyselyLogOption()
45
+ });
34
46
  }
35
47
  if (LIBSQL_REMOTE_URL_PREFIXES.some((prefix) => config.url.startsWith(prefix))) try {
36
48
  const { LibsqlDialect } = __require("@libsql/kysely-libsql");
37
- return new Kysely({ dialect: new LibsqlDialect({
38
- url: config.url,
39
- authToken: config.authToken
40
- }) });
49
+ return new Kysely({
50
+ dialect: new LibsqlDialect({
51
+ url: config.url,
52
+ authToken: config.authToken
53
+ }),
54
+ log: kyselyLogOption()
55
+ });
41
56
  } catch (error) {
42
57
  throw new DinewayDatabaseError("Failed to load libSQL dialect. Install @libsql/kysely-libsql to use remote libSQL databases", error);
43
58
  }
44
59
  throw new DinewayDatabaseError(`Unsupported database URL scheme: ${config.url}`);
45
60
  } catch (error) {
46
61
  if (error instanceof DinewayDatabaseError) throw error;
62
+ const nativeVersionHint = formatNativeModuleVersionError(error);
63
+ if (nativeVersionHint) throw new DinewayDatabaseError(nativeVersionHint, error);
47
64
  throw new DinewayDatabaseError("Failed to create database", error);
48
65
  }
49
66
  }
@@ -1,4 +1,5 @@
1
1
  import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
+ import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
2
3
  import { n as decodeCursor, r as encodeCursor, t as DinewayValidationError } from "./types-BawVha09.mjs";
3
4
  import { sql } from "kysely";
4
5
  import { monotonicFactory, ulid } from "ulidx";
@@ -11,6 +12,17 @@ const MULTIPLE_HYPHENS_PATTERN = /-+/g;
11
12
  const LEADING_TRAILING_HYPHEN_PATTERN = /^-|-$/g;
12
13
  const TRAILING_HYPHEN_PATTERN = /-$/;
13
14
  /**
15
+ * Decode a URI-encoded slug route parameter before database lookup.
16
+ */
17
+ function decodeSlug(raw) {
18
+ if (!raw) return void 0;
19
+ try {
20
+ return decodeURIComponent(raw);
21
+ } catch {
22
+ return raw;
23
+ }
24
+ }
25
+ /**
14
26
  * Convert a string to a URL-friendly slug.
15
27
  *
16
28
  * Handles unicode by normalizing to NFD and stripping diacritics,
@@ -148,6 +160,7 @@ const SYSTEM_COLUMNS = new Set([
148
160
  * Get the table name for a collection type
149
161
  */
150
162
  function getTableName(type) {
163
+ validateIdentifier(type, "collection type");
151
164
  return `ec_${type}`;
152
165
  }
153
166
  /**
@@ -236,6 +249,7 @@ var ContentRepository = class {
236
249
  ];
237
250
  if (data && typeof data === "object") {
238
251
  for (const [key, value] of Object.entries(data)) if (!SYSTEM_COLUMNS.has(key)) {
252
+ validateIdentifier(key, "content field name");
239
253
  columns.push(key);
240
254
  values.push(serializeValue(value));
241
255
  }
@@ -456,7 +470,10 @@ var ContentRepository = class {
456
470
  if (input.authorId !== void 0) updates.author_id = input.authorId;
457
471
  if (input.primaryBylineId !== void 0) updates.primary_byline_id = input.primaryBylineId;
458
472
  if (input.data !== void 0 && typeof input.data === "object") {
459
- for (const [key, value] of Object.entries(input.data)) if (!SYSTEM_COLUMNS.has(key)) updates[key] = serializeValue(value);
473
+ for (const [key, value] of Object.entries(input.data)) if (!SYSTEM_COLUMNS.has(key)) {
474
+ validateIdentifier(key, "content field name");
475
+ updates[key] = serializeValue(value);
476
+ }
460
477
  }
461
478
  await this.db.updateTable(tableName).set(updates).where("id", "=", id).where("deleted_at", "is", null).execute();
462
479
  const updated = await this.findById(type, id);
@@ -695,6 +712,27 @@ var ContentRepository = class {
695
712
  return updated;
696
713
  }
697
714
  /**
715
+ * Stage an existing revision as the draft for a content item.
716
+ *
717
+ * Seed/import paths use this to promote freshly prepared revision data
718
+ * through `publish()` instead of writing live revision pointers directly.
719
+ */
720
+ async setDraftRevision(type, id, revisionId) {
721
+ const tableName = getTableName(type);
722
+ const now = (/* @__PURE__ */ new Date()).toISOString();
723
+ if (!await this.findById(type, id)) throw new DinewayValidationError("Content item not found");
724
+ const revision = await new RevisionRepository(this.db).findById(revisionId);
725
+ if (!revision) throw new DinewayValidationError("Revision not found");
726
+ if (revision.collection !== type || revision.entryId !== id) throw new DinewayValidationError("Revision does not belong to the specified content item");
727
+ await sql`
728
+ UPDATE ${sql.ref(tableName)}
729
+ SET draft_revision_id = ${revisionId},
730
+ updated_at = ${now}
731
+ WHERE id = ${id}
732
+ AND deleted_at IS NULL
733
+ `.execute(this.db);
734
+ }
735
+ /**
698
736
  * Unpublish content
699
737
  *
700
738
  * Removes live pointer but preserves draft. If no draft exists,
@@ -767,6 +805,7 @@ var ContentRepository = class {
767
805
  for (const [key, value] of Object.entries(data)) {
768
806
  if (SYSTEM_COLUMNS.has(key)) continue;
769
807
  if (key.startsWith("_")) continue;
808
+ validateIdentifier(key, "content field name");
770
809
  updates[key] = serializeValue(value);
771
810
  }
772
811
  if (Object.keys(updates).length === 0) return;
@@ -833,4 +872,4 @@ var ContentRepository = class {
833
872
  };
834
873
 
835
874
  //#endregion
836
- export { slugify as i, content_exports as n, RevisionRepository as r, ContentRepository as t };
875
+ export { slugify as a, decodeSlug as i, content_exports as n, RevisionRepository as r, ContentRepository as t };
@@ -0,0 +1,34 @@
1
+ import { Logger } from "kysely";
2
+
3
+ //#region src/database/instrumentation.d.ts
4
+ declare const QUERY_LOG_ENV = "DINEWAY_QUERY_LOG";
5
+ declare const QUERY_LOG_PREFIX = "[dineway-query-log]";
6
+ declare const SERVER_TIMING_ENV = "DINEWAY_SERVER_TIMING";
7
+ interface QueryEvent {
8
+ sql: string;
9
+ params: readonly unknown[];
10
+ durationMs: number;
11
+ route: string;
12
+ method: string;
13
+ phase: string;
14
+ }
15
+ interface QueryRecorder {
16
+ events: QueryEvent[];
17
+ route: string;
18
+ method: string;
19
+ phase: string;
20
+ }
21
+ interface ServerTimingMetric {
22
+ name: string;
23
+ dur: number;
24
+ desc?: string;
25
+ }
26
+ declare function createRecorder(route: string, method: string, phase: string): QueryRecorder;
27
+ declare function recordEvent(recorder: QueryRecorder, sql: string, params: readonly unknown[], durationMs: number): void;
28
+ declare function flushRecorder(recorder: QueryRecorder): void;
29
+ declare function isInstrumentationEnabled(): boolean;
30
+ declare function isServerTimingEnabled(): boolean;
31
+ declare function formatServerTimingHeader(metrics: readonly ServerTimingMetric[]): string;
32
+ declare function kyselyLogOption(): Logger | undefined;
33
+ //#endregion
34
+ export { QUERY_LOG_ENV, QUERY_LOG_PREFIX, QueryEvent, QueryRecorder, SERVER_TIMING_ENV, ServerTimingMetric, createRecorder, flushRecorder, formatServerTimingHeader, isInstrumentationEnabled, isServerTimingEnabled, kyselyLogOption, recordEvent };
@@ -0,0 +1,53 @@
1
+ import { getRequestContext } from "../request-context.mjs";
2
+
3
+ //#region src/database/instrumentation.ts
4
+ const QUERY_LOG_ENV = "DINEWAY_QUERY_LOG";
5
+ const QUERY_LOG_PREFIX = "[dineway-query-log]";
6
+ const SERVER_TIMING_ENV = "DINEWAY_SERVER_TIMING";
7
+ function createRecorder(route, method, phase) {
8
+ return {
9
+ events: [],
10
+ route,
11
+ method,
12
+ phase
13
+ };
14
+ }
15
+ function recordEvent(recorder, sql, params, durationMs) {
16
+ recorder.events.push({
17
+ sql,
18
+ params,
19
+ durationMs,
20
+ route: recorder.route,
21
+ method: recorder.method,
22
+ phase: recorder.phase
23
+ });
24
+ }
25
+ function flushRecorder(recorder) {
26
+ for (const event of recorder.events) console.log(`${QUERY_LOG_PREFIX} ${JSON.stringify(event)}`);
27
+ }
28
+ function isInstrumentationEnabled() {
29
+ return Boolean(typeof process !== "undefined" && process.env && process.env[QUERY_LOG_ENV] === "1");
30
+ }
31
+ function isServerTimingEnabled() {
32
+ return Boolean(typeof process !== "undefined" && process.env && process.env[SERVER_TIMING_ENV] === "1");
33
+ }
34
+ function formatServerTimingHeader(metrics) {
35
+ return metrics.map((metric) => {
36
+ const dur = Math.max(0, Math.round(metric.dur));
37
+ if (!metric.desc) return `${metric.name};dur=${dur}`;
38
+ const desc = metric.desc.replaceAll("\\", "\\\\").replaceAll("\"", "\\\"");
39
+ return `${metric.name};dur=${dur};desc="${desc}"`;
40
+ }).join(", ");
41
+ }
42
+ function kyselyLog(event) {
43
+ if (event.level !== "query") return;
44
+ const recorder = getRequestContext()?.queryRecorder;
45
+ if (!recorder) return;
46
+ recordEvent(recorder, event.query.sql, event.query.parameters, event.queryDurationMillis);
47
+ }
48
+ function kyselyLogOption() {
49
+ return isInstrumentationEnabled() ? kyselyLog : void 0;
50
+ }
51
+
52
+ //#endregion
53
+ export { QUERY_LOG_ENV, QUERY_LOG_PREFIX, SERVER_TIMING_ENV, createRecorder, flushRecorder, formatServerTimingHeader, isInstrumentationEnabled, isServerTimingEnabled, kyselyLogOption, recordEvent };
@@ -1,4 +1,4 @@
1
- import "../types-DkvMXalq.mjs";
2
- import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration, t as MigrationStatus } from "../runner-B5l1JfOj.mjs";
3
- import { a as SqliteConfig, c as sqlite, i as PostgresConfig, n as DatabaseDialectType, o as libsql, r as LibsqlConfig, s as postgres, t as DatabaseDescriptor } from "../adapters-BlzWJG82.mjs";
1
+ import "../types-DOrVigru.mjs";
2
+ import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration, t as MigrationStatus } from "../runner-CFI6B6J2.mjs";
3
+ import { a as SqliteConfig, c as sqlite, i as PostgresConfig, n as DatabaseDialectType, o as libsql, r as LibsqlConfig, s as postgres, t as DatabaseDescriptor } from "../adapters-C2ypTrZZ.mjs";
4
4
  export { type DatabaseDescriptor, type DatabaseDialectType, type LibsqlConfig, type MigrationStatus, type PostgresConfig, type SqliteConfig, getMigrationStatus, libsql, postgres, rollbackMigration, runMigrations, sqlite };
package/dist/db/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import "../dialect-helpers-B9uSp2GJ.mjs";
2
- import { n as rollbackMigration, r as runMigrations, t as getMigrationStatus } from "../runner-BGUGywgG.mjs";
1
+ import "../dialect-helpers-DhTzaUxP.mjs";
2
+ import { n as rollbackMigration, r as runMigrations, t as getMigrationStatus } from "../runner-DWZm2KQm.mjs";
3
3
 
4
4
  //#region src/db/adapters.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { r as LibsqlConfig } from "../adapters-BlzWJG82.mjs";
1
+ import { r as LibsqlConfig } from "../adapters-C2ypTrZZ.mjs";
2
2
  import { Dialect } from "kysely";
3
3
 
4
4
  //#region src/db/libsql.d.ts
@@ -1,15 +1,21 @@
1
1
  import { n as __require } from "../chunk-ClPoSABd.mjs";
2
+ import { SqliteDialect } from "kysely";
2
3
 
3
4
  //#region src/db/libsql.ts
4
5
  /**
6
+ * libSQL runtime adapter
7
+ *
8
+ * Creates a Kysely dialect for libSQL/Turso.
9
+ * Falls back to the local SQLite dialect for file-backed URLs so the
10
+ * public `libsql()` adapter can be used in both local development and
11
+ * remote libSQL deployments.
12
+ * Loaded at runtime via virtual module.
13
+ */
14
+ /**
5
15
  * Create a libSQL dialect from config
6
16
  */
7
17
  function createDialect(config) {
8
- if (config.url === ":memory:" || config.url.startsWith("file:")) {
9
- const BetterSqlite3 = __require("better-sqlite3");
10
- const { SqliteDialect } = __require("kysely");
11
- return new SqliteDialect({ database: new BetterSqlite3(config.url === ":memory:" ? config.url : config.url.slice(5)) });
12
- }
18
+ if (config.url === ":memory:" || config.url.startsWith("file:")) return new SqliteDialect({ database: new (__require("better-sqlite3"))(config.url === ":memory:" ? config.url : config.url.slice(5)) });
13
19
  const { LibsqlDialect } = __require("@libsql/kysely-libsql");
14
20
  return new LibsqlDialect({
15
21
  url: config.url,
@@ -1,4 +1,4 @@
1
- import { i as PostgresConfig } from "../adapters-BlzWJG82.mjs";
1
+ import { i as PostgresConfig } from "../adapters-C2ypTrZZ.mjs";
2
2
  import { PostgresDialect } from "kysely";
3
3
 
4
4
  //#region src/db/postgres.d.ts
@@ -1,4 +1,4 @@
1
- import { a as SqliteConfig } from "../adapters-BlzWJG82.mjs";
1
+ import { a as SqliteConfig } from "../adapters-C2ypTrZZ.mjs";
2
2
  import { Dialect } from "kysely";
3
3
 
4
4
  //#region src/db/sqlite.d.ts
@@ -1,12 +1,18 @@
1
1
  import { n as __require } from "../chunk-ClPoSABd.mjs";
2
+ import { SqliteDialect } from "kysely";
2
3
 
3
4
  //#region src/db/sqlite.ts
4
5
  /**
6
+ * SQLite runtime adapter
7
+ *
8
+ * Creates a Kysely dialect for better-sqlite3.
9
+ * Loaded at runtime via virtual module.
10
+ */
11
+ /**
5
12
  * Create a SQLite dialect from config
6
13
  */
7
14
  function createDialect(config) {
8
15
  const BetterSqlite3 = __require("better-sqlite3");
9
- const { SqliteDialect } = __require("kysely");
10
16
  const url = config.url;
11
17
  return new SqliteDialect({ database: new BetterSqlite3(url.startsWith("file:") ? url.slice(5) : url) });
12
18
  }
@@ -0,0 +1,23 @@
1
+ //#region src/utils/db-errors.ts
2
+ /**
3
+ * Shared detection helpers for database-layer error messages.
4
+ *
5
+ * Different SQL dialects phrase "table or relation does not exist" differently.
6
+ * Runtime code that treats pre-migration databases as empty should use this
7
+ * helper rather than duplicating string checks per call-site.
8
+ */
9
+ function messageOf(error) {
10
+ if (error instanceof Error) return error.message.toLowerCase();
11
+ if (typeof error === "string") return error.toLowerCase();
12
+ return "";
13
+ }
14
+ function isMissingTableError(error) {
15
+ const message = messageOf(error);
16
+ if (!message) return false;
17
+ if (message.includes("no such table")) return true;
18
+ if (message.includes("does not exist") || message.includes("doesn't exist")) return message.includes("relation") || message.includes("table");
19
+ return false;
20
+ }
21
+
22
+ //#endregion
23
+ export { isMissingTableError as t };
@@ -9,6 +9,7 @@ const defaultSeed = {
9
9
  slug: "posts",
10
10
  label: "Posts",
11
11
  labelSingular: "Post",
12
+ urlPattern: "/posts/{slug}",
12
13
  supports: [
13
14
  "drafts",
14
15
  "revisions",
@@ -43,6 +44,7 @@ const defaultSeed = {
43
44
  slug: "pages",
44
45
  label: "Pages",
45
46
  labelSingular: "Page",
47
+ urlPattern: "/{slug}",
46
48
  supports: [
47
49
  "drafts",
48
50
  "revisions",
@@ -1,3 +1,4 @@
1
+ import { n as validateJsonFieldName, t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
1
2
  import { sql } from "kysely";
2
3
 
3
4
  //#region src/database/dialect-helpers.ts
@@ -81,6 +82,8 @@ function binaryType(db) {
81
82
  * postgres: column->>'path'
82
83
  */
83
84
  function jsonExtractExpr(db, column, path) {
85
+ validateIdentifier(column, "JSON column name");
86
+ validateJsonFieldName(path, "JSON path");
84
87
  if (isPostgres(db)) return `${column}->>'${path}'`;
85
88
  return `json_extract(${column}, '$.${path}')`;
86
89
  }
@@ -9,11 +9,15 @@ const API_CACHE_HEADERS = { "Cache-Control": "private, no-store" };
9
9
  /**
10
10
  * Create a standardized error response.
11
11
  *
12
- * Always returns `{ error: { code, message } }` with correct Content-Type.
12
+ * Always returns `{ error: { code, message, details? } }` with correct Content-Type.
13
13
  * Use this for all error responses in API routes.
14
14
  */
15
- function apiError(code, message, status) {
16
- return Response.json({ error: {
15
+ function apiError(code, message, status, details) {
16
+ return Response.json({ error: details ? {
17
+ code,
18
+ message,
19
+ details
20
+ } : {
17
21
  code,
18
22
  message
19
23
  } }, {