d1s 0.2.11 → 0.2.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 (318) hide show
  1. package/dist/.next/.next/BUILD_ID +1 -1
  2. package/dist/.next/.next/app-build-manifest.json +28 -28
  3. package/dist/.next/.next/app-path-routes-manifest.json +1 -1
  4. package/dist/.next/.next/build-manifest.json +3 -3
  5. package/dist/.next/.next/cache/.rscinfo +1 -1
  6. package/dist/.next/.next/cache/.tsbuildinfo +1 -1
  7. package/dist/.next/.next/cache/webpack/client-production/0.pack +0 -0
  8. package/dist/.next/.next/cache/webpack/client-production/1.pack +0 -0
  9. package/dist/.next/.next/cache/webpack/client-production/10.pack +0 -0
  10. package/dist/.next/.next/cache/webpack/client-production/11.pack +0 -0
  11. package/dist/.next/.next/cache/webpack/client-production/12.pack +0 -0
  12. package/dist/.next/.next/cache/webpack/client-production/2.pack +0 -0
  13. package/dist/.next/.next/cache/webpack/client-production/3.pack +0 -0
  14. package/dist/.next/.next/cache/webpack/client-production/4.pack +0 -0
  15. package/dist/.next/.next/cache/webpack/client-production/5.pack +0 -0
  16. package/dist/.next/.next/cache/webpack/client-production/6.pack +0 -0
  17. package/dist/.next/.next/cache/webpack/client-production/7.pack +0 -0
  18. package/dist/.next/.next/cache/webpack/client-production/8.pack +0 -0
  19. package/dist/.next/.next/cache/webpack/client-production/9.pack +0 -0
  20. package/dist/.next/.next/cache/webpack/client-production/index.pack +0 -0
  21. package/dist/.next/.next/cache/webpack/client-production/index.pack.old +0 -0
  22. package/dist/.next/.next/cache/webpack/edge-server-production/index.pack +0 -0
  23. package/dist/.next/.next/cache/webpack/server-production/0.pack +0 -0
  24. package/dist/.next/.next/cache/webpack/server-production/1.pack +0 -0
  25. package/dist/.next/.next/cache/webpack/server-production/2.pack +0 -0
  26. package/dist/.next/.next/cache/webpack/server-production/3.pack +0 -0
  27. package/dist/.next/.next/cache/webpack/server-production/index.pack +0 -0
  28. package/dist/.next/.next/cache/webpack/server-production/index.pack.old +0 -0
  29. package/dist/.next/.next/next-minimal-server.js.nft.json +1 -1
  30. package/dist/.next/.next/next-server.js.nft.json +1 -1
  31. package/dist/.next/.next/prerender-manifest.json +1 -1
  32. package/dist/.next/.next/required-server-files.json +1 -1
  33. package/dist/.next/.next/server/app/_not-found/page.js +1 -1
  34. package/dist/.next/.next/server/app/_not-found/page.js.nft.json +1 -1
  35. package/dist/.next/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  36. package/dist/.next/.next/server/app/_not-found.html +1 -1
  37. package/dist/.next/.next/server/app/_not-found.rsc +4 -4
  38. package/dist/.next/.next/server/app/api/cloudflare/route.js +1 -1
  39. package/dist/.next/.next/server/app/api/cloudflare/route_client-reference-manifest.js +1 -1
  40. package/dist/.next/.next/server/app/api/databases/route.js +1 -1
  41. package/dist/.next/.next/server/app/api/databases/route_client-reference-manifest.js +1 -1
  42. package/dist/.next/.next/server/app/api/migrations/sync/route.js +5 -5
  43. package/dist/.next/.next/server/app/api/migrations/sync/route_client-reference-manifest.js +1 -1
  44. package/dist/.next/.next/server/app/api/migrations/sync-files/route.js +3 -3
  45. package/dist/.next/.next/server/app/api/migrations/sync-files/route_client-reference-manifest.js +1 -1
  46. package/dist/.next/.next/server/app/api/pull-data/confirm/route.js +1 -1
  47. package/dist/.next/.next/server/app/api/pull-data/confirm/route_client-reference-manifest.js +1 -1
  48. package/dist/.next/.next/server/app/api/pull-remote/confirm/route.js +2 -2
  49. package/dist/.next/.next/server/app/api/pull-remote/confirm/route_client-reference-manifest.js +1 -1
  50. package/dist/.next/.next/server/app/api/pull-remote/preview/route.js +4 -4
  51. package/dist/.next/.next/server/app/api/pull-remote/preview/route_client-reference-manifest.js +1 -1
  52. package/dist/.next/.next/server/app/api/push-remote/confirm/route.js +5 -5
  53. package/dist/.next/.next/server/app/api/push-remote/confirm/route_client-reference-manifest.js +1 -1
  54. package/dist/.next/.next/server/app/api/push-remote/preview/route.js +4 -4
  55. package/dist/.next/.next/server/app/api/push-remote/preview/route_client-reference-manifest.js +1 -1
  56. package/dist/.next/.next/server/app/api/query/route.js +3 -3
  57. package/dist/.next/.next/server/app/api/query/route_client-reference-manifest.js +1 -1
  58. package/dist/.next/.next/server/app/api/tables/[name]/route.js +5 -5
  59. package/dist/.next/.next/server/app/api/tables/[name]/route_client-reference-manifest.js +1 -1
  60. package/dist/.next/.next/server/app/api/tables/route.js +2 -2
  61. package/dist/.next/.next/server/app/api/tables/route_client-reference-manifest.js +1 -1
  62. package/dist/.next/.next/server/app/api/update/route.js +1 -1
  63. package/dist/.next/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  64. package/dist/.next/.next/server/app/index.html +2 -2
  65. package/dist/.next/.next/server/app/index.rsc +5 -5
  66. package/dist/.next/.next/server/app/page.js +7 -7
  67. package/dist/.next/.next/server/app/page.js.nft.json +1 -1
  68. package/dist/.next/.next/server/app/page_client-reference-manifest.js +1 -1
  69. package/dist/.next/.next/server/app-paths-manifest.json +1 -1
  70. package/dist/.next/.next/server/chunks/226.js +12 -12
  71. package/dist/.next/.next/server/chunks/391.js +1 -1
  72. package/dist/.next/.next/server/chunks/572.js +1 -0
  73. package/dist/.next/.next/server/chunks/992.js +3 -3
  74. package/dist/.next/.next/server/middleware-build-manifest.js +1 -1
  75. package/dist/.next/.next/server/next-font-manifest.js +1 -1
  76. package/dist/.next/.next/server/next-font-manifest.json +1 -1
  77. package/dist/.next/.next/server/pages/404.html +1 -1
  78. package/dist/.next/.next/server/pages/500.html +1 -1
  79. package/dist/.next/.next/server/server-reference-manifest.json +1 -1
  80. package/dist/.next/.next/static/chunks/{576-c4daf274bb6469a1.js → 576-18a2209e1ed26aad.js} +1 -1
  81. package/dist/.next/.next/static/chunks/{92-c4466e0f1ca8a3a8.js → 92-5f7522943fcb72a8.js} +1 -1
  82. package/dist/.next/.next/static/chunks/app/{layout-be6ee67cf0c92654.js → layout-40ec07d04681ba81.js} +1 -1
  83. package/dist/.next/.next/static/chunks/app/page-f05cd0fc436bf9bc.js +1 -0
  84. package/dist/.next/.next/static/chunks/app/page-f2bc307c0d8acdaa.js +1 -0
  85. package/dist/.next/.next/static/chunks/{main-app-fa35024de9bd9284.js → main-app-4506e88db72db4b7.js} +1 -1
  86. package/dist/.next/.next/static/css/{9f6c25c5400f83d3.css → 7c16f57d325d0d7d.css} +1 -1
  87. package/dist/.next/.next/static/ejYPqJ2kVicVp5EFWOZIC/_buildManifest.js +1 -0
  88. package/dist/.next/.next/static/ejYPqJ2kVicVp5EFWOZIC/_ssgManifest.js +1 -0
  89. package/dist/.next/.next/static/gABGrAoO8IPArDo_Ns_7g/_buildManifest.js +1 -0
  90. package/dist/.next/.next/static/gABGrAoO8IPArDo_Ns_7g/_ssgManifest.js +1 -0
  91. package/dist/.next/.next/static/gh-QfIUVo4FTTduYCVKT6/_buildManifest.js +1 -0
  92. package/dist/.next/.next/static/gh-QfIUVo4FTTduYCVKT6/_ssgManifest.js +1 -0
  93. package/dist/.next/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  94. package/dist/.next/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  95. package/dist/.next/.next/static/thaCy2qVeNqYYhdayr13C/_buildManifest.js +1 -0
  96. package/dist/.next/.next/static/thaCy2qVeNqYYhdayr13C/_ssgManifest.js +1 -0
  97. package/dist/.next/.next/static/ybCx6L6gHqtODbKmlhU-d/_buildManifest.js +1 -0
  98. package/dist/.next/.next/static/ybCx6L6gHqtODbKmlhU-d/_ssgManifest.js +1 -0
  99. package/dist/.next/.next/trace +3 -3
  100. package/dist/.next/.next/types/app/api/cloudflare/route.ts +1 -1
  101. package/dist/.next/.next/types/app/api/databases/route.ts +1 -1
  102. package/dist/.next/.next/types/app/api/migrations/sync/route.ts +1 -1
  103. package/dist/.next/.next/types/app/api/migrations/sync-files/route.ts +1 -1
  104. package/dist/.next/.next/types/app/api/pull-data/confirm/route.ts +1 -1
  105. package/dist/.next/.next/types/app/api/pull-remote/confirm/route.ts +1 -1
  106. package/dist/.next/.next/types/app/api/pull-remote/preview/route.ts +1 -1
  107. package/dist/.next/.next/types/app/api/push-remote/confirm/route.ts +1 -1
  108. package/dist/.next/.next/types/app/api/push-remote/preview/route.ts +1 -1
  109. package/dist/.next/.next/types/app/api/query/route.ts +1 -1
  110. package/dist/.next/.next/types/app/api/tables/[name]/route.ts +1 -1
  111. package/dist/.next/.next/types/app/api/tables/route.ts +1 -1
  112. package/dist/.next/.next/types/app/api/update/route.ts +1 -1
  113. package/dist/.next/.next/types/app/page.ts +1 -1
  114. package/dist/.next/BUILD_ID +1 -1
  115. package/dist/.next/app-build-manifest.json +28 -28
  116. package/dist/.next/app-path-routes-manifest.json +1 -1
  117. package/dist/.next/build-manifest.json +3 -3
  118. package/dist/.next/cache/.rscinfo +1 -1
  119. package/dist/.next/cache/.tsbuildinfo +1 -1
  120. package/dist/.next/cache/webpack/client-production/0.pack +0 -0
  121. package/dist/.next/cache/webpack/client-production/1.pack +0 -0
  122. package/dist/.next/cache/webpack/client-production/2.pack +0 -0
  123. package/dist/.next/cache/webpack/client-production/index.pack +0 -0
  124. package/dist/.next/cache/webpack/client-production/index.pack.old +0 -0
  125. package/dist/.next/cache/webpack/edge-server-production/index.pack +0 -0
  126. package/dist/.next/cache/webpack/server-production/0.pack +0 -0
  127. package/dist/.next/cache/webpack/server-production/index.pack +0 -0
  128. package/dist/.next/next-minimal-server.js.nft.json +1 -1
  129. package/dist/.next/next-server.js.nft.json +1 -1
  130. package/dist/.next/prerender-manifest.json +1 -1
  131. package/dist/.next/required-server-files.json +1 -1
  132. package/dist/.next/server/app/_not-found/page.js +1 -1
  133. package/dist/.next/server/app/_not-found/page.js.nft.json +1 -1
  134. package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  135. package/dist/.next/server/app/_not-found.html +1 -1
  136. package/dist/.next/server/app/_not-found.rsc +4 -4
  137. package/dist/.next/server/app/api/cloudflare/route.js +1 -1
  138. package/dist/.next/server/app/api/cloudflare/route_client-reference-manifest.js +1 -1
  139. package/dist/.next/server/app/api/databases/route.js +1 -1
  140. package/dist/.next/server/app/api/databases/route_client-reference-manifest.js +1 -1
  141. package/dist/.next/server/app/api/migrations/sync/route.js +5 -5
  142. package/dist/.next/server/app/api/migrations/sync/route_client-reference-manifest.js +1 -1
  143. package/dist/.next/server/app/api/migrations/sync-files/route.js +3 -3
  144. package/dist/.next/server/app/api/migrations/sync-files/route_client-reference-manifest.js +1 -1
  145. package/dist/.next/server/app/api/pull-data/confirm/route.js +1 -1
  146. package/dist/.next/server/app/api/pull-data/confirm/route_client-reference-manifest.js +1 -1
  147. package/dist/.next/server/app/api/pull-remote/confirm/route.js +2 -2
  148. package/dist/.next/server/app/api/pull-remote/confirm/route_client-reference-manifest.js +1 -1
  149. package/dist/.next/server/app/api/pull-remote/preview/route.js +4 -4
  150. package/dist/.next/server/app/api/pull-remote/preview/route_client-reference-manifest.js +1 -1
  151. package/dist/.next/server/app/api/push-remote/confirm/route.js +5 -5
  152. package/dist/.next/server/app/api/push-remote/confirm/route_client-reference-manifest.js +1 -1
  153. package/dist/.next/server/app/api/push-remote/preview/route.js +4 -4
  154. package/dist/.next/server/app/api/push-remote/preview/route_client-reference-manifest.js +1 -1
  155. package/dist/.next/server/app/api/query/route.js +3 -3
  156. package/dist/.next/server/app/api/query/route_client-reference-manifest.js +1 -1
  157. package/dist/.next/server/app/api/tables/[name]/route.js +5 -5
  158. package/dist/.next/server/app/api/tables/[name]/route_client-reference-manifest.js +1 -1
  159. package/dist/.next/server/app/api/tables/route.js +2 -2
  160. package/dist/.next/server/app/api/tables/route_client-reference-manifest.js +1 -1
  161. package/dist/.next/server/app/api/update/route.js +1 -1
  162. package/dist/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  163. package/dist/.next/server/app/index.html +2 -2
  164. package/dist/.next/server/app/index.rsc +5 -5
  165. package/dist/.next/server/app/page.js +7 -7
  166. package/dist/.next/server/app/page.js.nft.json +1 -1
  167. package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
  168. package/dist/.next/server/app-paths-manifest.json +1 -1
  169. package/dist/.next/server/chunks/226.js +12 -12
  170. package/dist/.next/server/chunks/391.js +1 -1
  171. package/dist/.next/server/chunks/572.js +1 -0
  172. package/dist/.next/server/chunks/992.js +3 -3
  173. package/dist/.next/server/middleware-build-manifest.js +1 -1
  174. package/dist/.next/server/next-font-manifest.js +1 -1
  175. package/dist/.next/server/next-font-manifest.json +1 -1
  176. package/dist/.next/server/pages/404.html +1 -1
  177. package/dist/.next/server/pages/500.html +1 -1
  178. package/dist/.next/server/server-reference-manifest.json +1 -1
  179. package/dist/.next/static/IX-QLbm7scYnyqWeeimal/_buildManifest.js +1 -0
  180. package/dist/.next/static/IX-QLbm7scYnyqWeeimal/_ssgManifest.js +1 -0
  181. package/dist/.next/static/chunks/{576-c4daf274bb6469a1.js → 576-18a2209e1ed26aad.js} +1 -1
  182. package/dist/.next/static/chunks/{92-c4466e0f1ca8a3a8.js → 92-5f7522943fcb72a8.js} +1 -1
  183. package/dist/.next/static/chunks/app/{layout-be6ee67cf0c92654.js → layout-40ec07d04681ba81.js} +1 -1
  184. package/dist/.next/static/chunks/app/page-f05cd0fc436bf9bc.js +1 -0
  185. package/dist/.next/static/chunks/{main-app-fa35024de9bd9284.js → main-app-4506e88db72db4b7.js} +1 -1
  186. package/dist/.next/static/css/{9f6c25c5400f83d3.css → 7c16f57d325d0d7d.css} +1 -1
  187. package/dist/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  188. package/dist/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  189. package/dist/.next/trace +3 -14
  190. package/dist/.next/types/app/api/cloudflare/route.ts +1 -1
  191. package/dist/.next/types/app/api/databases/route.ts +1 -1
  192. package/dist/.next/types/app/api/migrations/sync/route.ts +1 -1
  193. package/dist/.next/types/app/api/migrations/sync-files/route.ts +1 -1
  194. package/dist/.next/types/app/api/pull-data/confirm/route.ts +1 -1
  195. package/dist/.next/types/app/api/pull-remote/confirm/route.ts +1 -1
  196. package/dist/.next/types/app/api/pull-remote/preview/route.ts +1 -1
  197. package/dist/.next/types/app/api/push-remote/confirm/route.ts +1 -1
  198. package/dist/.next/types/app/api/push-remote/preview/route.ts +1 -1
  199. package/dist/.next/types/app/api/query/route.ts +1 -1
  200. package/dist/.next/types/app/api/tables/[name]/route.ts +1 -1
  201. package/dist/.next/types/app/api/tables/route.ts +1 -1
  202. package/dist/.next/types/app/api/update/route.ts +1 -1
  203. package/dist/.next/types/app/page.ts +1 -1
  204. package/dist/app/api/tables/[name]/route.js +22 -10
  205. package/dist/app/globals.css +39 -0
  206. package/dist/d1-studio.js +2 -2
  207. package/dist/lib/data-type-handlers.js +426 -0
  208. package/dist/lib/sql-operations.js +32 -8
  209. package/dist/lib/sql-sanitizer.js +233 -0
  210. package/package.json +3 -9
  211. package/dist/.next/.next/server/chunks/90.js +0 -1
  212. package/dist/.next/.next/static/chunks/app/page-36ed30b2266617f3.js +0 -1
  213. package/dist/.next/server/chunks/90.js +0 -1
  214. package/dist/.next/static/chunks/app/page-36ed30b2266617f3.js +0 -1
  215. package/dist/app/app/api/cloudflare/route.js +0 -150
  216. package/dist/app/app/api/databases/route.js +0 -71
  217. package/dist/app/app/api/migrations/sync/route.js +0 -174
  218. package/dist/app/app/api/migrations/sync-files/route.js +0 -172
  219. package/dist/app/app/api/pull-data/confirm/route.js +0 -230
  220. package/dist/app/app/api/pull-remote/confirm/route.js +0 -278
  221. package/dist/app/app/api/pull-remote/preview/route.js +0 -144
  222. package/dist/app/app/api/push-remote/confirm/route.js +0 -196
  223. package/dist/app/app/api/push-remote/preview/route.js +0 -179
  224. package/dist/app/app/api/query/route.js +0 -168
  225. package/dist/app/app/api/tables/[name]/route.js +0 -174
  226. package/dist/app/app/api/tables/route.js +0 -178
  227. package/dist/app/app/api/update/route.js +0 -45
  228. package/dist/app/app/globals.css +0 -93
  229. package/dist/app/app/layout.jsx +0 -35
  230. package/dist/app/app/page.jsx +0 -34
  231. package/next.config.mjs +0 -18
  232. package/postcss.config.mjs +0 -8
  233. package/scripts/studio.js +0 -199
  234. package/scripts/test.js +0 -366
  235. package/src/app/api/cloudflare/route.js +0 -150
  236. package/src/app/api/databases/route.js +0 -71
  237. package/src/app/api/migrations/sync/route.js +0 -174
  238. package/src/app/api/migrations/sync-files/route.js +0 -172
  239. package/src/app/api/pull-data/confirm/route.js +0 -230
  240. package/src/app/api/pull-remote/confirm/route.js +0 -278
  241. package/src/app/api/pull-remote/preview/route.js +0 -144
  242. package/src/app/api/push-remote/confirm/route.js +0 -196
  243. package/src/app/api/push-remote/preview/route.js +0 -179
  244. package/src/app/api/query/route.js +0 -168
  245. package/src/app/api/tables/[name]/route.js +0 -174
  246. package/src/app/api/tables/route.js +0 -178
  247. package/src/app/api/update/route.js +0 -45
  248. package/src/app/globals.css +0 -93
  249. package/src/app/layout.jsx +0 -35
  250. package/src/app/page.jsx +0 -34
  251. package/src/components/cloudflare-credentials-modal.jsx +0 -94
  252. package/src/components/column-selector.jsx +0 -133
  253. package/src/components/column-sorting.jsx +0 -65
  254. package/src/components/delete-records-dialog.jsx +0 -64
  255. package/src/components/download-button.jsx +0 -205
  256. package/src/components/edit-error-alert.jsx +0 -30
  257. package/src/components/editable-cell.jsx +0 -163
  258. package/src/components/editable-row.jsx +0 -169
  259. package/src/components/environment-handler.jsx +0 -332
  260. package/src/components/environment-select.jsx +0 -62
  261. package/src/components/pull-preview-toast.jsx +0 -215
  262. package/src/components/push-error-alert.jsx +0 -72
  263. package/src/components/push-preview-toast.jsx +0 -183
  264. package/src/components/query-results.jsx +0 -112
  265. package/src/components/refresh-button.jsx +0 -61
  266. package/src/components/resize-columns.jsx +0 -101
  267. package/src/components/sidebar.jsx +0 -254
  268. package/src/components/sql-editor.jsx +0 -411
  269. package/src/components/sql-error-display.jsx +0 -167
  270. package/src/components/sync-migrations-button.jsx +0 -87
  271. package/src/components/table-error-dialog.jsx +0 -65
  272. package/src/components/table-toolbar.jsx +0 -285
  273. package/src/components/table-view.jsx +0 -843
  274. package/src/components/ui/alert.jsx +0 -47
  275. package/src/components/ui/button.jsx +0 -48
  276. package/src/components/ui/card.jsx +0 -50
  277. package/src/components/ui/checkbox.jsx +0 -24
  278. package/src/components/ui/collapsible.jsx +0 -11
  279. package/src/components/ui/dialog.jsx +0 -96
  280. package/src/components/ui/dropdown-menu.jsx +0 -158
  281. package/src/components/ui/input.jsx +0 -19
  282. package/src/components/ui/scroll-area.jsx +0 -40
  283. package/src/components/ui/select.jsx +0 -121
  284. package/src/components/ui/separator.jsx +0 -25
  285. package/src/components/ui/sheet.jsx +0 -109
  286. package/src/components/ui/sidebar.jsx +0 -620
  287. package/src/components/ui/skeleton.jsx +0 -14
  288. package/src/components/ui/table.jsx +0 -86
  289. package/src/components/ui/tabs.jsx +0 -43
  290. package/src/components/ui/toast.jsx +0 -86
  291. package/src/components/ui/toaster.jsx +0 -35
  292. package/src/components/ui/tooltip.jsx +0 -28
  293. package/src/components/update-banner.jsx +0 -93
  294. package/src/context/database-context.js +0 -510
  295. package/src/hooks/use-mobile.jsx +0 -19
  296. package/src/hooks/use-sql-error.ts +0 -23
  297. package/src/hooks/use-toast.js +0 -155
  298. package/src/lib/database-queue.js +0 -37
  299. package/src/lib/error.js +0 -20
  300. package/src/lib/find-wrangler-config.js +0 -74
  301. package/src/lib/license.js +0 -99
  302. package/src/lib/logger.js +0 -58
  303. package/src/lib/migrations.js +0 -415
  304. package/src/lib/parse-sql-error.js +0 -200
  305. package/src/lib/request-deduplication.js +0 -24
  306. package/src/lib/schema-operations.js +0 -106
  307. package/src/lib/sql-error-types.js +0 -14
  308. package/src/lib/sql-operations.js +0 -647
  309. package/src/lib/utils.js +0 -6
  310. package/src/lib/version-utils.js +0 -34
  311. /package/dist/.next/.next/static/{OUHnbB-64afrrZQL0Srn5 → FEsQ9jwPUQv5A3fwg6Opl}/_buildManifest.js +0 -0
  312. /package/dist/.next/.next/static/{OUHnbB-64afrrZQL0Srn5 → FEsQ9jwPUQv5A3fwg6Opl}/_ssgManifest.js +0 -0
  313. /package/dist/.next/.next/static/{ZBTCAyp1kO5FdEHMU-Dw2 → Y9mYu4WBghepP5oT_3OdR}/_buildManifest.js +0 -0
  314. /package/dist/.next/.next/static/{ZBTCAyp1kO5FdEHMU-Dw2 → Y9mYu4WBghepP5oT_3OdR}/_ssgManifest.js +0 -0
  315. /package/dist/.next/.next/static/{bHYW7fgIBDF8-Q33_WPoE → ae3gNmoSGm-R5LJC4UagI}/_buildManifest.js +0 -0
  316. /package/dist/.next/.next/static/{bHYW7fgIBDF8-Q33_WPoE → ae3gNmoSGm-R5LJC4UagI}/_ssgManifest.js +0 -0
  317. /package/dist/.next/{static/ZBTCAyp1kO5FdEHMU-Dw2 → .next/static/bKfUJeuvAQlBmR3TjrfkH}/_buildManifest.js +0 -0
  318. /package/dist/.next/{static/ZBTCAyp1kO5FdEHMU-Dw2 → .next/static/bKfUJeuvAQlBmR3TjrfkH}/_ssgManifest.js +0 -0
@@ -1,150 +0,0 @@
1
- // api/cloudflare/route.js
2
-
3
- import { NextResponse } from 'next/server';
4
- import { findWranglerConfig } from '@/lib/find-wrangler-config.js';
5
- import logger from '@/lib/logger';
6
-
7
- /**
8
- * Validates the provided Cloudflare credentials by fetching databases.
9
- * @param {string} accountId - Cloudflare account ID.
10
- * @param {string} apiToken - Cloudflare API token.
11
- */
12
- async function validateCredentials(accountId, apiToken) {
13
- const response = await fetch(`https://api.cloudflare.com/client/v4/accounts/${accountId}/d1/database`, {
14
- headers: {
15
- 'Authorization': `Bearer ${apiToken}`,
16
- 'Content-Type': 'application/json',
17
- },
18
- });
19
-
20
- if (!response.ok) {
21
- throw new Error('Invalid Cloudflare credentials');
22
- }
23
-
24
- return response.json();
25
- }
26
-
27
- /**
28
- * Fetches the list of databases from Cloudflare and returns the one that matches the given name.
29
- * @param {string} accountId - Cloudflare account ID.
30
- * @param {string} apiToken - Cloudflare API token.
31
- * @param {string} databaseName - The name of the database to find.
32
- */
33
- async function findDatabase(accountId, apiToken, databaseName) {
34
- const response = await fetch(`https://api.cloudflare.com/client/v4/accounts/${accountId}/d1/database`, {
35
- headers: {
36
- 'Authorization': `Bearer ${apiToken}`,
37
- 'Content-Type': 'application/json',
38
- },
39
- });
40
-
41
- if (!response.ok) {
42
- throw new Error('Failed to fetch databases');
43
- }
44
-
45
- const { result } = await response.json();
46
- return result.find(db => db.name === databaseName);
47
- }
48
-
49
- /**
50
- * Creates a new database on Cloudflare.
51
- * @param {string} accountId - Cloudflare account ID.
52
- * @param {string} apiToken - Cloudflare API token.
53
- * @param {string} databaseName - The name for the new database.
54
- */
55
- async function createDatabase(accountId, apiToken, databaseName) {
56
- const response = await fetch(`https://api.cloudflare.com/client/v4/accounts/${accountId}/d1/database`, {
57
- method: 'POST',
58
- headers: {
59
- 'Authorization': `Bearer ${apiToken}`,
60
- 'Content-Type': 'application/json',
61
- },
62
- body: JSON.stringify({
63
- name: databaseName,
64
- }),
65
- });
66
-
67
- if (!response.ok) {
68
- throw new Error('Failed to create database');
69
- }
70
-
71
- return response.json();
72
- }
73
-
74
- /**
75
- * API POST handler to validate credentials, read the Wrangler configuration, and ensure the D1 database exists.
76
- */
77
- export async function POST(req) {
78
- try {
79
- // Parse accountId and apiToken from the request body.
80
- const { accountId, apiToken } = await req.json();
81
- const projectDir = process.env.D1_PROJECT_DIR;
82
-
83
- // Check if the project directory is set.
84
- if (!projectDir) {
85
- logger.error('Project directory not configured');
86
- return NextResponse.json(
87
- { error: 'Project directory not configured' },
88
- { status: 500 }
89
- );
90
- }
91
-
92
- // Validate Cloudflare credentials.
93
- await validateCredentials(accountId, apiToken);
94
-
95
- // Retrieve the Wrangler configuration using the centralized helper.
96
- const wranglerResult = await findWranglerConfig(projectDir);
97
- if (!wranglerResult || !wranglerResult.config) {
98
- logger.error('No Wrangler configuration file found in project directory');
99
- return NextResponse.json(
100
- { error: 'No Wrangler configuration file found in project directory' },
101
- { status: 404 }
102
- );
103
- }
104
- const config = wranglerResult.config;
105
-
106
- // Ensure that at least one D1 database is configured.
107
- if (!config.d1_databases?.length) {
108
- return NextResponse.json(
109
- { error: 'No D1 databases configured in Wrangler configuration' },
110
- { status: 400 }
111
- );
112
- }
113
-
114
- // Use the first configured D1 database.
115
- const localDb = config.d1_databases[0];
116
-
117
- // Check if the database exists on Cloudflare.
118
- let database = await findDatabase(accountId, apiToken, localDb.database_name);
119
-
120
- // If not found, create the database.
121
- if (!database) {
122
- const result = await createDatabase(accountId, apiToken, localDb.database_name);
123
- database = result.result;
124
- }
125
-
126
- // Return the database details in the response.
127
- return NextResponse.json({
128
- success: true,
129
- database: {
130
- id: database.uuid,
131
- name: database.name,
132
- }
133
- });
134
-
135
- } catch (error) {
136
- logger.error('Cloudflare API error:', error);
137
- return NextResponse.json(
138
- { error: error.message },
139
- { status: error.message.includes('Invalid credentials') ? 401 : 500 }
140
- );
141
- }
142
- }
143
-
144
- /**
145
- * OPTIONS handler for pre-flight requests.
146
- */
147
- export async function OPTIONS() {
148
- return new NextResponse(null, { status: 204 });
149
- }
150
-
@@ -1,71 +0,0 @@
1
- // api/databases/route.js
2
-
3
- import { NextResponse } from 'next/server';
4
- import { findWranglerConfig } from '@/lib/find-wrangler-config.js';
5
- import logger from '@/lib/logger';
6
-
7
- export async function GET() {
8
- try {
9
- const projectDir = process.env.D1_PROJECT_DIR;
10
-
11
- if (!projectDir) {
12
- logger.error('D1_PROJECT_DIR environment variable is not set');
13
- return NextResponse.json(
14
- { error: 'Project directory not configured' },
15
- { status: 500 }
16
- );
17
- }
18
-
19
- // Use findWranglerConfig helper
20
- const wranglerResult = await findWranglerConfig(projectDir);
21
- if (!wranglerResult || !wranglerResult.config) {
22
- return NextResponse.json(
23
- { error: 'No Wrangler configuration file found in project directory' },
24
- { status: 404 }
25
- );
26
- }
27
- const config = wranglerResult.config;
28
-
29
- if (!config.d1_databases?.length) {
30
- return NextResponse.json(
31
- { error: 'No D1 databases configured in Wrangler configuration' },
32
- { status: 404 }
33
- );
34
- }
35
-
36
- return NextResponse.json({
37
- databases: config.d1_databases,
38
- debug: {
39
- projectDir,
40
- // Exposing the path from the helper for debugging consistency
41
- configPath: wranglerResult.configPath || 'N/A',
42
- databaseCount: config.d1_databases.length
43
- }
44
- });
45
- } catch (error) {
46
- logger.error('Error reading database configuration:', error);
47
-
48
- return NextResponse.json(
49
- {
50
- error: 'Failed to read database configuration',
51
- details: error.message,
52
- debug: {
53
- errorCode: error.code,
54
- errorStack: error.stack
55
- }
56
- },
57
- { status: 500 }
58
- );
59
- }
60
- }
61
-
62
- export async function OPTIONS() {
63
- return new NextResponse(null, {
64
- status: 204,
65
- headers: {
66
- 'Access-Control-Allow-Origin': '*',
67
- 'Access-Control-Allow-Methods': 'GET, OPTIONS',
68
- 'Access-Control-Allow-Headers': 'Content-Type',
69
- },
70
- });
71
- }
@@ -1,174 +0,0 @@
1
- // app/api/migrations/sync/route.js
2
-
3
- import { NextResponse } from 'next/server';
4
- import { findWranglerConfig } from '@/lib/find-wrangler-config.js';
5
- import { readFile } from 'fs/promises';
6
- import path from 'path';
7
- import {
8
- compareMigrations,
9
- trackMigration,
10
- createChecksum
11
- } from '@/lib/migrations';
12
- import { promisify } from 'util';
13
- import { exec } from 'child_process';
14
- import logger from '@/lib/logger';
15
-
16
- const execAsync = promisify(exec);
17
-
18
- /**
19
- * POST handler for syncing migrations.
20
- * Uses the centralized Wrangler configuration helper to determine the D1 database.
21
- */
22
- export async function POST(req) {
23
- logger.logRequest('POST', '/api/migrations/sync');
24
-
25
- try {
26
- const { accountId, apiToken } = await req.json();
27
- const projectDir = process.env.D1_PROJECT_DIR;
28
-
29
- if (!projectDir) {
30
- logger.error('Project directory not configured');
31
- return NextResponse.json(
32
- { error: 'Project directory not configured' },
33
- { status: 500 }
34
- );
35
- }
36
-
37
- // Use the helper to load the Wrangler configuration
38
- const wranglerResult = await findWranglerConfig(projectDir);
39
- if (!wranglerResult || !wranglerResult.config) {
40
- return NextResponse.json(
41
- { error: 'No Wrangler configuration file found in project directory' },
42
- { status: 404 }
43
- );
44
- }
45
- const config = wranglerResult.config;
46
- if (!config.d1_databases?.length) {
47
- return NextResponse.json(
48
- { error: 'No D1 databases configured' },
49
- { status: 404 }
50
- );
51
- }
52
- const databaseName = config.d1_databases[0].database_name;
53
-
54
- // Initialize remote first (simpler schema)
55
- await execAsync(
56
- `wrangler d1 execute ${databaseName} --remote --command="
57
- CREATE TABLE IF NOT EXISTS d1_migrations (
58
- id INTEGER PRIMARY KEY AUTOINCREMENT,
59
- name TEXT NOT NULL UNIQUE,
60
- applied_at DATETIME DEFAULT CURRENT_TIMESTAMP
61
- );"`,
62
- {
63
- env: {
64
- ...process.env,
65
- CLOUDFLARE_ACCOUNT_ID: accountId,
66
- CLOUDFLARE_API_TOKEN: apiToken
67
- },
68
- cwd: projectDir
69
- }
70
- );
71
-
72
- // For local, explicitly create with nullable checksum
73
- await execAsync(
74
- `wrangler d1 execute ${databaseName} --local --command="
75
- CREATE TABLE IF NOT EXISTS d1_migrations (
76
- id INTEGER PRIMARY KEY AUTOINCREMENT,
77
- name TEXT NOT NULL UNIQUE,
78
- checksum TEXT DEFAULT NULL,
79
- applied_at DATETIME DEFAULT CURRENT_TIMESTAMP
80
- );"`,
81
- { cwd: projectDir }
82
- );
83
-
84
- // Compare migrations between environments
85
- const comparison = await compareMigrations(projectDir, databaseName);
86
-
87
- // Handle pending migrations
88
- const results = {
89
- applied: [],
90
- failed: [],
91
- skipped: []
92
- };
93
-
94
- for (const migration of comparison.pending) {
95
- try {
96
- // Read migration file content
97
- const migrationPath = path.join(projectDir, 'migrations', migration.name);
98
- const migrationContent = await readFile(migrationPath, 'utf8');
99
-
100
- // Execute migration in remote environment using Wrangler
101
- const process = await execAsync(
102
- `wrangler d1 execute ${databaseName} --remote --command='${migrationContent.replace(/'/g, "''")}'`,
103
- {
104
- env: {
105
- ...process.env,
106
- CLOUDFLARE_ACCOUNT_ID: accountId,
107
- CLOUDFLARE_API_TOKEN: apiToken
108
- },
109
- cwd: projectDir
110
- }
111
- );
112
-
113
- // Track successful migration in the remote environment
114
- await trackMigration(projectDir, databaseName, {
115
- name: migration.name,
116
- environment: 'remote',
117
- status: 'applied',
118
- checksum: createChecksum(migrationContent),
119
- version: migration.version
120
- });
121
-
122
- results.applied.push(migration.name);
123
-
124
- } catch (error) {
125
- console.error(`Failed to apply migration ${migration.name}:`, error);
126
-
127
- // Track failed migration
128
- await trackMigration(projectDir, databaseName, {
129
- name: migration.name,
130
- environment: 'remote',
131
- status: 'failed',
132
- checksum: migration.checksum,
133
- version: migration.version,
134
- errorMessage: error.message
135
- });
136
-
137
- results.failed.push({
138
- name: migration.name,
139
- error: error.message
140
- });
141
- }
142
- }
143
-
144
- // Handle migration conflicts (e.g., checksum mismatches)
145
- for (const conflict of comparison.conflicts) {
146
- results.skipped.push({
147
- name: conflict.name,
148
- reason: 'Checksum mismatch between environments'
149
- });
150
- }
151
-
152
- return NextResponse.json({
153
- success: true,
154
- results: {
155
- ...results,
156
- synced: comparison.synced
157
- }
158
- });
159
-
160
- } catch (error) {
161
- logger.logError(error, 'migrations-sync-route');
162
- return NextResponse.json({
163
- success: false,
164
- error: {
165
- message: 'Failed to sync migrations',
166
- details: error.message
167
- }
168
- }, { status: 500 });
169
- }
170
- }
171
-
172
- export async function OPTIONS() {
173
- return new NextResponse(null, { status: 204 });
174
- }
@@ -1,172 +0,0 @@
1
- // app/api/migrations/sync-files/route.js
2
-
3
- import { NextResponse } from 'next/server';
4
- import { findWranglerConfig } from '@/lib/find-wrangler-config.js';
5
- import { readFile, readdir } from 'fs/promises';
6
- import path from 'path';
7
- import { promisify } from 'util';
8
- import { exec } from 'child_process';
9
- import { createChecksum } from '@/lib/migrations';
10
-
11
- const execAsync = promisify(exec);
12
-
13
- /**
14
- * Retrieves the list of migrations recorded in the D1 migrations table.
15
- */
16
- async function getDatabaseMigrations(projectDir, databaseName) {
17
- try {
18
- const { stdout } = await execAsync(
19
- `wrangler d1 execute ${databaseName} --local --command="SELECT name, checksum FROM d1_migrations;" --json`,
20
- { cwd: projectDir }
21
- );
22
-
23
- const result = JSON.parse(stdout);
24
- return result.results?.[0]?.results || [];
25
- } catch (error) {
26
- console.error('Error getting database migrations:', error);
27
- throw new Error('Failed to get database migrations');
28
- }
29
- }
30
-
31
- /**
32
- * Reads migration files from the local migrations directory.
33
- */
34
- async function getMigrationFiles(projectDir) {
35
- try {
36
- const migrationsDir = path.join(projectDir, 'migrations');
37
- const files = await readdir(migrationsDir);
38
-
39
- const migrations = await Promise.all(
40
- files
41
- .filter(f => f.endsWith('.sql'))
42
- .map(async name => {
43
- const filePath = path.join(migrationsDir, name);
44
- const content = await readFile(filePath, 'utf8');
45
- return {
46
- name,
47
- path: filePath,
48
- content,
49
- checksum: createChecksum(content)
50
- };
51
- })
52
- );
53
-
54
- return migrations.sort((a, b) => a.name.localeCompare(b.name));
55
- } catch (error) {
56
- if (error.code === 'ENOENT') {
57
- return [];
58
- }
59
- throw new Error('Failed to read migration files');
60
- }
61
- }
62
-
63
- /**
64
- * Executes a database query via Wrangler.
65
- */
66
- async function executeQuery(projectDir, databaseName, query) {
67
- try {
68
- await execAsync(
69
- `wrangler d1 execute ${databaseName} --local --command="${query.replace(/"/g, '\\"')}"`,
70
- { cwd: projectDir }
71
- );
72
- return true;
73
- } catch (error) {
74
- console.error('Query execution error:', error);
75
- throw new Error('Failed to execute database query');
76
- }
77
- }
78
-
79
- /**
80
- * POST handler to sync migration files with the D1 migrations table.
81
- * Uses the centralized helper to load the Wrangler configuration.
82
- */
83
- export async function POST(req) {
84
- try {
85
- const projectDir = process.env.D1_PROJECT_DIR;
86
- if (!projectDir) {
87
- return NextResponse.json({ error: 'Project directory not configured' }, { status: 500 });
88
- }
89
-
90
- // Use the helper to get the Wrangler configuration
91
- const wranglerResult = await findWranglerConfig(projectDir);
92
- if (!wranglerResult || !wranglerResult.config) {
93
- return NextResponse.json({ error: 'Could not find Wrangler configuration' }, { status: 404 });
94
- }
95
- const config = wranglerResult.config;
96
- if (!config.d1_databases?.length) {
97
- return NextResponse.json({ error: 'No D1 databases configured' }, { status: 404 });
98
- }
99
- // Get the first D1 database name from the configuration
100
- const databaseName = config.d1_databases[0].database_name;
101
-
102
- // Get migrations from the database and from the local file system
103
- const [dbMigrations, fileMigrations] = await Promise.all([
104
- getDatabaseMigrations(projectDir, databaseName),
105
- getMigrationFiles(projectDir)
106
- ]);
107
-
108
- const dbMigrationsMap = new Map(dbMigrations.map(m => [m.name, m]));
109
- const fileMigrationsMap = new Map(fileMigrations.map(m => [m.name, m]));
110
-
111
- const changes = {
112
- added: [], // New files to add to d1_migrations
113
- removed: [], // Records to remove from d1_migrations
114
- unchanged: [] // Files that match with records
115
- };
116
-
117
- // Identify migrations to remove (record exists in DB but file is missing)
118
- for (const [name] of dbMigrationsMap) {
119
- if (!fileMigrationsMap.has(name)) {
120
- changes.removed.push(name);
121
- }
122
- }
123
-
124
- // Remove records for missing files
125
- if (changes.removed.length > 0) {
126
- const names = changes.removed.map(name => `'${name}'`).join(',');
127
- await executeQuery(
128
- projectDir,
129
- databaseName,
130
- `DELETE FROM d1_migrations WHERE name IN (${names});`
131
- );
132
- }
133
-
134
- // Process each migration file: add new records and mark unchanged
135
- for (const [name, fileMigration] of fileMigrationsMap) {
136
- const dbMigration = dbMigrationsMap.get(name);
137
-
138
- if (!dbMigration) {
139
- // Add new record for file
140
- changes.added.push(name);
141
- await executeQuery(
142
- projectDir,
143
- databaseName,
144
- `INSERT OR REPLACE INTO d1_migrations (name, checksum) VALUES ('${name}', '${fileMigration.checksum}');`
145
- );
146
- } else {
147
- changes.unchanged.push(name);
148
- }
149
- }
150
-
151
- return NextResponse.json({
152
- success: true,
153
- details: {
154
- added: changes.added,
155
- removed: changes.removed,
156
- unchanged: changes.unchanged
157
- }
158
- });
159
-
160
- } catch (error) {
161
- console.error('Migration file sync error:', error);
162
- return NextResponse.json({
163
- error: error.message || 'Failed to sync migrations'
164
- }, {
165
- status: 500
166
- });
167
- }
168
- }
169
-
170
- export async function OPTIONS() {
171
- return new NextResponse(null, { status: 204 });
172
- }