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,510 +0,0 @@
1
- // context/database-context.js
2
- 'use client';
3
-
4
- import React, {
5
- createContext,
6
- useContext,
7
- useState,
8
- useCallback,
9
- useEffect,
10
- useRef,
11
- useMemo
12
- } from 'react';
13
- import { useToast } from '@/hooks/use-toast';
14
- import { deduplicateRequest } from '@/lib/request-deduplication';
15
-
16
- const DatabaseContext = createContext(undefined);
17
-
18
- // Simple cache implementation
19
- class TableCache {
20
- constructor() {
21
- this.cache = new Map();
22
- }
23
-
24
- get(tableName) {
25
- const entry = this.cache.get(tableName);
26
- if (!entry) return null;
27
- return entry;
28
- }
29
-
30
- set(tableName, data, schema, meta) {
31
- this.cache.set(tableName, {
32
- data,
33
- schema,
34
- meta,
35
- timestamp: Date.now()
36
- });
37
- }
38
-
39
- update(tableName, data, schema, meta) {
40
- const entry = this.cache.get(tableName);
41
- if (entry) {
42
- this.cache.set(tableName, {
43
- data: data || entry.data,
44
- schema: schema || entry.schema,
45
- meta: meta || entry.meta,
46
- timestamp: Date.now()
47
- });
48
- }
49
- }
50
-
51
- invalidate(tableName) {
52
- this.cache.delete(tableName);
53
- }
54
-
55
- clear() {
56
- this.cache.clear();
57
- }
58
- }
59
-
60
- class OperationQueue {
61
- constructor() {
62
- this.queue = [];
63
- this.processing = false;
64
- }
65
-
66
- async add(operation) {
67
- return new Promise((resolve, reject) => {
68
- this.queue.push({ operation, resolve, reject });
69
- this.process();
70
- });
71
- }
72
-
73
- async process() {
74
- if (this.processing || this.queue.length === 0) return;
75
-
76
- this.processing = true;
77
- const { operation, resolve, reject } = this.queue.shift();
78
-
79
- try {
80
- const result = await operation();
81
- resolve(result);
82
- } catch (error) {
83
- reject(error);
84
- } finally {
85
- this.processing = false;
86
- this.process();
87
- }
88
- }
89
- }
90
-
91
- export function DatabaseProvider({ children }) {
92
- const { toast } = useToast();
93
- const [tables, setTables] = useState([]);
94
- const [isLoading, setIsLoading] = useState(true);
95
- const [error, setError] = useState(null);
96
- const [currentDatabase, setCurrentDatabase] = useState(null);
97
- const operationQueue = useRef(new OperationQueue());
98
- const [activeTable, setActiveTable] = useState(null);
99
- const tableCache = useRef(new TableCache()).current;
100
-
101
- // Cache management functions
102
- const getCachedTable = useCallback((tableName, page = 1, limit = 50) => {
103
- const key = `table-${tableName}-${page}-${limit}`;
104
- return tableCache.get(key);
105
- }, []);
106
-
107
- const invalidateTable = useCallback((tableName) => {
108
- // Invalidate all keys that start with `table-${tableName}-`
109
- tableCache.cache.forEach((_, key) => {
110
- if (key.startsWith(`table-${tableName}-`)) {
111
- tableCache.invalidate(key);
112
- }
113
- });
114
- }, []);
115
-
116
- const updateTableCache = useCallback((tableName, data, schema, meta, page = 1, limit = 50) => {
117
- const key = `table-${tableName}-${page}-${limit}`;
118
- tableCache.update(key, data, schema, meta);
119
- }, []);
120
-
121
- const executeQuery = useCallback(async (query) => {
122
- const requestKey = `query-${query}`;
123
-
124
- return deduplicateRequest(
125
- requestKey,
126
- async () => {
127
- try {
128
- const response = await fetch('/api/query', {
129
- method: 'POST',
130
- headers: { 'Content-Type': 'application/json' },
131
- body: JSON.stringify({ query })
132
- });
133
-
134
- if (!response.ok) {
135
- let errorMessage = 'Failed to execute query';
136
- try {
137
- const errorData = await response.json();
138
- errorMessage = errorData?.error?.message || errorMessage;
139
- } catch (e) {
140
- // Ignore parsing errors
141
- }
142
- throw new Error(errorMessage);
143
- }
144
-
145
- const data = await response.json();
146
- if (!data.success) {
147
- throw new Error(data.error || 'Query execution failed');
148
- }
149
-
150
- return data;
151
- } catch (error) {
152
- throw error || new Error("An unknown error occurred");
153
- }
154
- },
155
- 1000
156
- );
157
- }, []);
158
-
159
- const fetchTableSchema = useCallback(async (tableName) => {
160
- try {
161
- const response = await fetch(`/api/tables/${tableName}`);
162
- const data = await response.json();
163
-
164
- if (!response.ok || !data.success) {
165
- throw new Error(data.error || 'Failed to fetch table schema');
166
- }
167
-
168
- return data.schema || [];
169
- } catch (error) {
170
- console.error('Schema fetch error:', error);
171
- toast({
172
- variant: "destructive",
173
- title: "Schema Fetch Failed",
174
- description: error.message,
175
- });
176
- throw error;
177
- }
178
- }, [toast]);
179
-
180
- // Fetch table data with deduplication
181
- const fetchTableData = useCallback(async (tableName, options = {}) => {
182
- const { forceFetch = false, page = 1, limit = 50 } = options;
183
-
184
- const cacheKey = `table-${tableName}-${page}-${limit}`;
185
- if (!forceFetch) {
186
- const cached = tableCache.get(cacheKey);
187
- if (cached) {
188
- return cached;
189
- }
190
- }
191
-
192
- // Generate unique request key based on table name and pagination
193
- const requestKey = `table-${tableName}-${page}-${limit}`;
194
-
195
- return deduplicateRequest(
196
- requestKey,
197
- async () => {
198
- try {
199
- const response = await fetch(
200
- `/api/tables/${tableName}?page=${page}&limit=${limit}`,
201
- {
202
- headers: {
203
- 'Cache-Control': 'no-cache',
204
- 'Pragma': 'no-cache'
205
- }
206
- }
207
- );
208
-
209
- if (!response.ok) {
210
- throw new Error('Failed to fetch table data');
211
- }
212
-
213
- const result = await response.json();
214
- if (!result.success) {
215
- throw new Error(result.error || 'Failed to fetch table data');
216
- }
217
-
218
- // Update cache with fresh data using the composite key
219
- tableCache.set(cacheKey, result.data, result.schema, result.meta);
220
-
221
- return result;
222
- } catch (error) {
223
- console.error('Error fetching table data:', error);
224
- toast({
225
- variant: "destructive",
226
- title: "Data Fetch Failed",
227
- description: error.message,
228
- });
229
- throw error;
230
- }
231
- },
232
- 1000 // 1 second TTL for deduplication
233
- );
234
- }, [toast]);
235
-
236
- const updateTableData = useCallback(async (tableName) => {
237
- try {
238
- tableCache.invalidate(tableName);
239
- const result = await fetchTableData(tableName, { forceFetch: true });
240
- return result;
241
- } catch (error) {
242
- console.error('Error updating table data:', error);
243
- toast({
244
- variant: "destructive",
245
- title: "Update Failed",
246
- description: error.message,
247
- });
248
- throw error;
249
- }
250
- }, [fetchTableData, toast]);
251
-
252
- // Switch active table
253
- const switchTable = useCallback(async (tableName, options = {}) => {
254
- setActiveTable(tableName);
255
- return await fetchTableData(tableName, options);
256
- }, [fetchTableData]);
257
-
258
- // Refresh tables list with deduplication
259
- const refreshTables = useCallback(async () => {
260
- return deduplicateRequest(
261
- 'refresh-tables',
262
- async () => {
263
- setIsLoading(true);
264
- setError(null);
265
-
266
- try {
267
- const response = await fetch('/api/tables');
268
- if (!response.ok) {
269
- throw new Error('Failed to fetch tables');
270
- }
271
-
272
- const data = await response.json();
273
- if (data.error) {
274
- throw new Error(data.error);
275
- }
276
-
277
- setTables(data.tables || []);
278
- return data.tables || [];
279
- } catch (err) {
280
- setError(err.message);
281
- toast({
282
- variant: "destructive",
283
- title: "Refresh Failed",
284
- description: err.message,
285
- });
286
- throw err;
287
- } finally {
288
- setIsLoading(false);
289
- }
290
- },
291
- 2000
292
- );
293
- }, [toast]);
294
-
295
- // Table operations
296
- const createTable = useCallback(async (query) => {
297
- try {
298
- await executeQuery(query);
299
- tableCache.clear(); // Clear all cache since schema changed
300
- await refreshTables();
301
- toast({
302
- title: "Success",
303
- description: "Table created successfully",
304
- });
305
- } catch (error) {
306
- toast({
307
- variant: "destructive",
308
- title: "Create Table Failed",
309
- description: error.message,
310
- });
311
- throw new Error(`Failed to create table: ${error.message}`);
312
- }
313
- }, [executeQuery, refreshTables, toast]);
314
-
315
- const dropTable = useCallback(async (tableName) => {
316
- try {
317
- await executeQuery(`DROP TABLE ${tableName};`);
318
- tableCache.invalidate(tableName);
319
- await refreshTables();
320
- toast({
321
- title: "Success",
322
- description: "Table dropped successfully",
323
- });
324
- } catch (error) {
325
- toast({
326
- variant: "destructive",
327
- title: "Drop Table Failed",
328
- description: error.message,
329
- });
330
- throw new Error(`Failed to drop table: ${error.message}`);
331
- }
332
- }, [executeQuery, refreshTables, toast]);
333
-
334
- const syncMigrations = useCallback(async (credentials) => {
335
- try {
336
- const response = await fetch('/api/migrations/sync', {
337
- method: 'POST',
338
- headers: {
339
- 'Content-Type': 'application/json',
340
- },
341
- body: JSON.stringify(credentials)
342
- });
343
-
344
- if (!response.ok) {
345
- const error = await response.json();
346
- throw new Error(error.error?.message || 'Failed to sync migrations');
347
- }
348
-
349
- const result = await response.json();
350
- toast({
351
- title: "Success",
352
- description: "Migrations synced successfully",
353
- });
354
- return result;
355
- } catch (error) {
356
- console.error('Error syncing migrations:', error);
357
- toast({
358
- variant: "destructive",
359
- title: "Sync Failed",
360
- description: error.message,
361
- });
362
- throw error;
363
- }
364
- }, [toast]);
365
-
366
- const pullFromRemote = useCallback(async () => {
367
- try {
368
- const storedCreds = localStorage.getItem('cf_credentials');
369
- if (!storedCreds) {
370
- throw new Error('No Cloudflare credentials found. Please connect to Cloudflare first.');
371
- }
372
-
373
- const credentials = JSON.parse(storedCreds);
374
- if (!credentials.accountId || !credentials.apiToken) {
375
- throw new Error('Invalid credentials stored. Please reconnect to Cloudflare.');
376
- }
377
-
378
- // Call the confirm endpoint to actually apply the remote migrations
379
- const response = await fetch('/api/pull-remote/confirm', {
380
- method: 'POST',
381
- headers: { 'Content-Type': 'application/json' },
382
- body: JSON.stringify({
383
- accountId: credentials.accountId,
384
- apiToken: credentials.apiToken
385
- })
386
- });
387
-
388
- const data = await response.json();
389
-
390
- if (!response.ok || !data.success) {
391
- throw new Error(data.error?.message || 'Failed to pull from remote');
392
- }
393
-
394
- // Clear local caches and refresh the table list to reflect the new state.
395
- tableCache.clear();
396
- await refreshTables();
397
-
398
- // toast({
399
- // title: "Success",
400
- // description: `Remote state applied successfully. Migrations applied: ${data.details.appliedMigrations.join(', ')}`,
401
- // });
402
-
403
- return data;
404
- } catch (error) {
405
- console.error('Error pulling from remote:', error);
406
- toast({
407
- variant: "destructive",
408
- title: "Pull Failed",
409
- description: error.message,
410
- });
411
- throw error;
412
- }
413
- }, [refreshTables, toast]);
414
-
415
- const pushToRemote = useCallback(async (credentials) => {
416
- try {
417
- const response = await fetch('/api/push-remote', {
418
- method: 'POST',
419
- headers: { 'Content-Type': 'application/json' },
420
- body: JSON.stringify(credentials)
421
- });
422
-
423
- const data = await response.json();
424
-
425
- if (!response.ok) {
426
- throw new Error(data.error?.message || 'Failed to push to remote');
427
- }
428
-
429
- // // Show a success toast.
430
- // toast({
431
- // title: "Success",
432
- // description: "Successfully pushed to remote",
433
- // });
434
-
435
- return data;
436
- } catch (error) {
437
- console.error('Error pushing to remote:', error);
438
- // toast({
439
- // variant: "destructive",
440
- // title: "Push Failed",
441
- // description: error.message,
442
- // });
443
- throw error;
444
- }
445
- }, [toast]);
446
-
447
- // Initial load
448
- useEffect(() => {
449
- refreshTables();
450
- return () => {
451
- tableCache.clear(); // Clear cache on unmount
452
- };
453
- }, [refreshTables]);
454
-
455
- const value = useMemo(() => ({
456
- tables,
457
- currentDatabase,
458
- isLoading,
459
- error,
460
- activeTable,
461
- refreshTables,
462
- executeQuery,
463
- fetchTableSchema,
464
- fetchTableData,
465
- updateTableData,
466
- createTable,
467
- dropTable,
468
- syncMigrations,
469
- pullFromRemote,
470
- pushToRemote,
471
- getCachedTable,
472
- updateTableCache,
473
- invalidateTable,
474
- switchTable
475
- }), [
476
- tables,
477
- currentDatabase,
478
- isLoading,
479
- error,
480
- activeTable,
481
- refreshTables,
482
- executeQuery,
483
- fetchTableSchema,
484
- fetchTableData,
485
- updateTableData,
486
- createTable,
487
- dropTable,
488
- syncMigrations,
489
- pullFromRemote,
490
- pushToRemote,
491
- getCachedTable,
492
- updateTableCache,
493
- invalidateTable,
494
- switchTable
495
- ]);
496
-
497
- return (
498
- <DatabaseContext.Provider value={value}>
499
- {children}
500
- </DatabaseContext.Provider>
501
- );
502
- }
503
-
504
- export function useDatabase() {
505
- const context = useContext(DatabaseContext);
506
- if (!context) {
507
- throw new Error('useDatabase must be used within a DatabaseProvider');
508
- }
509
- return context;
510
- }
@@ -1,19 +0,0 @@
1
- import * as React from "react"
2
-
3
- const MOBILE_BREAKPOINT = 768
4
-
5
- export function useIsMobile() {
6
- const [isMobile, setIsMobile] = React.useState(undefined)
7
-
8
- React.useEffect(() => {
9
- const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)
10
- const onChange = () => {
11
- setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)
12
- }
13
- mql.addEventListener("change", onChange)
14
- setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)
15
- return () => mql.removeEventListener("change", onChange);
16
- }, [])
17
-
18
- return !!isMobile
19
- }
@@ -1,23 +0,0 @@
1
- // hooks/use-sql-error.js
2
- import { useState, useCallback } from 'react';
3
- import { parseSQLError } from '@/lib/parse-sql-error';
4
-
5
- export function useSQLError() {
6
- const [sqlError, setSQLError] = useState(null);
7
-
8
- const handleSQLError = useCallback((error) => {
9
- const parsedError = parseSQLError(error);
10
- setSQLError(parsedError);
11
- return parsedError;
12
- }, []);
13
-
14
- const clearSQLError = useCallback(() => {
15
- setSQLError(null);
16
- }, []);
17
-
18
- return {
19
- sqlError,
20
- handleSQLError,
21
- clearSQLError
22
- };
23
- }
@@ -1,155 +0,0 @@
1
- "use client";
2
- // Inspired by react-hot-toast library
3
- import * as React from "react"
4
-
5
- const TOAST_LIMIT = 1
6
- const TOAST_REMOVE_DELAY = 1000000
7
-
8
- const actionTypes = {
9
- ADD_TOAST: "ADD_TOAST",
10
- UPDATE_TOAST: "UPDATE_TOAST",
11
- DISMISS_TOAST: "DISMISS_TOAST",
12
- REMOVE_TOAST: "REMOVE_TOAST"
13
- }
14
-
15
- let count = 0
16
-
17
- function genId() {
18
- count = (count + 1) % Number.MAX_SAFE_INTEGER
19
- return count.toString();
20
- }
21
-
22
- const toastTimeouts = new Map()
23
-
24
- const addToRemoveQueue = (toastId) => {
25
- if (toastTimeouts.has(toastId)) {
26
- return
27
- }
28
-
29
- const timeout = setTimeout(() => {
30
- toastTimeouts.delete(toastId)
31
- dispatch({
32
- type: "REMOVE_TOAST",
33
- toastId: toastId,
34
- })
35
- }, TOAST_REMOVE_DELAY)
36
-
37
- toastTimeouts.set(toastId, timeout)
38
- }
39
-
40
- export const reducer = (state, action) => {
41
- switch (action.type) {
42
- case "ADD_TOAST":
43
- return {
44
- ...state,
45
- toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),
46
- };
47
-
48
- case "UPDATE_TOAST":
49
- return {
50
- ...state,
51
- toasts: state.toasts.map((t) =>
52
- t.id === action.toast.id ? { ...t, ...action.toast } : t),
53
- };
54
-
55
- case "DISMISS_TOAST": {
56
- const { toastId } = action
57
-
58
- // ! Side effects ! - This could be extracted into a dismissToast() action,
59
- // but I'll keep it here for simplicity
60
- if (toastId) {
61
- addToRemoveQueue(toastId)
62
- } else {
63
- state.toasts.forEach((toast) => {
64
- addToRemoveQueue(toast.id)
65
- })
66
- }
67
-
68
- return {
69
- ...state,
70
- toasts: state.toasts.map((t) =>
71
- t.id === toastId || toastId === undefined
72
- ? {
73
- ...t,
74
- open: false,
75
- }
76
- : t),
77
- };
78
- }
79
- case "REMOVE_TOAST":
80
- if (action.toastId === undefined) {
81
- return {
82
- ...state,
83
- toasts: [],
84
- }
85
- }
86
- return {
87
- ...state,
88
- toasts: state.toasts.filter((t) => t.id !== action.toastId),
89
- };
90
- }
91
- }
92
-
93
- const listeners = []
94
-
95
- let memoryState = { toasts: [] }
96
-
97
- function dispatch(action) {
98
- memoryState = reducer(memoryState, action)
99
- listeners.forEach((listener) => {
100
- listener(memoryState)
101
- })
102
- }
103
-
104
- function toast({
105
- ...props
106
- }) {
107
- const id = genId()
108
-
109
- const update = (props) =>
110
- dispatch({
111
- type: "UPDATE_TOAST",
112
- toast: { ...props, id },
113
- })
114
- const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id })
115
-
116
- dispatch({
117
- type: "ADD_TOAST",
118
- toast: {
119
- ...props,
120
- id,
121
- open: true,
122
- onOpenChange: (open) => {
123
- if (!open) dismiss()
124
- },
125
- },
126
- })
127
-
128
- return {
129
- id: id,
130
- dismiss,
131
- update,
132
- }
133
- }
134
-
135
- function useToast() {
136
- const [state, setState] = React.useState(memoryState)
137
-
138
- React.useEffect(() => {
139
- listeners.push(setState)
140
- return () => {
141
- const index = listeners.indexOf(setState)
142
- if (index > -1) {
143
- listeners.splice(index, 1)
144
- }
145
- };
146
- }, [state])
147
-
148
- return {
149
- ...state,
150
- toast,
151
- dismiss: (toastId) => dispatch({ type: "DISMISS_TOAST", toastId }),
152
- };
153
- }
154
-
155
- export { useToast, toast }