d1s 0.2.11 → 0.2.12

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 (312) 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/index.pack +0 -0
  26. package/dist/.next/.next/cache/webpack/server-production/index.pack.old +0 -0
  27. package/dist/.next/.next/next-minimal-server.js.nft.json +1 -1
  28. package/dist/.next/.next/next-server.js.nft.json +1 -1
  29. package/dist/.next/.next/prerender-manifest.json +1 -1
  30. package/dist/.next/.next/required-server-files.json +1 -1
  31. package/dist/.next/.next/server/app/_not-found/page.js +1 -1
  32. package/dist/.next/.next/server/app/_not-found/page.js.nft.json +1 -1
  33. package/dist/.next/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  34. package/dist/.next/.next/server/app/_not-found.html +1 -1
  35. package/dist/.next/.next/server/app/_not-found.rsc +4 -4
  36. package/dist/.next/.next/server/app/api/cloudflare/route.js +1 -1
  37. package/dist/.next/.next/server/app/api/cloudflare/route_client-reference-manifest.js +1 -1
  38. package/dist/.next/.next/server/app/api/databases/route.js +1 -1
  39. package/dist/.next/.next/server/app/api/databases/route_client-reference-manifest.js +1 -1
  40. package/dist/.next/.next/server/app/api/migrations/sync/route.js +5 -5
  41. package/dist/.next/.next/server/app/api/migrations/sync/route_client-reference-manifest.js +1 -1
  42. package/dist/.next/.next/server/app/api/migrations/sync-files/route.js +3 -3
  43. package/dist/.next/.next/server/app/api/migrations/sync-files/route_client-reference-manifest.js +1 -1
  44. package/dist/.next/.next/server/app/api/pull-data/confirm/route.js +1 -1
  45. package/dist/.next/.next/server/app/api/pull-data/confirm/route_client-reference-manifest.js +1 -1
  46. package/dist/.next/.next/server/app/api/pull-remote/confirm/route.js +2 -2
  47. package/dist/.next/.next/server/app/api/pull-remote/confirm/route_client-reference-manifest.js +1 -1
  48. package/dist/.next/.next/server/app/api/pull-remote/preview/route.js +4 -4
  49. package/dist/.next/.next/server/app/api/pull-remote/preview/route_client-reference-manifest.js +1 -1
  50. package/dist/.next/.next/server/app/api/push-remote/confirm/route.js +5 -5
  51. package/dist/.next/.next/server/app/api/push-remote/confirm/route_client-reference-manifest.js +1 -1
  52. package/dist/.next/.next/server/app/api/push-remote/preview/route.js +4 -4
  53. package/dist/.next/.next/server/app/api/push-remote/preview/route_client-reference-manifest.js +1 -1
  54. package/dist/.next/.next/server/app/api/query/route.js +3 -3
  55. package/dist/.next/.next/server/app/api/query/route_client-reference-manifest.js +1 -1
  56. package/dist/.next/.next/server/app/api/tables/[name]/route.js +5 -5
  57. package/dist/.next/.next/server/app/api/tables/[name]/route_client-reference-manifest.js +1 -1
  58. package/dist/.next/.next/server/app/api/tables/route.js +2 -2
  59. package/dist/.next/.next/server/app/api/tables/route_client-reference-manifest.js +1 -1
  60. package/dist/.next/.next/server/app/api/update/route.js +1 -1
  61. package/dist/.next/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  62. package/dist/.next/.next/server/app/index.html +2 -2
  63. package/dist/.next/.next/server/app/index.rsc +5 -5
  64. package/dist/.next/.next/server/app/page.js +7 -7
  65. package/dist/.next/.next/server/app/page.js.nft.json +1 -1
  66. package/dist/.next/.next/server/app/page_client-reference-manifest.js +1 -1
  67. package/dist/.next/.next/server/app-paths-manifest.json +1 -1
  68. package/dist/.next/.next/server/chunks/226.js +12 -12
  69. package/dist/.next/.next/server/chunks/391.js +1 -1
  70. package/dist/.next/.next/server/chunks/572.js +1 -0
  71. package/dist/.next/.next/server/chunks/992.js +3 -3
  72. package/dist/.next/.next/server/middleware-build-manifest.js +1 -1
  73. package/dist/.next/.next/server/next-font-manifest.js +1 -1
  74. package/dist/.next/.next/server/next-font-manifest.json +1 -1
  75. package/dist/.next/.next/server/pages/404.html +1 -1
  76. package/dist/.next/.next/server/pages/500.html +1 -1
  77. package/dist/.next/.next/server/server-reference-manifest.json +1 -1
  78. package/dist/.next/.next/static/chunks/{576-c4daf274bb6469a1.js → 576-18a2209e1ed26aad.js} +1 -1
  79. package/dist/.next/.next/static/chunks/{92-c4466e0f1ca8a3a8.js → 92-5f7522943fcb72a8.js} +1 -1
  80. package/dist/.next/.next/static/chunks/app/{layout-be6ee67cf0c92654.js → layout-40ec07d04681ba81.js} +1 -1
  81. package/dist/.next/.next/static/chunks/app/page-f05cd0fc436bf9bc.js +1 -0
  82. package/dist/.next/.next/static/chunks/{main-app-fa35024de9bd9284.js → main-app-4506e88db72db4b7.js} +1 -1
  83. package/dist/.next/.next/static/css/{9f6c25c5400f83d3.css → 7c16f57d325d0d7d.css} +1 -1
  84. package/dist/.next/.next/static/gABGrAoO8IPArDo_Ns_7g/_buildManifest.js +1 -0
  85. package/dist/.next/.next/static/gABGrAoO8IPArDo_Ns_7g/_ssgManifest.js +1 -0
  86. package/dist/.next/.next/static/gh-QfIUVo4FTTduYCVKT6/_buildManifest.js +1 -0
  87. package/dist/.next/.next/static/gh-QfIUVo4FTTduYCVKT6/_ssgManifest.js +1 -0
  88. package/dist/.next/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  89. package/dist/.next/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  90. package/dist/.next/.next/static/ybCx6L6gHqtODbKmlhU-d/_buildManifest.js +1 -0
  91. package/dist/.next/.next/static/ybCx6L6gHqtODbKmlhU-d/_ssgManifest.js +1 -0
  92. package/dist/.next/.next/trace +3 -3
  93. package/dist/.next/.next/types/app/api/cloudflare/route.ts +1 -1
  94. package/dist/.next/.next/types/app/api/databases/route.ts +1 -1
  95. package/dist/.next/.next/types/app/api/migrations/sync/route.ts +1 -1
  96. package/dist/.next/.next/types/app/api/migrations/sync-files/route.ts +1 -1
  97. package/dist/.next/.next/types/app/api/pull-data/confirm/route.ts +1 -1
  98. package/dist/.next/.next/types/app/api/pull-remote/confirm/route.ts +1 -1
  99. package/dist/.next/.next/types/app/api/pull-remote/preview/route.ts +1 -1
  100. package/dist/.next/.next/types/app/api/push-remote/confirm/route.ts +1 -1
  101. package/dist/.next/.next/types/app/api/push-remote/preview/route.ts +1 -1
  102. package/dist/.next/.next/types/app/api/query/route.ts +1 -1
  103. package/dist/.next/.next/types/app/api/tables/[name]/route.ts +1 -1
  104. package/dist/.next/.next/types/app/api/tables/route.ts +1 -1
  105. package/dist/.next/.next/types/app/api/update/route.ts +1 -1
  106. package/dist/.next/.next/types/app/page.ts +1 -1
  107. package/dist/.next/BUILD_ID +1 -1
  108. package/dist/.next/app-build-manifest.json +28 -28
  109. package/dist/.next/app-path-routes-manifest.json +1 -1
  110. package/dist/.next/build-manifest.json +3 -3
  111. package/dist/.next/cache/.rscinfo +1 -1
  112. package/dist/.next/cache/.tsbuildinfo +1 -1
  113. package/dist/.next/cache/webpack/client-production/0.pack +0 -0
  114. package/dist/.next/cache/webpack/client-production/1.pack +0 -0
  115. package/dist/.next/cache/webpack/client-production/2.pack +0 -0
  116. package/dist/.next/cache/webpack/client-production/index.pack +0 -0
  117. package/dist/.next/cache/webpack/client-production/index.pack.old +0 -0
  118. package/dist/.next/cache/webpack/edge-server-production/index.pack +0 -0
  119. package/dist/.next/cache/webpack/server-production/0.pack +0 -0
  120. package/dist/.next/cache/webpack/server-production/index.pack +0 -0
  121. package/dist/.next/next-minimal-server.js.nft.json +1 -1
  122. package/dist/.next/next-server.js.nft.json +1 -1
  123. package/dist/.next/prerender-manifest.json +1 -1
  124. package/dist/.next/required-server-files.json +1 -1
  125. package/dist/.next/server/app/_not-found/page.js +1 -1
  126. package/dist/.next/server/app/_not-found/page.js.nft.json +1 -1
  127. package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  128. package/dist/.next/server/app/_not-found.html +1 -1
  129. package/dist/.next/server/app/_not-found.rsc +4 -4
  130. package/dist/.next/server/app/api/cloudflare/route.js +1 -1
  131. package/dist/.next/server/app/api/cloudflare/route_client-reference-manifest.js +1 -1
  132. package/dist/.next/server/app/api/databases/route.js +1 -1
  133. package/dist/.next/server/app/api/databases/route_client-reference-manifest.js +1 -1
  134. package/dist/.next/server/app/api/migrations/sync/route.js +5 -5
  135. package/dist/.next/server/app/api/migrations/sync/route_client-reference-manifest.js +1 -1
  136. package/dist/.next/server/app/api/migrations/sync-files/route.js +3 -3
  137. package/dist/.next/server/app/api/migrations/sync-files/route_client-reference-manifest.js +1 -1
  138. package/dist/.next/server/app/api/pull-data/confirm/route.js +1 -1
  139. package/dist/.next/server/app/api/pull-data/confirm/route_client-reference-manifest.js +1 -1
  140. package/dist/.next/server/app/api/pull-remote/confirm/route.js +2 -2
  141. package/dist/.next/server/app/api/pull-remote/confirm/route_client-reference-manifest.js +1 -1
  142. package/dist/.next/server/app/api/pull-remote/preview/route.js +4 -4
  143. package/dist/.next/server/app/api/pull-remote/preview/route_client-reference-manifest.js +1 -1
  144. package/dist/.next/server/app/api/push-remote/confirm/route.js +5 -5
  145. package/dist/.next/server/app/api/push-remote/confirm/route_client-reference-manifest.js +1 -1
  146. package/dist/.next/server/app/api/push-remote/preview/route.js +4 -4
  147. package/dist/.next/server/app/api/push-remote/preview/route_client-reference-manifest.js +1 -1
  148. package/dist/.next/server/app/api/query/route.js +3 -3
  149. package/dist/.next/server/app/api/query/route_client-reference-manifest.js +1 -1
  150. package/dist/.next/server/app/api/tables/[name]/route.js +5 -5
  151. package/dist/.next/server/app/api/tables/[name]/route_client-reference-manifest.js +1 -1
  152. package/dist/.next/server/app/api/tables/route.js +2 -2
  153. package/dist/.next/server/app/api/tables/route_client-reference-manifest.js +1 -1
  154. package/dist/.next/server/app/api/update/route.js +1 -1
  155. package/dist/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  156. package/dist/.next/server/app/index.html +2 -2
  157. package/dist/.next/server/app/index.rsc +5 -5
  158. package/dist/.next/server/app/page.js +7 -7
  159. package/dist/.next/server/app/page.js.nft.json +1 -1
  160. package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
  161. package/dist/.next/server/app-paths-manifest.json +1 -1
  162. package/dist/.next/server/chunks/226.js +12 -12
  163. package/dist/.next/server/chunks/391.js +1 -1
  164. package/dist/.next/server/chunks/572.js +1 -0
  165. package/dist/.next/server/chunks/992.js +3 -3
  166. package/dist/.next/server/middleware-build-manifest.js +1 -1
  167. package/dist/.next/server/next-font-manifest.js +1 -1
  168. package/dist/.next/server/next-font-manifest.json +1 -1
  169. package/dist/.next/server/pages/404.html +1 -1
  170. package/dist/.next/server/pages/500.html +1 -1
  171. package/dist/.next/server/server-reference-manifest.json +1 -1
  172. package/dist/.next/static/IX-QLbm7scYnyqWeeimal/_buildManifest.js +1 -0
  173. package/dist/.next/static/IX-QLbm7scYnyqWeeimal/_ssgManifest.js +1 -0
  174. package/dist/.next/static/chunks/{576-c4daf274bb6469a1.js → 576-18a2209e1ed26aad.js} +1 -1
  175. package/dist/.next/static/chunks/{92-c4466e0f1ca8a3a8.js → 92-5f7522943fcb72a8.js} +1 -1
  176. package/dist/.next/static/chunks/app/{layout-be6ee67cf0c92654.js → layout-40ec07d04681ba81.js} +1 -1
  177. package/dist/.next/static/chunks/app/page-f05cd0fc436bf9bc.js +1 -0
  178. package/dist/.next/static/chunks/{main-app-fa35024de9bd9284.js → main-app-4506e88db72db4b7.js} +1 -1
  179. package/dist/.next/static/css/{9f6c25c5400f83d3.css → 7c16f57d325d0d7d.css} +1 -1
  180. package/dist/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  181. package/dist/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  182. package/dist/.next/trace +3 -14
  183. package/dist/.next/types/app/api/cloudflare/route.ts +1 -1
  184. package/dist/.next/types/app/api/databases/route.ts +1 -1
  185. package/dist/.next/types/app/api/migrations/sync/route.ts +1 -1
  186. package/dist/.next/types/app/api/migrations/sync-files/route.ts +1 -1
  187. package/dist/.next/types/app/api/pull-data/confirm/route.ts +1 -1
  188. package/dist/.next/types/app/api/pull-remote/confirm/route.ts +1 -1
  189. package/dist/.next/types/app/api/pull-remote/preview/route.ts +1 -1
  190. package/dist/.next/types/app/api/push-remote/confirm/route.ts +1 -1
  191. package/dist/.next/types/app/api/push-remote/preview/route.ts +1 -1
  192. package/dist/.next/types/app/api/query/route.ts +1 -1
  193. package/dist/.next/types/app/api/tables/[name]/route.ts +1 -1
  194. package/dist/.next/types/app/api/tables/route.ts +1 -1
  195. package/dist/.next/types/app/api/update/route.ts +1 -1
  196. package/dist/.next/types/app/page.ts +1 -1
  197. package/dist/app/api/tables/[name]/route.js +22 -10
  198. package/dist/app/globals.css +39 -0
  199. package/dist/d1-studio.js +2 -2
  200. package/dist/lib/data-type-handlers.js +426 -0
  201. package/dist/lib/sql-operations.js +32 -8
  202. package/dist/lib/sql-sanitizer.js +233 -0
  203. package/package.json +3 -9
  204. package/dist/.next/.next/cache/webpack/server-production/2.pack +0 -0
  205. package/dist/.next/.next/server/chunks/90.js +0 -1
  206. package/dist/.next/.next/static/chunks/app/page-36ed30b2266617f3.js +0 -1
  207. package/dist/.next/server/chunks/90.js +0 -1
  208. package/dist/.next/static/chunks/app/page-36ed30b2266617f3.js +0 -1
  209. package/dist/app/app/api/cloudflare/route.js +0 -150
  210. package/dist/app/app/api/databases/route.js +0 -71
  211. package/dist/app/app/api/migrations/sync/route.js +0 -174
  212. package/dist/app/app/api/migrations/sync-files/route.js +0 -172
  213. package/dist/app/app/api/pull-data/confirm/route.js +0 -230
  214. package/dist/app/app/api/pull-remote/confirm/route.js +0 -278
  215. package/dist/app/app/api/pull-remote/preview/route.js +0 -144
  216. package/dist/app/app/api/push-remote/confirm/route.js +0 -196
  217. package/dist/app/app/api/push-remote/preview/route.js +0 -179
  218. package/dist/app/app/api/query/route.js +0 -168
  219. package/dist/app/app/api/tables/[name]/route.js +0 -174
  220. package/dist/app/app/api/tables/route.js +0 -178
  221. package/dist/app/app/api/update/route.js +0 -45
  222. package/dist/app/app/globals.css +0 -93
  223. package/dist/app/app/layout.jsx +0 -35
  224. package/dist/app/app/page.jsx +0 -34
  225. package/next.config.mjs +0 -18
  226. package/postcss.config.mjs +0 -8
  227. package/scripts/studio.js +0 -199
  228. package/scripts/test.js +0 -366
  229. package/src/app/api/cloudflare/route.js +0 -150
  230. package/src/app/api/databases/route.js +0 -71
  231. package/src/app/api/migrations/sync/route.js +0 -174
  232. package/src/app/api/migrations/sync-files/route.js +0 -172
  233. package/src/app/api/pull-data/confirm/route.js +0 -230
  234. package/src/app/api/pull-remote/confirm/route.js +0 -278
  235. package/src/app/api/pull-remote/preview/route.js +0 -144
  236. package/src/app/api/push-remote/confirm/route.js +0 -196
  237. package/src/app/api/push-remote/preview/route.js +0 -179
  238. package/src/app/api/query/route.js +0 -168
  239. package/src/app/api/tables/[name]/route.js +0 -174
  240. package/src/app/api/tables/route.js +0 -178
  241. package/src/app/api/update/route.js +0 -45
  242. package/src/app/globals.css +0 -93
  243. package/src/app/layout.jsx +0 -35
  244. package/src/app/page.jsx +0 -34
  245. package/src/components/cloudflare-credentials-modal.jsx +0 -94
  246. package/src/components/column-selector.jsx +0 -133
  247. package/src/components/column-sorting.jsx +0 -65
  248. package/src/components/delete-records-dialog.jsx +0 -64
  249. package/src/components/download-button.jsx +0 -205
  250. package/src/components/edit-error-alert.jsx +0 -30
  251. package/src/components/editable-cell.jsx +0 -163
  252. package/src/components/editable-row.jsx +0 -169
  253. package/src/components/environment-handler.jsx +0 -332
  254. package/src/components/environment-select.jsx +0 -62
  255. package/src/components/pull-preview-toast.jsx +0 -215
  256. package/src/components/push-error-alert.jsx +0 -72
  257. package/src/components/push-preview-toast.jsx +0 -183
  258. package/src/components/query-results.jsx +0 -112
  259. package/src/components/refresh-button.jsx +0 -61
  260. package/src/components/resize-columns.jsx +0 -101
  261. package/src/components/sidebar.jsx +0 -254
  262. package/src/components/sql-editor.jsx +0 -411
  263. package/src/components/sql-error-display.jsx +0 -167
  264. package/src/components/sync-migrations-button.jsx +0 -87
  265. package/src/components/table-error-dialog.jsx +0 -65
  266. package/src/components/table-toolbar.jsx +0 -285
  267. package/src/components/table-view.jsx +0 -843
  268. package/src/components/ui/alert.jsx +0 -47
  269. package/src/components/ui/button.jsx +0 -48
  270. package/src/components/ui/card.jsx +0 -50
  271. package/src/components/ui/checkbox.jsx +0 -24
  272. package/src/components/ui/collapsible.jsx +0 -11
  273. package/src/components/ui/dialog.jsx +0 -96
  274. package/src/components/ui/dropdown-menu.jsx +0 -158
  275. package/src/components/ui/input.jsx +0 -19
  276. package/src/components/ui/scroll-area.jsx +0 -40
  277. package/src/components/ui/select.jsx +0 -121
  278. package/src/components/ui/separator.jsx +0 -25
  279. package/src/components/ui/sheet.jsx +0 -109
  280. package/src/components/ui/sidebar.jsx +0 -620
  281. package/src/components/ui/skeleton.jsx +0 -14
  282. package/src/components/ui/table.jsx +0 -86
  283. package/src/components/ui/tabs.jsx +0 -43
  284. package/src/components/ui/toast.jsx +0 -86
  285. package/src/components/ui/toaster.jsx +0 -35
  286. package/src/components/ui/tooltip.jsx +0 -28
  287. package/src/components/update-banner.jsx +0 -93
  288. package/src/context/database-context.js +0 -510
  289. package/src/hooks/use-mobile.jsx +0 -19
  290. package/src/hooks/use-sql-error.ts +0 -23
  291. package/src/hooks/use-toast.js +0 -155
  292. package/src/lib/database-queue.js +0 -37
  293. package/src/lib/error.js +0 -20
  294. package/src/lib/find-wrangler-config.js +0 -74
  295. package/src/lib/license.js +0 -99
  296. package/src/lib/logger.js +0 -58
  297. package/src/lib/migrations.js +0 -415
  298. package/src/lib/parse-sql-error.js +0 -200
  299. package/src/lib/request-deduplication.js +0 -24
  300. package/src/lib/schema-operations.js +0 -106
  301. package/src/lib/sql-error-types.js +0 -14
  302. package/src/lib/sql-operations.js +0 -647
  303. package/src/lib/utils.js +0 -6
  304. package/src/lib/version-utils.js +0 -34
  305. /package/dist/.next/.next/static/{OUHnbB-64afrrZQL0Srn5 → Y9mYu4WBghepP5oT_3OdR}/_buildManifest.js +0 -0
  306. /package/dist/.next/.next/static/{OUHnbB-64afrrZQL0Srn5 → Y9mYu4WBghepP5oT_3OdR}/_ssgManifest.js +0 -0
  307. /package/dist/.next/.next/static/{ZBTCAyp1kO5FdEHMU-Dw2 → ae3gNmoSGm-R5LJC4UagI}/_buildManifest.js +0 -0
  308. /package/dist/.next/.next/static/{ZBTCAyp1kO5FdEHMU-Dw2 → ae3gNmoSGm-R5LJC4UagI}/_ssgManifest.js +0 -0
  309. /package/dist/.next/.next/static/{bHYW7fgIBDF8-Q33_WPoE → bKfUJeuvAQlBmR3TjrfkH}/_buildManifest.js +0 -0
  310. /package/dist/.next/.next/static/{bHYW7fgIBDF8-Q33_WPoE → bKfUJeuvAQlBmR3TjrfkH}/_ssgManifest.js +0 -0
  311. /package/dist/.next/{static/ZBTCAyp1kO5FdEHMU-Dw2 → .next/static/ejYPqJ2kVicVp5EFWOZIC}/_buildManifest.js +0 -0
  312. /package/dist/.next/{static/ZBTCAyp1kO5FdEHMU-Dw2 → .next/static/ejYPqJ2kVicVp5EFWOZIC}/_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 }