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
package/scripts/studio.js DELETED
@@ -1,199 +0,0 @@
1
- #!/usr/bin/env node
2
- import chalk from 'chalk';
3
- import open from 'open';
4
- import { fileURLToPath } from 'url';
5
- import { dirname, join } from 'path';
6
- import express from 'express';
7
- import { createServer } from 'http';
8
- import next from 'next';
9
- import { findWranglerConfig } from '../src/lib/find-wrangler-config.js';
10
- import logger from '../src/lib/logger.js';
11
- import updateNotifier from 'update-notifier';
12
- import pkg from '../package.json' with { type: 'json' };
13
-
14
- // Check for debug flag
15
- const hasDebugFlag = process.argv.includes('--debug');
16
- if (hasDebugFlag) {
17
- process.env.DEBUG = 'true';
18
- logger.debug('Debug mode enabled');
19
- }
20
-
21
- const notifier = updateNotifier({
22
- pkg,
23
- updateCheckInterval: 1000 * 60 * 60 * 24,
24
- });
25
-
26
- // Check if update is available
27
- if (notifier.update) {
28
- // Get current version and latest version
29
- const currentVersion = pkg.version;
30
- const latestVersion = notifier.update.latest;
31
-
32
- // Version-specific messages
33
- const versionMessages = {
34
- // Add specific version messages here
35
- '0.2.11': 'Fixed table toolbar and table view horizontal/vertical scroll issues'
36
- // Add more version messages as needed
37
- };
38
-
39
- // Create custom message
40
- let message = `Update available ${chalk.dim(currentVersion)} → ${chalk.green(latestVersion)}`;
41
-
42
- // Add version-specific message if available
43
- if (versionMessages[latestVersion]) {
44
- message += `\n${chalk.cyan('What\'s new:')} ${versionMessages[latestVersion]}`;
45
- }
46
-
47
- // Add installation instructions
48
- message += `\nRun ${chalk.cyan('npm i -g d1s@latest')} to update`;
49
-
50
- // Display custom notification
51
- notifier.notify({ message });
52
- }
53
-
54
- // Compute the absolute path of this file and its directory
55
- const __filename = fileURLToPath(import.meta.url);
56
- const __dirname = dirname(__filename);
57
-
58
- async function startServer(port, projectDirectory) {
59
- return new Promise((resolvePromise, rejectPromise) => {
60
- // Determine Next.js app directory based on environment:
61
- // In production (published package) __dirname is used.
62
- // In development (npm link), assume the build is in the parent folder.
63
- const isProduction = process.env.NODE_ENV !== 'development';
64
- const nextAppDir = isProduction ? __dirname : join(__dirname, '..');
65
-
66
- const dev = process.env.NODE_ENV === 'development';
67
- const app = next({
68
- dev,
69
- dir: nextAppDir,
70
- conf: {
71
- distDir: '.next',
72
- experimental: { appDir: true }
73
- }
74
- });
75
- const handle = app.getRequestHandler();
76
-
77
- app.prepare()
78
- .then(() => {
79
- const server = express();
80
- process.env.PORT = port.toString();
81
- process.env.D1_PROJECT_DIR = projectDirectory;
82
- const httpServer = createServer((req, res) => handle(req, res));
83
-
84
- server.all('*', (req, res) => handle(req, res));
85
-
86
- httpServer.listen(port, (err) => {
87
- if (err) {
88
- logger.error(chalk.red(`Failed to start server: ${err}`));
89
- rejectPromise(err);
90
- return;
91
- }
92
- logger.info(chalk.green(`Server started on port ${port}`));
93
- resolvePromise(httpServer);
94
- });
95
-
96
- httpServer.on('error', (err) => {
97
- logger.error(chalk.red(`Server error: ${err}`));
98
- rejectPromise(err);
99
- });
100
- })
101
- .catch((err) => {
102
- logger.error(chalk.red(`Failed to prepare Next.js app: ${err}`));
103
- rejectPromise(err);
104
- });
105
- });
106
- }
107
-
108
- async function startStudio() {
109
- try {
110
- logger.info(chalk.green('Initializing D1 Studio...'));
111
-
112
- // Get wrangler configuration
113
- try {
114
- const userProjectPath = process.cwd();
115
- if (!userProjectPath) {
116
- logger.error(chalk.red('Error: Could not determine project directory'));
117
- process.exit(1);
118
- }
119
-
120
- const wranglerResult = await findWranglerConfig(userProjectPath);
121
- if (!wranglerResult || !wranglerResult.config) {
122
- logger.error(chalk.red('\nError: No wrangler.toml found in current directory'));
123
- logger.info(chalk.yellow('Make sure you are in a Cloudflare Workers project directory'));
124
- logger.info(chalk.yellow('with a valid wrangler.toml file.'));
125
- process.exit(1);
126
- }
127
-
128
- const { config, projectPath } = wranglerResult;
129
- if (!config.d1_databases?.length) {
130
- logger.error(chalk.red('\nError: No D1 databases configured in wrangler.toml'));
131
- logger.info(chalk.yellow('\nAdd D1 configuration to your wrangler.toml:'));
132
- logger.info(chalk.gray(`
133
- [[d1_databases]]
134
- binding = "DB"
135
- database_name = "my-database"
136
- database_id = "<your-database-id>"
137
- `));
138
- process.exit(1);
139
- }
140
-
141
- logger.info(chalk.green('\nFound D1 databases:'));
142
- config.d1_databases.forEach((db) => {
143
- logger.info(chalk.blue(` - ${db.database_name} (${db.binding})`));
144
- });
145
-
146
- const port = 4000;
147
- const url = `http://localhost:${port}`;
148
-
149
- await startServer(port, projectPath);
150
-
151
- logger.info(chalk.green(`
152
- ┌─────────────────────────────────────────┐
153
- │ │
154
- │ D1 Studio is running on port ${port} │
155
- │ │
156
- │ Local: ${url} │
157
- │ │
158
- └─────────────────────────────────────────┘
159
- `));
160
-
161
- await new Promise(resolve => setTimeout(resolve, 2000));
162
-
163
- try {
164
- await open(url, {
165
- wait: false,
166
- url: true,
167
- app: { name: open.apps.chrome }
168
- }).catch(() => {
169
- return open(url, { wait: false, url: true });
170
- });
171
- } catch (browserError) {
172
- logger.info(chalk.yellow('\nCould not automatically open browser.'));
173
- logger.info(chalk.blue(`Please open your browser and navigate to: ${url}`));
174
- }
175
- } catch (configError) {
176
- logger.error(chalk.red(`\nConfiguration error: ${configError.message}`));
177
- process.exit(1);
178
- }
179
- } catch (error) {
180
- logger.error(chalk.red(`\nFailed to start D1 Studio: ${error}`));
181
- process.exit(1);
182
- }
183
- }
184
-
185
- // Handle termination
186
- process.on('SIGINT', () => {
187
- logger.info(chalk.yellow('\nShutting down D1 Studio...'));
188
- process.exit(0);
189
- });
190
-
191
- process.on('SIGTERM', () => {
192
- logger.info(chalk.yellow('\nShutting down D1 Studio...'));
193
- process.exit(0);
194
- });
195
-
196
- startStudio().catch((error) => {
197
- logger.error(chalk.red(`\nFailed to start D1 Studio: ${error}`));
198
- process.exit(1);
199
- });
package/scripts/test.js DELETED
@@ -1,366 +0,0 @@
1
- // scripts/test.js
2
- import { findWranglerConfig } from '../src/lib/find-wrangler-config.js';
3
- import { fileURLToPath } from 'url';
4
- import { dirname, join } from 'path';
5
- import chalk from 'chalk';
6
- import fs from 'fs/promises';
7
- import os from 'os';
8
- import { exec, execSync } from 'child_process';
9
- import { promisify } from 'util';
10
- import winston from 'winston';
11
- import logger from '../src/lib/logger.js';
12
-
13
- const execAsync = promisify(exec);
14
- const __filename = fileURLToPath(import.meta.url);
15
- const __dirname = dirname(__filename);
16
-
17
- // Mock license data for testing
18
- const mockLicenseData = {
19
- licenseKey: 'test-license-key',
20
- email: 'test@example.com',
21
- hardwareId: 'mock-hardware-id',
22
- end_date: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(), // 30 days from now
23
- subscription_status: 'active',
24
- type: 'test',
25
- activatedAt: new Date().toISOString()
26
- };
27
-
28
- // Test configuration file contents
29
- const mockNextConfig = `
30
- /** @type {import('next').NextConfig} */
31
- const nextConfig = {
32
- output: 'standalone',
33
- }
34
- module.exports = nextConfig
35
- `;
36
-
37
- const mockTailwindConfig = `
38
- /** @type {import('tailwindcss').Config} */
39
- module.exports = {
40
- content: [
41
- './src/**/*.{js,ts,jsx,tsx,mdx}',
42
- ],
43
- theme: {
44
- extend: {},
45
- },
46
- plugins: [],
47
- }
48
- `;
49
-
50
- // Test Wrangler config file contents
51
- const mockWranglerConfig = `
52
- [[d1_databases]]
53
- binding = "DB"
54
- database_name = "test_db"
55
- database_id = "test-id"
56
- `;
57
-
58
- // Create mock configuration files in a given directory.
59
- async function createMockConfigs(testDir) {
60
- await fs.writeFile(join(testDir, 'next.config.js'), mockNextConfig);
61
- await fs.writeFile(join(testDir, 'tailwind.config.js'), mockTailwindConfig);
62
- await fs.writeFile(join(testDir, 'wrangler.toml'), mockWranglerConfig);
63
- }
64
-
65
- async function createMockPackageAndDist(testDir) {
66
- const packageJsonPath = join(testDir, 'package.json');
67
- const packageJsonContent = JSON.stringify({
68
- name: "d1-studio",
69
- version: "1.0.0",
70
- main: "dist/d1-studio.js"
71
- }, null, 2);
72
- await fs.writeFile(packageJsonPath, packageJsonContent);
73
-
74
- const distDir = join(testDir, 'dist');
75
- await fs.mkdir(distDir, { recursive: true });
76
- const d1StudioPath = join(distDir, 'd1-studio.js');
77
- const d1StudioContent = `#!/usr/bin/env node
78
- if (process.argv.includes('--version')) {
79
- console.log('1.0.0');
80
- } else {
81
- console.log('D1 Studio CLI');
82
- }
83
- `;
84
- await fs.writeFile(d1StudioPath, d1StudioContent);
85
- await fs.chmod(d1StudioPath, 0o755);
86
- }
87
-
88
- async function testProjectStructure() {
89
- console.log('\nTesting project structure...');
90
- const requiredDirs = ['src', 'scripts', 'dist'];
91
- for (const dir of requiredDirs) {
92
- try {
93
- await fs.access(join(__dirname, '..', dir));
94
- console.log(chalk.green(`✓ ${dir} directory exists`));
95
- } catch {
96
- console.warn(chalk.yellow(`⚠ ${dir} directory missing`));
97
- }
98
- }
99
- const testDir = await fs.mkdtemp(join(os.tmpdir(), 'd1-studio-test-'));
100
- await createMockConfigs(testDir);
101
- await createMockPackageAndDist(testDir);
102
- const requiredFiles = [
103
- 'package.json',
104
- 'next.config.js',
105
- 'tailwind.config.js',
106
- 'scripts/studio.js'
107
- ];
108
- for (const file of requiredFiles) {
109
- try {
110
- await fs.access(join(testDir, file));
111
- console.log(chalk.green(`✓ ${file} exists`));
112
- } catch {
113
- console.warn(chalk.yellow(`⚠ ${file} missing or not copied`));
114
- }
115
- }
116
- return testDir;
117
- }
118
-
119
- async function testWranglerConfig(testDir) {
120
- console.log('\nTesting Wrangler configuration...');
121
- try {
122
- const config = await findWranglerConfig(testDir);
123
- if (!config || !config.config.d1_databases) {
124
- console.warn(chalk.yellow('⚠ Valid wrangler.toml test: Config parsing incomplete'));
125
- } else {
126
- console.log(chalk.green('✓ Valid wrangler.toml test passed'));
127
- }
128
- } catch (error) {
129
- console.warn(chalk.yellow('⚠ Valid wrangler.toml test issues:'), error.message);
130
- }
131
- try {
132
- await fs.writeFile(join(testDir, 'wrangler.toml'), 'invalid: config: {');
133
- await findWranglerConfig(testDir);
134
- console.warn(chalk.yellow('⚠ Invalid wrangler.toml test: Did not catch invalid config'));
135
- } catch (error) {
136
- console.log(chalk.green('✓ Invalid wrangler.toml handling test passed'));
137
- }
138
- }
139
-
140
- async function testCaching(testDir) {
141
- console.log('\nTesting caching of findWranglerConfig...');
142
- const config1 = await findWranglerConfig(testDir);
143
- console.log(chalk.green('✓ First call completed.'));
144
- const config2 = await findWranglerConfig(testDir);
145
- console.log(chalk.green('✓ Second call completed.'));
146
- if (JSON.stringify(config1) === JSON.stringify(config2)) {
147
- console.log(chalk.green('✓ Caching works: configurations are identical'));
148
- } else {
149
- console.warn(chalk.yellow('⚠ Caching issue: configurations differ'));
150
- }
151
- const newTestDir = await fs.mkdtemp(join(os.tmpdir(), 'new-d1-studio-test-'));
152
- await fs.writeFile(join(newTestDir, 'wrangler.toml'), mockWranglerConfig);
153
- const configNew = await findWranglerConfig(newTestDir);
154
- console.log(chalk.green('✓ New project configuration loaded.'));
155
- await fs.rm(newTestDir, { recursive: true, force: true });
156
- }
157
-
158
- async function testLoggerBehavior() {
159
- console.log('\nTesting logger behavior in production mode...');
160
- const { combine, timestamp, colorize, printf } = winston.format;
161
- const logFormat = printf(({ level, message, timestamp }) => {
162
- return `${timestamp} ${level}: ${message}`;
163
- });
164
- const originalNodeEnv = process.env.NODE_ENV;
165
- const originalDebug = process.env.DEBUG;
166
- process.env.NODE_ENV = 'production';
167
- process.env.DEBUG = 'false';
168
- class MemoryTransport extends winston.Transport {
169
- constructor(opts) {
170
- super(opts);
171
- this.logs = [];
172
- }
173
- log(info, callback) {
174
- this.logs.push(info);
175
- callback();
176
- }
177
- }
178
- const memTransport = new MemoryTransport({ level: 'warn' });
179
- logger.configure({
180
- level: 'warn',
181
- format: combine(
182
- timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
183
- colorize(),
184
- logFormat
185
- ),
186
- transports: [
187
- new winston.transports.Console({ level: 'warn', silent: true }),
188
- memTransport
189
- ]
190
- });
191
- logger.debug('Test debug message');
192
- logger.info('Test info message');
193
- logger.warn('Test warn message');
194
- logger.error('Test error message');
195
- await new Promise(resolve => setTimeout(resolve, 100));
196
- const messages = memTransport.logs.map(log => log.message);
197
- if (messages.includes('Test debug message') || messages.includes('Test info message')) {
198
- console.warn(chalk.yellow('⚠ Logger behavior failed in production mode: debug or info messages were logged.'));
199
- } else {
200
- console.log(chalk.green('✓ Logger behavior in production mode passed: only warn/error messages logged.'));
201
- }
202
- logger.clear();
203
- process.env.NODE_ENV = originalNodeEnv;
204
- process.env.DEBUG = originalDebug;
205
- }
206
-
207
- async function testPackageExecution(testDir) {
208
- console.log('\nTesting package execution...');
209
- try {
210
- const destDir = join(testDir, 'node_modules', 'd1studio');
211
- await fs.mkdir(destDir, { recursive: true });
212
- await fs.cp(join(testDir, 'dist'), destDir, { recursive: true });
213
- const d1StudioPath = join(destDir, 'dist', 'd1-studio.js');
214
- try {
215
- await fs.access(d1StudioPath);
216
- console.log(chalk.green(`✓ Found d1-studio.js at ${d1StudioPath}`));
217
- } catch (err) {
218
- throw new Error(`d1-studio.js not found at ${d1StudioPath}`);
219
- }
220
- process.env.NODE_ENV = 'development';
221
- await execAsync('node ./dist/d1-studio.js --version', { cwd: testDir });
222
- console.log(chalk.green('✓ Development mode execution test passed'));
223
- process.env.NODE_ENV = 'production';
224
- await execAsync('node ./node_modules/d1studio/dist/d1-studio.js --version', { cwd: testDir });
225
- console.log(chalk.green('✓ Production mode execution test passed'));
226
- } catch (error) {
227
- console.error(chalk.red('Package execution test failed:', error));
228
- }
229
- }
230
-
231
- async function setupTestPackage(testDir) {
232
- console.log('\nSetting up test package structure...');
233
- try {
234
- const packageDir = join(testDir, 'node_modules', 'd1studio');
235
- await fs.mkdir(packageDir, { recursive: true });
236
- await fs.cp(join(__dirname, '..', 'dist'), packageDir, { recursive: true, force: true });
237
- const packageJson = JSON.parse(
238
- await fs.readFile(join(__dirname, '..', 'package.json'), 'utf8')
239
- );
240
- await fs.writeFile(join(packageDir, 'package.json'), JSON.stringify(packageJson, null, 2));
241
- await fs.chmod(join(packageDir, 'd1-studio.js'), 0o755);
242
- console.log(chalk.green('✓ Package structure created successfully'));
243
- return packageDir;
244
- } catch (error) {
245
- console.error(chalk.red('Failed to setup test package:', error));
246
- throw error;
247
- }
248
- }
249
-
250
- async function copyStudioScript(testDir) {
251
- try {
252
- await fs.mkdir(join(testDir, 'scripts'), { recursive: true });
253
- await fs.copyFile(join(__dirname, 'studio.js'), join(testDir, 'scripts', 'studio.js'));
254
- await fs.chmod(join(testDir, 'scripts', 'studio.js'), 0o755);
255
- console.log(chalk.green('✓ studio.js copied and made executable'));
256
- } catch (error) {
257
- console.error(chalk.red('Failed to copy studio.js:', error));
258
- throw error;
259
- }
260
- }
261
-
262
- async function testStudioScript(testDir) {
263
- console.log('\nTesting studio.js script...');
264
- try {
265
- await copyStudioScript(testDir);
266
- const studioPath = join(testDir, 'scripts', 'studio.js');
267
- const stats = await fs.stat(studioPath);
268
- const isExecutable = (stats.mode & 0o111) !== 0;
269
- if (!isExecutable) {
270
- console.warn(chalk.yellow('⚠ studio.js is not executable'));
271
- await fs.chmod(studioPath, 0o755);
272
- console.log(chalk.green('✓ Made studio.js executable'));
273
- } else {
274
- console.log(chalk.green('✓ studio.js has correct permissions'));
275
- }
276
- const content = await fs.readFile(studioPath, 'utf8');
277
- const requiredImports = ['chalk', 'open', 'findWranglerConfig'];
278
- let missingImports = [];
279
- for (const imp of requiredImports) {
280
- if (!content.includes(imp)) {
281
- missingImports.push(imp);
282
- }
283
- }
284
- if (missingImports.length > 0) {
285
- console.warn(chalk.yellow(`⚠ studio.js missing imports: ${missingImports.join(', ')}`));
286
- } else {
287
- console.log(chalk.green('✓ studio.js contains required imports'));
288
- }
289
- try {
290
- await execAsync('node ./scripts/studio.js --version', {
291
- cwd: testDir,
292
- env: { ...process.env, NODE_PATH: join(testDir, 'node_modules') }
293
- });
294
- console.log(chalk.green('✓ studio.js execution test passed'));
295
- } catch (execError) {
296
- console.warn(chalk.yellow('⚠ studio.js execution test failed:', execError.message));
297
- }
298
- } catch (error) {
299
- console.warn(chalk.yellow('⚠ studio.js test issues:'), error.message);
300
- }
301
- }
302
-
303
- async function testLicenseValidation(testDir) {
304
- console.log('\nTesting license validation...');
305
- const d1StudioDir = join(testDir, '.d1studio');
306
- const licenseFile = join(d1StudioDir, 'license.json');
307
- try {
308
- await fs.mkdir(d1StudioDir, { recursive: true });
309
- await fs.writeFile(licenseFile, JSON.stringify(mockLicenseData, null, 2));
310
- console.log(chalk.green('✓ Successfully created test license file'));
311
- const license = JSON.parse(await fs.readFile(licenseFile, 'utf8'));
312
- const requiredFields = ['licenseKey', 'email', 'hardwareId', 'subscription_status', 'end_date'];
313
- const missingFields = requiredFields.filter(field => !license[field]);
314
- if (missingFields.length > 0) {
315
- console.warn(chalk.yellow(`⚠ License file missing fields: ${missingFields.join(', ')}`));
316
- } else {
317
- console.log(chalk.green('✓ License file structure validated'));
318
- }
319
- const expiredLicense = {
320
- ...mockLicenseData,
321
- end_date: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString() // 1 day ago
322
- };
323
- await fs.writeFile(licenseFile, JSON.stringify(expiredLicense, null, 2));
324
- console.log(chalk.green('✓ Successfully tested expired license scenario'));
325
- const expiringSoonLicense = {
326
- ...mockLicenseData,
327
- end_date: new Date(Date.now() + 5 * 24 * 60 * 60 * 1000).toISOString() // 5 days from now
328
- };
329
- await fs.writeFile(licenseFile, JSON.stringify(expiringSoonLicense, null, 2));
330
- console.log(chalk.green('✓ Successfully tested expiring soon scenario'));
331
- } catch (error) {
332
- console.error(chalk.red('License validation test failed:', error));
333
- }
334
- }
335
-
336
- async function runTests() {
337
- console.log(chalk.blue('Running D1 Studio tests...'));
338
- let testDir = null;
339
- try {
340
- testDir = await testProjectStructure();
341
- await testWranglerConfig(testDir);
342
- await testCaching(testDir);
343
- await testStudioScript(testDir);
344
- await testLicenseValidation(testDir);
345
- await testPackageExecution(testDir);
346
- await testLoggerBehavior();
347
- console.log(chalk.green('\nAll tests completed successfully! 🎉'));
348
- console.log(chalk.blue('\nTest Summary:'));
349
- console.log(chalk.blue('============'));
350
- console.log(chalk.yellow('Check warnings above for any issues that need attention.'));
351
- console.log(chalk.blue('\nTest directory:', testDir));
352
- } catch (error) {
353
- console.error(chalk.red('\nTests failed:', error));
354
- process.exit(1);
355
- } finally {
356
- if (testDir) {
357
- console.log(chalk.blue('\nCleaning up test directory...'));
358
- await fs.rm(testDir, { recursive: true, force: true }).catch(() => {});
359
- }
360
- }
361
- }
362
-
363
- runTests().catch(error => {
364
- console.error(chalk.red('Test suite failed:', error));
365
- process.exit(1);
366
- });