From b3f63c939b032564d4f27a43ede1770ebe97373e Mon Sep 17 00:00:00 2001 From: Valery Bugakov Date: Tue, 24 May 2022 19:38:47 -0700 Subject: [PATCH] web: integrate `@sourcegraph/eslint-plugin-sourcegraph` (#35040) --- client/eslint-plugin-sourcegraph/README.md | 30 ---- client/eslint-plugin-sourcegraph/lib/index.js | 14 -- .../lib/rules/check-help-links.js | 101 ------------- client/eslint-plugin-sourcegraph/package.json | 23 --- .../tests/lib/rules/check-help-links.test.js | 81 ----------- package.json | 2 +- yarn.lock | 135 ++++++++++++++++-- 7 files changed, 121 insertions(+), 265 deletions(-) delete mode 100644 client/eslint-plugin-sourcegraph/README.md delete mode 100644 client/eslint-plugin-sourcegraph/lib/index.js delete mode 100644 client/eslint-plugin-sourcegraph/lib/rules/check-help-links.js delete mode 100644 client/eslint-plugin-sourcegraph/package.json delete mode 100644 client/eslint-plugin-sourcegraph/tests/lib/rules/check-help-links.test.js diff --git a/client/eslint-plugin-sourcegraph/README.md b/client/eslint-plugin-sourcegraph/README.md deleted file mode 100644 index 21f35788c25..00000000000 --- a/client/eslint-plugin-sourcegraph/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# eslint-plugin-sourcegraph - -Custom ESLint rules for Sourcegraph. This package should only be used within -the main Sourcegraph project, and isn't intended for reuse by other packages in -the Sourcegraph organisation. - -## Rules - -Rules are defined in `lib/rules`. At present, one rule is available. - -### `check-help-links` - -This rule parses `Link` and `a` elements in JSX/TSX files. If a list of valid -docsite pages is provided, elements that point to a `/help/*` link are checked -against that list: if they don't exist, a linting error is raised. - -The list of docsite pages is provided either via the `DOCSITE_LIST` environment -variable, which should be a newline separated list of pages as outputted by -`docsite ls`, or via the `docsiteList` rule option, which is the same data as -an array. - -If neither of these are set, then the rule will silently succeed. - -## Testing - -Unit tests can be run with: - -```sh -yarn test -``` diff --git a/client/eslint-plugin-sourcegraph/lib/index.js b/client/eslint-plugin-sourcegraph/lib/index.js deleted file mode 100644 index 986df6dbd61..00000000000 --- a/client/eslint-plugin-sourcegraph/lib/index.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict' - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -var requireIndex = require('requireindex') - -//------------------------------------------------------------------------------ -// Plugin Definition -//------------------------------------------------------------------------------ - -// import all rules in lib/rules -module.exports.rules = requireIndex(__dirname + '/rules') diff --git a/client/eslint-plugin-sourcegraph/lib/rules/check-help-links.js b/client/eslint-plugin-sourcegraph/lib/rules/check-help-links.js deleted file mode 100644 index e0dcbe2a566..00000000000 --- a/client/eslint-plugin-sourcegraph/lib/rules/check-help-links.js +++ /dev/null @@ -1,101 +0,0 @@ -'use strict' - -//------------------------------------------------------------------------------ -// Rule Definition -//------------------------------------------------------------------------------ - -module.exports = { - meta: { - docs: { - description: 'Check that /help links point to real, non-redirected pages', - category: 'Best Practices', - recommended: false, - }, - schema: [ - { - type: 'object', - properties: { - docsiteList: { - type: 'array', - items: { - type: 'string', - }, - }, - }, - additionalProperties: false, - }, - ], - }, - - create: function (context) { - // Build the set of valid pages. In order, we'll try to get this from: - // - // 1. The DOCSITE_LIST environment variable, which should be a newline - // separated list of pages, as outputted by `docsite ls`. - // 2. The docsiteList rule option, which should be an array of pages. - // - // If neither of these are set, this rule will silently pass, so as not to - // require docsite to be run when a user wants to run eslint in general. - const pages = new Set() - if (process.env.DOCSITE_LIST) { - process.env.DOCSITE_LIST.split('\n').forEach(page => pages.add(page)) - } else if (context.options.length > 0) { - context.options[0].docsiteList.forEach(page => pages.add(page)) - } - - // No pages were provided, so we'll return an empty object and do nothing. - if (pages.size === 0) { - return {} - } - - // Return the object that will install the listeners we want. In this case, - // we only need to look at JSX opening elements. - // - // Note that we could use AST selectors below, but the structure of the AST - // makes that tricky: the identifer (Link or a) and attribute (to or href) - // we use to identify an element of interest are siblings, so we'd probably - // have to select on the identifier and have some ugly traversal code below - // to check the attribute. It feels cleaner to do it this way with the - // opening element as the context. - return { - JSXOpeningElement: node => { - // Figure out what kind of element we have and therefore what attribute - // we'd want to look for. - let attrName - if (node.name.name === 'Link') { - attrName = 'to' - } else if (node.name.name === 'a') { - attrName = 'href' - } else { - // Anything that's not a link is uninteresting. - return - } - - // Go find the link target in the attribute array. - const target = node.attributes.reduce( - (target, attr) => target || (attr.name && attr.name.name === attrName ? attr.value.value : undefined), - undefined - ) - - // Make sure the target points to a help link; if not, we don't need to - // go any further. - if (!target || !target.startsWith('/help/')) { - return - } - - // Strip off the /help/ prefix, any anchor, and any trailing slash, then - // look up the resultant page in the pages set, bearing in mind that it - // might point to a directory and we also need to look for any index - // page that might exist. - const destination = target.substring(6).split('#')[0].replace(/\/+$/, '') - if (!pages.has(destination + '.md') && !pages.has(destination + '/index.md')) { - context.report({ - node, - message: 'Help link to non-existent page: {{ destination }}', - data: { destination }, - }) - } - }, - } - }, -} diff --git a/client/eslint-plugin-sourcegraph/package.json b/client/eslint-plugin-sourcegraph/package.json deleted file mode 100644 index a591baf8615..00000000000 --- a/client/eslint-plugin-sourcegraph/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "private": true, - "name": "@sourcegraph/eslint-plugin-sourcegraph", - "version": "1.0.0", - "description": "Custom ESLint rules for Sourcegraph", - "keywords": [ - "eslint", - "eslintplugin", - "eslint-plugin" - ], - "main": "lib/index.js", - "scripts": { - "lint:js": "echo 'TODO: add proper ESLint config, issue #19448'", - "test": "mocha tests --recursive" - }, - "dependencies": { - "requireindex": "~1.1.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "license": "Apache-2.0" -} diff --git a/client/eslint-plugin-sourcegraph/tests/lib/rules/check-help-links.test.js b/client/eslint-plugin-sourcegraph/tests/lib/rules/check-help-links.test.js deleted file mode 100644 index 81956370e8e..00000000000 --- a/client/eslint-plugin-sourcegraph/tests/lib/rules/check-help-links.test.js +++ /dev/null @@ -1,81 +0,0 @@ -'use strict' - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -var rule = require('../../../lib/rules/check-help-links'), - RuleTester = require('eslint').RuleTester - -// Set up the configuration such that JSX is valid. -RuleTester.setDefaultConfig({ - parserOptions: { - ecmaVersion: 6, - ecmaFeatures: { - jsx: true, - }, - }, -}) - -//------------------------------------------------------------------------------ -// Tests -//------------------------------------------------------------------------------ - -const ruleTester = new RuleTester() -const invalidLinkError = path => { - return { message: 'Help link to non-existent page: ' + path, type: 'JSXOpeningElement' } -} -const options = [{ docsiteList: ['a.md', 'b/c.md', 'd/index.md'] }] - -// Build up the test cases given the various combinations we need to support. -const cases = { valid: [], invalid: [] } -for (const [element, attribute] of [ - ['a', 'href'], - ['Link', 'to'], -]) { - for (const anchor of ['', '#anchor', '#anchor#double']) { - for (const content of ['', 'link content']) { - const code = target => - content - ? `<${element} ${attribute}="${target}${anchor}">${content}` - : `<${element} ${attribute}="${target}${anchor}" />` - - cases.valid.push( - ...[ - '/help/a', - '/help/b/c', - '/help/d', - '/help/d/', - 'not-a-help-link', - 'help/but-not-absolute', - '/help-but-not-a-directory', - ].map(target => { - return { - code: code(target), - options, - } - }) - ) - - cases.invalid.push( - ...['/help/', '/help/b', '/help/does/not/exist'].map(target => { - return { - code: code(target), - errors: [invalidLinkError(target.substring(6))], - options, - } - }) - ) - } - } -} - -// Every case should be valid if the options are empty. -cases.valid.push( - ...[...cases.invalid, ...cases.valid].map(({ code }) => { - return { code } - }) -) - -// Actually run the tests. -ruleTester.run('check-help-links', rule, cases) diff --git a/package.json b/package.json index cbfe724dcbc..d1c861d940b 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,7 @@ "@pollyjs/persister-fs": "^5.0.0", "@slack/web-api": "^5.10.0", "@sourcegraph/eslint-config": "^0.27.0", - "@sourcegraph/eslint-plugin-sourcegraph": "1.0.0", + "@sourcegraph/eslint-plugin-sourcegraph": "^1.0.5", "@sourcegraph/eslint-plugin-wildcard": "1.0.0", "@sourcegraph/prettierrc": "^3.0.3", "@sourcegraph/stylelint-config": "^1.4.0", diff --git a/yarn.lock b/yarn.lock index e588976a5c9..9bd1da538fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3944,6 +3944,44 @@ dependencies: prop-types "^15.6.2" +"@sourcegraph/codemod-cli@1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@sourcegraph/codemod-cli/-/codemod-cli-1.0.0.tgz#0039d25a9bb566c8cb8ac098ca34c0fdd64bc0cc" + integrity sha512-qT9b1zyW/fa5h9v5UTkmGokqyoriTgTtZY2oHKyXsCbekdlbd1WJ+tXBHpsLRGOuBTGfjv1hIHcXeWdBi7j9Eg== + dependencies: + "@sourcegraph/codemod-common" "1.0.0" + +"@sourcegraph/codemod-common@1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@sourcegraph/codemod-common/-/codemod-common-1.0.0.tgz#64ed2e3faf932650f5f60ea0bc60b2b572dcaad8" + integrity sha512-QGlHVZFiAVYEWSIbcXP1rVQdXMgSBA3NUMhdkNMM3NUiuw3AL5fR5M/rH/bKyPHO2uOJF8XutqnEBpzbj4eRGw== + +"@sourcegraph/codemod-toolkit-packages@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@sourcegraph/codemod-toolkit-packages/-/codemod-toolkit-packages-1.0.1.tgz#dfa4f592c90048006c9ab20007c600ca88819134" + integrity sha512-NMLy/ozpWF02cQVHaTVdj4hCFigQYCYohXOiEMnUs7NenSQ2AeAu/K5M1uq16liZ0RoKP8eRABT1aaD0IwWSqg== + dependencies: + "@sourcegraph/codemod-common" "1.0.0" + "@sourcegraph/codemod-toolkit-ts" "1.0.1" + +"@sourcegraph/codemod-toolkit-ts@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@sourcegraph/codemod-toolkit-ts/-/codemod-toolkit-ts-1.0.1.tgz#028f9fd2bc8633458e7778bb538890bb552ad4a9" + integrity sha512-CKJAxErXJMO3gwjqLhQqDpFeIGNuVe5V6PCs6p0U0fClTfIHQ58NwfYbY3q37no1phDo3polrBGeXZj8jy7MKQ== + dependencies: + "@sourcegraph/codemod-cli" "1.0.0" + "@sourcegraph/codemod-common" "1.0.0" + +"@sourcegraph/codemod-transforms@1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@sourcegraph/codemod-transforms/-/codemod-transforms-1.0.2.tgz#578ed64f5737e342feb98f2be02fe554828f8829" + integrity sha512-/UgPJHadjTC6EHRa5j03H1Cps4jZitV6vPBHs9Gd/HAisBmkq6+9Y0tdgiyQ+HNCDPtb+EG8+ootlXEoSil7Aw== + dependencies: + "@sourcegraph/codemod-cli" "1.0.0" + "@sourcegraph/codemod-common" "1.0.0" + "@sourcegraph/codemod-toolkit-packages" "1.0.1" + "@sourcegraph/codemod-toolkit-ts" "1.0.1" + "@sourcegraph/eslint-config@^0.27.0": version "0.27.0" resolved "https://registry.npmjs.org/@sourcegraph/eslint-config/-/eslint-config-0.27.0.tgz#f892b5ad8c6d975bbeb97dfc40b31d0c41e4f70b" @@ -3965,6 +4003,20 @@ eslint-plugin-unicorn "^21.0.0" eslint-plugin-unused-imports "^1.1.5" +"@sourcegraph/eslint-plugin-sourcegraph@^1.0.5": + version "1.0.5" + resolved "https://registry.npmjs.org/@sourcegraph/eslint-plugin-sourcegraph/-/eslint-plugin-sourcegraph-1.0.5.tgz#397d8b52d85102b04dfd6f86d0816f731561bae6" + integrity sha512-609NL/0nOnGiDJHrTsIsaffNlm70ua5j7ftX6M3UhbMyMREX5xa7SwZmOjlBSwaaDlaP4SUmXwr7CumI7idM7g== + dependencies: + "@sourcegraph/codemod-transforms" "1.0.2" + "@typescript-eslint/experimental-utils" "5.4.0" + "@typescript-eslint/scope-manager" "5.4.0" + debug "^4.3.2" + ignore "^5.1.8" + regexpp "^3.2.0" + semver "^7.3.5" + tsutils "^3.21.0" + "@sourcegraph/extension-api-classes@^1.1.0": version "1.1.0" resolved "https://registry.npmjs.org/@sourcegraph/extension-api-classes/-/extension-api-classes-1.1.0.tgz#4e3f16875639f88c6783dd356cb128fa53cee091" @@ -5600,10 +5652,10 @@ "@types/tough-cookie" "*" parse5 "^4.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.0", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7": - version "7.0.9" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/json-schema@*", "@types/json-schema@^7.0.0", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json-stable-stringify@^1.0.32": version "1.0.32" @@ -6299,6 +6351,18 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" +"@typescript-eslint/experimental-utils@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz#238a7418d2da3b24874ba35385eb21cc61d2a65e" + integrity sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.4.0" + "@typescript-eslint/types" "5.4.0" + "@typescript-eslint/typescript-estree" "5.4.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/parser@^4.28.3": version "4.28.3" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.3.tgz#95f1d475c08268edffdcb2779993c488b6434b44" @@ -6317,11 +6381,24 @@ "@typescript-eslint/types" "4.28.3" "@typescript-eslint/visitor-keys" "4.28.3" +"@typescript-eslint/scope-manager@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.4.0.tgz#aaab08415f4a9cf32b870c7750ae8ba4607126a1" + integrity sha512-pRxFjYwoi8R+n+sibjgF9iUiAELU9ihPBtHzocyW8v8D8G8KeQvXTsW7+CBYIyTYsmhtNk50QPGLE3vrvhM5KA== + dependencies: + "@typescript-eslint/types" "5.4.0" + "@typescript-eslint/visitor-keys" "5.4.0" + "@typescript-eslint/types@4.28.3": version "4.28.3" resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.3.tgz#8fffd436a3bada422c2c1da56060a0566a9506c7" integrity sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA== +"@typescript-eslint/types@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.4.0.tgz#b1c130f4b381b77bec19696c6e3366f9781ce8f2" + integrity sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA== + "@typescript-eslint/typescript-estree@4.28.3": version "4.28.3" resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.3.tgz#253d7088100b2a38aefe3c8dd7bd1f8232ec46fb" @@ -6335,6 +6412,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz#fe524fb308973c68ebeb7428f3b64499a6ba5fc0" + integrity sha512-nhlNoBdhKuwiLMx6GrybPT3SFILm5Gij2YBdPEPFlYNFAXUJWX6QRgvi/lwVoadaQEFsizohs6aFRMqsXI2ewA== + dependencies: + "@typescript-eslint/types" "5.4.0" + "@typescript-eslint/visitor-keys" "5.4.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.28.3": version "4.28.3" resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.3.tgz#26ac91e84b23529968361045829da80a4e5251c4" @@ -6343,6 +6433,14 @@ "@typescript-eslint/types" "4.28.3" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@5.4.0": + version "5.4.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz#09bc28efd3621f292fe88c86eef3bf4893364c8c" + integrity sha512-PVbax7MeE7tdLfW5SA0fs8NGVVr+buMPrcj+CWYWPXsZCH8qZ1THufDzbXm1xrZ2b2PA1iENJ0sRq5fuUtvsJg== + dependencies: + "@typescript-eslint/types" "5.4.0" + eslint-visitor-keys "^3.0.0" + "@ungap/promise-all-settled@1.1.2": version "1.1.2" resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" @@ -10884,7 +10982,7 @@ debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, de dependencies: ms "2.0.0" -debug@4, debug@4.3.3, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.3: +debug@4, debug@4.3.3, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3: version "4.3.3" resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== @@ -12342,6 +12440,11 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^3.0.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + eslint@7.14.0: version "7.14.0" resolved "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz#2d2cac1d28174c510a97b377f122a5507958e344" @@ -15443,7 +15546,7 @@ is-generator-fn@^2.0.0: resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== -is-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -15464,6 +15567,13 @@ is-glob@^3.0.0, is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-hexadecimal@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" @@ -21528,10 +21638,10 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: call-bind "^1.0.2" define-properties "^1.1.3" -regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== +regexpp@^3.1.0, regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regexpu-core@^4.7.1: version "4.7.1" @@ -21810,11 +21920,6 @@ requireindex@^1.2.0, requireindex@~1.2.0: resolved "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== -requireindex@~1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" - integrity sha1-5UBLgVV+91225JxacgBIk/4D4WI= - requires-port@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"