From 68cc61f3f1594fc2875b6092a409d25ebada3b52 Mon Sep 17 00:00:00 2001 From: Rogerio Chaves Date: Fri, 26 Feb 2021 23:53:36 +0100 Subject: [PATCH] Fix npm-force-resolutions on npm7 by also patching the packages field on the new package-lock version --- src/fixtures/npm7/package-lock.after.json | 59 +++++++++++++++++++++++ src/fixtures/npm7/package-lock.json | 52 ++++++++++++++++++++ src/fixtures/npm7/package.json | 16 ++++++ src/npm_force_resolutions/core.cljs | 19 ++++++-- src/npm_force_resolutions/core_test.cljs | 18 ++++++- 5 files changed, 160 insertions(+), 4 deletions(-) create mode 100644 src/fixtures/npm7/package-lock.after.json create mode 100644 src/fixtures/npm7/package-lock.json create mode 100644 src/fixtures/npm7/package.json diff --git a/src/fixtures/npm7/package-lock.after.json b/src/fixtures/npm7/package-lock.after.json new file mode 100644 index 0000000..66fe274 --- /dev/null +++ b/src/fixtures/npm7/package-lock.after.json @@ -0,0 +1,59 @@ +{ + "name": "npm-force-resolutions", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "npm-force-resolutions", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "boom": "^2.1.0" + } + }, + "node_modules/boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "engines": { + "node": ">=0.10.40" + } + } + }, + "dependencies": { + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "4.2.1" + }, + "dependencies": { + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + } + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + } + } +} \ No newline at end of file diff --git a/src/fixtures/npm7/package-lock.json b/src/fixtures/npm7/package-lock.json new file mode 100644 index 0000000..7e3444b --- /dev/null +++ b/src/fixtures/npm7/package-lock.json @@ -0,0 +1,52 @@ +{ + "name": "npm-force-resolutions", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "npm-force-resolutions", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "boom": "^2.1.0" + } + }, + "node_modules/boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "dependencies": { + "hoek": "2.x.x" + }, + "engines": { + "node": ">=0.10.40" + } + }, + "node_modules/hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).", + "engines": { + "node": ">=0.10.40" + } + } + }, + "dependencies": { + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "requires": { + "hoek": "2.x.x" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + } + } +} diff --git a/src/fixtures/npm7/package.json b/src/fixtures/npm7/package.json new file mode 100644 index 0000000..c810d97 --- /dev/null +++ b/src/fixtures/npm7/package.json @@ -0,0 +1,16 @@ +{ + "name": "npm-force-resolutions", + "version": "0.0.1", + "description": "", + "main": "index.js", + "scripts": {}, + "author": "", + "license": "MIT", + "dependencies": { + "boom": "^2.1.0" + }, + "resolutions": { + "hoek": "4.2.1", + "webpack": "5.23.0" + } +} diff --git a/src/npm_force_resolutions/core.cljs b/src/npm_force_resolutions/core.cljs index 4619626..a45d176 100644 --- a/src/npm_force_resolutions/core.cljs +++ b/src/npm_force_resolutions/core.cljs @@ -129,10 +129,23 @@ (sort-or-remove-map "requires")) (fix-existing-dependency resolutions key dependency))) +(defn remove-node-modules-path [key] + (string/replace key #".*node_modules/" "")) + (defn patch-all-dependencies [resolutions package-lock] - (update package-lock "dependencies" - (fn [dependencies] - (map-vals #(patch-dependency resolutions %1 %2) dependencies)))) + (let [updated-dependencies + (update package-lock "dependencies" + (fn [dependencies] + (map-vals + #(patch-dependency resolutions %1 %2) + dependencies)))] + (if (get updated-dependencies "packages") + (update updated-dependencies "packages" + (fn [dependencies] + (map-vals + #(patch-dependency resolutions (remove-node-modules-path %1) %2) + dependencies))) + updated-dependencies))) (defn update-package-lock [folder] (go diff --git a/src/npm_force_resolutions/core_test.cljs b/src/npm_force_resolutions/core_test.cljs index 648a1b7..f81cae1 100644 --- a/src/npm_force_resolutions/core_test.cljs +++ b/src/npm_force_resolutions/core_test.cljs @@ -8,7 +8,8 @@ patch-all-dependencies update-on-requires add-dependencies update-package-lock fix-existing-dependency fetch-resolved-resolution - get-registry-url build-dependency-from-dist]])) + get-registry-url build-dependency-from-dist + remove-node-modules-path]])) (set! js/XMLHttpRequest XMLHttpRequest) @@ -201,5 +202,20 @@ (get updated-package-lock "dependencies"))) (done))))) +(deftest test-remove-node-modules-path + (is (= (remove-node-modules-path "node_modules/@oclif/color/node_modules/chalk/node_modules/supports-color") + "supports-color"))) + +(deftest test-update-package-lock-packages-on-npm7 + (async done + (go + (let [expected-package-lock (read-json "./src/fixtures/npm7/package-lock.after.json") + updated-package-lock (