From 9d26c1a043d85db4af7a9940ae75cb4cdd98d228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rn=20Andre=20Sundt?= Date: Mon, 13 Dec 2021 23:53:30 +0100 Subject: [PATCH 1/3] Add module to replace parse-glob (fix 664) --- package-lock.json | 325 +++++++++++++----------------------- package.json | 5 +- src/cli/htmlhint.ts | 2 +- src/cli/parse-glob.ts | 45 +++++ test/cli/parse-glob.spec.js | 27 +++ 5 files changed, 195 insertions(+), 209 deletions(-) create mode 100644 src/cli/parse-glob.ts create mode 100644 test/cli/parse-glob.spec.js diff --git a/package-lock.json b/package-lock.json index 9235db87d..990d2d775 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,8 +13,8 @@ "chalk": "^4.1.2", "commander": "^8.3.0", "glob": "^7.2.0", + "is-glob": "^4.0.3", "node-fetch": "^2.6.2", - "parse-glob": "3.0.4", "strip-json-comments": "3.1.0", "xml": "1.0.1" }, @@ -28,8 +28,8 @@ "@rollup/plugin-node-resolve": "^13.0.6", "@types/async": "^3.2.10", "@types/glob": "^7.2.0", + "@types/is-glob": "4.0.2", "@types/node-fetch": "^2.5.12", - "@types/parse-glob": "^3.0.29", "@types/xml": "^1.0.6", "@typescript-eslint/eslint-plugin": "^5.4.0", "@typescript-eslint/parser": "^5.4.0", @@ -43,6 +43,7 @@ "lint-staged": "^12.1.2", "mocha": "^9.1.3", "nyc": "^15.1.0", + "parse-glob": "3.0.4", "prettier": "^2.4.1", "rimraf": "^3.0.2", "rollup": "^2.60.1", @@ -1223,6 +1224,12 @@ "@types/node": "*" } }, + "node_modules/@types/is-glob": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/is-glob/-/is-glob-4.0.2.tgz", + "integrity": "sha512-4j5G9Y5jljDSICQ1R2f/Rcyoj6DZmYGneny+p/cDkjep0rkqNg0W73Ty0bVjMUTZgLXHf8oiMjg1XC3CDwCz+g==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -1263,12 +1270,6 @@ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, - "node_modules/@types/parse-glob": { - "version": "3.0.29", - "resolved": "https://registry.npmjs.org/@types/parse-glob/-/parse-glob-3.0.29.tgz", - "integrity": "sha1-akDsfr0kGO5p7jl+SOQhaSaKEL8=", - "dev": true - }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -1448,27 +1449,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -1909,27 +1889,6 @@ "node": ">= 6" } }, - "node_modules/chokidar/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar/node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -2901,27 +2860,6 @@ "node": ">= 4" } }, - "node_modules/eslint/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint/node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -3121,27 +3059,6 @@ "node": ">= 6" } }, - "node_modules/fast-glob/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-glob/node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3260,27 +3177,6 @@ "node": ">= 8" } }, - "node_modules/findup-sync/node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -3467,6 +3363,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, "dependencies": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" @@ -3475,14 +3372,39 @@ "node": ">=0.10.0" } }, + "node_modules/glob-base/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, "dependencies": { "is-glob": "^2.0.0" } }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -3840,6 +3762,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3848,6 +3771,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3862,16 +3786,24 @@ } }, "node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "is-extglob": "^1.0.0" + "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, + "node_modules/is-glob/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -5627,6 +5559,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, "dependencies": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", @@ -5637,6 +5570,18 @@ "node": ">=0.10.0" } }, + "node_modules/parse-glob/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -7956,6 +7901,12 @@ "@types/node": "*" } }, + "@types/is-glob": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/is-glob/-/is-glob-4.0.2.tgz", + "integrity": "sha512-4j5G9Y5jljDSICQ1R2f/Rcyoj6DZmYGneny+p/cDkjep0rkqNg0W73Ty0bVjMUTZgLXHf8oiMjg1XC3CDwCz+g==", + "dev": true + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -7996,12 +7947,6 @@ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, - "@types/parse-glob": { - "version": "3.0.29", - "resolved": "https://registry.npmjs.org/@types/parse-glob/-/parse-glob-3.0.29.tgz", - "integrity": "sha1-akDsfr0kGO5p7jl+SOQhaSaKEL8=", - "dev": true - }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -8110,21 +8055,6 @@ "tsutils": "^3.21.0" }, "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -8455,21 +8385,6 @@ "requires": { "is-glob": "^4.0.1" } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } } } }, @@ -9162,21 +9077,6 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -9378,21 +9278,6 @@ "requires": { "is-glob": "^4.0.1" } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } } } }, @@ -9491,23 +9376,6 @@ "is-glob": "^4.0.0", "micromatch": "^4.0.2", "resolve-dir": "^1.0.1" - }, - "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } } }, "flat": { @@ -9653,17 +9521,41 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, "requires": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" + }, + "dependencies": { + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, "requires": { "is-glob": "^2.0.0" + }, + "dependencies": { + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "global-dirs": { @@ -9940,12 +9832,14 @@ "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -9954,11 +9848,18 @@ "dev": true }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "^2.1.1" + }, + "dependencies": { + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + } } }, "is-module": { @@ -11270,11 +11171,23 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, "requires": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", "is-extglob": "^1.0.0", "is-glob": "^2.0.0" + }, + "dependencies": { + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } } }, "parse-passwd": { diff --git a/package.json b/package.json index 4434b3141..60f7c0202 100644 --- a/package.json +++ b/package.json @@ -76,8 +76,8 @@ "chalk": "^4.1.2", "commander": "^8.3.0", "glob": "^7.2.0", + "is-glob": "^4.0.3", "node-fetch": "^2.6.2", - "parse-glob": "3.0.4", "strip-json-comments": "3.1.0", "xml": "1.0.1" }, @@ -88,8 +88,8 @@ "@rollup/plugin-node-resolve": "^13.0.6", "@types/async": "^3.2.10", "@types/glob": "^7.2.0", + "@types/is-glob": "4.0.2", "@types/node-fetch": "^2.5.12", - "@types/parse-glob": "^3.0.29", "@types/xml": "^1.0.6", "@typescript-eslint/eslint-plugin": "^5.4.0", "@typescript-eslint/parser": "^5.4.0", @@ -103,6 +103,7 @@ "lint-staged": "^12.1.2", "mocha": "^9.1.3", "nyc": "^15.1.0", + "parse-glob": "3.0.4", "prettier": "^2.4.1", "rimraf": "^3.0.2", "rollup": "^2.60.1", diff --git a/src/cli/htmlhint.ts b/src/cli/htmlhint.ts index 91bfe400a..48039e654 100644 --- a/src/cli/htmlhint.ts +++ b/src/cli/htmlhint.ts @@ -6,7 +6,7 @@ import { Command } from 'commander' import { existsSync, readFileSync, statSync } from 'fs' import * as glob from 'glob' import { IGlob } from 'glob' -import * as parseGlob from 'parse-glob' +import { parseGlob } from './parse-glob' import { dirname, resolve, sep } from 'path' import fetch from 'node-fetch' import * as stripJsonComments from 'strip-json-comments' diff --git a/src/cli/parse-glob.ts b/src/cli/parse-glob.ts new file mode 100644 index 000000000..8fdaef3c9 --- /dev/null +++ b/src/cli/parse-glob.ts @@ -0,0 +1,45 @@ +import * as isGlob from 'is-glob' + +export function parseGlob(target: string): { + base: string + glob: string + is: { + glob: boolean + } + path: { + basename: string + } +} { + const valid = isGlob(target) + + const result = { + base: '', + glob: '', + is: { + glob: valid, + }, + path: { + basename: '', + }, + } + + if (valid) { + const recursiveTokenIndex = target.indexOf('**/') + const lastSlashIndex = target.lastIndexOf('/') + const baseGlobSepIndex = + recursiveTokenIndex >= 0 + ? recursiveTokenIndex + : Math.max(lastSlashIndex, 0) + + result.base = + target.substring(0, baseGlobSepIndex).replace(/\/$/, '') || '.' + + result.glob = target.substring(baseGlobSepIndex).replace(/^\//, '') + + result.path.basename = target + .substring(Math.max(lastSlashIndex, 0)) + .replace(/^\//, '') + } + + return result +} diff --git a/test/cli/parse-glob.spec.js b/test/cli/parse-glob.spec.js new file mode 100644 index 000000000..e92cb8970 --- /dev/null +++ b/test/cli/parse-glob.spec.js @@ -0,0 +1,27 @@ +const expect = require('expect.js') +const { parseGlob } = require('../../dist/cli/parse-glob.js') +const parseGlobPkg = require('parse-glob') + +const testGlobs = [ + '!foo.js', + '*.js', + '**/abc.js', + 'abc/*.js', + 'abc/(aaa|bbb).js', + 'abc/[a-z].js', + 'abc/{a,b}.js', + 'abc/def/**/(ghi|jkl)*.{js,html}', +] + +describe('parseGlob', () => { + it('should work the same way as parseGlob package', () => { + for (const glob of testGlobs) { + const result = parseGlob(glob) + const pkgResult = parseGlobPkg(glob) + expect(result.base).to.equal(pkgResult.base) + expect(result.glob).to.equal(pkgResult.glob) + expect(result.is.glob).to.equal(pkgResult.is.glob) + expect(result.path.basename).to.equal(pkgResult.path.basename) + } + }) +}) From 4557cb0f0137292a8450e94913dc328b4dcabbdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rn=20Andre=20Sundt?= Date: Tue, 14 Dec 2021 09:48:38 +0100 Subject: [PATCH 2/3] Improve parseGlob for non-glob, path only argument --- src/cli/parse-glob.ts | 43 +++++++++++++++---------------------- test/cli/parse-glob.spec.js | 3 +++ 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/src/cli/parse-glob.ts b/src/cli/parse-glob.ts index 8fdaef3c9..96f2a7e0b 100644 --- a/src/cli/parse-glob.ts +++ b/src/cli/parse-glob.ts @@ -10,36 +10,27 @@ export function parseGlob(target: string): { basename: string } } { - const valid = isGlob(target) + const recursiveTokenIndex = Math.max( + target.indexOf('**/'), + target.indexOf('**\\') + ) + const lastSlashIndex = Math.max( + target.lastIndexOf('/'), + target.lastIndexOf('\\') + ) + const baseGlobSepIndex = + recursiveTokenIndex >= 0 ? recursiveTokenIndex : Math.max(lastSlashIndex, 0) - const result = { - base: '', - glob: '', + return { + base: target.substring(0, baseGlobSepIndex).replace(/[/\\]$/, '') || '.', + glob: target.substring(baseGlobSepIndex).replace(/^[/\\]/, ''), is: { - glob: valid, + glob: isGlob(target), }, path: { - basename: '', + basename: target + .substring(Math.max(lastSlashIndex, 0)) + .replace(/^\//, ''), }, } - - if (valid) { - const recursiveTokenIndex = target.indexOf('**/') - const lastSlashIndex = target.lastIndexOf('/') - const baseGlobSepIndex = - recursiveTokenIndex >= 0 - ? recursiveTokenIndex - : Math.max(lastSlashIndex, 0) - - result.base = - target.substring(0, baseGlobSepIndex).replace(/\/$/, '') || '.' - - result.glob = target.substring(baseGlobSepIndex).replace(/^\//, '') - - result.path.basename = target - .substring(Math.max(lastSlashIndex, 0)) - .replace(/^\//, '') - } - - return result } diff --git a/test/cli/parse-glob.spec.js b/test/cli/parse-glob.spec.js index e92cb8970..1720ce777 100644 --- a/test/cli/parse-glob.spec.js +++ b/test/cli/parse-glob.spec.js @@ -11,6 +11,9 @@ const testGlobs = [ 'abc/[a-z].js', 'abc/{a,b}.js', 'abc/def/**/(ghi|jkl)*.{js,html}', + 'abc/def/ghi.js', + 'abc.js', + '/abc/def.js', ] describe('parseGlob', () => { From 8d8170fdf9e7a76d6a57a629f9bc5e8c663df9d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rn=20Andre=20Sundt?= Date: Tue, 14 Dec 2021 10:07:20 +0100 Subject: [PATCH 3/3] Minor fix to parseGlob handling backslash --- src/cli/parse-glob.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/parse-glob.ts b/src/cli/parse-glob.ts index 96f2a7e0b..08a46f01e 100644 --- a/src/cli/parse-glob.ts +++ b/src/cli/parse-glob.ts @@ -30,7 +30,7 @@ export function parseGlob(target: string): { path: { basename: target .substring(Math.max(lastSlashIndex, 0)) - .replace(/^\//, ''), + .replace(/^[/\\]/, ''), }, } }