diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 536fb4f6..e15ffd1f 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -29,7 +29,7 @@ jobs: fail-fast: false matrix: language: ['javascript'] - node-version: [14.x] + node-version: [18] steps: - name: Checkout repository diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 41c083ab..03476cd0 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -20,7 +20,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [14.x] + node-version: [18] steps: - name: Checkout diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index f801661a..c8616837 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -14,13 +14,21 @@ env: jobs: test: - name: Test on Node.js ${{ matrix.node-version }} and ${{ matrix.os }} + name: Test for Stylelint ${{ matrix.stylelint }} on Node.js ${{ matrix.node-version }} and ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - node-version: [14] - os: [ubuntu-latest, windows-latest, macos-latest] + node-version: [18] + os: [ubuntu-latest, macos-latest] + stylelint: [14, 15] + include: + - stylelint: 15 + node-version: 14 # For some reason jest-runner-vscode doesn't work well with Node v18 and Windows. + os: windows-latest + - stylelint: 14 + node-version: 14 # For some reason jest-runner-vscode doesn't work well with Node v18 and Windows. + os: windows-latest steps: - uses: actions/checkout@v2 @@ -51,6 +59,14 @@ jobs: - name: Install dependencies run: npm ci + - name: Install stylelint v15 + run: npm i -D stylelint@^15 + if: matrix.stylelint == 15 + + - name: Install stylelint v14 + run: npm i -D stylelint@^14 stylelint-scss@^4.3.0 + if: matrix.stylelint == 14 + - name: Cache VS Code binaries uses: actions/cache@v2 id: vscode-cache diff --git a/CHANGELOG.md b/CHANGELOG.md index b2980612..9f9c7cb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - Files are now re-linted when a Stylelint configuration file is changed in the workspace ([#356](https://github.com/stylelint/vscode-stylelint/pull/356)). +## [1.2.4](https://github.com/stylelint/vscode-stylelint/compare/v1.2.3...v1.2.4) (2023-02-14) + +### Added + +- Add "stylelint.reportDescriptionlessDisables" option ([#442](https://github.com/stylelint/vscode-stylelint/pull/442)). + ## [1.2.3](https://github.com/stylelint/vscode-stylelint/compare/v1.2.2...v1.2.3) (2022-08-16) ### Fixed diff --git a/README.md b/README.md index 55da542b..23f9e8da 100644 --- a/README.md +++ b/README.md @@ -168,6 +168,13 @@ e.g. "stylelint.customSyntax": "${workspaceFolder}/custom-syntax.js" ``` +### `stylelint.reportDescriptionlessDisables` + +> Type: `boolean` +> Default: `false` + +Sets the Stylelint [`reportDescriptionlessDisables`] option. If `true`, Stylelint reports `stylelint-disable` comments without a description. + ### `stylelint.ignoreDisables` > Type: `boolean` @@ -278,6 +285,26 @@ And on Windows by running: cmd /C "set NODE_ENV=development&&code" ``` +## Contributors + +Stylelint is maintained by volunteers. Without the code contributions from [all these fantastic people](https://github.com/stylelint/vscode-stylelint/graphs/contributors), Stylelint would not exist. [Become a contributor](https://github.com/stylelint/vscode-stylelint/contribute). + +### Sponsors + + + + + +Thank you to all our sponsors! [Become a sponsor](https://opencollective.com/stylelint). + +### Backers + + + + + +Thank you to all our backers! [Become a backer](https://opencollective.com/stylelint). + ## Licence [MIT](LICENSE) @@ -299,12 +326,13 @@ cmd /C "set NODE_ENV=development&&code" [stylelint]: https://stylelint.io/ [stylelint getting started guide]: https://stylelint.io/user-guide/get-started -[stylelint configuration file]: https://stylelint.io/user-guide/configuration +[stylelint configuration file]: https://stylelint.io/user-guide/configure [stylelint 14 migration guide]: https://github.com/stylelint/stylelint/blob/main/docs/migration-guide/to-14.md [`customsyntax`]: https://stylelint.io/user-guide/usage/options/#customsyntax [`config`]: https://stylelint.io/user-guide/usage/node-api#config [`configfile`]: https://stylelint.io/user-guide/usage/options#configfile [`configbasedir`]: https://stylelint.io/user-guide/usage/options#configbasedir +[`reportdescriptionlessdisables`]: https://stylelint.io/user-guide/usage/options#reportdescriptionlessdisables [`ignoredisables`]: https://stylelint.io/user-guide/usage/options#ignoredisables [`reportneedlessdisables`]: https://stylelint.io/user-guide/usage/options#reportneedlessdisables [`reportinvalidscopedisables`]: https://stylelint.io/user-guide/usage/options#reportInvalidScopeDisables diff --git a/package-lock.json b/package-lock.json index 3ade341a..4475ffbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-stylelint", - "version": "1.2.3", + "version": "1.2.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "vscode-stylelint", - "version": "1.2.3", + "version": "1.2.4", "license": "MIT", "dependencies": { "@types/triple-beam": "^1.3.2", @@ -53,11 +53,11 @@ "postcss": "^8.4.4", "postcss-sass": "^0.5.0", "postcss-scss": "^4.0.2", - "prettier": "^2.5.0", - "stylelint": "^14.10.0", + "prettier": "^2.7.1", + "stylelint": "^15.10.2", "stylelint-processor-glamorous": "^0.3.0", "stylelint-processor-styled-components": "^1.10.0", - "stylelint-scss": "^4.3.0", + "stylelint-scss": "^5.1.0", "ts-jest": "^27.0.7", "ts-node": "^10.4.0", "typed-emitter": "^1.4.0", @@ -884,21 +884,90 @@ "node": ">=12" } }, - "node_modules/@csstools/selector-specificity": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", + "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.0" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", + "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", + "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2", - "postcss-selector-parser": "^6.0.10" + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" } }, "node_modules/@dabh/diagnostics": { @@ -2461,7 +2530,7 @@ "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -2852,17 +2921,42 @@ } }, "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3000,9 +3094,9 @@ } }, "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "node_modules/colors": { @@ -3105,9 +3199,9 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", @@ -3328,14 +3422,27 @@ } }, "node_modules/css-functions-list": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", - "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", + "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", "dev": true, "engines": { "node": ">=12.22" } }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -3404,23 +3511,38 @@ } }, "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3428,7 +3550,7 @@ "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4639,9 +4761,9 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5213,9 +5335,9 @@ "dev": true }, "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, "engines": { "node": ">=8" @@ -5353,12 +5475,15 @@ } }, "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/inflight": { @@ -7660,9 +7785,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz", - "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", + "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==", "dev": true }, "node_modules/kuler": { @@ -7777,7 +7902,7 @@ "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, "node_modules/logform": { @@ -7864,6 +7989,12 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -7874,35 +8005,35 @@ } }, "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7927,9 +8058,9 @@ } }, "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "engines": { "node": ">=10" @@ -8006,9 +8137,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8039,7 +8170,7 @@ "node_modules/minimist-options/node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -8063,10 +8194,16 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8620,9 +8757,9 @@ } }, "node_modules/postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "version": "8.4.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", "dev": true, "funding": [ { @@ -8632,10 +8769,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -8734,9 +8875,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -8772,15 +8913,18 @@ } }, "node_modules/prettier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", - "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-plugin-packagejson": { @@ -8885,12 +9029,15 @@ ] }, "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/react-is": { @@ -8914,105 +9061,77 @@ } }, "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", "dev": true, "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/find-up": { + "node_modules/read-pkg-up/node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/read-pkg-up/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" }, "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/read-pkg/node_modules/path-type": { @@ -9042,16 +9161,19 @@ } }, "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/refa": { @@ -9270,9 +9392,9 @@ } }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -9718,15 +9840,18 @@ } }, "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", "dev": true, "dependencies": { - "min-indent": "^1.0.0" + "min-indent": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-json-comments": { @@ -9748,55 +9873,57 @@ "dev": true }, "node_modules/stylelint": { - "version": "14.10.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.10.0.tgz", - "integrity": "sha512-VAmyKrEK+wNFh9R8mNqoxEFzaa4gsHGhcT4xgkQDuOA5cjF6CaNS8loYV7gpi4tIZBPUyXesotPXzJAMN8VLOQ==", + "version": "15.10.2", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.2.tgz", + "integrity": "sha512-UxqSb3hB74g4DTO45QhUHkJMjKKU//lNUAOWyvPBVPZbCknJ5HjOWWZo+UDuhHa9FLeVdHBZXxu43eXkjyIPWg==", "dev": true, "dependencies": { - "@csstools/selector-specificity": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.3.0", + "@csstools/css-tokenizer": "^2.1.1", + "@csstools/media-query-list-parser": "^2.1.2", + "@csstools/selector-specificity": "^3.0.0", "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.1.0", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.0", + "css-tree": "^2.3.1", "debug": "^4.3.4", - "fast-glob": "^3.2.11", + "fast-glob": "^3.3.0", "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^6.0.1", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.0", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.25.0", + "known-css-properties": "^0.27.0", "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", + "meow": "^10.1.5", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.16", - "postcss-media-query-parser": "^0.2.3", + "postcss": "^8.4.25", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", + "postcss-selector-parser": "^6.0.13", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", + "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.0", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" }, "bin": { - "stylelint": "bin/stylelint.js" + "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^14.13.1 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -9896,19 +10023,18 @@ } }, "node_modules/stylelint-scss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.3.0.tgz", - "integrity": "sha512-GvSaKCA3tipzZHoz+nNO7S02ZqOsdBzMiCx9poSmLlb3tdJlGddEX/8QzCOD8O7GQan9bjsvLMsO5xiw6IhhIQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.1.0.tgz", + "integrity": "sha512-E+KlQFXv1Euha43qw3q+wKBSli557wxbbo6/39DWhRNXlUa9Cz+FYrcgz+PT6ag0l6UisCYjAGCNhoSl4FcwlA==", "dev": true, "dependencies": { - "lodash": "^4.17.21", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.6", - "postcss-value-parser": "^4.1.0" + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0" }, "peerDependencies": { - "stylelint": "^14.5.1" + "stylelint": "^14.5.1 || ^15.0.0" } }, "node_modules/stylelint/node_modules/balanced-match": { @@ -9917,26 +10043,90 @@ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, + "node_modules/stylelint/node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/stylelint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/stylelint/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" } }, + "node_modules/stylelint/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/stylelint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/supports-hyperlinks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + } + }, "node_modules/stylelint/node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^4.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/supports-color": { @@ -9952,9 +10142,9 @@ } }, "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "dependencies": { "has-flag": "^4.0.0", @@ -9998,9 +10188,9 @@ "dev": true }, "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -10014,9 +10204,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -10154,12 +10344,15 @@ } }, "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/triple-beam": { @@ -11517,10 +11710,30 @@ "@cspotcode/source-map-consumer": "0.8.0" } }, + "@csstools/css-parser-algorithms": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz", + "integrity": "sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA==", + "dev": true, + "requires": {} + }, + "@csstools/css-tokenizer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz", + "integrity": "sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA==", + "dev": true + }, + "@csstools/media-query-list-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz", + "integrity": "sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw==", + "dev": true, + "requires": {} + }, "@csstools/selector-specificity": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", "dev": true, "requires": {} }, @@ -12722,7 +12935,7 @@ "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true }, "astral-regex": { @@ -13020,14 +13233,29 @@ "dev": true }, "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", "dev": true, "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true + } } }, "caniuse-lite": { @@ -13139,9 +13367,9 @@ } }, "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, "colors": { @@ -13226,9 +13454,9 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -13394,11 +13622,21 @@ } }, "css-functions-list": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", - "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", + "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", "dev": true }, + "css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "requires": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + } + }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -13449,25 +13687,31 @@ } }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", "dev": true }, "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "requires": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true } } @@ -14310,9 +14554,9 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -14744,9 +14988,9 @@ "dev": true }, "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true }, "http-proxy-agent": { @@ -14841,9 +15085,9 @@ "dev": true }, "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true }, "inflight": { @@ -16554,9 +16798,9 @@ "dev": true }, "known-css-properties": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz", - "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", + "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==", "dev": true }, "kuler": { @@ -16652,7 +16896,7 @@ "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, "logform": { @@ -16719,6 +16963,12 @@ "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true }, + "mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -16726,29 +16976,29 @@ "dev": true }, "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", "decamelize-keys": "^1.1.0", "hard-rejection": "^2.1.0", "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" }, "dependencies": { "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -16767,9 +17017,9 @@ } }, "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true } } @@ -16824,9 +17074,9 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -16851,7 +17101,7 @@ "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true } } @@ -16871,9 +17121,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "dev": true }, "natural-compare": { @@ -17282,12 +17532,12 @@ } }, "postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "version": "8.4.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", + "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", "dev": true, "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } @@ -17358,9 +17608,9 @@ "requires": {} }, "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -17388,9 +17638,9 @@ "dev": true }, "prettier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", - "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "prettier-plugin-packagejson": { @@ -17462,9 +17712,9 @@ "dev": true }, "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, "react-is": { @@ -17496,77 +17746,53 @@ } }, "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", "dev": true, "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" }, "dependencies": { - "find-up": { + "hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" + "lru-cache": "^6.0.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" } }, "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dev": true, "requires": { "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" } }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true } } @@ -17586,13 +17812,13 @@ } }, "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" } }, "refa": { @@ -17756,9 +17982,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -18119,12 +18345,12 @@ "dev": true }, "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", "dev": true, "requires": { - "min-indent": "^1.0.0" + "min-indent": "^1.0.1" } }, "strip-json-comments": { @@ -18140,49 +18366,51 @@ "dev": true }, "stylelint": { - "version": "14.10.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.10.0.tgz", - "integrity": "sha512-VAmyKrEK+wNFh9R8mNqoxEFzaa4gsHGhcT4xgkQDuOA5cjF6CaNS8loYV7gpi4tIZBPUyXesotPXzJAMN8VLOQ==", + "version": "15.10.2", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.2.tgz", + "integrity": "sha512-UxqSb3hB74g4DTO45QhUHkJMjKKU//lNUAOWyvPBVPZbCknJ5HjOWWZo+UDuhHa9FLeVdHBZXxu43eXkjyIPWg==", "dev": true, "requires": { - "@csstools/selector-specificity": "^2.0.2", + "@csstools/css-parser-algorithms": "^2.3.0", + "@csstools/css-tokenizer": "^2.1.1", + "@csstools/media-query-list-parser": "^2.1.2", + "@csstools/selector-specificity": "^3.0.0", "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.1.0", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.0", + "css-tree": "^2.3.1", "debug": "^4.3.4", - "fast-glob": "^3.2.11", + "fast-glob": "^3.3.0", "fastest-levenshtein": "^1.0.16", "file-entry-cache": "^6.0.1", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.0", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.25.0", + "known-css-properties": "^0.27.0", "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", + "meow": "^10.1.5", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.16", - "postcss-media-query-parser": "^0.2.3", + "postcss": "^8.4.25", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", + "postcss-selector-parser": "^6.0.13", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", + "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.0", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" }, "dependencies": { "balanced-match": { @@ -18191,20 +18419,63 @@ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, + "cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "requires": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^4.0.1" } } } @@ -18287,16 +18558,15 @@ } }, "stylelint-scss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.3.0.tgz", - "integrity": "sha512-GvSaKCA3tipzZHoz+nNO7S02ZqOsdBzMiCx9poSmLlb3tdJlGddEX/8QzCOD8O7GQan9bjsvLMsO5xiw6IhhIQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.1.0.tgz", + "integrity": "sha512-E+KlQFXv1Euha43qw3q+wKBSli557wxbbo6/39DWhRNXlUa9Cz+FYrcgz+PT6ag0l6UisCYjAGCNhoSl4FcwlA==", "dev": true, "requires": { - "lodash": "^4.17.21", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.6", - "postcss-value-parser": "^4.1.0" + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0" } }, "supports-color": { @@ -18309,9 +18579,9 @@ } }, "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", "dev": true, "requires": { "has-flag": "^4.0.0", @@ -18348,9 +18618,9 @@ "dev": true }, "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -18361,9 +18631,9 @@ }, "dependencies": { "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -18474,9 +18744,9 @@ "dev": true }, "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true }, "triple-beam": { diff --git a/package.json b/package.json index ffe03a03..559b2ec6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vscode-stylelint", - "version": "1.2.3", + "version": "1.2.4", "license": "MIT", "description": "Official Stylelint extension for Visual Studio Code", "main": "dist/index.js", @@ -13,6 +13,9 @@ "homepage": "https://github.com/stylelint/vscode-stylelint#readme", "bugs": "https://github.com/stylelint/vscode-stylelint/issues", "qna": "https://stackoverflow.com/questions/tagged/vscode+stylelint", + "sponsor": { + "url": "https://opencollective.com/stylelint" + }, "icon": "media/stylelint.png", "engines": { "vscode": ">=1.56.0", @@ -101,11 +104,17 @@ "default": "", "description": "An absolute path to a custom PostCSS-compatible syntax module." }, + "stylelint.reportDescriptionlessDisables": { + "scope": "resource", + "type": "boolean", + "default": false, + "description": "Report `stylelint-disable` comments without a description." + }, "stylelint.ignoreDisables": { "scope": "resource", "type": "boolean", "default": false, - "description": "Ignore `stylelint-disable` (e.g. `/* stylelint-disable block-no-empty */`) comments" + "description": "Ignore `stylelint-disable` (e.g. `/* stylelint-disable block-no-empty */`) comments." }, "stylelint.reportNeedlessDisables": { "scope": "resource", @@ -236,11 +245,11 @@ "postcss": "^8.4.4", "postcss-sass": "^0.5.0", "postcss-scss": "^4.0.2", - "prettier": "^2.5.0", - "stylelint": "^14.10.0", + "prettier": "^2.7.1", + "stylelint": "^15.10.2", "stylelint-processor-glamorous": "^0.3.0", "stylelint-processor-styled-components": "^1.10.0", - "stylelint-scss": "^4.3.0", + "stylelint-scss": "^5.1.0", "ts-jest": "^27.0.7", "ts-node": "^10.4.0", "typed-emitter": "^1.4.0", @@ -252,17 +261,17 @@ "build-bundle-watch": "run:p build-watch bundle-watch", "build-watch": "npm run build -- --watch", "bundle": "npm run bundle-base -- --sourcemap", - "bundle-base": "ts-node -P tsconfig.scripts.json scripts/bundle.ts", + "bundle-base": "ts-node --transpile-only -P tsconfig.scripts.json scripts/bundle.ts", "bundle-watch": "npm run bundle-base -- --sourcemap --watch", "build-bundle": "run-s build bundle", - "download-vscode": "ts-node -P tsconfig.scripts.json scripts/download-vscode.ts", + "download-vscode": "ts-node --transpile-only -P tsconfig.scripts.json scripts/download-vscode.ts", "format": "prettier . --write", "lint": "run-s \"lint:*\"", "lint:formatting": "prettier . --check", "lint:js": "eslint --report-unused-disable-directives .", "lint:spelling": "cspell lint --no-progress", "lint:types": "tsc -b", - "lint:unit-tests": "ts-node -P tsconfig.scripts.json scripts/enforce-unit-tests-per-file.ts", + "lint:unit-tests": "ts-node --transpile-only -P tsconfig.scripts.json scripts/enforce-unit-tests-per-file.ts", "test": "npm run build-bundle && jest", "test:e2e": "npm run build-bundle && jest --projects test/e2e", "test:integration": "jest --projects test/integration", diff --git a/src/server/__tests__/__snapshots__/server.ts.snap b/src/server/__tests__/__snapshots__/server.ts.snap index 58bac669..bc178c27 100644 --- a/src/server/__tests__/__snapshots__/server.ts.snap +++ b/src/server/__tests__/__snapshots__/server.ts.snap @@ -175,6 +175,7 @@ Array [ "customSyntax": "", "ignoreDisables": false, "packageManager": "npm", + "reportDescriptionlessDisables": false, "reportInvalidScopeDisables": false, "reportNeedlessDisables": false, "snippet": Array [ @@ -206,6 +207,7 @@ Array [ "customSyntax": "", "ignoreDisables": false, "packageManager": "npm", + "reportDescriptionlessDisables": false, "reportInvalidScopeDisables": false, "reportNeedlessDisables": false, "snippet": Array [ @@ -243,6 +245,7 @@ Array [ "customSyntax": "", "ignoreDisables": false, "packageManager": "npm", + "reportDescriptionlessDisables": false, "reportInvalidScopeDisables": false, "reportNeedlessDisables": false, "snippet": Array [ @@ -273,6 +276,7 @@ Array [ "customSyntax": "", "ignoreDisables": false, "packageManager": "npm", + "reportDescriptionlessDisables": false, "reportInvalidScopeDisables": false, "reportNeedlessDisables": false, "snippet": Array [ @@ -328,6 +332,7 @@ Object { "customSyntax": "", "ignoreDisables": false, "packageManager": "yarn", + "reportDescriptionlessDisables": false, "reportInvalidScopeDisables": false, "reportNeedlessDisables": false, "snippet": Array [ @@ -355,6 +360,7 @@ Object { "customSyntax": "", "ignoreDisables": false, "packageManager": "npm", + "reportDescriptionlessDisables": false, "reportInvalidScopeDisables": false, "reportNeedlessDisables": false, "snippet": Array [ @@ -381,6 +387,7 @@ Object { "customSyntax": "", "ignoreDisables": false, "packageManager": "npm", + "reportDescriptionlessDisables": false, "reportInvalidScopeDisables": false, "reportNeedlessDisables": false, "snippet": Array [ @@ -408,6 +415,7 @@ Object { "customSyntax": "", "ignoreDisables": false, "packageManager": "npm", + "reportDescriptionlessDisables": false, "reportInvalidScopeDisables": false, "reportNeedlessDisables": false, "snippet": Array [ @@ -434,6 +442,7 @@ Object { "customSyntax": "", "ignoreDisables": false, "packageManager": "npm", + "reportDescriptionlessDisables": false, "reportInvalidScopeDisables": false, "reportNeedlessDisables": false, "snippet": Array [ diff --git a/src/server/modules/__tests__/formatter.ts b/src/server/modules/__tests__/formatter.ts index 8ca67601..f931a7d2 100644 --- a/src/server/modules/__tests__/formatter.ts +++ b/src/server/modules/__tests__/formatter.ts @@ -28,13 +28,15 @@ import { Position, TextEdit } from 'vscode-languageserver-types'; import { Notification } from '../../types'; import { FormatterModule } from '../formatter'; -const mockContext = serverMocks.getContext(); -const mockLogger = serverMocks.getLogger(); +let mockContext = serverMocks.getContext(); +let mockLogger = serverMocks.getLogger(); describe('FormatterModule', () => { beforeEach(() => { + jest.restoreAllMocks(); + mockContext = serverMocks.getContext(); mockContext.__options.validate = []; - jest.clearAllMocks(); + mockLogger = serverMocks.getLogger(); }); test('should be constructable', () => { diff --git a/src/server/server.ts b/src/server/server.ts index 7d7a0b72..e39bcdbb 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -40,6 +40,7 @@ const defaultOptions: LanguageServerOptions = { customSyntax: '', ignoreDisables: false, packageManager: 'npm', + reportDescriptionlessDisables: false, reportInvalidScopeDisables: false, reportNeedlessDisables: false, snippet: ['css', 'postcss'], diff --git a/src/server/types.ts b/src/server/types.ts index a4a5d2f9..6a40cb68 100644 --- a/src/server/types.ts +++ b/src/server/types.ts @@ -227,6 +227,7 @@ export type LanguageServerOptions = { customSyntax?: string; ignoreDisables?: boolean; packageManager: PackageManager; + reportDescriptionlessDisables?: boolean; reportInvalidScopeDisables?: boolean; reportNeedlessDisables?: boolean; snippet: string[]; diff --git a/src/utils/documents/__tests__/get-fixes.ts b/src/utils/documents/__tests__/get-fixes.ts index 86aa6186..3cc503db 100644 --- a/src/utils/documents/__tests__/get-fixes.ts +++ b/src/utils/documents/__tests__/get-fixes.ts @@ -22,6 +22,7 @@ describe('getFixes', () => { customSyntax: 'postcss-scss', }, fix: false, + reportDescriptionlessDisables: false, reportNeedlessDisables: true, reportInvalidScopeDisables: false, }; diff --git a/src/utils/index.ts b/src/utils/index.ts index e69de29b..cb0ff5c3 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/src/utils/lsp/display-error.ts b/src/utils/lsp/display-error.ts index 2570b2f6..bfc6e840 100644 --- a/src/utils/lsp/display-error.ts +++ b/src/utils/lsp/display-error.ts @@ -1,8 +1,6 @@ import { isIterableObject } from '../iterables'; import type { Connection } from 'vscode-languageserver'; -import type { InvalidOptionError } from '../stylelint'; -// eslint-disable-next-line node/no-unpublished-import -import { ConfigurationError } from 'stylelint'; +import type { InvalidOptionError, ConfigurationError } from '../stylelint'; /** * Takes an error and displays it in the UI using the given connection. diff --git a/src/utils/packages/stylelint-resolver.ts b/src/utils/packages/stylelint-resolver.ts index abe625f3..217371c7 100644 --- a/src/utils/packages/stylelint-resolver.ts +++ b/src/utils/packages/stylelint-resolver.ts @@ -2,8 +2,6 @@ import fs from 'fs/promises'; import { createRequire } from 'module'; import path from 'path'; import process from 'process'; -// eslint-disable-next-line node/no-unpublished-import -import type stylelint from 'stylelint'; import type winston from 'winston'; import { Connection, Files } from 'vscode-languageserver/node'; @@ -15,6 +13,7 @@ import { findPackageRoot } from './find-package-root'; import { GlobalPathResolver } from './global-path-resolver'; import { getFirstResolvedValue, lazyCallAsync } from '../functions'; import type { PackageManager, StylelintResolutionResult, ResolverOptions, TracerFn } from './types'; +import { Stylelint } from '../stylelint'; /** * Utility for resolving the path to the Stylelint package. Each instance caches @@ -133,7 +132,7 @@ export class StylelintResolver { return undefined; } - const stylelint = rootRelativeRequire('stylelint') as stylelint.PublicApi; + const stylelint = rootRelativeRequire('stylelint') as Stylelint; const result = { stylelint, @@ -166,7 +165,7 @@ export class StylelintResolver { const result = { // eslint-disable-next-line @typescript-eslint/no-var-requires - stylelint: require(stylelintPath) as stylelint.PublicApi, + stylelint: require(stylelintPath) as Stylelint, resolvedPath: stylelintPath, }; @@ -220,7 +219,7 @@ export class StylelintResolver { const requirePath = await this.#getRequirePath(stylelintPath, getWorkspaceFolderFn); // eslint-disable-next-line @typescript-eslint/no-var-requires - const stylelint = require(requirePath) as stylelint.PublicApi; + const stylelint = require(requirePath) as Stylelint; if (stylelint && typeof stylelint.lint === 'function') { return { diff --git a/src/utils/packages/types.ts b/src/utils/packages/types.ts index e8871404..fd83a58d 100644 --- a/src/utils/packages/types.ts +++ b/src/utils/packages/types.ts @@ -1,5 +1,4 @@ -// eslint-disable-next-line node/no-unpublished-import -import type stylelint from 'stylelint'; +import { Stylelint } from '../stylelint'; /** * Package manager identifiers. @@ -18,7 +17,7 @@ export type ResolverOptions = { * Stylelint package resolution result. */ export type StylelintResolutionResult = { - stylelint: stylelint.PublicApi; + stylelint: Stylelint; resolvedPath: string; }; diff --git a/src/utils/stylelint/__tests__/__snapshots__/stylelint-runner.ts.snap b/src/utils/stylelint/__tests__/__snapshots__/stylelint-runner.ts.snap index 7fb422c4..eb93330a 100644 --- a/src/utils/stylelint/__tests__/__snapshots__/stylelint-runner.ts.snap +++ b/src/utils/stylelint/__tests__/__snapshots__/stylelint-runner.ts.snap @@ -14,6 +14,7 @@ Object { "formatter": [Function], "ignoreDisables": undefined, "ignorePath": "/.stylelintignore", + "reportDescriptionlessDisables": undefined, "reportInvalidScopeDisables": undefined, "reportNeedlessDisables": undefined, } @@ -25,7 +26,7 @@ Object { Object { "code": "block-no-empty", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/block-no-empty", + "href": "https://stylelint.io/user-guide/rules/block-no-empty", }, "message": "Unexpected empty block (block-no-empty)", "range": Object { diff --git a/src/utils/stylelint/__tests__/build-stylelint-options.ts b/src/utils/stylelint/__tests__/build-stylelint-options.ts index 77db4d8b..5895e8d1 100644 --- a/src/utils/stylelint/__tests__/build-stylelint-options.ts +++ b/src/utils/stylelint/__tests__/build-stylelint-options.ts @@ -84,6 +84,7 @@ describe('buildStylelintOptions', () => { customSyntax: 'postcss-scss', ignoreDisables: false, ignorePath: '/.stylelintignore', + reportDescriptionlessDisables: false, reportNeedlessDisables: false, reportInvalidScopeDisables: false, }; @@ -103,6 +104,7 @@ describe('buildStylelintOptions', () => { customSyntax: 'postcss-scss', ignoreDisables: true, ignorePath: '/.stylelintignore', + reportDescriptionlessDisables: true, reportNeedlessDisables: true, reportInvalidScopeDisables: true, }; @@ -113,6 +115,7 @@ describe('buildStylelintOptions', () => { configBasedir: '/workspace', customSyntax: 'postcss-html', ignoreDisables: false, + reportDescriptionlessDisables: false, reportNeedlessDisables: false, reportInvalidScopeDisables: false, }; @@ -140,6 +143,7 @@ describe('buildStylelintOptions', () => { customSyntax: 'postcss-scss', ignoreDisables: true, ignorePath: '/.stylelintignore', + reportDescriptionlessDisables: true, reportNeedlessDisables: true, reportInvalidScopeDisables: true, }; @@ -150,6 +154,7 @@ describe('buildStylelintOptions', () => { configBasedir: '/workspace', customSyntax: '${workspaceFolder}/postcss-html', ignoreDisables: false, + reportDescriptionlessDisables: false, reportNeedlessDisables: false, reportInvalidScopeDisables: false, }; @@ -181,6 +186,7 @@ describe('buildStylelintOptions', () => { customSyntax: 'postcss-scss', ignoreDisables: true, ignorePath: '/.stylelintignore', + reportDescriptionlessDisables: true, reportNeedlessDisables: true, reportInvalidScopeDisables: true, }; @@ -191,6 +197,7 @@ describe('buildStylelintOptions', () => { configBasedir: '/workspace', customSyntax: '${workspaceFolder}/postcss-html', ignoreDisables: false, + reportDescriptionlessDisables: false, reportNeedlessDisables: false, reportInvalidScopeDisables: false, }; @@ -220,6 +227,7 @@ describe('buildStylelintOptions', () => { customSyntax: 'postcss-scss', ignoreDisables: true, ignorePath: '/.stylelintignore', + reportDescriptionlessDisables: true, reportNeedlessDisables: true, reportInvalidScopeDisables: true, }; @@ -230,6 +238,7 @@ describe('buildStylelintOptions', () => { configBasedir: './base', customSyntax: '/workspace/postcss-html', ignoreDisables: false, + reportDescriptionlessDisables: false, reportNeedlessDisables: false, reportInvalidScopeDisables: false, }; @@ -259,6 +268,7 @@ describe('buildStylelintOptions', () => { customSyntax: 'postcss-scss', ignoreDisables: true, ignorePath: '/.stylelintignore', + reportDescriptionlessDisables: true, reportNeedlessDisables: true, reportInvalidScopeDisables: true, }; @@ -269,6 +279,7 @@ describe('buildStylelintOptions', () => { configBasedir: './base', customSyntax: '/workspace/postcss-html', ignoreDisables: false, + reportDescriptionlessDisables: false, reportNeedlessDisables: false, reportInvalidScopeDisables: false, }; diff --git a/src/utils/stylelint/__tests__/process-linter-result.ts b/src/utils/stylelint/__tests__/process-linter-result.ts index 8644455c..a7010de1 100644 --- a/src/utils/stylelint/__tests__/process-linter-result.ts +++ b/src/utils/stylelint/__tests__/process-linter-result.ts @@ -1,4 +1,5 @@ import type stylelint from 'stylelint'; +import { Stylelint } from '../types'; import { processLinterResult } from '../process-linter-result'; const mockStylelint = { @@ -6,7 +7,7 @@ const mockStylelint = { 'unit-no-unknown': {}, 'at-rule-no-unknown': {}, }, -} as unknown as stylelint.PublicApi; +} as unknown as Stylelint; const createMockResult = ( mockResults: Partial[], diff --git a/src/utils/stylelint/build-stylelint-options.ts b/src/utils/stylelint/build-stylelint-options.ts index 0acf0735..c5df06cf 100644 --- a/src/utils/stylelint/build-stylelint-options.ts +++ b/src/utils/stylelint/build-stylelint-options.ts @@ -20,6 +20,7 @@ export async function buildStylelintOptions( configBasedir, customSyntax, ignoreDisables, + reportDescriptionlessDisables, reportNeedlessDisables, reportInvalidScopeDisables, }: RunnerOptions = {}, @@ -49,6 +50,9 @@ export async function buildStylelintOptions( ignoreDisables: ignoreDisables ?? baseOptions.ignoreDisables, + reportDescriptionlessDisables: + reportDescriptionlessDisables ?? baseOptions.reportDescriptionlessDisables, + reportNeedlessDisables: reportNeedlessDisables ?? baseOptions.reportNeedlessDisables, reportInvalidScopeDisables: diff --git a/src/utils/stylelint/process-linter-result.ts b/src/utils/stylelint/process-linter-result.ts index 1d9cf238..c0092fa2 100644 --- a/src/utils/stylelint/process-linter-result.ts +++ b/src/utils/stylelint/process-linter-result.ts @@ -2,6 +2,7 @@ import { warningToDiagnostic } from './warning-to-diagnostic'; // eslint-disable-next-line node/no-unpublished-import import type stylelint from 'stylelint'; import { LintDiagnostics, InvalidOptionError } from './types'; +import { Stylelint } from './types'; /** * Processes the results of a Stylelint lint run. @@ -16,7 +17,7 @@ import { LintDiagnostics, InvalidOptionError } from './types'; * @param result The results returned by Stylelint. */ export function processLinterResult( - stylelint: stylelint.PublicApi, + stylelint: Stylelint, { results, output, ruleMetadata }: stylelint.LinterResult, ): LintDiagnostics { if (results.length === 0) { diff --git a/src/utils/stylelint/types.ts b/src/utils/stylelint/types.ts index 3e520fb6..b863ca56 100644 --- a/src/utils/stylelint/types.ts +++ b/src/utils/stylelint/types.ts @@ -2,6 +2,8 @@ import type LSP from 'vscode-languageserver-protocol'; // eslint-disable-next-line node/no-unpublished-import import type stylelint from 'stylelint'; import type { PackageManager } from '../packages'; +export type Stylelint = typeof stylelint; +export type ConfigurationError = Error & { code: 78 }; /** * Diagnostics for a lint run. @@ -39,6 +41,7 @@ export type RunnerOptions = { customSyntax?: string; ignoreDisables?: boolean; packageManager?: PackageManager; + reportDescriptionlessDisables?: boolean; reportInvalidScopeDisables?: boolean; reportNeedlessDisables?: boolean; snippet?: string[]; diff --git a/test/e2e/__tests__/__snapshots__/code-actions.ts.snap b/test/e2e/__tests__/__snapshots__/code-actions.ts.snap index 0b597b6b..9386e0f7 100644 --- a/test/e2e/__tests__/__snapshots__/code-actions.ts.snap +++ b/test/e2e/__tests__/__snapshots__/code-actions.ts.snap @@ -107,7 +107,7 @@ Array [ "command": Object { "arguments": Array [ Object { - "uri": "https://stylelint.io/user-guide/rules/list/indentation", + "uri": "https://stylelint.io/user-guide/rules/indentation", }, ], "command": "stylelint.openRuleDoc", diff --git a/test/e2e/__tests__/__snapshots__/config-basedir.ts.snap b/test/e2e/__tests__/__snapshots__/config-basedir.ts.snap index da50444a..0e760b25 100644 --- a/test/e2e/__tests__/__snapshots__/config-basedir.ts.snap +++ b/test/e2e/__tests__/__snapshots__/config-basedir.ts.snap @@ -5,7 +5,7 @@ Array [ Object { "code": "color-hex-case", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/color-hex-case", + "href": "https://stylelint.io/user-guide/rules/color-hex-case", }, "message": "Expected \\"#fff\\" to be \\"#FFF\\" (color-hex-case)", "range": Object { @@ -24,7 +24,7 @@ Array [ Object { "code": "indentation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/indentation", + "href": "https://stylelint.io/user-guide/rules/indentation", }, "message": "Expected indentation of 8 spaces (indentation)", "range": Object { diff --git a/test/e2e/__tests__/__snapshots__/config-file.ts.snap b/test/e2e/__tests__/__snapshots__/config-file.ts.snap index 23d6f863..d39f18fc 100644 --- a/test/e2e/__tests__/__snapshots__/config-file.ts.snap +++ b/test/e2e/__tests__/__snapshots__/config-file.ts.snap @@ -5,7 +5,7 @@ Array [ Object { "code": "block-no-empty", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/block-no-empty", + "href": "https://stylelint.io/user-guide/rules/block-no-empty", }, "message": "Unexpected empty block (block-no-empty)", "range": Object { diff --git a/test/e2e/__tests__/__snapshots__/ignore-disables.ts.snap b/test/e2e/__tests__/__snapshots__/ignore-disables.ts.snap index 8f321f0a..b59647d6 100644 --- a/test/e2e/__tests__/__snapshots__/ignore-disables.ts.snap +++ b/test/e2e/__tests__/__snapshots__/ignore-disables.ts.snap @@ -5,7 +5,7 @@ Array [ Object { "code": "color-hex-case", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/color-hex-case", + "href": "https://stylelint.io/user-guide/rules/color-hex-case", }, "message": "Expected \\"#fff\\" to be \\"#FFF\\" (color-hex-case)", "range": Object { @@ -24,7 +24,7 @@ Array [ Object { "code": "indentation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/indentation", + "href": "https://stylelint.io/user-guide/rules/indentation", }, "message": "Expected indentation of 4 spaces (indentation)", "range": Object { diff --git a/test/e2e/__tests__/__snapshots__/lint.ts.snap b/test/e2e/__tests__/__snapshots__/lint.ts.snap index aae09884..2ae3651c 100644 --- a/test/e2e/__tests__/__snapshots__/lint.ts.snap +++ b/test/e2e/__tests__/__snapshots__/lint.ts.snap @@ -21,7 +21,7 @@ Array [ Object { "code": "color-no-invalid-hex", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/color-no-invalid-hex", + "href": "https://stylelint.io/user-guide/rules/color-no-invalid-hex", }, "message": "Unexpected invalid hex color \\"#y3\\" (color-no-invalid-hex)", "range": Object { @@ -40,7 +40,7 @@ Array [ Object { "code": "indentation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/indentation", + "href": "https://stylelint.io/user-guide/rules/indentation", }, "message": "Expected indentation of 4 spaces (indentation)", "range": Object { @@ -64,7 +64,7 @@ Array [ Object { "code": "indentation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/indentation", + "href": "https://stylelint.io/user-guide/rules/indentation", }, "message": "Expected indentation of 4 spaces (indentation)", "range": Object { diff --git a/test/e2e/__tests__/__snapshots__/report-descriptionless-disables.ts.snap b/test/e2e/__tests__/__snapshots__/report-descriptionless-disables.ts.snap new file mode 100644 index 00000000..602fefad --- /dev/null +++ b/test/e2e/__tests__/__snapshots__/report-descriptionless-disables.ts.snap @@ -0,0 +1,22 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`"stylelint.reportDescriptionlessDisables" setting should report invalid-scope disables when enabled 1`] = ` +Array [ + Object { + "code": "--report-descriptionless-disables", + "message": "Disable for \\"indentation\\" is missing a description", + "range": Object { + "end": Object { + "character": 5, + "line": 2, + }, + "start": Object { + "character": 4, + "line": 2, + }, + }, + "severity": 1, + "source": "Stylelint", + }, +] +`; diff --git a/test/e2e/__tests__/__snapshots__/validate.ts.snap b/test/e2e/__tests__/__snapshots__/validate.ts.snap index dbc211b3..8827f0d1 100644 --- a/test/e2e/__tests__/__snapshots__/validate.ts.snap +++ b/test/e2e/__tests__/__snapshots__/validate.ts.snap @@ -5,7 +5,7 @@ Array [ Object { "code": "indentation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/indentation", + "href": "https://stylelint.io/user-guide/rules/indentation", }, "message": "Expected indentation of 4 spaces (indentation)", "range": Object { diff --git a/test/e2e/__tests__/report-descriptionless-disables.ts b/test/e2e/__tests__/report-descriptionless-disables.ts new file mode 100644 index 00000000..7a55834c --- /dev/null +++ b/test/e2e/__tests__/report-descriptionless-disables.ts @@ -0,0 +1,17 @@ +import path from 'path'; +import { normalizeDiagnostic } from '../utils'; + +describe('"stylelint.reportDescriptionlessDisables" setting', () => { + it('should report invalid-scope disables when enabled', async () => { + const { document } = await openDocument( + path.resolve(workspaceDir, 'descriptionless-disables/test.css'), + ); + const diagnostics = await waitForDiagnostics(document); + + expect( + diagnostics + .map(normalizeDiagnostic) + .filter((diagnostic) => diagnostic?.code === '--report-descriptionless-disables'), + ).toMatchSnapshot(); + }); +}); diff --git a/test/e2e/workspace/descriptionless-disables/.vscode/settings.json b/test/e2e/workspace/descriptionless-disables/.vscode/settings.json new file mode 100644 index 00000000..dd04f773 --- /dev/null +++ b/test/e2e/workspace/descriptionless-disables/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "stylelint.reportDescriptionlessDisables": true, +} diff --git a/test/e2e/workspace/descriptionless-disables/stylelint.config.js b/test/e2e/workspace/descriptionless-disables/stylelint.config.js new file mode 100644 index 00000000..4939bf57 --- /dev/null +++ b/test/e2e/workspace/descriptionless-disables/stylelint.config.js @@ -0,0 +1,7 @@ +'use strict'; + +module.exports = { + rules: { + indentation: [4], + }, +}; diff --git a/test/e2e/workspace/descriptionless-disables/test.css b/test/e2e/workspace/descriptionless-disables/test.css new file mode 100644 index 00000000..54021f01 --- /dev/null +++ b/test/e2e/workspace/descriptionless-disables/test.css @@ -0,0 +1,10 @@ +/* prettier-ignore */ +a { + /* stylelint-disable-next-line indentation */ + color: #fff; +} + +a { + /* stylelint-disable-next-line indentation -- with a description */ + color: #fff; +} diff --git a/test/e2e/workspace/workspace.code-workspace b/test/e2e/workspace/workspace.code-workspace index e7e1e86f..ead5efac 100644 --- a/test/e2e/workspace/workspace.code-workspace +++ b/test/e2e/workspace/workspace.code-workspace @@ -4,6 +4,7 @@ { "path": "config" }, { "path": "custom-syntax" }, { "path": "defaults" }, + { "path": "descriptionless-disables" }, { "path": "ignore-disables" }, { "path": "report-disables" }, { "path": "stylelint-path" }, diff --git a/test/integration/stylelint-vscode/__snapshots__/test.ts.snap b/test/integration/stylelint-vscode/__snapshots__/test.ts.snap index 92bb4216..06849453 100644 --- a/test/integration/stylelint-vscode/__snapshots__/test.ts.snap +++ b/test/integration/stylelint-vscode/__snapshots__/test.ts.snap @@ -29,7 +29,7 @@ Array [ Object { "code": "string-quotes", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/string-quotes", + "href": "https://stylelint.io/user-guide/rules/string-quotes", }, "message": "Expected single quotes (string-quotes)", "range": Object { @@ -48,7 +48,7 @@ Array [ Object { "code": "indentation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/indentation", + "href": "https://stylelint.io/user-guide/rules/indentation", }, "message": "Expected indentation of 0 tabs (indentation)", "range": Object { @@ -172,35 +172,14 @@ exports[`StylelintRunner should reject with a reason when it takes incorrect opt Invalid option value \\"foo\\" for rule \\"color-hex-case\\"" `; -exports[`StylelintRunner should support \`processors\` option 1`] = ` -Array [ - Object { - "code": "CssSyntaxError", - "message": "Unclosed string (CssSyntaxError)", - "range": Object { - "end": Object { - "character": 10, - "line": 0, - }, - "start": Object { - "character": 9, - "line": 0, - }, - }, - "severity": 1, - "source": "Stylelint", - }, -] -`; - exports[`StylelintRunner should support CSS-in-JS with customSyntax 1`] = ` Array [ Object { "code": "font-weight-notation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/font-weight-notation", + "href": "https://stylelint.io/user-guide/rules/font-weight-notation", }, - "message": "Expected numeric font-weight notation (font-weight-notation)", + "message": "Expected \\"bold\\" to be \\"700\\" (font-weight-notation)", "range": Object { "end": Object { "character": 30, @@ -217,9 +196,9 @@ Array [ Object { "code": "font-weight-notation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/font-weight-notation", + "href": "https://stylelint.io/user-guide/rules/font-weight-notation", }, - "message": "Expected numeric font-weight notation (font-weight-notation)", + "message": "Expected \\"normal\\" to be \\"400\\" (font-weight-notation)", "range": Object { "end": Object { "character": 7, @@ -241,7 +220,7 @@ Array [ Object { "code": "length-zero-no-unit", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/length-zero-no-unit", + "href": "https://stylelint.io/user-guide/rules/length-zero-no-unit", }, "message": "Unexpected unit (length-zero-no-unit)", "range": Object { @@ -266,7 +245,7 @@ Object { Object { "code": "selector-type-no-unknown", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/selector-type-no-unknown", + "href": "https://stylelint.io/user-guide/rules/selector-type-no-unknown", }, "message": "Unexpected unknown type selector \\"unknown\\" (selector-type-no-unknown)", "range": Object { @@ -322,7 +301,7 @@ Object { Object { "code": "indentation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/indentation", + "href": "https://stylelint.io/user-guide/rules/indentation", }, "message": "Expected indentation of 2 spaces (indentation)", "range": Object { @@ -342,6 +321,61 @@ Object { } `; +exports[`StylelintRunner with reportDescriptionlessDisables should work properly if reportDescriptionlessDisables is true 1`] = ` +Object { + "diagnostics": Array [ + Object { + "code": "--report-descriptionless-disables", + "message": "Disable for \\"indentation\\" is missing a description", + "range": Object { + "end": Object { + "character": 5, + "line": 2, + }, + "start": Object { + "character": 4, + "line": 2, + }, + }, + "severity": 1, + "source": "Stylelint", + }, + Object { + "code": "--report-descriptionless-disables", + "message": "Disable for \\"indentation\\" is missing a description", + "range": Object { + "end": Object { + "character": 1, + "line": 5, + }, + "start": Object { + "character": 0, + "line": 5, + }, + }, + "severity": 1, + "source": "Stylelint", + }, + Object { + "code": "--report-descriptionless-disables", + "message": "Disable for \\"indentation\\" is missing a description", + "range": Object { + "end": Object { + "character": 15, + "line": 11, + }, + "start": Object { + "character": 14, + "line": 11, + }, + }, + "severity": 1, + "source": "Stylelint", + }, + ], +} +`; + exports[`StylelintRunner with reportInvalidScopeDisables should work properly if reportInvalidScopeDisables is true 1`] = ` Object { "diagnostics": Array [ @@ -403,7 +437,7 @@ Object { Object { "code": "indentation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/indentation", + "href": "https://stylelint.io/user-guide/rules/indentation", }, "message": "Expected indentation of 4 spaces (indentation)", "range": Object { @@ -516,7 +550,7 @@ Object { Object { "code": "indentation", "codeDescription": Object { - "href": "https://stylelint.io/user-guide/rules/list/indentation", + "href": "https://stylelint.io/user-guide/rules/indentation", }, "message": "Expected indentation of 2 spaces (indentation)", "range": Object { diff --git a/test/integration/stylelint-vscode/no-unknown.config.js b/test/integration/stylelint-vscode/no-unknown.config.js index 524de624..08433afc 100644 --- a/test/integration/stylelint-vscode/no-unknown.config.js +++ b/test/integration/stylelint-vscode/no-unknown.config.js @@ -1,11 +1,9 @@ 'use strict'; -const baseConfig = require('./stylelint.config'); - module.exports = { - ...baseConfig, + customSyntax: '@stylelint/postcss-css-in-js', rules: { - ...baseConfig.rules, + 'length-zero-no-unit': true, 'property-no-unknown': [true, { ignoreProperties: 'what' }], }, }; diff --git a/test/integration/stylelint-vscode/test.ts b/test/integration/stylelint-vscode/test.ts index 2e525fe6..36e2e651 100644 --- a/test/integration/stylelint-vscode/test.ts +++ b/test/integration/stylelint-vscode/test.ts @@ -2,6 +2,8 @@ import { join, resolve } from 'path'; import { pathToFileURL } from 'url'; import { TextDocument } from 'vscode-languageserver-textdocument'; import { StylelintRunner } from '../../../src/utils/stylelint'; +import { version as stylelintVersion } from 'stylelint/package.json'; +import semver from 'semver'; const createDocument = (uri: string | null, languageId: string, contents: string): TextDocument => TextDocument.create( @@ -157,21 +159,42 @@ a { color: #000 } expect(result.diagnostics).toEqual([]); }); - test('should support `processors` option', async () => { - expect.assertions(1); - const runner = new StylelintRunner(); - const result = await runner.lintDocument( - createDocument('processors.tsx', 'typescriptreact', 'styled.p`"`'), - { - config: { - processors: ['stylelint-processor-styled-components'], - rules: {}, + if (semver.satisfies(stylelintVersion, '^14')) { + test('should support `processors` option', async () => { + expect.assertions(1); + const runner = new StylelintRunner(); + const result = await runner.lintDocument( + createDocument('processors.tsx', 'typescriptreact', 'styled.p`"`'), + { + config: { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- for stylelint v14 + // @ts-ignore for stylelint v14 + processors: ['stylelint-processor-styled-components'], + rules: {}, + }, }, - }, - ); - - expect(result.diagnostics).toMatchSnapshot(); - }); + ); + + expect(result.diagnostics).toEqual([ + { + code: 'CssSyntaxError', + message: 'Unclosed string (CssSyntaxError)', + range: { + end: { + character: 10, + line: 0, + }, + start: { + character: 9, + line: 0, + }, + }, + severity: 1, + source: 'Stylelint', + }, + ]); + }); + } test('should check CSS syntax even if no configuration is provided', async () => { expect.assertions(1); @@ -436,6 +459,52 @@ describe('StylelintRunner with customSyntax', () => { }); }); +describe('StylelintRunner with reportDescriptionlessDisables', () => { + test('should work properly if reportDescriptionlessDisables is true', async () => { + expect.assertions(1); + const runner = new StylelintRunner(); + const result = await runner.lintDocument( + createDocument( + 'test.css', + 'css', + ` +.baz { + /* stylelint-disable-next-line indentation */ + color: red; +} +/* stylelint-disable indentation */ +.baz { + color: red; +} +/* stylelint-enable indentation */ +.baz { + color: red; /* stylelint-disable-line indentation */ +} + +.baz { + /* stylelint-disable-next-line indentation -- with a description */ + color: red; +} +/* stylelint-disable indentation -- with a description */ +.baz { + color: red; +} +/* stylelint-enable indentation */ +.baz { + color: red; /* stylelint-disable-line indentation -- with a description */ +} +`, + ), + { + config: { rules: { indentation: [4] } }, + reportDescriptionlessDisables: true, + }, + ); + + expect(result).toMatchSnapshot(); + }); +}); + describe('StylelintRunner with reportNeedlessDisables', () => { test('should work properly if reportNeedlessDisables is true', async () => { expect.assertions(1); diff --git a/test/unit/server-mocks.ts b/test/unit/server-mocks.ts index 3021c4ba..d0030760 100644 --- a/test/unit/server-mocks.ts +++ b/test/unit/server-mocks.ts @@ -468,6 +468,7 @@ export function getOptions(): LanguageServerOptions { customSyntax: '', ignoreDisables: false, packageManager: 'npm', + reportDescriptionlessDisables: false, reportInvalidScopeDisables: false, reportNeedlessDisables: false, snippet: ['css', 'postcss'], diff --git a/tsconfig.test.json b/tsconfig.test.json index de0b34a4..7b581d3d 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -2,7 +2,8 @@ "extends": "./tsconfig.base.json", "compilerOptions": { "typeRoots": ["./types", "./node_modules/@types"], - "noEmit": true + "noEmit": true, + "isolatedModules": true }, "include": ["src/**/*", "test/**/*", "__mocks__/**/*", "types/*.d.ts"], "exclude": ["**/coverage", "test/e2e/workspace"]