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,37 +0,0 @@
1
- // utils/database-queue.js
2
-
3
- import logger from '@/lib/logger.js';
4
-
5
- class DatabaseQueue {
6
- constructor() {
7
- this.queue = [];
8
- this.isProcessing = false;
9
- }
10
-
11
- async add(operation) {
12
- return new Promise((resolve, reject) => {
13
- this.queue.push({ operation, resolve, reject });
14
- this.processNext();
15
- });
16
- }
17
-
18
- async processNext() {
19
- if (this.isProcessing || this.queue.length === 0) return;
20
-
21
- this.isProcessing = true;
22
- const { operation, resolve, reject } = this.queue.shift();
23
-
24
- try {
25
- const result = await operation();
26
- resolve(result);
27
- } catch (error) {
28
- logger.error('Error processing database queue operation:', error);
29
- reject(error);
30
- } finally {
31
- this.isProcessing = false;
32
- this.processNext();
33
- }
34
- }
35
- }
36
-
37
- export const dbQueue = new DatabaseQueue();
package/src/lib/error.js DELETED
@@ -1,20 +0,0 @@
1
- // lib/errors.js
2
- export class LicenseError extends Error {
3
- constructor(message, type = 'VALIDATION_ERROR') {
4
- super(message);
5
- this.name = 'LicenseError';
6
- this.type = type;
7
- }
8
- }
9
-
10
- export const ErrorTypes = {
11
- LICENSE_NOT_FOUND: 'LICENSE_NOT_FOUND',
12
- EMAIL_MISMATCH: 'EMAIL_MISMATCH',
13
- INACTIVE_LICENSE: 'INACTIVE_LICENSE',
14
- INACTIVE_SUBSCRIPTION: 'INACTIVE_SUBSCRIPTION',
15
- EXPIRED_SUBSCRIPTION: 'EXPIRED_SUBSCRIPTION',
16
- MAX_ACTIVATIONS: 'MAX_ACTIVATIONS',
17
- CONNECTION_ERROR: 'CONNECTION_ERROR',
18
- VALIDATION_ERROR: 'VALIDATION_ERROR',
19
- SAVE_ERROR: 'SAVE_ERROR'
20
- };
@@ -1,74 +0,0 @@
1
- import { readFile } from 'fs/promises';
2
- import { findUp } from 'find-up';
3
- import { parse as parseToml } from '@iarna/toml';
4
- import stripJsonComments from 'strip-json-comments';
5
- import logger from './logger.js';
6
-
7
- let cachedConfig = null;
8
- let cachedProjectPath = null;
9
-
10
- /**
11
- * Finds and parses the Wrangler configuration file.
12
- * This function caches the result so that the configuration is read and logged only once per project path.
13
- *
14
- * @param {string} userProjectPath - The path where to look for the config file
15
- * @returns {Promise<{config: object, projectPath: string}|null>}
16
- */
17
- export async function findWranglerConfig(userProjectPath) {
18
- try {
19
- if (!userProjectPath || typeof userProjectPath !== 'string') {
20
- throw new Error('Project path is required and must be a string');
21
- }
22
-
23
- // Return the cached config if available for the same project path.
24
- if (cachedConfig && cachedProjectPath === userProjectPath) {
25
- return cachedConfig;
26
- }
27
-
28
- // Define the possible configuration file names in priority order.
29
- const possibleFiles = ['wrangler.toml', 'wrangler.json', 'wrangler.jsonc'];
30
- let configPath = null;
31
- let configFileUsed = null;
32
-
33
- // Search for any of the possible config files.
34
- for (const file of possibleFiles) {
35
- configPath = await findUp(file, { cwd: userProjectPath });
36
- if (configPath) {
37
- configFileUsed = file;
38
- break;
39
- }
40
- }
41
-
42
- if (!configPath) {
43
- logger.warn(`No Wrangler configuration file found in: ${userProjectPath}`);
44
- return null;
45
- }
46
-
47
- logger.info(`Found ${configFileUsed} at: ${configPath}`);
48
-
49
- // Read the configuration file.
50
- let configContent = await readFile(configPath, 'utf-8');
51
- let config;
52
-
53
- // Parse based on file type.
54
- if (configFileUsed.endsWith('.toml')) {
55
- config = parseToml(configContent);
56
- } else {
57
- // If it's JSONC, strip comments before parsing.
58
- if (configFileUsed.endsWith('.jsonc')) {
59
- configContent = stripJsonComments(configContent);
60
- }
61
- config = JSON.parse(configContent);
62
- }
63
-
64
- // Cache the result.
65
- cachedConfig = { config, projectPath: userProjectPath };
66
- cachedProjectPath = userProjectPath;
67
-
68
- return cachedConfig;
69
-
70
- } catch (error) {
71
- logger.error(`Error reading Wrangler configuration: ${error.message}`);
72
- throw error;
73
- }
74
- }
@@ -1,99 +0,0 @@
1
- // lib/license.js
2
- import os from 'os';
3
- import { join } from 'path';
4
- import { readFile, writeFile, mkdir } from 'node:fs/promises';
5
- import { createHash } from 'crypto';
6
- import { LicenseError } from './errors.js';
7
-
8
- export async function generateHardwareId() {
9
- const osInfo = {
10
- platform: process.platform,
11
- arch: process.arch,
12
- cpus: os.cpus().length,
13
- hostname: os.hostname(),
14
- username: os.userInfo().username
15
- };
16
-
17
- const systemString = JSON.stringify(osInfo);
18
- return createHash('sha256').update(systemString).digest('hex');
19
- }
20
-
21
- export async function checkLicenseFile() {
22
- const licenseDir = join(os.homedir(), '.d1studio');
23
- const licensePath = join(licenseDir, 'license.json');
24
-
25
- try {
26
- const licenseData = JSON.parse(await readFile(licensePath, 'utf8'));
27
- const hardwareId = await generateHardwareId();
28
-
29
- if (licenseData.hardwareId !== hardwareId) {
30
- return null;
31
- }
32
-
33
- return licenseData;
34
- } catch (error) {
35
- return null;
36
- }
37
- }
38
-
39
- export async function saveLicenseFile(licenseData) {
40
- const licenseDir = join(os.homedir(), '.d1studio');
41
- const licensePath = join(licenseDir, 'license.json');
42
-
43
- try {
44
- await mkdir(licenseDir, { recursive: true });
45
- await writeFile(licensePath, JSON.stringify(licenseData, null, 2));
46
- } catch (error) {
47
- throw new LicenseError('Failed to save license information', 'SAVE_ERROR');
48
- }
49
- }
50
-
51
- export async function validateLicenseRemote(licenseKey, email, hardwareId) {
52
- const baseUrl = process.env.NODE_ENV === 'development'
53
- ? 'http://localhost:4000'
54
- : 'https://d1-studio.com';
55
-
56
- try {
57
- const response = await fetch(`${baseUrl}/api/validate-license`, {
58
- method: 'POST',
59
- headers: {
60
- 'Content-Type': 'application/json',
61
- },
62
- body: JSON.stringify({
63
- licenseKey,
64
- email,
65
- hardwareId
66
- })
67
- });
68
-
69
- const result = await response.json();
70
-
71
- if (!response.ok) {
72
- throw new LicenseError(
73
- result.message || 'License validation failed',
74
- result.type || 'VALIDATION_ERROR'
75
- );
76
- }
77
-
78
- return result;
79
-
80
- } catch (error) {
81
- if (error instanceof LicenseError) {
82
- throw error;
83
- }
84
-
85
- if (error.name === 'TypeError' && error.message.includes('fetch')) {
86
- throw new LicenseError(
87
- process.env.NODE_ENV === 'development'
88
- ? 'Unable to connect to local license validation service. Make sure the development server is running.'
89
- : 'Unable to connect to license server. Please check your internet connection.',
90
- 'CONNECTION_ERROR'
91
- );
92
- }
93
-
94
- throw new LicenseError(
95
- 'An unexpected error occurred during license validation',
96
- 'VALIDATION_ERROR'
97
- );
98
- }
99
- }
package/src/lib/logger.js DELETED
@@ -1,58 +0,0 @@
1
- import winston from 'winston';
2
-
3
- const { combine, timestamp, printf, colorize } = winston.format;
4
-
5
- const isDevelopment = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === undefined;
6
- const isProduction = process.env.NODE_ENV === 'production';
7
- // Check for DEBUG env var which is set by --debug flag
8
- const isDebug = process.env.DEBUG === 'true';
9
-
10
- const logFormat = printf(({ level, message, timestamp, ...metadata }) => {
11
- let msg = `${timestamp} ${level}: ${message}`;
12
- // Add metadata if present
13
- if (Object.keys(metadata).length > 0) {
14
- msg += ` ${JSON.stringify(metadata)}`;
15
- }
16
- return msg;
17
- });
18
-
19
- const logger = winston.createLogger({
20
- // Set log level based on environment and debug flag
21
- level: isDebug ? 'debug' : (isProduction ? 'warn' : 'info'),
22
- format: combine(
23
- timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
24
- colorize(),
25
- logFormat
26
- ),
27
- transports: [
28
- new winston.transports.Console({
29
- level: isDebug ? 'debug' : (isProduction ? 'warn' : 'info'),
30
- silent: process.env.NODE_ENV === 'test'
31
- })
32
- ]
33
- });
34
-
35
- // Add helper methods
36
- logger.logRequest = (method, path, params = {}) => {
37
- logger.debug(`Request: ${method} ${path}`, params);
38
- };
39
-
40
- logger.logError = (error, source = 'unknown') => {
41
- logger.error(`Error in ${source}: ${error.message}`, {
42
- error: error.stack || error.message,
43
- source
44
- });
45
- };
46
-
47
- logger.shouldLog = (level) => {
48
- const currentLevel = logger.level;
49
- const levels = {
50
- error: 0,
51
- warn: 1,
52
- info: 2,
53
- debug: 3
54
- };
55
- return levels[level] <= levels[currentLevel];
56
- };
57
-
58
- export default logger;
@@ -1,415 +0,0 @@
1
- // /lib/migrations.js
2
-
3
- import { readFile } from 'fs/promises';
4
- import { promisify } from 'util';
5
- import { exec } from 'child_process';
6
- import { createHash } from 'crypto';
7
- import { mkdir, writeFile } from 'fs/promises';
8
- import path from 'path';
9
- import {
10
- executeSQL,
11
- ErrorTypes,
12
- formatMigrationContent,
13
- parseStatement,
14
- validateStatement,
15
- Operations,
16
- tableExists
17
- } from './sql-operations.js';
18
- import { analyzeDependencies } from '@/lib/schema-operations';
19
- import logger from './logger.js';
20
-
21
- const execAsync = promisify(exec);
22
-
23
- /**
24
- * Initializes the migrations table.
25
- * For remote environments: table with (id, name, applied_at).
26
- * For local environments: table with (id, name, checksum, applied_at),
27
- * where checksum is optional.
28
- *
29
- * If reset is true (e.g. during a pull operation), the table is cleared.
30
- *
31
- * @param {string} projectDir
32
- * @param {string} databaseName
33
- * @param {('local'|'remote')} environment
34
- * @param {boolean} [reset=false] - If true, clear existing records.
35
- */
36
- export async function initMigrationsTable(projectDir, databaseName, environment = 'local', reset = false) {
37
- const flag = environment === 'remote' ? '--remote' : '--local';
38
- // For remote, keep original D1 schema
39
- const createTableSQL = environment === 'remote'
40
- ? `
41
- CREATE TABLE IF NOT EXISTS d1_migrations (
42
- id INTEGER PRIMARY KEY AUTOINCREMENT,
43
- name TEXT NOT NULL UNIQUE,
44
- applied_at DATETIME DEFAULT CURRENT_TIMESTAMP
45
- );
46
- `
47
- : `
48
- CREATE TABLE IF NOT EXISTS d1_migrations (
49
- id INTEGER PRIMARY KEY AUTOINCREMENT,
50
- name TEXT NOT NULL UNIQUE,
51
- checksum TEXT NULL,
52
- applied_at DATETIME DEFAULT CURRENT_TIMESTAMP
53
- );
54
- `;
55
-
56
- try {
57
- // Create the table if it doesn't exist
58
- await execAsync(
59
- `wrangler d1 execute ${databaseName} ${flag} --command="${createTableSQL.replace(/"/g, '\\"')}"`,
60
- { cwd: projectDir }
61
- );
62
-
63
- if (reset) {
64
- const deleteSQL = `DELETE FROM d1_migrations;`;
65
- await execAsync(
66
- `wrangler d1 execute ${databaseName} ${flag} --command="${deleteSQL.replace(/"/g, '\\"')}"`,
67
- { cwd: projectDir }
68
- );
69
- }
70
- } catch (error) {
71
- logger.error(`Failed to initialize migrations table in ${environment}:`, error);
72
- throw error;
73
- }
74
- }
75
-
76
- /**
77
- * Generate a migration file name using a stable naming convention.
78
- * Format: YYYYMMDDHHMMSS_operation_tablename[optional-description].sql
79
- *
80
- * @param {Object} stmt - The SQL statement object containing type, tableName and optional description
81
- * @returns {string} The formatted migration filename
82
- */
83
- function getMigrationFileName(stmt) {
84
- const timestamp = new Date().toISOString().replace(/[^0-9]/g, '').slice(0, -3);
85
- const operation = stmt.type.toLowerCase().replace(/_/g, '-');
86
-
87
- // Map for non-index operations.
88
- const operationMap = {
89
- 'create-table': 'create-table',
90
- 'alter-table': 'alter-table',
91
- 'drop-table': 'drop-table',
92
- 'drop-index': 'drop-index',
93
- 'create-view': 'create-view',
94
- 'drop-view': 'drop-view',
95
- 'add-foreign-key': 'add-foreign-key',
96
- 'drop-foreign-key': 'drop-foreign-key',
97
- 'add-constraint': 'add-constraint',
98
- 'drop-constraint': 'drop-constraint'
99
- };
100
-
101
- if (stmt.type === 'CREATE_INDEX') {
102
- // For index migrations, simply include the operation and the description.
103
- const desc = stmt.description.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-_]/g, '');
104
- return `${timestamp}_create-index_${desc}.sql`;
105
- } else {
106
- let fileName = `${timestamp}_${operationMap[operation] || operation}_${stmt.tableName}`;
107
- // Append description for alter migrations if available.
108
- if (stmt.type === 'ALTER_TABLE' && stmt.description) {
109
- fileName += `_${stmt.description}`;
110
- }
111
- fileName = fileName.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-_]/g, '');
112
- return fileName + '.sql';
113
- }
114
- }
115
-
116
- /**
117
- * Validates a migration file by reading, parsing, and validating its SQL.
118
- *
119
- * @param {string} filePath - Full path to the migration file.
120
- * @returns {object} Object with `isValid` flag and either the parsed statement or errors.
121
- */
122
- export async function validateMigrationFile(filePath) {
123
- const content = await readFile(filePath, 'utf8');
124
- try {
125
- const statement = parseStatement(content);
126
- validateStatement(statement);
127
- return { isValid: true, statement };
128
- } catch (error) {
129
- return { isValid: false, errors: error };
130
- }
131
- }
132
-
133
- // Get remote migrations
134
- export async function getRemoteMigrations(projectDir, databaseName, env) {
135
- try {
136
- const result = await executeSQL(
137
- projectDir,
138
- databaseName,
139
- 'SELECT name, applied_at FROM d1_migrations ORDER BY applied_at;',
140
- env,
141
- true
142
- );
143
-
144
- if (typeof result === 'string') {
145
- const jsonStart = result.indexOf('[');
146
- if (jsonStart !== -1) {
147
- const jsonStr = result.substring(jsonStart);
148
- const parsed = JSON.parse(jsonStr);
149
- return parsed[0]?.results || [];
150
- }
151
- }
152
- return [];
153
- } catch (error) {
154
- throw {
155
- type: ErrorTypes.EXECUTION_ERROR,
156
- message: 'Failed to get remote migrations',
157
- details: {
158
- error: error.message,
159
- suggestions: [
160
- 'Check remote database permissions',
161
- 'Verify credentials and connection'
162
- ]
163
- }
164
- };
165
- }
166
- }
167
-
168
- /**
169
- * Records (or tracks) a migration.
170
- * For remote, skips checksum.
171
- *
172
- * @param {string} projectDir
173
- * @param {string} databaseName
174
- * @param {Object} migrationData { name, checksum }
175
- * @param {('local'|'remote')} environment
176
- */
177
- export async function trackMigration(projectDir, databaseName, { name, checksum }, environment = 'local') {
178
- const flag = environment === 'remote' ? '--remote' : '--local';
179
-
180
- // For Studio-originated migrations (with checksum), check if we need to add the column
181
- if (environment === 'local' && checksum) {
182
- try {
183
- // Check if checksum column exists
184
- const hasChecksumColumn = await execAsync(
185
- `wrangler d1 execute ${databaseName} ${flag} --command="SELECT checksum FROM d1_migrations LIMIT 1;"`,
186
- { cwd: projectDir }
187
- ).catch(() => false);
188
-
189
- // If column doesn't exist, alter table to add it
190
- if (!hasChecksumColumn) {
191
- await execAsync(
192
- `wrangler d1 execute ${databaseName} ${flag} --command="ALTER TABLE d1_migrations ADD COLUMN checksum TEXT;"`,
193
- { cwd: projectDir }
194
- );
195
- }
196
- } catch (error) {
197
- // Ignore errors - the column might already exist
198
- }
199
- }
200
-
201
- // For Studio migrations (with checksum)
202
- const insertSQL = environment === 'remote' || !checksum
203
- ? `
204
- INSERT OR REPLACE INTO d1_migrations (name, applied_at)
205
- VALUES ('${name}', CURRENT_TIMESTAMP);
206
- `
207
- : `
208
- INSERT OR REPLACE INTO d1_migrations (name, checksum, applied_at)
209
- VALUES ('${name}', '${checksum}', CURRENT_TIMESTAMP);
210
- `;
211
-
212
- try {
213
- await execAsync(
214
- `wrangler d1 execute ${databaseName} ${flag} --command="${insertSQL.replace(/"/g, '\\"')}"`,
215
- { cwd: projectDir }
216
- );
217
- } catch (error) {
218
- logger.error('Failed to track migration:', error);
219
- throw error;
220
- }
221
- }
222
-
223
- /**
224
- * Records a migration (used during push).
225
- * For remote, checksum is omitted.
226
- *
227
- * @param {string} projectDir
228
- * @param {string} databaseName
229
- * @param {Object} migrationData { name, checksum }
230
- * @param {object} env
231
- * @param {boolean} remote
232
- */
233
- export async function recordMigration(projectDir, databaseName, { name, checksum }, env = {}, remote = false) {
234
- // For CLI migrations or remote, don't include checksum
235
- const sql = remote || !checksum
236
- ? `
237
- INSERT OR REPLACE INTO d1_migrations (name, applied_at)
238
- VALUES ('${name}', CURRENT_TIMESTAMP);
239
- `
240
- : `
241
- INSERT OR REPLACE INTO d1_migrations (name, checksum, applied_at)
242
- VALUES ('${name}', '${checksum}', CURRENT_TIMESTAMP);
243
- `;
244
-
245
- try {
246
- await executeSQL(projectDir, databaseName, sql, env, remote);
247
- } catch (error) {
248
- throw {
249
- type: ErrorTypes.EXECUTION_ERROR,
250
- message: `Failed to record migration ${name}`,
251
- details: {
252
- file: name,
253
- error: error.message,
254
- suggestions: ['Check if migration is already recorded']
255
- }
256
- };
257
- }
258
- }
259
-
260
- /**
261
- * Compares local and remote migrations.
262
- *
263
- * @param {string} projectDir
264
- * @param {string} databaseName
265
- * @returns {Promise<Object>} { applied: Array, count: Number }
266
- */
267
- export async function compareMigrations(projectDir, databaseName) {
268
- try {
269
- const migrations = await getRemoteMigrations(projectDir, databaseName, {});
270
- const migrationMap = new Map(migrations.map(m => [m.name, m]));
271
- return {
272
- applied: Array.from(migrationMap.keys()),
273
- count: migrationMap.size
274
- };
275
- } catch (error) {
276
- logger.error('Failed to compare migrations:', error);
277
- throw error;
278
- }
279
- }
280
-
281
- /**
282
- * Generates a SHA256 checksum for migration content.
283
- *
284
- * @param {string} content
285
- * @returns {string}
286
- */
287
- export function createChecksum(content) {
288
- return createHash('sha256').update(content).digest('hex');
289
- }
290
-
291
- /**
292
- * Processes schema changes (DDL) and creates migration files.
293
- * Uses a stable naming convention:
294
- * YYYYMMDDHHMMSS_operation_tablename[optional-description].sql
295
- *
296
- * Executes the SQL, writes the migration file, and tracks it.
297
- * If any part fails, the process aborts (all-or-nothing).
298
- *
299
- * This updated version uses analyzeDependencies to order the changes.
300
- *
301
- * @param {string} projectDir
302
- * @param {string} databaseName
303
- * @param {Array<Object>} statements - Parsed schema change statements.
304
- * Each statement is expected to have at least a `tableName` (if applicable) and `sql` property.
305
- * @returns {Promise<Array>} Array of migration records.
306
- */
307
- export async function handleSchemaChange(projectDir, databaseName, statements) {
308
- try {
309
- const migrationsDir = path.join(projectDir, 'migrations');
310
- await mkdir(migrationsDir, { recursive: true });
311
- const results = [];
312
-
313
- // Partition statements into schema changes and data modifications.
314
- const schemaChanges = [];
315
- const dataModifications = [];
316
- for (const stmt of statements) {
317
- if (stmt.type === Operations.DATA_MODIFICATION) {
318
- dataModifications.push(stmt);
319
- } else {
320
- schemaChanges.push(stmt);
321
- }
322
- }
323
-
324
- // Group schema change statements by table name.
325
- const groupedStatements = new Map();
326
- const NO_TABLE_KEY = '__no_table__';
327
- for (const stmt of schemaChanges) {
328
- const key = stmt.tableName ? stmt.tableName.toLowerCase() : NO_TABLE_KEY;
329
- if (!groupedStatements.has(key)) {
330
- groupedStatements.set(key, []);
331
- }
332
- groupedStatements.get(key).push(stmt);
333
- }
334
-
335
- // For those with a table name, get an ordered list using analyzeDependencies.
336
- const tableKeys = [...groupedStatements.keys()].filter(key => key !== NO_TABLE_KEY);
337
- let orderedTables = [];
338
- if (tableKeys.length > 0) {
339
- const sampleStatements = tableKeys.map(key => groupedStatements.get(key)[0]);
340
- orderedTables = analyzeDependencies(sampleStatements);
341
- }
342
-
343
- // Process schema changes (create migration files).
344
- for (const tableName of orderedTables) {
345
- const stmts = groupedStatements.get(tableName) || [];
346
- for (const stmt of stmts) {
347
- try {
348
- // For DROP TABLE statements, check if the table exists.
349
- if (stmt.type === Operations.DROP_TABLE) {
350
- const exists = await tableExists(projectDir, databaseName, {}, stmt.tableName, false);
351
- if (!exists) {
352
- throw new Error(`no such table: ${stmt.tableName}`);
353
- }
354
- }
355
- // Execute the schema change SQL.
356
- const result = await executeSQL(projectDir, databaseName, stmt.sql);
357
- // Check the output for syntax error messages.
358
- if (
359
- result &&
360
- (result.toLowerCase().includes('syntax error') ||
361
- result.toLowerCase().includes('sqlite_error'))
362
- ) {
363
- throw new Error(result);
364
- }
365
- // Generate a migration file.
366
- const migrationFileName = getMigrationFileName(stmt);
367
- const migrationPath = path.join(migrationsDir, migrationFileName);
368
- const formattedSQL = formatMigrationContent(stmt.sql);
369
- await writeFile(migrationPath, formattedSQL, 'utf8');
370
- // Compute checksum and track the migration.
371
- const checksum = createChecksum(stmt.sql);
372
- await trackMigration(projectDir, databaseName, { name: migrationFileName, checksum }, 'local');
373
- results.push({ type: stmt.type, table: stmt.tableName, migration: migrationFileName, checksum });
374
- } catch (error) {
375
- throw error;
376
- }
377
- }
378
- groupedStatements.delete(tableName);
379
- }
380
-
381
- // Process any remaining schema changes with no table name.
382
- if (groupedStatements.has(NO_TABLE_KEY)) {
383
- for (const stmt of groupedStatements.get(NO_TABLE_KEY)) {
384
- try {
385
- await executeSQL(projectDir, databaseName, stmt.sql);
386
- const migrationFileName = getMigrationFileName(stmt);
387
- const migrationPath = path.join(migrationsDir, migrationFileName);
388
- const formattedSQL = formatMigrationContent(stmt.sql);
389
- await writeFile(migrationPath, formattedSQL, 'utf8');
390
- const checksum = createChecksum(stmt.sql);
391
- await trackMigration(projectDir, databaseName, { name: migrationFileName, checksum }, 'local');
392
- results.push({ type: stmt.type, table: stmt.tableName || null, migration: migrationFileName, checksum });
393
- } catch (error) {
394
- throw error;
395
- }
396
- }
397
- }
398
-
399
- // Now process data modification statements (execute them, but don't create migration files).
400
- for (const stmt of dataModifications) {
401
- try {
402
- await executeSQL(projectDir, databaseName, stmt.sql);
403
- // Record the success of the data modification execution.
404
- results.push({ type: stmt.type, table: stmt.tableName || null, executed: true });
405
- } catch (error) {
406
- throw error;
407
- }
408
- }
409
-
410
- return results;
411
- } catch (error) {
412
- throw error;
413
- }
414
- }
415
-