d1s 0.2.11 → 0.2.13
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.
- package/dist/.next/.next/BUILD_ID +1 -1
- package/dist/.next/.next/app-build-manifest.json +28 -28
- package/dist/.next/.next/app-path-routes-manifest.json +1 -1
- package/dist/.next/.next/build-manifest.json +3 -3
- package/dist/.next/.next/cache/.rscinfo +1 -1
- package/dist/.next/.next/cache/.tsbuildinfo +1 -1
- package/dist/.next/.next/cache/webpack/client-production/0.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/1.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/10.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/11.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/12.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/2.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/3.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/4.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/5.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/6.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/7.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/8.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/9.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/index.pack +0 -0
- package/dist/.next/.next/cache/webpack/client-production/index.pack.old +0 -0
- package/dist/.next/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/dist/.next/.next/cache/webpack/server-production/0.pack +0 -0
- package/dist/.next/.next/cache/webpack/server-production/1.pack +0 -0
- package/dist/.next/.next/cache/webpack/server-production/2.pack +0 -0
- package/dist/.next/.next/cache/webpack/server-production/3.pack +0 -0
- package/dist/.next/.next/cache/webpack/server-production/index.pack +0 -0
- package/dist/.next/.next/cache/webpack/server-production/index.pack.old +0 -0
- package/dist/.next/.next/next-minimal-server.js.nft.json +1 -1
- package/dist/.next/.next/next-server.js.nft.json +1 -1
- package/dist/.next/.next/prerender-manifest.json +1 -1
- package/dist/.next/.next/required-server-files.json +1 -1
- package/dist/.next/.next/server/app/_not-found/page.js +1 -1
- package/dist/.next/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dist/.next/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/_not-found.html +1 -1
- package/dist/.next/.next/server/app/_not-found.rsc +4 -4
- package/dist/.next/.next/server/app/api/cloudflare/route.js +1 -1
- package/dist/.next/.next/server/app/api/cloudflare/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/databases/route.js +1 -1
- package/dist/.next/.next/server/app/api/databases/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/migrations/sync/route.js +5 -5
- package/dist/.next/.next/server/app/api/migrations/sync/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/migrations/sync-files/route.js +3 -3
- package/dist/.next/.next/server/app/api/migrations/sync-files/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/pull-data/confirm/route.js +1 -1
- package/dist/.next/.next/server/app/api/pull-data/confirm/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/pull-remote/confirm/route.js +2 -2
- package/dist/.next/.next/server/app/api/pull-remote/confirm/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/pull-remote/preview/route.js +4 -4
- package/dist/.next/.next/server/app/api/pull-remote/preview/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/push-remote/confirm/route.js +5 -5
- package/dist/.next/.next/server/app/api/push-remote/confirm/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/push-remote/preview/route.js +4 -4
- package/dist/.next/.next/server/app/api/push-remote/preview/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/query/route.js +3 -3
- package/dist/.next/.next/server/app/api/query/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/tables/[name]/route.js +5 -5
- package/dist/.next/.next/server/app/api/tables/[name]/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/tables/route.js +2 -2
- package/dist/.next/.next/server/app/api/tables/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/api/update/route.js +1 -1
- package/dist/.next/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app/index.html +2 -2
- package/dist/.next/.next/server/app/index.rsc +5 -5
- package/dist/.next/.next/server/app/page.js +7 -7
- package/dist/.next/.next/server/app/page.js.nft.json +1 -1
- package/dist/.next/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/.next/.next/server/app-paths-manifest.json +1 -1
- package/dist/.next/.next/server/chunks/226.js +12 -12
- package/dist/.next/.next/server/chunks/391.js +1 -1
- package/dist/.next/.next/server/chunks/572.js +1 -0
- package/dist/.next/.next/server/chunks/992.js +3 -3
- package/dist/.next/.next/server/middleware-build-manifest.js +1 -1
- package/dist/.next/.next/server/next-font-manifest.js +1 -1
- package/dist/.next/.next/server/next-font-manifest.json +1 -1
- package/dist/.next/.next/server/pages/404.html +1 -1
- package/dist/.next/.next/server/pages/500.html +1 -1
- package/dist/.next/.next/server/server-reference-manifest.json +1 -1
- package/dist/.next/.next/static/chunks/{576-c4daf274bb6469a1.js → 576-18a2209e1ed26aad.js} +1 -1
- package/dist/.next/.next/static/chunks/{92-c4466e0f1ca8a3a8.js → 92-5f7522943fcb72a8.js} +1 -1
- package/dist/.next/.next/static/chunks/app/{layout-be6ee67cf0c92654.js → layout-40ec07d04681ba81.js} +1 -1
- package/dist/.next/.next/static/chunks/app/page-f05cd0fc436bf9bc.js +1 -0
- package/dist/.next/.next/static/chunks/app/page-f2bc307c0d8acdaa.js +1 -0
- package/dist/.next/.next/static/chunks/{main-app-fa35024de9bd9284.js → main-app-4506e88db72db4b7.js} +1 -1
- package/dist/.next/.next/static/css/{9f6c25c5400f83d3.css → 7c16f57d325d0d7d.css} +1 -1
- package/dist/.next/.next/static/ejYPqJ2kVicVp5EFWOZIC/_buildManifest.js +1 -0
- package/dist/.next/.next/static/ejYPqJ2kVicVp5EFWOZIC/_ssgManifest.js +1 -0
- package/dist/.next/.next/static/gABGrAoO8IPArDo_Ns_7g/_buildManifest.js +1 -0
- package/dist/.next/.next/static/gABGrAoO8IPArDo_Ns_7g/_ssgManifest.js +1 -0
- package/dist/.next/.next/static/gh-QfIUVo4FTTduYCVKT6/_buildManifest.js +1 -0
- package/dist/.next/.next/static/gh-QfIUVo4FTTduYCVKT6/_ssgManifest.js +1 -0
- package/dist/.next/.next/static/media/8d697b304b401681-s.woff2 +0 -0
- package/dist/.next/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
- package/dist/.next/.next/static/thaCy2qVeNqYYhdayr13C/_buildManifest.js +1 -0
- package/dist/.next/.next/static/thaCy2qVeNqYYhdayr13C/_ssgManifest.js +1 -0
- package/dist/.next/.next/static/ybCx6L6gHqtODbKmlhU-d/_buildManifest.js +1 -0
- package/dist/.next/.next/static/ybCx6L6gHqtODbKmlhU-d/_ssgManifest.js +1 -0
- package/dist/.next/.next/trace +3 -3
- package/dist/.next/.next/types/app/api/cloudflare/route.ts +1 -1
- package/dist/.next/.next/types/app/api/databases/route.ts +1 -1
- package/dist/.next/.next/types/app/api/migrations/sync/route.ts +1 -1
- package/dist/.next/.next/types/app/api/migrations/sync-files/route.ts +1 -1
- package/dist/.next/.next/types/app/api/pull-data/confirm/route.ts +1 -1
- package/dist/.next/.next/types/app/api/pull-remote/confirm/route.ts +1 -1
- package/dist/.next/.next/types/app/api/pull-remote/preview/route.ts +1 -1
- package/dist/.next/.next/types/app/api/push-remote/confirm/route.ts +1 -1
- package/dist/.next/.next/types/app/api/push-remote/preview/route.ts +1 -1
- package/dist/.next/.next/types/app/api/query/route.ts +1 -1
- package/dist/.next/.next/types/app/api/tables/[name]/route.ts +1 -1
- package/dist/.next/.next/types/app/api/tables/route.ts +1 -1
- package/dist/.next/.next/types/app/api/update/route.ts +1 -1
- package/dist/.next/.next/types/app/page.ts +1 -1
- package/dist/.next/BUILD_ID +1 -1
- package/dist/.next/app-build-manifest.json +28 -28
- package/dist/.next/app-path-routes-manifest.json +1 -1
- package/dist/.next/build-manifest.json +3 -3
- package/dist/.next/cache/.rscinfo +1 -1
- package/dist/.next/cache/.tsbuildinfo +1 -1
- package/dist/.next/cache/webpack/client-production/0.pack +0 -0
- package/dist/.next/cache/webpack/client-production/1.pack +0 -0
- package/dist/.next/cache/webpack/client-production/2.pack +0 -0
- package/dist/.next/cache/webpack/client-production/index.pack +0 -0
- package/dist/.next/cache/webpack/client-production/index.pack.old +0 -0
- package/dist/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/dist/.next/cache/webpack/server-production/0.pack +0 -0
- package/dist/.next/cache/webpack/server-production/index.pack +0 -0
- package/dist/.next/next-minimal-server.js.nft.json +1 -1
- package/dist/.next/next-server.js.nft.json +1 -1
- package/dist/.next/prerender-manifest.json +1 -1
- package/dist/.next/required-server-files.json +1 -1
- package/dist/.next/server/app/_not-found/page.js +1 -1
- package/dist/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/_not-found.html +1 -1
- package/dist/.next/server/app/_not-found.rsc +4 -4
- package/dist/.next/server/app/api/cloudflare/route.js +1 -1
- package/dist/.next/server/app/api/cloudflare/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/databases/route.js +1 -1
- package/dist/.next/server/app/api/databases/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/migrations/sync/route.js +5 -5
- package/dist/.next/server/app/api/migrations/sync/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/migrations/sync-files/route.js +3 -3
- package/dist/.next/server/app/api/migrations/sync-files/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/pull-data/confirm/route.js +1 -1
- package/dist/.next/server/app/api/pull-data/confirm/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/pull-remote/confirm/route.js +2 -2
- package/dist/.next/server/app/api/pull-remote/confirm/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/pull-remote/preview/route.js +4 -4
- package/dist/.next/server/app/api/pull-remote/preview/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/push-remote/confirm/route.js +5 -5
- package/dist/.next/server/app/api/push-remote/confirm/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/push-remote/preview/route.js +4 -4
- package/dist/.next/server/app/api/push-remote/preview/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/query/route.js +3 -3
- package/dist/.next/server/app/api/query/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/tables/[name]/route.js +5 -5
- package/dist/.next/server/app/api/tables/[name]/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/tables/route.js +2 -2
- package/dist/.next/server/app/api/tables/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/api/update/route.js +1 -1
- package/dist/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/.next/server/app/index.html +2 -2
- package/dist/.next/server/app/index.rsc +5 -5
- package/dist/.next/server/app/page.js +7 -7
- package/dist/.next/server/app/page.js.nft.json +1 -1
- package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/.next/server/app-paths-manifest.json +1 -1
- package/dist/.next/server/chunks/226.js +12 -12
- package/dist/.next/server/chunks/391.js +1 -1
- package/dist/.next/server/chunks/572.js +1 -0
- package/dist/.next/server/chunks/992.js +3 -3
- package/dist/.next/server/middleware-build-manifest.js +1 -1
- package/dist/.next/server/next-font-manifest.js +1 -1
- package/dist/.next/server/next-font-manifest.json +1 -1
- package/dist/.next/server/pages/404.html +1 -1
- package/dist/.next/server/pages/500.html +1 -1
- package/dist/.next/server/server-reference-manifest.json +1 -1
- package/dist/.next/static/IX-QLbm7scYnyqWeeimal/_buildManifest.js +1 -0
- package/dist/.next/static/IX-QLbm7scYnyqWeeimal/_ssgManifest.js +1 -0
- package/dist/.next/static/chunks/{576-c4daf274bb6469a1.js → 576-18a2209e1ed26aad.js} +1 -1
- package/dist/.next/static/chunks/{92-c4466e0f1ca8a3a8.js → 92-5f7522943fcb72a8.js} +1 -1
- package/dist/.next/static/chunks/app/{layout-be6ee67cf0c92654.js → layout-40ec07d04681ba81.js} +1 -1
- package/dist/.next/static/chunks/app/page-f05cd0fc436bf9bc.js +1 -0
- package/dist/.next/static/chunks/{main-app-fa35024de9bd9284.js → main-app-4506e88db72db4b7.js} +1 -1
- package/dist/.next/static/css/{9f6c25c5400f83d3.css → 7c16f57d325d0d7d.css} +1 -1
- package/dist/.next/static/media/8d697b304b401681-s.woff2 +0 -0
- package/dist/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
- package/dist/.next/trace +3 -14
- package/dist/.next/types/app/api/cloudflare/route.ts +1 -1
- package/dist/.next/types/app/api/databases/route.ts +1 -1
- package/dist/.next/types/app/api/migrations/sync/route.ts +1 -1
- package/dist/.next/types/app/api/migrations/sync-files/route.ts +1 -1
- package/dist/.next/types/app/api/pull-data/confirm/route.ts +1 -1
- package/dist/.next/types/app/api/pull-remote/confirm/route.ts +1 -1
- package/dist/.next/types/app/api/pull-remote/preview/route.ts +1 -1
- package/dist/.next/types/app/api/push-remote/confirm/route.ts +1 -1
- package/dist/.next/types/app/api/push-remote/preview/route.ts +1 -1
- package/dist/.next/types/app/api/query/route.ts +1 -1
- package/dist/.next/types/app/api/tables/[name]/route.ts +1 -1
- package/dist/.next/types/app/api/tables/route.ts +1 -1
- package/dist/.next/types/app/api/update/route.ts +1 -1
- package/dist/.next/types/app/page.ts +1 -1
- package/dist/app/api/tables/[name]/route.js +22 -10
- package/dist/app/globals.css +39 -0
- package/dist/d1-studio.js +2 -2
- package/dist/lib/data-type-handlers.js +426 -0
- package/dist/lib/sql-operations.js +32 -8
- package/dist/lib/sql-sanitizer.js +233 -0
- package/package.json +3 -9
- package/dist/.next/.next/server/chunks/90.js +0 -1
- package/dist/.next/.next/static/chunks/app/page-36ed30b2266617f3.js +0 -1
- package/dist/.next/server/chunks/90.js +0 -1
- package/dist/.next/static/chunks/app/page-36ed30b2266617f3.js +0 -1
- package/dist/app/app/api/cloudflare/route.js +0 -150
- package/dist/app/app/api/databases/route.js +0 -71
- package/dist/app/app/api/migrations/sync/route.js +0 -174
- package/dist/app/app/api/migrations/sync-files/route.js +0 -172
- package/dist/app/app/api/pull-data/confirm/route.js +0 -230
- package/dist/app/app/api/pull-remote/confirm/route.js +0 -278
- package/dist/app/app/api/pull-remote/preview/route.js +0 -144
- package/dist/app/app/api/push-remote/confirm/route.js +0 -196
- package/dist/app/app/api/push-remote/preview/route.js +0 -179
- package/dist/app/app/api/query/route.js +0 -168
- package/dist/app/app/api/tables/[name]/route.js +0 -174
- package/dist/app/app/api/tables/route.js +0 -178
- package/dist/app/app/api/update/route.js +0 -45
- package/dist/app/app/globals.css +0 -93
- package/dist/app/app/layout.jsx +0 -35
- package/dist/app/app/page.jsx +0 -34
- package/next.config.mjs +0 -18
- package/postcss.config.mjs +0 -8
- package/scripts/studio.js +0 -199
- package/scripts/test.js +0 -366
- package/src/app/api/cloudflare/route.js +0 -150
- package/src/app/api/databases/route.js +0 -71
- package/src/app/api/migrations/sync/route.js +0 -174
- package/src/app/api/migrations/sync-files/route.js +0 -172
- package/src/app/api/pull-data/confirm/route.js +0 -230
- package/src/app/api/pull-remote/confirm/route.js +0 -278
- package/src/app/api/pull-remote/preview/route.js +0 -144
- package/src/app/api/push-remote/confirm/route.js +0 -196
- package/src/app/api/push-remote/preview/route.js +0 -179
- package/src/app/api/query/route.js +0 -168
- package/src/app/api/tables/[name]/route.js +0 -174
- package/src/app/api/tables/route.js +0 -178
- package/src/app/api/update/route.js +0 -45
- package/src/app/globals.css +0 -93
- package/src/app/layout.jsx +0 -35
- package/src/app/page.jsx +0 -34
- package/src/components/cloudflare-credentials-modal.jsx +0 -94
- package/src/components/column-selector.jsx +0 -133
- package/src/components/column-sorting.jsx +0 -65
- package/src/components/delete-records-dialog.jsx +0 -64
- package/src/components/download-button.jsx +0 -205
- package/src/components/edit-error-alert.jsx +0 -30
- package/src/components/editable-cell.jsx +0 -163
- package/src/components/editable-row.jsx +0 -169
- package/src/components/environment-handler.jsx +0 -332
- package/src/components/environment-select.jsx +0 -62
- package/src/components/pull-preview-toast.jsx +0 -215
- package/src/components/push-error-alert.jsx +0 -72
- package/src/components/push-preview-toast.jsx +0 -183
- package/src/components/query-results.jsx +0 -112
- package/src/components/refresh-button.jsx +0 -61
- package/src/components/resize-columns.jsx +0 -101
- package/src/components/sidebar.jsx +0 -254
- package/src/components/sql-editor.jsx +0 -411
- package/src/components/sql-error-display.jsx +0 -167
- package/src/components/sync-migrations-button.jsx +0 -87
- package/src/components/table-error-dialog.jsx +0 -65
- package/src/components/table-toolbar.jsx +0 -285
- package/src/components/table-view.jsx +0 -843
- package/src/components/ui/alert.jsx +0 -47
- package/src/components/ui/button.jsx +0 -48
- package/src/components/ui/card.jsx +0 -50
- package/src/components/ui/checkbox.jsx +0 -24
- package/src/components/ui/collapsible.jsx +0 -11
- package/src/components/ui/dialog.jsx +0 -96
- package/src/components/ui/dropdown-menu.jsx +0 -158
- package/src/components/ui/input.jsx +0 -19
- package/src/components/ui/scroll-area.jsx +0 -40
- package/src/components/ui/select.jsx +0 -121
- package/src/components/ui/separator.jsx +0 -25
- package/src/components/ui/sheet.jsx +0 -109
- package/src/components/ui/sidebar.jsx +0 -620
- package/src/components/ui/skeleton.jsx +0 -14
- package/src/components/ui/table.jsx +0 -86
- package/src/components/ui/tabs.jsx +0 -43
- package/src/components/ui/toast.jsx +0 -86
- package/src/components/ui/toaster.jsx +0 -35
- package/src/components/ui/tooltip.jsx +0 -28
- package/src/components/update-banner.jsx +0 -93
- package/src/context/database-context.js +0 -510
- package/src/hooks/use-mobile.jsx +0 -19
- package/src/hooks/use-sql-error.ts +0 -23
- package/src/hooks/use-toast.js +0 -155
- package/src/lib/database-queue.js +0 -37
- package/src/lib/error.js +0 -20
- package/src/lib/find-wrangler-config.js +0 -74
- package/src/lib/license.js +0 -99
- package/src/lib/logger.js +0 -58
- package/src/lib/migrations.js +0 -415
- package/src/lib/parse-sql-error.js +0 -200
- package/src/lib/request-deduplication.js +0 -24
- package/src/lib/schema-operations.js +0 -106
- package/src/lib/sql-error-types.js +0 -14
- package/src/lib/sql-operations.js +0 -647
- package/src/lib/utils.js +0 -6
- package/src/lib/version-utils.js +0 -34
- /package/dist/.next/.next/static/{OUHnbB-64afrrZQL0Srn5 → FEsQ9jwPUQv5A3fwg6Opl}/_buildManifest.js +0 -0
- /package/dist/.next/.next/static/{OUHnbB-64afrrZQL0Srn5 → FEsQ9jwPUQv5A3fwg6Opl}/_ssgManifest.js +0 -0
- /package/dist/.next/.next/static/{ZBTCAyp1kO5FdEHMU-Dw2 → Y9mYu4WBghepP5oT_3OdR}/_buildManifest.js +0 -0
- /package/dist/.next/.next/static/{ZBTCAyp1kO5FdEHMU-Dw2 → Y9mYu4WBghepP5oT_3OdR}/_ssgManifest.js +0 -0
- /package/dist/.next/.next/static/{bHYW7fgIBDF8-Q33_WPoE → ae3gNmoSGm-R5LJC4UagI}/_buildManifest.js +0 -0
- /package/dist/.next/.next/static/{bHYW7fgIBDF8-Q33_WPoE → ae3gNmoSGm-R5LJC4UagI}/_ssgManifest.js +0 -0
- /package/dist/.next/{static/ZBTCAyp1kO5FdEHMU-Dw2 → .next/static/bKfUJeuvAQlBmR3TjrfkH}/_buildManifest.js +0 -0
- /package/dist/.next/{static/ZBTCAyp1kO5FdEHMU-Dw2 → .next/static/bKfUJeuvAQlBmR3TjrfkH}/_ssgManifest.js +0 -0
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
// lib/parse-sql-error.js
|
|
2
|
-
|
|
3
|
-
import { SQLErrorTypes } from './sql-error-types';
|
|
4
|
-
|
|
5
|
-
export function parseSQLError(error) {
|
|
6
|
-
console.debug("parseSQLError - Received error:", error);
|
|
7
|
-
|
|
8
|
-
// Defensive check in case error is null/undefined
|
|
9
|
-
if (!error) {
|
|
10
|
-
console.debug("parseSQLError - error is null or undefined.");
|
|
11
|
-
return {
|
|
12
|
-
type: SQLErrorTypes.UNKNOWN_ERROR,
|
|
13
|
-
message: 'An unknown error occurred',
|
|
14
|
-
details: {}
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
let errorMessage = '';
|
|
19
|
-
let offset = null;
|
|
20
|
-
let nearText = null;
|
|
21
|
-
let originalQuery = null;
|
|
22
|
-
|
|
23
|
-
// Determine the command string (it might be on error.cmd or error.details.command)
|
|
24
|
-
const cmd = error.cmd || (error.details && error.details.command);
|
|
25
|
-
if (cmd) {
|
|
26
|
-
const queryMatch = cmd.match(/--command="(.+?)"/s);
|
|
27
|
-
if (queryMatch) {
|
|
28
|
-
originalQuery = queryMatch[1].replace(/\\n/g, '\n');
|
|
29
|
-
console.debug("parseSQLError - Extracted original query:", originalQuery);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Determine stderr from either error.stderr or error.details.stderr
|
|
34
|
-
const rawStderr = error.stderr || (error.details && error.details.stderr);
|
|
35
|
-
if (rawStderr) {
|
|
36
|
-
// Remove ANSI escape codes
|
|
37
|
-
const cleanStderr = rawStderr.replace(/\x1B\[[0-9;]*[a-zA-Z]/g, '');
|
|
38
|
-
console.debug("parseSQLError - Cleaned stderr:", cleanStderr);
|
|
39
|
-
|
|
40
|
-
// Check for "env: node: No such file or directory" error
|
|
41
|
-
if (cleanStderr.includes('env: node: No such file or directory')) {
|
|
42
|
-
console.debug("parseSQLError - Detected 'env: node: No such file or directory' error.");
|
|
43
|
-
return {
|
|
44
|
-
type: SQLErrorTypes.EXECUTION_ERROR,
|
|
45
|
-
message: error.message || 'Execution error: env: node: No such file or directory',
|
|
46
|
-
details: {
|
|
47
|
-
originalQuery,
|
|
48
|
-
stderr: cleanStderr
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Syntax errors
|
|
54
|
-
const syntaxMatch = cleanStderr.match(/near "([^"]+)": syntax error at offset (\d+)/);
|
|
55
|
-
if (syntaxMatch) {
|
|
56
|
-
const [_, near, errorOffset] = syntaxMatch;
|
|
57
|
-
offset = parseInt(errorOffset, 10);
|
|
58
|
-
errorMessage = `Syntax error near "${near}" at position ${offset}`;
|
|
59
|
-
console.debug("parseSQLError - Syntax error detected:", { near, offset });
|
|
60
|
-
return {
|
|
61
|
-
type: SQLErrorTypes.SYNTAX_ERROR,
|
|
62
|
-
message: errorMessage,
|
|
63
|
-
details: {
|
|
64
|
-
originalQuery,
|
|
65
|
-
errorLocation: { offset, near },
|
|
66
|
-
stderr: cleanStderr
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// UNIQUE constraint error
|
|
72
|
-
if (cleanStderr.includes('UNIQUE constraint failed')) {
|
|
73
|
-
const match = cleanStderr.match(/UNIQUE constraint failed: (\w+)\.(\w+)/);
|
|
74
|
-
const [_, table, column] = match || [];
|
|
75
|
-
console.debug("parseSQLError - UNIQUE constraint error detected:", { table, column });
|
|
76
|
-
return {
|
|
77
|
-
type: SQLErrorTypes.UNIQUE_CONSTRAINT_ERROR,
|
|
78
|
-
message: `Unique constraint violation updating ${table}.${column}`,
|
|
79
|
-
details: {
|
|
80
|
-
originalQuery,
|
|
81
|
-
stderr: cleanStderr
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// NOT NULL constraint error
|
|
87
|
-
if (cleanStderr.includes('NOT NULL constraint failed')) {
|
|
88
|
-
const match = cleanStderr.match(/NOT NULL constraint failed: (\w+)\.(\w+)/);
|
|
89
|
-
const [_, table, column] = match || [];
|
|
90
|
-
console.debug("parseSQLError - NOT NULL constraint error detected:", { table, column });
|
|
91
|
-
return {
|
|
92
|
-
type: SQLErrorTypes.NOT_NULL_CONSTRAINT_ERROR,
|
|
93
|
-
message: `NOT NULL constraint violation updating ${table}.${column}`,
|
|
94
|
-
details: {
|
|
95
|
-
originalQuery,
|
|
96
|
-
stderr: cleanStderr
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// CHECK constraint error
|
|
102
|
-
if (cleanStderr.includes('CHECK constraint failed')) {
|
|
103
|
-
const match = cleanStderr.match(/CHECK constraint failed: (\w+)/);
|
|
104
|
-
const [_, constraintName] = match || [];
|
|
105
|
-
console.debug("parseSQLError - CHECK constraint error detected:", { constraintName });
|
|
106
|
-
return {
|
|
107
|
-
type: SQLErrorTypes.CHECK_CONSTRAINT_ERROR,
|
|
108
|
-
message: `Check constraint violation updating ${constraintName}`,
|
|
109
|
-
details: {
|
|
110
|
-
originalQuery,
|
|
111
|
-
stderr: cleanStderr
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// In the FOREIGN KEY constraint section:
|
|
117
|
-
if (cleanStderr.includes('FOREIGN KEY constraint failed')) {
|
|
118
|
-
console.debug("parseSQLError - FOREIGN KEY constraint error detected.");
|
|
119
|
-
|
|
120
|
-
// Extract query details from the original command
|
|
121
|
-
const queryMatch = /--command="([^"]+)"/.exec(cmd || '');
|
|
122
|
-
const query = queryMatch ? queryMatch[1] : null;
|
|
123
|
-
|
|
124
|
-
// Parse the query to get table and column info
|
|
125
|
-
let details = {};
|
|
126
|
-
if (query) {
|
|
127
|
-
const updateMatch = /UPDATE\s+(\w+)\s+SET\s+(\w+)\s*=/.exec(query);
|
|
128
|
-
if (updateMatch) {
|
|
129
|
-
details = {
|
|
130
|
-
table: updateMatch[1],
|
|
131
|
-
column: updateMatch[2]
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Build a descriptive message
|
|
137
|
-
const message = details.table
|
|
138
|
-
? `Foreign key constraint violation updating ${details.table}.${details.column}`
|
|
139
|
-
: 'Foreign key constraint violation';
|
|
140
|
-
|
|
141
|
-
return {
|
|
142
|
-
type: SQLErrorTypes.FOREIGN_KEY_ERROR,
|
|
143
|
-
message,
|
|
144
|
-
details: {
|
|
145
|
-
...details,
|
|
146
|
-
originalQuery: query,
|
|
147
|
-
stderr: cleanStderr
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// Table not found
|
|
153
|
-
if (cleanStderr.includes('no such table')) {
|
|
154
|
-
const match = cleanStderr.match(/no such table: (\w+)/);
|
|
155
|
-
const [_, table] = match || [];
|
|
156
|
-
console.debug("parseSQLError - Table not found error detected:", { table });
|
|
157
|
-
return {
|
|
158
|
-
type: SQLErrorTypes.TABLE_NOT_FOUND,
|
|
159
|
-
message: `Table not found: ${table}`,
|
|
160
|
-
details: {
|
|
161
|
-
originalQuery,
|
|
162
|
-
stderr: cleanStderr
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
// Table already exists error
|
|
168
|
-
if (cleanStderr.includes('already exists')) {
|
|
169
|
-
const match = cleanStderr.match(/table (\w+) already exists/);
|
|
170
|
-
const [_, table] = match || [];
|
|
171
|
-
console.debug("parseSQLError - Table exists error detected:", { table });
|
|
172
|
-
return {
|
|
173
|
-
type: SQLErrorTypes.TABLE_EXISTS,
|
|
174
|
-
message: `Table already exists: ${table}`,
|
|
175
|
-
details: {
|
|
176
|
-
originalQuery,
|
|
177
|
-
stderr: cleanStderr
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Fallback for execution errors
|
|
183
|
-
console.debug("parseSQLError - No specific error match found. Using fallback for execution error.");
|
|
184
|
-
return {
|
|
185
|
-
type: SQLErrorTypes.EXECUTION_ERROR,
|
|
186
|
-
message: error.message || 'Failed to execute SQL command',
|
|
187
|
-
details: {
|
|
188
|
-
originalQuery,
|
|
189
|
-
stderr: cleanStderr
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
console.debug("parseSQLError - No stderr available; using default error handling.");
|
|
195
|
-
return {
|
|
196
|
-
type: SQLErrorTypes.UNKNOWN_ERROR,
|
|
197
|
-
message: error.message || 'An unknown error occurred',
|
|
198
|
-
details: {}
|
|
199
|
-
};
|
|
200
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
// utils/request-deduplication.js
|
|
2
|
-
const requestCache = new Map();
|
|
3
|
-
|
|
4
|
-
export function deduplicateRequest(key, requestFn, ttl = 2000) {
|
|
5
|
-
const existing = requestCache.get(key);
|
|
6
|
-
if (existing && Date.now() - existing.timestamp < ttl) {
|
|
7
|
-
return existing.promise;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const promise = requestFn();
|
|
11
|
-
requestCache.set(key, {
|
|
12
|
-
promise,
|
|
13
|
-
timestamp: Date.now()
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// Clean up after request completes
|
|
17
|
-
promise.finally(() => {
|
|
18
|
-
setTimeout(() => {
|
|
19
|
-
requestCache.delete(key);
|
|
20
|
-
}, ttl);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
return promise;
|
|
24
|
-
}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
// schema-operations.js
|
|
2
|
-
|
|
3
|
-
import { executeSQL, ErrorTypes } from './sql-operations.js';
|
|
4
|
-
import logger from './logger.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Retrieves the current database schema (tables, indexes, triggers),
|
|
8
|
-
* excluding system tables and the migrations table.
|
|
9
|
-
*
|
|
10
|
-
* @param {string} projectDir - The project directory.
|
|
11
|
-
* @param {string} databaseName - The D1 database name.
|
|
12
|
-
* @param {object} env - Environment variables.
|
|
13
|
-
* @param {boolean} remote - Whether to run against remote.
|
|
14
|
-
* @returns {Promise<Array>} An array of schema objects.
|
|
15
|
-
*/
|
|
16
|
-
export async function getCurrentSchema(projectDir, databaseName, env = {}, remote = false) {
|
|
17
|
-
const sql = `
|
|
18
|
-
SELECT name, type, sql
|
|
19
|
-
FROM sqlite_master
|
|
20
|
-
WHERE type IN ('table', 'index', 'trigger')
|
|
21
|
-
AND name NOT LIKE 'sqlite_%'
|
|
22
|
-
AND name != 'd1_migrations';
|
|
23
|
-
`;
|
|
24
|
-
try {
|
|
25
|
-
const result = await executeSQL(projectDir, databaseName, sql, env, remote);
|
|
26
|
-
const parsed = JSON.parse(result);
|
|
27
|
-
return parsed[0]?.results || [];
|
|
28
|
-
} catch (error) {
|
|
29
|
-
logger.error('Failed to get current schema:', error);
|
|
30
|
-
throw {
|
|
31
|
-
type: ErrorTypes.EXECUTION_ERROR,
|
|
32
|
-
message: 'Failed to get current schema',
|
|
33
|
-
details: {
|
|
34
|
-
error: error.message,
|
|
35
|
-
suggestions: ['Check database permissions']
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Analyzes dependencies among schema statements.
|
|
43
|
-
*
|
|
44
|
-
* @param {Array} statements - An array of schema statements.
|
|
45
|
-
* @returns {Array} Ordered array of table names based on dependencies.
|
|
46
|
-
*/
|
|
47
|
-
export function analyzeDependencies(statements) {
|
|
48
|
-
const dependencies = new Map();
|
|
49
|
-
// Filter out non-DDL operations; we assume DATA_MODIFICATION are not DDL.
|
|
50
|
-
const relevantStatements = statements.filter(s => s.type !== 'DATA_MODIFICATION');
|
|
51
|
-
|
|
52
|
-
relevantStatements.forEach(stmt => {
|
|
53
|
-
const tableName = (stmt.name || stmt.tableName).toLowerCase();
|
|
54
|
-
if (!dependencies.has(tableName)) {
|
|
55
|
-
dependencies.set(tableName, new Set());
|
|
56
|
-
}
|
|
57
|
-
// For table creations, extract foreign key references.
|
|
58
|
-
if (stmt.type === 'CREATE_TABLE') {
|
|
59
|
-
const fkMatches = stmt.sql.match(/FOREIGN\s+KEY\s*\([^)]+\)\s+REFERENCES\s+(\w+)/gi);
|
|
60
|
-
if (fkMatches) {
|
|
61
|
-
fkMatches.forEach(match => {
|
|
62
|
-
const referencedTable = match.match(/REFERENCES\s+(\w+)/i)[1].toLowerCase();
|
|
63
|
-
dependencies.get(tableName).add(referencedTable);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
return orderTables(dependencies);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Orders tables based on their dependencies.
|
|
73
|
-
*
|
|
74
|
-
* @param {Map} dependencies - Map of table names to sets of dependent table names.
|
|
75
|
-
* @returns {Array} Ordered list of table names.
|
|
76
|
-
*/
|
|
77
|
-
export function orderTables(dependencies) {
|
|
78
|
-
const ordered = [];
|
|
79
|
-
const visited = new Set();
|
|
80
|
-
const visiting = new Set();
|
|
81
|
-
|
|
82
|
-
function visit(table) {
|
|
83
|
-
if (visiting.has(table)) {
|
|
84
|
-
throw new Error(`Circular dependency detected for table: ${table}`);
|
|
85
|
-
}
|
|
86
|
-
if (visited.has(table)) return;
|
|
87
|
-
visiting.add(table);
|
|
88
|
-
const deps = dependencies.get(table) || new Set();
|
|
89
|
-
for (const dep of deps) {
|
|
90
|
-
if (!dependencies.has(dep)) {
|
|
91
|
-
throw new Error(`Missing table dependency: ${dep}`);
|
|
92
|
-
}
|
|
93
|
-
visit(dep);
|
|
94
|
-
}
|
|
95
|
-
visiting.delete(table);
|
|
96
|
-
visited.add(table);
|
|
97
|
-
ordered.push(table);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
for (const table of dependencies.keys()) {
|
|
101
|
-
if (!visited.has(table)) {
|
|
102
|
-
visit(table);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return ordered;
|
|
106
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// lib/sql-error-types.js
|
|
2
|
-
export const SQLErrorTypes = {
|
|
3
|
-
SYNTAX_ERROR: 'SYNTAX_ERROR',
|
|
4
|
-
VALIDATION_ERROR: 'VALIDATION_ERROR',
|
|
5
|
-
EXECUTION_ERROR: 'EXECUTION_ERROR',
|
|
6
|
-
TABLE_NOT_FOUND: 'TABLE_NOT_FOUND',
|
|
7
|
-
TABLE_EXISTS: 'TABLE_EXISTS',
|
|
8
|
-
CONSTRAINT_ERROR: 'CONSTRAINT_ERROR',
|
|
9
|
-
FOREIGN_KEY_ERROR: 'FOREIGN_KEY_ERROR',
|
|
10
|
-
UNIQUE_CONSTRAINT_ERROR: 'UNIQUE_CONSTRAINT_ERROR',
|
|
11
|
-
NOT_NULL_CONSTRAINT_ERROR: 'NOT_NULL_CONSTRAINT_ERROR',
|
|
12
|
-
CHECK_CONSTRAINT_ERROR: 'CHECK_CONSTRAINT_ERROR',
|
|
13
|
-
UNKNOWN_ERROR: 'UNKNOWN_ERROR'
|
|
14
|
-
};
|