From 4587386fc9ba2fd2d4973ad4004a7819697d96f4 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Thu, 10 Sep 2020 21:06:27 +0800 Subject: [PATCH 1/3] chore!: update eslint-loader, minimum supported ESLint version is 6 closes #5699 closes #5698 --- .../__tests__/eslintMigrator.spec.js | 18 +----- .../@vue/cli-plugin-eslint/migrator/index.js | 62 ++++++++----------- packages/@vue/cli-plugin-eslint/package.json | 4 +- yarn.lock | 59 +++++++----------- 4 files changed, 51 insertions(+), 92 deletions(-) diff --git a/packages/@vue/cli-plugin-eslint/__tests__/eslintMigrator.spec.js b/packages/@vue/cli-plugin-eslint/__tests__/eslintMigrator.spec.js index de39574006..6428f08400 100644 --- a/packages/@vue/cli-plugin-eslint/__tests__/eslintMigrator.spec.js +++ b/packages/@vue/cli-plugin-eslint/__tests__/eslintMigrator.spec.js @@ -1,8 +1,6 @@ jest.setTimeout(300000) -jest.mock('inquirer') const create = require('@vue/cli-test-utils/createUpgradableProject') -const { expectPrompts } = require('inquirer') test('upgrade: should add eslint to devDependencies', async () => { const project = await create('plugin-eslint-v3.0', { @@ -16,17 +14,10 @@ test('upgrade: should add eslint to devDependencies', async () => { const pkg = JSON.parse(await project.read('package.json')) expect(pkg.devDependencies).not.toHaveProperty('eslint') - expectPrompts([ - { - message: `Your current ESLint version is v4`, - confirm: false - } - ]) - await project.upgrade('eslint') const updatedPkg = JSON.parse(await project.read('package.json')) - expect(updatedPkg.devDependencies.eslint).toMatch('^4') + expect(updatedPkg.devDependencies.eslint).toMatch('^6') }) test('upgrade: should upgrade eslint from v5 to v6', async () => { @@ -42,13 +33,6 @@ test('upgrade: should upgrade eslint from v5 to v6', async () => { const pkg = JSON.parse(await project.read('package.json')) expect(pkg.devDependencies.eslint).toMatch('^5') - expectPrompts([ - { - message: `Your current ESLint version is v5`, - confirm: true - } - ]) - try { await project.upgrade('eslint') } catch (e) { diff --git a/packages/@vue/cli-plugin-eslint/migrator/index.js b/packages/@vue/cli-plugin-eslint/migrator/index.js index 06f3712a2e..451ca81398 100644 --- a/packages/@vue/cli-plugin-eslint/migrator/index.js +++ b/packages/@vue/cli-plugin-eslint/migrator/index.js @@ -1,4 +1,3 @@ -const inquirer = require('inquirer') const { semver } = require('@vue/cli-shared-utils') module.exports = async (api) => { @@ -32,44 +31,35 @@ module.exports = async (api) => { return } - const { confirmUpgrade } = await inquirer.prompt([{ - name: 'confirmUpgrade', - type: 'confirm', - message: - `Your current ESLint version is v${localESLintMajor}.\n` + - `The latest major version which supported by vue-cli is v6.\n` + - `Do you want to upgrade? (May contain breaking changes)\n` - }]) + const { getDeps } = require('../eslintDeps') - if (confirmUpgrade) { - const { getDeps } = require('../eslintDeps') - - const newDeps = getDeps(api) - if (pkg.devDependencies['@vue/eslint-config-airbnb']) { - Object.assign(newDeps, getDeps(api, 'airbnb')) - } - if (pkg.devDependencies['@vue/eslint-config-standard']) { - Object.assign(newDeps, getDeps(api, 'standard')) - } - if (pkg.devDependencies['@vue/eslint-config-prettier']) { - Object.assign(newDeps, getDeps(api, 'prettier')) - } + const newDeps = getDeps(api) + if (pkg.devDependencies['@vue/eslint-config-airbnb']) { + Object.assign(newDeps, getDeps(api, 'airbnb')) + } + if (pkg.devDependencies['@vue/eslint-config-standard']) { + Object.assign(newDeps, getDeps(api, 'standard')) + } + if (pkg.devDependencies['@vue/eslint-config-prettier']) { + Object.assign(newDeps, getDeps(api, 'prettier')) + } - api.extendPackage({ devDependencies: newDeps }, { warnIncompatibleVersions: false }) + api.extendPackage({ devDependencies: newDeps }, { warnIncompatibleVersions: false }) - // in case anyone's upgrading from the legacy `typescript-eslint-parser` - if (api.hasPlugin('typescript')) { - api.extendPackage({ - eslintConfig: { - parserOptions: { - parser: '@typescript-eslint/parser' - } + // in case anyone's upgrading from the legacy `typescript-eslint-parser` + if (api.hasPlugin('typescript')) { + api.extendPackage({ + eslintConfig: { + parserOptions: { + parser: '@typescript-eslint/parser' } - }) - } - - // TODO: - // transform `@vue/prettier` to `eslint:recommended` + `@vue/prettier` - // transform `@vue/typescript` to `@vue/typescript/recommended` and also fix prettier compatibility for it + } + }) } + + api.exitLog(`ESLint upgraded from v${localESLintMajor}. to v6\n`) + + // TODO: + // transform `@vue/prettier` to `eslint:recommended` + `@vue/prettier` + // transform `@vue/typescript` to `@vue/typescript/recommended` and also fix prettier compatibility for it } diff --git a/packages/@vue/cli-plugin-eslint/package.json b/packages/@vue/cli-plugin-eslint/package.json index d5445ef973..b123b69735 100644 --- a/packages/@vue/cli-plugin-eslint/package.json +++ b/packages/@vue/cli-plugin-eslint/package.json @@ -24,7 +24,7 @@ }, "dependencies": { "@vue/cli-shared-utils": "^4.5.5", - "eslint-loader": "^2.2.1", + "eslint-loader": "^4.0.2", "globby": "^9.2.0", "inquirer": "^7.1.0", "webpack": "^4.0.0", @@ -32,6 +32,6 @@ }, "peerDependencies": { "@vue/cli-service": "^3.0.0 || ^4.0.0-0", - "eslint": ">= 1.6.0" + "eslint": ">= 6.0.0" } } diff --git a/yarn.lock b/yarn.lock index a076d2043d..bcb6cb8f37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8604,16 +8604,16 @@ eslint-import-resolver-webpack@^0.12.1, eslint-import-resolver-webpack@^0.12.2: resolve "^1.13.1" semver "^5.7.1" -eslint-loader@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" - integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== +eslint-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-4.0.2.tgz#386a1e21bcb613b3cf2d252a3b708023ccfb41ec" + integrity sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw== dependencies: - loader-fs-cache "^1.0.0" - loader-utils "^1.0.2" - object-assign "^4.0.1" - object-hash "^1.1.4" - rimraf "^2.6.1" + find-cache-dir "^3.3.1" + fs-extra "^8.1.0" + loader-utils "^2.0.0" + object-hash "^2.0.3" + schema-utils "^2.6.5" eslint-module-utils@^2.6.0: version "2.6.0" @@ -9593,15 +9593,6 @@ find-babel-config@^1.1.0: json5 "^0.5.1" path-exists "^3.0.0" -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -13130,14 +13121,6 @@ load-script@^1.0.0: resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" integrity sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ= -loader-fs-cache@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" - integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== - dependencies: - find-cache-dir "^0.1.1" - mkdirp "^0.5.1" - loader-runner@^2.3.1, loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -13162,6 +13145,15 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4 emojis-list "^3.0.0" json5 "^1.0.1" +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -14912,10 +14904,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-hash@^1.1.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" - integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== +object-hash@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" + integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== object-inspect@^1.7.0: version "1.8.0" @@ -15732,13 +15724,6 @@ pirates@^4.0.0, pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= - dependencies: - find-up "^1.0.0" - pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" From 96c706d4c290704b98e8c3952f882a751984b69c Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Thu, 10 Sep 2020 21:16:40 +0800 Subject: [PATCH 2/3] docs: add migration guide [ci skip] --- docs/migrations/migrate-from-v4.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/migrations/migrate-from-v4.md b/docs/migrations/migrate-from-v4.md index 4134f08a3b..8b8294a675 100644 --- a/docs/migrations/migrate-from-v4.md +++ b/docs/migrations/migrate-from-v4.md @@ -38,6 +38,10 @@ If you want to migrate manually and gradually, you can run `vue upgrade Date: Fri, 11 Sep 2020 01:05:44 +0800 Subject: [PATCH 3/3] chore!: also update the versions in cli-service-global --- packages/@vue/cli-service-global/package.json | 4 +- yarn.lock | 69 +++---------------- 2 files changed, 11 insertions(+), 62 deletions(-) diff --git a/packages/@vue/cli-service-global/package.json b/packages/@vue/cli-service-global/package.json index eb9c02835c..7fcb57cfb6 100644 --- a/packages/@vue/cli-service-global/package.json +++ b/packages/@vue/cli-service-global/package.json @@ -28,8 +28,8 @@ "babel-eslint": "^10.1.0", "chalk": "^4.1.0", "core-js": "^3.6.5", - "eslint": "^5.16.0", - "eslint-plugin-vue": "^5.2.2", + "eslint": "^6.7.2", + "eslint-plugin-vue": "^6.2.2", "regenerator-runtime": "^0.13.5", "resolve": "^1.17.0", "vue": "^2.6.12", diff --git a/yarn.lock b/yarn.lock index bcb6cb8f37..b13476380f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3980,7 +3980,7 @@ acorn@^5.5.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== -acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7, acorn@^6.4.1: +acorn@^6.0.1, acorn@^6.0.2, acorn@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== @@ -4070,7 +4070,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.9.1: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3: version "6.12.3" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== @@ -8702,7 +8702,7 @@ eslint-plugin-vue-libs@^4.0.0: babel-eslint "^10.0.1" eslint-plugin-vue "^5.1.0" -eslint-plugin-vue@^5.1.0, eslint-plugin-vue@^5.2.2: +eslint-plugin-vue@^5.1.0: version "5.2.3" resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz#3ee7597d823b5478804b2feba9863b1b74273961" integrity sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw== @@ -8739,7 +8739,7 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1, eslint-utils@^1.4.3: +eslint-utils@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== @@ -8758,48 +8758,6 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^5.16.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" - text-table "^0.2.0" - eslint@^6.7.2: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" @@ -8857,15 +8815,6 @@ espree@^4.1.0: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - espree@^6.1.2, espree@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" @@ -10278,7 +10227,7 @@ global@^4.3.2: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0, globals@^11.12.0, globals@^11.7.0: +globals@^11.1.0, globals@^11.12.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -11328,7 +11277,7 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" -inquirer@^6.0.0, inquirer@^6.2.0, inquirer@^6.2.2: +inquirer@^6.0.0, inquirer@^6.2.0: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== @@ -12510,7 +12459,7 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.5.2, js-yaml@^3.8.1: +js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.13.1, js-yaml@^3.5.2, js-yaml@^3.8.1: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -15076,7 +15025,7 @@ optimize-css-assets-webpack-plugin@^5.0.1: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" -optionator@^0.8.1, optionator@^0.8.2, optionator@^0.8.3: +optionator@^0.8.1, optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -18437,7 +18386,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@2.0.1, strip-json-comments@^2.0.0, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@2.0.1, strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=