d1s 0.2.10 → 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 (329) hide show
  1. package/dist/.next/.next/BUILD_ID +1 -1
  2. package/dist/.next/.next/app-build-manifest.json +33 -33
  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 +3 -3
  63. package/dist/.next/.next/server/app/index.rsc +5 -5
  64. package/dist/.next/.next/server/app/page.js +11 -13
  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 +3 -3
  68. package/dist/.next/.next/server/chunks/226.js +12 -12
  69. package/dist/.next/.next/server/chunks/391.js +5 -5
  70. package/dist/.next/.next/server/chunks/452.js +1 -1
  71. package/dist/.next/.next/server/chunks/572.js +1 -0
  72. package/dist/.next/.next/server/chunks/627.js +3 -3
  73. package/dist/.next/.next/server/chunks/638.js +3 -3
  74. package/dist/.next/.next/server/chunks/992.js +3 -3
  75. package/dist/.next/.next/server/middleware-build-manifest.js +1 -1
  76. package/dist/.next/.next/server/next-font-manifest.js +1 -1
  77. package/dist/.next/.next/server/next-font-manifest.json +1 -1
  78. package/dist/.next/.next/server/pages/404.html +1 -1
  79. package/dist/.next/.next/server/pages/500.html +1 -1
  80. package/dist/.next/.next/server/pages/_app.js +1 -1
  81. package/dist/.next/.next/server/pages/_document.js +1 -1
  82. package/dist/.next/.next/server/pages/_error.js +1 -1
  83. package/dist/.next/.next/server/server-reference-manifest.json +1 -1
  84. package/dist/.next/.next/static/chunks/576-18a2209e1ed26aad.js +1 -0
  85. package/dist/.next/.next/static/chunks/{92-c4466e0f1ca8a3a8.js → 92-5f7522943fcb72a8.js} +1 -1
  86. package/dist/.next/.next/static/chunks/app/{layout-be6ee67cf0c92654.js → layout-40ec07d04681ba81.js} +1 -1
  87. package/dist/.next/.next/static/chunks/app/page-f05cd0fc436bf9bc.js +1 -0
  88. package/dist/.next/.next/static/chunks/{main-app-fa35024de9bd9284.js → main-app-4506e88db72db4b7.js} +1 -1
  89. package/dist/.next/.next/static/css/7c16f57d325d0d7d.css +3 -0
  90. package/dist/.next/.next/static/gABGrAoO8IPArDo_Ns_7g/_buildManifest.js +1 -0
  91. package/dist/.next/.next/static/gABGrAoO8IPArDo_Ns_7g/_ssgManifest.js +1 -0
  92. package/dist/.next/.next/static/gh-QfIUVo4FTTduYCVKT6/_buildManifest.js +1 -0
  93. package/dist/.next/.next/static/gh-QfIUVo4FTTduYCVKT6/_ssgManifest.js +1 -0
  94. package/dist/.next/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  95. package/dist/.next/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  96. package/dist/.next/.next/static/ybCx6L6gHqtODbKmlhU-d/_buildManifest.js +1 -0
  97. package/dist/.next/.next/static/ybCx6L6gHqtODbKmlhU-d/_ssgManifest.js +1 -0
  98. package/dist/.next/.next/trace +3 -3
  99. package/dist/.next/.next/types/app/api/cloudflare/route.ts +1 -1
  100. package/dist/.next/.next/types/app/api/databases/route.ts +1 -1
  101. package/dist/.next/.next/types/app/api/migrations/sync/route.ts +1 -1
  102. package/dist/.next/.next/types/app/api/migrations/sync-files/route.ts +1 -1
  103. package/dist/.next/.next/types/app/api/pull-data/confirm/route.ts +1 -1
  104. package/dist/.next/.next/types/app/api/pull-remote/confirm/route.ts +1 -1
  105. package/dist/.next/.next/types/app/api/pull-remote/preview/route.ts +1 -1
  106. package/dist/.next/.next/types/app/api/push-remote/confirm/route.ts +1 -1
  107. package/dist/.next/.next/types/app/api/push-remote/preview/route.ts +1 -1
  108. package/dist/.next/.next/types/app/api/query/route.ts +1 -1
  109. package/dist/.next/.next/types/app/api/tables/[name]/route.ts +1 -1
  110. package/dist/.next/.next/types/app/api/tables/route.ts +1 -1
  111. package/dist/.next/.next/types/app/api/update/route.ts +1 -1
  112. package/dist/.next/.next/types/app/page.ts +1 -1
  113. package/dist/.next/BUILD_ID +1 -1
  114. package/dist/.next/app-build-manifest.json +32 -32
  115. package/dist/.next/app-path-routes-manifest.json +1 -1
  116. package/dist/.next/build-manifest.json +3 -3
  117. package/dist/.next/cache/.rscinfo +1 -1
  118. package/dist/.next/cache/.tsbuildinfo +1 -1
  119. package/dist/.next/cache/webpack/client-production/0.pack +0 -0
  120. package/dist/.next/cache/webpack/client-production/1.pack +0 -0
  121. package/dist/.next/cache/webpack/client-production/2.pack +0 -0
  122. package/dist/.next/cache/webpack/client-production/index.pack +0 -0
  123. package/dist/.next/cache/webpack/client-production/index.pack.old +0 -0
  124. package/dist/.next/cache/webpack/edge-server-production/index.pack +0 -0
  125. package/dist/.next/cache/webpack/server-production/0.pack +0 -0
  126. package/dist/.next/cache/webpack/server-production/index.pack +0 -0
  127. package/dist/.next/next-minimal-server.js.nft.json +1 -1
  128. package/dist/.next/next-server.js.nft.json +1 -1
  129. package/dist/.next/prerender-manifest.json +1 -1
  130. package/dist/.next/required-server-files.json +1 -1
  131. package/dist/.next/server/app/_not-found/page.js +1 -1
  132. package/dist/.next/server/app/_not-found/page.js.nft.json +1 -1
  133. package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  134. package/dist/.next/server/app/_not-found.html +1 -1
  135. package/dist/.next/server/app/_not-found.rsc +4 -4
  136. package/dist/.next/server/app/api/cloudflare/route.js +1 -1
  137. package/dist/.next/server/app/api/cloudflare/route_client-reference-manifest.js +1 -1
  138. package/dist/.next/server/app/api/databases/route.js +1 -1
  139. package/dist/.next/server/app/api/databases/route_client-reference-manifest.js +1 -1
  140. package/dist/.next/server/app/api/migrations/sync/route.js +5 -5
  141. package/dist/.next/server/app/api/migrations/sync/route_client-reference-manifest.js +1 -1
  142. package/dist/.next/server/app/api/migrations/sync-files/route.js +3 -3
  143. package/dist/.next/server/app/api/migrations/sync-files/route_client-reference-manifest.js +1 -1
  144. package/dist/.next/server/app/api/pull-data/confirm/route.js +1 -1
  145. package/dist/.next/server/app/api/pull-data/confirm/route_client-reference-manifest.js +1 -1
  146. package/dist/.next/server/app/api/pull-remote/confirm/route.js +2 -2
  147. package/dist/.next/server/app/api/pull-remote/confirm/route_client-reference-manifest.js +1 -1
  148. package/dist/.next/server/app/api/pull-remote/preview/route.js +4 -4
  149. package/dist/.next/server/app/api/pull-remote/preview/route_client-reference-manifest.js +1 -1
  150. package/dist/.next/server/app/api/push-remote/confirm/route.js +5 -5
  151. package/dist/.next/server/app/api/push-remote/confirm/route_client-reference-manifest.js +1 -1
  152. package/dist/.next/server/app/api/push-remote/preview/route.js +4 -4
  153. package/dist/.next/server/app/api/push-remote/preview/route_client-reference-manifest.js +1 -1
  154. package/dist/.next/server/app/api/query/route.js +3 -3
  155. package/dist/.next/server/app/api/query/route_client-reference-manifest.js +1 -1
  156. package/dist/.next/server/app/api/tables/[name]/route.js +5 -5
  157. package/dist/.next/server/app/api/tables/[name]/route_client-reference-manifest.js +1 -1
  158. package/dist/.next/server/app/api/tables/route.js +2 -2
  159. package/dist/.next/server/app/api/tables/route_client-reference-manifest.js +1 -1
  160. package/dist/.next/server/app/api/update/route.js +1 -1
  161. package/dist/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  162. package/dist/.next/server/app/index.html +3 -3
  163. package/dist/.next/server/app/index.rsc +5 -5
  164. package/dist/.next/server/app/page.js +11 -13
  165. package/dist/.next/server/app/page.js.nft.json +1 -1
  166. package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
  167. package/dist/.next/server/app-paths-manifest.json +2 -2
  168. package/dist/.next/server/chunks/226.js +12 -12
  169. package/dist/.next/server/chunks/391.js +5 -5
  170. package/dist/.next/server/chunks/452.js +1 -1
  171. package/dist/.next/server/chunks/572.js +1 -0
  172. package/dist/.next/server/chunks/627.js +3 -3
  173. package/dist/.next/server/chunks/638.js +3 -3
  174. package/dist/.next/server/chunks/992.js +3 -3
  175. package/dist/.next/server/middleware-build-manifest.js +1 -1
  176. package/dist/.next/server/next-font-manifest.js +1 -1
  177. package/dist/.next/server/next-font-manifest.json +1 -1
  178. package/dist/.next/server/pages/404.html +1 -1
  179. package/dist/.next/server/pages/500.html +1 -1
  180. package/dist/.next/server/pages/_app.js +1 -1
  181. package/dist/.next/server/pages/_document.js +1 -1
  182. package/dist/.next/server/pages/_error.js +1 -1
  183. package/dist/.next/server/server-reference-manifest.json +1 -1
  184. package/dist/.next/static/IX-QLbm7scYnyqWeeimal/_buildManifest.js +1 -0
  185. package/dist/.next/static/IX-QLbm7scYnyqWeeimal/_ssgManifest.js +1 -0
  186. package/dist/.next/static/chunks/576-18a2209e1ed26aad.js +1 -0
  187. package/dist/.next/static/chunks/{92-c4466e0f1ca8a3a8.js → 92-5f7522943fcb72a8.js} +1 -1
  188. package/dist/.next/static/chunks/app/{layout-be6ee67cf0c92654.js → layout-40ec07d04681ba81.js} +1 -1
  189. package/dist/.next/static/chunks/app/page-f05cd0fc436bf9bc.js +1 -0
  190. package/dist/.next/static/chunks/{main-app-fa35024de9bd9284.js → main-app-4506e88db72db4b7.js} +1 -1
  191. package/dist/.next/static/css/7c16f57d325d0d7d.css +3 -0
  192. package/dist/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  193. package/dist/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  194. package/dist/.next/trace +3 -16
  195. package/dist/.next/types/app/api/cloudflare/route.ts +1 -1
  196. package/dist/.next/types/app/api/databases/route.ts +1 -1
  197. package/dist/.next/types/app/api/migrations/sync/route.ts +1 -1
  198. package/dist/.next/types/app/api/migrations/sync-files/route.ts +1 -1
  199. package/dist/.next/types/app/api/pull-data/confirm/route.ts +1 -1
  200. package/dist/.next/types/app/api/pull-remote/confirm/route.ts +1 -1
  201. package/dist/.next/types/app/api/pull-remote/preview/route.ts +1 -1
  202. package/dist/.next/types/app/api/push-remote/confirm/route.ts +1 -1
  203. package/dist/.next/types/app/api/push-remote/preview/route.ts +1 -1
  204. package/dist/.next/types/app/api/query/route.ts +1 -1
  205. package/dist/.next/types/app/api/tables/[name]/route.ts +1 -1
  206. package/dist/.next/types/app/api/tables/route.ts +1 -1
  207. package/dist/.next/types/app/api/update/route.ts +1 -1
  208. package/dist/.next/types/app/page.ts +1 -1
  209. package/dist/app/api/tables/[name]/route.js +22 -10
  210. package/dist/app/globals.css +39 -0
  211. package/dist/app/page.jsx +13 -23
  212. package/dist/d1-studio.js +34 -4
  213. package/dist/lib/data-type-handlers.js +426 -0
  214. package/dist/lib/sql-operations.js +32 -8
  215. package/dist/lib/sql-sanitizer.js +233 -0
  216. package/package.json +3 -9
  217. package/dist/.next/.next/cache/webpack/server-production/2.pack +0 -0
  218. package/dist/.next/.next/server/chunks/90.js +0 -1
  219. package/dist/.next/.next/static/chunks/700-dc8f9f08b166c5e6.js +0 -1
  220. package/dist/.next/.next/static/chunks/app/page-16ec561fc8bebb5d.js +0 -1
  221. package/dist/.next/.next/static/css/0c512cea5f3d317a.css +0 -3
  222. package/dist/.next/server/chunks/90.js +0 -1
  223. package/dist/.next/static/chunks/700-dc8f9f08b166c5e6.js +0 -1
  224. package/dist/.next/static/chunks/app/page-16ec561fc8bebb5d.js +0 -1
  225. package/dist/.next/static/css/0c512cea5f3d317a.css +0 -3
  226. package/dist/app/app/api/cloudflare/route.js +0 -150
  227. package/dist/app/app/api/databases/route.js +0 -71
  228. package/dist/app/app/api/migrations/sync/route.js +0 -174
  229. package/dist/app/app/api/migrations/sync-files/route.js +0 -172
  230. package/dist/app/app/api/pull-data/confirm/route.js +0 -230
  231. package/dist/app/app/api/pull-remote/confirm/route.js +0 -278
  232. package/dist/app/app/api/pull-remote/preview/route.js +0 -144
  233. package/dist/app/app/api/push-remote/confirm/route.js +0 -196
  234. package/dist/app/app/api/push-remote/preview/route.js +0 -179
  235. package/dist/app/app/api/query/route.js +0 -168
  236. package/dist/app/app/api/tables/[name]/route.js +0 -174
  237. package/dist/app/app/api/tables/route.js +0 -178
  238. package/dist/app/app/api/update/route.js +0 -45
  239. package/dist/app/app/globals.css +0 -93
  240. package/dist/app/app/layout.jsx +0 -35
  241. package/dist/app/app/page.jsx +0 -44
  242. package/next.config.mjs +0 -18
  243. package/postcss.config.mjs +0 -8
  244. package/scripts/studio.js +0 -169
  245. package/scripts/test.js +0 -366
  246. package/src/app/api/cloudflare/route.js +0 -150
  247. package/src/app/api/databases/route.js +0 -71
  248. package/src/app/api/migrations/sync/route.js +0 -174
  249. package/src/app/api/migrations/sync-files/route.js +0 -172
  250. package/src/app/api/pull-data/confirm/route.js +0 -230
  251. package/src/app/api/pull-remote/confirm/route.js +0 -278
  252. package/src/app/api/pull-remote/preview/route.js +0 -144
  253. package/src/app/api/push-remote/confirm/route.js +0 -196
  254. package/src/app/api/push-remote/preview/route.js +0 -179
  255. package/src/app/api/query/route.js +0 -168
  256. package/src/app/api/tables/[name]/route.js +0 -174
  257. package/src/app/api/tables/route.js +0 -178
  258. package/src/app/api/update/route.js +0 -45
  259. package/src/app/globals.css +0 -93
  260. package/src/app/layout.jsx +0 -35
  261. package/src/app/page.jsx +0 -44
  262. package/src/components/cloudflare-credentials-modal.jsx +0 -94
  263. package/src/components/column-selector.jsx +0 -133
  264. package/src/components/column-sorting.jsx +0 -65
  265. package/src/components/delete-records-dialog.jsx +0 -64
  266. package/src/components/download-button.jsx +0 -205
  267. package/src/components/edit-error-alert.jsx +0 -30
  268. package/src/components/editable-cell.jsx +0 -163
  269. package/src/components/editable-row.jsx +0 -169
  270. package/src/components/environment-handler.jsx +0 -332
  271. package/src/components/environment-select.jsx +0 -62
  272. package/src/components/pull-preview-toast.jsx +0 -215
  273. package/src/components/push-error-alert.jsx +0 -72
  274. package/src/components/push-preview-toast.jsx +0 -183
  275. package/src/components/query-results.jsx +0 -112
  276. package/src/components/refresh-button.jsx +0 -61
  277. package/src/components/resize-columns.jsx +0 -101
  278. package/src/components/sidebar.jsx +0 -254
  279. package/src/components/sql-editor.jsx +0 -411
  280. package/src/components/sql-error-display.jsx +0 -167
  281. package/src/components/sync-migrations-button.jsx +0 -87
  282. package/src/components/table-error-dialog.jsx +0 -65
  283. package/src/components/table-toolbar.jsx +0 -285
  284. package/src/components/table-view.jsx +0 -843
  285. package/src/components/ui/alert.jsx +0 -47
  286. package/src/components/ui/button.jsx +0 -48
  287. package/src/components/ui/card.jsx +0 -50
  288. package/src/components/ui/checkbox.jsx +0 -24
  289. package/src/components/ui/collapsible.jsx +0 -11
  290. package/src/components/ui/dialog.jsx +0 -96
  291. package/src/components/ui/dropdown-menu.jsx +0 -158
  292. package/src/components/ui/input.jsx +0 -19
  293. package/src/components/ui/scroll-area.jsx +0 -40
  294. package/src/components/ui/select.jsx +0 -121
  295. package/src/components/ui/separator.jsx +0 -25
  296. package/src/components/ui/sheet.jsx +0 -109
  297. package/src/components/ui/sidebar.jsx +0 -620
  298. package/src/components/ui/skeleton.jsx +0 -14
  299. package/src/components/ui/table.jsx +0 -86
  300. package/src/components/ui/tabs.jsx +0 -43
  301. package/src/components/ui/toast.jsx +0 -86
  302. package/src/components/ui/toaster.jsx +0 -35
  303. package/src/components/ui/tooltip.jsx +0 -28
  304. package/src/components/update-banner.jsx +0 -93
  305. package/src/context/database-context.js +0 -510
  306. package/src/hooks/use-mobile.jsx +0 -19
  307. package/src/hooks/use-sql-error.ts +0 -23
  308. package/src/hooks/use-toast.js +0 -155
  309. package/src/lib/database-queue.js +0 -37
  310. package/src/lib/error.js +0 -20
  311. package/src/lib/find-wrangler-config.js +0 -74
  312. package/src/lib/license.js +0 -99
  313. package/src/lib/logger.js +0 -58
  314. package/src/lib/migrations.js +0 -415
  315. package/src/lib/parse-sql-error.js +0 -200
  316. package/src/lib/request-deduplication.js +0 -24
  317. package/src/lib/schema-operations.js +0 -106
  318. package/src/lib/sql-error-types.js +0 -14
  319. package/src/lib/sql-operations.js +0 -647
  320. package/src/lib/utils.js +0 -6
  321. package/src/lib/version-utils.js +0 -34
  322. /package/dist/.next/.next/static/{5dBGGUmK5q7of4h5Rahrg → Y9mYu4WBghepP5oT_3OdR}/_buildManifest.js +0 -0
  323. /package/dist/.next/.next/static/{5dBGGUmK5q7of4h5Rahrg → Y9mYu4WBghepP5oT_3OdR}/_ssgManifest.js +0 -0
  324. /package/dist/.next/.next/static/{PflNFnmFsNegSqhzjI6lA → ae3gNmoSGm-R5LJC4UagI}/_buildManifest.js +0 -0
  325. /package/dist/.next/.next/static/{PflNFnmFsNegSqhzjI6lA → ae3gNmoSGm-R5LJC4UagI}/_ssgManifest.js +0 -0
  326. /package/dist/.next/.next/static/{p8875OZM4iDNsPzmoyLe7 → bKfUJeuvAQlBmR3TjrfkH}/_buildManifest.js +0 -0
  327. /package/dist/.next/.next/static/{p8875OZM4iDNsPzmoyLe7 → bKfUJeuvAQlBmR3TjrfkH}/_ssgManifest.js +0 -0
  328. /package/dist/.next/{static 2/5dBGGUmK5q7of4h5Rahrg → .next/static/ejYPqJ2kVicVp5EFWOZIC}/_buildManifest.js +0 -0
  329. /package/dist/.next/{static 2/5dBGGUmK5q7of4h5Rahrg → .next/static/ejYPqJ2kVicVp5EFWOZIC}/_ssgManifest.js +0 -0
@@ -1,205 +0,0 @@
1
- // components/download-button.jsx
2
- 'use client';
3
-
4
- import React, { memo, useState } from 'react';
5
- import { Download, FileJson, FileSpreadsheet, FileCode, Loader2 } from 'lucide-react';
6
- import { Button } from "@/components/ui/button";
7
- import {
8
- DropdownMenu,
9
- DropdownMenuContent,
10
- DropdownMenuItem,
11
- DropdownMenuTrigger,
12
- } from "@/components/ui/dropdown-menu";
13
- import {
14
- Tooltip,
15
- TooltipContent,
16
- TooltipProvider,
17
- TooltipTrigger,
18
- } from "@/components/ui/tooltip";
19
- import { useToast } from "@/hooks/use-toast";
20
-
21
- const DownloadButton = memo(({
22
- tableName,
23
- onDownloadStart,
24
- onDownloadComplete,
25
- disabled
26
- }) => {
27
- const [isDownloading, setIsDownloading] = useState(false);
28
- const { toast } = useToast();
29
-
30
- const downloadAsFile = (data, filename) => {
31
- try {
32
- const blob = new Blob([data], { type: "application/octet-stream" });
33
- const url = window.URL.createObjectURL(blob);
34
-
35
- const link = document.createElement("a");
36
- link.href = url;
37
- link.download = filename;
38
- document.body.appendChild(link);
39
- link.click();
40
- document.body.removeChild(link);
41
- window.URL.revokeObjectURL(url);
42
- } catch (error) {
43
- console.error("Error during file download:", error);
44
- throw error;
45
- }
46
- };
47
-
48
- const handleDownload = async (format) => {
49
- if (disabled) return;
50
-
51
- try {
52
- setIsDownloading(true);
53
- onDownloadStart?.();
54
-
55
- const response = await fetch(`/api/tables/${tableName}`);
56
- const result = await response.json();
57
-
58
- if (!response.ok) {
59
- throw new Error(result.error || 'Failed to fetch data');
60
- }
61
-
62
- const { data, schema } = result;
63
-
64
- if (!data?.length) {
65
- toast({
66
- title: "No Data",
67
- description: "The table is empty.",
68
- variant: "destructive",
69
- });
70
- return;
71
- }
72
-
73
- const timestamp = new Date().toISOString().split("T")[0];
74
- const filename = `${tableName}_${timestamp}.${format}`;
75
-
76
- switch (format) {
77
- case "json": {
78
- const jsonStr = JSON.stringify(data, null, 2);
79
- downloadAsFile(jsonStr, filename);
80
- break;
81
- }
82
- case "csv": {
83
- const headers = Object.keys(data[0]);
84
- const csvRows = [
85
- headers.join(","),
86
- ...data.map((row) =>
87
- headers.map((header) => {
88
- const value = row[header];
89
- if (value === null || value === undefined) return "";
90
- if (typeof value === "string") {
91
- const escaped = value.replace(/"/g, '""');
92
- return `"${escaped}"`;
93
- }
94
- return value;
95
- }).join(",")
96
- ),
97
- ];
98
- const csvStr = csvRows.join("\n");
99
- downloadAsFile(csvStr, filename);
100
- break;
101
- }
102
- case "sql": {
103
- // Generate CREATE TABLE statement
104
- const createTable = `CREATE TABLE IF NOT EXISTS ${tableName} (\n` +
105
- schema.map(col => {
106
- const constraints = [];
107
- if (col.pk) constraints.push('PRIMARY KEY');
108
- if (!col.notnull) constraints.push('NOT NULL');
109
-
110
- return ` ${col.name} ${col.type}${constraints.length ? ` ${constraints.join(' ')}` : ''}`;
111
- }).join(',\n') +
112
- '\n);\n\n';
113
-
114
- // Generate INSERT statements
115
- const insertStatements = data.map(row => {
116
- const columns = Object.keys(row);
117
- const values = columns.map(col => {
118
- const value = row[col];
119
- if (value === null) return 'NULL';
120
- if (typeof value === 'string') return `'${value.replace(/'/g, "''")}'`;
121
- return value;
122
- });
123
-
124
- return `INSERT INTO ${tableName} (${columns.join(', ')})\nVALUES (${values.join(', ')});`;
125
- }).join('\n');
126
-
127
- const sqlContent = createTable + insertStatements;
128
- downloadAsFile(sqlContent, filename);
129
- break;
130
- }
131
- }
132
-
133
- toast({
134
- title: "Download Complete",
135
- description: `${data.length} rows exported as ${format.toUpperCase()}.`,
136
- });
137
- onDownloadComplete?.();
138
-
139
- } catch (error) {
140
- console.error("Download error:", error);
141
- toast({
142
- variant: "destructive",
143
- title: "Download Failed",
144
- description: error.message,
145
- });
146
- } finally {
147
- setIsDownloading(false);
148
- }
149
- };
150
-
151
- return (
152
- <DropdownMenu>
153
- <TooltipProvider>
154
- <Tooltip>
155
- <TooltipTrigger asChild>
156
- <DropdownMenuTrigger asChild>
157
- <Button
158
- variant="outline"
159
- size="icon"
160
- className="h-8"
161
- disabled={isDownloading || disabled}
162
- >
163
- {isDownloading ? (
164
- <Loader2 className="h-4 w-4 animate-spin" />
165
- ) : (
166
- <Download className="h-4 w-4" />
167
- )}
168
- </Button>
169
- </DropdownMenuTrigger>
170
- </TooltipTrigger>
171
- <TooltipContent>
172
- <p>Download table data</p>
173
- </TooltipContent>
174
- </Tooltip>
175
- </TooltipProvider>
176
- <DropdownMenuContent align="end">
177
- <DropdownMenuItem
178
- onClick={() => handleDownload('json')}
179
- disabled={disabled}
180
- >
181
- <FileJson className="mr-2 h-4 w-4" />
182
- <span>Download JSON</span>
183
- </DropdownMenuItem>
184
- <DropdownMenuItem
185
- onClick={() => handleDownload('csv')}
186
- disabled={disabled}
187
- >
188
- <FileSpreadsheet className="mr-2 h-4 w-4" />
189
- <span>Download CSV</span>
190
- </DropdownMenuItem>
191
- <DropdownMenuItem
192
- onClick={() => handleDownload('sql')}
193
- disabled={disabled}
194
- >
195
- <FileCode className="mr-2 h-4 w-4" />
196
- <span>Download SQL</span>
197
- </DropdownMenuItem>
198
- </DropdownMenuContent>
199
- </DropdownMenu>
200
- );
201
- });
202
-
203
- DownloadButton.displayName = 'DownloadButton';
204
-
205
- export default DownloadButton;
@@ -1,30 +0,0 @@
1
- // components/edit-error-alert.jsx
2
- 'use client';
3
-
4
- import React from 'react';
5
- import { AlertCircle, X } from 'lucide-react';
6
- import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
7
-
8
- export function EditErrorAlert({ error, onDismiss }) {
9
- if (!error) return null;
10
-
11
- return (
12
- <Alert variant="destructive" className="mb-4">
13
- <AlertCircle className="h-4 w-4" />
14
- <AlertTitle className="flex items-center justify-between">
15
- <span>Failed to save changes</span>
16
- {onDismiss && (
17
- <button
18
- onClick={onDismiss}
19
- className="p-1 hover:bg-destructive/10 rounded-full"
20
- >
21
- <X className="h-4 w-4" />
22
- </button>
23
- )}
24
- </AlertTitle>
25
- <AlertDescription>{error.message}</AlertDescription>
26
- </Alert>
27
- );
28
- }
29
-
30
- export default EditErrorAlert;
@@ -1,163 +0,0 @@
1
- // components/editable-cell.jsx
2
-
3
- 'use client';
4
-
5
- import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react';
6
- import { TableCell } from '@/components/ui/table';
7
- import { Input } from '@/components/ui/input';
8
- import {
9
- Select,
10
- SelectContent,
11
- SelectItem,
12
- SelectTrigger,
13
- SelectValue,
14
- } from "@/components/ui/select";
15
-
16
- export function EditableCell({
17
- value: initialValue,
18
- row: _row,
19
- column,
20
- schema,
21
- onChange,
22
- onStartEdit,
23
- isEditing
24
- }) {
25
- const cleanValue = typeof initialValue === 'string' ?
26
- initialValue.replace(/^'|'$/g, '') :
27
- initialValue;
28
-
29
- const [value, setValue] = useState(cleanValue);
30
- const [width, setWidth] = useState('auto');
31
- const cellRef = useRef(null);
32
- const inputRef = useRef(null);
33
-
34
- // Find column schema and extract column type and constraints
35
- const columnSchema = schema.find(col => col.name === column);
36
- const allowedValues = useMemo(() => columnSchema?.check || null, [columnSchema]);
37
- const isBoolean = useMemo(() => {
38
- const type = columnSchema?.type?.toLowerCase() || '';
39
- return type === 'boolean' || type === 'bool' || (type === 'integer' && column.toLowerCase().startsWith('is_'));
40
- }, [columnSchema, column]);
41
-
42
- useEffect(() => {
43
- setValue(cleanValue);
44
- }, [cleanValue]);
45
-
46
- useEffect(() => {
47
- if (cellRef.current && !isEditing) {
48
- const cellWidth = cellRef.current.offsetWidth;
49
- setWidth(`${cellWidth}px`);
50
- }
51
- }, [isEditing]);
52
-
53
- useEffect(() => {
54
- if (isEditing && inputRef.current) {
55
- inputRef.current.focus();
56
- inputRef.current.select();
57
- }
58
- }, [isEditing]);
59
-
60
- // Allow editing of primary key now.
61
- const isPrimaryKey = columnSchema?.pk === 1;
62
-
63
- const handleChange = useCallback((newValue) => {
64
- // Convert boolean values to 1/0 for storage if it's a boolean field
65
- const processedValue = isBoolean ?
66
- (newValue === 'true' ? 1 : newValue === 'false' ? 0 : newValue) :
67
- newValue;
68
-
69
- setValue(newValue);
70
- onChange?.(processedValue);
71
- }, [onChange, isBoolean]);
72
-
73
- const handleCellClick = useCallback(() => {
74
- // Removed isPrimaryKey check so that even primary key cells can be edited
75
- if (!isEditing && onStartEdit) {
76
- onStartEdit(cleanValue);
77
- }
78
- }, [isEditing, onStartEdit, cleanValue]);
79
-
80
- const baseClasses = "border-x border-neutral-200 px-3 py-2.5 text-xs font-mono whitespace-nowrap";
81
-
82
- // Display formatting for cell value when not editing
83
- const displayValue = useMemo(() => {
84
- if (cleanValue === null || cleanValue === undefined) return 'null';
85
- if (isBoolean) {
86
- return cleanValue === 1 || cleanValue === '1' || cleanValue === 'true' ? 'true' : 'false';
87
- }
88
- return cleanValue.toString();
89
- }, [cleanValue, isBoolean]);
90
-
91
- if (!isEditing) {
92
- return (
93
- <TableCell
94
- ref={cellRef}
95
- className={`${baseClasses} cursor-pointer hover:bg-muted/50`}
96
- onClick={handleCellClick}
97
- >
98
- {displayValue}
99
- </TableCell>
100
- );
101
- }
102
-
103
- // Render boolean dropdown
104
- if (isBoolean) {
105
- return (
106
- <TableCell className={`${baseClasses} p-0`} style={{ width }}>
107
- <div className="w-full h-full">
108
- <Select
109
- value={displayValue}
110
- onValueChange={handleChange}
111
- defaultOpen={isEditing}
112
- >
113
- <SelectTrigger className="w-full h-9 min-w-0 rounded-none border-0 bg-orange-50 text-orange-900">
114
- <SelectValue placeholder="Select value" />
115
- </SelectTrigger>
116
- <SelectContent className="min-w-[8rem]">
117
- <SelectItem value="true">true</SelectItem>
118
- <SelectItem value="false">false</SelectItem>
119
- </SelectContent>
120
- </Select>
121
- </div>
122
- </TableCell>
123
- );
124
- }
125
-
126
- // Render check constraint dropdown
127
- if (allowedValues?.length > 0) {
128
- return (
129
- <TableCell className={`${baseClasses} p-0`} style={{ width }}>
130
- <div className="w-full h-full">
131
- <Select
132
- value={value ?? allowedValues[0]}
133
- onValueChange={handleChange}
134
- defaultOpen={isEditing}
135
- >
136
- <SelectTrigger className="w-full h-9 min-w-0 rounded-none border-0 bg-orange-50 text-orange-900">
137
- <SelectValue placeholder={`Select ${column}`} />
138
- </SelectTrigger>
139
- <SelectContent className="min-w-[8rem]">
140
- {allowedValues.map(allowedValue => (
141
- <SelectItem key={allowedValue} value={allowedValue}>
142
- {allowedValue}
143
- </SelectItem>
144
- ))}
145
- </SelectContent>
146
- </Select>
147
- </div>
148
- </TableCell>
149
- );
150
- }
151
-
152
- // Default input for other fields
153
- return (
154
- <TableCell className={`${baseClasses} p-0`} style={{ width }}>
155
- <Input
156
- ref={inputRef}
157
- value={value ?? ''}
158
- onChange={(e) => handleChange(e.target.value)}
159
- className="w-full min-w-0 rounded-none border-0 bg-orange-50 text-orange-900"
160
- />
161
- </TableCell>
162
- );
163
- }
@@ -1,169 +0,0 @@
1
- // components/editable-row.jsx
2
- 'use client';
3
-
4
- import React, { useState } from 'react';
5
- import { TableRow, TableCell } from '@/components/ui/table';
6
- import { Input } from '@/components/ui/input';
7
- import { Checkbox } from '@/components/ui/checkbox';
8
- import { Trash2 } from 'lucide-react';
9
- import { Button } from '@/components/ui/button';
10
- import {
11
- Select,
12
- SelectContent,
13
- SelectItem,
14
- SelectTrigger,
15
- SelectValue,
16
- } from "@/components/ui/select";
17
-
18
- function cleanValue(value) {
19
- return typeof value === 'string' ? value.replace(/^'|'$/g, '') : value;
20
- }
21
-
22
- export function EditableRow({
23
- schema,
24
- onRemove,
25
- onChange,
26
- showCheckbox = false,
27
- initialData = {}
28
- }) {
29
- const [rowData, setRowData] = useState(() => {
30
- return schema.reduce((acc, col) => {
31
- let defaultValue = initialData[col.name] ?? null;
32
- defaultValue = cleanValue(defaultValue);
33
-
34
- if (defaultValue === null) {
35
- if (col.dflt_value) {
36
- defaultValue = cleanValue(col.dflt_value);
37
- } else if (col.type.toUpperCase() === 'INTEGER') {
38
- defaultValue = '';
39
- } else if (col.type.toUpperCase() === 'TEXT') {
40
- defaultValue = '';
41
- }
42
- }
43
-
44
- acc[col.name] = defaultValue;
45
- return acc;
46
- }, {});
47
- });
48
-
49
- const handleChange = (column, value) => {
50
- const newData = { ...rowData, [column]: value };
51
- setRowData(newData);
52
- onChange?.(newData);
53
- };
54
-
55
- const isBoolean = (col) => {
56
- const type = col.type?.toLowerCase() || '';
57
- return type === 'boolean' ||
58
- type === 'bool' ||
59
- (type === 'integer' && col.name.toLowerCase().startsWith('is_'));
60
- };
61
-
62
- return (
63
- <TableRow className="bg-orange-50/50">
64
- <TableCell className="w-10 p-0">
65
- <div className="pl-1 flex items-center">
66
- {showCheckbox ? (
67
- <Checkbox disabled />
68
- ) : (
69
- <Button
70
- variant="ghost"
71
- size="icon"
72
- className="h-8 w-8 text-orange-700 hover:text-orange-800"
73
- onClick={onRemove}
74
- >
75
- <Trash2 className="h-4 w-4" />
76
- </Button>
77
- )}
78
- </div>
79
- </TableCell>
80
- {schema.map((col) => {
81
- const isPrimaryKey = col.pk === 1;
82
- const allowedValues = col.check || null;
83
-
84
- // Handle boolean fields
85
- if (isBoolean(col)) {
86
- // Parse default value from schema
87
- let defaultBoolValue = 'false';
88
- if (col.dflt_value !== null && col.dflt_value !== undefined) {
89
- // Handle different formats of default values
90
- const dfltVal = col.dflt_value.toString().toLowerCase();
91
- defaultBoolValue = (
92
- dfltVal === '1' ||
93
- dfltVal === 'true' ||
94
- dfltVal === "'true'" ||
95
- dfltVal === '"true"'
96
- ) ? 'true' : 'false';
97
- }
98
-
99
- // Use rowData if it exists, otherwise use default
100
- const currentValue = rowData[col.name] !== null && rowData[col.name] !== undefined
101
- ? (rowData[col.name] === 1 || rowData[col.name] === true || rowData[col.name] === 'true' ? 'true' : 'false')
102
- : defaultBoolValue;
103
-
104
- return (
105
- <TableCell key={col.name} className="border-x border-neutral-200 p-0">
106
- <div className="w-full">
107
- <Select
108
- value={currentValue}
109
- onValueChange={(value) => handleChange(col.name, value === 'true' ? 1 : 0)}
110
- // Removed disabled={isPrimaryKey} to allow editing
111
- >
112
- <SelectTrigger
113
- className="w-full h-9 min-w-0 rounded-none border-0 bg-orange-50 text-orange-900"
114
- title={`Default: ${defaultBoolValue}`}
115
- >
116
- <SelectValue placeholder={`Select ${col.name}`} />
117
- </SelectTrigger>
118
- <SelectContent className="min-w-[8rem]">
119
- <SelectItem value="true">true</SelectItem>
120
- <SelectItem value="false">false</SelectItem>
121
- </SelectContent>
122
- </Select>
123
- </div>
124
- </TableCell>
125
- );
126
- }
127
-
128
- // Handle fields with check constraints
129
- if (allowedValues?.length > 0) {
130
- return (
131
- <TableCell key={col.name} className="border-x border-neutral-200 p-0">
132
- <div className="w-full">
133
- <Select
134
- value={rowData[col.name] ?? allowedValues[0]}
135
- onValueChange={(value) => handleChange(col.name, value)}
136
- // Removed disabled={isPrimaryKey} to allow editing
137
- >
138
- <SelectTrigger className="w-full h-9 min-w-0 rounded-none border-0 bg-orange-50 text-orange-900">
139
- <SelectValue placeholder={`Select ${col.name}`} />
140
- </SelectTrigger>
141
- <SelectContent className="min-w-[8rem]">
142
- {allowedValues.map(value => (
143
- <SelectItem key={value} value={value}>
144
- {value}
145
- </SelectItem>
146
- ))}
147
- </SelectContent>
148
- </Select>
149
- </div>
150
- </TableCell>
151
- );
152
- }
153
-
154
- // Default input for other fields (primary key input is now editable)
155
- return (
156
- <TableCell key={col.name} className="border-x border-neutral-200 p-0">
157
- <Input
158
- value={rowData[col.name] ?? ''}
159
- onChange={(e) => handleChange(col.name, e.target.value)}
160
- className="w-full min-w-0 rounded-none border-0 px-2 bg-orange-50 text-orange-900"
161
- placeholder={isPrimaryKey ? 'Auto-generated' : `Enter ${col.name}`}
162
- // Removed disabled={isPrimaryKey} so primary key can be edited
163
- />
164
- </TableCell>
165
- );
166
- })}
167
- </TableRow>
168
- );
169
- }