From 576fde36fb2bd43d03d1098d8bae1c87995d72d1 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Thu, 29 Feb 2024 14:34:01 +0100 Subject: [PATCH 01/23] fix: upgrade to node-fetch@3.X MONGOSH-1702 --- configs/tsconfig-mongosh/tsconfig.common.json | 1 + package-lock.json | 414 ++++++++++++------ packages/build/package.json | 3 +- packages/build/src/barque.ts | 2 +- packages/build/src/download-center/config.ts | 2 +- packages/build/src/evergreen/rest-api.ts | 2 +- .../build/src/packaging/download-manpage.ts | 3 + packages/cli-repl/package.json | 2 +- .../src/update-notification-manager.ts | 12 +- packages/e2e-tests/package.json | 2 +- packages/e2e-tests/test/fixtures/curl.js | 2 +- packages/snippet-manager/package.json | 4 +- .../snippet-manager/src/snippet-manager.ts | 12 +- 13 files changed, 316 insertions(+), 145 deletions(-) diff --git a/configs/tsconfig-mongosh/tsconfig.common.json b/configs/tsconfig-mongosh/tsconfig.common.json index 40a63610c..ecca33737 100644 --- a/configs/tsconfig-mongosh/tsconfig.common.json +++ b/configs/tsconfig-mongosh/tsconfig.common.json @@ -2,6 +2,7 @@ "compilerOptions": { "esModuleInterop": true, "downlevelIteration": true, + "skipLibCheck": true, "sourceMap": true, "strict": true, diff --git a/package-lock.json b/package-lock.json index 62c965355..645115881 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5980,20 +5980,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/create/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@lerna/create/node_modules/get-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", @@ -8000,21 +7986,6 @@ "node": ">=8" } }, - "node_modules/@nrwl/devkit/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@nrwl/devkit/node_modules/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -8331,20 +8302,6 @@ "node": ">=8" } }, - "node_modules/@nrwl/tao/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@nrwl/tao/node_modules/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -10162,13 +10119,13 @@ "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "node_modules/@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", "dev": true, "dependencies": { "@types/node": "*", - "form-data": "^3.0.0" + "form-data": "^4.0.0" } }, "node_modules/@types/normalize-package-data": { @@ -15858,6 +15815,28 @@ "pend": "~1.2.0" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -16164,10 +16143,10 @@ } }, "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "devOptional": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -16185,6 +16164,17 @@ "node": ">=0.4.x" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -20069,20 +20059,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lerna/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/lerna/node_modules/get-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", @@ -23090,6 +23066,24 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, "node_modules/node-fetch": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", @@ -29483,6 +29477,14 @@ "defaults": "^1.0.3" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -30854,7 +30856,7 @@ "download": "^8.0.0", "es-aggregate-error": "^1.0.9", "nock": "^13.0.11", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "pkg-up": "^3.1.0", "rimraf": "^3.0.2", "semver": "^7.5.3", @@ -30871,7 +30873,6 @@ "@types/cross-spawn": "^6.0.2", "@types/download": "^8.0.1", "@types/es-aggregate-error": "^1.0.2", - "@types/node-fetch": "^2.6.4", "@types/rimraf": "^3.0.0", "@types/tar": "^4.0.4", "@types/tar-fs": "^2.0.0", @@ -30887,6 +30888,31 @@ "node": ">=14.15.1" } }, + "packages/build/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "packages/build/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "packages/build/node_modules/yaml": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", @@ -30950,7 +30976,7 @@ "eslint": "^7.25.0", "mongodb": "^6.3.0", "mongodb-crypt-library-dummy": "^1.0.2", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "prettier": "^2.8.8", "webpack-merge": "^5.8.0" }, @@ -30969,6 +30995,15 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "packages/cli-repl/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, "packages/cli-repl/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -30980,6 +31015,24 @@ "js-yaml": "bin/js-yaml.js" } }, + "packages/cli-repl/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "packages/connectivity-tests": { "name": "@mongosh/connectivity-tests", "version": "0.0.0-dev.0", @@ -31011,7 +31064,7 @@ "lodash": "^4.17.21", "moment": "^2.29.1", "mongodb": "^6.3.0", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "prettier": "^2.8.8", "rimraf": "^3.0.2" }, @@ -31019,6 +31072,33 @@ "node": ">=16.15.0" } }, + "packages/e2e-tests/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "packages/e2e-tests/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "packages/editor": { "name": "@mongosh/editor", "version": "0.0.0-dev.0", @@ -31409,7 +31489,7 @@ "cross-spawn": "^7.0.3", "escape-string-regexp": "^4.0.0", "joi": "^17.4.0", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "tar": "^6.1.15" }, "devDependencies": { @@ -31417,7 +31497,7 @@ "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", "@types/cross-spawn": "^6.0.2", - "@types/node-fetch": "^2.6.4", + "@types/node-fetch": "^2.6.11", "@types/tar": "^4.0.4", "depcheck": "^1.4.3", "eslint": "^7.25.0", @@ -31428,6 +31508,31 @@ "node": ">=14.15.1" } }, + "packages/snippet-manager/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "packages/snippet-manager/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "packages/types": { "name": "@mongosh/types", "version": "0.0.0-dev.0", @@ -36274,17 +36379,6 @@ } } }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "get-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", @@ -37711,7 +37805,6 @@ "@types/cross-spawn": "^6.0.2", "@types/download": "^8.0.1", "@types/es-aggregate-error": "^1.0.2", - "@types/node-fetch": "^2.6.4", "@types/rimraf": "^3.0.0", "@types/tar": "^4.0.4", "@types/tar-fs": "^2.0.0", @@ -37725,7 +37818,7 @@ "es-aggregate-error": "^1.0.9", "eslint": "^7.25.0", "nock": "^13.0.11", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "pkg-up": "^3.1.0", "prettier": "^2.8.8", "rimraf": "^3.0.2", @@ -37737,6 +37830,21 @@ "yaml": "^2.3.1" }, "dependencies": { + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" + }, + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, "yaml": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", @@ -37789,7 +37897,7 @@ "mongodb-crypt-library-dummy": "^1.0.2", "mongodb-crypt-library-version": "^1.0.3", "mongodb-log-writer": "^1.4.0", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "numeral": "^2.0.6", "prettier": "^2.8.8", "pretty-repl": "^4.0.0", @@ -37806,6 +37914,12 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -37813,6 +37927,17 @@ "requires": { "argparse": "^2.0.1" } + }, + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } } } }, @@ -37846,10 +37971,29 @@ "lodash": "^4.17.21", "moment": "^2.29.1", "mongodb": "^6.3.0", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "prettier": "^2.8.8", "rimraf": "^3.0.2", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true + }, + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + } } }, "@mongosh/editor": { @@ -38112,7 +38256,7 @@ "@mongosh/shell-api": "0.0.0-dev.0", "@mongosh/types": "0.0.0-dev.0", "@types/cross-spawn": "^6.0.2", - "@types/node-fetch": "^2.6.4", + "@types/node-fetch": "^2.6.11", "@types/tar": "^4.0.4", "bson": "^6.2.0", "cross-spawn": "^7.0.3", @@ -38121,9 +38265,26 @@ "eslint": "^7.25.0", "joi": "^17.4.0", "nanobus": "^4.5.0", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "prettier": "^2.8.8", "tar": "^6.1.15" + }, + "dependencies": { + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" + }, + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + } } }, "@mongosh/types": { @@ -38448,18 +38609,6 @@ "micromatch": "^4.0.4" } }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "peer": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -38703,17 +38852,6 @@ "micromatch": "^4.0.4" } }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -40180,13 +40318,13 @@ "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==" }, "@types/node-fetch": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", - "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==", "dev": true, "requires": { "@types/node": "*", - "form-data": "^3.0.0" + "form-data": "^4.0.0" } }, "@types/normalize-package-data": { @@ -44662,6 +44800,15 @@ "pend": "~1.2.0" } }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -44894,10 +45041,10 @@ "dev": true }, "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "devOptional": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -44909,6 +45056,14 @@ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "requires": { + "fetch-blob": "^3.1.2" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -47871,17 +48026,6 @@ } } }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "get-stream": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", @@ -50211,6 +50355,11 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" + }, "node-fetch": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", @@ -55121,6 +55270,11 @@ "defaults": "^1.0.3" } }, + "web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==" + }, "webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", diff --git a/packages/build/package.json b/packages/build/package.json index 81b175cf9..400953f84 100644 --- a/packages/build/package.json +++ b/packages/build/package.json @@ -47,7 +47,6 @@ "@types/cross-spawn": "^6.0.2", "@types/download": "^8.0.1", "@types/es-aggregate-error": "^1.0.2", - "@types/node-fetch": "^2.6.4", "@types/rimraf": "^3.0.0", "@types/tar": "^4.0.4", "@types/tar-fs": "^2.0.0", @@ -70,7 +69,7 @@ "download": "^8.0.0", "es-aggregate-error": "^1.0.9", "nock": "^13.0.11", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "pkg-up": "^3.1.0", "rimraf": "^3.0.2", "semver": "^7.5.3", diff --git a/packages/build/src/barque.ts b/packages/build/src/barque.ts index 0359620f9..6dd1c6eca 100644 --- a/packages/build/src/barque.ts +++ b/packages/build/src/barque.ts @@ -416,7 +416,7 @@ export class Barque { */ async extractLatestCurator(dest: string): Promise { const response = await fetch(LATEST_CURATOR); - if (response.ok) { + if (response.ok && response.body) { return pipeline(response.body, zlib.createGunzip(), tar.extract(dest)); } } diff --git a/packages/build/src/download-center/config.ts b/packages/build/src/download-center/config.ts index 1a2c54a63..16fd6250a 100644 --- a/packages/build/src/download-center/config.ts +++ b/packages/build/src/download-center/config.ts @@ -290,7 +290,7 @@ async function getHashes( let is4xxError = false; try { const response = await fetch(url); - if (!response.ok) { + if (!response.ok || !response.body) { is4xxError ||= response.status >= 400 && response.status < 500; throw new Error(`unexpected response ${response.statusText} for ${url}`); } diff --git a/packages/build/src/evergreen/rest-api.ts b/packages/build/src/evergreen/rest-api.ts index b564971fb..803526218 100644 --- a/packages/build/src/evergreen/rest-api.ts +++ b/packages/build/src/evergreen/rest-api.ts @@ -95,7 +95,7 @@ export class EvergreenApi { } - ${await response.text()}` ); } - return await response.json(); + return (await response.json()) as T; } private getApiHeaders(): Record { diff --git a/packages/build/src/packaging/download-manpage.ts b/packages/build/src/packaging/download-manpage.ts index ff967d48b..0fa00b63a 100644 --- a/packages/build/src/packaging/download-manpage.ts +++ b/packages/build/src/packaging/download-manpage.ts @@ -13,6 +13,9 @@ export async function downloadManpage( ) { await fs.mkdir(destination, { recursive: true }); const response = await fetch(url); + if (!response.ok || !response.body) { + throw new Error(`Unexpected response while fetching ${url}`); + } await promisify(pipeline)(response.body, tar.x({ cwd: destination })); await promisify(pipeline)( createReadStream(join(destination, basename(name, '.gz'))), diff --git a/packages/cli-repl/package.json b/packages/cli-repl/package.json index 5ca8ae5de..cb914a9c3 100644 --- a/packages/cli-repl/package.json +++ b/packages/cli-repl/package.json @@ -104,7 +104,7 @@ "depcheck": "^1.4.3", "eslint": "^7.25.0", "mongodb-crypt-library-dummy": "^1.0.2", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "prettier": "^2.8.8", "webpack-merge": "^5.8.0" }, diff --git a/packages/cli-repl/src/update-notification-manager.ts b/packages/cli-repl/src/update-notification-manager.ts index 43531cdfb..b9a217331 100644 --- a/packages/cli-repl/src/update-notification-manager.ts +++ b/packages/cli-repl/src/update-notification-manager.ts @@ -95,9 +95,15 @@ export class UpdateNotificationManager { : {}, }); + if (!response.body) { + throw new Error( + `Missing body from ${updateURL}: ${response.status} ${response.statusText}` + ); + } + if (response.status === 304 /* Not Modified, i.e. ETag matched */) { response.body - .on('error', () => { + .once('error', () => { /* ignore response content and errors */ }) .resume(); @@ -112,8 +118,8 @@ export class UpdateNotificationManager { ); } - const jsonContents = await response.json(); - this.latestKnownMongoshVersion = (jsonContents?.versions as any[]) + const jsonContents = (await response.json()) as { versions?: any[] }; + this.latestKnownMongoshVersion = jsonContents?.versions ?.map((v: any) => v.version as string) ?.filter((v) => !semver.prerelease(v)) ?.sort(semver.rcompare)?.[0]; diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index 7c0771633..20129a2aa 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -45,7 +45,7 @@ "lodash": "^4.17.21", "moment": "^2.29.1", "mongodb": "^6.3.0", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "prettier": "^2.8.8", "rimraf": "^3.0.2" } diff --git a/packages/e2e-tests/test/fixtures/curl.js b/packages/e2e-tests/test/fixtures/curl.js index ccb3a14c3..61d72db46 100755 --- a/packages/e2e-tests/test/fixtures/curl.js +++ b/packages/e2e-tests/test/fixtures/curl.js @@ -1,6 +1,6 @@ #!/usr/bin/env node 'use strict'; -const fetch = require('node-fetch'); +import fetch from 'node-fetch'; // fetch() an URL and ignore the response body (async function() { diff --git a/packages/snippet-manager/package.json b/packages/snippet-manager/package.json index 9d3f29405..41eb5aab0 100644 --- a/packages/snippet-manager/package.json +++ b/packages/snippet-manager/package.json @@ -42,7 +42,7 @@ "cross-spawn": "^7.0.3", "escape-string-regexp": "^4.0.0", "joi": "^17.4.0", - "node-fetch": "^2.6.1", + "node-fetch": "^3.3.2", "tar": "^6.1.15" }, "devDependencies": { @@ -50,7 +50,7 @@ "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", "@types/cross-spawn": "^6.0.2", - "@types/node-fetch": "^2.6.4", + "@types/node-fetch": "^2.6.11", "@types/tar": "^4.0.4", "depcheck": "^1.4.3", "eslint": "^7.25.0", diff --git a/packages/snippet-manager/src/snippet-manager.ts b/packages/snippet-manager/src/snippet-manager.ts index 69cae4db9..f6740a55b 100644 --- a/packages/snippet-manager/src/snippet-manager.ts +++ b/packages/snippet-manager/src/snippet-manager.ts @@ -50,6 +50,12 @@ export interface SnippetIndexFile { sourceURL: string; } +interface NpmMetaDataResponse { + dist?: { + tarball?: string; + }; +} + const indexFileSchema = joi.object({ indexFileVersion: joi.number().integer().max(1).required(), @@ -240,7 +246,9 @@ export class SnippetManager implements ShellPlugin { ); } interrupted.checkpoint(); - const npmTarballURL = (await npmMetadataResponse.json())?.dist?.tarball; + const npmTarballURL = ( + (await npmMetadataResponse.json()) as NpmMetaDataResponse + )?.dist?.tarball; if (!npmTarballURL) { this.messageBus.emit('mongosh-snippets:npm-download-failed', { npmMetadataURL, @@ -253,7 +261,7 @@ export class SnippetManager implements ShellPlugin { interrupted.checkpoint(); await this.print(`Downloading npm from ${npmTarballURL}...`); const npmTarball = await this.fetch(npmTarballURL); - if (!npmTarball.ok) { + if (!npmTarball.ok || !npmTarball.body) { this.messageBus.emit('mongosh-snippets:npm-download-failed', { npmMetadataURL, npmTarballURL, From 2ec2b7d98ead84e770e1fc9a97dabef1e91b84c4 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Thu, 29 Feb 2024 15:53:10 +0100 Subject: [PATCH 02/23] downgrade node-fetch in build --- package-lock.json | 58 +++++++------------------------------ packages/build/package.json | 3 +- 2 files changed, 12 insertions(+), 49 deletions(-) diff --git a/package-lock.json b/package-lock.json index 645115881..bc52f5fca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23085,9 +23085,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -30856,7 +30856,7 @@ "download": "^8.0.0", "es-aggregate-error": "^1.0.9", "nock": "^13.0.11", - "node-fetch": "^3.3.2", + "node-fetch": "^2.6.1", "pkg-up": "^3.1.0", "rimraf": "^3.0.2", "semver": "^7.5.3", @@ -30873,6 +30873,7 @@ "@types/cross-spawn": "^6.0.2", "@types/download": "^8.0.1", "@types/es-aggregate-error": "^1.0.2", + "@types/node-fetch": "^2.6.4", "@types/rimraf": "^3.0.0", "@types/tar": "^4.0.4", "@types/tar-fs": "^2.0.0", @@ -30888,31 +30889,6 @@ "node": ">=14.15.1" } }, - "packages/build/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "engines": { - "node": ">= 12" - } - }, - "packages/build/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "packages/build/node_modules/yaml": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", @@ -37805,6 +37781,7 @@ "@types/cross-spawn": "^6.0.2", "@types/download": "^8.0.1", "@types/es-aggregate-error": "^1.0.2", + "@types/node-fetch": "^2.6.4", "@types/rimraf": "^3.0.0", "@types/tar": "^4.0.4", "@types/tar-fs": "^2.0.0", @@ -37818,7 +37795,7 @@ "es-aggregate-error": "^1.0.9", "eslint": "^7.25.0", "nock": "^13.0.11", - "node-fetch": "^3.3.2", + "node-fetch": "^2.6.1", "pkg-up": "^3.1.0", "prettier": "^2.8.8", "rimraf": "^3.0.2", @@ -37830,21 +37807,6 @@ "yaml": "^2.3.1" }, "dependencies": { - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" - }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, "yaml": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", @@ -50361,9 +50323,9 @@ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" }, "node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" }, diff --git a/packages/build/package.json b/packages/build/package.json index 400953f84..81b175cf9 100644 --- a/packages/build/package.json +++ b/packages/build/package.json @@ -47,6 +47,7 @@ "@types/cross-spawn": "^6.0.2", "@types/download": "^8.0.1", "@types/es-aggregate-error": "^1.0.2", + "@types/node-fetch": "^2.6.4", "@types/rimraf": "^3.0.0", "@types/tar": "^4.0.4", "@types/tar-fs": "^2.0.0", @@ -69,7 +70,7 @@ "download": "^8.0.0", "es-aggregate-error": "^1.0.9", "nock": "^13.0.11", - "node-fetch": "^3.3.2", + "node-fetch": "^2.6.1", "pkg-up": "^3.1.0", "rimraf": "^3.0.2", "semver": "^7.5.3", From b4d3e33f16e75d401e3d7880a2742772c95d89a6 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Thu, 29 Feb 2024 16:19:09 +0100 Subject: [PATCH 03/23] fix: remove @types/node-fetch --- package-lock.json | 2 -- packages/snippet-manager/package.json | 1 - 2 files changed, 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index bc52f5fca..4f0a848da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31473,7 +31473,6 @@ "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", "@types/cross-spawn": "^6.0.2", - "@types/node-fetch": "^2.6.11", "@types/tar": "^4.0.4", "depcheck": "^1.4.3", "eslint": "^7.25.0", @@ -38218,7 +38217,6 @@ "@mongosh/shell-api": "0.0.0-dev.0", "@mongosh/types": "0.0.0-dev.0", "@types/cross-spawn": "^6.0.2", - "@types/node-fetch": "^2.6.11", "@types/tar": "^4.0.4", "bson": "^6.2.0", "cross-spawn": "^7.0.3", diff --git a/packages/snippet-manager/package.json b/packages/snippet-manager/package.json index 41eb5aab0..3d74207be 100644 --- a/packages/snippet-manager/package.json +++ b/packages/snippet-manager/package.json @@ -50,7 +50,6 @@ "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", "@types/cross-spawn": "^6.0.2", - "@types/node-fetch": "^2.6.11", "@types/tar": "^4.0.4", "depcheck": "^1.4.3", "eslint": "^7.25.0", From 16732c8cb49002ffe6151556f40f9d5bba823f31 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Thu, 29 Feb 2024 17:59:52 +0100 Subject: [PATCH 04/23] fix: handle 304 --- packages/cli-repl/src/update-notification-manager.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/cli-repl/src/update-notification-manager.ts b/packages/cli-repl/src/update-notification-manager.ts index b9a217331..8de9fc814 100644 --- a/packages/cli-repl/src/update-notification-manager.ts +++ b/packages/cli-repl/src/update-notification-manager.ts @@ -95,15 +95,9 @@ export class UpdateNotificationManager { : {}, }); - if (!response.body) { - throw new Error( - `Missing body from ${updateURL}: ${response.status} ${response.statusText}` - ); - } - if (response.status === 304 /* Not Modified, i.e. ETag matched */) { response.body - .once('error', () => { + ?.once('error', () => { /* ignore response content and errors */ }) .resume(); @@ -112,7 +106,7 @@ export class UpdateNotificationManager { return; } - if (!response.ok) { + if (!response.ok || !response.body) { throw new Error( `Unexpected status code fetching ${updateURL}: ${response.status} ${response.statusText}` ); From 8ab884fed44281afb53c61b9c865251a5ebd8162 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Fri, 1 Mar 2024 09:34:14 +0100 Subject: [PATCH 05/23] mjs --- packages/e2e-tests/.eslintrc.js | 4 +++- packages/e2e-tests/test/e2e-oidc.spec.ts | 2 +- packages/e2e-tests/test/fixtures/{curl.js => curl.mjs} | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) rename packages/e2e-tests/test/fixtures/{curl.js => curl.mjs} (91%) diff --git a/packages/e2e-tests/.eslintrc.js b/packages/e2e-tests/.eslintrc.js index 97657eb3c..37865c5ce 100644 --- a/packages/e2e-tests/.eslintrc.js +++ b/packages/e2e-tests/.eslintrc.js @@ -6,10 +6,12 @@ module.exports = { parserOptions: { tsconfigRootDir: fixCygwinPath(__dirname), project: ['./tsconfig-lint.json'], + sourceType: 'module', + ecmaVersion: 'latest', }, overrides: [ { - files: ['**/*.js', '**/*.ts'], + files: ['**/*.js', '**/*.mjs', '**/*.ts'], rules: { 'no-console': 0, }, diff --git a/packages/e2e-tests/test/e2e-oidc.spec.ts b/packages/e2e-tests/test/e2e-oidc.spec.ts index 44eac3b47..eb4bb93a2 100644 --- a/packages/e2e-tests/test/e2e-oidc.spec.ts +++ b/packages/e2e-tests/test/e2e-oidc.spec.ts @@ -23,7 +23,7 @@ describe('OIDC auth e2e', function () { const fetchBrowserFixture = `"${path.resolve( __dirname, 'fixtures', - 'curl.js' + 'curl.mjs' )}"`; skipIfEnvServerVersion('< 7.0'); diff --git a/packages/e2e-tests/test/fixtures/curl.js b/packages/e2e-tests/test/fixtures/curl.mjs similarity index 91% rename from packages/e2e-tests/test/fixtures/curl.js rename to packages/e2e-tests/test/fixtures/curl.mjs index 61d72db46..86fe29253 100755 --- a/packages/e2e-tests/test/fixtures/curl.js +++ b/packages/e2e-tests/test/fixtures/curl.mjs @@ -3,6 +3,6 @@ import fetch from 'node-fetch'; // fetch() an URL and ignore the response body -(async function() { +(async function () { (await fetch(process.argv[2])).body?.resume(); })().catch(err => { process.nextTick(() => { throw err; }); }); From 2a0f6d3b34bf3cd1d51eeea77025913c9ebb17a4 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Fri, 1 Mar 2024 12:54:36 +0100 Subject: [PATCH 06/23] fix tests --- packages/cli-repl/package.json | 2 +- packages/cli-repl/src/update-notification-manager.ts | 3 +-- packages/cli-repl/tsconfig.test.json | 6 ++++++ packages/snippet-manager/package.json | 2 +- packages/snippet-manager/tsconfig.test.json | 6 ++++++ 5 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 packages/cli-repl/tsconfig.test.json create mode 100644 packages/snippet-manager/tsconfig.test.json diff --git a/packages/cli-repl/package.json b/packages/cli-repl/package.json index cb914a9c3..cad9a68ec 100644 --- a/packages/cli-repl/package.json +++ b/packages/cli-repl/package.json @@ -21,7 +21,7 @@ "compile": "tsc -p tsconfig.json", "start": "node bin/mongosh.js", "pretest": "npm run compile", - "test": "cross-env TS_NODE_PROJECT=../../configs/tsconfig-mongosh/tsconfig.test.json mocha -r \"../../scripts/import-expansions.js\" --timeout 60000 -r ts-node/register \"./src/**/*.spec.ts\"", + "test": "cross-env TS_NODE_PROJECT=./tsconfig.test.json mocha -r \"../../scripts/import-expansions.js\" --timeout 60000 -r ts-node/register \"./src/**/*.spec.ts\"", "test-ci": "node ../../scripts/run-if-package-requested.js npm test", "test-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test", "test-ci-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test-ci", diff --git a/packages/cli-repl/src/update-notification-manager.ts b/packages/cli-repl/src/update-notification-manager.ts index 8de9fc814..a87edfd26 100644 --- a/packages/cli-repl/src/update-notification-manager.ts +++ b/packages/cli-repl/src/update-notification-manager.ts @@ -1,9 +1,8 @@ import semver from 'semver'; import { promises as fs } from 'fs'; -import type { RequestInfo, RequestInit, Response } from 'node-fetch'; // 'http' is not supported in startup snapshots yet. -const fetch = async (url: RequestInfo, init?: RequestInit): Promise => +const fetch = async (url: any, init?: any): Promise => await (await import('node-fetch')).default(url, init); interface MongoshUpdateLocalFileContents { diff --git a/packages/cli-repl/tsconfig.test.json b/packages/cli-repl/tsconfig.test.json new file mode 100644 index 000000000..7ccf4b076 --- /dev/null +++ b/packages/cli-repl/tsconfig.test.json @@ -0,0 +1,6 @@ +{ + "extends": "@mongodb-js/tsconfig-mongosh/tsconfig.test.json", + "compilerOptions": { + "moduleResolution": "NodeNext" + } +} diff --git a/packages/snippet-manager/package.json b/packages/snippet-manager/package.json index 3d74207be..aa0ce7de3 100644 --- a/packages/snippet-manager/package.json +++ b/packages/snippet-manager/package.json @@ -11,7 +11,7 @@ "unsafe-perm": true }, "scripts": { - "test": "mocha -r \"../../scripts/import-expansions.js\" --timeout 60000 -r ts-node/register \"./{src,lib}/**/*.spec.ts\"", + "test": "cross-env TS_NODE_PROJECT=./tsconfig.test.json mocha -r \"../../scripts/import-expansions.js\" --timeout 60000 -r ts-node/register \"./{src,lib}/**/*.spec.ts\"", "test-ci": "node ../../scripts/run-if-package-requested.js npm test", "test-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test", "test-ci-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test-ci", diff --git a/packages/snippet-manager/tsconfig.test.json b/packages/snippet-manager/tsconfig.test.json new file mode 100644 index 000000000..7ccf4b076 --- /dev/null +++ b/packages/snippet-manager/tsconfig.test.json @@ -0,0 +1,6 @@ +{ + "extends": "@mongodb-js/tsconfig-mongosh/tsconfig.test.json", + "compilerOptions": { + "moduleResolution": "NodeNext" + } +} From 7e923401b91379c1cb34f734a365db5bcc1aad6c Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Fri, 1 Mar 2024 13:46:57 +0100 Subject: [PATCH 07/23] e2e tests --- packages/e2e-tests/package.json | 2 +- packages/e2e-tests/tsconfig.test.json | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 packages/e2e-tests/tsconfig.test.json diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index 20129a2aa..09538b46a 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -11,7 +11,7 @@ "url": "git://github.com/mongodb-js/mongosh.git" }, "scripts": { - "test": "cross-env TS_NODE_PROJECT=../../configs/tsconfig-mongosh/tsconfig.test.json mocha -r \"../../scripts/import-expansions.js\" --timeout 15000 --colors -r ts-node/register \"./test/e2e*.spec.ts\"", + "test": "cross-env TS_NODE_PROJECT=./tsconfig.test.json mocha -r \"../../scripts/import-expansions.js\" --timeout 15000 --colors -r ts-node/register \"./test/e2e*.spec.ts\"", "test-ci": "node ../../scripts/run-if-package-requested.js npm test", "test-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test", "test-ci-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test-ci", diff --git a/packages/e2e-tests/tsconfig.test.json b/packages/e2e-tests/tsconfig.test.json new file mode 100644 index 000000000..7ccf4b076 --- /dev/null +++ b/packages/e2e-tests/tsconfig.test.json @@ -0,0 +1,6 @@ +{ + "extends": "@mongodb-js/tsconfig-mongosh/tsconfig.test.json", + "compilerOptions": { + "moduleResolution": "NodeNext" + } +} From 26863eedc3de53fffff137680606eef5d093e1d9 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Fri, 1 Mar 2024 14:53:01 +0100 Subject: [PATCH 08/23] snippet-manager -> nodenext --- packages/snippet-manager/tsconfig.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/snippet-manager/tsconfig.json b/packages/snippet-manager/tsconfig.json index 51ef57e2c..c59c07d58 100644 --- a/packages/snippet-manager/tsconfig.json +++ b/packages/snippet-manager/tsconfig.json @@ -2,7 +2,9 @@ "extends": "@mongodb-js/tsconfig-mongosh/tsconfig.common.json", "compilerOptions": { "outDir": "./lib", - "allowJs": true + "allowJs": true, + "module": "NodeNext", + "moduleResolution": "NodeNext" }, "include": ["src/**/*"], "exclude": ["./src/**/*.spec.*"] From 69f16c6790e6784508f4b18a6d10a19272d5920e Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Fri, 1 Mar 2024 17:01:39 +0100 Subject: [PATCH 09/23] import-node-fetch attempt --- package-lock.json | 126 ++++++++++- package.json | 1 + packages/cli-repl/package.json | 2 +- .../src/update-notification-manager.ts | 3 +- packages/import-node-fetch/.depcheckrc | 11 + packages/import-node-fetch/.eslintignore | 2 + packages/import-node-fetch/.eslintrc.js | 10 + packages/import-node-fetch/.gitignore | 1 + packages/import-node-fetch/.npmignore | 15 ++ packages/import-node-fetch/.prettierignore | 6 + packages/import-node-fetch/.prettierrc.json | 1 + packages/import-node-fetch/LICENSE | 201 ++++++++++++++++++ packages/import-node-fetch/README.md | 9 + packages/import-node-fetch/package.json | 46 ++++ packages/import-node-fetch/src/index.spec.ts | 22 ++ packages/import-node-fetch/src/index.ts | 30 +++ packages/import-node-fetch/tsconfig-lint.json | 5 + packages/import-node-fetch/tsconfig.json | 9 + packages/snippet-manager/package.json | 2 +- .../snippet-manager/src/snippet-manager.ts | 6 +- packages/snippet-manager/tsconfig.json | 4 +- 21 files changed, 495 insertions(+), 17 deletions(-) create mode 100644 packages/import-node-fetch/.depcheckrc create mode 100644 packages/import-node-fetch/.eslintignore create mode 100644 packages/import-node-fetch/.eslintrc.js create mode 100644 packages/import-node-fetch/.gitignore create mode 100644 packages/import-node-fetch/.npmignore create mode 100644 packages/import-node-fetch/.prettierignore create mode 100644 packages/import-node-fetch/.prettierrc.json create mode 100644 packages/import-node-fetch/LICENSE create mode 100644 packages/import-node-fetch/README.md create mode 100644 packages/import-node-fetch/package.json create mode 100644 packages/import-node-fetch/src/index.spec.ts create mode 100644 packages/import-node-fetch/src/index.ts create mode 100644 packages/import-node-fetch/tsconfig-lint.json create mode 100644 packages/import-node-fetch/tsconfig.json diff --git a/package-lock.json b/package-lock.json index 4f0a848da..18a076304 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "packages/build", "packages/errors", "packages/history", + "packages/import-node-fetch", "packages/java-shell", "packages/js-multiline-to-singleline", "packages/types", @@ -7566,6 +7567,10 @@ "resolved": "packages/i18n", "link": true }, + "node_modules/@mongosh/import-node-fetch": { + "resolved": "packages/import-node-fetch", + "link": true + }, "node_modules/@mongosh/java-shell": { "resolved": "packages/java-shell", "link": true @@ -30909,6 +30914,7 @@ "@mongosh/errors": "0.0.0-dev.0", "@mongosh/history": "0.0.0-dev.0", "@mongosh/i18n": "0.0.0-dev.0", + "@mongosh/import-node-fetch": "0.0.0-dev.0", "@mongosh/js-multiline-to-singleline": "0.0.0-dev.0", "@mongosh/logging": "0.0.0-dev.0", "@mongosh/service-provider-core": "0.0.0-dev.0", @@ -30952,7 +30958,6 @@ "eslint": "^7.25.0", "mongodb": "^6.3.0", "mongodb-crypt-library-dummy": "^1.0.2", - "node-fetch": "^3.3.2", "prettier": "^2.8.8", "webpack-merge": "^5.8.0" }, @@ -30964,6 +30969,9 @@ "macos-export-certificate-and-key": "^1.1.1", "mongodb-crypt-library-version": "^1.0.3", "win-export-certificate-and-key": "^1.1.1" + }, + "peerDependencies": { + "node-fetch": "^3.3.2" } }, "packages/cli-repl/node_modules/argparse": { @@ -30975,7 +30983,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, + "peer": true, "engines": { "node": ">= 12" } @@ -30995,7 +31003,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, + "peer": true, "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -31162,6 +31170,68 @@ "node": ">=14.15.1" } }, + "packages/import-esm": { + "name": "@mongosh/import-esm", + "version": "0.0.0-dev.0", + "extraneous": true, + "license": "Apache-2.0", + "devDependencies": { + "@mongodb-js/eslint-config-mongosh": "^1.0.0", + "@mongodb-js/prettier-config-devtools": "^1.0.1", + "@mongodb-js/tsconfig-mongosh": "^1.0.0", + "depcheck": "^1.4.3", + "eslint": "^7.25.0", + "node-fetch": "^3.3.2", + "prettier": "^2.8.8" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "packages/import-node-fetch": { + "name": "@mongosh/import-node-fetch", + "version": "0.0.0-dev.0", + "license": "Apache-2.0", + "devDependencies": { + "@mongodb-js/eslint-config-mongosh": "^1.0.0", + "@mongodb-js/prettier-config-devtools": "^1.0.1", + "@mongodb-js/tsconfig-mongosh": "^1.0.0", + "depcheck": "^1.4.3", + "eslint": "^7.25.0", + "node-fetch": "^3.3.2", + "prettier": "^2.8.8" + }, + "engines": { + "node": ">=14.15.1" + } + }, + "packages/import-node-fetch/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "packages/import-node-fetch/node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "packages/java-shell": { "name": "@mongosh/java-shell", "version": "0.0.0-dev.0", @@ -31459,13 +31529,13 @@ "license": "Apache-2.0", "dependencies": { "@mongosh/errors": "0.0.0-dev.0", + "@mongosh/import-node-fetch": "0.0.0-dev.0", "@mongosh/shell-api": "0.0.0-dev.0", "@mongosh/types": "0.0.0-dev.0", "bson": "^6.2.0", "cross-spawn": "^7.0.3", "escape-string-regexp": "^4.0.0", "joi": "^17.4.0", - "node-fetch": "^3.3.2", "tar": "^6.1.15" }, "devDependencies": { @@ -31481,12 +31551,16 @@ }, "engines": { "node": ">=14.15.1" + }, + "peerDependencies": { + "node-fetch": "^3.3.2" } }, "packages/snippet-manager/node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "peer": true, "engines": { "node": ">= 12" } @@ -31495,6 +31569,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "peer": true, "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -37827,6 +37902,7 @@ "@mongosh/errors": "0.0.0-dev.0", "@mongosh/history": "0.0.0-dev.0", "@mongosh/i18n": "0.0.0-dev.0", + "@mongosh/import-node-fetch": "0.0.0-dev.0", "@mongosh/js-multiline-to-singleline": "0.0.0-dev.0", "@mongosh/logging": "0.0.0-dev.0", "@mongosh/service-provider-core": "0.0.0-dev.0", @@ -37858,7 +37934,6 @@ "mongodb-crypt-library-dummy": "^1.0.2", "mongodb-crypt-library-version": "^1.0.3", "mongodb-log-writer": "^1.4.0", - "node-fetch": "^3.3.2", "numeral": "^2.0.6", "prettier": "^2.8.8", "pretty-repl": "^4.0.0", @@ -37879,7 +37954,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true + "peer": true }, "js-yaml": { "version": "4.1.0", @@ -37893,7 +37968,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, + "peer": true, "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -38016,6 +38091,37 @@ "prettier": "^2.8.8" } }, + "@mongosh/import-node-fetch": { + "version": "file:packages/import-node-fetch", + "requires": { + "@mongodb-js/eslint-config-mongosh": "^1.0.0", + "@mongodb-js/prettier-config-devtools": "^1.0.1", + "@mongodb-js/tsconfig-mongosh": "^1.0.0", + "depcheck": "^1.4.3", + "eslint": "^7.25.0", + "node-fetch": "^3.3.2", + "prettier": "^2.8.8" + }, + "dependencies": { + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true + }, + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + } + } + }, "@mongosh/java-shell": { "version": "file:packages/java-shell", "requires": { @@ -38214,6 +38320,7 @@ "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", "@mongosh/errors": "0.0.0-dev.0", + "@mongosh/import-node-fetch": "0.0.0-dev.0", "@mongosh/shell-api": "0.0.0-dev.0", "@mongosh/types": "0.0.0-dev.0", "@types/cross-spawn": "^6.0.2", @@ -38225,7 +38332,6 @@ "eslint": "^7.25.0", "joi": "^17.4.0", "nanobus": "^4.5.0", - "node-fetch": "^3.3.2", "prettier": "^2.8.8", "tar": "^6.1.15" }, @@ -38233,12 +38339,14 @@ "data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "peer": true }, "node-fetch": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "peer": true, "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", diff --git a/package.json b/package.json index d159f8666..13064d4d2 100644 --- a/package.json +++ b/package.json @@ -133,6 +133,7 @@ "packages/build", "packages/errors", "packages/history", + "packages/import-node-fetch", "packages/java-shell", "packages/js-multiline-to-singleline", "packages/types", diff --git a/packages/cli-repl/package.json b/packages/cli-repl/package.json index cad9a68ec..f2a32c31a 100644 --- a/packages/cli-repl/package.json +++ b/packages/cli-repl/package.json @@ -64,6 +64,7 @@ "@mongosh/errors": "0.0.0-dev.0", "@mongosh/history": "0.0.0-dev.0", "@mongosh/i18n": "0.0.0-dev.0", + "@mongosh/import-node-fetch": "0.0.0-dev.0", "@mongosh/js-multiline-to-singleline": "0.0.0-dev.0", "@mongosh/logging": "0.0.0-dev.0", "@mongosh/service-provider-core": "0.0.0-dev.0", @@ -104,7 +105,6 @@ "depcheck": "^1.4.3", "eslint": "^7.25.0", "mongodb-crypt-library-dummy": "^1.0.2", - "node-fetch": "^3.3.2", "prettier": "^2.8.8", "webpack-merge": "^5.8.0" }, diff --git a/packages/cli-repl/src/update-notification-manager.ts b/packages/cli-repl/src/update-notification-manager.ts index a87edfd26..943e47cb8 100644 --- a/packages/cli-repl/src/update-notification-manager.ts +++ b/packages/cli-repl/src/update-notification-manager.ts @@ -1,9 +1,10 @@ import semver from 'semver'; import { promises as fs } from 'fs'; +import importNodeFetch from '@mongosh/import-node-fetch'; // 'http' is not supported in startup snapshots yet. const fetch = async (url: any, init?: any): Promise => - await (await import('node-fetch')).default(url, init); + await (await importNodeFetch()).default(url, init); interface MongoshUpdateLocalFileContents { lastChecked?: number; diff --git a/packages/import-node-fetch/.depcheckrc b/packages/import-node-fetch/.depcheckrc new file mode 100644 index 000000000..fe4bc51f9 --- /dev/null +++ b/packages/import-node-fetch/.depcheckrc @@ -0,0 +1,11 @@ +ignores: + - '@mongodb-js/eslint-config-mongosh' + - '@mongodb-js/tsconfig-mongosh' + - '@mongodb-js/prettier-config-devtools' + - '@typescript-eslint/parser' + - '@typescript-eslint/eslint-plugin' + - chai + - eslint-plugin-mocha + - eslint-config-mongodb-js +ignore-patterns: + - .eslintrc.js \ No newline at end of file diff --git a/packages/import-node-fetch/.eslintignore b/packages/import-node-fetch/.eslintignore new file mode 100644 index 000000000..491fc3597 --- /dev/null +++ b/packages/import-node-fetch/.eslintignore @@ -0,0 +1,2 @@ +node_modules +lib diff --git a/packages/import-node-fetch/.eslintrc.js b/packages/import-node-fetch/.eslintrc.js new file mode 100644 index 000000000..ffb213e29 --- /dev/null +++ b/packages/import-node-fetch/.eslintrc.js @@ -0,0 +1,10 @@ +const { fixCygwinPath } = require('@mongodb-js/eslint-config-mongosh/utils'); + +module.exports = { + root: true, + extends: ['@mongodb-js/eslint-config-mongosh'], + parserOptions: { + tsconfigRootDir: fixCygwinPath(__dirname), + project: ['./tsconfig-lint.json'], + }, +}; diff --git a/packages/import-node-fetch/.gitignore b/packages/import-node-fetch/.gitignore new file mode 100644 index 000000000..c3af85790 --- /dev/null +++ b/packages/import-node-fetch/.gitignore @@ -0,0 +1 @@ +lib/ diff --git a/packages/import-node-fetch/.npmignore b/packages/import-node-fetch/.npmignore new file mode 100644 index 000000000..ef55c3b8a --- /dev/null +++ b/packages/import-node-fetch/.npmignore @@ -0,0 +1,15 @@ +.DS_Store +.evergreen/ +.evergreen.yml +.gitignore +.jshintrc +.jsfmtrc +.travis.yml +.zuul.yml +azure-pipelines.yml +karma.conf.js +lerna.json +tsconfig.json +notices/ +src/ +test/ diff --git a/packages/import-node-fetch/.prettierignore b/packages/import-node-fetch/.prettierignore new file mode 100644 index 000000000..3cdee98d0 --- /dev/null +++ b/packages/import-node-fetch/.prettierignore @@ -0,0 +1,6 @@ +**/lib +**/dist +**/node_modules +**/test/fixtures +**/*.nocov* +**/*.wxs diff --git a/packages/import-node-fetch/.prettierrc.json b/packages/import-node-fetch/.prettierrc.json new file mode 100644 index 000000000..dfae21d04 --- /dev/null +++ b/packages/import-node-fetch/.prettierrc.json @@ -0,0 +1 @@ +"@mongodb-js/prettier-config-devtools" diff --git a/packages/import-node-fetch/LICENSE b/packages/import-node-fetch/LICENSE new file mode 100644 index 000000000..ad410e113 --- /dev/null +++ b/packages/import-node-fetch/LICENSE @@ -0,0 +1,201 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/packages/import-node-fetch/README.md b/packages/import-node-fetch/README.md new file mode 100644 index 000000000..8569e0068 --- /dev/null +++ b/packages/import-node-fetch/README.md @@ -0,0 +1,9 @@ +# `@mongosh/import-node-fetch` + +Package for [MongoDB Shell](https://github.com/mongodb-js/mongosh). + +### Installation + +```shell +npm install -S @mongosh/import-node-fetch +``` diff --git a/packages/import-node-fetch/package.json b/packages/import-node-fetch/package.json new file mode 100644 index 000000000..73e93bfa5 --- /dev/null +++ b/packages/import-node-fetch/package.json @@ -0,0 +1,46 @@ +{ + "name": "@mongosh/import-node-fetch", + "version": "0.0.0-dev.0", + "description": "Wrapper for ESM module imports", + "main": "./lib/index.js", + "repository": { + "type": "git", + "url": "git://github.com/mongodb-js/mongosh.git" + }, + "config": { + "unsafe-perm": true + }, + "scripts": { + "test": "mocha -r \"../../scripts/import-expansions.js\" --timeout 60000 -r ts-node/register \"./{src,lib}/**/*.spec.ts\"", + "test-ci": "node ../../scripts/run-if-package-requested.js npm test", + "test-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test", + "test-ci-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test-ci", + "eslint": "eslint", + "lint": "npm run eslint . && npm run prettier -- --check .", + "check": "npm run lint && npm run depcheck", + "depcheck": "depcheck", + "compile": "tsc -p tsconfig.json", + "prepublish": "npm run compile", + "prettier": "prettier", + "reformat": "npm run prettier -- --write . && npm run eslint --fix" + }, + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "engines": { + "node": ">=14.15.1" + }, + "mongosh": { + "unitTestsOnly": true + }, + "devDependencies": { + "@mongodb-js/eslint-config-mongosh": "^1.0.0", + "@mongodb-js/prettier-config-devtools": "^1.0.1", + "@mongodb-js/tsconfig-mongosh": "^1.0.0", + "depcheck": "^1.4.3", + "eslint": "^7.25.0", + "prettier": "^2.8.8", + "node-fetch": "^3.3.2" + } +} diff --git a/packages/import-node-fetch/src/index.spec.ts b/packages/import-node-fetch/src/index.spec.ts new file mode 100644 index 000000000..89c7abdd1 --- /dev/null +++ b/packages/import-node-fetch/src/index.spec.ts @@ -0,0 +1,22 @@ +import { expect } from 'chai'; +import importNodeFetch from './'; + +describe('makeMultilineJSIntoSingleLine', function () { + it('Fails to import node-fetch normally', async function () { + let failed = false; + try { + await import('node-fetch'); + } catch (error) { + failed = true; + expect((error as Error).message).to.include('require() of ES Module'); + } + if (!failed) throw new Error('This was expected to fail'); + }); + + it('Imports node-fetch safely', async function () { + const fetch = await importNodeFetch(); + + expect(fetch).to.exist; + expect(fetch).to.be.a('function'); + }); +}); diff --git a/packages/import-node-fetch/src/index.ts b/packages/import-node-fetch/src/index.ts new file mode 100644 index 000000000..c71c32e17 --- /dev/null +++ b/packages/import-node-fetch/src/index.ts @@ -0,0 +1,30 @@ +// eslint-disable-next-line @typescript-eslint/consistent-type-imports +export type TNodeFetch = typeof import('node-fetch'); +export default async function importNodeFetch(): Promise { + // Node-fetch is an ESM module from 3.x + // Importing ESM modules to CommonJS is possible with a dynamic import. + // However, once this is transpiled with TS, `await import()` changes to `require()`, which fails to load + // the package at runtime. + // The alternative, to transpile with "moduleResolution": "NodeNext", is not always feasible. + // Use this function to safely import the node-fetch package + let module; + try { + module = await import('node-fetch'); + } catch (err: unknown) { + if ( + err && + typeof err === 'object' && + 'code' in err && + err.code === 'ERR_REQUIRE_ESM' + ) { + // This means that the import() above was transpiled to require() + // and that that require() called failed because it saw actual on-disk ESM. + // In this case, it should be safe to use eval'ed import(). + module = await eval(`import('node-fetch')`); + } else { + throw err; + } + } + + return module; +} diff --git a/packages/import-node-fetch/tsconfig-lint.json b/packages/import-node-fetch/tsconfig-lint.json new file mode 100644 index 000000000..981423b3e --- /dev/null +++ b/packages/import-node-fetch/tsconfig-lint.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["**/*"], + "exclude": ["node_modules", "dist", "lib"] +} diff --git a/packages/import-node-fetch/tsconfig.json b/packages/import-node-fetch/tsconfig.json new file mode 100644 index 000000000..51ef57e2c --- /dev/null +++ b/packages/import-node-fetch/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@mongodb-js/tsconfig-mongosh/tsconfig.common.json", + "compilerOptions": { + "outDir": "./lib", + "allowJs": true + }, + "include": ["src/**/*"], + "exclude": ["./src/**/*.spec.*"] +} diff --git a/packages/snippet-manager/package.json b/packages/snippet-manager/package.json index aa0ce7de3..f107e8a30 100644 --- a/packages/snippet-manager/package.json +++ b/packages/snippet-manager/package.json @@ -36,13 +36,13 @@ }, "dependencies": { "@mongosh/errors": "0.0.0-dev.0", + "@mongosh/import-node-fetch": "0.0.0-dev.0", "@mongosh/shell-api": "0.0.0-dev.0", "@mongosh/types": "0.0.0-dev.0", "bson": "^6.2.0", "cross-spawn": "^7.0.3", "escape-string-regexp": "^4.0.0", "joi": "^17.4.0", - "node-fetch": "^3.3.2", "tar": "^6.1.15" }, "devDependencies": { diff --git a/packages/snippet-manager/src/snippet-manager.ts b/packages/snippet-manager/src/snippet-manager.ts index f6740a55b..5a5e31e81 100644 --- a/packages/snippet-manager/src/snippet-manager.ts +++ b/packages/snippet-manager/src/snippet-manager.ts @@ -17,6 +17,7 @@ import tar from 'tar'; import zlib from 'zlib'; import bson from 'bson'; import joi from 'joi'; +import importNodeFetch from '@mongosh/import-node-fetch'; const pipeline = promisify(stream.pipeline); const brotliCompress = promisify(zlib.brotliCompress); const brotliDecompress = promisify(zlib.brotliDecompress); @@ -191,9 +192,10 @@ export class SnippetManager implements ShellPlugin { return this._instanceState.messageBus; } - async fetch(url: string) { + async fetch(url: string): Promise { + // TODO: find type without importing node-fetch // 'http' is not supported in startup snapshots yet. - const fetch = await import('node-fetch'); + const fetch = await importNodeFetch(); return await fetch.default(url); } diff --git a/packages/snippet-manager/tsconfig.json b/packages/snippet-manager/tsconfig.json index c59c07d58..51ef57e2c 100644 --- a/packages/snippet-manager/tsconfig.json +++ b/packages/snippet-manager/tsconfig.json @@ -2,9 +2,7 @@ "extends": "@mongodb-js/tsconfig-mongosh/tsconfig.common.json", "compilerOptions": { "outDir": "./lib", - "allowJs": true, - "module": "NodeNext", - "moduleResolution": "NodeNext" + "allowJs": true }, "include": ["src/**/*"], "exclude": ["./src/**/*.spec.*"] From 181d206286fb5d4c34b19e54f2d77a14f01e7bd3 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Fri, 1 Mar 2024 17:15:34 +0100 Subject: [PATCH 10/23] cleanup --- packages/e2e-tests/package.json | 2 +- packages/e2e-tests/tsconfig.test.json | 6 ------ packages/snippet-manager/src/snippet-manager.ts | 5 ++--- 3 files changed, 3 insertions(+), 10 deletions(-) delete mode 100644 packages/e2e-tests/tsconfig.test.json diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json index 09538b46a..20129a2aa 100644 --- a/packages/e2e-tests/package.json +++ b/packages/e2e-tests/package.json @@ -11,7 +11,7 @@ "url": "git://github.com/mongodb-js/mongosh.git" }, "scripts": { - "test": "cross-env TS_NODE_PROJECT=./tsconfig.test.json mocha -r \"../../scripts/import-expansions.js\" --timeout 15000 --colors -r ts-node/register \"./test/e2e*.spec.ts\"", + "test": "cross-env TS_NODE_PROJECT=../../configs/tsconfig-mongosh/tsconfig.test.json mocha -r \"../../scripts/import-expansions.js\" --timeout 15000 --colors -r ts-node/register \"./test/e2e*.spec.ts\"", "test-ci": "node ../../scripts/run-if-package-requested.js npm test", "test-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test", "test-ci-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test-ci", diff --git a/packages/e2e-tests/tsconfig.test.json b/packages/e2e-tests/tsconfig.test.json deleted file mode 100644 index 7ccf4b076..000000000 --- a/packages/e2e-tests/tsconfig.test.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@mongodb-js/tsconfig-mongosh/tsconfig.test.json", - "compilerOptions": { - "moduleResolution": "NodeNext" - } -} diff --git a/packages/snippet-manager/src/snippet-manager.ts b/packages/snippet-manager/src/snippet-manager.ts index 5a5e31e81..c13e24216 100644 --- a/packages/snippet-manager/src/snippet-manager.ts +++ b/packages/snippet-manager/src/snippet-manager.ts @@ -17,7 +17,7 @@ import tar from 'tar'; import zlib from 'zlib'; import bson from 'bson'; import joi from 'joi'; -import importNodeFetch from '@mongosh/import-node-fetch'; +import importNodeFetch, { TNodeFetch } from '@mongosh/import-node-fetch'; const pipeline = promisify(stream.pipeline); const brotliCompress = promisify(zlib.brotliCompress); const brotliDecompress = promisify(zlib.brotliDecompress); @@ -192,8 +192,7 @@ export class SnippetManager implements ShellPlugin { return this._instanceState.messageBus; } - async fetch(url: string): Promise { - // TODO: find type without importing node-fetch + async fetch(url: string): Promise> { // 'http' is not supported in startup snapshots yet. const fetch = await importNodeFetch(); return await fetch.default(url); From 0e0422c93698022de726362d8772e961ffbbfa2e Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Fri, 1 Mar 2024 17:33:09 +0100 Subject: [PATCH 11/23] arrayBuffer --- packages/snippet-manager/src/snippet-manager.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/snippet-manager/src/snippet-manager.ts b/packages/snippet-manager/src/snippet-manager.ts index c13e24216..6f095cfa7 100644 --- a/packages/snippet-manager/src/snippet-manager.ts +++ b/packages/snippet-manager/src/snippet-manager.ts @@ -341,11 +341,12 @@ export class SnippetManager implements ShellPlugin { `The specified index file ${url} could not be read: ${repoRes.statusText}` ); } - const rawData = await repoRes.buffer(); + const arrayBuffer = await repoRes.arrayBuffer(); + const buffer = Buffer.from(arrayBuffer); let data; try { data = await unpackBSON>( - rawData + buffer ); } catch (err: any) { this.messageBus.emit('mongosh-snippets:fetch-index-error', { From 91e3d64d5ae108c8229e98cd03af3e32310b6dd6 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Mon, 4 Mar 2024 09:44:38 +0100 Subject: [PATCH 12/23] depcheck --- packages/e2e-tests/.depcheckrc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/e2e-tests/.depcheckrc b/packages/e2e-tests/.depcheckrc index 5922db46b..4468341a3 100644 --- a/packages/e2e-tests/.depcheckrc +++ b/packages/e2e-tests/.depcheckrc @@ -14,3 +14,10 @@ ignores: - eslint-config-mongodb-js ignore-patterns: - .eslintrc.js +parsers: + '**/*.mjs': + - 'es6' + '**/*.js': + - 'es6' + '**/*.ts': + - 'typescript' From 6bc887306794aaf413918b6fb9335a9877be294b Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Mon, 4 Mar 2024 12:37:37 +0100 Subject: [PATCH 13/23] cleanup --- package-lock.json | 108 ++------------------ packages/cli-repl/package.json | 2 +- packages/cli-repl/tsconfig.test.json | 6 -- packages/snippet-manager/package.json | 2 +- packages/snippet-manager/tsconfig.test.json | 6 -- 5 files changed, 12 insertions(+), 112 deletions(-) delete mode 100644 packages/cli-repl/tsconfig.test.json delete mode 100644 packages/snippet-manager/tsconfig.test.json diff --git a/package-lock.json b/package-lock.json index 18a076304..30aa20ca2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15824,6 +15824,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, "funding": [ { "type": "github", @@ -16173,6 +16174,7 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, "dependencies": { "fetch-blob": "^3.1.2" }, @@ -23075,6 +23077,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, "funding": [ { "type": "github", @@ -29486,6 +29489,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true, "engines": { "node": ">= 8" } @@ -30969,9 +30973,6 @@ "macos-export-certificate-and-key": "^1.1.1", "mongodb-crypt-library-version": "^1.0.3", "win-export-certificate-and-key": "^1.1.1" - }, - "peerDependencies": { - "node-fetch": "^3.3.2" } }, "packages/cli-repl/node_modules/argparse": { @@ -30979,15 +30980,6 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "packages/cli-repl/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "peer": true, - "engines": { - "node": ">= 12" - } - }, "packages/cli-repl/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -30999,24 +30991,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "packages/cli-repl/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "peer": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "packages/connectivity-tests": { "name": "@mongosh/connectivity-tests", "version": "0.0.0-dev.0", @@ -31551,36 +31525,6 @@ }, "engines": { "node": ">=14.15.1" - }, - "peerDependencies": { - "node-fetch": "^3.3.2" - } - }, - "packages/snippet-manager/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "peer": true, - "engines": { - "node": ">= 12" - } - }, - "packages/snippet-manager/node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "peer": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" } }, "packages/types": { @@ -37950,12 +37894,6 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "peer": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -37963,17 +37901,6 @@ "requires": { "argparse": "^2.0.1" } - }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "peer": true, - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } } } }, @@ -38334,25 +38261,6 @@ "nanobus": "^4.5.0", "prettier": "^2.8.8", "tar": "^6.1.15" - }, - "dependencies": { - "data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "peer": true - }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "peer": true, - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - } } }, "@mongosh/types": { @@ -44872,6 +44780,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, "requires": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -45128,6 +45037,7 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, "requires": { "fetch-blob": "^3.1.2" } @@ -50426,7 +50336,8 @@ "node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true }, "node-fetch": { "version": "2.7.0", @@ -55341,7 +55252,8 @@ "web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==" + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true }, "webidl-conversions": { "version": "7.0.0", diff --git a/packages/cli-repl/package.json b/packages/cli-repl/package.json index f2a32c31a..df67d72b9 100644 --- a/packages/cli-repl/package.json +++ b/packages/cli-repl/package.json @@ -21,7 +21,7 @@ "compile": "tsc -p tsconfig.json", "start": "node bin/mongosh.js", "pretest": "npm run compile", - "test": "cross-env TS_NODE_PROJECT=./tsconfig.test.json mocha -r \"../../scripts/import-expansions.js\" --timeout 60000 -r ts-node/register \"./src/**/*.spec.ts\"", + "test": "cross-env TS_NODE_PROJECT=../../configs/tsconfig-mongosh/tsconfig.test.json mocha -r \"../../scripts/import-expansions.js\" --timeout 60000 -r ts-node/register \"./src/**/*.spec.ts\"", "test-ci": "node ../../scripts/run-if-package-requested.js npm test", "test-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test", "test-ci-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test-ci", diff --git a/packages/cli-repl/tsconfig.test.json b/packages/cli-repl/tsconfig.test.json deleted file mode 100644 index 7ccf4b076..000000000 --- a/packages/cli-repl/tsconfig.test.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@mongodb-js/tsconfig-mongosh/tsconfig.test.json", - "compilerOptions": { - "moduleResolution": "NodeNext" - } -} diff --git a/packages/snippet-manager/package.json b/packages/snippet-manager/package.json index f107e8a30..30a613f8c 100644 --- a/packages/snippet-manager/package.json +++ b/packages/snippet-manager/package.json @@ -11,7 +11,7 @@ "unsafe-perm": true }, "scripts": { - "test": "cross-env TS_NODE_PROJECT=./tsconfig.test.json mocha -r \"../../scripts/import-expansions.js\" --timeout 60000 -r ts-node/register \"./{src,lib}/**/*.spec.ts\"", + "test": "mocha -r \"../../scripts/import-expansions.js\" --timeout 60000 -r ts-node/register \"./{src,lib}/**/*.spec.ts\"", "test-ci": "node ../../scripts/run-if-package-requested.js npm test", "test-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test", "test-ci-coverage": "nyc --no-clean --cwd ../.. --reporter=none npm run test-ci", diff --git a/packages/snippet-manager/tsconfig.test.json b/packages/snippet-manager/tsconfig.test.json deleted file mode 100644 index 7ccf4b076..000000000 --- a/packages/snippet-manager/tsconfig.test.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@mongodb-js/tsconfig-mongosh/tsconfig.test.json", - "compilerOptions": { - "moduleResolution": "NodeNext" - } -} From 4300091eb57027a20a0ad9c086a9b58226015b19 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Mon, 4 Mar 2024 13:26:01 +0100 Subject: [PATCH 14/23] update test --- packages/import-node-fetch/src/index.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/import-node-fetch/src/index.spec.ts b/packages/import-node-fetch/src/index.spec.ts index 89c7abdd1..6203654d9 100644 --- a/packages/import-node-fetch/src/index.spec.ts +++ b/packages/import-node-fetch/src/index.spec.ts @@ -17,6 +17,7 @@ describe('makeMultilineJSIntoSingleLine', function () { const fetch = await importNodeFetch(); expect(fetch).to.exist; - expect(fetch).to.be.a('function'); + expect(fetch).to.haveOwnProperty('default'); + expect(fetch.default).to.be.a('function'); }); }); From 6c5cbe90e08829d8886146e76794903ddeb0ed78 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Mon, 4 Mar 2024 13:33:35 +0100 Subject: [PATCH 15/23] type --- packages/snippet-manager/src/snippet-manager.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/snippet-manager/src/snippet-manager.ts b/packages/snippet-manager/src/snippet-manager.ts index 6f095cfa7..7c48209ad 100644 --- a/packages/snippet-manager/src/snippet-manager.ts +++ b/packages/snippet-manager/src/snippet-manager.ts @@ -17,7 +17,8 @@ import tar from 'tar'; import zlib from 'zlib'; import bson from 'bson'; import joi from 'joi'; -import importNodeFetch, { TNodeFetch } from '@mongosh/import-node-fetch'; +import importNodeFetch from '@mongosh/import-node-fetch'; +import type { TNodeFetch } from '@mongosh/import-node-fetch'; const pipeline = promisify(stream.pipeline); const brotliCompress = promisify(zlib.brotliCompress); const brotliDecompress = promisify(zlib.brotliDecompress); From 0f029d2106289399c142bb6d82592432f4737cad Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Mon, 4 Mar 2024 15:35:51 +0100 Subject: [PATCH 16/23] add externals --- config/webpack.base.config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/webpack.base.config.js b/config/webpack.base.config.js index 90058c95f..98348cc07 100644 --- a/config/webpack.base.config.js +++ b/config/webpack.base.config.js @@ -27,6 +27,8 @@ module.exports = { externals: { "node:crypto": "commonjs2 crypto", + "node:http": "commonjs2 http", + "node:https": "commonjs2 https", electron: "commonjs2 electron" // optional dep of the OIDC plugin }, From fdb866da810fa84e749c438dd17dcd54aebbb579 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Mon, 4 Mar 2024 17:08:03 +0100 Subject: [PATCH 17/23] pr suggestions + another external --- config/webpack.base.config.js | 1 + package-lock.json | 22 ++++++-------------- packages/import-node-fetch/package.json | 6 ++++-- packages/import-node-fetch/src/global.d.ts | 1 + packages/import-node-fetch/src/index.spec.ts | 2 +- packages/import-node-fetch/src/index.ts | 3 ++- 6 files changed, 15 insertions(+), 20 deletions(-) create mode 100644 packages/import-node-fetch/src/global.d.ts diff --git a/config/webpack.base.config.js b/config/webpack.base.config.js index 98348cc07..5a8c42aff 100644 --- a/config/webpack.base.config.js +++ b/config/webpack.base.config.js @@ -29,6 +29,7 @@ module.exports = { "node:crypto": "commonjs2 crypto", "node:http": "commonjs2 http", "node:https": "commonjs2 https", + "node:zlib": "commonjs2 zlib", electron: "commonjs2 electron" // optional dep of the OIDC plugin }, diff --git a/package-lock.json b/package-lock.json index 30aa20ca2..203676f13 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15824,7 +15824,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, "funding": [ { "type": "github", @@ -16174,7 +16173,6 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, "dependencies": { "fetch-blob": "^3.1.2" }, @@ -23077,7 +23075,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, "funding": [ { "type": "github", @@ -29489,7 +29486,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true, "engines": { "node": ">= 8" } @@ -31166,13 +31162,15 @@ "name": "@mongosh/import-node-fetch", "version": "0.0.0-dev.0", "license": "Apache-2.0", + "dependencies": { + "node-fetch": "^3.3.2" + }, "devDependencies": { "@mongodb-js/eslint-config-mongosh": "^1.0.0", "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", "depcheck": "^1.4.3", "eslint": "^7.25.0", - "node-fetch": "^3.3.2", "prettier": "^2.8.8" }, "engines": { @@ -31183,7 +31181,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, "engines": { "node": ">= 12" } @@ -31192,7 +31189,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -38033,14 +38029,12 @@ "data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" }, "node-fetch": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, "requires": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -44780,7 +44774,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, "requires": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -45037,7 +45030,6 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, "requires": { "fetch-blob": "^3.1.2" } @@ -50336,8 +50328,7 @@ "node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" }, "node-fetch": { "version": "2.7.0", @@ -55252,8 +55243,7 @@ "web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==" }, "webidl-conversions": { "version": "7.0.0", diff --git a/packages/import-node-fetch/package.json b/packages/import-node-fetch/package.json index 73e93bfa5..9bcdc8215 100644 --- a/packages/import-node-fetch/package.json +++ b/packages/import-node-fetch/package.json @@ -34,13 +34,15 @@ "mongosh": { "unitTestsOnly": true }, + "dependencies": { + "node-fetch": "^3.3.2" + }, "devDependencies": { "@mongodb-js/eslint-config-mongosh": "^1.0.0", "@mongodb-js/prettier-config-devtools": "^1.0.1", "@mongodb-js/tsconfig-mongosh": "^1.0.0", "depcheck": "^1.4.3", "eslint": "^7.25.0", - "prettier": "^2.8.8", - "node-fetch": "^3.3.2" + "prettier": "^2.8.8" } } diff --git a/packages/import-node-fetch/src/global.d.ts b/packages/import-node-fetch/src/global.d.ts new file mode 100644 index 000000000..8cc7b7049 --- /dev/null +++ b/packages/import-node-fetch/src/global.d.ts @@ -0,0 +1 @@ +declare const __webpack_require__: unknown; diff --git a/packages/import-node-fetch/src/index.spec.ts b/packages/import-node-fetch/src/index.spec.ts index 6203654d9..15aa824e8 100644 --- a/packages/import-node-fetch/src/index.spec.ts +++ b/packages/import-node-fetch/src/index.spec.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import importNodeFetch from './'; -describe('makeMultilineJSIntoSingleLine', function () { +describe('import-node-fetch', function () { it('Fails to import node-fetch normally', async function () { let failed = false; try { diff --git a/packages/import-node-fetch/src/index.ts b/packages/import-node-fetch/src/index.ts index c71c32e17..83d23cfdd 100644 --- a/packages/import-node-fetch/src/index.ts +++ b/packages/import-node-fetch/src/index.ts @@ -15,7 +15,8 @@ export default async function importNodeFetch(): Promise { err && typeof err === 'object' && 'code' in err && - err.code === 'ERR_REQUIRE_ESM' + err.code === 'ERR_REQUIRE_ESM' && + typeof __webpack_require__ === 'undefined' ) { // This means that the import() above was transpiled to require() // and that that require() called failed because it saw actual on-disk ESM. From e031f681640089fcd125b24a57dbf17aa70b16c5 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Mon, 4 Mar 2024 18:02:27 +0100 Subject: [PATCH 18/23] plus2 --- config/webpack.base.config.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/config/webpack.base.config.js b/config/webpack.base.config.js index 5a8c42aff..60e6b3aec 100644 --- a/config/webpack.base.config.js +++ b/config/webpack.base.config.js @@ -27,9 +27,12 @@ module.exports = { externals: { "node:crypto": "commonjs2 crypto", + // node-fetch https://github.com/node-fetch/node-fetch/blob/8b3320d2a7c07bce4afc6b2bf6c3bbddda85b01f/src/index.js#L9 + "node:buffer": "commonjs2 buffer", "node:http": "commonjs2 http", "node:https": "commonjs2 https", - "node:zlib": "commonjs2 zlib", + "node:stream": "commonjs2 stream", + "node:zlib": "commonjs2 zlib", electron: "commonjs2 electron" // optional dep of the OIDC plugin }, From 5023c50b487a82d548ebec1d735dd9b00d8bc35f Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Mon, 4 Mar 2024 18:44:13 +0100 Subject: [PATCH 19/23] plusN --- config/webpack.base.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config/webpack.base.config.js b/config/webpack.base.config.js index 60e6b3aec..7be69c0e9 100644 --- a/config/webpack.base.config.js +++ b/config/webpack.base.config.js @@ -33,6 +33,10 @@ module.exports = { "node:https": "commonjs2 https", "node:stream": "commonjs2 stream", "node:zlib": "commonjs2 zlib", + "node:url": "commonjs2 url", + "node:util": "commonjs2 util", + "node:events": "commonjs2 events", + "node:net": "commonjs2 net", electron: "commonjs2 electron" // optional dep of the OIDC plugin }, From 489ee1c89b885a9d2945031160b36a9eccc0ee18 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Tue, 5 Mar 2024 10:14:42 +0100 Subject: [PATCH 20/23] ?? --- config/webpack.base.config.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/webpack.base.config.js b/config/webpack.base.config.js index 7be69c0e9..1c735837d 100644 --- a/config/webpack.base.config.js +++ b/config/webpack.base.config.js @@ -37,6 +37,11 @@ module.exports = { "node:util": "commonjs2 util", "node:events": "commonjs2 events", "node:net": "commonjs2 net", + // https://github.com/node-fetch/node-fetch/blob/8b3320d2a7c07bce4afc6b2bf6c3bbddda85b01f/test/main.js#L2 + "node:dns": "commonjs2 dns", + "node:fs": "commonjs2 fs", + "node:path": "commonjs2 path", + "node:vm": "commonjs2 vm", electron: "commonjs2 electron" // optional dep of the OIDC plugin }, From bfc76de962ca31bdeea285318a335e642985e13c Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Tue, 5 Mar 2024 11:44:33 +0100 Subject: [PATCH 21/23] test debug --- packages/cli-repl/src/cli-repl.spec.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/cli-repl/src/cli-repl.spec.ts b/packages/cli-repl/src/cli-repl.spec.ts index f007d5215..17883db8a 100644 --- a/packages/cli-repl/src/cli-repl.spec.ts +++ b/packages/cli-repl/src/cli-repl.spec.ts @@ -1176,7 +1176,10 @@ describe('CliRepl', function () { it('does not emit warnings when connecting multiple times', async function () { await cliRepl.start(await testServer.connectionString(), {}); let warnings = 0; - const warningListener = () => warnings++; + const warningListener = (warning) => { + console.log('Unexpected warning', warning); + warnings++; + }; process.on('warning', warningListener); try { input.write( From c73f835e80c1ac42975824c04a16e58bc2078d57 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Tue, 5 Mar 2024 15:10:26 +0100 Subject: [PATCH 22/23] version --- packages/cli-repl/src/cli-repl.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli-repl/src/cli-repl.spec.ts b/packages/cli-repl/src/cli-repl.spec.ts index 17883db8a..4d0ae8de4 100644 --- a/packages/cli-repl/src/cli-repl.spec.ts +++ b/packages/cli-repl/src/cli-repl.spec.ts @@ -477,7 +477,7 @@ describe('CliRepl', function () { expect(e.name).to.equal('MongoshWarning'); expect((e as any).code).to.equal(CliReplErrors.NodeVersionMismatch); } finally { - process.version = process.versions.node; + process.version = `v${process.versions.node}`; process.env.MONGOSH_SKIP_NODE_VERSION_CHECK = origVersionCheckEnvVar || ''; } From a53c46d0c59bba4ae155b36c8db328e5577b2733 Mon Sep 17 00:00:00 2001 From: Paula Stachova Date: Wed, 6 Mar 2024 10:30:44 +0100 Subject: [PATCH 23/23] types --- packages/cli-repl/src/update-notification-manager.ts | 7 ++++++- packages/import-node-fetch/src/index.ts | 2 ++ packages/snippet-manager/src/snippet-manager.ts | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/cli-repl/src/update-notification-manager.ts b/packages/cli-repl/src/update-notification-manager.ts index 943e47cb8..762b8c3a4 100644 --- a/packages/cli-repl/src/update-notification-manager.ts +++ b/packages/cli-repl/src/update-notification-manager.ts @@ -1,9 +1,14 @@ import semver from 'semver'; import { promises as fs } from 'fs'; import importNodeFetch from '@mongosh/import-node-fetch'; +import type { + RequestInfo, + RequestInit, + Response, +} from '@mongosh/import-node-fetch'; // 'http' is not supported in startup snapshots yet. -const fetch = async (url: any, init?: any): Promise => +const fetch = async (url: RequestInfo, init?: RequestInit): Promise => await (await importNodeFetch()).default(url, init); interface MongoshUpdateLocalFileContents { diff --git a/packages/import-node-fetch/src/index.ts b/packages/import-node-fetch/src/index.ts index 83d23cfdd..a871142eb 100644 --- a/packages/import-node-fetch/src/index.ts +++ b/packages/import-node-fetch/src/index.ts @@ -1,5 +1,7 @@ // eslint-disable-next-line @typescript-eslint/consistent-type-imports export type TNodeFetch = typeof import('node-fetch'); +export type { Request, Response, RequestInfo, RequestInit } from 'node-fetch'; + export default async function importNodeFetch(): Promise { // Node-fetch is an ESM module from 3.x // Importing ESM modules to CommonJS is possible with a dynamic import. diff --git a/packages/snippet-manager/src/snippet-manager.ts b/packages/snippet-manager/src/snippet-manager.ts index 7c48209ad..ade98c74c 100644 --- a/packages/snippet-manager/src/snippet-manager.ts +++ b/packages/snippet-manager/src/snippet-manager.ts @@ -18,7 +18,7 @@ import zlib from 'zlib'; import bson from 'bson'; import joi from 'joi'; import importNodeFetch from '@mongosh/import-node-fetch'; -import type { TNodeFetch } from '@mongosh/import-node-fetch'; +import type { Response } from '@mongosh/import-node-fetch'; const pipeline = promisify(stream.pipeline); const brotliCompress = promisify(zlib.brotliCompress); const brotliDecompress = promisify(zlib.brotliDecompress); @@ -193,7 +193,7 @@ export class SnippetManager implements ShellPlugin { return this._instanceState.messageBus; } - async fetch(url: string): Promise> { + async fetch(url: string): Promise { // 'http' is not supported in startup snapshots yet. const fetch = await importNodeFetch(); return await fetch.default(url);