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,174 +0,0 @@
1
- // app/api/migrations/sync/route.js
2
-
3
- import { NextResponse } from 'next/server';
4
- import { findWranglerConfig } from '@/lib/find-wrangler-config.js';
5
- import { readFile } from 'fs/promises';
6
- import path from 'path';
7
- import {
8
- compareMigrations,
9
- trackMigration,
10
- createChecksum
11
- } from '@/lib/migrations';
12
- import { promisify } from 'util';
13
- import { exec } from 'child_process';
14
- import logger from '@/lib/logger';
15
-
16
- const execAsync = promisify(exec);
17
-
18
- /**
19
- * POST handler for syncing migrations.
20
- * Uses the centralized Wrangler configuration helper to determine the D1 database.
21
- */
22
- export async function POST(req) {
23
- logger.logRequest('POST', '/api/migrations/sync');
24
-
25
- try {
26
- const { accountId, apiToken } = await req.json();
27
- const projectDir = process.env.D1_PROJECT_DIR;
28
-
29
- if (!projectDir) {
30
- logger.error('Project directory not configured');
31
- return NextResponse.json(
32
- { error: 'Project directory not configured' },
33
- { status: 500 }
34
- );
35
- }
36
-
37
- // Use the helper to load the Wrangler configuration
38
- const wranglerResult = await findWranglerConfig(projectDir);
39
- if (!wranglerResult || !wranglerResult.config) {
40
- return NextResponse.json(
41
- { error: 'No Wrangler configuration file found in project directory' },
42
- { status: 404 }
43
- );
44
- }
45
- const config = wranglerResult.config;
46
- if (!config.d1_databases?.length) {
47
- return NextResponse.json(
48
- { error: 'No D1 databases configured' },
49
- { status: 404 }
50
- );
51
- }
52
- const databaseName = config.d1_databases[0].database_name;
53
-
54
- // Initialize remote first (simpler schema)
55
- await execAsync(
56
- `wrangler d1 execute ${databaseName} --remote --command="
57
- CREATE TABLE IF NOT EXISTS d1_migrations (
58
- id INTEGER PRIMARY KEY AUTOINCREMENT,
59
- name TEXT NOT NULL UNIQUE,
60
- applied_at DATETIME DEFAULT CURRENT_TIMESTAMP
61
- );"`,
62
- {
63
- env: {
64
- ...process.env,
65
- CLOUDFLARE_ACCOUNT_ID: accountId,
66
- CLOUDFLARE_API_TOKEN: apiToken
67
- },
68
- cwd: projectDir
69
- }
70
- );
71
-
72
- // For local, explicitly create with nullable checksum
73
- await execAsync(
74
- `wrangler d1 execute ${databaseName} --local --command="
75
- CREATE TABLE IF NOT EXISTS d1_migrations (
76
- id INTEGER PRIMARY KEY AUTOINCREMENT,
77
- name TEXT NOT NULL UNIQUE,
78
- checksum TEXT DEFAULT NULL,
79
- applied_at DATETIME DEFAULT CURRENT_TIMESTAMP
80
- );"`,
81
- { cwd: projectDir }
82
- );
83
-
84
- // Compare migrations between environments
85
- const comparison = await compareMigrations(projectDir, databaseName);
86
-
87
- // Handle pending migrations
88
- const results = {
89
- applied: [],
90
- failed: [],
91
- skipped: []
92
- };
93
-
94
- for (const migration of comparison.pending) {
95
- try {
96
- // Read migration file content
97
- const migrationPath = path.join(projectDir, 'migrations', migration.name);
98
- const migrationContent = await readFile(migrationPath, 'utf8');
99
-
100
- // Execute migration in remote environment using Wrangler
101
- const process = await execAsync(
102
- `wrangler d1 execute ${databaseName} --remote --command='${migrationContent.replace(/'/g, "''")}'`,
103
- {
104
- env: {
105
- ...process.env,
106
- CLOUDFLARE_ACCOUNT_ID: accountId,
107
- CLOUDFLARE_API_TOKEN: apiToken
108
- },
109
- cwd: projectDir
110
- }
111
- );
112
-
113
- // Track successful migration in the remote environment
114
- await trackMigration(projectDir, databaseName, {
115
- name: migration.name,
116
- environment: 'remote',
117
- status: 'applied',
118
- checksum: createChecksum(migrationContent),
119
- version: migration.version
120
- });
121
-
122
- results.applied.push(migration.name);
123
-
124
- } catch (error) {
125
- console.error(`Failed to apply migration ${migration.name}:`, error);
126
-
127
- // Track failed migration
128
- await trackMigration(projectDir, databaseName, {
129
- name: migration.name,
130
- environment: 'remote',
131
- status: 'failed',
132
- checksum: migration.checksum,
133
- version: migration.version,
134
- errorMessage: error.message
135
- });
136
-
137
- results.failed.push({
138
- name: migration.name,
139
- error: error.message
140
- });
141
- }
142
- }
143
-
144
- // Handle migration conflicts (e.g., checksum mismatches)
145
- for (const conflict of comparison.conflicts) {
146
- results.skipped.push({
147
- name: conflict.name,
148
- reason: 'Checksum mismatch between environments'
149
- });
150
- }
151
-
152
- return NextResponse.json({
153
- success: true,
154
- results: {
155
- ...results,
156
- synced: comparison.synced
157
- }
158
- });
159
-
160
- } catch (error) {
161
- logger.logError(error, 'migrations-sync-route');
162
- return NextResponse.json({
163
- success: false,
164
- error: {
165
- message: 'Failed to sync migrations',
166
- details: error.message
167
- }
168
- }, { status: 500 });
169
- }
170
- }
171
-
172
- export async function OPTIONS() {
173
- return new NextResponse(null, { status: 204 });
174
- }
@@ -1,172 +0,0 @@
1
- // app/api/migrations/sync-files/route.js
2
-
3
- import { NextResponse } from 'next/server';
4
- import { findWranglerConfig } from '@/lib/find-wrangler-config.js';
5
- import { readFile, readdir } from 'fs/promises';
6
- import path from 'path';
7
- import { promisify } from 'util';
8
- import { exec } from 'child_process';
9
- import { createChecksum } from '@/lib/migrations';
10
-
11
- const execAsync = promisify(exec);
12
-
13
- /**
14
- * Retrieves the list of migrations recorded in the D1 migrations table.
15
- */
16
- async function getDatabaseMigrations(projectDir, databaseName) {
17
- try {
18
- const { stdout } = await execAsync(
19
- `wrangler d1 execute ${databaseName} --local --command="SELECT name, checksum FROM d1_migrations;" --json`,
20
- { cwd: projectDir }
21
- );
22
-
23
- const result = JSON.parse(stdout);
24
- return result.results?.[0]?.results || [];
25
- } catch (error) {
26
- console.error('Error getting database migrations:', error);
27
- throw new Error('Failed to get database migrations');
28
- }
29
- }
30
-
31
- /**
32
- * Reads migration files from the local migrations directory.
33
- */
34
- async function getMigrationFiles(projectDir) {
35
- try {
36
- const migrationsDir = path.join(projectDir, 'migrations');
37
- const files = await readdir(migrationsDir);
38
-
39
- const migrations = await Promise.all(
40
- files
41
- .filter(f => f.endsWith('.sql'))
42
- .map(async name => {
43
- const filePath = path.join(migrationsDir, name);
44
- const content = await readFile(filePath, 'utf8');
45
- return {
46
- name,
47
- path: filePath,
48
- content,
49
- checksum: createChecksum(content)
50
- };
51
- })
52
- );
53
-
54
- return migrations.sort((a, b) => a.name.localeCompare(b.name));
55
- } catch (error) {
56
- if (error.code === 'ENOENT') {
57
- return [];
58
- }
59
- throw new Error('Failed to read migration files');
60
- }
61
- }
62
-
63
- /**
64
- * Executes a database query via Wrangler.
65
- */
66
- async function executeQuery(projectDir, databaseName, query) {
67
- try {
68
- await execAsync(
69
- `wrangler d1 execute ${databaseName} --local --command="${query.replace(/"/g, '\\"')}"`,
70
- { cwd: projectDir }
71
- );
72
- return true;
73
- } catch (error) {
74
- console.error('Query execution error:', error);
75
- throw new Error('Failed to execute database query');
76
- }
77
- }
78
-
79
- /**
80
- * POST handler to sync migration files with the D1 migrations table.
81
- * Uses the centralized helper to load the Wrangler configuration.
82
- */
83
- export async function POST(req) {
84
- try {
85
- const projectDir = process.env.D1_PROJECT_DIR;
86
- if (!projectDir) {
87
- return NextResponse.json({ error: 'Project directory not configured' }, { status: 500 });
88
- }
89
-
90
- // Use the helper to get the Wrangler configuration
91
- const wranglerResult = await findWranglerConfig(projectDir);
92
- if (!wranglerResult || !wranglerResult.config) {
93
- return NextResponse.json({ error: 'Could not find Wrangler configuration' }, { status: 404 });
94
- }
95
- const config = wranglerResult.config;
96
- if (!config.d1_databases?.length) {
97
- return NextResponse.json({ error: 'No D1 databases configured' }, { status: 404 });
98
- }
99
- // Get the first D1 database name from the configuration
100
- const databaseName = config.d1_databases[0].database_name;
101
-
102
- // Get migrations from the database and from the local file system
103
- const [dbMigrations, fileMigrations] = await Promise.all([
104
- getDatabaseMigrations(projectDir, databaseName),
105
- getMigrationFiles(projectDir)
106
- ]);
107
-
108
- const dbMigrationsMap = new Map(dbMigrations.map(m => [m.name, m]));
109
- const fileMigrationsMap = new Map(fileMigrations.map(m => [m.name, m]));
110
-
111
- const changes = {
112
- added: [], // New files to add to d1_migrations
113
- removed: [], // Records to remove from d1_migrations
114
- unchanged: [] // Files that match with records
115
- };
116
-
117
- // Identify migrations to remove (record exists in DB but file is missing)
118
- for (const [name] of dbMigrationsMap) {
119
- if (!fileMigrationsMap.has(name)) {
120
- changes.removed.push(name);
121
- }
122
- }
123
-
124
- // Remove records for missing files
125
- if (changes.removed.length > 0) {
126
- const names = changes.removed.map(name => `'${name}'`).join(',');
127
- await executeQuery(
128
- projectDir,
129
- databaseName,
130
- `DELETE FROM d1_migrations WHERE name IN (${names});`
131
- );
132
- }
133
-
134
- // Process each migration file: add new records and mark unchanged
135
- for (const [name, fileMigration] of fileMigrationsMap) {
136
- const dbMigration = dbMigrationsMap.get(name);
137
-
138
- if (!dbMigration) {
139
- // Add new record for file
140
- changes.added.push(name);
141
- await executeQuery(
142
- projectDir,
143
- databaseName,
144
- `INSERT OR REPLACE INTO d1_migrations (name, checksum) VALUES ('${name}', '${fileMigration.checksum}');`
145
- );
146
- } else {
147
- changes.unchanged.push(name);
148
- }
149
- }
150
-
151
- return NextResponse.json({
152
- success: true,
153
- details: {
154
- added: changes.added,
155
- removed: changes.removed,
156
- unchanged: changes.unchanged
157
- }
158
- });
159
-
160
- } catch (error) {
161
- console.error('Migration file sync error:', error);
162
- return NextResponse.json({
163
- error: error.message || 'Failed to sync migrations'
164
- }, {
165
- status: 500
166
- });
167
- }
168
- }
169
-
170
- export async function OPTIONS() {
171
- return new NextResponse(null, { status: 204 });
172
- }
@@ -1,230 +0,0 @@
1
- // api/pull-data/confirm/route.js
2
-
3
- import { NextResponse } from 'next/server';
4
- import { executeSQL } from '@/lib/sql-operations';
5
- import { getCurrentSchema } from '@/lib/schema-operations';
6
- import { findWranglerConfig } from '@/lib/find-wrangler-config.js';
7
- import logger from '@/lib/logger';
8
- import {
9
- fetchRemoteTableData as fetchRemoteDataHelper,
10
- generateBulkInsertSQL
11
- } from '@/lib/sql-operations';
12
-
13
- /**
14
- * Helper to extract the ordering column (primary key) from a table's schema.
15
- * Assumes that each table’s schema object contains a "columns" array with an "isPrimaryKey" flag.
16
- *
17
- * @param {object} tableSchema - Schema info for the table.
18
- * @returns {string} The column name to use for ordering.
19
- */
20
- function getOrderingColumn(tableSchema) {
21
- const pkColumn = tableSchema.columns?.find(col => col.isPrimaryKey);
22
- const orderingCol = pkColumn ? pkColumn.name : 'rowid';
23
- logger.debug(`Determined ordering column for table ${tableSchema.name || 'unknown'}: ${orderingCol}`);
24
- return orderingCol;
25
- }
26
-
27
- /**
28
- * Computes an insertion order for tables based on their foreign key dependencies.
29
- * The returned array is sorted so that if table A is referenced by table B,
30
- * then A appears earlier in the list.
31
- *
32
- * @param {Array<object>} tableSchemas - Array of table schema objects.
33
- * @returns {Array<string>} Ordered array of table names.
34
- */
35
- function computeInsertionOrder(tableSchemas) {
36
- // Build a dependency graph: key = table name, value = set of tables that this table depends on.
37
- const graph = {};
38
- tableSchemas.forEach(table => {
39
- // Initialize graph for this table.
40
- graph[table.name] = new Set();
41
- // Use a regex to find FOREIGN KEY references in the table's SQL.
42
- // This regex assumes the foreign key clause looks like:
43
- // FOREIGN KEY (...) REFERENCES referencedTable(...)
44
- const fkRegex = /FOREIGN KEY\s*\([^)]*\)\s+REFERENCES\s+(\w+)/gi;
45
- let match;
46
- while ((match = fkRegex.exec(table.sql)) !== null) {
47
- const referencedTable = match[1];
48
- graph[table.name].add(referencedTable);
49
- }
50
- });
51
- logger.debug('Computed dependency graph:', graph);
52
-
53
- // Topological sort (depth-first search) to compute insertion order.
54
- const sorted = [];
55
- const visited = {}; // 'temp' = visiting, 'perm' = done
56
-
57
- function visit(tableName) {
58
- if (visited[tableName] === 'temp') {
59
- throw new Error(`Cycle detected in dependencies at table ${tableName}`);
60
- }
61
- if (!visited[tableName]) {
62
- visited[tableName] = 'temp';
63
- // Visit all tables that this table depends on.
64
- graph[tableName].forEach(dep => {
65
- // Only visit if the dependency is in our graph (i.e. among our tables)
66
- if (graph[dep]) {
67
- visit(dep);
68
- }
69
- });
70
- visited[tableName] = 'perm';
71
- sorted.push(tableName);
72
- }
73
- }
74
-
75
- Object.keys(graph).forEach(tableName => {
76
- if (!visited[tableName]) {
77
- visit(tableName);
78
- }
79
- });
80
-
81
- logger.debug('Computed insertion order (parent tables first):', sorted);
82
- return sorted;
83
- }
84
-
85
- /**
86
- * Applies the data pull by:
87
- * 1. Fetching the local schema to determine table names and primary keys.
88
- * 2. Computing the insertion order so that parent tables are inserted before child tables.
89
- * 3. For each table (in insertion order), fetching the latest 100 records from the remote database.
90
- * 4. Generating a bulk insert statement and executing it.
91
- *
92
- * This function aborts the entire process if any insert fails.
93
- *
94
- * @param {string} projectDir
95
- * @param {string} accountId
96
- * @param {string} apiToken
97
- * @param {string} databaseName
98
- * @returns {object} Details of data pulled.
99
- */
100
- async function applyDataPull(projectDir, accountId, apiToken, databaseName) {
101
- logger.debug('Starting data pull process...');
102
- const env = {
103
- ...process.env,
104
- CLOUDFLARE_API_TOKEN: apiToken,
105
- CLOUDFLARE_ACCOUNT_ID: accountId
106
- };
107
-
108
- logger.debug('Fetching current schema for data pull...');
109
- const currentSchema = await getCurrentSchema(projectDir, databaseName, env, false);
110
- // Filter for table objects that have a name.
111
- const tableSchemas = currentSchema.filter(obj => obj.type === 'table' && obj.name);
112
- logger.debug('Local table schema for data pull:', tableSchemas.map(t => t.name));
113
-
114
- // Compute insertion order based on foreign key dependencies.
115
- const insertionOrder = computeInsertionOrder(tableSchemas);
116
- logger.debug('Final computed insertion order:', insertionOrder);
117
-
118
- // Process each table in the computed insertion order.
119
- for (const tableName of insertionOrder) {
120
- const table = tableSchemas.find(t => t.name === tableName);
121
- if (!table) {
122
- logger.debug(`Skipping table ${tableName} as it is not in the current schema list.`);
123
- continue;
124
- }
125
- logger.debug(`Processing table: ${tableName}`);
126
- const orderingColumn = getOrderingColumn(table);
127
- logger.debug(`Fetching data for table: ${tableName} ordered by ${orderingColumn}`);
128
-
129
- // Fetch remote data.
130
- const rows = await fetchRemoteDataHelper(
131
- projectDir,
132
- databaseName,
133
- tableName,
134
- env,
135
- 75,
136
- orderingColumn
137
- );
138
- logger.debug(`Fetched ${rows.length} records for table: ${tableName}`);
139
-
140
- if (rows.length > 0) {
141
- const insertSQL = generateBulkInsertSQL(tableName, rows);
142
- logger.debug(`Generated bulk insert SQL for ${tableName}: ${insertSQL}`);
143
-
144
- try {
145
- // Execute the insert SQL directly.
146
- await executeSQL(projectDir, databaseName, insertSQL, env, false);
147
- logger.debug(`Bulk inserted ${rows.length} records into table: ${tableName}`);
148
- } catch (insertError) {
149
- logger.error(`Error inserting data into table ${tableName}:`, insertError);
150
- // Abort the entire process to preserve data integrity.
151
- throw new Error(`Data pull failed for table ${tableName}: ${insertError.message}`);
152
- }
153
- } else {
154
- logger.debug(`No data fetched for table: ${tableName}`);
155
- }
156
- }
157
- logger.debug('Data pull process completed successfully.');
158
- return { message: 'All data pulled successfully.' };
159
- }
160
-
161
- export async function POST(req) {
162
- try {
163
- logger.debug('Received request for data pull.');
164
- const { accountId, apiToken } = await req.json();
165
- const projectDir = process.env.D1_PROJECT_DIR;
166
- if (!projectDir) {
167
- return NextResponse.json(
168
- {
169
- success: false,
170
- error: {
171
- type: 'VALIDATION_ERROR',
172
- message: 'Project directory not configured'
173
- }
174
- },
175
- { status: 500 }
176
- );
177
- }
178
- const wranglerResult = await findWranglerConfig(projectDir);
179
- if (!wranglerResult || !wranglerResult.config) {
180
- return NextResponse.json(
181
- {
182
- success: false,
183
- error: {
184
- type: 'VALIDATION_ERROR',
185
- message: 'Could not find Wrangler configuration'
186
- }
187
- },
188
- { status: 400 }
189
- );
190
- }
191
- const config = wranglerResult.config;
192
- if (!config.d1_databases?.length) {
193
- return NextResponse.json(
194
- {
195
- success: false,
196
- error: {
197
- type: 'VALIDATION_ERROR',
198
- message: 'No D1 databases configured'
199
- }
200
- },
201
- { status: 400 }
202
- );
203
- }
204
- const databaseName = config.d1_databases[0].database_name;
205
- logger.debug(`Initiating data pull for database: ${databaseName}`);
206
- const result = await applyDataPull(projectDir, accountId, apiToken, databaseName);
207
- logger.debug('Data pull result:', result);
208
- return NextResponse.json({
209
- success: true,
210
- message: result.message,
211
- details: result
212
- });
213
- } catch (error) {
214
- logger.error('Pull data confirm error:', error);
215
- return NextResponse.json(
216
- {
217
- success: false,
218
- error: {
219
- type: error.type || 'EXECUTION_ERROR',
220
- message: error.message || 'Failed to apply data pull'
221
- }
222
- },
223
- { status: 500 }
224
- );
225
- }
226
- }
227
-
228
- export async function OPTIONS() {
229
- return new NextResponse(null, { status: 204 });
230
- }